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
path: root/source
diff options
context:
space:
mode:
authorNick Samarin <nicks1987@bigmir.net>2010-10-03 20:28:28 +0400
committerNick Samarin <nicks1987@bigmir.net>2010-10-03 20:28:28 +0400
commit90ab716cd5214b23f98fa7bc31b5df002a198fa7 (patch)
tree8427f09c85826fbdb8187e1868c6bc95f8a20e5c /source
parentee0f4e8d76f603a9f3a5f6b037ad4b98084cda42 (diff)
parentcfc4399ab3dfd2ec3346ec087e835664e04b1599 (diff)
synched with trunk at revision 32129
Diffstat (limited to 'source')
-rw-r--r--source/Makefile27
-rw-r--r--source/SConscript10
-rw-r--r--source/blender/Makefile2
-rw-r--r--source/blender/avi/CMakeLists.txt3
-rw-r--r--source/blender/avi/Makefile2
-rw-r--r--source/blender/avi/intern/Makefile2
-rw-r--r--source/blender/avi/intern/avi.c2
-rw-r--r--source/blender/avi/intern/avi_intern.h2
-rw-r--r--source/blender/blenfont/CMakeLists.txt13
-rw-r--r--source/blender/blenfont/Makefile2
-rw-r--r--source/blender/blenfont/SConscript4
-rw-r--r--source/blender/blenfont/intern/Makefile2
-rw-r--r--source/blender/blenfont/intern/blf_font.c41
-rw-r--r--source/blender/blenfont/intern/blf_lang.c1
-rw-r--r--source/blender/blenkernel/BKE_blender.h4
-rw-r--r--source/blender/blenkernel/BKE_brush.h2
-rw-r--r--source/blender/blenkernel/BKE_cloth.h54
-rw-r--r--source/blender/blenkernel/BKE_collision.h18
-rw-r--r--source/blender/blenkernel/BKE_constraint.h1
-rw-r--r--source/blender/blenkernel/BKE_curve.h6
-rw-r--r--source/blender/blenkernel/BKE_customdata.h2
-rw-r--r--source/blender/blenkernel/BKE_deform.h2
-rw-r--r--source/blender/blenkernel/BKE_effect.h1
-rw-r--r--source/blender/blenkernel/BKE_exotic.h4
-rw-r--r--source/blender/blenkernel/BKE_fcurve.h1
-rw-r--r--source/blender/blenkernel/BKE_idcode.h75
-rw-r--r--source/blender/blenkernel/BKE_image.h2
-rw-r--r--source/blender/blenkernel/BKE_material.h7
-rw-r--r--source/blender/blenkernel/BKE_mball.h1
-rw-r--r--source/blender/blenkernel/BKE_modifier.h3
-rw-r--r--source/blender/blenkernel/BKE_multires.h2
-rw-r--r--source/blender/blenkernel/BKE_node.h2
-rw-r--r--source/blender/blenkernel/BKE_particle.h3
-rw-r--r--source/blender/blenkernel/BKE_pointcache.h4
-rw-r--r--source/blender/blenkernel/BKE_sca.h6
-rw-r--r--source/blender/blenkernel/BKE_sequencer.h22
-rw-r--r--source/blender/blenkernel/BKE_texture.h1
-rw-r--r--source/blender/blenkernel/BKE_unit.h7
-rw-r--r--source/blender/blenkernel/CMakeLists.txt47
-rw-r--r--source/blender/blenkernel/Makefile2
-rw-r--r--source/blender/blenkernel/SConscript52
-rw-r--r--source/blender/blenkernel/intern/BME_Customdata.c2
-rw-r--r--source/blender/blenkernel/intern/BME_conversions.c7
-rw-r--r--source/blender/blenkernel/intern/DerivedMesh.c18
-rw-r--r--source/blender/blenkernel/intern/Makefile2
-rw-r--r--source/blender/blenkernel/intern/action.c10
-rw-r--r--source/blender/blenkernel/intern/anim.c51
-rw-r--r--source/blender/blenkernel/intern/armature.c9
-rw-r--r--source/blender/blenkernel/intern/blender.c17
-rw-r--r--source/blender/blenkernel/intern/boids.c80
-rw-r--r--source/blender/blenkernel/intern/booleanops_mesh.c1
-rw-r--r--source/blender/blenkernel/intern/brush.c19
-rw-r--r--source/blender/blenkernel/intern/cdderivedmesh.c10
-rw-r--r--source/blender/blenkernel/intern/cloth.c12
-rw-r--r--source/blender/blenkernel/intern/collision.c8
-rw-r--r--source/blender/blenkernel/intern/constraint.c259
-rw-r--r--source/blender/blenkernel/intern/context.c14
-rw-r--r--source/blender/blenkernel/intern/curve.c6
-rw-r--r--source/blender/blenkernel/intern/customdata.c4
-rw-r--r--source/blender/blenkernel/intern/deform.c2
-rw-r--r--source/blender/blenkernel/intern/depsgraph.c12
-rw-r--r--source/blender/blenkernel/intern/displist.c62
-rw-r--r--source/blender/blenkernel/intern/effect.c14
-rw-r--r--source/blender/blenkernel/intern/exotic.c1706
-rw-r--r--source/blender/blenkernel/intern/fluidsim.c2
-rw-r--r--source/blender/blenkernel/intern/fmodifier.c11
-rw-r--r--source/blender/blenkernel/intern/font.c10
-rw-r--r--source/blender/blenkernel/intern/group.c9
-rw-r--r--source/blender/blenkernel/intern/idcode.c128
-rw-r--r--source/blender/blenkernel/intern/idprop.c53
-rw-r--r--source/blender/blenkernel/intern/image.c57
-rw-r--r--source/blender/blenkernel/intern/implicit.c18
-rw-r--r--source/blender/blenkernel/intern/ipo.c3
-rw-r--r--source/blender/blenkernel/intern/key.c26
-rw-r--r--source/blender/blenkernel/intern/lattice.c163
-rw-r--r--source/blender/blenkernel/intern/library.c33
-rw-r--r--source/blender/blenkernel/intern/material.c107
-rw-r--r--source/blender/blenkernel/intern/mball.c49
-rw-r--r--source/blender/blenkernel/intern/mesh.c29
-rw-r--r--source/blender/blenkernel/intern/modifier.c41
-rw-r--r--source/blender/blenkernel/intern/multires.c34
-rw-r--r--source/blender/blenkernel/intern/nla.c4
-rw-r--r--source/blender/blenkernel/intern/node.c29
-rw-r--r--source/blender/blenkernel/intern/object.c75
-rw-r--r--source/blender/blenkernel/intern/packedFile.c2
-rw-r--r--source/blender/blenkernel/intern/paint.c1
-rw-r--r--source/blender/blenkernel/intern/particle.c96
-rw-r--r--source/blender/blenkernel/intern/particle_system.c372
-rw-r--r--source/blender/blenkernel/intern/pointcache.c7
-rw-r--r--source/blender/blenkernel/intern/property.c10
-rw-r--r--source/blender/blenkernel/intern/report.c2
-rw-r--r--source/blender/blenkernel/intern/scene.c12
-rw-r--r--source/blender/blenkernel/intern/screen.c4
-rw-r--r--source/blender/blenkernel/intern/seqcache.c2
-rw-r--r--source/blender/blenkernel/intern/seqeffects.c52
-rw-r--r--source/blender/blenkernel/intern/sequencer.c93
-rw-r--r--source/blender/blenkernel/intern/shrinkwrap.c9
-rw-r--r--source/blender/blenkernel/intern/sketch.c3
-rw-r--r--source/blender/blenkernel/intern/smoke.c6
-rw-r--r--source/blender/blenkernel/intern/softbody.c8
-rw-r--r--source/blender/blenkernel/intern/sound.c14
-rw-r--r--source/blender/blenkernel/intern/subsurf_ccg.c6
-rw-r--r--source/blender/blenkernel/intern/text.c6
-rw-r--r--source/blender/blenkernel/intern/texture.c74
-rw-r--r--source/blender/blenkernel/intern/unit.c266
-rw-r--r--source/blender/blenkernel/intern/world.c12
-rw-r--r--source/blender/blenkernel/intern/writeffmpeg.c1
-rw-r--r--source/blender/blenkernel/intern/writeframeserver.c1
-rw-r--r--source/blender/blenlib/BLI_ghash.h7
-rw-r--r--source/blender/blenlib/BLI_listbase.h1
-rw-r--r--source/blender/blenlib/BLI_math_base.h2
-rw-r--r--source/blender/blenlib/BLI_math_color.h11
-rw-r--r--source/blender/blenlib/BLI_math_rotation.h1
-rw-r--r--source/blender/blenlib/BLI_math_vector.h6
-rw-r--r--source/blender/blenlib/BLI_path_util.h1
-rw-r--r--source/blender/blenlib/BLI_rect.h3
-rw-r--r--source/blender/blenlib/BLI_storage.h10
-rw-r--r--source/blender/blenlib/BLI_string.h3
-rw-r--r--source/blender/blenlib/CMakeLists.txt24
-rw-r--r--source/blender/blenlib/Makefile2
-rw-r--r--source/blender/blenlib/intern/BLI_ghash.c2
-rw-r--r--source/blender/blenlib/intern/Makefile2
-rw-r--r--source/blender/blenlib/intern/bpath.c2
-rw-r--r--source/blender/blenlib/intern/dynlib.c2
-rw-r--r--source/blender/blenlib/intern/fileops.c2
-rw-r--r--source/blender/blenlib/intern/listbase.c21
-rw-r--r--source/blender/blenlib/intern/math_base_inline.c5
-rw-r--r--source/blender/blenlib/intern/math_color.c61
-rw-r--r--source/blender/blenlib/intern/math_geom.c12
-rw-r--r--source/blender/blenlib/intern/math_geom_inline.c2
-rw-r--r--source/blender/blenlib/intern/math_matrix.c12
-rw-r--r--source/blender/blenlib/intern/math_rotation.c22
-rw-r--r--source/blender/blenlib/intern/math_vector.c12
-rw-r--r--source/blender/blenlib/intern/path_util.c67
-rw-r--r--source/blender/blenlib/intern/pbvh.c2
-rw-r--r--source/blender/blenlib/intern/rct.c20
-rw-r--r--source/blender/blenlib/intern/storage.c21
-rw-r--r--source/blender/blenlib/intern/string.c111
-rw-r--r--source/blender/blenlib/intern/winstuff.c1
-rw-r--r--source/blender/blenloader/BLO_readfile.h45
-rw-r--r--source/blender/blenloader/CMakeLists.txt11
-rw-r--r--source/blender/blenloader/Makefile2
-rw-r--r--source/blender/blenloader/intern/Makefile2
-rw-r--r--source/blender/blenloader/intern/readblenentry.c121
-rw-r--r--source/blender/blenloader/intern/readfile.c64
-rw-r--r--source/blender/blenloader/intern/undofile.c3
-rw-r--r--source/blender/blenloader/intern/writefile.c27
-rw-r--r--source/blender/blenpluginapi/CMakeLists.txt11
-rw-r--r--source/blender/blenpluginapi/Makefile2
-rw-r--r--source/blender/blenpluginapi/SConscript4
-rw-r--r--source/blender/blenpluginapi/intern/Makefile2
-rw-r--r--source/blender/collada/CMakeLists.txt4
-rw-r--r--source/blender/collada/DocumentExporter.cpp219
-rw-r--r--source/blender/collada/DocumentImporter.cpp151
-rw-r--r--source/blender/collada/Makefile2
-rw-r--r--source/blender/collada/SConscript11
-rw-r--r--source/blender/editors/Makefile2
-rw-r--r--source/blender/editors/SConscript70
-rw-r--r--source/blender/editors/animation/Makefile2
-rw-r--r--source/blender/editors/animation/anim_channels_defines.c11
-rw-r--r--source/blender/editors/animation/anim_draw.c1
-rw-r--r--source/blender/editors/animation/anim_filter.c37
-rw-r--r--source/blender/editors/animation/anim_ipo_utils.c3
-rw-r--r--source/blender/editors/animation/anim_markers.c16
-rw-r--r--source/blender/editors/animation/anim_ops.c2
-rw-r--r--source/blender/editors/animation/drivers.c24
-rw-r--r--source/blender/editors/animation/fmodifier_ui.c44
-rw-r--r--source/blender/editors/animation/keyframes_draw.c6
-rw-r--r--source/blender/editors/animation/keyframes_edit.c1
-rw-r--r--source/blender/editors/animation/keyframes_general.c8
-rw-r--r--source/blender/editors/animation/keyframing.c13
-rw-r--r--source/blender/editors/animation/keyingsets.c26
-rw-r--r--source/blender/editors/armature/CMakeLists.txt2
-rw-r--r--source/blender/editors/armature/Makefile2
-rw-r--r--source/blender/editors/armature/armature_intern.h2
-rw-r--r--source/blender/editors/armature/armature_ops.c11
-rw-r--r--source/blender/editors/armature/editarmature.c293
-rw-r--r--source/blender/editors/armature/editarmature_generate.c3
-rw-r--r--source/blender/editors/armature/editarmature_retarget.c2
-rw-r--r--source/blender/editors/armature/editarmature_sketch.c4
-rw-r--r--source/blender/editors/armature/meshlaplacian.c1
-rw-r--r--source/blender/editors/armature/poseSlide.c8
-rw-r--r--source/blender/editors/armature/poseUtils.c7
-rw-r--r--source/blender/editors/armature/poselib.c22
-rw-r--r--source/blender/editors/armature/poseobject.c31
-rw-r--r--source/blender/editors/armature/reeb.c9
-rw-r--r--source/blender/editors/curve/Makefile2
-rw-r--r--source/blender/editors/curve/curve_intern.h4
-rw-r--r--source/blender/editors/curve/curve_ops.c8
-rw-r--r--source/blender/editors/curve/editcurve.c62
-rw-r--r--source/blender/editors/curve/editfont.c46
-rw-r--r--source/blender/editors/datafiles/Makefile2
-rw-r--r--source/blender/editors/datafiles/splash.png.c12600
-rw-r--r--source/blender/editors/gpencil/Makefile2
-rw-r--r--source/blender/editors/gpencil/drawgpencil.c51
-rw-r--r--source/blender/editors/gpencil/editaction_gpencil.c14
-rw-r--r--source/blender/editors/gpencil/gpencil_buttons.c12
-rw-r--r--source/blender/editors/gpencil/gpencil_edit.c7
-rw-r--r--source/blender/editors/gpencil/gpencil_ops.c3
-rw-r--r--source/blender/editors/gpencil/gpencil_paint.c49
-rw-r--r--source/blender/editors/include/ED_armature.h12
-rw-r--r--source/blender/editors/include/ED_gpencil.h2
-rw-r--r--source/blender/editors/include/ED_lattice.h33
-rw-r--r--source/blender/editors/include/ED_mesh.h13
-rw-r--r--source/blender/editors/include/ED_screen_types.h10
-rw-r--r--source/blender/editors/include/ED_view3d.h11
-rw-r--r--source/blender/editors/include/UI_icons.h10
-rw-r--r--source/blender/editors/include/UI_interface.h29
-rw-r--r--source/blender/editors/interface/Makefile2
-rw-r--r--source/blender/editors/interface/SConscript6
-rw-r--r--source/blender/editors/interface/interface.c60
-rw-r--r--source/blender/editors/interface/interface_anim.c42
-rw-r--r--source/blender/editors/interface/interface_draw.c48
-rw-r--r--source/blender/editors/interface/interface_handlers.c246
-rw-r--r--source/blender/editors/interface/interface_icons.c8
-rw-r--r--source/blender/editors/interface/interface_intern.h9
-rw-r--r--source/blender/editors/interface/interface_layout.c25
-rw-r--r--source/blender/editors/interface/interface_ops.c15
-rw-r--r--source/blender/editors/interface/interface_panel.c1
-rw-r--r--source/blender/editors/interface/interface_regions.c4
-rw-r--r--source/blender/editors/interface/interface_style.c4
-rw-r--r--source/blender/editors/interface/interface_templates.c223
-rw-r--r--source/blender/editors/interface/interface_widgets.c44
-rw-r--r--source/blender/editors/interface/resources.c9
-rw-r--r--source/blender/editors/interface/view2d.c1
-rw-r--r--source/blender/editors/interface/view2d_ops.c2
-rw-r--r--source/blender/editors/mesh/CMakeLists.txt2
-rw-r--r--source/blender/editors/mesh/Makefile2
-rw-r--r--source/blender/editors/mesh/editface.c9
-rw-r--r--source/blender/editors/mesh/editmesh.c21
-rw-r--r--source/blender/editors/mesh/editmesh_add.c29
-rw-r--r--source/blender/editors/mesh/editmesh_lib.c4
-rw-r--r--source/blender/editors/mesh/editmesh_loop.c6
-rw-r--r--source/blender/editors/mesh/editmesh_mods.c12
-rw-r--r--source/blender/editors/mesh/editmesh_tools.c21
-rw-r--r--source/blender/editors/mesh/loopcut.c6
-rw-r--r--source/blender/editors/mesh/mesh_data.c89
-rw-r--r--source/blender/editors/mesh/mesh_intern.h2
-rw-r--r--source/blender/editors/mesh/mesh_ops.c6
-rw-r--r--source/blender/editors/mesh/meshtools.c15
-rw-r--r--source/blender/editors/metaball/Makefile2
-rw-r--r--source/blender/editors/metaball/mball_edit.c54
-rw-r--r--source/blender/editors/object/CMakeLists.txt2
-rw-r--r--source/blender/editors/object/Makefile2
-rw-r--r--source/blender/editors/object/SConscript2
-rw-r--r--source/blender/editors/object/object_add.c32
-rw-r--r--source/blender/editors/object/object_bake.c21
-rw-r--r--source/blender/editors/object/object_constraint.c5
-rw-r--r--source/blender/editors/object/object_edit.c42
-rw-r--r--source/blender/editors/object/object_group.c3
-rw-r--r--source/blender/editors/object/object_hook.c13
-rw-r--r--source/blender/editors/object/object_intern.h5
-rw-r--r--source/blender/editors/object/object_lattice.c117
-rw-r--r--source/blender/editors/object/object_modifier.c26
-rw-r--r--source/blender/editors/object/object_ops.c11
-rw-r--r--source/blender/editors/object/object_relations.c24
-rw-r--r--source/blender/editors/object/object_select.c6
-rw-r--r--source/blender/editors/object/object_shapekey.c6
-rw-r--r--source/blender/editors/object/object_transform.c36
-rw-r--r--source/blender/editors/object/object_vgroup.c33
-rw-r--r--source/blender/editors/physics/CMakeLists.txt2
-rw-r--r--source/blender/editors/physics/Makefile2
-rw-r--r--source/blender/editors/physics/particle_edit.c9
-rw-r--r--source/blender/editors/physics/particle_object.c8
-rw-r--r--source/blender/editors/physics/physics_fluid.c2
-rw-r--r--source/blender/editors/render/CMakeLists.txt11
-rw-r--r--source/blender/editors/render/Makefile2
-rw-r--r--source/blender/editors/render/render_internal.c46
-rw-r--r--source/blender/editors/render/render_opengl.c24
-rw-r--r--source/blender/editors/render/render_preview.c16
-rw-r--r--source/blender/editors/render/render_shading.c8
-rw-r--r--source/blender/editors/screen/CMakeLists.txt6
-rw-r--r--source/blender/editors/screen/Makefile2
-rw-r--r--source/blender/editors/screen/SConscript6
-rw-r--r--source/blender/editors/screen/area.c130
-rw-r--r--source/blender/editors/screen/screen_context.c1
-rw-r--r--source/blender/editors/screen/screen_edit.c19
-rw-r--r--source/blender/editors/screen/screen_ops.c62
-rw-r--r--source/blender/editors/screen/screendump.c1
-rw-r--r--source/blender/editors/sculpt_paint/CMakeLists.txt6
-rw-r--r--source/blender/editors/sculpt_paint/Makefile2
-rw-r--r--source/blender/editors/sculpt_paint/SConscript4
-rw-r--r--source/blender/editors/sculpt_paint/paint_image.c75
-rw-r--r--source/blender/editors/sculpt_paint/paint_stroke.c1
-rw-r--r--source/blender/editors/sculpt_paint/paint_utils.c3
-rw-r--r--source/blender/editors/sculpt_paint/paint_vertex.c37
-rw-r--r--source/blender/editors/sculpt_paint/sculpt.c28
-rw-r--r--source/blender/editors/sculpt_paint/sculpt_undo.c4
-rw-r--r--source/blender/editors/sound/CMakeLists.txt6
-rw-r--r--source/blender/editors/sound/Makefile4
-rw-r--r--source/blender/editors/sound/sound_ops.c2
-rw-r--r--source/blender/editors/space_action/CMakeLists.txt5
-rw-r--r--source/blender/editors/space_action/Makefile2
-rw-r--r--source/blender/editors/space_action/action_draw.c8
-rw-r--r--source/blender/editors/space_action/action_edit.c6
-rw-r--r--source/blender/editors/space_action/action_ops.c3
-rw-r--r--source/blender/editors/space_action/action_select.c6
-rw-r--r--source/blender/editors/space_action/space_action.c2
-rw-r--r--source/blender/editors/space_api/CMakeLists.txt4
-rw-r--r--source/blender/editors/space_api/Makefile2
-rw-r--r--source/blender/editors/space_api/space.c3
-rw-r--r--source/blender/editors/space_api/spacetypes.c1
-rw-r--r--source/blender/editors/space_buttons/CMakeLists.txt4
-rw-r--r--source/blender/editors/space_buttons/Makefile2
-rw-r--r--source/blender/editors/space_buttons/buttons_context.c2
-rw-r--r--source/blender/editors/space_buttons/buttons_header.c5
-rw-r--r--source/blender/editors/space_buttons/buttons_ops.c23
-rw-r--r--source/blender/editors/space_buttons/space_buttons.c7
-rw-r--r--source/blender/editors/space_console/CMakeLists.txt4
-rw-r--r--source/blender/editors/space_console/Makefile2
-rw-r--r--source/blender/editors/space_console/SConscript22
-rw-r--r--source/blender/editors/space_console/console_draw.c4
-rw-r--r--source/blender/editors/space_console/console_ops.c6
-rw-r--r--source/blender/editors/space_console/console_report.c6
-rw-r--r--source/blender/editors/space_console/space_console.c6
-rw-r--r--source/blender/editors/space_file/CMakeLists.txt9
-rw-r--r--source/blender/editors/space_file/Makefile4
-rw-r--r--source/blender/editors/space_file/SConscript4
-rw-r--r--source/blender/editors/space_file/file_draw.c38
-rw-r--r--source/blender/editors/space_file/file_intern.h6
-rw-r--r--source/blender/editors/space_file/file_ops.c189
-rw-r--r--source/blender/editors/space_file/file_panels.c6
-rw-r--r--source/blender/editors/space_file/filelist.c25
-rw-r--r--source/blender/editors/space_file/filelist.h1
-rw-r--r--source/blender/editors/space_file/filesel.c37
-rw-r--r--source/blender/editors/space_file/fsmenu.c13
-rw-r--r--source/blender/editors/space_file/space_file.c3
-rw-r--r--source/blender/editors/space_file/writeimage.c2
-rw-r--r--source/blender/editors/space_graph/CMakeLists.txt4
-rw-r--r--source/blender/editors/space_graph/Makefile4
-rw-r--r--source/blender/editors/space_graph/graph_buttons.c23
-rw-r--r--source/blender/editors/space_graph/graph_draw.c7
-rw-r--r--source/blender/editors/space_graph/graph_edit.c10
-rw-r--r--source/blender/editors/space_graph/graph_ops.c2
-rw-r--r--source/blender/editors/space_graph/graph_select.c6
-rw-r--r--source/blender/editors/space_graph/graph_utils.c11
-rw-r--r--source/blender/editors/space_graph/space_graph.c1
-rw-r--r--source/blender/editors/space_image/CMakeLists.txt8
-rw-r--r--source/blender/editors/space_image/Makefile2
-rw-r--r--source/blender/editors/space_image/SConscript8
-rw-r--r--source/blender/editors/space_image/image_buttons.c24
-rw-r--r--source/blender/editors/space_image/image_draw.c2
-rw-r--r--source/blender/editors/space_image/image_header.c8
-rw-r--r--source/blender/editors/space_image/image_ops.c60
-rw-r--r--source/blender/editors/space_image/image_render.c2
-rw-r--r--source/blender/editors/space_image/space_image.c7
-rw-r--r--source/blender/editors/space_info/CMakeLists.txt4
-rw-r--r--source/blender/editors/space_info/Makefile2
-rw-r--r--source/blender/editors/space_info/info_ops.c3
-rw-r--r--source/blender/editors/space_info/info_stats.c3
-rw-r--r--source/blender/editors/space_info/space_info.c2
-rw-r--r--source/blender/editors/space_logic/CMakeLists.txt4
-rw-r--r--source/blender/editors/space_logic/Makefile2
-rw-r--r--source/blender/editors/space_logic/SConscript2
-rw-r--r--source/blender/editors/space_logic/logic_buttons.c10
-rw-r--r--source/blender/editors/space_logic/logic_ops.c1
-rw-r--r--source/blender/editors/space_logic/logic_window.c258
-rw-r--r--source/blender/editors/space_logic/space_logic.c2
-rw-r--r--source/blender/editors/space_nla/CMakeLists.txt4
-rw-r--r--source/blender/editors/space_nla/Makefile2
-rw-r--r--source/blender/editors/space_nla/nla_buttons.c37
-rw-r--r--source/blender/editors/space_nla/nla_channels.c44
-rw-r--r--source/blender/editors/space_nla/nla_draw.c12
-rw-r--r--source/blender/editors/space_nla/nla_edit.c3
-rw-r--r--source/blender/editors/space_nla/nla_ops.c4
-rw-r--r--source/blender/editors/space_nla/nla_select.c2
-rw-r--r--source/blender/editors/space_nla/space_nla.c5
-rw-r--r--source/blender/editors/space_node/CMakeLists.txt10
-rw-r--r--source/blender/editors/space_node/Makefile2
-rw-r--r--source/blender/editors/space_node/SConscript14
-rw-r--r--source/blender/editors/space_node/drawnode.c159
-rw-r--r--source/blender/editors/space_node/node_buttons.c7
-rw-r--r--source/blender/editors/space_node/node_draw.c21
-rw-r--r--source/blender/editors/space_node/node_edit.c33
-rw-r--r--source/blender/editors/space_node/node_header.c16
-rw-r--r--source/blender/editors/space_node/node_ops.c1
-rw-r--r--source/blender/editors/space_node/node_select.c3
-rw-r--r--source/blender/editors/space_node/node_state.c1
-rw-r--r--source/blender/editors/space_node/space_node.c21
-rw-r--r--source/blender/editors/space_outliner/CMakeLists.txt6
-rw-r--r--source/blender/editors/space_outliner/Makefile2
-rw-r--r--source/blender/editors/space_outliner/outliner.c172
-rw-r--r--source/blender/editors/space_outliner/space_outliner.c19
-rw-r--r--source/blender/editors/space_script/CMakeLists.txt6
-rw-r--r--source/blender/editors/space_script/Makefile2
-rw-r--r--source/blender/editors/space_script/SConscript2
-rw-r--r--source/blender/editors/space_script/script_edit.c5
-rw-r--r--source/blender/editors/space_script/script_header.c4
-rw-r--r--source/blender/editors/space_script/script_ops.c3
-rw-r--r--source/blender/editors/space_script/space_script.c1
-rw-r--r--source/blender/editors/space_sequencer/CMakeLists.txt4
-rw-r--r--source/blender/editors/space_sequencer/Makefile3
-rw-r--r--source/blender/editors/space_sequencer/sequencer_add.c12
-rw-r--r--source/blender/editors/space_sequencer/sequencer_buttons.c3
-rw-r--r--source/blender/editors/space_sequencer/sequencer_draw.c101
-rw-r--r--source/blender/editors/space_sequencer/sequencer_edit.c29
-rw-r--r--source/blender/editors/space_sequencer/sequencer_ops.c13
-rw-r--r--source/blender/editors/space_sequencer/sequencer_select.c6
-rw-r--r--source/blender/editors/space_sound/CMakeLists.txt4
-rw-r--r--source/blender/editors/space_sound/Makefile4
-rw-r--r--source/blender/editors/space_sound/sound_header.c1
-rw-r--r--source/blender/editors/space_sound/space_sound.c2
-rw-r--r--source/blender/editors/space_text/CMakeLists.txt6
-rw-r--r--source/blender/editors/space_text/Makefile2
-rw-r--r--source/blender/editors/space_text/SConscript2
-rw-r--r--source/blender/editors/space_text/space_text.c24
-rw-r--r--source/blender/editors/space_text/text_draw.c46
-rw-r--r--source/blender/editors/space_text/text_header.c9
-rw-r--r--source/blender/editors/space_text/text_ops.c11
-rw-r--r--source/blender/editors/space_time/CMakeLists.txt4
-rw-r--r--source/blender/editors/space_time/Makefile2
-rw-r--r--source/blender/editors/space_time/space_time.c15
-rw-r--r--source/blender/editors/space_time/time_ops.c2
-rw-r--r--source/blender/editors/space_userpref/CMakeLists.txt2
-rw-r--r--source/blender/editors/space_userpref/Makefile2
-rw-r--r--source/blender/editors/space_userpref/space_userpref.c1
-rw-r--r--source/blender/editors/space_view3d/CMakeLists.txt10
-rw-r--r--source/blender/editors/space_view3d/Makefile2
-rw-r--r--source/blender/editors/space_view3d/SConscript4
-rw-r--r--source/blender/editors/space_view3d/drawanimviz.c13
-rw-r--r--source/blender/editors/space_view3d/drawarmature.c71
-rw-r--r--source/blender/editors/space_view3d/drawmesh.c7
-rw-r--r--source/blender/editors/space_view3d/drawobject.c55
-rw-r--r--source/blender/editors/space_view3d/drawvolume.c4
-rw-r--r--source/blender/editors/space_view3d/space_view3d.c79
-rw-r--r--source/blender/editors/space_view3d/view3d_buttons.c17
-rw-r--r--source/blender/editors/space_view3d/view3d_draw.c227
-rw-r--r--source/blender/editors/space_view3d/view3d_edit.c90
-rw-r--r--source/blender/editors/space_view3d/view3d_header.c22
-rw-r--r--source/blender/editors/space_view3d/view3d_intern.h17
-rw-r--r--source/blender/editors/space_view3d/view3d_ops.c10
-rw-r--r--source/blender/editors/space_view3d/view3d_select.c134
-rw-r--r--source/blender/editors/space_view3d/view3d_snap.c93
-rw-r--r--source/blender/editors/space_view3d/view3d_toolbar.c12
-rw-r--r--source/blender/editors/space_view3d/view3d_view.c27
-rw-r--r--source/blender/editors/transform/CMakeLists.txt4
-rw-r--r--source/blender/editors/transform/Makefile2
-rw-r--r--source/blender/editors/transform/SConscript2
-rw-r--r--source/blender/editors/transform/transform.c33
-rw-r--r--source/blender/editors/transform/transform.h2
-rw-r--r--source/blender/editors/transform/transform_constraints.c2
-rw-r--r--source/blender/editors/transform/transform_conversions.c132
-rw-r--r--source/blender/editors/transform/transform_generics.c21
-rw-r--r--source/blender/editors/transform/transform_manipulator.c17
-rw-r--r--source/blender/editors/transform/transform_ops.c11
-rw-r--r--source/blender/editors/transform/transform_orientations.c1
-rw-r--r--source/blender/editors/transform/transform_snap.c7
-rw-r--r--source/blender/editors/util/CMakeLists.txt4
-rw-r--r--source/blender/editors/util/Makefile2
-rw-r--r--source/blender/editors/util/ed_util.c1
-rw-r--r--source/blender/editors/util/editmode_undo.c2
-rw-r--r--source/blender/editors/util/numinput.c2
-rw-r--r--source/blender/editors/util/undo.c7
-rw-r--r--source/blender/editors/uvedit/CMakeLists.txt6
-rw-r--r--source/blender/editors/uvedit/Makefile2
-rw-r--r--source/blender/editors/uvedit/uvedit_draw.c2
-rw-r--r--source/blender/editors/uvedit/uvedit_ops.c3
-rw-r--r--source/blender/editors/uvedit/uvedit_unwrap_ops.c4
-rw-r--r--source/blender/gpu/CMakeLists.txt15
-rw-r--r--source/blender/gpu/Makefile2
-rw-r--r--source/blender/gpu/intern/Makefile2
-rw-r--r--source/blender/gpu/intern/gpu_buffers.c4
-rw-r--r--source/blender/gpu/intern/gpu_codegen.c3
-rw-r--r--source/blender/gpu/intern/gpu_draw.c4
-rw-r--r--source/blender/gpu/intern/gpu_extensions.c5
-rw-r--r--source/blender/gpu/intern/gpu_material.c6
-rw-r--r--source/blender/ikplugin/BIK_api.h1
-rw-r--r--source/blender/ikplugin/CMakeLists.txt23
-rw-r--r--source/blender/ikplugin/Makefile2
-rw-r--r--source/blender/ikplugin/SConscript6
-rw-r--r--source/blender/ikplugin/intern/Makefile5
-rw-r--r--source/blender/ikplugin/intern/ikplugin_api.c13
-rw-r--r--source/blender/ikplugin/intern/itasc_plugin.cpp2
-rw-r--r--source/blender/imbuf/CMakeLists.txt10
-rw-r--r--source/blender/imbuf/IMB_imbuf.h2
-rw-r--r--source/blender/imbuf/Makefile2
-rw-r--r--source/blender/imbuf/SConscript4
-rw-r--r--source/blender/imbuf/intern/IMB_filetype.h28
-rw-r--r--source/blender/imbuf/intern/Makefile2
-rw-r--r--source/blender/imbuf/intern/allocimbuf.c3
-rw-r--r--source/blender/imbuf/intern/anim.c2
-rw-r--r--source/blender/imbuf/intern/bmp.c2
-rw-r--r--source/blender/imbuf/intern/cache.c2
-rw-r--r--source/blender/imbuf/intern/cineon/CMakeLists.txt8
-rw-r--r--source/blender/imbuf/intern/cineon/Makefile2
-rw-r--r--source/blender/imbuf/intern/cineon/cineon_dpx.c2
-rw-r--r--source/blender/imbuf/intern/dds/CMakeLists.txt8
-rw-r--r--source/blender/imbuf/intern/dds/Makefile2
-rw-r--r--source/blender/imbuf/intern/dds/SConscript16
-rw-r--r--source/blender/imbuf/intern/dds/dds_api.cpp3
-rw-r--r--source/blender/imbuf/intern/dds/dds_api.h2
-rw-r--r--source/blender/imbuf/intern/filetype.c1
-rw-r--r--source/blender/imbuf/intern/filter.c1
-rw-r--r--source/blender/imbuf/intern/imbuf.h2
-rw-r--r--source/blender/imbuf/intern/iris.c5
-rw-r--r--source/blender/imbuf/intern/jp2.c6
-rw-r--r--source/blender/imbuf/intern/jpeg.c6
-rw-r--r--source/blender/imbuf/intern/module.c1
-rw-r--r--source/blender/imbuf/intern/openexr/Makefile2
-rw-r--r--source/blender/imbuf/intern/openexr/SConscript14
-rw-r--r--source/blender/imbuf/intern/openexr/openexr_api.cpp4
-rw-r--r--source/blender/imbuf/intern/openexr/openexr_api.h2
-rw-r--r--source/blender/imbuf/intern/png.c5
-rw-r--r--source/blender/imbuf/intern/radiance_hdr.c5
-rw-r--r--source/blender/imbuf/intern/readimage.c6
-rw-r--r--source/blender/imbuf/intern/rotate.c3
-rw-r--r--source/blender/imbuf/intern/scaling.c3
-rw-r--r--source/blender/imbuf/intern/targa.c7
-rw-r--r--source/blender/imbuf/intern/thumbs.c9
-rw-r--r--source/blender/imbuf/intern/thumbs_blend.c2
-rw-r--r--source/blender/imbuf/intern/tiff.c6
-rw-r--r--source/blender/imbuf/intern/util.c4
-rw-r--r--source/blender/makesdna/DNA_boid_types.h4
-rw-r--r--source/blender/makesdna/DNA_curve_types.h13
-rw-r--r--source/blender/makesdna/DNA_lattice_types.h10
-rw-r--r--source/blender/makesdna/DNA_modifier_types.h4
-rw-r--r--source/blender/makesdna/DNA_node_types.h1
-rw-r--r--source/blender/makesdna/DNA_object_types.h2
-rw-r--r--source/blender/makesdna/DNA_scene_types.h1
-rw-r--r--source/blender/makesdna/DNA_sequence_types.h14
-rw-r--r--source/blender/makesdna/DNA_space_types.h7
-rw-r--r--source/blender/makesdna/DNA_texture_types.h2
-rw-r--r--source/blender/makesdna/DNA_userdef_types.h6
-rw-r--r--source/blender/makesdna/DNA_vfont_types.h2
-rw-r--r--source/blender/makesdna/DNA_view3d_types.h7
-rw-r--r--source/blender/makesdna/Makefile2
-rw-r--r--source/blender/makesdna/intern/CMakeLists.txt10
-rw-r--r--source/blender/makesdna/intern/Makefile2
-rw-r--r--source/blender/makesdna/intern/SConscript42
-rw-r--r--source/blender/makesdna/intern/makesdna.c7
-rw-r--r--source/blender/makesrna/Makefile2
-rw-r--r--source/blender/makesrna/RNA_access.h7
-rw-r--r--source/blender/makesrna/RNA_define.h5
-rw-r--r--source/blender/makesrna/RNA_enum_types.h2
-rw-r--r--source/blender/makesrna/RNA_types.h11
-rw-r--r--source/blender/makesrna/SConscript40
-rw-r--r--source/blender/makesrna/intern/CMakeLists.txt8
-rw-r--r--source/blender/makesrna/intern/Makefile4
-rw-r--r--source/blender/makesrna/intern/SConscript96
-rw-r--r--source/blender/makesrna/intern/makesrna.c78
-rw-r--r--source/blender/makesrna/intern/rna_ID.c54
-rw-r--r--source/blender/makesrna/intern/rna_access.c227
-rw-r--r--source/blender/makesrna/intern/rna_action.c69
-rw-r--r--source/blender/makesrna/intern/rna_action_api.c26
-rw-r--r--source/blender/makesrna/intern/rna_actuator.c114
-rw-r--r--source/blender/makesrna/intern/rna_animation.c75
-rw-r--r--source/blender/makesrna/intern/rna_animviz.c20
-rw-r--r--source/blender/makesrna/intern/rna_armature.c88
-rw-r--r--source/blender/makesrna/intern/rna_armature_api.c22
-rw-r--r--source/blender/makesrna/intern/rna_boid.c61
-rw-r--r--source/blender/makesrna/intern/rna_brush.c20
-rw-r--r--source/blender/makesrna/intern/rna_camera.c2
-rw-r--r--source/blender/makesrna/intern/rna_cloth.c18
-rw-r--r--source/blender/makesrna/intern/rna_color.c13
-rw-r--r--source/blender/makesrna/intern/rna_constraint.c157
-rw-r--r--source/blender/makesrna/intern/rna_context.c30
-rw-r--r--source/blender/makesrna/intern/rna_controller.c10
-rw-r--r--source/blender/makesrna/intern/rna_curve.c120
-rw-r--r--source/blender/makesrna/intern/rna_define.c39
-rw-r--r--source/blender/makesrna/intern/rna_fcurve.c121
-rw-r--r--source/blender/makesrna/intern/rna_fluidsim.c34
-rw-r--r--source/blender/makesrna/intern/rna_gpencil.c10
-rw-r--r--source/blender/makesrna/intern/rna_group.c2
-rw-r--r--source/blender/makesrna/intern/rna_image.c52
-rw-r--r--source/blender/makesrna/intern/rna_image_api.c2
-rw-r--r--source/blender/makesrna/intern/rna_internal.h12
-rw-r--r--source/blender/makesrna/intern/rna_key.c6
-rw-r--r--source/blender/makesrna/intern/rna_lamp.c40
-rw-r--r--source/blender/makesrna/intern/rna_lattice.c52
-rw-r--r--source/blender/makesrna/intern/rna_main.c18
-rw-r--r--source/blender/makesrna/intern/rna_main_api.c79
-rw-r--r--source/blender/makesrna/intern/rna_material.c281
-rw-r--r--source/blender/makesrna/intern/rna_material_api.c84
-rw-r--r--source/blender/makesrna/intern/rna_mesh.c302
-rw-r--r--source/blender/makesrna/intern/rna_mesh_api.c33
-rw-r--r--source/blender/makesrna/intern/rna_meta.c120
-rw-r--r--source/blender/makesrna/intern/rna_modifier.c205
-rw-r--r--source/blender/makesrna/intern/rna_nla.c14
-rw-r--r--source/blender/makesrna/intern/rna_nodetree.c184
-rw-r--r--source/blender/makesrna/intern/rna_object.c298
-rw-r--r--source/blender/makesrna/intern/rna_object_api.c40
-rw-r--r--source/blender/makesrna/intern/rna_object_force.c143
-rw-r--r--source/blender/makesrna/intern/rna_particle.c224
-rw-r--r--source/blender/makesrna/intern/rna_pose.c128
-rw-r--r--source/blender/makesrna/intern/rna_pose_api.c20
-rw-r--r--source/blender/makesrna/intern/rna_property.c2
-rw-r--r--source/blender/makesrna/intern/rna_render.c28
-rw-r--r--source/blender/makesrna/intern/rna_rna.c41
-rw-r--r--source/blender/makesrna/intern/rna_scene.c431
-rw-r--r--source/blender/makesrna/intern/rna_scene_api.c51
-rw-r--r--source/blender/makesrna/intern/rna_screen.c8
-rw-r--r--source/blender/makesrna/intern/rna_sculpt_paint.c45
-rw-r--r--source/blender/makesrna/intern/rna_sensor.c39
-rw-r--r--source/blender/makesrna/intern/rna_sequencer.c72
-rw-r--r--source/blender/makesrna/intern/rna_smoke.c34
-rw-r--r--source/blender/makesrna/intern/rna_sound.c2
-rw-r--r--source/blender/makesrna/intern/rna_space.c269
-rw-r--r--source/blender/makesrna/intern/rna_text.c40
-rw-r--r--source/blender/makesrna/intern/rna_texture.c99
-rw-r--r--source/blender/makesrna/intern/rna_ui.c35
-rw-r--r--source/blender/makesrna/intern/rna_ui_api.c38
-rw-r--r--source/blender/makesrna/intern/rna_userdef.c171
-rw-r--r--source/blender/makesrna/intern/rna_vfont.c2
-rw-r--r--source/blender/makesrna/intern/rna_wm.c234
-rw-r--r--source/blender/makesrna/intern/rna_wm_api.c86
-rw-r--r--source/blender/makesrna/intern/rna_world.c46
-rw-r--r--source/blender/makesrna/rna_cleanup/rna_booleans.txt1330
-rwxr-xr-xsource/blender/makesrna/rna_cleanup/rna_cleaner.py86
-rwxr-xr-xsource/blender/makesrna/rna_cleanup/rna_cleaner_merge.py61
-rw-r--r--source/blender/makesrna/rna_cleanup/rna_properties.txt7795
-rwxr-xr-xsource/blender/makesrna/rna_cleanup/rna_update.sh13
-rw-r--r--source/blender/modifiers/MOD_modifiertypes.h2
-rw-r--r--source/blender/modifiers/Makefile2
-rw-r--r--source/blender/modifiers/SConscript4
-rw-r--r--source/blender/modifiers/intern/MOD_armature.c2
-rw-r--r--source/blender/modifiers/intern/MOD_array.c8
-rw-r--r--source/blender/modifiers/intern/MOD_bevel.c1
-rw-r--r--source/blender/modifiers/intern/MOD_boolean_util.c2
-rw-r--r--source/blender/modifiers/intern/MOD_build.c2
-rw-r--r--source/blender/modifiers/intern/MOD_cloth.c6
-rw-r--r--source/blender/modifiers/intern/MOD_collision.c4
-rw-r--r--source/blender/modifiers/intern/MOD_curve.c2
-rw-r--r--source/blender/modifiers/intern/MOD_displace.c2
-rw-r--r--source/blender/modifiers/intern/MOD_explode.c2
-rw-r--r--source/blender/modifiers/intern/MOD_lattice.c2
-rw-r--r--source/blender/modifiers/intern/MOD_mask.c6
-rw-r--r--source/blender/modifiers/intern/MOD_multires.c4
-rw-r--r--source/blender/modifiers/intern/MOD_none.c2
-rw-r--r--source/blender/modifiers/intern/MOD_particleinstance.c2
-rw-r--r--source/blender/modifiers/intern/MOD_screw.c240
-rw-r--r--source/blender/modifiers/intern/MOD_shrinkwrap.c2
-rw-r--r--source/blender/modifiers/intern/MOD_solidify.c4
-rw-r--r--source/blender/modifiers/intern/MOD_util.c4
-rw-r--r--source/blender/modifiers/intern/MOD_util.h2
-rw-r--r--source/blender/modifiers/intern/Makefile2
-rw-r--r--source/blender/nodes/CMakeLists.txt19
-rw-r--r--source/blender/nodes/Makefile2
-rw-r--r--source/blender/nodes/SConscript16
-rw-r--r--source/blender/nodes/intern/CMP_nodes/CMP_chromaMatte.c86
-rw-r--r--source/blender/nodes/intern/CMP_nodes/CMP_colorbalance.c15
-rw-r--r--source/blender/nodes/intern/CMP_nodes/CMP_crop.c9
-rw-r--r--source/blender/nodes/intern/CMP_nodes/CMP_displace.c41
-rw-r--r--source/blender/nodes/intern/CMP_nodes/CMP_image.c56
-rw-r--r--source/blender/nodes/intern/CMP_nodes/CMP_levels.c15
-rw-r--r--source/blender/nodes/intern/CMP_nodes/CMP_rotate.c5
-rw-r--r--source/blender/nodes/intern/CMP_nodes/CMP_sepcombHSVA.c2
-rw-r--r--source/blender/nodes/intern/CMP_nodes/Makefile2
-rw-r--r--source/blender/nodes/intern/CMP_util.c2
-rw-r--r--source/blender/nodes/intern/Makefile2
-rw-r--r--source/blender/nodes/intern/SHD_nodes/Makefile2
-rw-r--r--source/blender/nodes/intern/TEX_nodes/Makefile2
-rw-r--r--source/blender/python/CMakeLists.txt2
-rw-r--r--source/blender/python/Makefile2
-rw-r--r--source/blender/python/SConscript8
-rw-r--r--source/blender/python/doc/epy/Geometry.py2
-rw-r--r--source/blender/python/doc/epy/IDProp.py2
-rw-r--r--source/blender/python/doc/examples/mathutils.Euler.py2
-rw-r--r--source/blender/python/doc/examples/mathutils.Matrix.py2
-rw-r--r--source/blender/python/doc/examples/mathutils.Quaternion.py2
-rw-r--r--source/blender/python/doc/examples/mathutils.py6
-rw-r--r--source/blender/python/doc/sphinx_doc_gen.py81
-rwxr-xr-xsource/blender/python/doc/sphinx_doc_gen.sh13
-rw-r--r--source/blender/python/generic/CMakeLists.txt2
-rw-r--r--source/blender/python/generic/IDProp.c41
-rw-r--r--source/blender/python/generic/Makefile2
-rw-r--r--source/blender/python/generic/bgl.c2
-rw-r--r--source/blender/python/generic/blf_api.c6
-rw-r--r--source/blender/python/generic/bpy_internal_import.c32
-rw-r--r--source/blender/python/generic/bpy_internal_import.h3
-rw-r--r--source/blender/python/generic/geometry.c2
-rw-r--r--source/blender/python/generic/mathutils.c443
-rw-r--r--source/blender/python/generic/mathutils_color.c16
-rw-r--r--source/blender/python/generic/mathutils_euler.c12
-rw-r--r--source/blender/python/generic/mathutils_matrix.c450
-rw-r--r--source/blender/python/generic/mathutils_quat.c18
-rw-r--r--source/blender/python/generic/mathutils_vector.c89
-rw-r--r--source/blender/python/generic/noise.c4
-rw-r--r--source/blender/python/generic/py_capi_utils.c438
-rw-r--r--source/blender/python/generic/py_capi_utils.h42
-rw-r--r--source/blender/python/intern/Makefile3
-rw-r--r--source/blender/python/intern/bpy.c10
-rw-r--r--source/blender/python/intern/bpy.h2
-rw-r--r--source/blender/python/intern/bpy_array.c45
-rw-r--r--source/blender/python/intern/bpy_interface.c46
-rw-r--r--source/blender/python/intern/bpy_operator.c87
-rw-r--r--source/blender/python/intern/bpy_operator_wrap.c23
-rw-r--r--source/blender/python/intern/bpy_props.c352
-rw-r--r--source/blender/python/intern/bpy_props.h26
-rw-r--r--source/blender/python/intern/bpy_rna.c1126
-rw-r--r--source/blender/python/intern/bpy_rna.h15
-rw-r--r--source/blender/python/intern/bpy_rna_callback.c29
-rw-r--r--source/blender/python/intern/bpy_util.c183
-rw-r--r--source/blender/python/intern/bpy_util.h13
-rw-r--r--source/blender/quicktime/CMakeLists.txt4
-rw-r--r--source/blender/quicktime/Makefile2
-rw-r--r--source/blender/quicktime/SConscript30
-rw-r--r--source/blender/quicktime/apple/Makefile2
-rw-r--r--source/blender/quicktime/apple/qtkit_import.m12
-rw-r--r--source/blender/quicktime/apple/quicktime_import.c15
-rw-r--r--source/blender/quicktime/quicktime_import.h2
-rw-r--r--source/blender/readblenfile/Makefile2
-rw-r--r--source/blender/readblenfile/intern/BLO_readblenfile.c3
-rw-r--r--source/blender/readblenfile/intern/Makefile2
-rw-r--r--source/blender/readblenfile/stub/Makefile2
-rw-r--r--source/blender/readblenfile/test/Makefile2
-rw-r--r--source/blender/render/CMakeLists.txt21
-rw-r--r--source/blender/render/Makefile2
-rw-r--r--source/blender/render/extern/include/RE_pipeline.h2
-rw-r--r--source/blender/render/extern/include/RE_render_ext.h2
-rw-r--r--source/blender/render/intern/Makefile2
-rw-r--r--source/blender/render/intern/include/renderdatabase.h3
-rw-r--r--source/blender/render/intern/raytrace/bvh.h1
-rw-r--r--source/blender/render/intern/raytrace/rayobject_qbvh.cpp1
-rw-r--r--source/blender/render/intern/raytrace/rayobject_svbvh.cpp2
-rw-r--r--source/blender/render/intern/raytrace/reorganize.h1
-rw-r--r--source/blender/render/intern/source/convertblender.c11
-rw-r--r--source/blender/render/intern/source/imagetexture.c2
-rw-r--r--source/blender/render/intern/source/pipeline.c40
-rw-r--r--source/blender/render/intern/source/pointdensity.c3
-rw-r--r--source/blender/render/intern/source/rendercore.c5
-rw-r--r--source/blender/render/intern/source/renderdatabase.c4
-rw-r--r--source/blender/render/intern/source/shadeinput.c16
-rw-r--r--source/blender/render/intern/source/texture.c5
-rw-r--r--source/blender/verify/Makefile2
-rw-r--r--source/blender/verify/intern/Makefile2
-rw-r--r--source/blender/windowmanager/CMakeLists.txt37
-rw-r--r--source/blender/windowmanager/Makefile2
-rw-r--r--source/blender/windowmanager/SConscript14
-rw-r--r--source/blender/windowmanager/WM_api.h11
-rw-r--r--source/blender/windowmanager/WM_types.h45
-rw-r--r--source/blender/windowmanager/intern/Makefile2
-rw-r--r--source/blender/windowmanager/intern/wm.c19
-rw-r--r--source/blender/windowmanager/intern/wm_cursors.c2
-rw-r--r--source/blender/windowmanager/intern/wm_dragdrop.c2
-rw-r--r--source/blender/windowmanager/intern/wm_draw.c4
-rw-r--r--source/blender/windowmanager/intern/wm_event_system.c60
-rw-r--r--source/blender/windowmanager/intern/wm_files.c44
-rw-r--r--source/blender/windowmanager/intern/wm_init_exit.c115
-rw-r--r--source/blender/windowmanager/intern/wm_keymap.c6
-rw-r--r--source/blender/windowmanager/intern/wm_operators.c126
-rw-r--r--source/blender/windowmanager/intern/wm_window.c40
-rw-r--r--source/blender/windowmanager/wm_event_types.h9
-rw-r--r--source/blender/windowmanager/wm_window.h4
-rw-r--r--source/blenderplayer/CMakeLists.txt25
-rw-r--r--source/blenderplayer/bad_level_call_stubs/CMakeLists.txt3
-rw-r--r--source/blenderplayer/bad_level_call_stubs/Makefile2
-rw-r--r--source/blenderplayer/bad_level_call_stubs/SConscript5
-rw-r--r--source/blenderplayer/bad_level_call_stubs/stubs.c26
-rw-r--r--source/creator/CMakeLists.txt361
-rw-r--r--source/creator/Makefile2
-rw-r--r--source/creator/SConscript30
-rw-r--r--source/creator/creator.c24
-rw-r--r--source/darwin/Makefile2
-rw-r--r--source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp22
-rw-r--r--source/gameengine/BlenderRoutines/CMakeLists.txt2
-rw-r--r--source/gameengine/BlenderRoutines/KX_BlenderInputDevice.h2
-rw-r--r--source/gameengine/BlenderRoutines/KX_BlenderKeyboardDevice.cpp2
-rw-r--r--source/gameengine/BlenderRoutines/KX_BlenderMouseDevice.cpp2
-rw-r--r--source/gameengine/BlenderRoutines/KX_BlenderRenderTools.h2
-rw-r--r--source/gameengine/BlenderRoutines/KX_BlenderSystem.cpp7
-rw-r--r--source/gameengine/BlenderRoutines/Makefile2
-rw-r--r--source/gameengine/BlenderRoutines/SConscript4
-rw-r--r--source/gameengine/Converter/BL_ArmatureChannel.cpp3
-rw-r--r--source/gameengine/Converter/BL_ArmatureObject.cpp1
-rw-r--r--source/gameengine/Converter/BL_ArmatureObject.h2
-rw-r--r--source/gameengine/Converter/BL_BlenderDataConversion.cpp13
-rw-r--r--source/gameengine/Converter/BL_DeformableGameObject.h2
-rw-r--r--source/gameengine/Converter/BL_MeshDeformer.cpp2
-rw-r--r--source/gameengine/Converter/BL_MeshDeformer.h2
-rw-r--r--source/gameengine/Converter/BL_ModifierDeformer.cpp2
-rw-r--r--source/gameengine/Converter/BL_ModifierDeformer.h2
-rw-r--r--source/gameengine/Converter/BL_ShapeDeformer.cpp2
-rw-r--r--source/gameengine/Converter/BL_ShapeDeformer.h2
-rw-r--r--source/gameengine/Converter/BL_SkinDeformer.cpp2
-rw-r--r--source/gameengine/Converter/BL_SkinDeformer.h2
-rw-r--r--source/gameengine/Converter/BlenderWorldInfo.cpp53
-rw-r--r--source/gameengine/Converter/BlenderWorldInfo.h14
-rw-r--r--source/gameengine/Converter/CMakeLists.txt2
-rw-r--r--source/gameengine/Converter/KX_BlenderSceneConverter.cpp27
-rw-r--r--source/gameengine/Converter/KX_BlenderSceneConverter.h4
-rw-r--r--source/gameengine/Converter/KX_ConvertActuators.cpp2
-rw-r--r--source/gameengine/Converter/KX_ConvertSensors.cpp4
-rw-r--r--source/gameengine/Converter/KX_IpoConvert.cpp3
-rw-r--r--source/gameengine/Converter/KX_SoftBodyDeformer.cpp2
-rw-r--r--source/gameengine/Converter/KX_SoftBodyDeformer.h2
-rw-r--r--source/gameengine/Converter/Makefile2
-rw-r--r--source/gameengine/Converter/SConscript10
-rw-r--r--source/gameengine/Expressions/CMakeLists.txt2
-rw-r--r--source/gameengine/Expressions/Makefile2
-rw-r--r--source/gameengine/Expressions/PyObjectPlus.h3
-rw-r--r--source/gameengine/Expressions/SConscript4
-rw-r--r--source/gameengine/Expressions/Value.h2
-rw-r--r--source/gameengine/Expressions/VectorValue.cpp2
-rw-r--r--source/gameengine/GameLogic/CMakeLists.txt2
-rw-r--r--source/gameengine/GameLogic/Joystick/Makefile2
-rw-r--r--source/gameengine/GameLogic/Makefile2
-rw-r--r--source/gameengine/GameLogic/SCA_ActuatorEventManager.cpp2
-rw-r--r--source/gameengine/GameLogic/SCA_AlwaysSensor.cpp2
-rw-r--r--source/gameengine/GameLogic/SCA_DelaySensor.cpp2
-rw-r--r--source/gameengine/GameLogic/SCA_ISensor.cpp17
-rw-r--r--source/gameengine/GameLogic/SCA_ISensor.h15
-rw-r--r--source/gameengine/GameLogic/SCA_JoystickSensor.cpp1
-rw-r--r--source/gameengine/GameLogic/SCA_LogicManager.h2
-rw-r--r--source/gameengine/GameLogic/SCA_MouseManager.cpp2
-rw-r--r--source/gameengine/GameLogic/SCA_PythonController.cpp2
-rw-r--r--source/gameengine/GameLogic/SCA_PythonKeyboard.cpp23
-rw-r--r--source/gameengine/GameLogic/SCA_PythonKeyboard.h4
-rw-r--r--source/gameengine/GameLogic/SCA_PythonMouse.cpp27
-rw-r--r--source/gameengine/GameLogic/SCA_PythonMouse.h4
-rw-r--r--source/gameengine/GameLogic/SCA_TimeEventManager.cpp3
-rw-r--r--source/gameengine/GameLogic/SConscript12
-rw-r--r--source/gameengine/GamePlayer/Makefile2
-rw-r--r--source/gameengine/GamePlayer/common/Makefile2
-rw-r--r--source/gameengine/GamePlayer/common/SConscript6
-rw-r--r--source/gameengine/GamePlayer/common/unix/Makefile2
-rw-r--r--source/gameengine/GamePlayer/common/windows/Makefile2
-rw-r--r--source/gameengine/GamePlayer/ghost/GPG_Application.cpp1
-rw-r--r--source/gameengine/GamePlayer/ghost/GPG_ghost.cpp68
-rw-r--r--source/gameengine/GamePlayer/ghost/Makefile2
-rw-r--r--source/gameengine/GamePlayer/ghost/SConscript4
-rw-r--r--source/gameengine/Ketsji/CMakeLists.txt2
-rw-r--r--source/gameengine/Ketsji/KXNetwork/CMakeLists.txt2
-rw-r--r--source/gameengine/Ketsji/KXNetwork/Makefile2
-rw-r--r--source/gameengine/Ketsji/KXNetwork/SConscript4
-rw-r--r--source/gameengine/Ketsji/KX_BlenderMaterial.cpp39
-rw-r--r--source/gameengine/Ketsji/KX_BlenderMaterial.h8
-rw-r--r--source/gameengine/Ketsji/KX_Camera.cpp12
-rw-r--r--source/gameengine/Ketsji/KX_ConstraintWrapper.cpp8
-rw-r--r--source/gameengine/Ketsji/KX_ConstraintWrapper.h2
-rw-r--r--source/gameengine/Ketsji/KX_ConvertPhysicsObject.h4
-rw-r--r--source/gameengine/Ketsji/KX_ConvertPhysicsObjects.cpp10
-rw-r--r--source/gameengine/Ketsji/KX_Dome.cpp6
-rw-r--r--source/gameengine/Ketsji/KX_GameObject.cpp2
-rw-r--r--source/gameengine/Ketsji/KX_GameObject.h2
-rw-r--r--source/gameengine/Ketsji/KX_IPO_SGController.cpp2
-rw-r--r--source/gameengine/Ketsji/KX_KetsjiEngine.cpp45
-rw-r--r--source/gameengine/Ketsji/KX_Light.cpp3
-rw-r--r--source/gameengine/Ketsji/KX_MouseFocusSensor.cpp2
-rw-r--r--source/gameengine/Ketsji/KX_PolyProxy.cpp161
-rw-r--r--source/gameengine/Ketsji/KX_PolyProxy.h10
-rw-r--r--source/gameengine/Ketsji/KX_PolygonMaterial.cpp2
-rw-r--r--source/gameengine/Ketsji/KX_PyMath.cpp2
-rw-r--r--source/gameengine/Ketsji/KX_PythonInit.cpp96
-rw-r--r--source/gameengine/Ketsji/KX_Scene.cpp2
-rw-r--r--source/gameengine/Ketsji/KX_SoundActuator.cpp197
-rw-r--r--source/gameengine/Ketsji/KX_SoundActuator.h4
-rw-r--r--source/gameengine/Ketsji/KX_TimeCategoryLogger.h2
-rw-r--r--source/gameengine/Ketsji/KX_TimeLogger.h2
-rw-r--r--source/gameengine/Ketsji/KX_VertexProxy.cpp454
-rw-r--r--source/gameengine/Ketsji/KX_VertexProxy.h31
-rw-r--r--source/gameengine/Ketsji/Makefile2
-rw-r--r--source/gameengine/Ketsji/SConscript14
-rw-r--r--source/gameengine/Makefile2
-rw-r--r--source/gameengine/Network/LoopBackNetwork/Makefile2
-rw-r--r--source/gameengine/Network/Makefile2
-rw-r--r--source/gameengine/Network/TerraplayNetwork/Makefile2
-rw-r--r--source/gameengine/Physics/Bullet/CcdPhysicsController.cpp6
-rw-r--r--source/gameengine/Physics/Bullet/Makefile2
-rw-r--r--source/gameengine/Physics/Bullet/SConscript4
-rw-r--r--source/gameengine/Physics/Dummy/Makefile2
-rw-r--r--source/gameengine/Physics/Makefile2
-rw-r--r--source/gameengine/Physics/common/Makefile2
-rw-r--r--source/gameengine/Physics/common/PHY_DynamicTypes.h2
-rw-r--r--source/gameengine/PyDoc/PhysicsConstraints.py2
-rw-r--r--source/gameengine/PyDoc/VideoTexture.py2
-rw-r--r--source/gameengine/PyDoc/bge.logic.rst6
-rw-r--r--source/gameengine/PyDoc/bge.types.rst8
-rw-r--r--source/gameengine/PyDoc/how_to_build_win.txt2
-rw-r--r--source/gameengine/Rasterizer/Makefile2
-rw-r--r--source/gameengine/Rasterizer/RAS_BucketManager.cpp2
-rw-r--r--source/gameengine/Rasterizer/RAS_Deformer.h2
-rw-r--r--source/gameengine/Rasterizer/RAS_IRasterizer.h2
-rw-r--r--source/gameengine/Rasterizer/RAS_MaterialBucket.cpp5
-rw-r--r--source/gameengine/Rasterizer/RAS_MeshObject.h2
-rw-r--r--source/gameengine/Rasterizer/RAS_OpenGLRasterizer/Makefile2
-rw-r--r--source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OpenGLRasterizer.h2
-rw-r--r--source/gameengine/Rasterizer/RAS_Polygon.cpp2
-rw-r--r--source/gameengine/Rasterizer/SConscript4
-rw-r--r--source/gameengine/SceneGraph/Makefile2
-rw-r--r--source/gameengine/VideoTexture/CMakeLists.txt2
-rw-r--r--source/gameengine/VideoTexture/Makefile2
-rw-r--r--source/gameengine/VideoTexture/SConscript8
-rw-r--r--source/icons/Makefile2
-rw-r--r--source/icons/SConscript4
-rw-r--r--source/icons/winblender.icobin25214 -> 295606 bytes
-rw-r--r--source/icons/wincreator.icobin4710 -> 0 bytes
-rw-r--r--source/icons/wincreator.rc2
-rw-r--r--source/icons/winlockedfile.icobin4710 -> 0 bytes
-rw-r--r--source/icons/winplayer.icobin4710 -> 0 bytes
-rw-r--r--source/icons/winplayer.rc1
-rw-r--r--source/icons/winpublisher.icobin4710 -> 0 bytes
-rw-r--r--source/icons/winpublisher.rc3
-rw-r--r--source/kernel/CMakeLists.txt8
-rw-r--r--source/kernel/Makefile2
-rw-r--r--source/kernel/gen_messaging/Makefile2
-rw-r--r--source/kernel/gen_messaging/intern/Makefile2
-rw-r--r--source/kernel/gen_system/GEN_HashedPtr.cpp2
-rw-r--r--source/kernel/gen_system/Makefile2
898 files changed, 25260 insertions, 21804 deletions
diff --git a/source/Makefile b/source/Makefile
index 00ff981362c..1055c2a94e9 100644
--- a/source/Makefile
+++ b/source/Makefile
@@ -17,7 +17,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
# All rights reserved.
@@ -109,38 +109,37 @@ COMLIB += $(NAN_JPEG)/lib/libjpeg.a
COMLIB += $(OCGDIR)/blender/gpu/$(DEBUG_DIR)libgpu.a
COMLIB += $(NAN_GLEW)/lib/$(DEBUG_DIR)libglew.a
COMLIB += $(OCGDIR)/blender/blenfont/$(DEBUG_DIR)libblenfont.a
+COMLIB += $(OCGDIR)/blender/python/$(DEBUG_DIR)libpython.a
+COMLIB += $(NAN_AUDASPACE)/lib/$(DEBUG_DIR)libaudaspace.a
+COMLIB += $(NAN_AUDASPACE)/lib/$(DEBUG_DIR)libaud_python.a
COMLIB += $(NAN_AUDASPACE)/lib/$(DEBUG_DIR)libaudaspace.a
COMLIB += $(NAN_AUDASPACE)/lib/$(DEBUG_DIR)libaud_src.a
COMLIB += $(NAN_AUDASPACE)/lib/$(DEBUG_DIR)libaud_fx.a
COMLIB += $(NAN_AUDASPACE)/lib/$(DEBUG_DIR)libaud_sdl.a
-COMLIB += $(NAN_SAMPLERATE)/lib/$(DEBUG_DIR)libsamplerate.a
-COMLIB += $(NAN_LZO)/lib/$(DEBUG_DIR)libminilzo.a
-COMLIB += $(NAN_LZMA)/lib/$(DEBUG_DIR)liblzma.a
-COMLIB += $(NAN_BSP)/lib/$(DEBUG_DIR)libbsp.a
-COMLIB += $(NAN_BOOLOP)/lib/$(DEBUG_DIR)libboolop.a
-COMLIB += $(NAN_MOTO)/lib/$(DEBUG_DIR)libmoto.a
-COMLIB += $(NAN_DECIMATION)/lib/$(DEBUG_DIR)libdecimation.a
-COMLIB += $(NAN_GHOST)/lib/$(DEBUG_DIR)libghost.a
-
ifeq ($(WITH_FFMPEG),true)
COMLIB += $(NAN_AUDASPACE)/lib/$(DEBUG_DIR)libaud_ffmpeg.a
endif
-
ifeq ($(WITH_OPENAL),true)
COMLIB += $(NAN_AUDASPACE)/lib/$(DEBUG_DIR)libaud_openal.a
endif
-
ifeq ($(WITH_JACK),true)
COMLIB += $(NAN_AUDASPACE)/lib/$(DEBUG_DIR)libaud_jack.a
endif
-
ifeq ($(WITH_SNDFILE),true)
COMLIB += $(NAN_AUDASPACE)/lib/$(DEBUG_DIR)libaud_sndfile.a
endif
-
ifeq ($(WITH_FFTW3),true)
COMLIB += $(NAN_AUDASPACE)/lib/$(DEBUG_DIR)libaud_fftw.a
endif
+COMLIB += $(NAN_SAMPLERATE)/lib/$(DEBUG_DIR)libsamplerate.a
+COMLIB += $(NAN_LZO)/lib/$(DEBUG_DIR)libminilzo.a
+COMLIB += $(NAN_LZMA)/lib/$(DEBUG_DIR)liblzma.a
+COMLIB += $(NAN_BSP)/lib/$(DEBUG_DIR)libbsp.a
+COMLIB += $(NAN_BOOLOP)/lib/$(DEBUG_DIR)libboolop.a
+COMLIB += $(NAN_MOTO)/lib/$(DEBUG_DIR)libmoto.a
+COMLIB += $(NAN_DECIMATION)/lib/$(DEBUG_DIR)libdecimation.a
+COMLIB += $(NAN_GHOST)/lib/$(DEBUG_DIR)libghost.a
+
ifneq ($(NAN_NO_KETSJI),true)
COMLIB += $(OCGDIR)/gameengine/bloutines/$(DEBUG_DIR)libbloutines.a
diff --git a/source/SConscript b/source/SConscript
index 3944a3c6df5..c452f21b8e2 100644
--- a/source/SConscript
+++ b/source/SConscript
@@ -2,13 +2,13 @@
Import ('env')
SConscript(['blender/SConscript',
- 'kernel/SConscript',
- 'creator/SConscript'])
+ 'kernel/SConscript',
+ 'creator/SConscript'])
if env['WITH_BF_GAMEENGINE']:
- SConscript (['gameengine/SConscript'])
+ SConscript (['gameengine/SConscript'])
if env['WITH_BF_PLAYER']:
- SConscript (['blenderplayer/bad_level_call_stubs/SConscript'])
+ SConscript (['blenderplayer/bad_level_call_stubs/SConscript'])
if env['OURPLATFORM'] in ('win64-vc', 'win32-vc', 'win32-mingw', 'linuxcross'):
- SConscript (['icons/SConscript'])
+ SConscript (['icons/SConscript'])
diff --git a/source/blender/Makefile b/source/blender/Makefile
index 1149e1c4be2..8052c175f8e 100644
--- a/source/blender/Makefile
+++ b/source/blender/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
# All rights reserved.
diff --git a/source/blender/avi/CMakeLists.txt b/source/blender/avi/CMakeLists.txt
index 5ef37f5951b..b1ddb8c7895 100644
--- a/source/blender/avi/CMakeLists.txt
+++ b/source/blender/avi/CMakeLists.txt
@@ -27,7 +27,8 @@
FILE(GLOB SRC intern/*.c)
SET(INC
- . ../../../intern/guardedalloc
+ .
+ ../../../intern/guardedalloc
${JPEG_INC}
)
diff --git a/source/blender/avi/Makefile b/source/blender/avi/Makefile
index c8ab5fe0aca..96a6573cc67 100644
--- a/source/blender/avi/Makefile
+++ b/source/blender/avi/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
# All rights reserved.
diff --git a/source/blender/avi/intern/Makefile b/source/blender/avi/intern/Makefile
index 30f225c8031..8d1af9adb28 100644
--- a/source/blender/avi/intern/Makefile
+++ b/source/blender/avi/intern/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
# All rights reserved.
diff --git a/source/blender/avi/intern/avi.c b/source/blender/avi/intern/avi.c
index a73dec57a55..5f0d36e17e2 100644
--- a/source/blender/avi/intern/avi.c
+++ b/source/blender/avi/intern/avi.c
@@ -38,6 +38,8 @@
#include <stdio.h>
#include <ctype.h>
+#include "MEM_guardedalloc.h"
+
#include "AVI_avi.h"
#include "avi_intern.h"
diff --git a/source/blender/avi/intern/avi_intern.h b/source/blender/avi/intern/avi_intern.h
index 1ea304213ca..20de67530fd 100644
--- a/source/blender/avi/intern/avi_intern.h
+++ b/source/blender/avi/intern/avi_intern.h
@@ -31,8 +31,6 @@
#include <stdio.h> /* for FILE */
-#include "MEM_guardedalloc.h"
-
unsigned int GET_FCC (FILE *fp);
unsigned int GET_TCC (FILE *fp);
diff --git a/source/blender/blenfont/CMakeLists.txt b/source/blender/blenfont/CMakeLists.txt
index 8df40344e5e..abaf769bd3c 100644
--- a/source/blender/blenfont/CMakeLists.txt
+++ b/source/blender/blenfont/CMakeLists.txt
@@ -24,14 +24,19 @@
FILE(GLOB SRC intern/*.c)
-SET(INC
- ../../../intern/guardedalloc ../blenlib ../makesdna ../editors/include
- ../blenkernel ../../../extern/glew/include .
+SET(INC
+ .
+ ../blenlib
+ ../makesdna
+ ../editors/include
+ ../blenkernel
+ ../../../intern/guardedalloc
+ ../../../extern/glew/include
${FREETYPE_INCLUDE_DIRS}
)
IF(WITH_INTERNATIONAL)
- SET(INC ${INC} ${GETTEXT_INC})
+ LIST(APPEND INC ${GETTEXT_INC})
ADD_DEFINITIONS(-DINTERNATIONAL)
ENDIF(WITH_INTERNATIONAL)
diff --git a/source/blender/blenfont/Makefile b/source/blender/blenfont/Makefile
index 9f34d458126..df1bbb72110 100644
--- a/source/blender/blenfont/Makefile
+++ b/source/blender/blenfont/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2009 Blender Foundation
# All rights reserved.
diff --git a/source/blender/blenfont/SConscript b/source/blender/blenfont/SConscript
index 34ffaa71c76..2763bea0da0 100644
--- a/source/blender/blenfont/SConscript
+++ b/source/blender/blenfont/SConscript
@@ -12,8 +12,8 @@ incs += ' ' + env['BF_GETTEXT_INC']
defs = []
if sys.platform == 'win32' or env['OURPLATFORM'] == 'linuxcross':
- defs.append('_WIN32')
- defs.append('USE_GETTEXT_DLL')
+ defs.append('_WIN32')
+ defs.append('USE_GETTEXT_DLL')
if env['WITH_BF_INTERNATIONAL']:
defs.append('INTERNATIONAL')
diff --git a/source/blender/blenfont/intern/Makefile b/source/blender/blenfont/intern/Makefile
index 77e87c27a02..d3a6e656028 100644
--- a/source/blender/blenfont/intern/Makefile
+++ b/source/blender/blenfont/intern/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2008 Blender Foundation.
# All rights reserved.
diff --git a/source/blender/blenfont/intern/blf_font.c b/source/blender/blenfont/intern/blf_font.c
index f7c5531f0ac..04f40ac825b 100644
--- a/source/blender/blenfont/intern/blf_font.c
+++ b/source/blender/blenfont/intern/blf_font.c
@@ -38,10 +38,8 @@
#include "MEM_guardedalloc.h"
-#include "DNA_listBase.h"
#include "DNA_vec_types.h"
-#include "BKE_utildefines.h"
#include "BLI_blenlib.h"
#include "BLI_linklist.h" /* linknode */
@@ -157,7 +155,7 @@ void blf_font_buffer(FontBLF *font, char *str)
FT_Vector delta;
FT_UInt glyph_index;
float a, *fbuf;
- int pen_x, pen_y, y, x, yb, diff;
+ int pen_x, y, x, yb;
int i, has_kerning, st, chx, chy;
if (!font->glyph_cache || (!font->b_fbuf && !font->b_cbuf))
@@ -165,7 +163,6 @@ void blf_font_buffer(FontBLF *font, char *str)
i= 0;
pen_x= (int)font->pos[0];
- pen_y= (int)font->pos[1];
has_kerning= FT_HAS_KERNING(font->face);
g_prev= NULL;
@@ -174,6 +171,7 @@ void blf_font_buffer(FontBLF *font, char *str)
b_col_char[2]= font->b_col[2] * 255;
while (str[i]) {
+ int pen_y;
c= blf_utf8_next((unsigned char *)str, &i);
if (c == 0)
break;
@@ -202,25 +200,15 @@ void blf_font_buffer(FontBLF *font, char *str)
}
chx= pen_x + ((int)g->pos_x);
- diff= g->height - ((int)g->pos_y);
- if (diff > 0) {
- if (g->pitch < 0)
- pen_y += diff;
- else
- pen_y -= diff;
+ chy= (int)font->pos[1] + g->height;
+
+ if (g->pitch < 0) {
+ pen_y = (int)font->pos[1] + (g->height - (int)g->pos_y);
}
- else if (diff < 0) {
- if (g->pitch < 0)
- pen_y -= diff;
- else
- pen_y += diff;
+ else {
+ pen_y = (int)font->pos[1] - (g->height - (int)g->pos_y);
}
- if (g->pitch < 0)
- chy= pen_y - ((int)g->pos_y);
- else
- chy= pen_y + ((int)g->pos_y);
-
if ((chx + g->width) >= 0 && chx < font->bw && (pen_y + g->height) >= 0 && pen_y < font->bh) {
/* dont draw beyond the buffer bounds */
int width_clip= g->width;
@@ -287,19 +275,6 @@ void blf_font_buffer(FontBLF *font, char *str)
}
}
- if (diff > 0) {
- if (g->pitch < 0)
- pen_x -= diff;
- else
- pen_y += diff;
- }
- else if (diff < 0) {
- if (g->pitch < 0)
- pen_x += diff;
- else
- pen_y -= diff;
- }
-
pen_x += g->advance;
g_prev= g;
}
diff --git a/source/blender/blenfont/intern/blf_lang.c b/source/blender/blenfont/intern/blf_lang.c
index 1baf2c82ef7..7054d955faf 100644
--- a/source/blender/blenfont/intern/blf_lang.c
+++ b/source/blender/blenfont/intern/blf_lang.c
@@ -34,7 +34,6 @@
#include <locale.h>
#include "libintl.h"
-#include "MEM_guardedalloc.h"
#include "DNA_listBase.h"
#include "DNA_vec_types.h"
diff --git a/source/blender/blenkernel/BKE_blender.h b/source/blender/blenkernel/BKE_blender.h
index 189cd61d5a8..cd9f3971540 100644
--- a/source/blender/blenkernel/BKE_blender.h
+++ b/source/blender/blenkernel/BKE_blender.h
@@ -44,8 +44,8 @@ struct ReportList;
struct Scene;
struct Main;
-#define BLENDER_VERSION 253
-#define BLENDER_SUBVERSION 1
+#define BLENDER_VERSION 254
+#define BLENDER_SUBVERSION 0
#define BLENDER_MINVERSION 250
#define BLENDER_MINSUBVERSION 0
diff --git a/source/blender/blenkernel/BKE_brush.h b/source/blender/blenkernel/BKE_brush.h
index 0e406a16d0c..25d0eb5bc36 100644
--- a/source/blender/blenkernel/BKE_brush.h
+++ b/source/blender/blenkernel/BKE_brush.h
@@ -62,7 +62,7 @@ float brush_curve_strength_clamp(struct Brush *br, float p, const float len);
float brush_curve_strength(struct Brush *br, float p, const float len); /* used for sculpt */
/* sampling */
-void brush_sample_tex(struct Brush *brush, float *xy, float *rgba);
+void brush_sample_tex(struct Brush *brush, float *xy, float *rgba, const int thread);
void brush_imbuf_new(struct Brush *brush, short flt, short texfalloff, int size,
struct ImBuf **imbuf);
diff --git a/source/blender/blenkernel/BKE_cloth.h b/source/blender/blenkernel/BKE_cloth.h
index d8b3fcfd0bb..034bedbb07d 100644
--- a/source/blender/blenkernel/BKE_cloth.h
+++ b/source/blender/blenkernel/BKE_cloth.h
@@ -33,24 +33,8 @@
#include <float.h>
-#include "BLI_linklist.h"
-#include "BKE_customdata.h"
-#include "BKE_DerivedMesh.h"
-
-#include "BLI_blenlib.h"
-#include "BLI_math.h"
-#include "BLI_edgehash.h"
-
-#include "DNA_cloth_types.h"
-#include "DNA_customdata_types.h"
-#include "DNA_meshdata_types.h"
-#include "DNA_modifier_types.h"
-#include "DNA_object_types.h"
-#include "DNA_scene_types.h"
-
-#include "BKE_collision.h"
-
struct Object;
+struct ListBase;
struct Scene;
struct MFace;
struct DerivedMesh;
@@ -210,7 +194,7 @@ typedef enum
////////////////////////////////////////////////
// needed for implicit.c
-int cloth_bvh_objcollision (Object *ob, ClothModifierData * clmd, float step, float dt );
+int cloth_bvh_objcollision (struct Object *ob, struct ClothModifierData * clmd, float step, float dt );
////////////////////////////////////////////////
@@ -220,10 +204,10 @@ int cloth_bvh_objcollision (Object *ob, ClothModifierData * clmd, float step, fl
////////////////////////////////////////////////
// needed for cloth.c
-int implicit_init ( Object *ob, ClothModifierData *clmd );
-int implicit_free ( ClothModifierData *clmd );
-int implicit_solver ( Object *ob, float frame, ClothModifierData *clmd, ListBase *effectors );
-void implicit_set_positions ( ClothModifierData *clmd );
+int implicit_init ( struct Object *ob, struct ClothModifierData *clmd );
+int implicit_free ( struct ClothModifierData *clmd );
+int implicit_solver ( struct Object *ob, float frame, struct ClothModifierData *clmd, struct ListBase *effectors );
+void implicit_set_positions ( struct ClothModifierData *clmd );
// globally needed
void clmdSetInterruptCallBack ( int ( *f ) ( void ) );
@@ -235,23 +219,23 @@ void clmdSetInterruptCallBack ( int ( *f ) ( void ) );
////////////////////////////////////////////////
// needed for modifier.c
-void cloth_free_modifier_extern ( ClothModifierData *clmd );
-void cloth_free_modifier ( Object *ob, ClothModifierData *clmd );
-void cloth_init ( ClothModifierData *clmd );
-DerivedMesh *clothModifier_do ( ClothModifierData *clmd, struct Scene *scene, Object *ob, DerivedMesh *dm, int useRenderParams, int isFinalCalc );
+void cloth_free_modifier_extern ( struct ClothModifierData *clmd );
+void cloth_free_modifier ( struct Object *ob, struct ClothModifierData *clmd );
+void cloth_init ( struct ClothModifierData *clmd );
+struct DerivedMesh *clothModifier_do ( struct ClothModifierData *clmd, struct Scene *scene, struct Object *ob, struct DerivedMesh *dm, int useRenderParams, int isFinalCalc );
-void cloth_update_normals ( ClothVertex *verts, int nVerts, MFace *face, int totface );
-int cloth_uses_vgroup(ClothModifierData *clmd);
+void cloth_update_normals ( ClothVertex *verts, int nVerts, struct MFace *face, int totface );
+int cloth_uses_vgroup(struct ClothModifierData *clmd);
// needed for collision.c
-void bvhtree_update_from_cloth ( ClothModifierData *clmd, int moving );
-void bvhselftree_update_from_cloth ( ClothModifierData *clmd, int moving );
+void bvhtree_update_from_cloth ( struct ClothModifierData *clmd, int moving );
+void bvhselftree_update_from_cloth ( struct ClothModifierData *clmd, int moving );
// needed for button_object.c
-void cloth_clear_cache ( Object *ob, ClothModifierData *clmd, float framenr );
+void cloth_clear_cache ( struct Object *ob, struct ClothModifierData *clmd, float framenr );
// needed for cloth.c
-int cloth_add_spring ( ClothModifierData *clmd, unsigned int indexA, unsigned int indexB, float restlength, int spring_type);
+int cloth_add_spring ( struct ClothModifierData *clmd, unsigned int indexA, unsigned int indexB, float restlength, int spring_type);
////////////////////////////////////////////////
@@ -270,9 +254,9 @@ typedef struct
{
char *name;
CM_SOLVER_ID id;
- int ( *init ) ( Object *ob, ClothModifierData *clmd );
- int ( *solver ) ( Object *ob, float framenr, ClothModifierData *clmd, ListBase *effectors );
- int ( *free ) ( ClothModifierData *clmd );
+ int ( *init ) ( struct Object *ob, struct ClothModifierData *clmd );
+ int ( *solver ) ( struct Object *ob, float framenr, struct ClothModifierData *clmd, struct ListBase *effectors );
+ int ( *free ) ( struct ClothModifierData *clmd );
}
CM_SOLVER_DEF;
diff --git a/source/blender/blenkernel/BKE_collision.h b/source/blender/blenkernel/BKE_collision.h
index 91c5eb4afee..d7ae7df9342 100644
--- a/source/blender/blenkernel/BKE_collision.h
+++ b/source/blender/blenkernel/BKE_collision.h
@@ -37,25 +37,21 @@
#include <string.h>
/* types */
-#include "BLI_linklist.h"
#include "BKE_collision.h"
-#include "BKE_customdata.h"
-#include "BKE_DerivedMesh.h"
#include "DNA_cloth_types.h"
-#include "DNA_customdata_types.h"
-#include "DNA_meshdata_types.h"
-#include "DNA_modifier_types.h"
-#include "DNA_object_types.h"
#include "BLI_kdopbvh.h"
struct Cloth;
struct ClothModifierData;
+struct CollisionModifierData;
struct DerivedMesh;
struct Group;
struct MFace;
+struct MVert;
struct Object;
struct Scene;
+struct LinkNode;
////////////////////////////////////////
// used for collisions in collision.c
@@ -122,16 +118,16 @@ FaceCollPair;
// used in modifier.c from collision.c
/////////////////////////////////////////////////
-BVHTree *bvhtree_build_from_mvert ( MFace *mfaces, unsigned int numfaces, MVert *x, unsigned int numverts, float epsilon );
-void bvhtree_update_from_mvert ( BVHTree * bvhtree, MFace *faces, int numfaces, MVert *x, 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 );
/////////////////////////////////////////////////
-LinkNode *BLI_linklist_append_fast ( LinkNode **listp, void *ptr );
+struct LinkNode *BLI_linklist_append_fast ( struct LinkNode **listp, void *ptr );
// move Collision modifier object inter-frame with step = [0,1]
// defined in collisions.c
-void collision_move_object ( CollisionModifierData *collmd, float step, float prevstep );
+void collision_move_object ( struct CollisionModifierData *collmd, float step, float prevstep );
// interface for collision functions
void collisions_compute_barycentric ( float pv[3], float p1[3], float p2[3], float p3[3], float *w1, float *w2, float *w3 );
diff --git a/source/blender/blenkernel/BKE_constraint.h b/source/blender/blenkernel/BKE_constraint.h
index 64e9636cae7..d6e0075df1e 100644
--- a/source/blender/blenkernel/BKE_constraint.h
+++ b/source/blender/blenkernel/BKE_constraint.h
@@ -136,7 +136,6 @@ struct bConstraint *add_ob_constraint(struct Object *ob, const char *name, short
struct bConstraint *add_pose_constraint(struct Object *ob, struct bPoseChannel *pchan, const char *name, short type);
int remove_constraint(ListBase *list, struct bConstraint *con);
-int remove_constraint_index(ListBase *list, int index);
void remove_constraints_type(ListBase *list, short type, short last_only);
/* Constraints + Proxies function prototypes */
diff --git a/source/blender/blenkernel/BKE_curve.h b/source/blender/blenkernel/BKE_curve.h
index b9f0e6d0551..db6d995aa74 100644
--- a/source/blender/blenkernel/BKE_curve.h
+++ b/source/blender/blenkernel/BKE_curve.h
@@ -40,15 +40,15 @@ struct ListBase;
struct BezTriple;
struct BevList;
-#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 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->bevobj || cu->ext1!=0.0 || cu->ext2!=0.0) ? 1:0)
+#define CU_DO_RADIUS(cu, nu) ((CU_DO_TILT(cu, nu) || ((cu)->flag & CU_PATH_RADIUS) || (cu)->bevobj || (cu)->ext1!=0.0 || (cu)->ext2!=0.0) ? 1:0)
void unlink_curve( struct Curve *cu);
diff --git a/source/blender/blenkernel/BKE_customdata.h b/source/blender/blenkernel/BKE_customdata.h
index ce4286f01c8..84eb8ef5300 100644
--- a/source/blender/blenkernel/BKE_customdata.h
+++ b/source/blender/blenkernel/BKE_customdata.h
@@ -88,7 +88,7 @@ void *CustomData_add_layer(struct CustomData *data, int type, int alloctype,
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, 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
diff --git a/source/blender/blenkernel/BKE_deform.h b/source/blender/blenkernel/BKE_deform.h
index 702cb100e18..53f474aa972 100644
--- a/source/blender/blenkernel/BKE_deform.h
+++ b/source/blender/blenkernel/BKE_deform.h
@@ -42,7 +42,7 @@ struct MDeformVert;
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, char *name);
+struct bDeformGroup *defgroup_find_name(struct Object *ob, const char *name);
int defgroup_find_index(struct Object *ob, struct bDeformGroup *dg);
int *defgroup_flip_map(struct Object *ob, int use_default);
int defgroup_flip_index(struct Object *ob, int index, int use_default);
diff --git a/source/blender/blenkernel/BKE_effect.h b/source/blender/blenkernel/BKE_effect.h
index 837fede3c8a..99f55200eac 100644
--- a/source/blender/blenkernel/BKE_effect.h
+++ b/source/blender/blenkernel/BKE_effect.h
@@ -31,7 +31,6 @@
#ifndef BKE_EFFECT_H
#define BKE_EFFECT_H
-#include "DNA_object_types.h"
#include "DNA_modifier_types.h"
struct Object;
diff --git a/source/blender/blenkernel/BKE_exotic.h b/source/blender/blenkernel/BKE_exotic.h
index bd5af66c6a8..740a94b6169 100644
--- a/source/blender/blenkernel/BKE_exotic.h
+++ b/source/blender/blenkernel/BKE_exotic.h
@@ -34,9 +34,6 @@
struct Mesh;
struct Scene;
-void mcol_to_rgba(unsigned int col, float *r, float *g, float *b, float *a);
-unsigned int *mcol_to_vcol(struct Mesh *me); // used in py_main.c
-
/**
* Reads all 3D fileformats other than Blender fileformat
* @retval 0 The file could not be read.
@@ -46,7 +43,6 @@ unsigned int *mcol_to_vcol(struct Mesh *me); // used in py_main.c
int BKE_read_exotic(struct Scene *scene, char *name);
void write_dxf(struct Scene *scene, char *str);
-void write_vrml(struct Scene *scene, char *str);
void write_stl(struct Scene *scene, char *str);
#endif
diff --git a/source/blender/blenkernel/BKE_fcurve.h b/source/blender/blenkernel/BKE_fcurve.h
index 6de0c55af3b..95e0cfc3a91 100644
--- a/source/blender/blenkernel/BKE_fcurve.h
+++ b/source/blender/blenkernel/BKE_fcurve.h
@@ -161,7 +161,6 @@ struct FModifier *add_fmodifier(ListBase *modifiers, int type);
struct FModifier *copy_fmodifier(struct FModifier *src);
void copy_fmodifiers(ListBase *dst, ListBase *src);
int remove_fmodifier(ListBase *modifiers, struct FModifier *fcm);
-int remove_fmodifier_index(ListBase *modifiers, int index);
void free_fmodifiers(ListBase *modifiers);
struct FModifier *find_active_fmodifier(ListBase *modifiers);
diff --git a/source/blender/blenkernel/BKE_idcode.h b/source/blender/blenkernel/BKE_idcode.h
new file mode 100644
index 00000000000..b624e34e1cb
--- /dev/null
+++ b/source/blender/blenkernel/BKE_idcode.h
@@ -0,0 +1,75 @@
+/**
+ * $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) 2001-2002 by NaN Holding BV.
+ * All rights reserved.
+ *
+ * The Original Code is: all of this file.
+ *
+ * Contributor(s): none yet.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+#ifndef BKE_ID_INFO_H
+#define BKE_ID_INFO_H
+
+/**
+ * Convert an idcode into a name.
+ *
+ * @param code The code to convert.
+ * @return A static string representing the name of
+ * the code.
+ */
+const char *BKE_idcode_to_name(int code);
+
+/**
+ * Convert an idcode into a name (plural).
+ *
+ * @param code The code to convert.
+ * @return A static string representing the name of
+ * the code.
+ */
+const char *BKE_idcode_to_name_plural(int code);
+
+/**
+ * Convert a name into an idcode (ie. ID_SCE)
+ *
+ * @param name The name to convert.
+ * @return The code for the name, or 0 if invalid.
+ */
+int BKE_idcode_from_name(const char *name);
+
+/**
+ * Return non-zero when an ID type is linkable.
+ *
+ * @param code The code to check.
+ * @return Boolean, 0 when non linkable.
+ */
+int BKE_idcode_is_linkable(int code);
+
+/**
+ * Return if the ID code is a valid ID code.
+ *
+ * @param code The code to check.
+ * @return Boolean, 0 when invalid.
+ */
+int BKE_idcode_is_valid(int code);
+
+#endif
diff --git a/source/blender/blenkernel/BKE_image.h b/source/blender/blenkernel/BKE_image.h
index c842efaa3b2..e246b51af09 100644
--- a/source/blender/blenkernel/BKE_image.h
+++ b/source/blender/blenkernel/BKE_image.h
@@ -48,7 +48,7 @@ void BKE_stamp_info(struct Scene *scene, struct ImBuf *ibuf);
void BKE_stamp_buf(struct Scene *scene, unsigned char *rect, float *rectf, int width, int height, int channels);
int BKE_write_ibuf(struct Scene *scene, struct ImBuf *ibuf, char *name, int imtype, int subimtype, int quality);
void BKE_makepicstring(char *string, char *base, int frame, int imtype, int use_ext);
-void BKE_add_image_extension(char *string, int imtype);
+int BKE_add_image_extension(char *string, int imtype);
int BKE_ftype_to_imtype(int ftype);
int BKE_imtype_to_ftype(int imtype);
int BKE_imtype_is_movie(int imtype);
diff --git a/source/blender/blenkernel/BKE_material.h b/source/blender/blenkernel/BKE_material.h
index a220153523e..40d98394a8e 100644
--- a/source/blender/blenkernel/BKE_material.h
+++ b/source/blender/blenkernel/BKE_material.h
@@ -57,6 +57,9 @@ void automatname(struct Material *);
struct Material ***give_matarar(struct Object *ob);
short *give_totcolp(struct Object *ob);
+struct Material ***give_matarar_id(struct ID *id); /* same but for ID's */
+short *give_totcolp_id(struct ID *id);
+
struct Material *give_current_material(struct Object *ob, int act);
struct ID *material_from(struct Object *ob, int act);
void assign_material(struct Object *ob, struct Material *ma, int act);
@@ -67,6 +70,10 @@ int find_material_index(struct Object *ob, struct Material *ma);
int object_add_material_slot(struct Object *ob);
int object_remove_material_slot(struct Object *ob);
+/* rna api */
+void material_append_id(struct ID *id, struct Material *ma);
+struct Material *material_pop_id(struct ID *id, int index);
+
/* rendering */
void init_render_material(struct Material *, int, float *);
diff --git a/source/blender/blenkernel/BKE_mball.h b/source/blender/blenkernel/BKE_mball.h
index 8d7d205e847..7fa4fc1a05e 100644
--- a/source/blender/blenkernel/BKE_mball.h
+++ b/source/blender/blenkernel/BKE_mball.h
@@ -162,6 +162,7 @@ void free_mball(struct MetaBall *mb);
struct MetaBall *add_mball(char *name);
struct MetaBall *copy_mball(struct MetaBall *mb);
void make_local_mball(struct MetaBall *mb);
+struct MetaElem *add_metaball_element(struct MetaBall *mb, const int type);
void tex_space_mball(struct Object *ob);
float *make_orco_mball(struct Object *ob, struct ListBase *dispbase);
void copy_mball_properties(struct Scene *scene, struct Object *active_object);
diff --git a/source/blender/blenkernel/BKE_modifier.h b/source/blender/blenkernel/BKE_modifier.h
index d6ab99d6534..95a9394427f 100644
--- a/source/blender/blenkernel/BKE_modifier.h
+++ b/source/blender/blenkernel/BKE_modifier.h
@@ -321,6 +321,9 @@ struct LinkNode *modifiers_calcDataMasks(struct Scene *scene,
int required_mode);
struct ModifierData *modifiers_getVirtualModifierList(struct Object *ob);
+/* ensure modifier correctness when changing ob->data */
+void test_object_modifiers(struct Object *ob);
+
/* here for do_versions */
void modifier_mdef_compact_influences(struct ModifierData *md);
diff --git a/source/blender/blenkernel/BKE_multires.h b/source/blender/blenkernel/BKE_multires.h
index 39fc795e6ff..fc0ab2eea1e 100644
--- a/source/blender/blenkernel/BKE_multires.h
+++ b/source/blender/blenkernel/BKE_multires.h
@@ -44,6 +44,8 @@ void multires_force_update(struct Object *ob);
void multires_force_render_update(struct Object *ob);
void multires_force_external_reload(struct Object *ob);
+void multiresModifier_set_levels_from_disps(struct MultiresModifierData *mmd, struct Object *ob);
+
struct DerivedMesh *multires_dm_create_from_derived(struct MultiresModifierData*,
int local_mmd, struct DerivedMesh*, struct Object *, int, int);
diff --git a/source/blender/blenkernel/BKE_node.h b/source/blender/blenkernel/BKE_node.h
index 4bd4cc3792f..7b4925b7a46 100644
--- a/source/blender/blenkernel/BKE_node.h
+++ b/source/blender/blenkernel/BKE_node.h
@@ -192,7 +192,7 @@ int nodeSetActiveID(struct bNodeTree *ntree, short idtype, struct ID *id);
void nodeClearActiveID(struct bNodeTree *ntree, short idtype);
void NodeTagChanged(struct bNodeTree *ntree, struct bNode *node);
-void NodeTagIDChanged(struct bNodeTree *ntree, struct ID *id);
+int NodeTagIDChanged(struct bNodeTree *ntree, struct ID *id);
/* ************** Groups ****************** */
diff --git a/source/blender/blenkernel/BKE_particle.h b/source/blender/blenkernel/BKE_particle.h
index fcef00ae9b3..1416e1280cf 100644
--- a/source/blender/blenkernel/BKE_particle.h
+++ b/source/blender/blenkernel/BKE_particle.h
@@ -253,6 +253,7 @@ 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_apply_hair_lattice(struct Scene *scene, struct Object *ob, struct ParticleSystem *psys);
/* particle_system.c */
struct ParticleSystem *psys_get_target_system(struct Object *ob, struct ParticleTarget *pt);
@@ -282,6 +283,8 @@ void psys_mat_hair_to_object(struct Object *ob, struct DerivedMesh *dm, short fr
void psys_mat_hair_to_global(struct Object *ob, struct DerivedMesh *dm, short from, struct ParticleData *pa, float hairmat[][4]);
void psys_mat_hair_to_orco(struct Object *ob, struct DerivedMesh *dm, short from, struct ParticleData *pa, float hairmat[][4]);
+float psys_get_dietime_from_cache(struct PointCache *cache, int index);
+
void psys_free_pdd(struct ParticleSystem *psys);
float *psys_cache_vgroup(struct DerivedMesh *dm, struct ParticleSystem *psys, int vgroup);
diff --git a/source/blender/blenkernel/BKE_pointcache.h b/source/blender/blenkernel/BKE_pointcache.h
index 63f36a5f103..52536e10e56 100644
--- a/source/blender/blenkernel/BKE_pointcache.h
+++ b/source/blender/blenkernel/BKE_pointcache.h
@@ -33,8 +33,6 @@
#include "DNA_object_force.h"
#include "DNA_boid_types.h"
-#include "MEM_guardedalloc.h"
-
/* 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
@@ -275,7 +273,7 @@ int BKE_ptcache_read_cache(PTCacheID *pid, float cfra, float frs_sec);
int BKE_ptcache_write_cache(PTCacheID *pid, int cfra);
/****************** Continue physics ***************/
-void BKE_ptcache_set_continue_physics(struct Scene *scene, int enable);
+void BKE_ptcache_set_continue_physics(struct Main *bmain, struct Scene *scene, int enable);
int BKE_ptcache_get_continue_physics(void);
/******************* Allocate & free ***************/
diff --git a/source/blender/blenkernel/BKE_sca.h b/source/blender/blenkernel/BKE_sca.h
index 7adbfd9b48d..6cafb7ef104 100644
--- a/source/blender/blenkernel/BKE_sca.h
+++ b/source/blender/blenkernel/BKE_sca.h
@@ -70,9 +70,9 @@ void set_sca_new_poins_ob(struct Object *ob);
void set_sca_new_poins(void);
void sca_remove_ob_poin(struct Object *obt, struct Object *ob);
-void sca_move_sensor(struct bSensor *sens_to_move, Object *ob, int move_up);
-void sca_move_controller(struct bController *cont_to_move, Object *ob, int move_up);
-void sca_move_actuator(struct bActuator *act_to_move, Object *ob, int move_up);
+void sca_move_sensor(struct bSensor *sens_to_move, struct Object *ob, int move_up);
+void sca_move_controller(struct bController *cont_to_move, struct Object *ob, int move_up);
+void sca_move_actuator(struct bActuator *act_to_move, struct Object *ob, int move_up);
#endif
diff --git a/source/blender/blenkernel/BKE_sequencer.h b/source/blender/blenkernel/BKE_sequencer.h
index b544b3461cd..0766012b4a5 100644
--- a/source/blender/blenkernel/BKE_sequencer.h
+++ b/source/blender/blenkernel/BKE_sequencer.h
@@ -31,13 +31,14 @@
#ifndef BKE_SEQUENCER_H
#define BKE_SEQUENCER_H
+struct bContext;
struct Editing;
+struct ImBuf;
+struct Main;
+struct Scene;
struct Sequence;
struct Strip;
struct StripElem;
-struct ImBuf;
-struct Scene;
-struct bContext;
#define MAXSEQ 32
@@ -123,6 +124,7 @@ struct SeqEffectHandle {
(mixed cases are handled one layer up...) */
struct ImBuf* (*execute)(
+ struct Main *bmain,
struct Scene *scene, struct Sequence *seq, float cfra,
float facf0, float facf1,
int x, int y, int preview_render_size,
@@ -146,15 +148,15 @@ void seq_free_editing(struct Scene *scene);
void seq_free_clipboard(void);
struct Editing *seq_give_editing(struct Scene *scene, int alloc);
char *give_seqname(struct Sequence *seq);
-struct ImBuf *give_ibuf_seq(struct Scene *scene, int rectx, int recty, int cfra, int chanshown, int render_size);
-struct ImBuf *give_ibuf_seq_threaded(struct Scene *scene, int rectx, int recty, int cfra, int chanshown, int render_size);
-struct ImBuf *give_ibuf_seq_direct(struct Scene *scene, int rectx, int recty, int cfra, int render_size, struct Sequence *seq);
-struct ImBuf *give_ibuf_seqbase(struct Scene *scene, int rectx, int recty, int cfra, int chan_shown, int render_size, struct ListBase *seqbasep);
+struct ImBuf *give_ibuf_seq(struct Main *bmain, struct Scene *scene, int rectx, int recty, int cfra, int chanshown, int render_size);
+struct ImBuf *give_ibuf_seq_threaded(struct Main *bmain, struct Scene *scene, int rectx, int recty, int cfra, int chanshown, int render_size);
+struct ImBuf *give_ibuf_seq_direct(struct Main *bmain, struct Scene *scene, int rectx, int recty, int cfra, int render_size, struct Sequence *seq);
+struct ImBuf *give_ibuf_seqbase(struct Main *bmain, struct Scene *scene, int rectx, int recty, int cfra, int chan_shown, int render_size, struct ListBase *seqbasep);
void give_ibuf_prefetch_request(int rectx, int recty, int cfra, int chanshown, int render_size);
void calc_sequence(struct Scene *scene, struct Sequence *seq);
void calc_sequence_disp(struct Scene *scene, struct Sequence *seq);
void new_tstripdata(struct Sequence *seq);
-void reload_sequence_new_file(struct Scene *scene, struct Sequence * seq, int lock_range);
+void reload_sequence_new_file(struct Main *bmain, struct Scene *scene, struct Sequence * seq, int lock_range);
void sort_seq(struct Scene *scene);
void build_seqar_cb(struct ListBase *seqbase, struct Sequence ***seqar, int *totseq,
int (*test_func)(struct Sequence * seq));
@@ -227,7 +229,7 @@ void seqbase_sound_reload(struct Scene *scene, ListBase *seqbase);
void seqbase_unique_name_recursive(ListBase *seqbasep, struct Sequence *seq);
void seqbase_dupli_recursive(struct Scene *scene, ListBase *nseqbase, ListBase *seqbase, int dupe_flag);
-void clear_scene_in_allseqs(struct Scene *sce);
+void clear_scene_in_allseqs(struct Main *bmain, struct Scene *sce);
struct Sequence *get_seq_by_name(struct ListBase *seqbase, const char *name, int recursive);
@@ -274,7 +276,7 @@ struct Sequence *sequencer_add_sound_strip(struct bContext *C, ListBase *seqbase
struct Sequence *sequencer_add_movie_strip(struct bContext *C, ListBase *seqbasep, struct SeqLoadInfo *seq_load);
/* view3d draw callback, run when not in background view */
-typedef struct ImBuf *(*SequencerDrawView)(struct Scene *, int, int, int);
+typedef struct ImBuf *(*SequencerDrawView)(struct Scene *, int, int, unsigned int, int);
extern SequencerDrawView sequencer_view3d_cb;
/* copy/paste */
diff --git a/source/blender/blenkernel/BKE_texture.h b/source/blender/blenkernel/BKE_texture.h
index 380672dae04..99bb8db44ed 100644
--- a/source/blender/blenkernel/BKE_texture.h
+++ b/source/blender/blenkernel/BKE_texture.h
@@ -70,6 +70,7 @@ struct Tex *add_texture(const char *name);
void tex_set_type(struct Tex *tex, int type);
void default_mtex(struct MTex *mtex);
struct MTex *add_mtex(void);
+struct MTex *add_mtex_id(struct ID *id, int slot);
struct Tex *copy_texture(struct Tex *tex);
void make_local_texture(struct Tex *tex);
void autotexname(struct Tex *tex);
diff --git a/source/blender/blenkernel/BKE_unit.h b/source/blender/blenkernel/BKE_unit.h
index 36ccc1f1497..7461d43e721 100644
--- a/source/blender/blenkernel/BKE_unit.h
+++ b/source/blender/blenkernel/BKE_unit.h
@@ -36,12 +36,18 @@ void bUnit_AsString(char *str, int len_max, double value, int prec, int system,
/* replace units with values, used before python button evaluation */
int bUnit_ReplaceString(char *str, int len_max, 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, char *orig_str, int system, int type);
+
/* the size of the unit used for this value (used for calculating the ckickstep) */
double bUnit_ClosestScalar(double value, int system, int type);
/* base scale for these units */
double bUnit_BaseScalar(int system, int type);
+/* return true is the unit system exists */
+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);
@@ -60,6 +66,7 @@ double bUnit_GetScaler(void *usys_pt, int index);
#define B_UNIT_TIME 6
#define B_UNIT_VELOCITY 7
#define B_UNIT_ACCELERATION 8
+#define B_UNIT_MAXDEF 9
#ifdef __cplusplus
}
diff --git a/source/blender/blenkernel/CMakeLists.txt b/source/blender/blenkernel/CMakeLists.txt
index fbd75a79fd7..ccead684a88 100644
--- a/source/blender/blenkernel/CMakeLists.txt
+++ b/source/blender/blenkernel/CMakeLists.txt
@@ -27,13 +27,29 @@
FILE(GLOB SRC intern/*.c)
SET(INC
- . ../../../intern/guardedalloc ../../../intern/memutil ../editors/include ../blenlib ../makesdna ../modifiers
- ../render/extern/include ../../../intern/decimation/extern
- ../imbuf ../avi ../../../intern/elbeem/extern ../../../intern/opennl/extern
- ../../../intern/iksolver/extern ../blenloader ../ikplugin
- ../nodes ../../../extern/glew/include ../gpu ../makesrna ../../../intern/smoke/extern
- ../../../intern/bsp/extern ../blenfont
+ .
+ ../avi
+ ../blenlib
+ ../blenloader
+ ../gpu
+ ../ikplugin
+ ../imbuf
+ ../makesdna
+ ../makesrna
+ ../modifiers
+ ../nodes
+ ../editors/include
+ ../render/extern/include
+ ../../../extern/glew/include
../../../intern/audaspace/intern
+ ../../../intern/bsp/extern ../blenfont
+ ../../../intern/decimation/extern
+ ../../../intern/elbeem/extern
+ ../../../intern/guardedalloc
+ ../../../intern/iksolver/extern
+ ../../../intern/memutil
+ ../../../intern/opennl/extern
+ ../../../intern/smoke/extern
../../../source/blender/windowmanager # XXX - BAD LEVEL CALL WM_api.h
${ZLIB_INC}
)
@@ -42,7 +58,7 @@ SET(INC
ADD_DEFINITIONS(-DGLEW_STATIC)
IF(WITH_BULLET)
- SET(INC ${INC} ../../../extern/bullet2/src)
+ LIST(APPEND INC ../../../extern/bullet2/src)
ADD_DEFINITIONS(-DUSE_BULLET)
ENDIF(WITH_BULLET)
@@ -71,28 +87,28 @@ IF(WITH_IMAGE_HDR)
ENDIF(WITH_IMAGE_HDR)
IF(WITH_QUICKTIME)
- SET(INC ${INC} ../quicktime ${QUICKTIME_INC})
+ LIST(APPEND INC ../quicktime ${QUICKTIME_INC})
ADD_DEFINITIONS(-DWITH_QUICKTIME)
ENDIF(WITH_QUICKTIME)
IF(WITH_FFMPEG)
- SET(INC ${INC} ${FFMPEG_INC})
+ LIST(APPEND INC ${FFMPEG_INC})
ADD_DEFINITIONS(-DWITH_FFMPEG)
ENDIF(WITH_FFMPEG)
IF(WITH_LCMS)
- SET(INC ${INC} ${LCMS_INCLUDE_DIR})
+ LIST(APPEND INC ${LCMS_INCLUDE_DIR})
ADD_DEFINITIONS(-DWITH_LCMS)
ENDIF(WITH_LCMS)
IF(WITH_PYTHON)
- SET(INC ${INC} ../python ${PYTHON_INC})
+ LIST(APPEND INC ../python ${PYTHON_INC})
ELSE(WITH_PYTHON)
ADD_DEFINITIONS(-DDISABLE_PYTHON)
ENDIF(WITH_PYTHON)
IF(WITH_OPENMP)
- ADD_DEFINITIONS(-DPARALLEL=1)
+ ADD_DEFINITIONS(-DPARALLEL=1)
ENDIF(WITH_OPENMP)
IF(NOT WITH_FLUID)
@@ -100,18 +116,17 @@ IF(NOT WITH_FLUID)
ENDIF(NOT WITH_FLUID)
IF(WITH_LZO)
- SET(INC ${INC} ../../../extern/lzo/minilzo)
+ LIST(APPEND INC ../../../extern/lzo/minilzo)
ADD_DEFINITIONS(-DWITH_LZO)
ENDIF(WITH_LZO)
IF(WITH_LZMA)
- SET(INC ${INC} ../../../extern/lzma)
+ LIST(APPEND INC ../../../extern/lzma)
ADD_DEFINITIONS(-DWITH_LZMA)
ENDIF(WITH_LZMA)
IF(WIN32)
- SET(INC ${INC} ${PTHREADS_INC})
+ LIST(APPEND INC ${PTHREADS_INC})
ENDIF(WIN32)
BLENDERLIB(bf_blenkernel "${SRC}" "${INC}")
-
diff --git a/source/blender/blenkernel/Makefile b/source/blender/blenkernel/Makefile
index f0476bbf026..dc5f0a91da6 100644
--- a/source/blender/blenkernel/Makefile
+++ b/source/blender/blenkernel/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
# All rights reserved.
diff --git a/source/blender/blenkernel/SConscript b/source/blender/blenkernel/SConscript
index 9f5027f801d..1e48f94f14d 100644
--- a/source/blender/blenkernel/SConscript
+++ b/source/blender/blenkernel/SConscript
@@ -20,68 +20,68 @@ incs += ' ' + env['BF_ZLIB_INC']
defs = [ 'GLEW_STATIC' ]
if not env['WITH_BF_PYTHON']:
- defs.append('DISABLE_PYTHON')
+ defs.append('DISABLE_PYTHON')
else:
- incs += ' ../python'
- incs += ' ' + env['BF_PYTHON_INC']
- if env['BF_DEBUG']:
- defs.append('_DEBUG')
+ incs += ' ../python'
+ incs += ' ' + env['BF_PYTHON_INC']
+ if env['BF_DEBUG']:
+ defs.append('_DEBUG')
if env['WITH_BF_QUICKTIME']:
- incs += ' ../quicktime'
+ incs += ' ../quicktime'
if env['WITH_BF_SDL']:
- incs += ' ' + env['BF_SDL_INC']
+ incs += ' ' + env['BF_SDL_INC']
else:
- defs.append('DISABLE_SDL')
+ defs.append('DISABLE_SDL')
if env['WITH_BF_OPENEXR']:
- defs.append('WITH_OPENEXR')
+ defs.append('WITH_OPENEXR')
if env['WITH_BF_TIFF']:
- defs.append('WITH_TIFF')
+ defs.append('WITH_TIFF')
if env['WITH_BF_OPENJPEG']:
- defs.append('WITH_OPENJPEG')
+ defs.append('WITH_OPENJPEG')
if env['WITH_BF_DDS']:
- defs.append('WITH_DDS')
+ defs.append('WITH_DDS')
if env['WITH_BF_CINEON']:
- defs.append('WITH_CINEON')
+ defs.append('WITH_CINEON')
if env['WITH_BF_HDR']:
- defs.append('WITH_HDR')
+ defs.append('WITH_HDR')
if env['WITH_BF_FFMPEG']:
- defs.append('WITH_FFMPEG')
- incs += ' ' + env['BF_FFMPEG_INC']
+ defs.append('WITH_FFMPEG')
+ incs += ' ' + env['BF_FFMPEG_INC']
if env['WITH_BF_QUICKTIME']:
- defs.append('WITH_QUICKTIME')
- incs += ' ' + env['BF_QUICKTIME_INC']
+ defs.append('WITH_QUICKTIME')
+ incs += ' ' + env['BF_QUICKTIME_INC']
if env['WITH_BF_BULLET']:
- defs.append('USE_BULLET')
+ defs.append('USE_BULLET')
if env['OURPLATFORM'] == 'darwin':
if env['WITH_BF_OPENMP']:
defs.append('PARALLEL=1')
if env['BF_NO_ELBEEM']:
- defs.append('DISABLE_ELBEEM')
+ defs.append('DISABLE_ELBEEM')
if env['WITH_BF_LCMS']:
- defs.append('WITH_LCMS')
- incs += ' ' + env['BF_LCMS_INC']
+ defs.append('WITH_LCMS')
+ incs += ' ' + env['BF_LCMS_INC']
if env['WITH_BF_LZO']:
- incs += ' #/extern/lzo/minilzo'
- defs.append('WITH_LZO')
+ incs += ' #/extern/lzo/minilzo'
+ defs.append('WITH_LZO')
if env['WITH_BF_LZMA']:
- incs += ' #/extern/lzma'
- defs.append('WITH_LZMA')
+ incs += ' #/extern/lzma'
+ defs.append('WITH_LZMA')
if env['OURPLATFORM'] in ('win32-vc', 'win32-mingw', 'linuxcross', 'win64-vc'):
incs += ' ' + env['BF_PTHREADS_INC']
diff --git a/source/blender/blenkernel/intern/BME_Customdata.c b/source/blender/blenkernel/intern/BME_Customdata.c
index d8a6b66d5bb..1087b3a873c 100644
--- a/source/blender/blenkernel/intern/BME_Customdata.c
+++ b/source/blender/blenkernel/intern/BME_Customdata.c
@@ -36,9 +36,9 @@
#include <string.h>
+#include "MEM_guardedalloc.h"
#include "BKE_bmeshCustomData.h"
#include "bmesh_private.h"
-#include "MEM_guardedalloc.h"
/********************* Layer type information **********************/
typedef struct BME_LayerTypeInfo {
diff --git a/source/blender/blenkernel/intern/BME_conversions.c b/source/blender/blenkernel/intern/BME_conversions.c
index 64a6e14bc5d..341eb38b388 100644
--- a/source/blender/blenkernel/intern/BME_conversions.c
+++ b/source/blender/blenkernel/intern/BME_conversions.c
@@ -531,6 +531,7 @@ DerivedMesh *BME_bmesh_to_derivedmesh(BME_Mesh *bm, DerivedMesh *dm)
MFace *mface, *mf;
MEdge *medge, *me;
MVert *mvert, *mv;
+ int *origindex;
int totface,totedge,totvert,i,bmeshok,len, numTex, numCol;
BME_Vert *v1=NULL;
@@ -577,13 +578,16 @@ DerivedMesh *BME_bmesh_to_derivedmesh(BME_Mesh *bm, DerivedMesh *dm)
/*Make Verts*/
mvert = CDDM_get_verts(result);
+ origindex = result->getVertDataArray(result, CD_ORIGINDEX);
for(i=0,v1=bm->verts.first,mv=mvert;v1;v1=v1->next,i++,mv++){
VECCOPY(mv->co,v1->co);
mv->flag = (unsigned char)v1->flag;
mv->bweight = (char)(255.0*v1->bweight);
CustomData_from_bmesh_block(&bm->vdata, &result->vertData, &v1->data, i);
+ origindex[i] = ORIGINDEX_NONE;
}
medge = CDDM_get_edges(result);
+ origindex = result->getEdgeDataArray(result, CD_ORIGINDEX);
i=0;
for(e=bm->edges.first,me=medge;e;e=e->next){
if(e->tflag2){
@@ -600,12 +604,14 @@ DerivedMesh *BME_bmesh_to_derivedmesh(BME_Mesh *bm, DerivedMesh *dm)
me->bweight = (char)(255.0*e->bweight);
me->flag = e->flag;
CustomData_from_bmesh_block(&bm->edata, &result->edgeData, &e->data, i);
+ origindex[i] = ORIGINDEX_NONE;
me++;
i++;
}
}
if(totface){
mface = CDDM_get_faces(result);
+ origindex = result->getFaceDataArray(result, CD_ORIGINDEX);
/*make faces*/
for(i=0,f=bm->polys.first;f;f=f->next){
mf = &mface[i];
@@ -625,6 +631,7 @@ DerivedMesh *BME_bmesh_to_derivedmesh(BME_Mesh *bm, DerivedMesh *dm)
mf->flag = (unsigned char)f->flag;
CustomData_from_bmesh_block(&bm->pdata, &result->faceData, &f->data, i);
BME_DMloops_to_corners(bm, &result->faceData, i, f,numCol,numTex);
+ origindex[i] = ORIGINDEX_NONE;
i++;
}
}
diff --git a/source/blender/blenkernel/intern/DerivedMesh.c b/source/blender/blenkernel/intern/DerivedMesh.c
index 8b1443403a3..de7b962e38a 100644
--- a/source/blender/blenkernel/intern/DerivedMesh.c
+++ b/source/blender/blenkernel/intern/DerivedMesh.c
@@ -1189,10 +1189,15 @@ static void emDM_getFace(DerivedMesh *dm, int index, MFace *face_r)
static void emDM_copyVertArray(DerivedMesh *dm, MVert *vert_r)
{
- EditVert *ev = ((EditMeshDerivedMesh *)dm)->em->verts.first;
+ EditMeshDerivedMesh *emdm= (EditMeshDerivedMesh*) dm;
+ EditVert *ev = emdm->em->verts.first;
+ int i;
- for( ; ev; ev = ev->next, ++vert_r) {
- VECCOPY(vert_r->co, ev->co);
+ for(i=0; ev; ev = ev->next, ++vert_r, ++i) {
+ if(emdm->vertexCos)
+ copy_v3_v3(vert_r->co, emdm->vertexCos[i]);
+ else
+ copy_v3_v3(vert_r->co, ev->co);
vert_r->no[0] = ev->no[0] * 32767.0;
vert_r->no[1] = ev->no[1] * 32767.0;
@@ -1402,8 +1407,7 @@ static DerivedMesh *getEditMeshDerivedMesh(EditMesh *em, Object *ob,
/* following Mesh convention; we use vertex coordinate itself
* for normal in this case */
if (normalize_v3(no)==0.0) {
- VECCOPY(no, vertexCos[i]);
- normalize_v3(no);
+ normalize_v3_v3(no, vertexCos[i]);
}
}
}
@@ -2585,9 +2589,7 @@ void DM_add_tangent_layer(DerivedMesh *dm)
for(j=0; j<len; j++) {
vtang= find_vertex_tangent(vtangents[mf_vi[j]], mtface ? tf->uv[j] : uv[j]);
-
- VECCOPY(tangent[j], vtang);
- normalize_v3(tangent[j]);
+ normalize_v3_v3(tangent[j], vtang);
}
}
diff --git a/source/blender/blenkernel/intern/Makefile b/source/blender/blenkernel/intern/Makefile
index eb14914c7ba..53a9999758c 100644
--- a/source/blender/blenkernel/intern/Makefile
+++ b/source/blender/blenkernel/intern/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
# All rights reserved.
diff --git a/source/blender/blenkernel/intern/action.c b/source/blender/blenkernel/intern/action.c
index 41ff3fed8a5..90a3a6ce664 100644
--- a/source/blender/blenkernel/intern/action.c
+++ b/source/blender/blenkernel/intern/action.c
@@ -368,20 +368,12 @@ void action_groups_remove_channel (bAction *act, FCurve *fcu)
/* Find a group with the given name */
bActionGroup *action_groups_find_named (bAction *act, const char name[])
{
- bActionGroup *grp;
-
/* sanity checks */
if (ELEM3(NULL, act, act->groups.first, name) || (name[0] == 0))
return NULL;
/* do string comparisons */
- for (grp= act->groups.first; grp; grp= grp->next) {
- if (strcmp(grp->name, name) == 0)
- return grp;
- }
-
- /* not found */
- return NULL;
+ return BLI_findstring(&act->groups, name, offsetof(bActionGroup, name));
}
/* *************** Pose channels *************** */
diff --git a/source/blender/blenkernel/intern/anim.c b/source/blender/blenkernel/intern/anim.c
index 89c637d8192..6da9f2bbabc 100644
--- a/source/blender/blenkernel/intern/anim.c
+++ b/source/blender/blenkernel/intern/anim.c
@@ -40,7 +40,6 @@
#include "BLI_math.h"
#include "BLI_rand.h"
-
#include "DNA_anim_types.h"
#include "DNA_armature_types.h"
#include "DNA_group_types.h"
@@ -49,7 +48,6 @@
#include "DNA_scene_types.h"
#include "DNA_vfont_types.h"
-//(INCLUDE_LINT)#include "BKE_anim.h"
#include "BKE_curve.h"
#include "BKE_DerivedMesh.h"
#include "BKE_depsgraph.h"
@@ -66,7 +64,6 @@
#include "BKE_utildefines.h"
#include "BKE_depsgraph.h"
-#include "ED_curve.h" /* for ED_curve_nurbs */
// XXX bad level call...
@@ -643,29 +640,19 @@ int where_on_path(Object *ob, float ctime, float *vec, float *dir, float *quat,
/* Need to verify the quat interpolation is correct - XXX */
if (quat) {
- //float totfac, q1[4], q2[4];
-
- /* checks for totfac are needed when 'fac' is 1.0 key_curve_position_weights can assign zero
- * to more then one index in data which can give divide by zero error */
-/*
- totfac= data[0]+data[1];
- if(totfac>0.000001) interp_qt_qtqt(q1, p0->quat, p1->quat, data[0] / totfac);
- else QUATCOPY(q1, p1->quat);
+ float totfac, q1[4], q2[4];
- normalize_qt(q1);
+ totfac= data[0]+data[3];
+ if(totfac>FLT_EPSILON) interp_qt_qtqt(q1, p0->quat, p3->quat, data[3] / totfac);
+ else QUATCOPY(q1, p1->quat);
- totfac= data[2]+data[3];
- if(totfac>0.000001) interp_qt_qtqt(q2, p2->quat, p3->quat, data[2] / totfac);
- else QUATCOPY(q1, p3->quat);
- normalize_qt(q2);
+ totfac= data[1]+data[2];
+ if(totfac>FLT_EPSILON) interp_qt_qtqt(q2, p1->quat, p2->quat, data[2] / totfac);
+ else QUATCOPY(q1, p3->quat);
totfac = data[0]+data[1]+data[2]+data[3];
- if(totfac>0.000001) interp_qt_qtqt(quat, q1, q2, (data[0]+data[1]) / totfac);
- else QUATCOPY(quat, q2);
- normalize_qt(quat);
- */
- // XXX - find some way to make quat interpolation work correctly, above code fails in rare but nasty cases.
- QUATCOPY(quat, p1->quat);
+ if(totfac>FLT_EPSILON) interp_qt_qtqt(quat, q1, q2, (data[1]+data[2]) / totfac);
+ else QUATCOPY(quat, q2);
}
if(radius)
@@ -1288,6 +1275,12 @@ static void new_particle_duplilist(ListBase *lb, ID *id, Scene *scene, Object *p
size = psys_get_child_size(psys, cpa, ctime, 0);
}
+ /* some hair paths might be non-existent so they can't be used for duplication */
+ if(hair &&
+ ((a < totpart && psys->pathcache[a]->steps < 0) ||
+ (a >= totpart && psys->childcache[a-totpart]->steps < 0)))
+ continue;
+
if(part->ren_as==PART_DRAW_GR) {
/* for groups, pick the object based on settings */
if(part->draw&PART_DRAW_RAND_GR)
@@ -1354,19 +1347,25 @@ static void new_particle_duplilist(ListBase *lb, ID *id, Scene *scene, Object *p
VECCOPY(vec, obmat[3]);
obmat[3][0] = obmat[3][1] = obmat[3][2] = 0.0f;
- copy_m4_m4(mat, pamat);
+ /* Normal particles and cached hair live in global space so we need to
+ * remove the real emitter's transformation before 2nd order duplication.
+ */
+ if(par_space_mat)
+ mul_m4_m4m4(mat, pamat, psys->imat);
+ else
+ copy_m4_m4(mat, pamat);
mul_m4_m4m4(tmat, obmat, mat);
mul_mat3_m4_fl(tmat, size*scale);
- if(part->draw & PART_DRAW_GLOBAL_OB)
- VECADD(tmat[3], tmat[3], vec);
-
if(par_space_mat)
mul_m4_m4m4(mat, tmat, par_space_mat);
else
copy_m4_m4(mat, tmat);
+ if(part->draw & PART_DRAW_GLOBAL_OB)
+ VECADD(mat[3], mat[3], vec);
+
dob= new_dupli_object(lb, ob, mat, ob->lay, counter, OB_DUPLIPARTS, animated);
copy_m4_m4(dob->omat, oldobmat);
if(G.rendering)
diff --git a/source/blender/blenkernel/intern/armature.c b/source/blender/blenkernel/intern/armature.c
index b86be371d66..2e760f53155 100644
--- a/source/blender/blenkernel/intern/armature.c
+++ b/source/blender/blenkernel/intern/armature.c
@@ -1283,14 +1283,15 @@ void vec_roll_to_mat3(float *vec, float roll, float mat[][3])
float nor[3], axis[3], target[3]={0,1,0};
float theta;
float rMatrix[3][3], bMatrix[3][3];
-
- VECCOPY (nor, vec);
- normalize_v3(nor);
+
+ normalize_v3_v3(nor, vec);
/* Find Axis & Amount for bone matrix*/
cross_v3_v3v3(axis,target,nor);
- if (dot_v3v3(axis,axis) > 0.0000000000001) {
+ /* was 0.0000000000001, caused bug [#23954], smaller values give unstable
+ * roll when toggling editmode */
+ if (dot_v3v3(axis,axis) > 0.00001) {
/* if nor is *not* a multiple of target ... */
normalize_v3(axis);
diff --git a/source/blender/blenkernel/intern/blender.c b/source/blender/blenkernel/intern/blender.c
index 7c8cea12549..d120b42a286 100644
--- a/source/blender/blenkernel/intern/blender.c
+++ b/source/blender/blenkernel/intern/blender.c
@@ -43,6 +43,7 @@
#include <stdlib.h>
#include <stdio.h>
+#include <stddef.h>
#include <string.h>
#include <fcntl.h> // for open
@@ -230,7 +231,7 @@ static void setup_app_data(bContext *C, BlendFileData *bfd, char *filename)
curscene= bfd->curscene;
if(curscene==NULL) curscene= bfd->main->scene.first;
/* and we enforce curscene to be in current screen */
- curscreen->scene= curscene;
+ if(curscreen) curscreen->scene= curscene; /* can run in bgmode */
/* clear_global will free G.main, here we can still restore pointers */
lib_link_screen_restore(bfd->main, curscreen, curscene);
@@ -459,13 +460,16 @@ static UndoElem *curundo= NULL;
static int read_undosave(bContext *C, UndoElem *uel)
{
- char scestr[FILE_MAXDIR+FILE_MAXFILE];
+ char scestr[FILE_MAXDIR+FILE_MAXFILE]; /* we should eventually just use G.main->name */
+ char mainstr[FILE_MAXDIR+FILE_MAXFILE];
int success=0, fileflags;
/* This is needed so undoing/redoing doesnt crash with threaded previews going */
WM_jobs_stop_all(CTX_wm_manager(C));
strcpy(scestr, G.sce); /* temporal store */
+ strcpy(mainstr, G.main->name); /* temporal store */
+
fileflags= G.fileflags;
G.fileflags |= G_FILE_NO_UI;
@@ -475,7 +479,8 @@ static int read_undosave(bContext *C, UndoElem *uel)
success= BKE_read_file_from_memfile(C, &uel->memfile, NULL);
/* restore */
- strcpy(G.sce, scestr);
+ strcpy(G.sce, scestr); /* restore */
+ strcpy(G.main->name, mainstr); /* restore */
G.fileflags= fileflags;
if(success)
@@ -641,11 +646,11 @@ void BKE_undo_number(bContext *C, int nr)
void BKE_undo_name(bContext *C, const char *name)
{
UndoElem *uel;
-
- for(uel= undobase.last; uel; uel= uel->prev) {
+
+ for(uel= undobase.last; uel; uel= uel->prev)
if(strcmp(name, uel->name)==0)
break;
- }
+
if(uel && uel->prev) {
curundo= uel->prev;
BKE_undo_step(C, 0);
diff --git a/source/blender/blenkernel/intern/boids.c b/source/blender/blenkernel/intern/boids.c
index 82602a6951d..69a42e52247 100644
--- a/source/blender/blenkernel/intern/boids.c
+++ b/source/blender/blenkernel/intern/boids.c
@@ -240,6 +240,7 @@ static int rule_avoid_collision(BoidRule *rule, BoidBrainData *bbd, BoidValues *
mul_v3_fl(bbd->wanted_co, (1.0f - t) * val->personal_space * pa->size);
bbd->wanted_speed = sqrt(t) * len_v3(pa->prev_state.vel);
+ bbd->wanted_speed = MAX2(bbd->wanted_speed, val->min_speed);
return 1;
}
@@ -659,9 +660,9 @@ static int rule_fight(BoidRule *rule, BoidBrainData *bbd, BoidValues *val, Parti
/* attack if in range */
if(closest_dist <= bbd->part->boids->range + pa->size + enemy_pa->size) {
float damage = BLI_frand();
- float enemy_dir[3] = {bbd->wanted_co[0],bbd->wanted_co[1],bbd->wanted_co[2]};
+ float enemy_dir[3];
- normalize_v3(enemy_dir);
+ normalize_v3_v3(enemy_dir, bbd->wanted_co);
/* fight mode */
bbd->wanted_speed = 0.0f;
@@ -736,6 +737,7 @@ static void set_boid_values(BoidValues *val, BoidSettings *boids, ParticleData *
val->jump_speed = 0.0f; /* no jumping in air */
}
}
+
static Object *boid_find_ground(BoidBrainData *bbd, ParticleData *pa, float *ground_co, float *ground_nor)
{
BoidParticle *bpa = pa->boid;
@@ -765,16 +767,15 @@ static Object *boid_find_ground(BoidBrainData *bbd, ParticleData *pa, float *gro
if(!bbd->sim->colliders)
return NULL;
+ /* first try to find below boid */
copy_v3_v3(col.co1, pa->state.co);
- copy_v3_v3(col.co2, pa->state.co);
- add_v3_v3(col.co1, zvec);
+ sub_v3_v3v3(col.co2, pa->state.co, zvec);
sub_v3_v3(col.co2, zvec);
sub_v3_v3v3(ray_dir, col.co2, col.co1);
col.t = 0.0f;
hit.index = -1;
hit.dist = col.ray_len = len_v3(ray_dir);
- /* find out upmost deflector object */
for(coll = bbd->sim->colliders->first; coll; coll = coll->next){
col.ob = coll->ob;
col.md = coll->collmd;
@@ -786,18 +787,40 @@ static Object *boid_find_ground(BoidBrainData *bbd, ParticleData *pa, float *gro
if(hit.index>=0) {
t = hit.dist/col.ray_len;
interp_v3_v3v3(ground_co, col.co1, col.co2, t);
- VECCOPY(ground_nor, col.nor);
- normalize_v3(ground_nor);
+ normalize_v3_v3(ground_nor, col.nor);
return col.hit_ob;
}
- else {
- /* default to z=0 */
- VECCOPY(ground_co, pa->state.co);
- ground_co[2] = 0;
- ground_nor[0] = ground_nor[1] = 0.0f;
- ground_nor[2] = 1.0f;
- return NULL;
+
+ /* couldn't find below, so find upmost deflector object */
+ add_v3_v3v3(col.co1, pa->state.co, zvec);
+ sub_v3_v3v3(col.co2, pa->state.co, zvec);
+ sub_v3_v3(col.co2, zvec);
+ sub_v3_v3v3(ray_dir, col.co2, col.co1);
+ col.t = 0.0f;
+ hit.index = -1;
+ hit.dist = col.ray_len = len_v3(ray_dir);
+
+ for(coll = bbd->sim->colliders->first; coll; coll = coll->next){
+ col.ob = coll->ob;
+ col.md = coll->collmd;
+
+ if(col.md && col.md->bvhtree)
+ BLI_bvhtree_ray_cast(col.md->bvhtree, col.co1, ray_dir, radius, &hit, particle_intersect_face, &col);
}
+ /* then use that object */
+ if(hit.index>=0) {
+ t = hit.dist/col.ray_len;
+ interp_v3_v3v3(ground_co, col.co1, col.co2, t);
+ normalize_v3_v3(ground_nor, col.nor);
+ return col.hit_ob;
+ }
+
+ /* default to z=0 */
+ VECCOPY(ground_co, pa->state.co);
+ ground_co[2] = 0;
+ ground_nor[0] = ground_nor[1] = 0.0f;
+ ground_nor[2] = 1.0f;
+ return NULL;
}
}
static int boid_rule_applies(ParticleData *pa, BoidSettings *boids, BoidRule *rule)
@@ -911,6 +934,7 @@ void boid_brain(BoidBrainData *bbd, int p, ParticleData *pa)
if(bpa->data.health <= 0.0f) {
pa->alive = PARS_DYING;
+ pa->dietime = bbd->cfra;
return;
}
@@ -1115,8 +1139,7 @@ void boid_body(BoidBrainData *bbd, ParticleData *pa)
}
VECCOPY(old_dir, pa->prev_state.ave);
- VECCOPY(wanted_dir, bbd->wanted_co);
- new_speed = normalize_v3(wanted_dir);
+ new_speed = normalize_v3_v3(wanted_dir, bbd->wanted_co);
/* first check if we have valid direction we want to go towards */
if(new_speed == 0.0f) {
@@ -1227,8 +1250,8 @@ void boid_body(BoidBrainData *bbd, ParticleData *pa)
VECADDFAC(pa->state.vel, pa->state.vel, acc, dtime);
- if(bpa->data.mode != eBoidMode_InAir)
- bpa->ground = boid_find_ground(bbd, pa, ground_co, ground_nor);
+ //if(bpa->data.mode != eBoidMode_InAir)
+ bpa->ground = boid_find_ground(bbd, pa, ground_co, ground_nor);
/* change modes, constrain movement & keep track of down vector */
switch(bpa->data.mode) {
@@ -1256,11 +1279,18 @@ void boid_body(BoidBrainData *bbd, ParticleData *pa)
boid_find_ground(bbd, pa, ground_co, ground_nor);
boid_climb(boids, pa, ground_co, ground_nor);
}
- /* land boid when belowg ground */
- else if(boids->options & BOID_ALLOW_LAND && pa->state.co[2] <= ground_co[2] + pa->size * boids->height) {
- pa->state.co[2] = ground_co[2] + pa->size * boids->height;
- pa->state.vel[2] = 0.0f;
- bpa->data.mode = eBoidMode_OnLand;
+ else if(pa->state.co[2] <= ground_co[2] + pa->size * boids->height) {
+ /* land boid when below ground */
+ if(boids->options & BOID_ALLOW_LAND) {
+ pa->state.co[2] = ground_co[2] + pa->size * boids->height;
+ pa->state.vel[2] = 0.0f;
+ bpa->data.mode = eBoidMode_OnLand;
+ }
+ /* fly above ground */
+ else {
+ pa->state.co[2] = ground_co[2] + pa->size * boids->height;
+ pa->state.vel[2] = 0.0f;
+ }
}
break;
}
@@ -1356,7 +1386,8 @@ void boid_body(BoidBrainData *bbd, ParticleData *pa)
/* save direction to state.ave unless the boid is falling */
/* (boids can't effect their direction when falling) */
if(bpa->data.mode!=eBoidMode_Falling && len_v3(pa->state.vel) > 0.1*pa->size) {
- VECCOPY(pa->state.ave, pa->state.vel);
+ copy_v3_v3(pa->state.ave, pa->state.vel);
+ pa->state.ave[2] *= bbd->part->boids->pitch;
normalize_v3(pa->state.ave);
}
@@ -1442,6 +1473,7 @@ void boid_default_settings(BoidSettings *boids)
boids->landing_smoothness = 3.0f;
boids->banking = 1.0f;
+ boids->pitch = 1.0f;
boids->height = 1.0f;
boids->health = 1.0f;
diff --git a/source/blender/blenkernel/intern/booleanops_mesh.c b/source/blender/blenkernel/intern/booleanops_mesh.c
index 431e51cf149..dd595fc98b6 100644
--- a/source/blender/blenkernel/intern/booleanops_mesh.c
+++ b/source/blender/blenkernel/intern/booleanops_mesh.c
@@ -30,7 +30,6 @@
*/
#include "CSG_BooleanOps.h"
-#include "MEM_guardedalloc.h"
diff --git a/source/blender/blenkernel/intern/brush.c b/source/blender/blenkernel/intern/brush.c
index 905515914b4..c67db9382f3 100644
--- a/source/blender/blenkernel/intern/brush.c
+++ b/source/blender/blenkernel/intern/brush.c
@@ -39,7 +39,6 @@
#include "DNA_windowmanager_types.h"
#include "WM_types.h"
-#include "WM_api.h"
#include "RNA_access.h"
@@ -148,6 +147,8 @@ Brush *copy_brush(Brush *brush)
if (brush->icon_imbuf)
brushn->icon_imbuf= IMB_dupImBuf(brush->icon_imbuf);
+ brushn->preview = NULL;
+
brushn->curve= curvemapping_copy(brush->curve);
/* enable fake user by default */
@@ -479,7 +480,7 @@ int brush_clone_image_delete(Brush *brush)
}
/* Brush Sampling */
-void brush_sample_tex(Brush *brush, float *xy, float *rgba)
+void brush_sample_tex(Brush *brush, float *xy, float *rgba, const int thread)
{
MTex *mtex= &brush->mtex;
@@ -492,7 +493,7 @@ void brush_sample_tex(Brush *brush, float *xy, float *rgba)
co[1]= xy[1]/radius;
co[2]= 0.0f;
- hasrgb= externtex(mtex, co, &tin, &tr, &tg, &tb, &ta);
+ hasrgb= externtex(mtex, co, &tin, &tr, &tg, &tb, &ta, thread);
if (hasrgb) {
rgba[0]= tr;
@@ -546,12 +547,12 @@ void brush_imbuf_new(Brush *brush, short flt, short texfall, int bufsize, ImBuf
dstf[3]= alpha*brush_curve_strength_clamp(brush, dist, radius);
}
else if (texfall == 1) {
- brush_sample_tex(brush, xy, dstf);
+ brush_sample_tex(brush, xy, dstf, 0);
}
else {
dist = sqrt(xy[0]*xy[0] + xy[1]*xy[1]);
- brush_sample_tex(brush, xy, rgba);
+ brush_sample_tex(brush, xy, rgba, 0);
dstf[0] = rgba[0]*brush->rgb[0];
dstf[1] = rgba[1]*brush->rgb[1];
@@ -582,7 +583,7 @@ void brush_imbuf_new(Brush *brush, short flt, short texfall, int bufsize, ImBuf
dst[3]= FTOCHAR(alpha*brush_curve_strength(brush, dist, radius));
}
else if (texfall == 1) {
- brush_sample_tex(brush, xy, rgba);
+ brush_sample_tex(brush, xy, rgba, 0);
dst[0]= FTOCHAR(rgba[0]);
dst[1]= FTOCHAR(rgba[1]);
dst[2]= FTOCHAR(rgba[2]);
@@ -591,7 +592,7 @@ void brush_imbuf_new(Brush *brush, short flt, short texfall, int bufsize, ImBuf
else {
dist = sqrt(xy[0]*xy[0] + xy[1]*xy[1]);
- brush_sample_tex(brush, xy, rgba);
+ brush_sample_tex(brush, xy, rgba, 0);
dst[0] = FTOCHAR(rgba[0]*brush->rgb[0]);
dst[1] = FTOCHAR(rgba[1]*brush->rgb[1]);
dst[2] = FTOCHAR(rgba[2]*brush->rgb[2]);
@@ -738,7 +739,7 @@ static void brush_painter_do_partial(BrushPainter *painter, ImBuf *oldtexibuf, i
xy[0] = x + xoff;
xy[1] = y + yoff;
- brush_sample_tex(brush, xy, tf);
+ brush_sample_tex(brush, xy, tf, 0);
}
bf[0] = tf[0]*mf[0];
@@ -769,7 +770,7 @@ static void brush_painter_do_partial(BrushPainter *painter, ImBuf *oldtexibuf, i
xy[0] = x + xoff;
xy[1] = y + yoff;
- brush_sample_tex(brush, xy, rgba);
+ brush_sample_tex(brush, xy, rgba, 0);
t[0]= FTOCHAR(rgba[0]);
t[1]= FTOCHAR(rgba[1]);
t[2]= FTOCHAR(rgba[2]);
diff --git a/source/blender/blenkernel/intern/cdderivedmesh.c b/source/blender/blenkernel/intern/cdderivedmesh.c
index fb1e8c00991..ca81e216006 100644
--- a/source/blender/blenkernel/intern/cdderivedmesh.c
+++ b/source/blender/blenkernel/intern/cdderivedmesh.c
@@ -1777,14 +1777,10 @@ void CDDM_calc_normals(DerivedMesh *dm)
for(i = 0; i < numVerts; i++, mv++) {
float *no = temp_nors[i];
- if (normalize_v3(no) == 0.0) {
- VECCOPY(no, mv->co);
- normalize_v3(no);
- }
+ if (normalize_v3(no) == 0.0)
+ normalize_v3_v3(no, mv->co);
- mv->no[0] = (short)(no[0] * 32767.0);
- mv->no[1] = (short)(no[1] * 32767.0);
- mv->no[2] = (short)(no[2] * 32767.0);
+ normal_float_to_short_v3(mv->no, no);
}
MEM_freeN(temp_nors);
diff --git a/source/blender/blenkernel/intern/cloth.c b/source/blender/blenkernel/intern/cloth.c
index b9b1c16c0c4..be1552a882d 100644
--- a/source/blender/blenkernel/intern/cloth.c
+++ b/source/blender/blenkernel/intern/cloth.c
@@ -27,6 +27,14 @@
#include "MEM_guardedalloc.h"
+#include "DNA_cloth_types.h"
+#include "DNA_scene_types.h"
+#include "DNA_object_types.h"
+#include "DNA_meshdata_types.h"
+
+#include "BLI_math.h"
+#include "BLI_edgehash.h"
+
#include "BKE_cdderivedmesh.h"
#include "BKE_cloth.h"
#include "BKE_effect.h"
@@ -438,7 +446,7 @@ DerivedMesh *clothModifier_do(ClothModifierData *clmd, Scene *scene, Object *ob,
return dm;
}
- if(clmd->sim_parms->reset || (framenr == (startframe - clmd->sim_parms->preroll)))
+ if(clmd->sim_parms->reset || (framenr == (startframe - clmd->sim_parms->preroll) && clmd->sim_parms->preroll != 0))
{
clmd->sim_parms->reset = 0;
cache->flag |= PTCACHE_OUTDATED;
@@ -504,7 +512,7 @@ DerivedMesh *clothModifier_do(ClothModifierData *clmd, Scene *scene, Object *ob,
}
/* try to read from cache */
- cache_result = BKE_ptcache_read_cache(&pid, (float)framenr, scene->r.frs_sec);
+ cache_result = BKE_ptcache_read_cache(&pid, (float)framenr+scene->r.subframe, scene->r.frs_sec);
if(cache_result == PTCACHE_READ_EXACT || cache_result == PTCACHE_READ_INTERPOLATED) {
implicit_set_positions(clmd);
diff --git a/source/blender/blenkernel/intern/collision.c b/source/blender/blenkernel/intern/collision.c
index 54adc648539..af12d23b2c2 100644
--- a/source/blender/blenkernel/intern/collision.c
+++ b/source/blender/blenkernel/intern/collision.c
@@ -37,6 +37,11 @@
#include "DNA_object_types.h"
#include "DNA_object_force.h"
#include "DNA_scene_types.h"
+#include "DNA_meshdata_types.h"
+
+#include "BLI_blenlib.h"
+#include "BLI_math.h"
+#include "BLI_edgehash.h"
#include "BKE_DerivedMesh.h"
#include "BKE_global.h"
@@ -686,8 +691,7 @@ CollPair* cloth_collision ( ModifierData *md1, ModifierData *md2, BVHTreeOverlap
if ( distance <= ( epsilon1 + epsilon2 + ALMOST_ZERO ) )
{
- VECCOPY ( collpair->normal, collpair->vector );
- normalize_v3( collpair->normal );
+ normalize_v3_v3( collpair->normal, collpair->vector );
collpair->distance = distance;
collpair->flag = 0;
diff --git a/source/blender/blenkernel/intern/constraint.c b/source/blender/blenkernel/intern/constraint.c
index aae70c055d0..59e81293c9f 100644
--- a/source/blender/blenkernel/intern/constraint.c
+++ b/source/blender/blenkernel/intern/constraint.c
@@ -256,7 +256,7 @@ void constraint_mat_convertspace (Object *ob, bPoseChannel *pchan, float mat[][4
/* construct offs_bone the same way it is done in armature.c */
copy_m4_m3(offs_bone, pchan->bone->bone_mat);
- VECCOPY(offs_bone[3], pchan->bone->head);
+ copy_v3_v3(offs_bone[3], pchan->bone->head);
offs_bone[3][1]+= pchan->bone->parent->length;
if (pchan->bone->flag & BONE_HINGE) {
@@ -267,7 +267,7 @@ void constraint_mat_convertspace (Object *ob, bPoseChannel *pchan, float mat[][4
copy_m4_m4(tmat, pchan->bone->parent->arm_mat);
/* the location of actual parent transform */
- VECCOPY(tmat[3], offs_bone[3]);
+ copy_v3_v3(tmat[3], offs_bone[3]);
offs_bone[3][0]= offs_bone[3][1]= offs_bone[3][2]= 0.0f;
mul_m4_v3(pchan->parent->pose_mat, tmat[3]);
@@ -309,7 +309,7 @@ void constraint_mat_convertspace (Object *ob, bPoseChannel *pchan, float mat[][4
/* construct offs_bone the same way it is done in armature.c */
copy_m4_m3(offs_bone, pchan->bone->bone_mat);
- VECCOPY(offs_bone[3], pchan->bone->head);
+ copy_v3_v3(offs_bone[3], pchan->bone->head);
offs_bone[3][1]+= pchan->bone->parent->length;
if (pchan->bone->flag & BONE_HINGE) {
@@ -320,8 +320,8 @@ void constraint_mat_convertspace (Object *ob, bPoseChannel *pchan, float mat[][4
copy_m4_m4(tmat, pchan->bone->parent->arm_mat);
/* the location of actual parent transform */
- VECCOPY(tmat[3], offs_bone[3]);
- offs_bone[3][0]= offs_bone[3][1]= offs_bone[3][2]= 0.0f;
+ copy_v3_v3(tmat[3], offs_bone[3]);
+ zero_v3(offs_bone[3]);
mul_m4_v3(pchan->parent->pose_mat, tmat[3]);
mul_m4_m4m4(diff_mat, offs_bone, tmat);
@@ -400,7 +400,7 @@ static void contarget_get_mesh_mat (Scene *scene, Object *ob, char *substring, f
DerivedMesh *dm = NULL;
Mesh *me= ob->data;
EditMesh *em = BKE_mesh_get_editmesh(me);
- float vec[3] = {0.0f, 0.0f, 0.0f}, tvec[3];
+ float vec[3] = {0.0f, 0.0f, 0.0f};
float normal[3] = {0.0f, 0.0f, 0.0f}, plane[3];
float imat[3][3], tmat[3][3];
int dgroup;
@@ -477,9 +477,9 @@ static void contarget_get_mesh_mat (Scene *scene, Object *ob, char *substring, f
mul_m3_v3(tmat, normal);
normalize_v3(normal);
- VECCOPY(plane, tmat[1]);
+ copy_v3_v3(plane, tmat[1]);
- VECCOPY(tmat[2], normal);
+ copy_v3_v3(tmat[2], normal);
cross_v3_v3v3(tmat[0], normal, plane);
cross_v3_v3v3(tmat[1], tmat[2], tmat[0]);
@@ -488,8 +488,7 @@ static void contarget_get_mesh_mat (Scene *scene, Object *ob, char *substring, f
/* apply the average coordinate as the new location */
- mul_v3_m4v3(tvec, ob->obmat, vec);
- VECCOPY(mat[3], tvec);
+ mul_v3_m4v3(mat[3], ob->obmat, vec);
}
}
@@ -554,7 +553,7 @@ static void contarget_get_lattice_mat (Object *ob, char *substring, float mat[][
mul_v3_m4v3(tvec, ob->obmat, vec);
/* copy new location to matrix */
- VECCOPY(mat[3], tvec);
+ copy_v3_v3(mat[3], tvec);
}
/* generic function to get the appropriate matrix for most target cases */
@@ -819,11 +818,11 @@ static void childof_evaluate (bConstraint *con, bConstraintOb *cob, ListBase *ta
copy_m4_m4(invmat, data->invmat);
/* extract components of both matrices */
- VECCOPY(loc, ct->matrix[3]);
+ copy_v3_v3(loc, ct->matrix[3]);
mat4_to_eulO(eul, ct->rotOrder, ct->matrix);
mat4_to_size(size, ct->matrix);
- VECCOPY(loco, invmat[3]);
+ copy_v3_v3(loco, invmat[3]);
mat4_to_eulO(eulo, cob->rotOrder, invmat);
mat4_to_size(sizo, invmat);
@@ -851,7 +850,14 @@ static void childof_evaluate (bConstraint *con, bConstraintOb *cob, ListBase *ta
* the effect of this constraint (i.e. owner is 'parented' to parent)
*/
copy_m4_m4(tempmat, cob->matrix);
- mul_m4_m4m4(cob->matrix, tempmat, parmat);
+ mul_m4_m4m4(cob->matrix, tempmat, parmat);
+
+ /* without this, changes to scale and rotation can change location
+ * of a parentless bone or a disconnected bone. Even though its set
+ * to zero above. */
+ if (!(data->flag & CHILDOF_LOCX)) cob->matrix[3][0]= tempmat[3][0];
+ if (!(data->flag & CHILDOF_LOCY)) cob->matrix[3][1]= tempmat[3][1];
+ if (!(data->flag & CHILDOF_LOCZ)) cob->matrix[3][2]= tempmat[3][2];
}
}
@@ -940,9 +946,8 @@ static void vectomat (float *vec, float *target_up, short axis, short upflag, sh
float right[3];
float neg = -1;
int right_index;
-
- copy_v3_v3(n, vec);
- if (normalize_v3(n) == 0.0) {
+
+ if (normalize_v3_v3(n, vec) == 0.0) {
n[0] = 0.0;
n[1] = 0.0;
n[2] = 1.0;
@@ -953,9 +958,7 @@ static void vectomat (float *vec, float *target_up, short axis, short upflag, sh
/* n specifies the transformation of the track axis */
if (flags & TARGET_Z_UP) {
/* target Z axis is the global up axis */
- u[0] = target_up[0];
- u[1] = target_up[1];
- u[2] = target_up[2];
+ copy_v3_v3(u, target_up);
}
else {
/* world Z axis is the global up axis */
@@ -988,20 +991,13 @@ static void vectomat (float *vec, float *target_up, short axis, short upflag, sh
m[right_index][1] = neg * right[1];
m[right_index][2] = neg * right[2];
- m[upflag][0] = proj[0];
- m[upflag][1] = proj[1];
- m[upflag][2] = proj[2];
+ copy_v3_v3(m[upflag], proj);
- m[axis][0] = n[0];
- m[axis][1] = n[1];
- m[axis][2] = n[2];
+ copy_v3_v3(m[axis], n);
}
/* identity matrix - don't do anything if the two axes are the same */
else {
- m[0][0]= m[1][1]= m[2][2]= 1.0;
- m[0][1]= m[0][2]= 0.0;
- m[1][0]= m[1][2]= 0.0;
- m[2][0]= m[2][1]= 0.0;
+ unit_m3(m);
}
}
@@ -1264,7 +1260,7 @@ static void followpath_get_tarmat (bConstraint *con, bConstraintOb *cob, bConstr
copy_m4_m4(totmat, rmat);
}
- VECCOPY(totmat[3], vec);
+ copy_v3_v3(totmat[3], vec);
mul_serie_m4(ct->matrix, ct->tar->obmat, totmat, NULL, NULL, NULL, NULL, NULL, NULL);
}
@@ -1383,7 +1379,7 @@ static void rotlimit_evaluate (bConstraint *con, bConstraintOb *cob, ListBase *t
float eul[3];
float size[3];
- VECCOPY(loc, cob->matrix[3]);
+ copy_v3_v3(loc, cob->matrix[3]);
mat4_to_size(size, cob->matrix);
mat4_to_eulO(eul, cob->rotOrder, cob->matrix);
@@ -1544,7 +1540,7 @@ static void loclike_evaluate (bConstraint *con, bConstraintOb *cob, ListBase *ta
float offset[3] = {0.0f, 0.0f, 0.0f};
if (data->flag & LOCLIKE_OFFSET)
- VECCOPY(offset, cob->matrix[3]);
+ copy_v3_v3(offset, cob->matrix[3]);
if (data->flag & LOCLIKE_X) {
cob->matrix[3][0] = ct->matrix[3][0];
@@ -1636,12 +1632,13 @@ static void rotlike_evaluate (bConstraint *con, bConstraintOb *cob, ListBase *ta
float eul[3], obeul[3];
float size[3];
- VECCOPY(loc, cob->matrix[3]);
+ copy_v3_v3(loc, cob->matrix[3]);
mat4_to_size(size, cob->matrix);
/* to allow compatible rotations, must get both rotations in the order of the owner... */
- mat4_to_eulO(eul, cob->rotOrder, ct->matrix);
mat4_to_eulO(obeul, cob->rotOrder, cob->matrix);
+ /* we must get compatible eulers from the beginning because some of them can be modified below (see bug #21875) */
+ mat4_to_compatible_eulO(eul, obeul, cob->rotOrder, ct->matrix);
if ((data->flag & ROTLIKE_X)==0)
eul[0] = obeul[0];
@@ -1673,6 +1670,7 @@ static void rotlike_evaluate (bConstraint *con, bConstraintOb *cob, ListBase *ta
eul[2] *= -1;
}
+ /* good to make eulers compatible again, since we don't know how much they were changed above */
compatible_eul(eul, obeul);
loc_eulO_size_to_mat4(cob->matrix, loc, eul, size, cob->rotOrder);
}
@@ -2138,7 +2136,7 @@ static void actcon_get_tarmat (bConstraint *con, bConstraintOb *cob, bConstraint
}
else {
/* extract location */
- VECCOPY(vec, tempmat[3]);
+ copy_v3_v3(vec, tempmat[3]);
axis= data->type - 20;
}
@@ -2294,10 +2292,7 @@ static void locktrack_evaluate (bConstraint *con, bConstraintOb *cob, ListBase *
normalize_v3(totmat[1]);
/* the x axis is fixed */
- totmat[0][0] = cob->matrix[0][0];
- totmat[0][1] = cob->matrix[0][1];
- totmat[0][2] = cob->matrix[0][2];
- normalize_v3(totmat[0]);
+ normalize_v3_v3(totmat[0], cob->matrix[0]);
/* the z axis gets mapped onto a third orthogonal vector */
cross_v3_v3v3(totmat[2], totmat[0], totmat[1]);
@@ -2311,10 +2306,7 @@ static void locktrack_evaluate (bConstraint *con, bConstraintOb *cob, ListBase *
normalize_v3(totmat[2]);
/* the x axis is fixed */
- totmat[0][0] = cob->matrix[0][0];
- totmat[0][1] = cob->matrix[0][1];
- totmat[0][2] = cob->matrix[0][2];
- normalize_v3(totmat[0]);
+ normalize_v3_v3(totmat[0], cob->matrix[0]);
/* the z axis gets mapped onto a third orthogonal vector */
cross_v3_v3v3(totmat[1], totmat[2], totmat[0]);
@@ -2329,10 +2321,7 @@ static void locktrack_evaluate (bConstraint *con, bConstraintOb *cob, ListBase *
negate_v3(totmat[1]);
/* the x axis is fixed */
- totmat[0][0] = cob->matrix[0][0];
- totmat[0][1] = cob->matrix[0][1];
- totmat[0][2] = cob->matrix[0][2];
- normalize_v3(totmat[0]);
+ normalize_v3_v3(totmat[0], cob->matrix[0]);
/* the z axis gets mapped onto a third orthogonal vector */
cross_v3_v3v3(totmat[2], totmat[0], totmat[1]);
@@ -2347,10 +2336,7 @@ static void locktrack_evaluate (bConstraint *con, bConstraintOb *cob, ListBase *
negate_v3(totmat[2]);
/* the x axis is fixed */
- totmat[0][0] = cob->matrix[0][0];
- totmat[0][1] = cob->matrix[0][1];
- totmat[0][2] = cob->matrix[0][2];
- normalize_v3(totmat[0]);
+ normalize_v3_v3(totmat[0], cob->matrix[0]);
/* the z axis gets mapped onto a third orthogonal vector */
cross_v3_v3v3(totmat[1], totmat[2], totmat[0]);
@@ -2358,9 +2344,7 @@ static void locktrack_evaluate (bConstraint *con, bConstraintOb *cob, ListBase *
break;
default:
{
- totmat[0][0] = 1;totmat[0][1] = 0;totmat[0][2] = 0;
- totmat[1][0] = 0;totmat[1][1] = 1;totmat[1][2] = 0;
- totmat[2][0] = 0;totmat[2][1] = 0;totmat[2][2] = 1;
+ unit_m3(totmat);
}
break;
}
@@ -2377,11 +2361,8 @@ static void locktrack_evaluate (bConstraint *con, bConstraintOb *cob, ListBase *
normalize_v3(totmat[0]);
/* the y axis is fixed */
- totmat[1][0] = cob->matrix[1][0];
- totmat[1][1] = cob->matrix[1][1];
- totmat[1][2] = cob->matrix[1][2];
- normalize_v3(totmat[1]);
-
+ normalize_v3_v3(totmat[1], cob->matrix[1]);
+
/* the z axis gets mapped onto a third orthogonal vector */
cross_v3_v3v3(totmat[2], totmat[0], totmat[1]);
}
@@ -2394,10 +2375,7 @@ static void locktrack_evaluate (bConstraint *con, bConstraintOb *cob, ListBase *
normalize_v3(totmat[2]);
/* the y axis is fixed */
- totmat[1][0] = cob->matrix[1][0];
- totmat[1][1] = cob->matrix[1][1];
- totmat[1][2] = cob->matrix[1][2];
- normalize_v3(totmat[1]);
+ normalize_v3_v3(totmat[1], cob->matrix[1]);
/* the z axis gets mapped onto a third orthogonal vector */
cross_v3_v3v3(totmat[0], totmat[1], totmat[2]);
@@ -2412,10 +2390,7 @@ static void locktrack_evaluate (bConstraint *con, bConstraintOb *cob, ListBase *
negate_v3(totmat[0]);
/* the y axis is fixed */
- totmat[1][0] = cob->matrix[1][0];
- totmat[1][1] = cob->matrix[1][1];
- totmat[1][2] = cob->matrix[1][2];
- normalize_v3(totmat[1]);
+ normalize_v3_v3(totmat[1], cob->matrix[1]);
/* the z axis gets mapped onto a third orthogonal vector */
cross_v3_v3v3(totmat[2], totmat[0], totmat[1]);
@@ -2430,10 +2405,7 @@ static void locktrack_evaluate (bConstraint *con, bConstraintOb *cob, ListBase *
negate_v3(totmat[2]);
/* the y axis is fixed */
- totmat[1][0] = cob->matrix[1][0];
- totmat[1][1] = cob->matrix[1][1];
- totmat[1][2] = cob->matrix[1][2];
- normalize_v3(totmat[1]);
+ normalize_v3_v3(totmat[1], cob->matrix[1]);
/* the z axis gets mapped onto a third orthogonal vector */
cross_v3_v3v3(totmat[0], totmat[1], totmat[2]);
@@ -2441,9 +2413,7 @@ static void locktrack_evaluate (bConstraint *con, bConstraintOb *cob, ListBase *
break;
default:
{
- totmat[0][0] = 1;totmat[0][1] = 0;totmat[0][2] = 0;
- totmat[1][0] = 0;totmat[1][1] = 1;totmat[1][2] = 0;
- totmat[2][0] = 0;totmat[2][1] = 0;totmat[2][2] = 1;
+ unit_m3(totmat);
}
break;
}
@@ -2460,10 +2430,7 @@ static void locktrack_evaluate (bConstraint *con, bConstraintOb *cob, ListBase *
normalize_v3(totmat[0]);
/* the z axis is fixed */
- totmat[2][0] = cob->matrix[2][0];
- totmat[2][1] = cob->matrix[2][1];
- totmat[2][2] = cob->matrix[2][2];
- normalize_v3(totmat[2]);
+ normalize_v3_v3(totmat[2], cob->matrix[2]);
/* the x axis gets mapped onto a third orthogonal vector */
cross_v3_v3v3(totmat[1], totmat[2], totmat[0]);
@@ -2477,10 +2444,7 @@ static void locktrack_evaluate (bConstraint *con, bConstraintOb *cob, ListBase *
normalize_v3(totmat[1]);
/* the z axis is fixed */
- totmat[2][0] = cob->matrix[2][0];
- totmat[2][1] = cob->matrix[2][1];
- totmat[2][2] = cob->matrix[2][2];
- normalize_v3(totmat[2]);
+ normalize_v3_v3(totmat[2], cob->matrix[2]);
/* the x axis gets mapped onto a third orthogonal vector */
cross_v3_v3v3(totmat[0], totmat[1], totmat[2]);
@@ -2495,10 +2459,7 @@ static void locktrack_evaluate (bConstraint *con, bConstraintOb *cob, ListBase *
negate_v3(totmat[0]);
/* the z axis is fixed */
- totmat[2][0] = cob->matrix[2][0];
- totmat[2][1] = cob->matrix[2][1];
- totmat[2][2] = cob->matrix[2][2];
- normalize_v3(totmat[2]);
+ normalize_v3_v3(totmat[2], cob->matrix[2]);
/* the x axis gets mapped onto a third orthogonal vector */
cross_v3_v3v3(totmat[1], totmat[2], totmat[0]);
@@ -2513,10 +2474,7 @@ static void locktrack_evaluate (bConstraint *con, bConstraintOb *cob, ListBase *
negate_v3(totmat[1]);
/* the z axis is fixed */
- totmat[2][0] = cob->matrix[2][0];
- totmat[2][1] = cob->matrix[2][1];
- totmat[2][2] = cob->matrix[2][2];
- normalize_v3(totmat[2]);
+ normalize_v3_v3(totmat[2], cob->matrix[2]);
/* the x axis gets mapped onto a third orthogonal vector */
cross_v3_v3v3(totmat[0], totmat[1], totmat[2]);
@@ -2524,9 +2482,7 @@ static void locktrack_evaluate (bConstraint *con, bConstraintOb *cob, ListBase *
break;
default:
{
- totmat[0][0] = 1;totmat[0][1] = 0;totmat[0][2] = 0;
- totmat[1][0] = 0;totmat[1][1] = 1;totmat[1][2] = 0;
- totmat[2][0] = 0;totmat[2][1] = 0;totmat[2][2] = 1;
+ unit_m3(totmat);
}
break;
}
@@ -2534,19 +2490,13 @@ static void locktrack_evaluate (bConstraint *con, bConstraintOb *cob, ListBase *
break;
default:
{
- totmat[0][0] = 1;totmat[0][1] = 0;totmat[0][2] = 0;
- totmat[1][0] = 0;totmat[1][1] = 1;totmat[1][2] = 0;
- totmat[2][0] = 0;totmat[2][1] = 0;totmat[2][2] = 1;
+ unit_m3(totmat);
}
break;
}
/* Block to keep matrix heading */
- tmpmat[0][0] = cob->matrix[0][0];tmpmat[0][1] = cob->matrix[0][1];tmpmat[0][2] = cob->matrix[0][2];
- tmpmat[1][0] = cob->matrix[1][0];tmpmat[1][1] = cob->matrix[1][1];tmpmat[1][2] = cob->matrix[1][2];
- tmpmat[2][0] = cob->matrix[2][0];tmpmat[2][1] = cob->matrix[2][1];tmpmat[2][2] = cob->matrix[2][2];
- normalize_v3(tmpmat[0]);
- normalize_v3(tmpmat[1]);
- normalize_v3(tmpmat[2]);
+ copy_m3_m4(tmpmat, cob->matrix);
+ normalize_m3(tmpmat);
invert_m3_m3(invmat, tmpmat);
mul_m3_m3m3(tmpmat, totmat, invmat);
totmat[0][0] = tmpmat[0][0];totmat[0][1] = tmpmat[0][1];totmat[0][2] = tmpmat[0][2];
@@ -2559,9 +2509,7 @@ static void locktrack_evaluate (bConstraint *con, bConstraintOb *cob, ListBase *
totmat[1][0],totmat[1][1],totmat[1][2],
totmat[2][0],totmat[2][1],totmat[2][2]);
if (mdet==0) {
- totmat[0][0] = 1;totmat[0][1] = 0;totmat[0][2] = 0;
- totmat[1][0] = 0;totmat[1][1] = 1;totmat[1][2] = 0;
- totmat[2][0] = 0;totmat[2][1] = 0;totmat[2][2] = 1;
+ unit_m3(totmat);
}
/* apply out transformaton to the object */
@@ -2689,7 +2637,7 @@ static void distlimit_evaluate (bConstraint *con, bConstraintOb *cob, ListBase *
interp_v3_v3v3(dvec, ct->matrix[3], cob->matrix[3], sfac);
/* copy new vector onto owner */
- VECCOPY(cob->matrix[3], dvec);
+ copy_v3_v3(cob->matrix[3], dvec);
}
}
}
@@ -2772,16 +2720,10 @@ static void stretchto_evaluate (bConstraint *con, bConstraintOb *cob, ListBase *
mat4_to_size(size, cob->matrix);
/* store X orientation before destroying obmat */
- xx[0] = cob->matrix[0][0];
- xx[1] = cob->matrix[0][1];
- xx[2] = cob->matrix[0][2];
- normalize_v3(xx);
+ normalize_v3_v3(xx, cob->matrix[0]);
/* store Z orientation before destroying obmat */
- zz[0] = cob->matrix[2][0];
- zz[1] = cob->matrix[2][1];
- zz[2] = cob->matrix[2][2];
- normalize_v3(zz);
+ normalize_v3_v3(zz, cob->matrix[2]);
sub_v3_v3v3(vec, cob->matrix[3], ct->matrix[3]);
vec[0] /= size[0];
@@ -2836,9 +2778,7 @@ static void stretchto_evaluate (bConstraint *con, bConstraintOb *cob, ListBase *
normalize_v3(vec);
/* new Y aligns object target connection*/
- totmat[1][0] = -vec[0];
- totmat[1][1] = -vec[1];
- totmat[1][2] = -vec[2];
+ negate_v3_v3(totmat[1], vec);
switch (data->plane) {
case PLANE_X:
/* build new Z vector */
@@ -2847,16 +2787,11 @@ static void stretchto_evaluate (bConstraint *con, bConstraintOb *cob, ListBase *
normalize_v3(orth);
/* new Z*/
- totmat[2][0] = orth[0];
- totmat[2][1] = orth[1];
- totmat[2][2] = orth[2];
+ copy_v3_v3(totmat[2], orth);
/* we decided to keep X plane*/
cross_v3_v3v3(xx, orth, vec);
- normalize_v3(xx);
- totmat[0][0] = xx[0];
- totmat[0][1] = xx[1];
- totmat[0][2] = xx[2];
+ normalize_v3_v3(totmat[0], xx);
break;
case PLANE_Z:
/* build new X vector */
@@ -2865,16 +2800,11 @@ static void stretchto_evaluate (bConstraint *con, bConstraintOb *cob, ListBase *
normalize_v3(orth);
/* new X */
- totmat[0][0] = -orth[0];
- totmat[0][1] = -orth[1];
- totmat[0][2] = -orth[2];
+ negate_v3_v3(totmat[0], orth);
/* we decided to keep Z */
cross_v3_v3v3(zz, orth, vec);
- normalize_v3(zz);
- totmat[2][0] = zz[0];
- totmat[2][1] = zz[1];
- totmat[2][2] = zz[2];
+ normalize_v3_v3(totmat[2], zz);
break;
} /* switch (data->plane) */
@@ -3006,10 +2936,10 @@ static void minmax_evaluate (bConstraint *con, bConstraintOb *cob, ListBase *tar
obmat[3][index] = tarmat[3][index] + data->offset;
if (data->flag & MINMAX_STICKY) {
if (data->flag & MINMAX_STUCK) {
- VECCOPY(obmat[3], data->cache);
+ copy_v3_v3(obmat[3], data->cache);
}
else {
- VECCOPY(data->cache, obmat[3]);
+ copy_v3_v3(data->cache, obmat[3]);
data->flag |= MINMAX_STUCK;
}
}
@@ -3019,7 +2949,7 @@ static void minmax_evaluate (bConstraint *con, bConstraintOb *cob, ListBase *tar
copy_m4_m4(cob->matrix, tmat);
}
else {
- VECCOPY(cob->matrix[3], obmat[3]);
+ copy_v3_v3(cob->matrix[3], obmat[3]);
}
}
else {
@@ -3174,7 +3104,7 @@ static void clampto_evaluate (bConstraint *con, bConstraintOb *cob, ListBase *ta
copy_m4_m4(obmat, cob->matrix);
unit_m4(targetMatrix);
- VECCOPY(ownLoc, obmat[3]);
+ copy_v3_v3(ownLoc, obmat[3]);
INIT_MINMAX(curveMin, curveMax)
minmax_object(ct->tar, curveMin, curveMax);
@@ -3263,14 +3193,14 @@ static void clampto_evaluate (bConstraint *con, bConstraintOb *cob, ListBase *ta
/* 3. position on curve */
if (where_on_path(ct->tar, curvetime, vec, dir, NULL, NULL, NULL) ) {
unit_m4(totmat);
- VECCOPY(totmat[3], vec);
+ copy_v3_v3(totmat[3], vec);
mul_serie_m4(targetMatrix, ct->tar->obmat, totmat, NULL, NULL, NULL, NULL, NULL, NULL);
}
}
/* obtain final object position */
- VECCOPY(cob->matrix[3], targetMatrix[3]);
+ copy_v3_v3(cob->matrix[3], targetMatrix[3]);
}
}
@@ -3362,7 +3292,7 @@ static void transform_evaluate (bConstraint *con, bConstraintOb *cob, ListBase *
}
/* extract components of owner's matrix */
- VECCOPY(loc, cob->matrix[3]);
+ copy_v3_v3(loc, cob->matrix[3]);
mat4_to_eulO(eul, cob->rotOrder, cob->matrix);
mat4_to_size(size, cob->matrix);
@@ -3556,7 +3486,7 @@ static void shrinkwrap_get_tarmat (bConstraint *con, bConstraintOb *cob, bConstr
fail = TRUE;
break;
}
- VECCOPY(co, hit.co);
+ copy_v3_v3(co, hit.co);
break;
}
@@ -3572,7 +3502,7 @@ static void shrinkwrap_get_tarmat (bConstraint *con, bConstraintOb *cob, bConstr
/* co is in local object coordinates, change it to global and update target position */
mul_m4_v3(cob->matrix, co);
- VECCOPY(ct->matrix[3], co);
+ copy_v3_v3(ct->matrix[3], co);
}
}
}
@@ -3584,7 +3514,7 @@ static void shrinkwrap_evaluate (bConstraint *con, bConstraintOb *cob, ListBase
/* only evaluate if there is a target */
if (VALID_CONS_TARGET(ct))
{
- VECCOPY(cob->matrix[3], ct->matrix[3]);
+ copy_v3_v3(cob->matrix[3], ct->matrix[3]);
}
}
@@ -3668,23 +3598,23 @@ static void damptrack_evaluate (bConstraint *con, bConstraintOb *cob, ListBase *
* - the normalisation step at the end should take care of any unwanted scaling
* left over in the 3x3 matrix we used
*/
- VECCOPY(obvec, track_dir_vecs[data->trackflag]);
+ copy_v3_v3(obvec, track_dir_vecs[data->trackflag]);
mul_mat3_m4_v3(cob->matrix, obvec);
if (normalize_v3(obvec) == 0.0f) {
/* exceptional case - just use the track vector as appropriate */
- VECCOPY(obvec, track_dir_vecs[data->trackflag]);
+ copy_v3_v3(obvec, track_dir_vecs[data->trackflag]);
}
/* find the (unit) direction vector going from the owner to the target */
- VECCOPY(obloc, cob->matrix[3]);
+ copy_v3_v3(obloc, cob->matrix[3]);
sub_v3_v3v3(tarvec, ct->matrix[3], obloc);
if (normalize_v3(tarvec) == 0.0f) {
/* the target is sitting on the owner, so just make them use the same direction vectors */
// FIXME: or would it be better to use the pure direction vector?
- VECCOPY(tarvec, obvec);
- //VECCOPY(tarvec, track_dir_vecs[data->trackflag]);
+ copy_v3_v3(tarvec, obvec);
+ //copy_v3_v3(tarvec, track_dir_vecs[data->trackflag]);
}
/* determine the axis-angle rotation, which represents the smallest possible rotation
@@ -3712,7 +3642,7 @@ static void damptrack_evaluate (bConstraint *con, bConstraintOb *cob, ListBase *
mul_m4_m3m4(tmat, rmat, cob->matrix); // m1, m3, m2
copy_m4_m4(cob->matrix, tmat);
- VECCOPY(cob->matrix[3], obloc);
+ copy_v3_v3(cob->matrix[3], obloc);
}
}
@@ -3907,7 +3837,7 @@ static void pivotcon_evaluate (bConstraint *con, bConstraintOb *cob, ListBase *t
}
else {
/* directly use the 'offset' specified as an absolute position instead */
- VECCOPY(pivot, data->offset);
+ copy_v3_v3(pivot, data->offset);
}
}
@@ -4066,17 +3996,6 @@ int remove_constraint (ListBase *list, bConstraint *con)
return 0;
}
-/* Remove the nth constraint from the given constraint stack */
-int remove_constraint_index (ListBase *list, int index)
-{
- bConstraint *con= BLI_findlink(list, index);
-
- if (con)
- return remove_constraint(list, con);
- else
- return 0;
-}
-
/* Remove all the constraints of the specified type from the given constraint stack */
void remove_constraints_type (ListBase *list, short type, short last_only)
{
@@ -4492,7 +4411,7 @@ void solve_constraints (ListBase *conlist, bConstraintOb *cob, float ctime)
}
}
- /* Solve the constraint */
+ /* Solve the constraint and put result in cob->matrix */
cti->evaluate_constraint(con, cob, &targets);
/* clear targets after use
@@ -4504,23 +4423,13 @@ void solve_constraints (ListBase *conlist, bConstraintOb *cob, float ctime)
}
/* Interpolate the enforcement, to blend result of constraint into final owner transform */
- /* 1. Remove effects of original matrix from constraint solution ==> delta */
- invert_m4_m4(imat, oldmat);
- copy_m4_m4(solution, cob->matrix);
- mul_m4_m4m4(delta, solution, imat);
-
- /* 2. If constraint influence is not full strength, then interpolate
- * identity_matrix --> delta_matrix to get the effect the constraint actually exerts
- */
+ /* Note: all kind of stuff here before (caused trouble), much easier to just interpolate, or did I miss something? -jahka */
if (enf < 1.0) {
- float identity[4][4];
- unit_m4(identity);
- blend_m4_m4m4(delta, identity, delta, enf);
+ float solution[4][4];
+ copy_m4_m4(solution, cob->matrix);
+ blend_m4_m4m4(cob->matrix, oldmat, solution, enf);
}
- /* 3. Now multiply the delta by the matrix in use before the evaluation */
- mul_m4_m4m4(cob->matrix, delta, oldmat);
-
/* move owner back into worldspace for next constraint/other business */
if ((con->flag & CONSTRAINT_SPACEONCE) == 0)
constraint_mat_convertspace(cob->ob, cob->pchan, cob->matrix, con->ownspace, CONSTRAINT_SPACE_WORLD);
diff --git a/source/blender/blenkernel/intern/context.c b/source/blender/blenkernel/intern/context.c
index 9520df71b60..7928424e47c 100644
--- a/source/blender/blenkernel/intern/context.c
+++ b/source/blender/blenkernel/intern/context.c
@@ -25,6 +25,9 @@
* ***** END GPL LICENSE BLOCK *****
*/
+#include <string.h>
+#include <stddef.h>
+
#include "MEM_guardedalloc.h"
#include "DNA_scene_types.h"
@@ -47,8 +50,6 @@
#include "BPY_extern.h"
#endif
-#include <string.h>
-
/* struct */
struct bContext {
@@ -571,13 +572,12 @@ int CTX_data_get(const bContext *C, const char *member, PointerRNA *r_ptr, ListB
static void data_dir_add(ListBase *lb, const char *member)
{
LinkData *link;
-
+
if(strcmp(member, "scene") == 0) /* exception */
return;
- for(link=lb->first; link; link=link->next)
- if(strcmp(link->data, member) == 0)
- return;
+ if(BLI_findstring(lb, member, offsetof(LinkData, data)))
+ return;
link= MEM_callocN(sizeof(LinkData), "LinkData");
link->data= (void*)member;
@@ -701,7 +701,7 @@ Main *CTX_data_main(const bContext *C)
{
Main *bmain;
- if(ctx_data_pointer_verify(C, "main", (void*)&bmain))
+ if(ctx_data_pointer_verify(C, "blend_data", (void*)&bmain))
return bmain;
else
return C->data.main;
diff --git a/source/blender/blenkernel/intern/curve.c b/source/blender/blenkernel/intern/curve.c
index ce43f082688..358dd1914e7 100644
--- a/source/blender/blenkernel/intern/curve.c
+++ b/source/blender/blenkernel/intern/curve.c
@@ -127,7 +127,7 @@ Curve *add_curve(char *name, int type)
cu= alloc_libblock(&G.main->curve, ID_CU, name);
cu->size[0]= cu->size[1]= cu->size[2]= 1.0;
- cu->flag= CU_FRONT|CU_BACK|CU_PATH_RADIUS;
+ cu->flag= CU_FRONT|CU_BACK|CU_DEFORM_BOUNDS_OFF|CU_PATH_RADIUS;
cu->pathlen= 100;
cu->resolu= cu->resolv= 12;
cu->width= 1.0;
@@ -1573,7 +1573,7 @@ static void alfa_bezpart(BezTriple *prevbezt, BezTriple *bezt, Nurb *nu, float *
for(a=0; a<resolu; a++, fac+= dfac) {
if (tilt_array) {
- if (nu->tilt_interp==3) { /* May as well support for tilt also 2.47 ease interp */
+ if (nu->tilt_interp==KEY_CU_EASE) { /* May as well support for tilt also 2.47 ease interp */
*tilt_array = prevbezt->alfa + (bezt->alfa - prevbezt->alfa)*(3.0f*fac*fac - 2.0f*fac*fac*fac);
} else {
key_curve_position_weights(fac, t, nu->tilt_interp);
@@ -1584,7 +1584,7 @@ static void alfa_bezpart(BezTriple *prevbezt, BezTriple *bezt, Nurb *nu, float *
}
if (radius_array) {
- if (nu->radius_interp==3) {
+ if (nu->radius_interp==KEY_CU_EASE) {
/* Support 2.47 ease interp
* Note! - this only takes the 2 points into account,
* giving much more localized results to changes in radius, sometimes you want that */
diff --git a/source/blender/blenkernel/intern/customdata.c b/source/blender/blenkernel/intern/customdata.c
index 2fab1e2937a..6321df659a0 100644
--- a/source/blender/blenkernel/intern/customdata.c
+++ b/source/blender/blenkernel/intern/customdata.c
@@ -1214,7 +1214,7 @@ static CustomDataLayer *customData_add_layer__internal(CustomData *data,
data->layers[index].flag = flag;
data->layers[index].data = newlayerdata;
- if(name) {
+ if(name || (name=typeInfo->defaultname)) {
strcpy(data->layers[index].name, name);
CustomData_set_layer_unique_name(data, index);
}
@@ -1255,7 +1255,7 @@ 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, char *name)
+ void *layerdata, int totelem, const char *name)
{
CustomDataLayer *layer;
diff --git a/source/blender/blenkernel/intern/deform.c b/source/blender/blenkernel/intern/deform.c
index ccb6ebe1f1e..91584b6236f 100644
--- a/source/blender/blenkernel/intern/deform.c
+++ b/source/blender/blenkernel/intern/deform.c
@@ -176,7 +176,7 @@ void defvert_flip (MDeformVert *dvert, int *flip_map)
}
-bDeformGroup *defgroup_find_name (Object *ob, char *name)
+bDeformGroup *defgroup_find_name (Object *ob, const char *name)
{
/* return a pointer to the deform group with this name
* or return NULL otherwise.
diff --git a/source/blender/blenkernel/intern/depsgraph.c b/source/blender/blenkernel/intern/depsgraph.c
index 1f8360324d5..382c0690ae3 100644
--- a/source/blender/blenkernel/intern/depsgraph.c
+++ b/source/blender/blenkernel/intern/depsgraph.c
@@ -41,6 +41,8 @@
#include "DNA_screen_types.h"
#include "DNA_windowmanager_types.h"
+#include "MEM_guardedalloc.h"
+
#include "BLI_ghash.h"
#include "BKE_animsys.h"
@@ -59,13 +61,7 @@
#include "BKE_scene.h"
#include "BKE_screen.h"
-#include "MEM_guardedalloc.h"
-
-#ifndef DISABLE_PYTHON
-#include "BPY_extern.h"
-#endif
-
- #include "depsgraph_private.h"
+#include "depsgraph_private.h"
/* Queue and stack operations for dag traversal
*
@@ -2180,7 +2176,7 @@ void DAG_scene_update_flags(Main *bmain, Scene *scene, unsigned int lay)
dag_object_time_update_flags(scene->camera);
/* and store the info in groupobject */
- for(group= G.main->group.first; group; group= group->id.next) {
+ for(group= bmain->group.first; group; group= group->id.next) {
if(group->id.flag & LIB_DOIT) {
for(go= group->gobject.first; go; go= go->next) {
go->recalc= go->ob->recalc;
diff --git a/source/blender/blenkernel/intern/displist.c b/source/blender/blenkernel/intern/displist.c
index a44c5ace298..d0336d9f786 100644
--- a/source/blender/blenkernel/intern/displist.c
+++ b/source/blender/blenkernel/intern/displist.c
@@ -930,7 +930,7 @@ void filldisplist(ListBase *dispbase, ListBase *to, int flipnormal)
EditFace *efa;
DispList *dlnew=0, *dl;
float *f1;
- int colnr=0, charidx=0, cont=1, tot, a, *index;
+ int colnr=0, charidx=0, cont=1, tot, a, *index, nextcol= 0;
intptr_t totvert;
if(dispbase==0) return;
@@ -938,38 +938,41 @@ void filldisplist(ListBase *dispbase, ListBase *to, int flipnormal)
while(cont) {
cont= 0;
- totvert=0;
+ totvert= 0;
+ nextcol= 0;
dl= dispbase->first;
while(dl) {
if(dl->type==DL_POLY) {
if(charidx<dl->charidx) cont= 1;
- else if(charidx==dl->charidx) {
-
- colnr= dl->col;
- charidx= dl->charidx;
-
- /* make editverts and edges */
- f1= dl->verts;
- a= dl->nr;
- eve= v1= 0;
-
- while(a--) {
- vlast= eve;
-
- eve= BLI_addfillvert(f1);
- totvert++;
+ else if(charidx==dl->charidx) { /* character with needed index */
+ if(colnr==dl->col) {
+ /* make editverts and edges */
+ f1= dl->verts;
+ a= dl->nr;
+ eve= v1= 0;
- if(vlast==0) v1= eve;
- else {
- BLI_addfilledge(vlast, eve);
+ while(a--) {
+ vlast= eve;
+
+ eve= BLI_addfillvert(f1);
+ totvert++;
+
+ if(vlast==0) v1= eve;
+ else {
+ BLI_addfilledge(vlast, eve);
+ }
+ f1+=3;
}
- f1+=3;
- }
-
- if(eve!=0 && v1!=0) {
- BLI_addfilledge(eve, v1);
+
+ if(eve!=0 && v1!=0) {
+ BLI_addfilledge(eve, v1);
+ }
+ } else if (colnr<dl->col) {
+ /* got poly with next material at current char */
+ cont= 1;
+ nextcol= 1;
}
}
}
@@ -1032,7 +1035,14 @@ void filldisplist(ListBase *dispbase, ListBase *to, int flipnormal)
}
BLI_end_edgefill();
- charidx++;
+ if(nextcol) {
+ /* stay at current char but fill polys with next material */
+ colnr++;
+ } else {
+ /* switch to next char and start filling from first material */
+ charidx++;
+ colnr= 0;
+ }
}
/* do not free polys, needed for wireframe display */
diff --git a/source/blender/blenkernel/intern/effect.c b/source/blender/blenkernel/intern/effect.c
index 5f55814341b..4860e7d8eed 100644
--- a/source/blender/blenkernel/intern/effect.c
+++ b/source/blender/blenkernel/intern/effect.c
@@ -29,6 +29,7 @@
* ***** END GPL LICENSE BLOCK *****
*/
+#include <stddef.h>
#include "BLI_storage.h" /* _LARGEFILE_SOURCE */
#include <math.h>
@@ -85,7 +86,6 @@
#include "BKE_object.h"
#include "BKE_particle.h"
#include "BKE_scene.h"
-#include "BKE_screen.h"
#include "BKE_utildefines.h"
#include "RE_render_ext.h"
@@ -662,16 +662,15 @@ int get_effector_data(EffectorCache *eff, EffectorData *efd, EffectedPoint *poin
where_is_object_time(eff->scene, ob, cfra);
/* use z-axis as normal*/
- VECCOPY(efd->nor, ob->obmat[2]);
- normalize_v3(efd->nor);
+ normalize_v3_v3(efd->nor, ob->obmat[2]);
/* for vortex the shape chooses between old / new force */
if(eff->pd && eff->pd->shape == PFIELD_SHAPE_PLANE) {
/* efd->loc is closes point on effector xy-plane */
- float temp[3];
+ float temp[3], translate[3];
sub_v3_v3v3(temp, point->loc, ob->obmat[3]);
- project_v3_v3v3(efd->loc, temp, efd->nor);
- sub_v3_v3v3(efd->loc, point->loc, efd->loc);
+ project_v3_v3v3(translate, temp, efd->nor);
+ add_v3_v3v3(efd->loc, ob->obmat[3], translate);
}
else {
VECCOPY(efd->loc, ob->obmat[3]);
@@ -707,8 +706,7 @@ int get_effector_data(EffectorCache *eff, EffectorData *efd, EffectedPoint *poin
else {
/* for some effectors we need the object center every time */
sub_v3_v3v3(efd->vec_to_point2, point->loc, eff->ob->obmat[3]);
- VECCOPY(efd->nor2, eff->ob->obmat[2]);
- normalize_v3(efd->nor2);
+ normalize_v3_v3(efd->nor2, eff->ob->obmat[2]);
}
}
diff --git a/source/blender/blenkernel/intern/exotic.c b/source/blender/blenkernel/intern/exotic.c
index cdefbb54ecf..9dac409226b 100644
--- a/source/blender/blenkernel/intern/exotic.c
+++ b/source/blender/blenkernel/intern/exotic.c
@@ -29,12 +29,14 @@
*
* ***** END GPL LICENSE BLOCK *****/
+#include <stddef.h>
#include "BLI_storage.h"
+#include <stdlib.h>
#include <ctype.h> /* isdigit, isspace */
#include <math.h>
#include <stdio.h>
-#include <stdlib.h>
+
#include <fcntl.h>
#include <string.h>
#include <errno.h>
@@ -449,1328 +451,10 @@ static void read_stl_mesh_ascii(Scene *scene, char *str)
#undef STLREADLINE
#undef STLREADVERT
-/* ***************** INVENTOR ******************* */
-
-
-#define IV_MAXSTACK 3000000
-#define IV_MAXFIELD 10
-#define IV_MAXCOL 16
-
-static float *iv_data_stack;
-static float ivcolors[IV_MAXCOL][3];
-static Object *ivsurf;
-static ListBase ivbase;
-
-struct IvNode {
- struct IvNode *next, *prev;
- char *nodename;
- char *fieldname[IV_MAXFIELD];
- int datalen[IV_MAXFIELD];
- float *data[IV_MAXFIELD];
-};
-
-static int iv_curcol=0;
-
-static int iv_colornumber(struct IvNode *iv)
-{
- float *fp, fr = 0.0, fg = 0.0, fb = 0.0;
- int a;
- char *cp;
-
- /* search back to last material */
- while(iv) {
- if( strcmp(iv->nodename, "Material")==0) {
- fp= iv->data[0];
- if(fp==0) fp= iv->data[1];
- if(fp) {
- fr= fp[0];
- fg= fp[1];
- fb= fp[2];
- }
- break;
- }
- else if( strcmp(iv->nodename, "BaseColor")==0) {
- fp= iv->data[0];
- fr= fp[0];
- fg= fp[1];
- fb= fp[2];
- break;
- }
- else if( strcmp(iv->nodename, "PackedColor")==0) {
- cp= (char *)iv->data[0];
- fr= cp[3]/255.0f;
- fg= cp[2]/255.0f;
- fb= cp[1]/255.0f;
- break;
- }
- iv= iv->prev;
-
- }
- if(iv==0) return 0;
- if(iv->datalen[0]<3) return 0;
-
- for(a=0; a<iv_curcol; a++) {
-
- if(ivcolors[a][0]== fr)
- if(ivcolors[a][1]== fg)
- if(ivcolors[a][2]== fb) return a+1
- ;
- }
-
- if(a>=IV_MAXCOL) a= IV_MAXCOL-1;
- iv_curcol= a+1;
- ivcolors[a][0]= fr;
- ivcolors[a][1]= fg;
- ivcolors[a][2]= fb;
-
- return iv_curcol;
-}
-
-static int iv_finddata(struct IvNode *iv, char *field, int fieldnr)
-{
- /* search for "field", count data size and make datablock. return skipdata */
- float *fp;
- int len, stackcount, skipdata=0;
- char *cpa, terminator, str[64];
- intptr_t i;
-
- len= strlen(field);
-
- cpa= iv->nodename+1;
- while( *cpa != '}' ) {
-
- if( *cpa == *field ) {
- if( strncmp(cpa, field, len)==0 ) {
- iv->fieldname[fieldnr]= cpa;
-
- /* read until first character */
- cpa+= len;
- skipdata+= len;
- *cpa= 0;
- cpa++;
- skipdata++;
-
- while( *cpa==32 || *cpa==13 || *cpa==10 || *cpa==9) cpa++;
- if( *cpa=='[' ) {
- terminator= ']';
- cpa++;
- skipdata++;
- }
- else terminator= 13;
-
- stackcount= 0;
- fp= iv_data_stack;
-
- while( *cpa!=terminator && *cpa != '}' ) {
-
- /* in fact, isdigit should include the dot and minus */
- if( (isdigit(*cpa) || *cpa=='.' || *cpa=='-') && (isspace(cpa[-1]) || cpa[-1]==0 || cpa[-1]==',') ) {
- if(cpa[1]=='x') {
- memcpy(str, cpa, 16);
- str[16]= 0;
-
- sscanf(str, "%x", (int *)fp);
- }
- else {
- /* atof doesn't stop after the first float
- * in a long string at Windows... so we copy
- * the float to a new string then atof... */
- char *cpa_temp = strpbrk(cpa, ", \n");
- i = cpa_temp - cpa;
-
- if (i>63) *fp= 0.0;
- else {
- memcpy(str, cpa, i);
- str[i]=0;
-
- *fp= (float) atof(str);
- }
- }
-
- stackcount++;
- if(stackcount>=IV_MAXSTACK) {
- printf("stackoverflow in IV read\n");
- break;
- }
- fp++;
- }
- cpa++;
- skipdata++;
- }
-
- iv->datalen[fieldnr]= stackcount;
- if(stackcount) {
- iv->data[fieldnr]= MEM_mallocN(sizeof(float)*stackcount, "iv_finddata");
- memcpy(iv->data[fieldnr], iv_data_stack, sizeof(float)*stackcount);
- }
- else iv->data[fieldnr]= 0;
-
- return skipdata;
- }
- }
- cpa++;
- skipdata++;
- }
-
- return skipdata;
-}
-
-static void read_iv_index(float *data, float *baseadr, float *index, int nr, int coordtype)
-{
- /* write in data: baseadr with offset index (and number nr) */
- float *fp;
- int ofs;
-
- while(nr--) {
- ofs= (int) *index;
- fp= baseadr+coordtype*ofs;
- VECCOPY(data, fp);
- data+= 3;
- index++;
- }
-}
-
-
-
-static void read_inventor(Scene *scene, char *str, struct ListBase *listb)
-{
- struct IvNode *iv, *ivp, *ivn;
- char *maindata, *md, *cpa;
- float *index, *data, *fp;
- int file, filelen, count, lll, face, nr = 0;
- int skipdata, ok, a, b, tot, first, colnr, coordtype, polytype, *idata;
- struct DispList *dl;
- ReportList *reports= NULL; /* XXX */
-
- ivbase.first= ivbase.last= 0;
- iv_curcol= 0;
- ivsurf= 0;
-
- file= open(str, O_BINARY|O_RDONLY);
- if(file== -1) {
- BKE_reportf(reports, RPT_ERROR, "Can't read file: %s.", strerror(errno));
- return;
- }
-
- filelen= BLI_filesize(file);
- if(filelen < 1) {
- close(file);
- return;
- }
-
- maindata= MEM_mallocN(filelen, "leesInventor");
- if(read(file, maindata, filelen) < filelen) {
- BKE_reportf(reports, RPT_ERROR, "Failed reading file: premature end of file.");
- close(file);
- return;
- }
- close(file);
-
- iv_data_stack= MEM_mallocN(sizeof(float)*IV_MAXSTACK, "ivstack");
-
- /* preprocess: remove comments */
- md= maindata+20;
- count= 20;
- while(count<filelen) {
- if( *md=='#' ) { /* comment */
- while( *md!=13 && *md!=10) { /* enters */
- *md= 32;
- md++;
- count++;
- if(count>=filelen) break;
- }
- }
- md++;
- count++;
- }
-
-
- /* now time to collect: which are the nodes and fields? */
- md= maindata;
- count= 0;
- while(count<filelen) {
- if( *md=='{' ) { /* read back */
-
- cpa= md-1;
- while( *cpa==32 || *cpa==13 || *cpa==10 || *cpa==9) { /* remove spaces/enters/tab */
- *cpa= 0;
- cpa--;
- }
-
- while( *cpa>32 && *cpa<128) cpa--;
- cpa++;
- *md= 0;
-
- ok= 0;
- skipdata= 0;
- iv= MEM_callocN(sizeof(struct IvNode), "leesInventor");
- iv->nodename= cpa;
-
- if(strcmp(cpa, "Coordinate3")==0 || strcmp(cpa, "Coordinate4")==0) {
- skipdata= iv_finddata(iv, "point", 0);
- ok= 1;
- }
- else if(strcmp(cpa, "VertexProperty")==0) {
- skipdata= iv_finddata(iv, "vertex", 0);
- ok= 1;
- }
- else if(strcmp(cpa, "IndexedLineSet")==0) {
- skipdata= iv_finddata(iv, "coordIndex", 0);
- ok= 1;
- }
- else if(strcmp(cpa, "IndexedTriangleMesh")==0) {
- skipdata= iv_finddata(iv, "coordIndex", 0);
- ok= 1;
- }
- else if(strcmp(cpa, "IndexedFaceSet")==0) {
- skipdata= iv_finddata(iv, "coordIndex", 0);
- ok= 1;
- }
- else if(strcmp(cpa, "FaceSet")==0) {
- skipdata= iv_finddata(iv, "numVertices", 0);
- ok= 1;
- }
- else if(strcmp(cpa, "Material")==0) {
- iv_finddata(iv, "diffuseColor", 0);
- iv_finddata(iv, "ambientColor", 1);
- ok= 1;
- }
- else if(strcmp(cpa, "BaseColor")==0) {
- iv_finddata(iv, "rgb", 0);
- ok= 1;
- }
- else if(strcmp(cpa, "PackedColor")==0) {
- iv_finddata(iv, "rgba", 0);
- ok= 1;
- }
- else if(strcmp(cpa, "QuadMesh")==0) {
- iv_finddata(iv, "verticesPerColumn", 0);
- iv_finddata(iv, "verticesPerRow", 1);
-
- ok= 1;
- }
- else if(strcmp(cpa, "IndexedTriangleStripSet")==0) {
- skipdata= iv_finddata(iv, "coordIndex", 0);
- ok= 1;
- }
- else if(strcmp(cpa, "TriangleStripSet")==0) {
- skipdata= iv_finddata(iv, "numVertices", 0);
- ok= 1;
- }
- else if(strcmp(cpa, "IndexedNurbsSurface")==0 || strcmp(cpa, "NurbsSurface")==0) {
- iv_finddata(iv, "numUControlPoints", 0);
- iv_finddata(iv, "numVControlPoints", 1);
- iv_finddata(iv, "uKnotVector", 2);
- iv_finddata(iv, "vKnotVector", 3);
- ok= 1;
- }
- else {
- /* to the end */
- while( *md != '}') {
- md++;
- count++;
- if(count<filelen) break;
- }
- }
-
-
- if(ok) {
- BLI_addtail(&ivbase, iv);
- md+= skipdata;
- count+= skipdata;
- }
- else MEM_freeN(iv);
-
- }
- md++;
- count++;
- }
-
- /* join nodes */
- iv= ivbase.first;
-
- while(iv) {
- ivn= iv->next;
-
- if( strncmp(iv->nodename, "Indexed", 7)==0) {
- /* seek back: same name? */
-
- ivp= iv->prev;
- while(ivp) {
- if(strcmp(iv->nodename, ivp->nodename)==0) break;
-
- if(strcmp(ivp->nodename, "Coordinate3")==0 ||
- strcmp(ivp->nodename, "Coordinate4")==0 ||
- strcmp(ivp->nodename, "VertexProperty")==0) {
- ivp= 0;
- break;
- }
- ivp= ivp->prev;
- }
-
- if(ivp) {
- /* add iv to ivp */
-
- tot= iv->datalen[0] + ivp->datalen[0];
- if(tot) {
- data= MEM_mallocN(tot*sizeof(float), "samenvoeg iv");
- memcpy(data, ivp->data[0], sizeof(float)*ivp->datalen[0]);
- memcpy(data+ivp->datalen[0], iv->data[0], sizeof(float)*iv->datalen[0]);
-
- ivp->datalen[0]+= iv->datalen[0];
- MEM_freeN(ivp->data[0]);
- ivp->data[0]= data;
-
- BLI_remlink(&ivbase, iv);
- MEM_freeN(iv->data[0]);
- MEM_freeN(iv);
- }
- }
- }
-
- iv= ivn;
- }
-
-
- /* convert Nodes to DispLists */
- iv= ivbase.first;
- while(iv) {
-
- /* printf(" Node: %s\n", iv->nodename); */
- /* if(iv->fieldname[0]) printf(" Field: %s len %d\n", iv->fieldname[0], iv->datalen[0]); */
- coordtype= 3;
-
- if( strcmp(iv->nodename, "IndexedLineSet")==0 ) {
-
- colnr= iv_colornumber(iv);
-
- /* seek back to data */
- ivp= iv;
- while(ivp->prev) {
- ivp= ivp->prev;
- if( strcmp(ivp->nodename, "Coordinate3")==0 ) {
- coordtype= 3;
- break;
- }
- if( strcmp(ivp->nodename, "Coordinate4")==0 ) {
- coordtype= 4;
- break;
- }
- }
- if(ivp) {
-
- /* count the nr of lines */
- tot= 0;
- index= iv->data[0];
- lll = iv->datalen[0]-1;
- for(a=0; a<lll; a++) {
- if(index[0]!= -1 && index[1]!= -1) tot++;
- index++;
- }
-
- tot*= 2; /* nr of vertices */
- dl= MEM_callocN(sizeof(struct DispList)+tot*3*sizeof(float), "leesInventor1");
- BLI_addtail(listb, dl);
- dl->type= DL_SEGM;
- dl->nr= 2;
- dl->parts= tot/2;
- dl->col= colnr;
- data= (float *)(dl+1);
-
- index= iv->data[0];
- for(a=0; a<lll; a++) {
- if(index[0]!= -1 && index[1]!= -1) {
- read_iv_index(data, ivp->data[0], index, 2, coordtype);
- data+= 6;
- }
- index++;
- }
- }
- }
- else if( strcmp(iv->nodename, "FaceSet")==0 ) {
-
- colnr= iv_colornumber(iv);
-
- /* seek back to data */
- ivp= iv;
- while(ivp->prev) {
- ivp= ivp->prev;
- if( strcmp(ivp->nodename, "Coordinate3")==0 ) {
- coordtype= 3;
- break;
- }
- if( strcmp(ivp->nodename, "Coordinate4")==0 ) {
- coordtype= 4;
- break;
- }
- }
-
- if(ivp) {
- /* count triangles */
- tot= 0;
-
- index= iv->data[0];
- polytype= (int) index[0];
-
- for(a=0; a<iv->datalen[0]; a++) {
- if(index[0]== polytype) tot++; /* one kind? */
- index++;
- }
-
-
- tot*= polytype; /* nr of vertices */
- dl= MEM_callocN(sizeof(struct DispList)+tot*3*sizeof(float), "leesInventor4");
- BLI_addtail(listb, dl);
- dl->type= DL_POLY;
- dl->nr= polytype;
- dl->parts= tot/polytype;
- dl->col= colnr;
- data= (float *)(dl+1);
-
- index= ivp->data[0];
- first= 1;
- for(a=0; a<iv->datalen[0]; a++) {
-
- VECCOPY(data, index);
- data+= 3;
- index+= 3;
-
- VECCOPY(data, index);
- data+= 3;
- index+= 3;
-
- VECCOPY(data, index);
- data+= 3;
- index+= 3;
-
- if(polytype==4) {
- VECCOPY(data, index);
- data+= 3;
- index+= 3;
- }
- }
- }
- }
- else if( strcmp(iv->nodename, "TriangleStripSet")==0 ) {
-
- colnr= iv_colornumber(iv);
-
- /* seek back to data */
- ivp= iv;
- while(ivp->prev) {
- ivp= ivp->prev;
- if( strcmp(ivp->nodename, "Coordinate3")==0 ) {
- coordtype= 3;
- break;
- }
- if( strcmp(ivp->nodename, "Coordinate4")==0 ) {
- coordtype= 4;
- break;
- }
- }
-
- if(ivp) {
- /* count triangles */
- tot= 0;
- face= 0;
-
- index= iv->data[0]; /* strip size */
-
- for(a=0; a<iv->datalen[0]; a++) {
- tot+= (int) index[0];
- face+= ((int) index[0]) - 2;
- index++;
- }
-
- dl= MEM_callocN(sizeof(struct DispList), "leesInventor4");
- dl->verts= MEM_callocN( tot*3*sizeof(float), "dl verts");
- dl->index= MEM_callocN( face*3*sizeof(int), "dl index");
-
- dl->type= DL_INDEX3;
- dl->nr= tot;
- dl->parts= face;
-
- BLI_addtail(listb, dl);
- dl->col= colnr;
-
- index= iv->data[0]; /* strip size */
- fp= ivp->data[0]; /* vertices */
- data= dl->verts;
- idata= dl->index;
- first= 0;
-
- for(a=0; a<iv->datalen[0]; a++) {
-
- /* vertices */
- for(b=0; b<index[0]; b++) {
- VECCOPY(data, fp);
- data+= 3;
- fp+= coordtype;
- }
-
- /* indices */
- lll = index[0] - 2;
- for(b=0; b<lll; b++) {
- idata[0]= first;
- idata[1]= first+1;
- idata[2]= first+2;
- first++;
- idata+= 3;
- }
- first+= 2;
-
- index++;
- }
- }
- }
- else if( strcmp(iv->nodename, "IndexedFaceSet")==0 ) {
-
- colnr= iv_colornumber(iv);
-
- /* seek back to data */
- ivp= iv;
- while(ivp->prev) {
- ivp= ivp->prev;
- if( strcmp(ivp->nodename, "Coordinate3")==0 ) {
- coordtype= 3;
- break;
- }
- if( strcmp(ivp->nodename, "Coordinate4")==0 ) {
- coordtype= 4;
- break;
- }
- }
- if(ivp) {
-
- /* count triangles */
- face= 0;
- index= iv->data[0];
- lll = iv->datalen[0]-2;
- for(a=0; a<lll; a++) {
- if(index[0]!= -1 && index[1]!= -1 && index[2]!= -1) face++;
- index++;
- }
-
- /*number of vertices */
- tot= ivp->datalen[0]/coordtype;
-
- if(tot) {
- dl= MEM_callocN(sizeof(struct DispList), "leesInventor5");
- BLI_addtail(listb, dl);
- dl->type= DL_INDEX3;
- dl->nr= tot;
- dl->parts= face;
- dl->col= colnr;
-
- dl->verts= MEM_callocN( tot*3*sizeof(float), "dl verts");
- dl->index= MEM_callocN(sizeof(int)*3*face, "dl index");
-
- /* vertices */
- fp= ivp->data[0];
- data= dl->verts;
- for(b=tot; b>0; b--) {
- VECCOPY(data, fp);
- data+= 3;
- fp+= coordtype;
- }
-
- /* indices */
- index= iv->data[0];
- idata= dl->index;
- first= 1;
- lll=iv->datalen[0]-2;
- for(a=0; a<lll; a++) {
-
- if(index[0]!= -1 && index[1]!= -1 && index[2]!= -1) {
-
- /* this trick is to fill poly's with more than 3 vertices correctly */
- if(first) {
- nr= (int) index[0];
- first= 0;
- }
- idata[0]= nr;
- idata[1]= (int) index[1];
- idata[2]= (int) index[2];
- idata+= 3;
- }
- else first= 1;
-
- index++;
- }
- }
- }
- }
- else if( strcmp(iv->nodename, "IndexedTriangleMesh")==0 ||
- strcmp(iv->nodename, "IndexedTriangleStripSet")==0 ) {
-
- colnr= iv_colornumber(iv);
-
- /* seek back to data */
- ivp= iv;
- while(ivp->prev) {
- ivp= ivp->prev;
- if( strcmp(ivp->nodename, "Coordinate3")==0 ) {
- coordtype= 3;
- break;
- }
- if( strcmp(ivp->nodename, "Coordinate4")==0 ) {
- coordtype= 4;
- break;
- }
- }
- if(ivp) {
-
- /* count triangles */
- face= 0;
- index= iv->data[0];
- lll=iv->datalen[0]-2;
- for(a=0; a<lll; a++) {
- if(index[0]!= -1 && index[1]!= -1 && index[2]!= -1) face++;
- index++;
- }
-
- /* nr of vertices */
- tot= ivp->datalen[0]/coordtype;
-
- dl= MEM_callocN(sizeof(struct DispList), "leesInventor6");
- BLI_addtail(listb, dl);
- dl->type= DL_INDEX3;
- dl->nr= tot;
- dl->parts= face;
- dl->col= colnr;
-
- dl->verts= MEM_callocN( tot*3*sizeof(float), "dl verts");
- dl->index= MEM_callocN(sizeof(int)*3*face, "dl index");
-
- /* vertices */
- fp= ivp->data[0];
- data= dl->verts;
- for(b=tot; b>0; b--) {
- VECCOPY(data, fp);
- data+= 3;
- fp+= coordtype;
- }
-
- /* indices */
- index= iv->data[0];
- idata= dl->index;
-
- lll=iv->datalen[0]-2;
- for(a=lll; a>0; a--) {
-
- if(index[0]!= -1 && index[1]!= -1 && index[2]!= -1) {
- idata[0]= (int) index[0];
- idata[1]= (int) index[1];
- idata[2]= (int) index[2];
- idata+= 3;
- }
- index++;
- }
- }
- }
- else if( strcmp(iv->nodename, "QuadMesh")==0 ) {
-
- colnr= iv_colornumber(iv);
-
- /* seek back to data */
- ivp= iv;
- while(ivp->prev) {
- ivp= ivp->prev;
- if( strcmp(ivp->nodename, "Coordinate3")==0 ) {
- coordtype= 3;
- break;
- }
- if( strcmp(ivp->nodename, "VertexProperty")==0 ) {
- coordtype= 3;
- break;
- }
- if( strcmp(ivp->nodename, "Coordinate4")==0 ) {
- coordtype= 4;
- break;
- }
- }
-
- if(ivp) {
- tot= (int) (floor(*(iv->data[0])+0.5) * floor(*(iv->data[1])+0.5));
-
- if(tot>0) {
- dl= MEM_callocN(sizeof(struct DispList)+tot*3*sizeof(float), "leesInventor8");
- BLI_addtail(listb, dl);
- dl->type= DL_SURF;
- dl->parts= (int) floor(*(iv->data[0])+0.5);
- dl->nr= (int) floor(*(iv->data[1])+0.5);
- dl->col= colnr;
- data= (float *)(dl+1);
- memcpy(data, ivp->data[0], tot*3*sizeof(float));
- }
- }
- }
- else if(strcmp(iv->nodename, "IndexedNurbsSurface")==0 || strcmp(iv->nodename, "NurbsSurface")==0) {
-
- colnr= iv_colornumber(iv);
-
- /* sek back to data */
- ivp= iv;
- while(ivp->prev) {
- ivp= ivp->prev;
- if( strcmp(ivp->nodename, "Coordinate3")==0 ) {
- coordtype= 3;
- break;
- }
- if( strcmp(ivp->nodename, "Coordinate4")==0 ) {
- coordtype= 4;
- break;
- }
- }
- if(ivp) {
- a= (int) *(iv->data[0]);
- b= (int) *(iv->data[1]);
-
- tot= a*b;
-
- if( (a>=4 || b>=4) && tot>6) {
- Object *ob;
- Curve *cu;
- Nurb *nu;
- BPoint *bp;
-
- if(ivsurf==0) {
- ob= add_object(scene, OB_SURF);
- ivsurf= ob;
- }
- else ob= ivsurf;
- cu= ob->data;
- nu = (Nurb*) MEM_callocN(sizeof(Nurb),"addNurbprim") ;
- BLI_addtail(&cu->nurb, nu);
- nu->type= CU_NURBS;
-
- nu->pntsu= a;
- nu->pntsv= b;
- nu->resolu= 2*a;
- nu->resolv= 2*b;
-
- nu->flagu= 0;
- nu->flagv= 0;
-
- nu->bp = bp =
- (BPoint*)MEM_callocN(tot * sizeof(BPoint), "addNurbprim3");
- a= tot;
- data= ivp->data[0];
- while(a--) {
- VECCOPY(bp->vec, data);
- if(coordtype==4) {
- bp->vec[3]= data[3];
- mul_v3_fl(bp->vec, 1.0f/data[3]);
- }
- else bp->vec[3]= 1.0;
- data+= coordtype;
- bp++;
- }
-
- /* iv->datalen[2] / [3] is number of knots */
- nu->orderu= iv->datalen[2] - nu->pntsu;
- nu->orderv= iv->datalen[3] - nu->pntsv;
-
- nu->knotsu= MEM_mallocN( sizeof(float)*(iv->datalen[2]), "knots");
- memcpy(nu->knotsu, iv->data[2], sizeof(float)*(iv->datalen[2]));
- nu->knotsv= MEM_mallocN( sizeof(float)*(iv->datalen[3]), "knots");
- memcpy(nu->knotsv, iv->data[3], sizeof(float)*(iv->datalen[3]));
-
- switchdirectionNurb(nu);
-
- }
- else {
- dl= MEM_callocN(sizeof(struct DispList)+tot*3*sizeof(float), "leesInventor3");
- BLI_addtail(listb, dl);
- dl->type= DL_SURF;
- dl->nr= (int) *(iv->data[0]);
- dl->parts= (int) *(iv->data[1]);
- dl->col= colnr;
- data= (float *)(dl+1);
-
- a= tot;
- fp= ivp->data[0];
- while(a--) {
- VECCOPY(data, fp);
- fp+= coordtype;
- data+= 3;
- }
- }
- }
- }
- iv= iv->next;
- }
-
- /* free */
- iv= ivbase.first;
- while(iv) {
- for(a=0; a<IV_MAXFIELD; a++) {
- if(iv->data[a]) MEM_freeN(iv->data[a]);
- }
- iv= iv->next;
- }
-
- BLI_freelistN(&ivbase);
- MEM_freeN(maindata);
- MEM_freeN(iv_data_stack);
-
-}
-
/* ************************************************************ */
-static void displist_to_mesh(Scene *scene, DispList *dlfirst)
-{
- Object *ob;
- Mesh *me;
- Material *ma;
- DispList *dl;
- MVert *mvert;
- MFace *mface;
- float *data, vec[3], min[3], max[3];
- int a, b, startve, *idata, totedge=0, tottria=0, totquad=0, totvert=0, totface, totcol=0, colnr;
- int p1, p2, p3, p4;
- unsigned int maxvertidx;
-
- /* count first */
- INIT_MINMAX(min, max);
-
- dl= dlfirst;
- while(dl) {
-
- /* PATCH 1 (polyfill) can't be done, there's no listbase here. do that first! */
- /* PATCH 2 */
- if(dl->type==DL_SEGM && dl->nr>2) {
- data= (float *)(dl+1);
- if(data[0]==data[3*(dl->nr-1)]) {
- if(data[1]==data[3*(dl->nr-1)+1]) {
- if(data[2]==data[3*(dl->nr-1)+2]) {
- dl->type= DL_POLY;
- dl->nr--;
- }
- }
- }
- }
-
- /* colors */
- if(dl->col > totcol) totcol= dl->col;
-
- /* size and count */
- if(dl->type==DL_SURF) {
- a= dl->nr;
- b= dl->parts;
- if(dl->flag & DL_CYCL_U) a++;
- if(dl->flag & DL_CYCL_V) b++;
-
- totquad+= a*b;
-
- totvert+= dl->nr*dl->parts;
-
- data= (float *)(dl+1);
- for(a= dl->nr*dl->parts; a>0; a--) {
- DO_MINMAX(data, min, max);
- data+= 3;
- }
- }
- else if(dl->type==DL_POLY) {
- if(dl->nr==3 || dl->nr==4) {
- if(dl->nr==3) tottria+= dl->parts;
- else totquad+= dl->parts;
-
- totvert+= dl->nr*dl->parts;
-
- data= (float *)(dl+1);
- for(a= dl->nr*dl->parts; a>0; a--) {
- DO_MINMAX(data, min, max);
- data+= 3;
- }
- }
- else if(dl->nr>4) {
-
- tottria+= dl->nr*dl->parts;
- totvert+= dl->nr*dl->parts;
-
- data= (float *)(dl+1);
- for(a= dl->nr*dl->parts; a>0; a--) {
- DO_MINMAX(data, min, max);
- data+= 3;
- }
-
- }
- }
- else if(dl->type==DL_INDEX3) {
- tottria+= dl->parts;
- totvert+= dl->nr;
-
- data= dl->verts;
- for(a= dl->nr; a>0; a--) {
- DO_MINMAX(data, min, max);
- data+= 3;
- }
- }
- else if(dl->type==DL_SEGM) {
-
- tottria+= (dl->nr-1)*dl->parts;
- totvert+= dl->nr*dl->parts;
-
- data= (float *)(dl+1);
- for(a= dl->nr*dl->parts; a>0; a--) {
- DO_MINMAX(data, min, max);
- data+= 3;
- }
- }
-
- dl= dl->next;
- }
-
- if(totvert==0) {
- return;
- }
-
- vec[0]= (min[0]+max[0])/2;
- vec[1]= (min[1]+max[1])/2;
- vec[2]= (min[2]+max[2])/2;
-
- ob= add_object(scene, OB_MESH);
- VECCOPY(ob->loc, vec);
- where_is_object(scene, ob);
-
- me= ob->data;
-
- /* colors */
- if(totcol) {
- ob->mat= MEM_callocN(sizeof(void *)*totcol, "ob->mat");
- ob->matbits= MEM_callocN(sizeof(char)*totcol, "ob->matbits");
- me->mat= MEM_callocN(sizeof(void *)*totcol, "me->mat");
- me->totcol= totcol;
- ob->totcol= (unsigned char) me->totcol;
- ob->actcol= 1;
- }
-
- /* materials */
- for(a=0; a<totcol; a++) {
- ma= G.main->mat.first;
- while(ma) {
- if(ma->mtex[0]==0) {
- if(ivcolors[a][0]==ma->r && ivcolors[a][1]==ma->g && ivcolors[a][2]==ma->b) {
- me->mat[a]= ma;
- ma->id.us++;
- break;
- }
- }
- ma= ma->id.next;
- }
- if(ma==0) {
- ma= add_material("ext");
- me->mat[a]= ma;
- ma->r= ivcolors[a][0];
- ma->g= ivcolors[a][1];
- ma->b= ivcolors[a][2];
- automatname(ma);
- }
- }
-
- totface= totquad+tottria+totedge;
-
- printf("Import: %d vertices %d faces\n", totvert, totface);
-
- me->totvert= totvert;
- me->totface= totface;
- me->mvert= CustomData_add_layer(&me->vdata, CD_MVERT, CD_CALLOC,
- NULL, me->totvert);
- me->mface= CustomData_add_layer(&me->fdata, CD_MFACE, CD_CALLOC,
- NULL, me->totface);
- maxvertidx= totvert-1;
-
- mvert= me->mvert;
- mface= me->mface;
-
- startve= 0;
-
- dl= dlfirst;
- while(dl) {
-
- colnr= dl->col;
- if(colnr) colnr--;
-
- if(dl->type==DL_SURF) {
- data= (float *)(dl+1);
-
- for(a=dl->parts*dl->nr; a>0; a--) {
- mvert->co[0]= data[0] -vec[0];
- mvert->co[1]= data[1] -vec[1];
- mvert->co[2]= data[2] -vec[2];
-
- data+=3;
- mvert++;
- }
-
- for(a=0; a<dl->parts; a++) {
-
- if (surfindex_displist(dl, a, &b, &p1, &p2, &p3, &p4)==0)
- break;
-
- p1+= startve;
- p2+= startve;
- p3+= startve;
- p4+= startve;
-
- for(; b<dl->nr; b++) {
-
- mface->v1= p1;
- mface->v2= p2;
- mface->v3= p4;
- mface->v4= p3;
-
- mface->mat_nr= colnr;
- test_index_face(mface, NULL, 0, 4);
-
- mface++;
-
- p4= p3;
- p3++;
- p2= p1;
- p1++;
- }
- }
-
- startve += dl->parts*dl->nr;
-
- }
- else if(dl->type==DL_POLY) {
-
- if(dl->nr==3 || dl->nr==4) {
- data= (float *)(dl+1);
-
- for(a=dl->parts*dl->nr; a>0; a--) {
- mvert->co[0]= data[0] -vec[0];
- mvert->co[1]= data[1] -vec[1];
- mvert->co[2]= data[2] -vec[2];
- data+=3;
- mvert++;
- }
-
- for(a=0; a<dl->parts; a++) {
- if(dl->nr==3) {
- mface->v1= startve+a*dl->nr;
- mface->v2= startve+a*dl->nr+1;
- mface->v3= startve+a*dl->nr+2;
- mface->mat_nr= colnr;
- test_index_face(mface, NULL, 0, 3);
- mface++;
- }
- else {
- mface->v1= startve+a*dl->nr;
- mface->v2= startve+a*dl->nr+1;
- mface->v3= startve+a*dl->nr+2;
- mface->v4= startve+a*dl->nr+3;
- mface->mat_nr= colnr;
- test_index_face(mface, NULL, 0, 4);
- mface++;
- }
- }
- startve += dl->parts*dl->nr;
- }
- else if(dl->nr>4) {
- data= (float *)(dl+1);
-
- for(a=dl->parts*dl->nr; a>0; a--) {
- mvert->co[0]= data[0] -vec[0];
- mvert->co[1]= data[1] -vec[1];
- mvert->co[2]= data[2] -vec[2];
-
- data+=3;
- mvert++;
- }
-
- for(b=0; b<dl->parts; b++) {
- for(a=0; a<dl->nr; a++) {
- mface->v1= startve+a;
-
- if(a==dl->nr-1) mface->v2= startve;
- else mface->v2= startve+a+1;
-
- mface->mat_nr= colnr;
-
- mface++;
- }
- startve += dl->nr;
- }
- }
- }
- else if(dl->type==DL_INDEX3) {
- data= dl->verts;
-
- for(a=dl->nr; a>0; a--) {
- mvert->co[0]= data[0] -vec[0];
- mvert->co[1]= data[1] -vec[1];
- mvert->co[2]= data[2] -vec[2];
- data+=3;
- mvert++;
- }
-
- idata= dl->index;
- for(b=dl->parts; b>0; b--) {
- mface->v1= startve+idata[0];
- mface->v2= startve+idata[1];
- mface->v3= startve+idata[2];
- mface->mat_nr= colnr;
-
- if (mface->v1>maxvertidx) mface->v1= maxvertidx;
- if (mface->v2>maxvertidx) mface->v2= maxvertidx;
- if (mface->v3>maxvertidx) mface->v3= maxvertidx;
-
- test_index_face(mface, NULL, 0, 3);
- mface++;
- idata+= 3;
- }
- startve += dl->nr;
- }
- else if(dl->type==DL_SEGM) {
- data= (float *)(dl+1);
-
- for(a=dl->parts*dl->nr; a>0; a--) {
- mvert->co[0]= data[0] -vec[0];
- mvert->co[1]= data[1] -vec[1];
- mvert->co[2]= data[2] -vec[2];
- data+=3;
- mvert++;
- }
-
- for(b=0; b<dl->parts; b++) {
- for(a=0; a<dl->nr-1; a++) {
- mface->v1= startve+a;
- mface->v2= startve+a+1;
- mface->mat_nr= colnr;
- mface++;
- }
- startve += dl->nr;
- }
- }
- dl= dl->next;
- }
-
- mesh_add_normals_flags(me);
- make_edges(me, 0);
-}
-
-static void displist_to_objects(Scene *scene, ListBase *lbase)
-{
- DispList *dl, *first, *prev, *next;
- ListBase tempbase;
- int maxaantal, curcol, totvert=0, vert;
-
- /* irst this: is still active */
- if(ivsurf) {
- where_is_object(scene, ivsurf);
-// XXX docenter_new();
- }
-
- dl= lbase->first;
- while(dl) {
- next= dl->next;
-
- /* PATCH 1: polyfill */
- if(dl->type==DL_POLY && dl->nr>4) {
- /* solution: put them together in separate listbase */
- ;
- }
- /* PATCH 2: poly's of 2 points */
- if(dl->type==DL_POLY && dl->nr==2) dl->type= DL_SEGM;
-
- dl= next;
- }
-
- /* count vertices */
-
- dl= lbase->first;
- while(dl) {
-
- if(dl->type==DL_SURF) totvert+= dl->nr*dl->parts;
- else if(dl->type==DL_POLY) {
- if(dl->nr==3 || dl->nr==4) totvert+= dl->nr*dl->parts;
- else if(dl->nr>4) totvert+= dl->nr*dl->parts;
- }
- else if(dl->type==DL_INDEX3) totvert+= dl->nr;
- else if(dl->type==DL_SEGM) totvert+= dl->nr*dl->parts;
-
- dl= dl->next;
- }
-
- if(totvert==0) {
-
- if(ivsurf==0) {}; //XXX error("Found no data");
- if(lbase->first) BLI_freelistN(lbase);
-
- return;
- }
-
- maxaantal= 32000;
-
- if(totvert>maxaantal) {
-
- /* try to put colors together */
- curcol= 0;
- tempbase.first= tempbase.last= 0;
-
- while(lbase->first) {
- dl= lbase->first;
- while(dl) {
- next= dl->next;
- if(dl->col==curcol) {
- BLI_remlink(lbase, dl);
- BLI_addtail(&tempbase, dl);
- dl->col= 0;
- }
-
- dl= next;
- }
-
- /* in tempbase are all 'curcol' */
- totvert= 0;
- dl= first= tempbase.first;
- while(dl) {
- vert= 0;
-
- if(dl->type==DL_SURF) vert= dl->nr*dl->parts;
- else if(dl->type==DL_POLY) {
- if(dl->nr==3 || dl->nr==4) vert= dl->nr*dl->parts;
- else if(dl->nr>4) vert= dl->nr*dl->parts;
- }
- else if(dl->type==DL_INDEX3) totvert+= dl->nr;
- else if(dl->type==DL_SEGM) vert= dl->nr*dl->parts;
-
- totvert+= vert;
- if(totvert > maxaantal || dl->next==0) {
- if(dl->next==0) {
- displist_to_mesh(scene, first);
- }
- else if(dl->prev) {
- prev= dl->prev;
- prev->next= 0;
- displist_to_mesh(scene, first);
- prev->next= dl;
- first= dl;
- totvert= 0;
- }
- }
-
- dl= dl->next;
- }
-
- freedisplist(&tempbase);
-
- curcol++;
- }
- }
- else displist_to_mesh(scene, lbase->first);
-
- freedisplist(lbase);
-
-}
-
int BKE_read_exotic(Scene *scene, char *name)
{
- ListBase lbase={0, 0};
int len;
gzFile gzfile;
char str[32];
@@ -1793,21 +477,7 @@ int BKE_read_exotic(Scene *scene, char *name)
if ((*s0 != FORM) && (strncmp(str, "BLEN", 4) != 0) && !BLI_testextensie(name,".blend.gz")) {
//XXX waitcursor(1);
- if(strncmp(str, "#Inventor V1.0", 14)==0) {
- if( strncmp(str+15, "ascii", 5)==0) {
- read_inventor(scene, name, &lbase);
- displist_to_objects(scene, &lbase);
- retval = 1;
- } else {
- //XXX error("Can only read Inventor 1.0 ascii");
- }
- }
- else if((strncmp(str, "#VRML V1.0 asc", 14)==0)) {
- read_inventor(scene, name, &lbase);
- displist_to_objects(scene, &lbase);
- retval = 1;
- }
- else if(is_dxf(name)) {
+ if(is_dxf(name)) {
dxf_read(scene, name);
retval = 1;
}
@@ -1907,15 +577,8 @@ void write_stl(Scene *scene, char *str)
FILE *fpSTL;
int numfacets = 0;
ReportList *reports= NULL; /* XXX */
-
- if(BLI_testextensie(str,".blend")) str[ strlen(str)-6]= 0;
- if(BLI_testextensie(str,".ble")) str[ strlen(str)-4]= 0;
- if(BLI_testextensie(str,".stl")==0) strcat(str, ".stl");
- if (BLI_exists(str)) {
- ; //XXX if(saveover(str)==0)
- //XXX return;
- }
+ /* XXX, operator needs to manage filename extension */
fpSTL= fopen(str, "wb");
@@ -1965,7 +628,6 @@ void write_stl(Scene *scene, char *str)
//XXX waitcursor(0);
}
-/* ******************************* WRITE VRML ***************************** */
static void replace_chars(char *str1, char *str2)
{
@@ -1978,354 +640,6 @@ static void replace_chars(char *str1, char *str2)
}
}
-
-static void write_material_vrml(FILE *fp, Material *ma)
-{
- char str[32];
-
- replace_chars(str, ma->id.name+2);
-
- fprintf(fp, "\tDEF %s\n", str);
- fprintf(fp, "\tMaterial {\n");
-
- fprintf(fp, "\t\tdiffuseColor %f %f %f\n", ma->r, ma->g, ma->b);
- fprintf(fp, "\t\tspecularColor %f %f %f\n", ma->specr, ma->specg, ma->specb);
- fprintf(fp, "\t\tshininess %f \n", ((float)ma->har)/100.0);
- fprintf(fp, "\t\ttransparency %f \n", 1.0-ma->alpha);
-
- fprintf(fp, "\t}\n");
-
-}
-
-unsigned int *mcol_to_vcol(Mesh *me)
-{
- MFace *mface;
- unsigned int *mcol, *mcoln, *mcolmain;
- int a;
-
- if(me->totface==0 || me->mcol==0) return 0;
-
- mcoln= mcolmain= MEM_mallocN(sizeof(int)*me->totvert, "mcoln");
- mcol = (unsigned int *)me->mcol;
- mface= me->mface;
-
- for(a=me->totface; a>0; a--, mface++) {
- mcoln[mface->v1]= mcol[0];
- mcoln[mface->v2]= mcol[1];
- mcoln[mface->v3]= mcol[2];
- if(mface->v4) mcoln[mface->v4]= mcol[3];
-
- mcol+= 4;
- }
-
- return mcolmain;
-}
-
-void mcol_to_rgba(unsigned int col, float *r, float *g, float *b, float *a)
-{
- char *cp;
-
- cp = (char *)&col;
-
- *r= cp[3];
- *r /= 255.0;
-
- *g= cp[2];
- *g /= 255.0;
-
- *b= cp[1];
- *b /= 255.0;
-
- *a= cp[0];
- *a /= 255.0;
-}
-
-static void write_mesh_vrml(FILE *fp, Mesh *me)
-{
- Material *ma;
- MVert *mvert;
- MFace *mface;
- MTFace *tface;
- Image *ima;
- int a, b, totcol, texind;
- char str[32];
-
- replace_chars(str, me->id.name+2);
-
- fprintf(fp, "\tDEF %s\n", str);
- fprintf(fp, "\tSeparator {\n");
-
- if(me->mtface) {
- ima= ((MTFace *)me->mtface)->tpage;
- if(ima) {
- fprintf(fp, "\t\tTexture2 {\n");
- fprintf(fp, "\t\t\tfilename %s\n", ima->name);
- fprintf(fp, "\t\t\twrapS REPEAT \n");
- fprintf(fp, "\t\t\twrapT REPEAT \n");
- fprintf(fp, "\t\t}\n");
- }
- }
-
- if(me->mcol) {
- unsigned int *mcol, *mcolmain;
- float r, g, b, cola;
-
- fprintf(fp, "\t\tMaterial {\n");
- fprintf(fp, "\t\t\tdiffuseColor [\n");
-
- a= me->totvert;
- mcol= mcolmain= mcol_to_vcol(me);
- if(mcol) {
- while(a--) {
- mcol_to_rgba(*mcol, &r, &g, &b, &cola);
- fprintf(fp, "\t\t\t\t %f %f %f,\n", r, g, b);
- mcol++;
- }
- MEM_freeN(mcolmain);
- }
- fprintf(fp, "\t\t\t]\n");
- fprintf(fp, "\t\t}\n");
-
- fprintf(fp, "\t\tMaterialBinding { value PER_VERTEX_INDEXED }\n");
- }
-
-
- fprintf(fp, "\t\tCoordinate3 {\n");
- fprintf(fp, "\t\t\tpoint [\n");
-
- a= me->totvert;
- mvert= me->mvert;
- while(a--) {
- fprintf(fp, "\t\t\t\t %f %f %f,\n", mvert->co[0], mvert->co[1], mvert->co[2]);
- mvert++;
- }
- fprintf(fp, "\t\t\t]\n");
- fprintf(fp, "\t\t}\n");
-
-
- totcol= me->totcol;
- if(totcol==0) totcol= 1;
- texind= 0; // index for uv coords
-
- for(b=0; b<totcol; b++) {
-
- if(me->mcol==0) {
- if(me->mat) {
- ma= me->mat[b];
- if(ma) {
- replace_chars(str, ma->id.name+2);
-
- fprintf(fp, "\t\tUSE %s\n\n", str);
- }
- }
- }
-
- if(me->mtface) {
- fprintf(fp, "\t\tTextureCoordinate2 {\n");
- fprintf(fp, "\t\t\tpoint [\n");
-
- a= me->totface;
- mface= me->mface;
- tface= me->mtface;
- while(a--) {
- if(mface->mat_nr==b) {
- fprintf(fp, "\t\t\t\t %f %f,\n", tface->uv[0][0], tface->uv[0][1]);
- fprintf(fp, "\t\t\t\t %f %f,\n", tface->uv[1][0], tface->uv[1][1]);
- fprintf(fp, "\t\t\t\t %f %f,\n", tface->uv[2][0], tface->uv[2][1]);
- if(mface->v4) fprintf(fp, "\t\t\t\t %f %f,\n", tface->uv[3][0], tface->uv[3][1]);
- }
- mface++;
- tface++;
- }
- fprintf(fp, "\t\t\t]\n");
- fprintf(fp, "\t\t}\n");
- }
-
- fprintf(fp, "\t\tIndexedFaceSet {\n");
- fprintf(fp, "\t\t\tcoordIndex [\n");
-
- a= me->totface;
- mface= me->mface;
- while(a--) {
- if(mface->mat_nr==b) {
- if(mface->v4) fprintf(fp, "\t\t\t\t %d, %d, %d, %d, -1,\n", mface->v1, mface->v2, mface->v3, mface->v4);
- else fprintf(fp, "\t\t\t\t %d, %d, %d, -1,\n", mface->v1, mface->v2, mface->v3);
- }
- mface++;
- }
- fprintf(fp, "\t\t\t]\n");
-
- if(me->mtface) {
- fprintf(fp, "\t\t\ttextureCoordIndex [\n");
-
- a= me->totface;
- mface= me->mface;
- while(a--) {
- if(mface->mat_nr==b) {
- if(mface->v4) {
- fprintf(fp, "\t\t\t\t %d, %d, %d, %d, -1,\n", texind, texind+1, texind+2, texind+3);
- texind+= 4;
- }
- else {
- fprintf(fp, "\t\t\t\t %d, %d, %d, -1,\n", texind, texind+1, texind+2);
- texind+= 3;
- }
- }
- mface++;
- }
- fprintf(fp, "\t\t\t]\n");
- }
- fprintf(fp, "\t\t}\n");
- }
-
- fprintf(fp, "\t}\n");
-}
-
-static void write_camera_vrml(FILE *fp, Object *ob)
-{
- Camera *cam;
-
- if(ob==0) return;
- invert_m4_m4(ob->imat, ob->obmat);
-
- fprintf(fp, "\tMatrixTransform {\n");
-
- fprintf(fp, "\tmatrix \n");
-
- fprintf(fp, "\t\t%f %f %f %f\n", ob->imat[0][0], ob->imat[0][1], ob->imat[0][2], ob->imat[0][3]);
- fprintf(fp, "\t\t%f %f %f %f\n", ob->imat[1][0], ob->imat[1][1], ob->imat[1][2], ob->imat[1][3]);
- fprintf(fp, "\t\t%f %f %f %f\n", ob->imat[2][0], ob->imat[2][1], ob->imat[2][2], ob->imat[2][3]);
- fprintf(fp, "\t\t%f %f %f %f\n", ob->imat[3][0], ob->imat[3][1], ob->imat[3][2], ob->imat[3][3]);
-
- fprintf(fp, "\t}\n");
-
- cam= ob->data;
-
- fprintf(fp, "\tPerspectiveCamera {\n");
- fprintf(fp, "\t\tfocalDistance %f\n", cam->lens/10.0);
-
- fprintf(fp, "\t}\n");
-
-}
-
-static void write_object_vrml(FILE *fp, Object *ob)
-{
- ID *id;
- char str[32];
-
- fprintf(fp, "\tSeparator {\n");
- fprintf(fp, "\t\tMatrixTransform {\n");
-
- fprintf(fp, "\t\tmatrix \n");
-
- fprintf(fp, "\t\t\t%f %f %f %f\n", ob->obmat[0][0], ob->obmat[0][1], ob->obmat[0][2], ob->obmat[0][3]);
- fprintf(fp, "\t\t\t%f %f %f %f\n", ob->obmat[1][0], ob->obmat[1][1], ob->obmat[1][2], ob->obmat[1][3]);
- fprintf(fp, "\t\t\t%f %f %f %f\n", ob->obmat[2][0], ob->obmat[2][1], ob->obmat[2][2], ob->obmat[2][3]);
- fprintf(fp, "\t\t\t%f %f %f %f\n", ob->obmat[3][0], ob->obmat[3][1], ob->obmat[3][2], ob->obmat[3][3]);
-
- fprintf(fp, "\t\t}\n");
-
- id= ob->data;
-
- replace_chars(str, id->name+2);
-
- fprintf(fp, "\t\tUSE %s\n", str);
- fprintf(fp, "\t}\n");
-}
-
-
-void write_vrml(Scene *scene, char *str)
-{
- Mesh *me;
- Material *ma;
- Base *base;
- FILE *fp;
-
- if(BLI_testextensie(str,".blend")) str[ strlen(str)-6]= 0;
- if(BLI_testextensie(str,".ble")) str[ strlen(str)-4]= 0;
- if(BLI_testextensie(str,".wrl")==0) strcat(str, ".wrl");
- //XXX saveover() if(saveover(str)==0) return;
-
- fp= fopen(str, "w");
-
- if(fp==NULL) {
- //XXX error("Can't write file");
- return;
- }
- strcpy(temp_dir, str);
-
- //XXX waitcursor(1);
-
- /* FIRST: write all the datablocks */
-
- fprintf(fp, "#VRML V1.0 ascii\n\n# Blender V%d\n\n# 'Switch' is used as a hack, to ensure it is not part of the drawing\n\n", BLENDER_VERSION);
- fprintf(fp, "Separator {\n");
- fprintf(fp, "Switch {\n");
-
- ma= G.main->mat.first;
- while(ma) {
- if(ma->id.us) {
- write_material_vrml(fp, ma);
- }
- ma= ma->id.next;
- }
-
- /* only write meshes we're using in this scene */
- flag_listbase_ids(&G.main->mesh, LIB_DOIT, 0);
-
- for(base= scene->base.first; base; base= base->next)
- if(base->object->type== OB_MESH)
- ((ID *)base->object->data)->flag |= LIB_DOIT;
-
- me= G.main->mesh.first;
- while(me) {
- if(me->id.flag & LIB_DOIT) { /* is the mesh used in this scene ? */
- write_mesh_vrml(fp, me);
- }
- me= me->id.next;
- }
-
- /* THEN:Hidden Objects */
- fprintf(fp, "\n\t# Hidden Objects, in invisible layers\n\n");
- base= scene->base.first;
- while(base) {
- if(base->object->type== OB_MESH) {
- if( (base->lay & scene->lay)==0 ) {
- write_object_vrml(fp, base->object);
- }
- }
- base= base->next;
- }
-
- fprintf(fp, "}\n");
- fprintf(fp, "\n# Visible Objects\n\n");
- fprintf(fp, "Separator {\n");
-
- /* The camera */
-
- write_camera_vrml(fp, scene->camera);
-
- /* THEN:The Objects */
-
- base= scene->base.first;
- while(base) {
- if(base->object->type== OB_MESH) {
- if(base->lay & scene->lay) {
- write_object_vrml(fp, base->object);
- }
- }
- base= base->next;
- }
-
- fprintf(fp, "}\n");
- fprintf(fp, "}\n");
-
- fclose(fp);
-
- //XXX waitcursor(0);
-}
-
-
/* ******************************* WRITE DXF ***************************** */
#define write_group(id,data) fprintf(fp, "%d\n%s\n", id, data)
@@ -2551,15 +865,7 @@ void write_dxf(struct Scene *scene, char *str)
Base *base;
FILE *fp;
- if(BLI_testextensie(str,".blend")) str[ strlen(str)-6]= 0;
- if(BLI_testextensie(str,".ble")) str[ strlen(str)-4]= 0;
- if(BLI_testextensie(str,".dxf")==0) strcat(str, ".dxf");
-
-
- if (BLI_exists(str)) {
- ; //XXX if(saveover(str)==0)
- // return;
- }
+ /* XXX, operator needs to handle overwrite & rename */
fp= fopen(str, "w");
diff --git a/source/blender/blenkernel/intern/fluidsim.c b/source/blender/blenkernel/intern/fluidsim.c
index 8a6f0af87d1..ef89d39864a 100644
--- a/source/blender/blenkernel/intern/fluidsim.c
+++ b/source/blender/blenkernel/intern/fluidsim.c
@@ -28,6 +28,7 @@
* ***** END GPL LICENSE BLOCK *****
*/
+#include <stddef.h>
#include "BLI_storage.h" /* _LARGEFILE_SOURCE */
#include "MEM_guardedalloc.h"
@@ -50,7 +51,6 @@
#include "BKE_global.h"
#include "BKE_modifier.h"
#include "BKE_mesh.h"
-#include "BKE_pointcache.h"
#include "BKE_utildefines.h"
// headers for fluidsim bobj meshes
diff --git a/source/blender/blenkernel/intern/fmodifier.c b/source/blender/blenkernel/intern/fmodifier.c
index 3271749643a..f63b58fe489 100644
--- a/source/blender/blenkernel/intern/fmodifier.c
+++ b/source/blender/blenkernel/intern/fmodifier.c
@@ -43,10 +43,6 @@
#include "BKE_idprop.h"
#include "BKE_utildefines.h"
-#ifndef DISABLE_PYTHON
-#include "BPY_extern.h" /* for BPY_eval_driver() */
-#endif
-
#define SMALL -1.0e-10
#define SELECT 1
@@ -1091,13 +1087,6 @@ int remove_fmodifier (ListBase *modifiers, FModifier *fcm)
}
}
-/* Remove and free the nth F-Modifier from the given stack */
-int remove_fmodifier_index (ListBase *modifiers, int index)
-{
- FModifier *fcm= BLI_findlink(modifiers, index);
- return remove_fmodifier(modifiers, fcm);
-}
-
/* Remove all of a given F-Curve's modifiers */
void free_fmodifiers (ListBase *modifiers)
{
diff --git a/source/blender/blenkernel/intern/font.c b/source/blender/blenkernel/intern/font.c
index 39b74be3d40..47627d09b97 100644
--- a/source/blender/blenkernel/intern/font.c
+++ b/source/blender/blenkernel/intern/font.c
@@ -265,13 +265,11 @@ static PackedFile *get_builtin_packedfile(void)
void free_ttfont(void)
{
struct TmpFont *tf;
-
- tf= ttfdata.first;
- while(tf) {
- freePackedFile(tf->pf);
+
+ for(tf= ttfdata.first; tf; tf= tf->next) {
+ if(tf->pf) freePackedFile(tf->pf); /* NULL when the font file can't be found on disk */
tf->pf= NULL;
tf->vfont= NULL;
- tf= tf->next;
}
BLI_freelistN(&ttfdata);
}
@@ -1148,7 +1146,7 @@ struct chartrans *BKE_text_to_curve(Scene *scene, Object *ob, int mode)
return NULL;
}
- if(mode==0) {
+ if(mode == FO_EDIT) {
/* make nurbdata */
unsigned long cha;
diff --git a/source/blender/blenkernel/intern/group.c b/source/blender/blenkernel/intern/group.c
index 6377a6f6ccd..bdf203119c3 100644
--- a/source/blender/blenkernel/intern/group.c
+++ b/source/blender/blenkernel/intern/group.c
@@ -69,21 +69,22 @@ void free_group_objects(Group *group)
void unlink_group(Group *group)
{
+ Main *bmain= G.main;
Material *ma;
Object *ob;
Scene *sce;
SceneRenderLayer *srl;
ParticleSystem *psys;
- for(ma= G.main->mat.first; ma; ma= ma->id.next) {
+ for(ma= bmain->mat.first; ma; ma= ma->id.next) {
if(ma->group==group)
ma->group= NULL;
}
- for(ma= G.main->mat.first; ma; ma= ma->id.next) {
+ for(ma= bmain->mat.first; ma; ma= ma->id.next) {
if(ma->group==group)
ma->group= NULL;
}
- for (sce= G.main->scene.first; sce; sce= sce->id.next) {
+ for (sce= bmain->scene.first; sce; sce= sce->id.next) {
Base *base= sce->base.first;
/* ensure objects are not in this group */
@@ -100,7 +101,7 @@ void unlink_group(Group *group)
}
}
- for(ob= G.main->object.first; ob; ob= ob->id.next) {
+ for(ob= bmain->object.first; ob; ob= ob->id.next) {
bActionStrip *strip;
if(ob->dup_group==group) {
diff --git a/source/blender/blenkernel/intern/idcode.c b/source/blender/blenkernel/intern/idcode.c
new file mode 100644
index 00000000000..6411959e655
--- /dev/null
+++ b/source/blender/blenkernel/intern/idcode.c
@@ -0,0 +1,128 @@
+/**
+ * $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) 2001-2002 by NaN Holding BV.
+ * All rights reserved.
+ *
+ * The Original Code is: all of this file.
+ *
+ * Contributor(s): none yet.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ * return info about ID types
+ */
+
+#include <stdlib.h>
+#include <string.h>
+
+#include "DNA_ID.h"
+
+typedef struct {
+ unsigned short code;
+ char *name, *plural;
+
+ int flags;
+#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", "keys", 0},
+ { ID_LA, "Lamp", "lamps", IDTYPE_FLAGS_ISLINKABLE},
+ { ID_LI, "Library", "libraries", 0},
+ { 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_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},
+};
+static int nidtypes= sizeof(idtypes)/sizeof(idtypes[0]);
+
+static IDType *idtype_from_name(const char *str)
+{
+ int i= nidtypes;
+
+ while (i--)
+ if (strcmp(str, idtypes[i].name)==0)
+ return &idtypes[i];
+
+ return NULL;
+}
+static IDType *idtype_from_code(int code)
+{
+ int i= nidtypes;
+
+ while (i--)
+ if (code==idtypes[i].code)
+ return &idtypes[i];
+
+ return NULL;
+}
+
+int BKE_idcode_is_valid(int code)
+{
+ 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;
+}
+
+const char *BKE_idcode_to_name(int code)
+{
+ IDType *idt= idtype_from_code(code);
+
+ return idt?idt->name:NULL;
+}
+
+int BKE_idcode_from_name(const char *name)
+{
+ IDType *idt= idtype_from_name(name);
+
+ return idt?idt->code:0;
+}
+
+const char *BKE_idcode_to_name_plural(int code)
+{
+ IDType *idt= idtype_from_code(code);
+
+ return idt?idt->plural:NULL;
+}
diff --git a/source/blender/blenkernel/intern/idprop.c b/source/blender/blenkernel/intern/idprop.c
index 2ccb33b088a..a0df73d6c42 100644
--- a/source/blender/blenkernel/intern/idprop.c
+++ b/source/blender/blenkernel/intern/idprop.c
@@ -27,6 +27,7 @@
#include <stdio.h>
#include <stdlib.h>
+#include <stddef.h>
#include <string.h>
#include "BKE_idprop.h"
@@ -491,47 +492,41 @@ void IDP_ReplaceGroupInGroup(IDProperty *dest, IDProperty *src)
void IDP_ReplaceInGroup(IDProperty *group, IDProperty *prop)
{
IDProperty *loop;
- for (loop=group->data.group.first; loop; loop=loop->next) {
- if (BSTR_EQ(loop->name, prop->name)) {
- BLI_insertlink(&group->data.group, loop, prop);
-
- BLI_remlink(&group->data.group, loop);
- IDP_FreeProperty(loop);
- MEM_freeN(loop);
- return;
- }
+ if((loop= IDP_GetPropertyFromGroup(group, prop->name))) {
+ BLI_insertlink(&group->data.group, loop, prop);
+
+ BLI_remlink(&group->data.group, loop);
+ IDP_FreeProperty(loop);
+ MEM_freeN(loop);
+ }
+ else {
+ group->len++;
+ BLI_addtail(&group->data.group, prop);
}
-
- group->len++;
- BLI_addtail(&group->data.group, prop);
}
/*returns 0 if an id property with the same name exists and it failed,
or 1 if it succeeded in adding to the group.*/
int IDP_AddToGroup(IDProperty *group, IDProperty *prop)
{
- IDProperty *loop;
- for (loop=group->data.group.first; loop; loop=loop->next) {
- if (BSTR_EQ(loop->name, prop->name)) return 0;
+ if(IDP_GetPropertyFromGroup(group, prop->name) == NULL) {
+ group->len++;
+ BLI_addtail(&group->data.group, prop);
+ return 1;
}
- group->len++;
- BLI_addtail(&group->data.group, prop);
-
- return 1;
+ return 0;
}
int IDP_InsertToGroup(IDProperty *group, IDProperty *previous, IDProperty *pnew)
{
- IDProperty *loop;
- for (loop=group->data.group.first; loop; loop=loop->next) {
- if (BSTR_EQ(loop->name, pnew->name)) return 0;
+ if(IDP_GetPropertyFromGroup(group, pnew->name) == NULL) {
+ group->len++;
+ BLI_insertlink(&group->data.group, previous, pnew);
+ return 1;
}
-
- group->len++;
- BLI_insertlink(&group->data.group, previous, pnew);
- return 1;
+ return 0;
}
void IDP_RemFromGroup(IDProperty *group, IDProperty *prop)
@@ -542,11 +537,7 @@ void IDP_RemFromGroup(IDProperty *group, IDProperty *prop)
IDProperty *IDP_GetPropertyFromGroup(IDProperty *prop, const char *name)
{
- IDProperty *loop;
- for (loop=prop->data.group.first; loop; loop=loop->next) {
- if (strcmp(loop->name, name)==0) return loop;
- }
- return NULL;
+ return (IDProperty *)BLI_findstring(&prop->data.group, name, offsetof(IDProperty, name));
}
typedef struct IDPIter {
diff --git a/source/blender/blenkernel/intern/image.c b/source/blender/blenkernel/intern/image.c
index d2612e90945..a199c1cf738 100644
--- a/source/blender/blenkernel/intern/image.c
+++ b/source/blender/blenkernel/intern/image.c
@@ -69,6 +69,7 @@
#include "BKE_main.h"
#include "BKE_packedFile.h"
#include "BKE_scene.h"
+#include "BKE_node.h"
//XXX #include "BIF_editseq.h"
@@ -756,9 +757,9 @@ int BKE_imtype_is_movie(int imtype)
return 0;
}
-void BKE_add_image_extension(char *string, int imtype)
+int BKE_add_image_extension(char *string, int imtype)
{
- char *extension="";
+ char *extension= NULL;
if(imtype== R_IRIS) {
if(!BLI_testextensie(string, ".rgb"))
@@ -829,7 +830,12 @@ void BKE_add_image_extension(char *string, int imtype)
extension= ".jpg";
}
- strcat(string, extension);
+ if(extension) {
+ return BLI_replace_extension(string, FILE_MAX, extension);
+ }
+ else {
+ return FALSE;
+ }
}
/* could allow access externally - 512 is for long names, 64 is for id names */
@@ -1447,6 +1453,17 @@ void BKE_image_signal(Image *ima, ImageUser *iuser, int signal)
}
break;
}
+
+ /* dont use notifiers because they are not 100% sure to succseed
+ * this also makes sure all scenes are accounted for. */
+ {
+ Scene *scene;
+ for(scene= G.main->scene.first; scene; scene= scene->id.next) {
+ if(scene->nodetree) {
+ NodeTagIDChanged(scene->nodetree, &ima->id);
+ }
+ }
+ }
}
/* if layer or pass changes, we need an index for the imbufs list */
@@ -1760,8 +1777,6 @@ static ImBuf *image_load_image_file(Image *ima, ImageUser *iuser, int cfra)
else
BLI_path_abs(str, G.sce);
- BLI_path_frame(str, cfra, 0);
-
/* read ibuf */
ibuf = IMB_loadiffname(str, flag);
}
@@ -1979,8 +1994,14 @@ static ImBuf *image_get_ibuf_threadsafe(Image *ima, ImageUser *iuser, int *frame
ibuf= image_get_ibuf(ima, 0, frame);
/* XXX temp stuff? */
- if(ima->lastframe != frame)
+ if(ima->lastframe != frame) {
ima->tpageflag |= IMA_TPAGE_REFRESH;
+ if(ibuf) {
+ /* without this the image name only updates
+ * on first load which is quite confusing */
+ BLI_strncpy(ima->name, ibuf->name, sizeof(ima->name));
+ }
+ }
ima->lastframe = frame;
}
else if(ima->type==IMA_TYPE_MULTILAYER) {
@@ -1999,14 +2020,9 @@ static ImBuf *image_get_ibuf_threadsafe(Image *ima, ImageUser *iuser, int *frame
ibuf= image_get_ibuf(ima, IMA_NO_INDEX, 0);
}
else if(ima->source == IMA_SRC_VIEWER) {
- if(ima->type==IMA_TYPE_R_RESULT) {
- /* always verify entirely, not that this shouldn't happen
- * during render anyway */
- }
- else if(ima->type==IMA_TYPE_COMPOSITE) {
- frame= iuser?iuser->framenr:0;
- ibuf= image_get_ibuf(ima, 0, frame);
- }
+ /* always verify entirely, not that this shouldn't happen
+ * as part of texture sampling in rendering anyway, so not
+ * a big bottleneck */
}
*frame_r = frame;
@@ -2123,10 +2139,15 @@ ImBuf *BKE_image_acquire_ibuf(Image *ima, ImageUser *iuser, void **lock_r)
BLI_lock_thread(LOCK_VIEWER);
*lock_r= ima;
- /* Composite Viewer, all handled in compositor */
- /* fake ibuf, will be filled in compositor */
- ibuf= IMB_allocImBuf(256, 256, 32, IB_rect, 0);
- image_assign_ibuf(ima, ibuf, 0, frame);
+ frame= iuser?iuser->framenr:0;
+ ibuf= image_get_ibuf(ima, 0, frame);
+
+ if(!ibuf) {
+ /* Composite Viewer, all handled in compositor */
+ /* fake ibuf, will be filled in compositor */
+ ibuf= IMB_allocImBuf(256, 256, 32, IB_rect, 0);
+ image_assign_ibuf(ima, ibuf, 0, frame);
+ }
}
}
}
diff --git a/source/blender/blenkernel/intern/implicit.c b/source/blender/blenkernel/intern/implicit.c
index 902965bd2f6..158f964a846 100644
--- a/source/blender/blenkernel/intern/implicit.c
+++ b/source/blender/blenkernel/intern/implicit.c
@@ -29,16 +29,21 @@
#include "MEM_guardedalloc.h"
-#include "BKE_cloth.h"
-
+#include "DNA_scene_types.h"
+#include "DNA_object_types.h"
#include "DNA_object_force.h"
+#include "DNA_meshdata_types.h"
+#include "BLI_threads.h"
+#include "BLI_math.h"
+#include "BLI_linklist.h"
+
+#include "BKE_cloth.h"
+#include "BKE_collision.h"
#include "BKE_effect.h"
#include "BKE_global.h"
#include "BKE_utildefines.h"
-#include "BLI_threads.h"
-
#define CLOTH_OPENMP_LIMIT 25
#ifdef _WIN32
@@ -1621,9 +1626,8 @@ static void cloth_calc_force(ClothModifierData *clmd, float frame, lfVector *lF,
CalcFloat4(lX[mfaces[i].v1],lX[mfaces[i].v2],lX[mfaces[i].v3],lX[mfaces[i].v4],triunnormal);
else
CalcFloat(lX[mfaces[i].v1],lX[mfaces[i].v2],lX[mfaces[i].v3],triunnormal);
-
- VECCOPY(trinormal, triunnormal);
- normalize_v3(trinormal);
+
+ normalize_v3_v3(trinormal, triunnormal);
// add wind from v1
VECCOPY(tmp, trinormal);
diff --git a/source/blender/blenkernel/intern/ipo.c b/source/blender/blenkernel/intern/ipo.c
index a24f37bf73a..5c0c0fbf0c1 100644
--- a/source/blender/blenkernel/intern/ipo.c
+++ b/source/blender/blenkernel/intern/ipo.c
@@ -1301,13 +1301,14 @@ static void icu_to_fcurves (ID *id, ListBase *groups, ListBase *list, IpoCurve *
/* correct times for rotation drivers
* - need to go from degrees to radians...
* - there's only really 1 target to worry about
+ * - were also degrees/10
*/
if (fcu->driver && fcu->driver->variables.first) {
DriverVar *dvar= fcu->driver->variables.first;
DriverTarget *dtar= &dvar->targets[0];
if (ELEM3(dtar->transChan, DTAR_TRANSCHAN_ROTX, DTAR_TRANSCHAN_ROTY, DTAR_TRANSCHAN_ROTZ)) {
- const float fac= (float)M_PI / 180.0f;
+ const float fac= (float)M_PI / 18.0f;
dst->vec[0][0] *= fac;
dst->vec[1][0] *= fac;
diff --git a/source/blender/blenkernel/intern/key.c b/source/blender/blenkernel/intern/key.c
index 354b3b0e7d8..708403ab1f7 100644
--- a/source/blender/blenkernel/intern/key.c
+++ b/source/blender/blenkernel/intern/key.c
@@ -50,6 +50,7 @@
#include "BKE_animsys.h"
#include "BKE_curve.h"
#include "BKE_customdata.h"
+#include "BKE_deform.h"
#include "BKE_global.h"
#include "BKE_key.h"
#include "BKE_lattice.h"
@@ -1003,7 +1004,6 @@ static void do_key(int start, int end, int tot, char *poin, Key *key, KeyBlock *
static float *get_weights_array(Object *ob, char *vgroup)
{
- bDeformGroup *curdef;
MDeformVert *dvert= NULL;
EditMesh *em= NULL;
EditVert *eve;
@@ -1030,11 +1030,8 @@ static float *get_weights_array(Object *ob, char *vgroup)
if(dvert==NULL) return NULL;
/* find the group (weak loop-in-loop) */
- for (curdef = ob->defbase.first; curdef; curdef=curdef->next, index++)
- if (!strcmp(curdef->name, vgroup))
- break;
-
- if(curdef) {
+ index= defgroup_name_index(ob, vgroup);
+ if(index >= 0) {
float *weights;
int i, j;
@@ -1539,14 +1536,8 @@ KeyBlock *key_get_keyblock(Key *key, int index)
/* get the appropriate KeyBlock given a name to search for */
KeyBlock *key_get_named_keyblock(Key *key, const char name[])
{
- KeyBlock *kb;
-
- if (key && name) {
- for (kb= key->block.first; kb; kb= kb->next) {
- if (strcmp(name, kb->name)==0)
- return kb;
- }
- }
+ if (key && name)
+ return BLI_findstring(&key->block, name, offsetof(KeyBlock, name));
return NULL;
}
@@ -1850,9 +1841,12 @@ void vertcos_to_key(Object *ob, KeyBlock *kb, float (*vertCos)[3])
tot= count_curveverts(&cu->nurb);
}
- fp= kb->data= MEM_callocN(tot*elemsize, "key_to_vertcos vertCos");
+ if (tot == 0) {
+ kb->data= NULL;
+ return;
+ }
- if (tot == 0) return;
+ fp= kb->data= MEM_callocN(tot*elemsize, "key_to_vertcos vertCos");
/* Copy coords to keyblock */
diff --git a/source/blender/blenkernel/intern/lattice.c b/source/blender/blenkernel/intern/lattice.c
index 3dea1df2353..1390f0dbd56 100644
--- a/source/blender/blenkernel/intern/lattice.c
+++ b/source/blender/blenkernel/intern/lattice.c
@@ -175,7 +175,7 @@ void resizelattice(Lattice *lt, int uNew, int vNew, int wNew, Object *ltOb)
bp= lt->def;
for (i=0; i<lt->pntsu*lt->pntsv*lt->pntsw; i++,bp++) {
- VECCOPY(bp->vec, vertexCos[i]);
+ copy_v3_v3(bp->vec, vertexCos[i]);
}
MEM_freeN(vertexCos);
@@ -225,8 +225,12 @@ void free_lattice(Lattice *lt)
if(lt->def) MEM_freeN(lt->def);
if(lt->dvert) free_dverts(lt->dvert, lt->pntsu*lt->pntsv*lt->pntsw);
if(lt->editlatt) {
- if(lt->editlatt->def) MEM_freeN(lt->editlatt->def);
- if(lt->editlatt->dvert) free_dverts(lt->editlatt->dvert, lt->pntsu*lt->pntsv*lt->pntsw);
+ Lattice *editlt= lt->editlatt->latt;
+
+ if(editlt->def) MEM_freeN(editlt->def);
+ if(editlt->dvert) free_dverts(editlt->dvert, lt->pntsu*lt->pntsv*lt->pntsw);
+
+ MEM_freeN(editlt);
MEM_freeN(lt->editlatt);
}
}
@@ -295,7 +299,7 @@ void init_latt_deform(Object *oblatt, Object *ob)
float fu, fv, fw;
int u, v, w;
- if(lt->editlatt) lt= lt->editlatt;
+ if(lt->editlatt) lt= lt->editlatt->latt;
bp = lt->def;
fp= lt->latticedata= MEM_mallocN(sizeof(float)*3*lt->pntsu*lt->pntsv*lt->pntsw, "latticedata");
@@ -350,7 +354,7 @@ void calc_latt_deform(Object *ob, float *co, float weight)
MDeformVert *dvert= lattice_get_deform_verts(ob);
- if(lt->editlatt) lt= lt->editlatt;
+ if(lt->editlatt) lt= lt->editlatt->latt;
if(lt->latticedata==NULL) return;
if(lt->vgroup[0] && dvert) {
@@ -446,7 +450,7 @@ void end_latt_deform(Object *ob)
{
Lattice *lt= ob->data;
- if(lt->editlatt) lt= lt->editlatt;
+ if(lt->editlatt) lt= lt->editlatt->latt;
if(lt->latticedata)
MEM_freeN(lt->latticedata);
@@ -474,7 +478,9 @@ static void init_curve_deform(Object *par, Object *ob, CurveDeform *cd, int dloc
invert_m4_m4(par->imat, par->obmat);
mul_v3_m4v3(cd->dloc, par->imat, ob->obmat[3]);
}
- else cd->dloc[0]=cd->dloc[1]=cd->dloc[2]= 0.0f;
+ else {
+ cd->dloc[0]=cd->dloc[1]=cd->dloc[2]= 0.0f;
+ }
cd->no_rot_axis= 0;
}
@@ -507,15 +513,15 @@ static int where_on_path_deform(Object *ob, float ctime, float *vec, float *dir,
if(ctime < 0.0) {
sub_v3_v3v3(dvec, path->data[1].vec, path->data[0].vec);
mul_v3_fl(dvec, ctime*(float)path->len);
- VECADD(vec, vec, dvec);
- if(quat) QUATCOPY(quat, path->data[0].quat);
+ add_v3_v3(vec, dvec);
+ if(quat) copy_qt_qt(quat, path->data[0].quat);
if(radius) *radius= path->data[0].radius;
}
else if(ctime > 1.0) {
sub_v3_v3v3(dvec, path->data[path->len-1].vec, path->data[path->len-2].vec);
mul_v3_fl(dvec, (ctime-1.0)*(float)path->len);
- VECADD(vec, vec, dvec);
- if(quat) QUATCOPY(quat, path->data[path->len-1].quat);
+ add_v3_v3(vec, dvec);
+ if(quat) copy_qt_qt(quat, path->data[path->len-1].quat);
if(radius) *radius= path->data[path->len-1].radius;
/* weight - not used but could be added */
}
@@ -608,7 +614,7 @@ static int calc_curve_deform(Scene *scene, Object *par, float *co, short axis, C
/* this is not exactly the same as 2.4x, since the axis is having rotation removed rather then
* changing the axis before calculating the tilt but serves much the same purpose */
float dir_flat[3]={0,0,0}, q[4];
- VECCOPY(dir_flat, dir);
+ copy_v3_v3(dir_flat, dir);
dir_flat[cd->no_rot_axis-1]= 0.0f;
normalize_v3(dir);
@@ -686,11 +692,11 @@ static int calc_curve_deform(Scene *scene, Object *par, float *co, short axis, C
mul_qt_v3(quat, cent);
/* translation */
- VECADD(co, cent, loc);
+ add_v3_v3v3(co, cent, loc);
if(quatp)
- QUATCOPY(quatp, quat);
-
+ copy_qt_qt(quatp, quat);
+
return 1;
}
return 0;
@@ -711,7 +717,18 @@ void curve_deform_verts(Scene *scene, Object *cuOb, Object *target, DerivedMesh
cu->flag |= (CU_PATH|CU_FOLLOW); // needed for path & bevlist
init_curve_deform(cuOb, target, &cd, (cu->flag & CU_STRETCH)==0);
-
+
+ /* dummy bounds, keep if CU_DEFORM_BOUNDS_OFF is set */
+ if(defaxis < 3) {
+ cd.dmin[0]= cd.dmin[1]= cd.dmin[2]= 0.0f;
+ cd.dmax[0]= cd.dmax[1]= cd.dmax[2]= 1.0f;
+ }
+ else {
+ /* negative, these bounds give a good rest position */
+ cd.dmin[0]= cd.dmin[1]= cd.dmin[2]= -1.0f;
+ cd.dmax[0]= cd.dmax[1]= cd.dmax[2]= 0.0f;
+ }
+
/* check whether to use vertex groups (only possible if target is a Mesh)
* we want either a Mesh with no derived data, or derived data with
* deformverts
@@ -726,62 +743,84 @@ void curve_deform_verts(Scene *scene, Object *cuOb, Object *target, DerivedMesh
use_vgroups = 0;
if(vgroup && vgroup[0] && use_vgroups) {
- bDeformGroup *curdef;
Mesh *me= target->data;
- int index;
-
- /* find the group (weak loop-in-loop) */
- for(index = 0, curdef = target->defbase.first; curdef;
- curdef = curdef->next, index++)
- if (!strcmp(curdef->name, vgroup))
- break;
+ int index= defgroup_name_index(target, vgroup);
- if(curdef && (me->dvert || dm)) {
+ if(index != -1 && (me->dvert || dm)) {
MDeformVert *dvert = me->dvert;
float vec[3];
- int j;
-
- INIT_MINMAX(cd.dmin, cd.dmax);
-
- for(a = 0; a < numVerts; a++, dvert++) {
- if(dm) dvert = dm->getVertData(dm, a, CD_MDEFORMVERT);
+ float weight;
+
- for(j = 0; j < dvert->totweight; j++) {
- if(dvert->dw[j].def_nr == index) {
+ if(cu->flag & CU_DEFORM_BOUNDS_OFF) {
+ /* dummy bounds */
+ cd.dmin[0]= cd.dmin[1]= cd.dmin[2]= 0.0f;
+ cd.dmax[0]= cd.dmax[1]= cd.dmax[2]= 1.0f;
+
+ dvert = me->dvert;
+ for(a = 0; a < numVerts; a++, dvert++) {
+ if(dm) dvert = dm->getVertData(dm, a, CD_MDEFORMVERT);
+ weight= defvert_find_weight(dvert, index);
+
+ if(weight > 0.0f) {
mul_m4_v3(cd.curvespace, vertexCos[a]);
- DO_MINMAX(vertexCos[a], cd.dmin, cd.dmax);
- break;
+ copy_v3_v3(vec, vertexCos[a]);
+ calc_curve_deform(scene, cuOb, vec, defaxis, &cd, NULL);
+ interp_v3_v3v3(vertexCos[a], vertexCos[a], vec, weight);
+ mul_m4_v3(cd.objectspace, vertexCos[a]);
}
}
}
-
- dvert = me->dvert;
- for(a = 0; a < numVerts; a++, dvert++) {
- if(dm) dvert = dm->getVertData(dm, a, CD_MDEFORMVERT);
-
- for(j = 0; j < dvert->totweight; j++) {
- if(dvert->dw[j].def_nr == index) {
- VECCOPY(vec, vertexCos[a]);
+ else {
+ /* set mesh min/max bounds */
+ INIT_MINMAX(cd.dmin, cd.dmax);
+
+ for(a = 0; a < numVerts; a++, dvert++) {
+ if(dm) dvert = dm->getVertData(dm, a, CD_MDEFORMVERT);
+
+ if(defvert_find_weight(dvert, index) > 0.0f) {
+ mul_m4_v3(cd.curvespace, vertexCos[a]);
+ DO_MINMAX(vertexCos[a], cd.dmin, cd.dmax);
+ }
+ }
+
+ dvert = me->dvert;
+ for(a = 0; a < numVerts; a++, dvert++) {
+ if(dm) dvert = dm->getVertData(dm, a, CD_MDEFORMVERT);
+
+ weight= defvert_find_weight(dvert, index);
+
+ if(weight > 0.0f) {
+ copy_v3_v3(vec, vertexCos[a]);
calc_curve_deform(scene, cuOb, vec, defaxis, &cd, NULL);
- interp_v3_v3v3(vertexCos[a], vertexCos[a], vec,
- dvert->dw[j].weight);
+ interp_v3_v3v3(vertexCos[a], vertexCos[a], vec, weight);
mul_m4_v3(cd.objectspace, vertexCos[a]);
- break;
}
}
}
}
- } else {
- INIT_MINMAX(cd.dmin, cd.dmax);
-
- for(a = 0; a < numVerts; a++) {
- mul_m4_v3(cd.curvespace, vertexCos[a]);
- DO_MINMAX(vertexCos[a], cd.dmin, cd.dmax);
+ }
+ else {
+ if(cu->flag & CU_DEFORM_BOUNDS_OFF) {
+ for(a = 0; a < numVerts; a++) {
+ mul_m4_v3(cd.curvespace, vertexCos[a]);
+ calc_curve_deform(scene, cuOb, vertexCos[a], defaxis, &cd, NULL);
+ mul_m4_v3(cd.objectspace, vertexCos[a]);
+ }
}
-
- for(a = 0; a < numVerts; a++) {
- calc_curve_deform(scene, cuOb, vertexCos[a], defaxis, &cd, NULL);
- mul_m4_v3(cd.objectspace, vertexCos[a]);
+ else {
+ /* set mesh min max bounds */
+ INIT_MINMAX(cd.dmin, cd.dmax);
+
+ for(a = 0; a < numVerts; a++) {
+ mul_m4_v3(cd.curvespace, vertexCos[a]);
+ DO_MINMAX(vertexCos[a], cd.dmin, cd.dmax);
+ }
+
+ for(a = 0; a < numVerts; a++) {
+ calc_curve_deform(scene, cuOb, vertexCos[a], defaxis, &cd, NULL);
+ mul_m4_v3(cd.objectspace, vertexCos[a]);
+ }
}
}
cu->flag = flag;
@@ -803,8 +842,8 @@ void curve_deform_vector(Scene *scene, Object *cuOb, Object *target, float *orco
init_curve_deform(cuOb, target, &cd, 0); /* 0 no dloc */
cd.no_rot_axis= no_rot_axis; /* option to only rotate for XY, for example */
- VECCOPY(cd.dmin, orco);
- VECCOPY(cd.dmax, orco);
+ copy_v3_v3(cd.dmin, orco);
+ copy_v3_v3(cd.dmax, orco);
mul_m4_v3(cd.curvespace, vec);
@@ -967,13 +1006,13 @@ float (*lattice_getVertexCos(struct Object *ob, int *numVerts_r))[3]
int i, numVerts;
float (*vertexCos)[3];
- if(lt->editlatt) lt= lt->editlatt;
+ if(lt->editlatt) lt= lt->editlatt->latt;
numVerts = *numVerts_r = lt->pntsu*lt->pntsv*lt->pntsw;
vertexCos = MEM_mallocN(sizeof(*vertexCos)*numVerts,"lt_vcos");
for (i=0; i<numVerts; i++) {
- VECCOPY(vertexCos[i], lt->def[i].vec);
+ copy_v3_v3(vertexCos[i], lt->def[i].vec);
}
return vertexCos;
@@ -985,7 +1024,7 @@ void lattice_applyVertexCos(struct Object *ob, float (*vertexCos)[3])
int i, numVerts = lt->pntsu*lt->pntsv*lt->pntsw;
for (i=0; i<numVerts; i++) {
- VECCOPY(lt->def[i].vec, vertexCos[i]);
+ copy_v3_v3(lt->def[i].vec, vertexCos[i]);
}
}
@@ -1031,7 +1070,7 @@ struct MDeformVert* lattice_get_deform_verts(struct Object *oblatt)
if(oblatt->type == OB_LATTICE)
{
Lattice *lt = (Lattice*)oblatt->data;
- if(lt->editlatt) lt= lt->editlatt;
+ if(lt->editlatt) lt= lt->editlatt->latt;
return lt->dvert;
}
diff --git a/source/blender/blenkernel/intern/library.c b/source/blender/blenkernel/intern/library.c
index e935573cf67..834e7de5811 100644
--- a/source/blender/blenkernel/intern/library.c
+++ b/source/blender/blenkernel/intern/library.c
@@ -1094,8 +1094,14 @@ static int check_for_dupid(ListBase *lb, ID *id, char *name)
left_len= splitIDname(name, left, &nr);
/* if new name will be too long, truncate it */
- if(nr>999 && strlen(left)>16) left[16]= 0;
- else if(strlen(left)>17) left[17]= 0;
+ if(nr > 999 && left_len > 16) {
+ left[16]= 0;
+ left_len= 16;
+ }
+ else if(left_len > 17) {
+ left[17]= 0;
+ left_len= 17;
+ }
for(idtest= lb->first; idtest; idtest= idtest->next) {
if( (id != idtest) &&
@@ -1124,8 +1130,8 @@ static int check_for_dupid(ListBase *lb, ID *id, char *name)
* rather than just chopping and adding numbers,
* shave off the end chars until we have a unique name.
* Check the null terminators match as well so we dont get Cube.000 -> Cube.00 */
- if (nr==0 && name[left_len]== left[left_len]) {
- int len = strlen(name)-1;
+ if (nr==0 && name[left_len]== '\0') {
+ int len = left_len-1;
idtest= is_dupid(lb, id, name);
while (idtest && len> 1) {
@@ -1136,10 +1142,11 @@ static int check_for_dupid(ListBase *lb, ID *id, char *name)
/* otherwise just continue and use a number suffix */
}
- if(nr > 999 && strlen(left) > 16) {
+ if(nr > 999 && left_len > 16) {
/* this would overflow name buffer */
left[16] = 0;
- strcpy( name, left );
+ /* left_len = 16; */ /* for now this isnt used again */
+ memcpy(name, left, sizeof(char) * 17);
continue;
}
/* this format specifier is from hell... */
@@ -1178,8 +1185,15 @@ int new_id(ListBase *lb, ID *id, const char *tname)
* easier to assign each time then to check if its needed */
name[sizeof(name)-1]= 0;
- if(name[0] == '\0')
+ if(name[0] == '\0') {
+ /* disallow empty names */
strcpy(name, ID_FALLBACK_NAME);
+ }
+ else {
+ /* disallow non utf8 chars,
+ * the interface checks for this but new ID's based on file names dont */
+ BLI_utf8_invalid_strip(name, strlen(name));
+ }
result = check_for_dupid(lb, id, name);
strcpy(id->name+2, name);
@@ -1370,8 +1384,9 @@ void text_idbutton(struct ID *id, char *text)
text[4]= 0;
}
}
- else
- strcpy(text, "");
+ else {
+ text[0]= '\0';
+ }
}
void rename_id(ID *id, char *name)
diff --git a/source/blender/blenkernel/intern/material.c b/source/blender/blenkernel/intern/material.c
index 6b79a7b4d62..7e52f746ebc 100644
--- a/source/blender/blenkernel/intern/material.c
+++ b/source/blender/blenkernel/intern/material.c
@@ -56,10 +56,6 @@
#include "BKE_node.h"
#include "BKE_utildefines.h"
-#ifndef DISABLE_PYTHON
-#include "BPY_extern.h"
-#endif
-
#include "GPU_material.h"
/* used in UI and render */
@@ -236,6 +232,7 @@ Material *copy_material(Material *ma)
void make_local_material(Material *ma)
{
+ Main *bmain= G.main;
Object *ob;
Mesh *me;
Curve *cu;
@@ -261,7 +258,7 @@ void make_local_material(Material *ma)
}
/* test objects */
- ob= G.main->object.first;
+ ob= bmain->object.first;
while(ob) {
if(ob->mat) {
for(a=0; a<ob->totcol; a++) {
@@ -274,7 +271,7 @@ void make_local_material(Material *ma)
ob= ob->id.next;
}
/* test meshes */
- me= G.main->mesh.first;
+ me= bmain->mesh.first;
while(me) {
if(me->mat) {
for(a=0; a<me->totcol; a++) {
@@ -287,7 +284,7 @@ void make_local_material(Material *ma)
me= me->id.next;
}
/* test curves */
- cu= G.main->curve.first;
+ cu= bmain->curve.first;
while(cu) {
if(cu->mat) {
for(a=0; a<cu->totcol; a++) {
@@ -300,7 +297,7 @@ void make_local_material(Material *ma)
cu= cu->id.next;
}
/* test mballs */
- mb= G.main->mball.first;
+ mb= bmain->mball.first;
while(mb) {
if(mb->mat) {
for(a=0; a<mb->totcol; a++) {
@@ -329,7 +326,7 @@ void make_local_material(Material *ma)
man->id.us= 0;
/* do objects */
- ob= G.main->object.first;
+ ob= bmain->object.first;
while(ob) {
if(ob->mat) {
for(a=0; a<ob->totcol; a++) {
@@ -345,7 +342,7 @@ void make_local_material(Material *ma)
ob= ob->id.next;
}
/* do meshes */
- me= G.main->mesh.first;
+ me= bmain->mesh.first;
while(me) {
if(me->mat) {
for(a=0; a<me->totcol; a++) {
@@ -361,7 +358,7 @@ void make_local_material(Material *ma)
me= me->id.next;
}
/* do curves */
- cu= G.main->curve.first;
+ cu= bmain->curve.first;
while(cu) {
if(cu->mat) {
for(a=0; a<cu->totcol; a++) {
@@ -377,7 +374,7 @@ void make_local_material(Material *ma)
cu= cu->id.next;
}
/* do mballs */
- mb= G.main->mball.first;
+ mb= bmain->mball.first;
while(mb) {
if(mb->mat) {
for(a=0; a<mb->totcol; a++) {
@@ -437,6 +434,90 @@ short *give_totcolp(Object *ob)
return NULL;
}
+/* same as above but for ID's */
+Material ***give_matarar_id(ID *id)
+{
+ switch(GS(id->name)) {
+ case ID_ME:
+ return &(((Mesh *)id)->mat);
+ break;
+ case ID_CU:
+ return &(((Curve *)id)->mat);
+ break;
+ case ID_MB:
+ return &(((Curve *)id)->mat);
+ break;
+ }
+ return NULL;
+}
+
+short *give_totcolp_id(ID *id)
+{
+ switch(GS(id->name)) {
+ case ID_ME:
+ return &(((Mesh *)id)->totcol);
+ break;
+ case ID_CU:
+ return &(((Curve *)id)->totcol);
+ break;
+ case ID_MB:
+ return &(((Curve *)id)->totcol);
+ break;
+ }
+ return NULL;
+}
+
+void material_append_id(ID *id, Material *ma)
+{
+ Material ***matar;
+ if((matar= give_matarar_id(id))) {
+ short *totcol= give_totcolp_id(id);
+ Material **mat= MEM_callocN(sizeof(void *) * ((*totcol) + 1), "newmatar");
+ if(*totcol) memcpy(mat, *matar, sizeof(void *) * (*totcol));
+ if(*matar) MEM_freeN(*matar);
+
+ *matar= mat;
+ (*matar)[(*totcol)++]= ma;
+
+ id_us_plus((ID *)ma);
+ test_object_materials(id);
+ }
+}
+
+Material *material_pop_id(ID *id, int index)
+{
+ Material *ret= NULL;
+ Material ***matar;
+ if((matar= give_matarar_id(id))) {
+ short *totcol= give_totcolp_id(id);
+ if(index >= 0 && index < (*totcol)) {
+ ret= (*matar)[index];
+ if(*totcol <= 1) {
+ *totcol= 0;
+ MEM_freeN(*matar);
+ *matar= NULL;
+ }
+ else {
+ Material **mat;
+
+ if(index + 1 != (*totcol))
+ memmove((*matar), (*matar) + 1, (*totcol) - (index + 1));
+
+ (*totcol)--;
+
+ mat= MEM_callocN(sizeof(void *) * (*totcol), "newmatar");
+ memcpy(mat, *matar, sizeof(void *) * (*totcol));
+ MEM_freeN(*matar);
+
+ *matar= mat;
+ test_object_materials(id);
+ }
+ }
+ }
+
+ return ret;
+}
+
Material *give_current_material(Object *ob, int act)
{
Material ***matarar, *ma;
@@ -456,7 +537,7 @@ Material *give_current_material(Object *ob, int act)
}
else { /* in data */
- /* check for inconsistancy */
+ /* check for inconsistency */
if(*totcolp < ob->totcol)
ob->totcol= *totcolp;
if(act>ob->totcol) act= ob->totcol;
diff --git a/source/blender/blenkernel/intern/mball.c b/source/blender/blenkernel/intern/mball.c
index e35d8bce886..e6f38e04d76 100644
--- a/source/blender/blenkernel/intern/mball.c
+++ b/source/blender/blenkernel/intern/mball.c
@@ -176,6 +176,55 @@ void make_local_mball(MetaBall *mb)
}
}
}
+
+/* most simple meta-element adding function
+ * dont do context menipulation here (rna uses) */
+MetaElem *add_metaball_element(MetaBall *mb, const int type)
+{
+ MetaElem *ml= MEM_callocN(sizeof(MetaElem), "metaelem");
+
+ unit_qt(ml->quat);
+
+ ml->rad= 2.0;
+ ml->s= 2.0;
+ ml->flag= MB_SCALE_RAD;
+
+ switch(type) {
+ case MB_BALL:
+ ml->type = MB_BALL;
+ ml->expx= ml->expy= ml->expz= 1.0;
+
+ break;
+ case MB_TUBE:
+ ml->type = MB_TUBE;
+ ml->expx= ml->expy= ml->expz= 1.0;
+
+ break;
+ case MB_PLANE:
+ ml->type = MB_PLANE;
+ ml->expx= ml->expy= ml->expz= 1.0;
+
+ break;
+ case MB_ELIPSOID:
+ ml->type = MB_ELIPSOID;
+ ml->expx= 1.2f;
+ ml->expy= 0.8f;
+ ml->expz= 1.0;
+
+ break;
+ case MB_CUBE:
+ ml->type = MB_CUBE;
+ ml->expx= ml->expy= ml->expz= 1.0;
+
+ break;
+ default:
+ break;
+ }
+
+ BLI_addtail(&mb->elems, ml);
+
+ return ml;
+}
/** Compute bounding box of all MetaElems/MetaBalls.
*
* Bounding box is computed from polygonized surface. Object *ob is
diff --git a/source/blender/blenkernel/intern/mesh.c b/source/blender/blenkernel/intern/mesh.c
index 7129ecb1d55..6f1cdefbcad 100644
--- a/source/blender/blenkernel/intern/mesh.c
+++ b/source/blender/blenkernel/intern/mesh.c
@@ -51,6 +51,8 @@
#include "BKE_displist.h"
#include "BKE_library.h"
#include "BKE_material.h"
+#include "BKE_modifier.h"
+#include "BKE_multires.h"
#include "BKE_key.h"
/* these 2 are only used by conversion functions */
#include "BKE_curve.h"
@@ -265,6 +267,7 @@ void make_local_tface(Mesh *me)
void make_local_mesh(Mesh *me)
{
+ Main *bmain= G.main;
Object *ob;
Mesh *men;
int local=0, lib=0;
@@ -285,7 +288,7 @@ void make_local_mesh(Mesh *me)
return;
}
- ob= G.main->object.first;
+ ob= bmain->object.first;
while(ob) {
if( me==get_mesh(ob) ) {
if(ob->id.lib) lib= 1;
@@ -306,7 +309,7 @@ void make_local_mesh(Mesh *me)
men= copy_mesh(me);
men->id.us= 0;
- ob= G.main->object.first;
+ ob= bmain->object.first;
while(ob) {
if( me==get_mesh(ob) ) {
if(ob->id.lib==0) {
@@ -437,7 +440,7 @@ void transform_mesh_orco_verts(Mesh *me, float (*orco)[3], int totvert, int inve
int test_index_face(MFace *mface, CustomData *fdata, int mfindex, int nr)
{
/* first test if the face is legal */
- if(mface->v3 && mface->v3==mface->v4) {
+ if((mface->v3 || nr==4) && mface->v3==mface->v4) {
mface->v4= 0;
nr--;
}
@@ -491,6 +494,8 @@ Mesh *get_mesh(Object *ob)
void set_mesh(Object *ob, Mesh *me)
{
Mesh *old=0;
+
+ multires_force_update(ob);
if(ob==0) return;
@@ -503,6 +508,8 @@ void set_mesh(Object *ob, Mesh *me)
}
test_object_materials((ID *)me);
+
+ test_object_modifiers(ob);
}
/* ************** make edges in a Mesh, for outside of editmode */
@@ -847,6 +854,7 @@ int nurbs_to_mdata_customdb(Object *ob, ListBase *dispbase, MVert **allvert, int
mface->v2= startvert+index[2];
mface->v3= startvert+index[1];
mface->v4= 0;
+ mface->mat_nr= (unsigned char)dl->col;
test_index_face(mface, NULL, 0, 3);
if(smooth) mface->flag |= ME_SMOOTH;
@@ -925,6 +933,7 @@ int nurbs_to_mdata_customdb(Object *ob, ListBase *dispbase, MVert **allvert, int
/* this may fail replacing ob->data, be sure to check ob->type */
void nurbs_to_mesh(Object *ob)
{
+ Main *bmain= G.main;
Object *ob1;
DerivedMesh *dm= ob->derivedFinal;
Mesh *me;
@@ -967,13 +976,13 @@ void nurbs_to_mesh(Object *ob)
cu->totcol= 0;
if(ob->data) {
- free_libblock(&G.main->curve, ob->data);
+ free_libblock(&bmain->curve, ob->data);
}
ob->data= me;
ob->type= OB_MESH;
/* other users */
- ob1= G.main->object.first;
+ ob1= bmain->object.first;
while(ob1) {
if(ob1->data==cu) {
ob1->type= OB_MESH;
@@ -1234,14 +1243,10 @@ void mesh_calc_normals(MVert *mverts, int numVerts, MFace *mfaces, int numFaces,
MVert *mv= &mverts[i];
float *no= tnorms[i];
- if (normalize_v3(no)==0.0) {
- VECCOPY(no, mv->co);
- normalize_v3(no);
- }
+ if (normalize_v3(no)==0.0)
+ normalize_v3_v3(no, mv->co);
- mv->no[0]= (short)(no[0]*32767.0);
- mv->no[1]= (short)(no[1]*32767.0);
- mv->no[2]= (short)(no[2]*32767.0);
+ normal_float_to_short_v3(mv->no, no);
}
MEM_freeN(tnorms);
diff --git a/source/blender/blenkernel/intern/modifier.c b/source/blender/blenkernel/intern/modifier.c
index 858e9d6c6d9..43d26f26d1f 100644
--- a/source/blender/blenkernel/intern/modifier.c
+++ b/source/blender/blenkernel/intern/modifier.c
@@ -34,17 +34,22 @@
*
*/
-#include "stddef.h"
-#include "string.h"
-#include "stdarg.h"
-#include "math.h"
-#include "float.h"
+#include <stddef.h>
+#include <string.h>
+#include <stdarg.h>
+#include <math.h>
+#include <float.h>
#include "DNA_armature_types.h"
+#include "DNA_object_types.h"
+#include "DNA_meshdata_types.h"
+
+#include "MEM_guardedalloc.h"
#include "BKE_bmesh.h"
#include "BKE_cloth.h"
#include "BKE_key.h"
+#include "BKE_multires.h"
#include "MOD_modifiertypes.h"
@@ -193,7 +198,7 @@ void modifier_copyData(ModifierData *md, ModifierData *target)
mti->copyData(md, target);
}
-int modifier_couldBeCage(Scene *scene, ModifierData *md)
+int modifier_couldBeCage(struct Scene *scene, ModifierData *md)
{
ModifierTypeInfo *mti = modifierType_getInfo(md->type);
@@ -233,7 +238,7 @@ void modifier_setError(ModifierData *md, char *format, ...)
* also used in transform_conversion.c, to detect CrazySpace [tm] (2nd arg
* then is NULL)
*/
-int modifiers_getCageIndex(Scene *scene, Object *ob, int *lastPossibleCageIndex_r, int virtual_)
+int modifiers_getCageIndex(struct Scene *scene, Object *ob, int *lastPossibleCageIndex_r, int virtual_)
{
ModifierData *md = (virtual_)? modifiers_getVirtualModifierList(ob): ob->modifiers.first;
int i, cageIndex = -1;
@@ -283,7 +288,7 @@ int modifiers_isParticleEnabled(Object *ob)
return (md && md->mode & (eModifierMode_Realtime | eModifierMode_Render));
}
-int modifier_isEnabled(Scene *scene, ModifierData *md, int required_mode)
+int modifier_isEnabled(struct Scene *scene, ModifierData *md, int required_mode)
{
ModifierTypeInfo *mti = modifierType_getInfo(md->type);
@@ -298,7 +303,7 @@ int modifier_isEnabled(Scene *scene, ModifierData *md, int required_mode)
return 1;
}
-LinkNode *modifiers_calcDataMasks(Scene *scene, Object *ob, ModifierData *md, CustomDataMask dataMask, int required_mode)
+LinkNode *modifiers_calcDataMasks(struct Scene *scene, Object *ob, ModifierData *md, CustomDataMask dataMask, int required_mode)
{
LinkNode *dataMasks = NULL;
LinkNode *curr, *prev;
@@ -487,7 +492,7 @@ int modifier_isCorrectableDeformed(ModifierData *md)
return 0;
}
-int modifiers_isCorrectableDeformed(Scene *scene, Object *ob)
+int modifiers_isCorrectableDeformed(struct Scene *scene, Object *ob)
{
ModifierData *md = modifiers_getVirtualModifierList(ob);
@@ -522,5 +527,21 @@ void modifier_freeTemporaryData(ModifierData *md)
}
}
+/* ensure modifier correctness when changing ob->data */
+void test_object_modifiers(Object *ob)
+{
+ ModifierData *md;
+
+ /* just multires checked for now, since only multires
+ modifies mesh data */
+ if(ob->type != OB_MESH) return;
+ for(md = ob->modifiers.first; md; md = md->next) {
+ if(md->type == eModifierType_Multires) {
+ MultiresModifierData *mmd = (MultiresModifierData*)md;
+
+ multiresModifier_set_levels_from_disps(mmd, ob);
+ }
+ }
+}
diff --git a/source/blender/blenkernel/intern/multires.c b/source/blender/blenkernel/intern/multires.c
index 56d517f1e13..57f568e6094 100644
--- a/source/blender/blenkernel/intern/multires.c
+++ b/source/blender/blenkernel/intern/multires.c
@@ -275,6 +275,40 @@ int multiresModifier_reshapeFromDeformMod(Scene *scene, MultiresModifierData *mm
return result;
}
+/* reset the multires levels to match the number of mdisps */
+void multiresModifier_set_levels_from_disps(MultiresModifierData *mmd, Object *ob)
+{
+ Mesh *me = ob->data;
+ MDisps *mdisp;
+ int i;
+
+ mdisp = CustomData_get_layer(&me->fdata, CD_MDISPS);
+
+ if(mdisp) {
+ for(i = 0; i < me->totface; ++i, ++mdisp) {
+ int S = me->mface[i].v4 ? 4 : 3;
+
+ if(mdisp->totdisp == 0) continue;
+
+ while(1) {
+ int side = (1 << (mmd->totlvl-1)) + 1;
+ int lvl_totdisp = side*side*S;
+ if(mdisp->totdisp == lvl_totdisp)
+ break;
+ else if(mdisp->totdisp < lvl_totdisp)
+ --mmd->totlvl;
+ else
+ ++mmd->totlvl;
+
+ }
+ }
+
+ mmd->lvl = MIN2(mmd->sculptlvl, mmd->totlvl);
+ mmd->sculptlvl = MIN2(mmd->sculptlvl, mmd->totlvl);
+ mmd->renderlvl = MIN2(mmd->renderlvl, mmd->totlvl);
+ }
+}
+
static void multires_set_tot_mdisps(Mesh *me, int lvl)
{
MDisps *mdisps= CustomData_get_layer(&me->fdata, CD_MDISPS);
diff --git a/source/blender/blenkernel/intern/nla.c b/source/blender/blenkernel/intern/nla.c
index 8d2ad49e7bf..b053d615756 100644
--- a/source/blender/blenkernel/intern/nla.c
+++ b/source/blender/blenkernel/intern/nla.c
@@ -1265,13 +1265,13 @@ void BKE_nlastrip_validate_name (AnimData *adt, NlaStrip *strip)
char *dot;
/* Strip off the suffix */
- dot = strchr(strip->name, '.');
+ dot = strrchr(strip->name, '.');
if (dot) *dot=0;
/* Try different possibilities */
for (number = 1; number <= 999; number++) {
/* assemble alternative name */
- BLI_snprintf(tempname, 128, "%s%c%03d", strip->name, ".", number);
+ BLI_snprintf(tempname, 128, "%s.%03d", strip->name, number);
/* if hash doesn't have this, set it */
if (BLI_ghash_haskey(gh, tempname) == 0) {
diff --git a/source/blender/blenkernel/intern/node.c b/source/blender/blenkernel/intern/node.c
index 36c23216585..135ddbab2b7 100644
--- a/source/blender/blenkernel/intern/node.c
+++ b/source/blender/blenkernel/intern/node.c
@@ -45,7 +45,6 @@
#include "PIL_time.h"
-#include "MEM_guardedalloc.h"
#include "CMP_node.h"
#include "intern/CMP_util.h" /* stupid include path... */
@@ -735,13 +734,7 @@ void nodeGroupSocketUseFlags(bNodeTree *ngroup)
/* finds a node based on its name */
bNode *nodeFindNodebyName(bNodeTree *ntree, const char *name)
{
- bNode *node=NULL;
-
- for(node= ntree->nodes.first; node; node= node->next) {
- if (strcmp(name, node->name) == 0)
- break;
- }
- return node;
+ return BLI_findstring(&ntree->nodes, name, offsetof(bNode, name));
}
/* finds a node based on given socket */
@@ -1794,18 +1787,25 @@ void NodeTagChanged(bNodeTree *ntree, bNode *node)
}
}
-void NodeTagIDChanged(bNodeTree *ntree, ID *id)
+int NodeTagIDChanged(bNodeTree *ntree, ID *id)
{
+ int change = FALSE;
+
if(id==NULL)
- return;
+ return change;
if(ntree->type==NTREE_COMPOSIT) {
bNode *node;
- for(node= ntree->nodes.first; node; node= node->next)
- if(node->id==id)
+ for(node= ntree->nodes.first; node; node= node->next) {
+ if(node->id==id) {
+ change= TRUE;
NodeTagChanged(ntree, node);
+ }
+ }
}
+
+ return change;
}
@@ -1855,9 +1855,8 @@ static void node_group_execute(bNodeStack *stack, void *data, bNode *gnode, bNod
/* for groups, only execute outputs for edited group */
if(node->typeinfo->nclass==NODE_CLASS_OUTPUT) {
- if(gnode->flag & NODE_GROUP_EDIT)
- if(node->flag & NODE_DO_OUTPUT)
- node->typeinfo->execfunc(data, node, nsin, nsout);
+ if(node->type==CMP_NODE_OUTPUT_FILE || (gnode->flag & NODE_GROUP_EDIT))
+ node->typeinfo->execfunc(data, node, nsin, nsout);
}
else
node->typeinfo->execfunc(data, node, nsin, nsout);
diff --git a/source/blender/blenkernel/intern/object.c b/source/blender/blenkernel/intern/object.c
index fd26f77335b..ff22531cd84 100644
--- a/source/blender/blenkernel/intern/object.c
+++ b/source/blender/blenkernel/intern/object.c
@@ -322,6 +322,7 @@ static void unlink_object__unlinkModifierLinks(void *userData, Object *ob, Objec
void unlink_object(Scene *scene, Object *ob)
{
+ Main *bmain= G.main;
Object *obt;
Material *mat;
World *wrld;
@@ -343,7 +344,7 @@ void unlink_object(Scene *scene, Object *ob)
/* check all objects: parents en bevels and fields, also from libraries */
// FIXME: need to check all animation blocks (drivers)
- obt= G.main->object.first;
+ obt= bmain->object.first;
while(obt) {
if(obt->proxy==ob)
obt->proxy= NULL;
@@ -517,7 +518,7 @@ void unlink_object(Scene *scene, Object *ob)
}
/* materials */
- mat= G.main->mat.first;
+ mat= bmain->mat.first;
while(mat) {
for(a=0; a<MAX_MTEX; a++) {
@@ -531,7 +532,7 @@ void unlink_object(Scene *scene, Object *ob)
}
/* textures */
- tex= G.main->tex.first;
+ tex= bmain->tex.first;
while(tex) {
if(tex->env) {
if(tex->env->object == ob) tex->env->object= NULL;
@@ -540,7 +541,7 @@ void unlink_object(Scene *scene, Object *ob)
}
/* worlds */
- wrld= G.main->world.first;
+ wrld= bmain->world.first;
while(wrld) {
if(wrld->id.lib==NULL) {
for(a=0; a<MAX_MTEX; a++) {
@@ -553,7 +554,7 @@ void unlink_object(Scene *scene, Object *ob)
}
/* scenes */
- sce= G.main->scene.first;
+ sce= bmain->scene.first;
while(sce) {
if(sce->id.lib==NULL) {
if(sce->camera==ob) sce->camera= NULL;
@@ -585,7 +586,7 @@ void unlink_object(Scene *scene, Object *ob)
#if 0 // XXX old animation system
/* ipos */
- ipo= G.main->ipo.first;
+ ipo= bmain->ipo.first;
while(ipo) {
if(ipo->id.lib==NULL) {
IpoCurve *icu;
@@ -599,7 +600,7 @@ void unlink_object(Scene *scene, Object *ob)
#endif // XXX old animation system
/* screens */
- sc= G.main->screen.first;
+ sc= bmain->screen.first;
while(sc) {
ScrArea *sa= sc->areabase.first;
while(sa) {
@@ -664,14 +665,14 @@ void unlink_object(Scene *scene, Object *ob)
}
/* groups */
- group= G.main->group.first;
+ group= bmain->group.first;
while(group) {
rem_from_group(group, ob, NULL, NULL);
group= group->id.next;
}
/* cameras */
- camera= G.main->camera.first;
+ camera= bmain->camera.first;
while(camera) {
if (camera->dof_ob==ob) {
camera->dof_ob = NULL;
@@ -725,6 +726,7 @@ Camera *copy_camera(Camera *cam)
void make_local_camera(Camera *cam)
{
+ Main *bmain= G.main;
Object *ob;
Camera *camn;
int local=0, lib=0;
@@ -742,7 +744,7 @@ void make_local_camera(Camera *cam)
return;
}
- ob= G.main->object.first;
+ ob= bmain->object.first;
while(ob) {
if(ob->data==cam) {
if(ob->id.lib) lib= 1;
@@ -760,7 +762,7 @@ void make_local_camera(Camera *cam)
camn= copy_camera(cam);
camn->id.us= 0;
- ob= G.main->object.first;
+ ob= bmain->object.first;
while(ob) {
if(ob->data==cam) {
@@ -873,6 +875,7 @@ Lamp *copy_lamp(Lamp *la)
void make_local_lamp(Lamp *la)
{
+ Main *bmain= G.main;
Object *ob;
Lamp *lan;
int local=0, lib=0;
@@ -890,7 +893,7 @@ void make_local_lamp(Lamp *la)
return;
}
- ob= G.main->object.first;
+ ob= bmain->object.first;
while(ob) {
if(ob->data==la) {
if(ob->id.lib) lib= 1;
@@ -908,7 +911,7 @@ void make_local_lamp(Lamp *la)
lan= copy_lamp(la);
lan->id.us= 0;
- ob= G.main->object.first;
+ ob= bmain->object.first;
while(ob) {
if(ob->data==la) {
@@ -1336,6 +1339,8 @@ Object *copy_object(Object *ob)
obn->gpulamp.first = obn->gpulamp.last = NULL;
obn->pc_ids.first = obn->pc_ids.last = NULL;
+
+ obn->mpath= NULL;
return obn;
}
@@ -1367,6 +1372,7 @@ void expand_local_object(Object *ob)
void make_local_object(Object *ob)
{
+ Main *bmain= G.main;
Object *obn;
Scene *sce;
Base *base;
@@ -1388,7 +1394,7 @@ void make_local_object(Object *ob)
}
else {
- sce= G.main->scene.first;
+ sce= bmain->scene.first;
while(sce) {
base= sce->base.first;
while(base) {
@@ -1411,7 +1417,7 @@ void make_local_object(Object *ob)
obn= copy_object(ob);
obn->id.us= 0;
- sce= G.main->scene.first;
+ sce= bmain->scene.first;
while(sce) {
if(sce->id.lib==0) {
base= sce->base.first;
@@ -1628,10 +1634,7 @@ float bsystem_time(struct Scene *scene, Object *ob, float cfra, float ofs)
void object_scale_to_mat3(Object *ob, float mat[][3])
{
float vec[3];
-
- vec[0]= ob->size[0]+ob->dsize[0];
- vec[1]= ob->size[1]+ob->dsize[1];
- vec[2]= ob->size[2]+ob->dsize[2];
+ add_v3_v3v3(vec, ob->size, ob->dsize);
size_to_mat3( mat,vec);
}
@@ -1688,11 +1691,29 @@ void object_mat3_to_rot(Object *ob, float mat[][3], int use_compat)
/* see pchan_apply_mat4() for the equivalent 'pchan' function */
void object_apply_mat4(Object *ob, float mat[][4])
{
- float mat3[3][3];
- VECCOPY(ob->loc, mat[3]);
- mat4_to_size(ob->size, mat);
+ float mat3[3][3], tmat[3][3], imat[3][3];
+
+ /* location */
+ copy_v3_v3(ob->loc, mat[3]);
+
+ /* rotation */
copy_m3_m4(mat3, mat);
object_mat3_to_rot(ob, mat3, 0);
+
+ /* scale */
+#if 0
+ /* works fine except for neg scales */
+ mat4_to_size(ob->size, mat);
+#else
+ /* this is more complicated but works for negative scales */
+ object_rot_to_mat3(ob, tmat);
+ invert_m3_m3(imat, tmat);
+ mul_m3_m3m3(tmat, imat, mat3);
+
+ ob->size[0]= tmat[0][0];
+ ob->size[1]= tmat[1][1];
+ ob->size[2]= tmat[2][2];
+#endif
}
void object_to_mat3(Object *ob, float mat[][3]) /* no parent */
@@ -1797,7 +1818,7 @@ static void ob_parcurve(Scene *scene, Object *ob, Object *par, float mat[][4])
copy_m4_m4(mat, rmat);
}
- VECCOPY(mat[3], vec);
+ copy_v3_v3(mat[3], vec);
}
}
@@ -1824,7 +1845,7 @@ static void ob_parbone(Object *ob, Object *par, float mat[][4])
copy_m4_m4(mat, pchan->pose_mat);
/* but for backwards compatibility, the child has to move to the tail */
- VECCOPY(vec, mat[1]);
+ copy_v3_v3(vec, mat[1]);
mul_v3_fl(vec, pchan->bone->length);
add_v3_v3(mat[3], vec);
}
@@ -1921,7 +1942,7 @@ static void give_parvert(Object *par, int nr, float *vec)
DispList *dl = find_displist(&par->disp, DL_VERTS);
float *co = dl?dl->verts:NULL;
- if(latt->editlatt) latt= latt->editlatt;
+ if(latt->editlatt) latt= latt->editlatt->latt;
a= latt->pntsu*latt->pntsv*latt->pntsw;
count= 0;
@@ -2505,7 +2526,7 @@ void object_handle_update(Scene *scene, Object *ob)
/* includes all keys and modifiers */
if(ob->type==OB_MESH) {
- EditMesh *em = BKE_mesh_get_editmesh(ob->data);
+ EditMesh *em = (ob == scene->obedit)? BKE_mesh_get_editmesh(ob->data): NULL;
/* evaluate drivers */
// XXX: should we push this to derivedmesh instead?
@@ -2553,7 +2574,7 @@ void object_handle_update(Scene *scene, Object *ob)
while(psys) {
if(psys_check_enabled(ob, psys)) {
/* check use of dupli objects here */
- if(psys->part && psys->part->draw_as == PART_DRAW_REND &&
+ if(psys->part && (psys->part->draw_as == PART_DRAW_REND || G.rendering) &&
((psys->part->ren_as == PART_DRAW_OB && psys->part->dup_ob)
|| (psys->part->ren_as == PART_DRAW_GR && psys->part->dup_group)))
ob->transflag |= OB_DUPLIPARTS;
diff --git a/source/blender/blenkernel/intern/packedFile.c b/source/blender/blenkernel/intern/packedFile.c
index b01f570898e..919a724d1ec 100644
--- a/source/blender/blenkernel/intern/packedFile.c
+++ b/source/blender/blenkernel/intern/packedFile.c
@@ -220,7 +220,7 @@ void packAll(Main *bmain, ReportList *reports)
ima->packedfile = newPackedFile(reports, ima->name);
for(vf=bmain->vfont.first; vf; vf=vf->id.next)
- if(vf->packedfile == NULL && vf->id.lib==NULL)
+ if(vf->packedfile == NULL && vf->id.lib==NULL && strcmp(vf->name, "<builtin>") != 0)
vf->packedfile = newPackedFile(reports, vf->name);
for(sound=bmain->sound.first; sound; sound=sound->id.next)
diff --git a/source/blender/blenkernel/intern/paint.c b/source/blender/blenkernel/intern/paint.c
index 3343df6b8a7..ffb99c10c40 100644
--- a/source/blender/blenkernel/intern/paint.c
+++ b/source/blender/blenkernel/intern/paint.c
@@ -25,7 +25,6 @@
* ***** END GPL LICENSE BLOCK *****
*/
-#include "MEM_guardedalloc.h"
#include "DNA_object_types.h"
#include "DNA_mesh_types.h"
diff --git a/source/blender/blenkernel/intern/particle.c b/source/blender/blenkernel/intern/particle.c
index 52ee0180f43..6b75f5d417c 100644
--- a/source/blender/blenkernel/intern/particle.c
+++ b/source/blender/blenkernel/intern/particle.c
@@ -40,12 +40,16 @@
#include "DNA_key_types.h"
#include "DNA_material_types.h"
#include "DNA_mesh_types.h"
+#include "DNA_meshdata_types.h"
#include "DNA_particle_types.h"
#include "DNA_smoke_types.h"
+#include "DNA_scene_types.h"
+#include "BLI_blenlib.h"
#include "BLI_kdtree.h"
#include "BLI_rand.h"
#include "BLI_threads.h"
+#include "BLI_math.h"
#include "BKE_anim.h"
#include "BKE_animsys.h"
@@ -380,9 +384,6 @@ void free_hair(Object *ob, ParticleSystem *psys, int dynamics)
{
PARTICLE_P;
- if(psys->part->type != PART_HAIR)
- return;
-
LOOP_PARTICLES {
if(pa->hair)
MEM_freeN(pa->hair);
@@ -620,8 +621,7 @@ static float psys_render_projected_area(ParticleSystem *psys, float *center, flo
mul_m4_v4(data->viewmat, co);
/* compute two vectors orthogonal to view vector */
- VECCOPY(view, co);
- normalize_v3(view);
+ normalize_v3_v3(view, co);
ortho_basis_v3v3_v3( ortho1, ortho2,view);
/* compute on screen minification */
@@ -706,6 +706,10 @@ void psys_render_set(Object *ob, ParticleSystem *psys, float viewmat[][4], float
data->timeoffset= timeoffset;
psys->renderdata= data;
+
+ /* Hair can and has to be recalculated if everything isn't displayed. */
+ if(psys->part->disp != 100 && psys->part->type == PART_HAIR)
+ psys->recalc |= PSYS_RECALC_RESET;
}
void psys_render_restore(Object *ob, ParticleSystem *psys)
@@ -1114,6 +1118,24 @@ static int get_pointcache_times_for_particle(PointCache *cache, int index, float
return ret == 2;
}
+
+float psys_get_dietime_from_cache(PointCache *cache, int index) {
+ PTCacheMem *pm;
+ int dietime = 10000000; /* some max value so that we can default to pa->time+lifetime */
+
+ for(pm=cache->mem_cache.last; pm; pm=pm->prev) {
+ if(pm->index_array) {
+ if(pm->index_array[index])
+ return (float)pm->frame;
+ }
+ else {
+ return (float)pm->frame;
+ }
+ }
+
+ return (float)dietime;
+}
+
static void init_particle_interpolation(Object *ob, ParticleSystem *psys, ParticleData *pa, ParticleInterpolationData *pind)
{
@@ -1919,8 +1941,7 @@ static void do_prekink(ParticleKey *state, ParticleKey *par, float *par_rot, flo
mul_qt_v3(q2,z_vec);
VECSUB(vec_from_par,state->co,par->co);
- VECCOPY(vec_one,vec_from_par);
- radius=normalize_v3(vec_one);
+ radius= normalize_v3_v3(vec_one, vec_from_par);
inp_y=dot_v3v3(y_vec,vec_one);
inp_z=dot_v3v3(z_vec,vec_one);
@@ -2007,6 +2028,10 @@ void precalc_guides(ParticleSimulationData *sim, ListBase *effectors)
LOOP_PARTICLES {
psys_particle_on_emitter(sim->psmd,sim->psys->part->from,pa->num,pa->num_dmcache,pa->fuv,pa->foffset,state.co,0,0,0,0,0);
+
+ mul_m4_v3(sim->ob->obmat, state.co);
+ mul_mat3_m4_v3(sim->ob->obmat, state.vel);
+
pd_point_from_particle(sim, pa, &state, &point);
for(eff = effectors->first; eff; eff=eff->next) {
@@ -2925,8 +2950,7 @@ void psys_cache_paths(ParticleSimulationData *sim, float cfra)
if(k == 1) {
/* calculate initial tangent for incremental rotations */
VECSUB(tangent, ca->co, (ca - 1)->co);
- VECCOPY(prev_tangent, tangent);
- normalize_v3(prev_tangent);
+ normalize_v3_v3(prev_tangent, tangent);
/* First rotation is based on emitting face orientation. */
/* This is way better than having flipping rotations resulting */
@@ -3102,8 +3126,7 @@ void psys_cache_edit_paths(Scene *scene, Object *ob, PTCacheEdit *edit, float cf
if(k == 1) {
/* calculate initial tangent for incremental rotations */
VECSUB(tangent, ca->co, (ca - 1)->co);
- VECCOPY(prev_tangent, tangent);
- normalize_v3(prev_tangent);
+ normalize_v3_v3(prev_tangent, tangent);
/* First rotation is based on emitting face orientation. */
/* This is way better than having flipping rotations resulting */
@@ -3164,7 +3187,7 @@ void psys_cache_edit_paths(Scene *scene, Object *ob, PTCacheEdit *edit, float cf
/* at the moment this is only used for weight painting.
* will need to move out of this check if its used elsewhere. */
- t2 = birthtime + ((float)(k+1)/(float)steps) * (dietime - birthtime);
+ t2 = birthtime + ((float)k/(float)steps) * (dietime - birthtime);
while (pind.hkey[1]->time < t2) pind.hkey[1]++;
pind.hkey[0] = pind.hkey[1] - 1;
@@ -3663,7 +3686,7 @@ static void get_cpa_texture(DerivedMesh *dm, Material *ma, int face_index, float
else
VECCOPY(texco,orco);
- externtex(mtex, texco, &value, rgba, rgba+1, rgba+2, rgba+3);
+ externtex(mtex, texco, &value, rgba, rgba+1, rgba+2, rgba+3, 0);
if((event & mtex->pmapto) & MAP_PA_TIME){
if((setvars&MAP_PA_TIME)==0){
ptex->time=0.0;
@@ -3717,7 +3740,7 @@ void psys_get_texture(ParticleSimulationData *sim, Material *ma, ParticleData *p
psys_particle_on_emitter(sim->psmd,sim->psys->part->from,pa->num,pa->num_dmcache,pa->fuv,pa->foffset,co,0,0,0,texco, 0);
}
- externtex(mtex, texco, &value, rgba, rgba+1, rgba+2, rgba+3);
+ externtex(mtex, texco, &value, rgba, rgba+1, rgba+2, rgba+3, 0);
if((event & mtex->pmapto) & MAP_PA_TIME){
/* the first time has to set the base value for time regardless of blend mode */
@@ -4367,20 +4390,14 @@ void psys_make_billboard(ParticleBillboardData *bb, float xvec[3], float yvec[3]
onevec[bb->align]=1.0f;
if(bb->lock && (bb->align == PART_BB_VIEW)) {
- VECCOPY(xvec, bb->ob->obmat[0]);
- normalize_v3(xvec);
-
- VECCOPY(yvec, bb->ob->obmat[1]);
- normalize_v3(yvec);
-
- VECCOPY(zvec, bb->ob->obmat[2]);
- normalize_v3(zvec);
+ normalize_v3_v3(xvec, bb->ob->obmat[0]);
+ normalize_v3_v3(yvec, bb->ob->obmat[1]);
+ normalize_v3_v3(zvec, bb->ob->obmat[2]);
}
else if(bb->align == PART_BB_VEL) {
float temp[3];
- VECCOPY(temp, bb->vel);
- normalize_v3(temp);
+ normalize_v3_v3(temp, bb->vel);
VECSUB(zvec, bb->ob->obmat[3], bb->vec);
@@ -4429,3 +4446,34 @@ void psys_make_billboard(ParticleBillboardData *bb, float xvec[3], float yvec[3]
VECADDFAC(center, center, yvec, bb->offset[1]);
}
+
+void psys_apply_hair_lattice(Scene *scene, Object *ob, ParticleSystem *psys) {
+ ParticleSimulationData sim = {scene, ob, psys, psys_get_modifier(ob, psys)};
+
+ psys->lattice = psys_get_lattice(&sim);
+
+ if(psys->lattice) {
+ ParticleData *pa = psys->particles;
+ HairKey *hkey;
+ int p, h;
+ float hairmat[4][4], imat[4][4];
+
+ for(p=0; p<psys->totpart; p++, pa++) {
+ psys_mat_hair_to_global(sim.ob, sim.psmd->dm, psys->part->from, pa, hairmat);
+ invert_m4_m4(imat, hairmat);
+
+ hkey = pa->hair;
+ for(h=0; h<pa->totkey; h++, hkey++) {
+ mul_m4_v3(hairmat, hkey->co);
+ calc_latt_deform(psys->lattice, hkey->co, 1.0f);
+ mul_m4_v3(imat, hkey->co);
+ }
+ }
+
+ end_latt_deform(psys->lattice);
+ psys->lattice= NULL;
+
+ /* protect the applied shape */
+ psys->flag |= PSYS_EDITED;
+ }
+}
diff --git a/source/blender/blenkernel/intern/particle_system.c b/source/blender/blenkernel/intern/particle_system.c
index 9b9c3ff16b6..47a220dcefb 100644
--- a/source/blender/blenkernel/intern/particle_system.c
+++ b/source/blender/blenkernel/intern/particle_system.c
@@ -29,6 +29,7 @@
* ***** END GPL LICENSE BLOCK *****
*/
+#include <stddef.h>
#include "BLI_storage.h" /* _LARGEFILE_SOURCE */
#include <stdlib.h>
@@ -106,19 +107,25 @@
/* Reacting to system events */
/************************************************/
-static int get_current_display_percentage(ParticleSystem *psys)
+static int particles_are_dynamic(ParticleSystem *psys) {
+ if(psys->pointcache->flag & PTCACHE_BAKED)
+ return 0;
+
+ if(psys->part->type == PART_HAIR)
+ return psys->flag & PSYS_HAIR_DYNAMICS;
+ else
+ return ELEM3(psys->part->phystype, PART_PHYS_NEWTON, PART_PHYS_BOIDS, PART_PHYS_FLUID);
+}
+int psys_get_current_display_percentage(ParticleSystem *psys)
{
ParticleSettings *part=psys->part;
- if(psys->renderdata || (part->child_nbr && part->childtype)
- || (psys->pointcache->flag & PTCACHE_BAKING))
+ if((psys->renderdata && !particles_are_dynamic(psys)) /* non-dynamic particles can be rendered fully */
+ || (part->child_nbr && part->childtype) /* display percentage applies to children */
+ || (psys->pointcache->flag & PTCACHE_BAKING)) /* baking is always done with full amount */
return 100;
- if(part->phystype==PART_PHYS_KEYED){
- return psys->part->disp;
- }
- else
- return psys->part->disp;
+ return psys->part->disp;
}
void psys_reset(ParticleSystem *psys, int mode)
@@ -188,9 +195,11 @@ static void realloc_particles(ParticleSimulationData *sim, int new_totpart)
psys->free_edit = NULL;
}
- newpars= MEM_callocN(totpart*sizeof(ParticleData), "particles");
- if(psys->part->phystype == PART_PHYS_BOIDS)
- newboids= MEM_callocN(totpart*sizeof(BoidParticle), "boid particles");
+ if(totpart) {
+ newpars= MEM_callocN(totpart*sizeof(ParticleData), "particles");
+ if(psys->part->phystype == PART_PHYS_BOIDS)
+ newboids= MEM_callocN(totpart*sizeof(BoidParticle), "boid particles");
+ }
if(psys->particles) {
totsaved=MIN2(psys->totpart,totpart);
@@ -1567,8 +1576,6 @@ void initialize_particle(ParticleSimulationData *sim, ParticleData *pa, int p)
/* TODO: needs some work to make most blendtypes generally usefull */
psys_get_texture(sim,ma,pa,&ptex,MAP_PA_INIT);
}
-
- pa->lifetime= part->lifetime*ptex.life;
if(part->type==PART_HAIR)
pa->time= 0.0f;
@@ -1584,25 +1591,6 @@ void initialize_particle(ParticleSimulationData *sim, ParticleData *pa, int p)
pa->time= part->sta + (part->end - part->sta)*ptex.time;
}
-
- if(part->type==PART_HAIR){
- pa->lifetime=100.0f;
- }
- else{
-#if 0 // XXX old animation system
- icu=find_ipocurve(psys->part->ipo,PART_EMIT_LIFE);
- if(icu){
- calc_icu(icu,100*ptex.time);
- pa->lifetime*=icu->curval;
- }
-#endif // XXX old animation system
-
- if(part->randlife!=0.0)
- pa->lifetime*= 1.0f - part->randlife * BLI_frand();
- }
-
- pa->dietime= pa->time+pa->lifetime;
-
if(part->type!=PART_HAIR && part->distr!=PART_DISTR_GRID && part->from != PART_FROM_VERT){
if(ptex.exist < BLI_frand())
pa->flag |= PARS_UNEXIST;
@@ -1695,6 +1683,7 @@ void reset_particle(ParticleSimulationData *sim, ParticleData *pa, float dtime,
part=psys->part;
ptex.ivel=1.0;
+ ptex.life=1.0;
/* we need to get every random even if they're not used so that they don't effect eachother */
r_vel[0] = 2.0f * (PSYS_FRAND(p + 10) - 0.5f);
@@ -1729,8 +1718,7 @@ void reset_particle(ParticleSimulationData *sim, ParticleData *pa, float dtime,
mul_qt_v3(rot, vtan);
mul_qt_v3(rot, utan);
- VECCOPY(p_vel, state.vel);
- speed=normalize_v3(p_vel);
+ speed= normalize_v3_v3(p_vel, state.vel);
mul_v3_fl(p_vel, dot_v3v3(r_vel, p_vel));
VECSUB(p_vel, r_vel, p_vel);
normalize_v3(p_vel);
@@ -1753,7 +1741,7 @@ void reset_particle(ParticleSimulationData *sim, ParticleData *pa, float dtime,
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, give_current_material(sim->ob,part->omat), pa, &ptex, MAP_PA_IVEL);
+ psys_get_texture(sim, give_current_material(sim->ob,part->omat), pa, &ptex, MAP_PA_IVEL|MAP_PA_LIFE);
//if(vg_vel && pa->num != -1)
// ptex.ivel*=psys_particle_value_from_verts(sim->psmd->dm,part->from,pa,vg_vel);
@@ -1871,18 +1859,15 @@ void reset_particle(ParticleSimulationData *sim, ParticleData *pa, float dtime,
/* *emitter object orientation */
if(part->ob_vel[0]!=0.0) {
- VECCOPY(vec, ob->obmat[0]);
- normalize_v3(vec);
+ normalize_v3_v3(vec, ob->obmat[0]);
VECADDFAC(vel, vel, vec, part->ob_vel[0]);
}
if(part->ob_vel[1]!=0.0) {
- VECCOPY(vec, ob->obmat[1]);
- normalize_v3(vec);
+ normalize_v3_v3(vec, ob->obmat[1]);
VECADDFAC(vel, vel, vec, part->ob_vel[1]);
}
if(part->ob_vel[2]!=0.0) {
- VECCOPY(vec, ob->obmat[2]);
- normalize_v3(vec);
+ normalize_v3_v3(vec, ob->obmat[2]);
VECADDFAC(vel, vel, vec, part->ob_vel[2]);
}
@@ -1979,8 +1964,25 @@ void reset_particle(ParticleSimulationData *sim, ParticleData *pa, float dtime,
}
}
+
+ if(part->type == PART_HAIR){
+ pa->lifetime = 100.0f;
+ }
+ else{
+ pa->lifetime = part->lifetime*ptex.life;
+
+ if(part->randlife != 0.0)
+ pa->lifetime *= 1.0f - part->randlife * PSYS_FRAND(p + 21);
+ }
+
pa->dietime = pa->time + pa->lifetime;
+ if(sim->psys->pointcache && sim->psys->pointcache->flag & PTCACHE_BAKED &&
+ sim->psys->pointcache->mem_cache.first) {
+ float dietime = psys_get_dietime_from_cache(sim->psys->pointcache, p);
+ pa->dietime = MIN2(pa->dietime, dietime);
+ }
+
if(pa->time > cfra)
pa->alive = PARS_UNBORN;
else if(pa->dietime <= cfra)
@@ -2837,11 +2839,18 @@ void particle_intersect_face(void *userdata, int index, const BVHTreeRay *ray, B
} while(t2);
}
-/* particle - mesh collision code */
-/* in addition to basic point to surface collisions handles friction & damping,*/
-/* angular momentum <-> linear momentum and swept sphere - mesh collisions */
-/* 1. check for all possible deflectors for closest intersection on particle path */
-/* 2. if deflection was found kill the particle or calculate new coordinates */
+/* Particle - Mesh collision code
+ * Features:
+ * - point and swept sphere to mesh surface collisions
+ * - moving colliders (but not yet rotating or deforming colliders)
+ * - friction & damping
+ * - angular momentum <-> linear momentum
+ * - high accuracy by re-applying particle acceleration after collision
+ * - behaves relatively well even if limit of 10 collisions per simulation step is exceeded
+ * Main parts:
+ * 1. check for all possible deflectors for closest intersection on particle path
+ * 2. if deflection was found calculate new coordinates or kill the particle
+ */
static void deflect_particle(ParticleSimulationData *sim, int p, float dfra, float cfra){
Object *ground_ob = NULL;
ParticleSettings *part = sim->psys->part;
@@ -2849,19 +2858,21 @@ static void deflect_particle(ParticleSimulationData *sim, int p, float dfra, flo
ParticleCollision col;
ColliderCache *coll;
BVHTreeRayHit hit;
- float ray_dir[3], zerovec[3]={0.0,0.0,0.0};
+ float ray_dir[3], acc[3];
float radius = ((part->flag & PART_SIZE_DEFL)?pa->size:0.0f), boid_z = 0.0f;
- float timestep = psys_get_timestep(sim);
+ float timestep = psys_get_timestep(sim) * dfra;
+ float inv_timestep = 1.0f/timestep;
int deflections=0, max_deflections=10;
- VECCOPY(col.co1, pa->prev_state.co);
- VECCOPY(col.co2, pa->state.co);
-
- VECCOPY(col.ve1, pa->prev_state.vel);
- VECCOPY(col.ve2, pa->state.vel);
- mul_v3_fl(col.ve1, timestep * dfra);
- mul_v3_fl(col.ve2, timestep * dfra);
-
+ /* get acceleration (from gravity, forcefields etc. to be re-applied after collision) */
+ sub_v3_v3v3(acc, pa->state.vel, pa->prev_state.vel);
+ mul_v3_fl(acc, inv_timestep);
+
+ /* set values for first iteration */
+ copy_v3_v3(col.co1, pa->prev_state.co);
+ copy_v3_v3(col.co2, pa->state.co);
+ copy_v3_v3(col.ve1, pa->prev_state.vel);
+ copy_v3_v3(col.ve2, pa->state.vel);
col.t = 0.0f;
/* override for boids */
@@ -2876,7 +2887,7 @@ static void deflect_particle(ParticleSimulationData *sim, int p, float dfra, flo
if(sim->colliders) while(deflections < max_deflections){
/* 1. */
- VECSUB(ray_dir, col.co2, col.co1);
+ sub_v3_v3v3(ray_dir, col.co2, col.co1);
hit.index = -1;
hit.dist = col.ray_len = len_v3(ray_dir);
@@ -2904,45 +2915,49 @@ static void deflect_particle(ParticleSimulationData *sim, int p, float dfra, flo
/* 2. */
if(hit.index>=0) {
PartDeflect *pd = col.hit_ob->pd;
- int through = (BLI_frand() < pd->pdef_perm) ? 1 : 0;
float co[3]; /* point of collision */
- float vec[3]; /* movement through collision */
- float acc[3]; /* acceleration */
-
float x = hit.dist/col.ray_len; /* location of collision between this iteration */
- float le = len_v3(col.ve1)/col.ray_len;
- float ac = len_v3(col.ve2)/col.ray_len - le; /* (taking acceleration into account) */
- float t = (-le + sqrt(le*le + 2*ac*x))/ac; /* time of collision between this iteration */
- float dt = col.t + x * (1.0f - col.t); /* time of collision between frame change*/
- float it = 1.0 - t;
+ float df = col.t + x * (1.0f - col.t); /* time of collision between frame change*/
+ float dt1 = (df - col.t) * timestep; /* iteration time of collision (in seconds) */
+ float dt2 = (1.0f - df) * timestep; /* time left after collision (in seconds) */
+ int through = (BLI_frand() < pd->pdef_perm) ? 1 : 0; /* did particle pass through the collision surface? */
+
+ deflections++;
interp_v3_v3v3(co, col.co1, col.co2, x);
- VECSUB(vec, col.co2, col.co1);
-
- VECSUB(acc, col.ve2, col.ve1);
- mul_v3_fl(col.vel, 1.0f-col.t);
+ /* make sure we don't hit the current face again */
+ /* TODO: could/should this be proportional to pa->size? */
+ madd_v3_v3fl(co, col.nor, (through ? -0.0001f : 0.0001f));
/* particle dies in collision */
if(through == 0 && (part->flag & PART_DIE_ON_COL || pd->flag & PDEFLE_KILL_PART)) {
pa->alive = PARS_DYING;
- pa->dietime = pa->state.time + (cfra - pa->state.time) * dt;
-
- /* we have to add this for dying particles too so that reactors work correctly */
- VECADDFAC(co, co, col.nor, (through ? -0.0001f : 0.0001f));
+ pa->dietime = pa->state.time + (cfra - pa->state.time) * df;
- VECCOPY(pa->state.co, co);
- interp_v3_v3v3(pa->state.vel, pa->prev_state.vel, pa->state.vel, dt);
- interp_qt_qtqt(pa->state.rot, pa->prev_state.rot, pa->state.rot, dt);
- interp_v3_v3v3(pa->state.ave, pa->prev_state.ave, pa->state.ave, dt);
+ copy_v3_v3(pa->state.co, co);
+ interp_v3_v3v3(pa->state.vel, pa->prev_state.vel, pa->state.vel, df);
+ interp_qt_qtqt(pa->state.rot, pa->prev_state.rot, pa->state.rot, df);
+ interp_v3_v3v3(pa->state.ave, pa->prev_state.ave, pa->state.ave, df);
/* particle is dead so we don't need to calculate further */
- deflections=max_deflections;
+ return;
}
+ /* figure out velocity and other data after collision */
else {
- float nor_vec[3], tan_vec[3], tan_vel[3];
+ float v0[3]; /* velocity directly before collision to be modified into velocity directly after collision */
+ float v0_nor[3];/* normal component of v0 */
+ float v0_tan[3];/* tangential component of v0 */
+ float vc_tan[3];/* tangential component of collision surface velocity */
+ float check[3];
+ float v0_dot, vc_dot, check_dot;
float damp, frict;
- float inp, inp_v;
+
+ /* get exact velocity right before collision */
+ madd_v3_v3v3fl(v0, col.ve1, acc, dt1);
+
+ /* convert collider velocity from 1/framestep to 1/s */
+ mul_v3_fl(col.vel, inv_timestep);
/* get damping & friction factors */
damp = pd->pdef_damp + pd->pdef_rdamp * 2 * (BLI_frand() - 0.5f);
@@ -2952,119 +2967,118 @@ static void deflect_particle(ParticleSimulationData *sim, int p, float dfra, flo
CLAMP(frict,0.0,1.0);
/* treat normal & tangent components separately */
- inp = dot_v3v3(col.nor, vec);
- inp_v = dot_v3v3(col.nor, col.vel);
-
- VECADDFAC(tan_vec, vec, col.nor, -inp);
- VECADDFAC(tan_vel, col.vel, col.nor, -inp_v);
- if((part->flag & PART_ROT_DYN)==0)
- interp_v3_v3v3(tan_vec, tan_vec, tan_vel, frict);
-
- VECCOPY(nor_vec, col.nor);
- inp *= 1.0f - damp;
-
- if(through)
- inp_v *= damp;
+ v0_dot = dot_v3v3(col.nor, v0);
+ madd_v3_v3v3fl(v0_tan, v0, col.nor, -v0_dot);
- /* special case for object hitting the particle from behind */
- if(through==0 && ((inp_v>0 && inp>0 && inp_v>inp) || (inp_v<0 && inp<0 && inp_v<inp)))
- mul_v3_fl(nor_vec, inp_v);
- else
- mul_v3_fl(nor_vec, inp_v + (through ? 1.0f : -1.0f) * inp);
-
- /* angular <-> linear velocity - slightly more physical and looks even nicer than before */
- if(part->flag & PART_ROT_DYN) {
- float surface_vel[3], rot_vel[3], friction[3], dave[3], dvel[3];
+ vc_dot = dot_v3v3(col.nor, col.vel);
+ madd_v3_v3v3fl(vc_tan, col.vel, col.nor, -vc_dot);
- /* apparent velocity along collision surface */
- VECSUB(surface_vel, tan_vec, tan_vel);
+ /* handle friction effects (tangential and angular velocity) */
+ if(frict > 0.0f) {
+ /* angular <-> linear velocity */
+ if(part->flag & PART_ROT_DYN) {
+ float vr_tan[3], v1_tan[3], ave[3];
+
+ /* linear velocity of particle surface */
+ cross_v3_v3v3(vr_tan, col.nor, pa->state.ave);
+ mul_v3_fl(vr_tan, pa->size);
- /* direction of rolling friction */
- cross_v3_v3v3(rot_vel, pa->state.ave, col.nor);
- /* convert to current dt */
- mul_v3_fl(rot_vel, (timestep*dfra) * (1.0f - col.t));
- mul_v3_fl(rot_vel, pa->size);
+ /* change to coordinates that move with the collision plane */
+ sub_v3_v3v3(v1_tan, v0_tan, vc_tan);
+
+ /* The resulting velocity is a weighted average of particle cm & surface
+ * velocity. This weight (related to particle's moment of inertia) could
+ * be made a parameter for angular <-> linear conversion.
+ */
+ madd_v3_v3fl(v1_tan, vr_tan, -0.4);
+ mul_v3_fl(v1_tan, 1.0f/1.4f); /* 1/(1+0.4) */
- /* apply sliding friction */
- VECSUB(surface_vel, surface_vel, rot_vel);
- VECCOPY(friction, surface_vel);
+ /* rolling friction is around 0.01 of sliding friction (could be made a parameter) */
+ mul_v3_fl(v1_tan, 1.0f - 0.01f * frict);
- mul_v3_fl(surface_vel, 1.0 - frict);
- mul_v3_fl(friction, frict);
+ /* surface_velocity is opposite to cm velocity */
+ mul_v3_v3fl(vr_tan, v1_tan, -1.0f);
- /* sliding changes angular velocity */
- cross_v3_v3v3(dave, col.nor, friction);
- mul_v3_fl(dave, 1.0f/MAX2(pa->size, 0.001));
+ /* get back to global coordinates */
+ add_v3_v3(v1_tan, vc_tan);
- /* we assume rolling friction is around 0.01 of sliding friction */
- mul_v3_fl(rot_vel, 1.0 - frict*0.01);
+ /* convert to angular velocity*/
+ cross_v3_v3v3(ave, vr_tan, col.nor);
+ mul_v3_fl(ave, 1.0f/MAX2(pa->size, 0.001));
- /* change in angular velocity has to be added to the linear velocity too */
- cross_v3_v3v3(dvel, dave, col.nor);
- mul_v3_fl(dvel, pa->size);
- VECADD(rot_vel, rot_vel, dvel);
+ /* only friction will cause change in linear & angular velocity */
+ interp_v3_v3v3(pa->state.ave, pa->state.ave, ave, frict);
+ interp_v3_v3v3(v0_tan, v0_tan, v1_tan, frict);
+ }
+ else {
+ /* just basic friction (unphysical due to the friction model used in Blender) */
+ interp_v3_v3v3(v0_tan, v0_tan, vc_tan, frict);
+ }
+ }
- VECADD(surface_vel, surface_vel, rot_vel);
- VECADD(tan_vec, surface_vel, tan_vel);
+ /* stickness was possibly added before, so cancel that before calculating new normal velocity */
+ /* otherwise particles go flying out of the surface because of high reversed sticky velocity */
+ if(v0_dot < 0.0f) {
+ v0_dot += pd->pdef_stickness;
+ if(v0_dot > 0.0f)
+ v0_dot = 0.0f;
+ }
- /* convert back to normal time */
- mul_v3_fl(dave, 1.0f/MAX2((timestep*dfra) * (1.0f - col.t), 0.00001));
+ /* damping and flipping of velocity around normal */
+ v0_dot *= 1.0f - damp;
+ vc_dot *= through ? damp : 1.0f;
- mul_v3_fl(pa->state.ave, 1.0 - frict*0.01);
- VECADD(pa->state.ave, pa->state.ave, dave);
- }
+ /* special case for object hitting the particle from behind */
+ if(through==0 && ((vc_dot>0.0f && v0_dot>0.0f && vc_dot>v0_dot) || (vc_dot<0.0f && v0_dot<0.0f && vc_dot<v0_dot)))
+ mul_v3_v3fl(v0_nor, col.nor, vc_dot);
+ else
+ mul_v3_v3fl(v0_nor, col.nor, vc_dot + (through ? 1.0f : -1.0f) * v0_dot);
/* combine components together again */
- VECADD(vec, nor_vec, tan_vec);
-
- /* make sure we don't hit the current face again */
- VECADDFAC(co, co, col.nor, (through ? -0.0001f : 0.0001f));
+ add_v3_v3v3(v0, v0_nor, v0_tan);
+ /* keep boids above ground */
if(part->phystype == PART_PHYS_BOIDS && part->boids->options & BOID_ALLOW_LAND) {
BoidParticle *bpa = pa->boid;
if(bpa->data.mode == eBoidMode_OnLand || co[2] <= boid_z) {
co[2] = boid_z;
- vec[2] = 0.0f;
+ v0[2] = 0.0f;
}
}
-
- /* set coordinates for next iteration */
- /* apply acceleration to final position, but make sure particle stays above surface */
- madd_v3_v3v3fl(acc, vec, acc, it);
- ac = dot_v3v3(acc, col.nor);
- if((!through && ac < 0.0f) || (through && ac > 0.0f))
- madd_v3_v3fl(acc, col.nor, -ac);
-
- VECCOPY(col.co1, co);
- VECADDFAC(col.co2, co, acc, it);
-
- VECCOPY(col.ve1, vec);
- VECCOPY(col.ve2, acc);
-
- if(len_v3(vec) < 0.001 && len_v3v3(pa->state.co, pa->prev_state.co) < 0.001) {
- /* kill speed to stop slipping */
- VECCOPY(pa->state.vel,zerovec);
- VECCOPY(pa->state.co, co);
- if(part->flag & PART_ROT_DYN) {
- VECCOPY(pa->state.ave,zerovec);
- }
+ if(deflections < max_deflections) {
+ /* re-apply acceleration to final velocity and location */
+ madd_v3_v3v3fl(pa->state.vel, v0, acc, dt2);
+ madd_v3_v3v3fl(pa->state.co, co, v0, dt2);
+ madd_v3_v3fl(pa->state.co, acc, 0.5f*dt2*dt2);
+
+ /* make sure particle stays on the right side of the surface */
+ sub_v3_v3v3(check, pa->state.co, co);
+ /* (collision surface has moved during the time too) */
+ madd_v3_v3fl(check, col.vel, -dt2);
+
+ check_dot = dot_v3v3(check, col.nor);
+ if((!through && check_dot < 0.0f) || (through && check_dot > 0.0f))
+ madd_v3_v3fl(pa->state.co, col.nor, (through ? -0.0001f : 0.0001f) - check_dot);
+
+ /* Stickness to surface */
+ madd_v3_v3fl(pa->state.vel, col.nor, -pd->pdef_stickness);
+
+ /* set coordinates for next iteration */
+ copy_v3_v3(col.co1, co);
+ copy_v3_v3(col.co2, pa->state.co);
+
+ copy_v3_v3(col.ve1, v0);
+ copy_v3_v3(col.ve2, pa->state.vel);
+
+ col.t = df;
}
else {
- VECCOPY(pa->state.co, col.co2);
- mul_v3_v3fl(pa->state.vel, acc, 1.0f/MAX2((timestep*dfra) * (1.0f - col.t), 0.00001));
-
- /* Stickness to surface */
- normalize_v3(nor_vec);
- madd_v3_v3fl(pa->state.vel, nor_vec, -pd->pdef_stickness);
+ /* final chance to prevent failure, so don't do anything fancy */
+ copy_v3_v3(pa->state.co, co);
+ copy_v3_v3(pa->state.vel, v0);
}
-
- col.t = dt;
}
- deflections++;
-
- //reaction_state.time = cfra - (1.0f - dt) * dfra;
- //push_reaction(col.ob, psys, p, PART_EVENT_COLLIDE, &reaction_state);
}
else
return;
@@ -3254,7 +3268,7 @@ static void hair_step(ParticleSimulationData *sim, float cfra)
ParticleSystem *psys = sim->psys;
/* ParticleSettings *part = psys->part; */
PARTICLE_P;
- float disp = (float)get_current_display_percentage(psys)/100.0f;
+ float disp = (float)psys_get_current_display_percentage(psys)/100.0f;
BLI_srandom(psys->seed);
@@ -3346,6 +3360,8 @@ static void dynamics_step(ParticleSimulationData *sim, float cfra)
/* frame & time changes */
float dfra, dtime, pa_dtime, pa_dfra=0.0;
float birthtime, dietime;
+
+ int invalidParticles=0;
/* where have we gone in time since last time */
dfra= cfra - psys->cfra;
@@ -3441,7 +3457,7 @@ static void dynamics_step(ParticleSimulationData *sim, float cfra)
else if(part->phystype == PART_PHYS_NO)
reset_particle(sim, pa, dtime, cfra);
- if(dfra>0.0 && ELEM(pa->alive,PARS_ALIVE,PARS_DYING)){
+ if(pa_dfra>0.0 && ELEM(pa->alive,PARS_ALIVE,PARS_DYING)){
switch(part->phystype){
case PART_PHYS_NEWTON:
/* do global forces & effectors */
@@ -3496,6 +3512,7 @@ static void dynamics_step(ParticleSimulationData *sim, float cfra)
//push_reaction(ob,psys,p,PART_EVENT_NEAR,&pa->state);
}
+ if (isnan(pa->state.co[0]) || isnan(pa->state.co[1]) || isnan(pa->state.co[2])) {invalidParticles++;}
}
free_collider_cache(&sim->colliders);
@@ -3522,7 +3539,7 @@ static void cached_step(ParticleSimulationData *sim, float cfra)
psys_update_effectors(sim);
- disp= (float)get_current_display_percentage(psys)/100.0f;
+ disp= (float)psys_get_current_display_percentage(psys)/100.0f;
LOOP_PARTICLES {
pa->size = part->size;
@@ -3789,7 +3806,7 @@ static void system_step(ParticleSimulationData *sim, float cfra)
/* 3. do dynamics */
/* set particles to be not calculated TODO: can't work with pointcache */
- disp= (float)get_current_display_percentage(psys)/100.0f;
+ disp= (float)psys_get_current_display_percentage(psys)/100.0f;
BLI_srandom(psys->seed);
LOOP_PARTICLES {
@@ -4039,6 +4056,10 @@ void particle_system_update(Scene *scene, Object *ob, ParticleSystem *psys)
{
PARTICLE_P;
+ /* Particles without dynamics haven't been reset yet because they don't use pointcache */
+ if(psys->recalc & PSYS_RECALC_RESET)
+ psys_reset(psys, PSYS_RESET_ALL);
+
if(emit_particles(&sim, NULL, cfra)) {
free_keyed_keys(psys);
distribute_particles(&sim, part->from);
@@ -4074,7 +4095,8 @@ void particle_system_update(Scene *scene, Object *ob, ParticleSystem *psys)
psys->cfra = cfra;
psys->recalc = 0;
- /* save matrix for duplicators */
- invert_m4_m4(psys->imat, ob->obmat);
+ /* save matrix for duplicators, at rendertime the actual dupliobject's matrix is used so don't update! */
+ if(psys->renderdata==0)
+ invert_m4_m4(psys->imat, ob->obmat);
}
diff --git a/source/blender/blenkernel/intern/pointcache.c b/source/blender/blenkernel/intern/pointcache.c
index d44221d2cd3..741580048cf 100644
--- a/source/blender/blenkernel/intern/pointcache.c
+++ b/source/blender/blenkernel/intern/pointcache.c
@@ -43,6 +43,7 @@
#include "BLI_blenlib.h"
#include "BLI_threads.h"
+#include "BLI_math.h"
#include "PIL_time.h"
@@ -1453,7 +1454,7 @@ int BKE_ptcache_read_cache(PTCacheID *pid, float cfra, float frs_sec)
if(!pm && !pf) {
if(pid->cache->flag & PTCACHE_DISK_CACHE) {
pf=NULL;
- while(cfrai > pid->cache->startframe && !pf) {
+ while(cfrai >= pid->cache->startframe && !pf) {
cfrai--;
pf= ptcache_file_open(pid, PTCACHE_FILE_READ, cfrai);
cfra1 = cfrai;
@@ -2239,7 +2240,7 @@ void BKE_ptcache_remove(void)
static int CONTINUE_PHYSICS = 0;
-void BKE_ptcache_set_continue_physics(Scene *scene, int enable)
+void BKE_ptcache_set_continue_physics(Main *bmain, Scene *scene, int enable)
{
Object *ob;
@@ -2247,7 +2248,7 @@ void BKE_ptcache_set_continue_physics(Scene *scene, int enable)
CONTINUE_PHYSICS = enable;
if(CONTINUE_PHYSICS == 0) {
- for(ob=G.main->object.first; ob; ob=ob->id.next)
+ for(ob=bmain->object.first; ob; ob=ob->id.next)
if(BKE_ptcache_object_reset(scene, ob, PTCACHE_RESET_OUTDATED))
DAG_id_flush_update(&ob->id, OB_RECALC_DATA);
}
diff --git a/source/blender/blenkernel/intern/property.c b/source/blender/blenkernel/intern/property.c
index a2ba7c69b93..d8001572b4f 100644
--- a/source/blender/blenkernel/intern/property.c
+++ b/source/blender/blenkernel/intern/property.c
@@ -32,6 +32,7 @@
#include <stdio.h>
#include <stdlib.h>
+#include <stddef.h>
#include <string.h>
#include <ctype.h>
@@ -180,14 +181,7 @@ void unique_property(bProperty *first, bProperty *prop, int force)
bProperty *get_ob_property(Object *ob, char *name)
{
- bProperty *prop;
-
- prop= ob->prop.first;
- while(prop) {
- if( strcmp(prop->name, name)==0 ) return prop;
- prop= prop->next;
- }
- return NULL;
+ return BLI_findstring(&ob->prop, name, offsetof(bProperty, name));
}
void set_ob_property(Object *ob, bProperty *propc)
diff --git a/source/blender/blenkernel/intern/report.c b/source/blender/blenkernel/intern/report.c
index 173c6c136f2..3773757f5d5 100644
--- a/source/blender/blenkernel/intern/report.c
+++ b/source/blender/blenkernel/intern/report.c
@@ -273,4 +273,4 @@ Report *BKE_reports_last_displayable(ReportList *reports)
}
return NULL;
-} \ No newline at end of file
+}
diff --git a/source/blender/blenkernel/intern/scene.c b/source/blender/blenkernel/intern/scene.c
index 365656f7ee1..84be9bfcfe2 100644
--- a/source/blender/blenkernel/intern/scene.c
+++ b/source/blender/blenkernel/intern/scene.c
@@ -38,7 +38,6 @@
#else
#include <io.h>
#endif
-#include "MEM_guardedalloc.h"
#include "DNA_anim_types.h"
#include "DNA_group_types.h"
@@ -47,6 +46,8 @@
#include "DNA_screen_types.h"
#include "DNA_sequence_types.h"
+#include "MEM_guardedalloc.h"
+
#include "BKE_anim.h"
#include "BKE_animsys.h"
#include "BKE_depsgraph.h"
@@ -68,10 +69,6 @@
//XXX #include "BIF_previewrender.h"
//XXX #include "BIF_editseq.h"
-#ifndef DISABLE_PYTHON
-#include "BPY_extern.h"
-#endif
-
#include "BLI_math.h"
#include "BLI_blenlib.h"
@@ -320,11 +317,12 @@ void free_scene(Scene *sce)
Scene *add_scene(char *name)
{
+ Main *bmain= G.main;
Scene *sce;
ParticleEditSettings *pset;
int a;
- sce= alloc_libblock(&G.main->scene, ID_SCE, name);
+ sce= alloc_libblock(&bmain->scene, ID_SCE, name);
sce->lay= sce->layact= 1;
sce->r.mode= R_GAMMA|R_OSA|R_SHADOW|R_SSS|R_ENVMAP|R_RAYTRACE;
@@ -603,7 +601,7 @@ void unlink_scene(Main *bmain, Scene *sce, Scene *newsce)
sce1->set= NULL;
/* check all sequences */
- clear_scene_in_allseqs(sce);
+ clear_scene_in_allseqs(bmain, sce);
/* check render layer nodes in other scenes */
clear_scene_in_nodes(bmain, sce);
diff --git a/source/blender/blenkernel/intern/screen.c b/source/blender/blenkernel/intern/screen.c
index a8140cb815d..6f1d32898f9 100644
--- a/source/blender/blenkernel/intern/screen.c
+++ b/source/blender/blenkernel/intern/screen.c
@@ -42,10 +42,6 @@
#include "BKE_screen.h"
-#ifndef DISABLE_PYTHON
-#include "BPY_extern.h"
-#endif
-
/* ************ Spacetype/regiontype handling ************** */
/* keep global; this has to be accessible outside of windowmanager */
diff --git a/source/blender/blenkernel/intern/seqcache.c b/source/blender/blenkernel/intern/seqcache.c
index 4d58ec8212a..487ec78b2bd 100644
--- a/source/blender/blenkernel/intern/seqcache.c
+++ b/source/blender/blenkernel/intern/seqcache.c
@@ -68,7 +68,7 @@ static unsigned int HashHash(void *key_)
rval ^= *(unsigned int*) &key->cfra;
rval += key->type;
- rval ^= ((unsigned int) key->seq) << 6;
+ rval ^= ((intptr_t) key->seq) << 6;
return rval;
}
diff --git a/source/blender/blenkernel/intern/seqeffects.c b/source/blender/blenkernel/intern/seqeffects.c
index c117f51c072..461cb075bb0 100644
--- a/source/blender/blenkernel/intern/seqeffects.c
+++ b/source/blender/blenkernel/intern/seqeffects.c
@@ -41,6 +41,7 @@
#include "DNA_anim_types.h"
#include "BKE_fcurve.h"
+#include "BKE_main.h"
#include "BKE_plugin_types.h"
#include "BKE_sequencer.h"
#include "BKE_texture.h"
@@ -272,7 +273,7 @@ static ImBuf * IMB_cast_away_list(ImBuf * i)
}
static struct ImBuf * do_plugin_effect(
- Scene *scene, Sequence *seq, float cfra,
+ Main *bmain, Scene *scene, Sequence *seq, float cfra,
float facf0, float facf1, int x, int y,
int preview_render_size,
struct ImBuf *ibuf1, struct ImBuf *ibuf2,
@@ -523,7 +524,7 @@ static void do_alphaover_effect_float(float facf0, float facf1, int x, int y,
}
static struct ImBuf * do_alphaover_effect(
- Scene *scene, Sequence *seq, float cfra,
+ Main *bmain, Scene *scene, Sequence *seq, float cfra,
float facf0, float facf1, int x, int y,
int preview_render_size,
struct ImBuf *ibuf1, struct ImBuf *ibuf2,
@@ -695,7 +696,7 @@ static void do_alphaunder_effect_float(float facf0, float facf1, int x, int y,
}
static struct ImBuf* do_alphaunder_effect(
- Scene *scene, Sequence *seq, float cfra,
+ Main *bmain, Scene *scene, Sequence *seq, float cfra,
float facf0, float facf1, int x, int y,
int preview_render_size,
struct ImBuf *ibuf1, struct ImBuf *ibuf2,
@@ -820,7 +821,7 @@ void do_cross_effect_float(float facf0, float facf1, int x, int y,
/* carefull: also used by speed effect! */
static struct ImBuf* do_cross_effect(
- Scene *scene, Sequence *seq, float cfra,
+ Main *bmain, Scene *scene, Sequence *seq, float cfra,
float facf0, float facf1, int x, int y,
int preview_render_size,
struct ImBuf *ibuf1, struct ImBuf *ibuf2,
@@ -1087,7 +1088,7 @@ static void do_gammacross_effect_float(float facf0, float facf1,
}
static struct ImBuf * do_gammacross_effect(
- Scene *scene, Sequence *seq, float cfra,
+ Main *bmain, Scene *scene, Sequence *seq, float cfra,
float facf0, float facf1, int x, int y,
int preview_render_size,
struct ImBuf *ibuf1, struct ImBuf *ibuf2,
@@ -1205,7 +1206,7 @@ static void do_add_effect_float(float facf0, float facf1, int x, int y,
}
}
-static struct ImBuf * do_add_effect(Scene *scene, Sequence *seq, float cfra,
+static struct ImBuf * do_add_effect(Main *bmain, Scene *scene, Sequence *seq, float cfra,
float facf0, float facf1, int x, int y,
int preview_render_size,
struct ImBuf *ibuf1, struct ImBuf *ibuf2,
@@ -1322,7 +1323,7 @@ static void do_sub_effect_float(float facf0, float facf1, int x, int y,
}
static struct ImBuf * do_sub_effect(
- Scene *scene, Sequence *seq, float cfra,
+ Main *bmain, Scene *scene, Sequence *seq, float cfra,
float facf0, float facf1, int x, int y,
int preview_render_size,
struct ImBuf *ibuf1, struct ImBuf *ibuf2,
@@ -1536,7 +1537,7 @@ static void do_mul_effect_float(float facf0, float facf1, int x, int y,
}
static struct ImBuf * do_mul_effect(
- Scene *scene, Sequence *seq, float cfra,
+ Main *bmain, Scene *scene, Sequence *seq, float cfra,
float facf0, float facf1, int x, int y,
int preview_render_size,
struct ImBuf *ibuf1, struct ImBuf *ibuf2,
@@ -1992,7 +1993,7 @@ static void do_wipe_effect_float(Sequence *seq, float facf0, float facf1,
}
static struct ImBuf * do_wipe_effect(
- Scene *scene, Sequence *seq, float cfra,
+ Main *bmain, Scene *scene, Sequence *seq, float cfra,
float facf0, float facf1, int x, int y,
int preview_render_size,
struct ImBuf *ibuf1, struct ImBuf *ibuf2,
@@ -2143,7 +2144,7 @@ static void do_transform(Scene *scene, Sequence *seq, float facf0, int x, int y,
static struct ImBuf * do_transform_effect(
- Scene *scene, Sequence *seq,float cfra,
+ Main *bmain, Scene *scene, Sequence *seq,float cfra,
float facf0, float facf1, int x, int y,
int preview_render_size,
struct ImBuf *ibuf1, struct ImBuf *ibuf2,
@@ -2661,7 +2662,7 @@ static void do_glow_effect_float(Sequence *seq, float facf0, float facf1,
}
static struct ImBuf * do_glow_effect(
- Scene *scene, Sequence *seq, float cfra,
+ Main *bmain, Scene *scene, Sequence *seq, float cfra,
float facf0, float facf1, int x, int y,
int preview_render_size,
struct ImBuf *ibuf1, struct ImBuf *ibuf2,
@@ -2722,7 +2723,7 @@ static int early_out_color(struct Sequence *seq,
}
static struct ImBuf * do_solid_color(
- Scene *scene, Sequence *seq, float cfra,
+ Main *bmain, Scene *scene, Sequence *seq, float cfra,
float facf0, float facf1, int x, int y,
int preview_render_size,
struct ImBuf *ibuf1, struct ImBuf *ibuf2,
@@ -2818,7 +2819,7 @@ static int early_out_multicam(struct Sequence *seq, float facf0, float facf1)
}
static struct ImBuf * do_multicam(
- Scene *scene, Sequence *seq, float cfra,
+ Main *bmain, Scene *scene, Sequence *seq, float cfra,
float facf0, float facf1, int x, int y,
int preview_render_size,
struct ImBuf *ibuf1, struct ImBuf *ibuf2,
@@ -2842,7 +2843,7 @@ static struct ImBuf * do_multicam(
return 0;
}
- i = give_ibuf_seqbase(scene, x, y, cfra, seq->multicam_source,
+ i = give_ibuf_seqbase(bmain, scene, x, y, cfra, seq->multicam_source,
preview_render_size, seqbasep);
if (!i) {
return 0;
@@ -2968,22 +2969,11 @@ void sequence_effect_speed_rebuild_map(Scene *scene, Sequence * seq, int force)
fallback_fac = 1.0;
- /* if there is no IPO, try to make retiming easy by stretching the
+ /* if there is no fcurve, try to make retiming easy by stretching the
strip */
- // XXX old animation system - seq
if (!fcu && seq->seq1->enddisp != seq->seq1->start && seq->seq1->len != 0) {
fallback_fac = (float) seq->seq1->len /
(float) (seq->seq1->enddisp - seq->seq1->start);
- /* FIXME: this strip stretching gets screwed by stripdata
- handling one layer up.
-
- So it currently works by enlarging, never by shrinking!
-
- (IPOs still work, if used correctly)
- */
- if (fallback_fac > 1.0) {
- fallback_fac = 1.0;
- }
}
if ((v->flags & SEQ_SPEED_INTEGRATE) != 0) {
@@ -3006,8 +2996,8 @@ void sequence_effect_speed_rebuild_map(Scene *scene, Sequence * seq, int force)
cursor += facf;
- if (cursor >= v->length) {
- v->frameMap[cfra] = v->length - 1;
+ if (cursor >= seq->seq1->len) {
+ v->frameMap[cfra] = seq->seq1->len - 1;
} else {
v->frameMap[cfra] = cursor;
v->lastValidFrame = cfra;
@@ -3033,8 +3023,8 @@ void sequence_effect_speed_rebuild_map(Scene *scene, Sequence * seq, int force)
facf = (float) cfra * fallback_fac;
}
facf *= v->globalSpeed;
- if (facf >= v->length) {
- facf = v->length - 1;
+ if (facf >= seq->seq1->len) {
+ facf = seq->seq1->len - 1;
} else {
v->lastValidFrame = cfra;
}
@@ -3133,7 +3123,7 @@ static void get_default_fac_fade(struct Sequence *seq, float cfra,
*facf1 /= seq->len;
}
-static struct ImBuf * do_overdrop_effect(Scene *scene, Sequence *seq, float cfra,
+static struct ImBuf * do_overdrop_effect(Main *bmain, Scene *scene, Sequence *seq, float cfra,
float facf0, float facf1,
int x, int y,
int preview_render_size,
diff --git a/source/blender/blenkernel/intern/sequencer.c b/source/blender/blenkernel/intern/sequencer.c
index 7f3057bba96..b6bb5c3a51b 100644
--- a/source/blender/blenkernel/intern/sequencer.c
+++ b/source/blender/blenkernel/intern/sequencer.c
@@ -554,7 +554,7 @@ void calc_sequence(Scene *scene, Sequence *seq)
}
/* note: caller should run calc_sequence(scene, seq) after */
-void reload_sequence_new_file(Scene *scene, Sequence * seq, int lock_range)
+void reload_sequence_new_file(Main *bmain, Scene *scene, Sequence * seq, int lock_range)
{
char str[FILE_MAXDIR+FILE_MAXFILE];
int prev_startdisp, prev_enddisp;
@@ -621,7 +621,7 @@ void reload_sequence_new_file(Scene *scene, Sequence * seq, int lock_range)
seq->strip->len = seq->len;
} else if (seq->type == SEQ_SCENE) {
/* 'seq->scenenr' should be replaced with something more reliable */
- Scene * sce = G.main->scene.first;
+ Scene * sce = bmain->scene.first;
int nr = 1;
while(sce) {
@@ -710,12 +710,12 @@ static int clear_scene_in_allseqs_cb(Sequence *seq, void *arg_pt)
return 1;
}
-void clear_scene_in_allseqs(Scene *scene)
+void clear_scene_in_allseqs(Main *bmain, Scene *scene)
{
Scene *scene_iter;
/* when a scene is deleted: test all seqs */
- for(scene_iter= G.main->scene.first; scene_iter; scene_iter= scene_iter->id.next) {
+ for(scene_iter= bmain->scene.first; scene_iter; scene_iter= scene_iter->id.next) {
if(scene_iter != scene && scene_iter->ed) {
seqbase_recursive_apply(&scene_iter->ed->seqbase, clear_scene_in_allseqs_cb, scene);
}
@@ -899,7 +899,6 @@ static float give_stripelem_index(Sequence *seq, float cfra)
{
float nr;
- if(seq->startdisp >cfra || seq->enddisp <= cfra) return -1;
if(seq->len == 0) return -1;
if(seq->flag&SEQ_REVERSE_FRAMES) {
/*reverse frame in this sequence */
@@ -1461,8 +1460,7 @@ int input_have_to_preprocess(
mul = seq->mul;
- if(seq->blend_mode == SEQ_BLEND_REPLACE &&
- !(seq->type & SEQ_EFFECT)) {
+ if(seq->blend_mode == SEQ_BLEND_REPLACE) {
mul *= seq->blend_opacity / 100.0;
}
@@ -1661,17 +1659,17 @@ static void copy_to_ibuf_still(Sequence * seq, float nr,
********************************************************************** */
static ImBuf* seq_render_strip_stack(
- Scene *scene,
+ Main *bmain, Scene *scene,
ListBase *seqbasep, float cfra, int chanshown, int render_size,
int seqrectx, int seqrecty);
-static ImBuf * seq_render_strip(Scene *scene, Sequence * seq, float cfra,
+static ImBuf * seq_render_strip(Main *bmain, Scene *scene, Sequence * seq, float cfra,
int render_size,
int seqrectx, int seqrecty);
static ImBuf* seq_render_effect_strip_impl(
- Scene *scene, float cfra, Sequence *seq, int render_size,
+ Main *bmain, Scene *scene, float cfra, Sequence *seq, int render_size,
int seqrectx, int seqrecty)
{
float fac, facf;
@@ -1709,7 +1707,7 @@ static ImBuf* seq_render_effect_strip_impl(
early_out = sh.early_out(seq, fac, facf);
if (early_out == -1) { /* no input needed */
- out = sh.execute(scene, seq, cfra, fac, facf,
+ out = sh.execute(bmain, scene, seq, cfra, fac, facf,
seqrectx, seqrecty, render_size,
0, 0, 0);
goto finish;
@@ -1724,7 +1722,7 @@ static ImBuf* seq_render_effect_strip_impl(
break;
case 1:
if (seq->seq1) {
- ibuf[0] = seq_render_strip(scene, seq->seq1, cfra,
+ ibuf[0] = seq_render_strip(bmain, scene, seq->seq1, cfra,
render_size,
seqrectx, seqrecty);
}
@@ -1739,7 +1737,7 @@ static ImBuf* seq_render_effect_strip_impl(
goto finish;
case 2:
if (seq->seq2) {
- ibuf[1] = seq_render_strip(scene, seq->seq2, cfra,
+ ibuf[1] = seq_render_strip(bmain, scene, seq->seq2, cfra,
render_size,
seqrectx, seqrecty);
}
@@ -1757,19 +1755,19 @@ static ImBuf* seq_render_effect_strip_impl(
}
if (seq->seq1) {
- ibuf[0] = seq_render_strip(scene, seq->seq1, cfra,
+ ibuf[0] = seq_render_strip(bmain, scene, seq->seq1, cfra,
render_size,
seqrectx, seqrecty);
}
if (seq->seq2) {
- ibuf[1] = seq_render_strip(scene, seq->seq2, cfra,
+ ibuf[1] = seq_render_strip(bmain, scene, seq->seq2, cfra,
render_size,
seqrectx, seqrecty);
}
if (seq->seq3) {
- ibuf[2] = seq_render_strip(scene, seq->seq3, cfra,
+ ibuf[2] = seq_render_strip(bmain, scene, seq->seq3, cfra,
render_size,
seqrectx, seqrecty);
}
@@ -1778,7 +1776,7 @@ static ImBuf* seq_render_effect_strip_impl(
goto finish;
}
- out = sh.execute(scene, seq, cfra, fac, facf, seqrectx, seqrecty,
+ out = sh.execute(bmain, scene, seq, cfra, fac, facf, seqrectx, seqrecty,
render_size,
ibuf[0], ibuf[1], ibuf[2]);
@@ -1797,7 +1795,7 @@ finish:
static ImBuf * seq_render_scene_strip_impl(
- Scene * scene, Sequence * seq, float nr, int seqrectx, int seqrecty)
+ Main *bmain, Scene * scene, Sequence * seq, float nr, int seqrectx, int seqrecty)
{
ImBuf * ibuf = 0;
float frame= seq->sfra + nr + seq->anim_startofs;
@@ -1853,8 +1851,8 @@ static ImBuf * seq_render_scene_strip_impl(
if(sequencer_view3d_cb && BLI_thread_is_main() && doseq_gl && (seq->scene == scene || have_seq==0) && seq->scene->camera) {
/* opengl offscreen render */
- scene_update_for_newframe(G.main, seq->scene, seq->scene->lay);
- ibuf= sequencer_view3d_cb(seq->scene, seqrectx, seqrecty,
+ scene_update_for_newframe(bmain, seq->scene, seq->scene->lay);
+ ibuf= sequencer_view3d_cb(seq->scene, seqrectx, seqrecty, IB_rect,
scene->r.seq_prev_type);
}
else {
@@ -1866,7 +1864,7 @@ static ImBuf * seq_render_scene_strip_impl(
else
re= RE_NewRender(sce->id.name);
- RE_BlenderFrame(re, G.main, sce, NULL, sce->lay, frame);
+ RE_BlenderFrame(re, bmain, sce, NULL, sce->lay, frame);
RE_AcquireResultImage(re, &rres);
@@ -1906,7 +1904,7 @@ static ImBuf * seq_render_scene_strip_impl(
return ibuf;
}
-static ImBuf * seq_render_strip(Scene *scene, Sequence * seq, float cfra,
+static ImBuf * seq_render_strip(Main *bmain, Scene *scene, Sequence * seq, float cfra,
int render_size,
int seqrectx, int seqrecty)
{
@@ -1931,7 +1929,7 @@ static ImBuf * seq_render_strip(Scene *scene, Sequence * seq, float cfra,
if(!ibuf && seq->seqbase.first) {
meta_ibuf = seq_render_strip_stack(
- scene,
+ bmain, scene,
&seq->seqbase, seq->start + nr, 0,
render_size, seqrectx, seqrecty);
}
@@ -1963,7 +1961,7 @@ static ImBuf * seq_render_strip(Scene *scene, Sequence * seq, float cfra,
/* weeek! */
f_cfra = seq->start + s->frameMap[(int) nr];
- child_ibuf = seq_render_strip(scene, seq->seq1, f_cfra,
+ child_ibuf = seq_render_strip(bmain, scene, seq->seq1, f_cfra,
render_size,
seqrectx, seqrecty);
}
@@ -1987,13 +1985,13 @@ static ImBuf * seq_render_strip(Scene *scene, Sequence * seq, float cfra,
if(ibuf == 0) {
ibuf = seq_render_effect_strip_impl(
- scene, cfra, seq, render_size,
+ bmain, scene, cfra, seq, render_size,
seqrectx, seqrecty);
}
} else if(seq->type == SEQ_IMAGE) {
StripElem * s_elem = give_stripelem(seq, cfra);
- if(ibuf == 0) {
+ if(ibuf == 0 && s_elem) {
BLI_join_dirfile(name, seq->strip->dir, s_elem->name);
BLI_path_abs(name, G.sce);
@@ -2004,7 +2002,8 @@ static ImBuf * seq_render_strip(Scene *scene, Sequence * seq, float cfra,
ibuf = copy_from_ibuf_still(seq,nr,seqrectx,seqrecty);
}
- if (ibuf == 0 && (ibuf=IMB_loadiffname(name, IB_rect))) {
+ if (ibuf == 0 && s_elem &&
+ (ibuf = IMB_loadiffname(name, IB_rect))) {
/* we don't need both (speed reasons)! */
if (ibuf->rect_float && ibuf->rect)
imb_freerectImBuf(ibuf);
@@ -2062,7 +2061,7 @@ static ImBuf * seq_render_strip(Scene *scene, Sequence * seq, float cfra,
}
if (ibuf == 0) {
- ibuf = seq_render_scene_strip_impl(scene, seq, nr,
+ ibuf = seq_render_scene_strip_impl(bmain, scene, seq, nr,
seqrectx, seqrecty);
copy_to_ibuf_still(seq, nr, ibuf);
@@ -2130,7 +2129,7 @@ static int seq_get_early_out_for_blend_mode(Sequence * seq)
}
static ImBuf* seq_render_strip_stack(
- Scene *scene, ListBase *seqbasep, float cfra, int chanshown,
+ Main *bmain, Scene *scene, ListBase *seqbasep, float cfra, int chanshown,
int render_size, int seqrectx, int seqrecty)
{
Sequence* seq_arr[MAXSEQ+1];
@@ -2162,7 +2161,7 @@ static ImBuf* seq_render_strip_stack(
}
if(count == 1) {
- out = seq_render_strip(scene, seq_arr[0],
+ out = seq_render_strip(bmain, scene, seq_arr[0],
cfra, render_size,
seqrectx, seqrecty);
seq_stripelem_cache_put(
@@ -2186,7 +2185,7 @@ static ImBuf* seq_render_strip_stack(
break;
}
if (seq->blend_mode == SEQ_BLEND_REPLACE) {
- out = seq_render_strip(scene, seq, cfra,
+ out = seq_render_strip(bmain, scene, seq, cfra,
render_size,
seqrectx, seqrecty);
break;
@@ -2197,7 +2196,7 @@ static ImBuf* seq_render_strip_stack(
switch (early_out) {
case -1:
case 2:
- out = seq_render_strip(scene, seq, cfra,
+ out = seq_render_strip(bmain, scene, seq, cfra,
render_size,
seqrectx, seqrecty);
break;
@@ -2210,7 +2209,7 @@ static ImBuf* seq_render_strip_stack(
break;
case 0:
if (i == 0) {
- out = seq_render_strip(scene, seq, cfra,
+ out = seq_render_strip(bmain, scene, seq, cfra,
render_size,
seqrectx, seqrecty);
}
@@ -2235,7 +2234,7 @@ static ImBuf* seq_render_strip_stack(
if (seq_get_early_out_for_blend_mode(seq) == 0) {
struct SeqEffectHandle sh = get_sequence_blend(seq);
ImBuf * ibuf1 = out;
- ImBuf * ibuf2 = seq_render_strip(scene, seq, cfra,
+ ImBuf * ibuf2 = seq_render_strip(bmain, scene, seq, cfra,
render_size,
seqrectx, seqrecty);
@@ -2247,11 +2246,11 @@ static ImBuf* seq_render_strip_stack(
int y= seqrecty;
if (swap_input) {
- out = sh.execute(scene, seq, cfra,
+ out = sh.execute(bmain, scene, seq, cfra,
facf, facf, x, y, render_size,
ibuf2, ibuf1, 0);
} else {
- out = sh.execute(scene, seq, cfra,
+ out = sh.execute(bmain, scene, seq, cfra,
facf, facf, x, y, render_size,
ibuf1, ibuf2, 0);
}
@@ -2273,7 +2272,7 @@ static ImBuf* seq_render_strip_stack(
* you have to free after usage!
*/
-ImBuf *give_ibuf_seq(Scene *scene, int rectx, int recty, int cfra, int chanshown, int render_size)
+ImBuf *give_ibuf_seq(Main *bmain, Scene *scene, int rectx, int recty, int cfra, int chanshown, int render_size)
{
Editing *ed= seq_give_editing(scene, FALSE);
int count;
@@ -2290,18 +2289,18 @@ ImBuf *give_ibuf_seq(Scene *scene, int rectx, int recty, int cfra, int chanshown
}
return seq_render_strip_stack(
- scene, seqbasep, cfra, chanshown, render_size, rectx, recty);
+ bmain, scene, seqbasep, cfra, chanshown, render_size, rectx, recty);
}
-ImBuf *give_ibuf_seqbase(struct Scene *scene, int rectx, int recty, int cfra, int chanshown, int render_size, ListBase *seqbasep)
+ImBuf *give_ibuf_seqbase(Main *bmain, Scene *scene, int rectx, int recty, int cfra, int chanshown, int render_size, ListBase *seqbasep)
{
- return seq_render_strip_stack(scene, seqbasep, cfra, chanshown, render_size, rectx, recty);
+ return seq_render_strip_stack(bmain, scene, seqbasep, cfra, chanshown, render_size, rectx, recty);
}
-ImBuf *give_ibuf_seq_direct(Scene *scene, int rectx, int recty, int cfra, int render_size, Sequence *seq)
+ImBuf *give_ibuf_seq_direct(Main *bmain, Scene *scene, int rectx, int recty, int cfra, int render_size, Sequence *seq)
{
- return seq_render_strip(scene, seq, cfra, render_size, rectx, recty);
+ return seq_render_strip(bmain, scene, seq, cfra, render_size, rectx, recty);
}
#if 0
@@ -2567,13 +2566,13 @@ static void seq_wait_for_prefetch_ready()
}
#endif
-ImBuf *give_ibuf_seq_threaded(Scene *scene, int rectx, int recty, int cfra, int chanshown, int render_size)
+ImBuf *give_ibuf_seq_threaded(Main *bmain, Scene *scene, int rectx, int recty, int cfra, int chanshown, int render_size)
{
PrefetchQueueElem *e = NULL;
int found_something = FALSE;
if (seq_thread_shutdown) {
- return give_ibuf_seq(scene, rectx, recty, cfra, chanshown, render_size);
+ return give_ibuf_seq(bmain, scene, rectx, recty, cfra, chanshown, render_size);
}
while (!e) {
@@ -3541,12 +3540,6 @@ static Sequence *seq_dupli(struct Scene *scene, Sequence *seq, int dupe_flag)
// XXX: add F-Curve duplication stuff?
- seqn->strip->tstripdata = 0;
- seqn->strip->tstripdata_startstill = 0;
- seqn->strip->tstripdata_endstill = 0;
- seqn->strip->ibuf_startstill = 0;
- seqn->strip->ibuf_endstill = 0;
-
if (seq->strip->crop) {
seqn->strip->crop = MEM_dupallocN(seq->strip->crop);
}
diff --git a/source/blender/blenkernel/intern/shrinkwrap.c b/source/blender/blenkernel/intern/shrinkwrap.c
index bddfeb049a8..f64854f90de 100644
--- a/source/blender/blenkernel/intern/shrinkwrap.c
+++ b/source/blender/blenkernel/intern/shrinkwrap.c
@@ -51,7 +51,6 @@
#include "BLI_math.h"
#include "BLI_editVert.h"
-#include "MEM_guardedalloc.h"
/* Util macros */
@@ -338,7 +337,7 @@ static void shrinkwrap_calc_normal_projection(ShrinkwrapCalcData *calc, struct S
}
//After sucessufuly build the trees, start projection vertexs
- if( bvhtree_from_mesh_faces(&treeData, calc->target, calc->keepDist, 4, 6)
+ if( bvhtree_from_mesh_faces(&treeData, calc->target, 0.0, 4, 6)
&& (auxMesh == NULL || bvhtree_from_mesh_faces(&auxData, auxMesh, 0.0, 4, 6)))
{
@@ -384,6 +383,9 @@ static void shrinkwrap_calc_normal_projection(ShrinkwrapCalcData *calc, struct S
normal_projection_project_vertex(0, tmp_co, tmp_no, &local2aux, auxData.tree, &hit, auxData.raycast_callback, &auxData);
normal_projection_project_vertex(calc->smd->shrinkOpts, tmp_co, tmp_no, &calc->local2target, treeData.tree, &hit, treeData.raycast_callback, &treeData);
+
+ if(hit.index != -1)
+ madd_v3_v3v3fl(hit.co, hit.co, tmp_no, -calc->keepDist);
}
//Project over negative direction of axis
@@ -396,6 +398,9 @@ static void shrinkwrap_calc_normal_projection(ShrinkwrapCalcData *calc, struct S
normal_projection_project_vertex(0, tmp_co, inv_no, &local2aux, auxData.tree, &hit, auxData.raycast_callback, &auxData);
normal_projection_project_vertex(calc->smd->shrinkOpts, tmp_co, inv_no, &calc->local2target, treeData.tree, &hit, treeData.raycast_callback, &treeData);
+
+ if(hit.index != -1)
+ madd_v3_v3v3fl(hit.co, hit.co, tmp_no, calc->keepDist);
}
diff --git a/source/blender/blenkernel/intern/sketch.c b/source/blender/blenkernel/intern/sketch.c
index 33871f78864..7e39cdd1196 100644
--- a/source/blender/blenkernel/intern/sketch.c
+++ b/source/blender/blenkernel/intern/sketch.c
@@ -72,8 +72,7 @@ void sk_initPoint(SK_Point *pt, SK_DrawData *dd, float *no)
{
if (no)
{
- VECCOPY(pt->no, no);
- normalize_v3(pt->no);
+ normalize_v3_v3(pt->no, no);
}
else
{
diff --git a/source/blender/blenkernel/intern/smoke.c b/source/blender/blenkernel/intern/smoke.c
index 97eb3aa866c..d2d8d5a6e07 100644
--- a/source/blender/blenkernel/intern/smoke.c
+++ b/source/blender/blenkernel/intern/smoke.c
@@ -37,8 +37,8 @@
#include <float.h>
#include <math.h>
-#include "stdio.h"
-#include "string.h" /* memset */
+#include <stdio.h>
+#include <string.h> /* memset */
#include "BLI_linklist.h"
#include "BLI_rand.h"
@@ -1350,7 +1350,7 @@ void smokeModifier_do(SmokeModifierData *smd, Scene *scene, Object *ob, DerivedM
if(framenr > endframe)
return;
- if(!smd->domain->fluid && (framenr != startframe))
+ if(!smd->domain->fluid && (framenr != startframe) && (cache->flag & PTCACHE_BAKED)==0)
return;
// printf("startframe: %d, framenr: %d\n", startframe, framenr);
diff --git a/source/blender/blenkernel/intern/softbody.c b/source/blender/blenkernel/intern/softbody.c
index 4d1994e760b..98a50eee146 100644
--- a/source/blender/blenkernel/intern/softbody.c
+++ b/source/blender/blenkernel/intern/softbody.c
@@ -55,11 +55,12 @@ variables on the UI for now
#include "MEM_guardedalloc.h"
/* types */
+#include "DNA_object_types.h"
+#include "DNA_scene_types.h"
+#include "DNA_lattice_types.h"
#include "DNA_curve_types.h"
#include "DNA_mesh_types.h"
#include "DNA_meshdata_types.h"
-#include "DNA_lattice_types.h"
-#include "DNA_scene_types.h"
#include "BLI_math.h"
#include "BLI_ghash.h"
@@ -2031,8 +2032,7 @@ static int sb_detect_vertex_collisionCached(float opco[3], float facenormal[3],
VECCOPY(vel,avel);
if (ci) *intrusion /= ci;
if (deflected){
- VECCOPY(facenormal,force);
- normalize_v3(facenormal);
+ normalize_v3_v3(facenormal, force);
}
return deflected;
}
diff --git a/source/blender/blenkernel/intern/sound.c b/source/blender/blenkernel/intern/sound.c
index 8fd97a80110..26392132038 100644
--- a/source/blender/blenkernel/intern/sound.c
+++ b/source/blender/blenkernel/intern/sound.c
@@ -382,10 +382,8 @@ void sound_move_scene_sound(struct Scene *scene, void* handle, int startframe, i
void sound_start_play_scene(struct Scene *scene)
{
- AUD_Sound* sound;
- sound = AUD_loopSound(scene->sound_scene);
- scene->sound_scene_handle = AUD_play(sound, 1);
- AUD_unload(sound);
+ scene->sound_scene_handle = AUD_play(scene->sound_scene, 1);
+ AUD_setLoop(scene->sound_scene_handle, -1);
}
void sound_play_scene(struct Scene *scene)
@@ -398,8 +396,6 @@ void sound_play_scene(struct Scene *scene)
if(status == AUD_STATUS_INVALID)
sound_start_play_scene(scene);
- AUD_setLoop(scene->sound_scene_handle, -1, -1);
-
if(status != AUD_STATUS_PLAYING)
{
AUD_seek(scene->sound_scene_handle, CFRA / FPS);
@@ -437,12 +433,16 @@ void sound_seek_scene(struct bContext *C)
if(scene->audio.flag & AUDIO_SCRUB && !CTX_wm_screen(C)->animtimer)
{
- AUD_setLoop(scene->sound_scene_handle, -1, 1 / FPS);
+ // AUD_XXX TODO: fix scrubbing, it currently doesn't stop playing
if(scene->audio.flag & AUDIO_SYNC)
AUD_seekSequencer(scene->sound_scene_handle, CFRA / FPS);
else
AUD_seek(scene->sound_scene_handle, CFRA / FPS);
AUD_resume(scene->sound_scene_handle);
+ if(AUD_getStatus(scene->sound_scrub_handle) != AUD_STATUS_INVALID)
+ AUD_seek(scene->sound_scrub_handle, 0);
+ else
+ scene->sound_scrub_handle = AUD_pauseAfter(scene->sound_scene_handle, 1 / FPS);
}
else
{
diff --git a/source/blender/blenkernel/intern/subsurf_ccg.c b/source/blender/blenkernel/intern/subsurf_ccg.c
index 0d7738353df..d6486c3ee4d 100644
--- a/source/blender/blenkernel/intern/subsurf_ccg.c
+++ b/source/blender/blenkernel/intern/subsurf_ccg.c
@@ -69,6 +69,8 @@ static int ccgDM_getVertMapIndex(CCGSubSurf *ss, CCGVert *v);
static int ccgDM_getEdgeMapIndex(CCGSubSurf *ss, CCGEdge *e);
static int ccgDM_getFaceMapIndex(CCGSubSurf *ss, CCGFace *f);
+static int ccgDM_use_grid_pbvh(CCGDerivedMesh *ccgdm);
+
///
static void *arena_alloc(CCGAllocatorHDL a, int numBytes) {
@@ -1249,7 +1251,7 @@ static void ccgDM_glNormalFast(float *a, float *b, float *c, float *d)
static void ccgdm_pbvh_update(CCGDerivedMesh *ccgdm)
{
- if(ccgdm->pbvh && ccgdm->multires.mmd) {
+ if(ccgdm->pbvh && ccgDM_use_grid_pbvh(ccgdm)) {
CCGFace **faces;
int totface;
@@ -1419,7 +1421,7 @@ static void ccgDM_drawMappedFacesGLSL(DerivedMesh *dm, int (*setMaterial)(int, v
DM_vertex_attributes_from_gpu(dm, &gattribs, &attribs);
}
- if(!doDraw || (setDrawOptions && !setDrawOptions(userData, origIndex))) {
+ if(!doDraw || (setDrawOptions && (origIndex != ORIGINDEX_NONE) && !setDrawOptions(userData, origIndex))) {
a += gridFaces*gridFaces*numVerts;
continue;
}
diff --git a/source/blender/blenkernel/intern/text.c b/source/blender/blenkernel/intern/text.c
index c8f5eb9b187..19bc853276a 100644
--- a/source/blender/blenkernel/intern/text.c
+++ b/source/blender/blenkernel/intern/text.c
@@ -174,10 +174,11 @@ void free_text(Text *text)
Text *add_empty_text(char *name)
{
+ Main *bmain= G.main;
Text *ta;
TextLine *tmp;
- ta= alloc_libblock(&G.main->text, ID_TXT, name);
+ ta= alloc_libblock(&bmain->text, ID_TXT, name);
ta->id.us= 1;
ta->name= NULL;
@@ -326,6 +327,7 @@ int reopen_text(Text *text)
Text *add_text(char *file, const char *relpath)
{
+ Main *bmain= G.main;
FILE *fp;
int i, llen, len, res;
unsigned char *buffer;
@@ -341,7 +343,7 @@ Text *add_text(char *file, const char *relpath)
fp= fopen(str, "r");
if(fp==NULL) return NULL;
- ta= alloc_libblock(&G.main->text, ID_TXT, BLI_path_basename(str));
+ ta= alloc_libblock(&bmain->text, ID_TXT, BLI_path_basename(str));
ta->id.us= 1;
ta->lines.first= ta->lines.last= NULL;
diff --git a/source/blender/blenkernel/intern/texture.c b/source/blender/blenkernel/intern/texture.c
index fe5abbd0868..77416f4dd12 100644
--- a/source/blender/blenkernel/intern/texture.c
+++ b/source/blender/blenkernel/intern/texture.c
@@ -602,9 +602,10 @@ void tex_set_type(Tex *tex, int type)
Tex *add_texture(const char *name)
{
+ Main *bmain= G.main;
Tex *tex;
- tex= alloc_libblock(&G.main->tex, ID_TE, name);
+ tex= alloc_libblock(&bmain->tex, ID_TE, name);
default_tex(tex);
@@ -688,6 +689,49 @@ MTex *add_mtex()
return mtex;
}
+/* slot -1 for first free ID */
+MTex *add_mtex_id(ID *id, int slot)
+{
+ MTex **mtex_ar;
+ short act;
+
+ give_active_mtex(id, &mtex_ar, &act);
+
+ if(mtex_ar==NULL) {
+ return NULL;
+ }
+
+ if(slot==-1) {
+ /* find first free */
+ int i;
+ for (i= 0; i < MAX_MTEX; i++) {
+ if (!mtex_ar[i]) {
+ slot= i;
+ break;
+ }
+ }
+ if(slot == -1) {
+ return NULL;
+ }
+ }
+ else {
+ /* make sure slot is valid */
+ if(slot < 0 || slot >= MAX_MTEX) {
+ return NULL;
+ }
+ }
+
+ if (mtex_ar[slot]) {
+ id_us_min((ID *)mtex_ar[slot]->tex);
+ MEM_freeN(mtex_ar[slot]);
+ mtex_ar[slot]= NULL;
+ }
+
+ mtex_ar[slot]= add_mtex();
+
+ return mtex_ar[slot];
+}
+
/* ------------------------------------------------------------------------- */
Tex *copy_texture(Tex *tex)
@@ -726,6 +770,7 @@ Tex *copy_texture(Tex *tex)
void make_local_texture(Tex *tex)
{
+ Main *bmain= G.main;
Tex *texn;
Material *ma;
World *wrld;
@@ -755,7 +800,7 @@ void make_local_texture(Tex *tex)
return;
}
- ma= G.main->mat.first;
+ ma= bmain->mat.first;
while(ma) {
for(a=0; a<MAX_MTEX; a++) {
if(ma->mtex[a] && ma->mtex[a]->tex==tex) {
@@ -765,7 +810,7 @@ void make_local_texture(Tex *tex)
}
ma= ma->id.next;
}
- la= G.main->lamp.first;
+ la= bmain->lamp.first;
while(la) {
for(a=0; a<MAX_MTEX; a++) {
if(la->mtex[a] && la->mtex[a]->tex==tex) {
@@ -775,7 +820,7 @@ void make_local_texture(Tex *tex)
}
la= la->id.next;
}
- wrld= G.main->world.first;
+ wrld= bmain->world.first;
while(wrld) {
for(a=0; a<MAX_MTEX; a++) {
if(wrld->mtex[a] && wrld->mtex[a]->tex==tex) {
@@ -785,7 +830,7 @@ void make_local_texture(Tex *tex)
}
wrld= wrld->id.next;
}
- br= G.main->brush.first;
+ br= bmain->brush.first;
while(br) {
if(br->mtex.tex==tex) {
if(br->id.lib) lib= 1;
@@ -803,7 +848,7 @@ void make_local_texture(Tex *tex)
texn= copy_texture(tex);
texn->id.us= 0;
- ma= G.main->mat.first;
+ ma= bmain->mat.first;
while(ma) {
for(a=0; a<MAX_MTEX; a++) {
if(ma->mtex[a] && ma->mtex[a]->tex==tex) {
@@ -816,7 +861,7 @@ void make_local_texture(Tex *tex)
}
ma= ma->id.next;
}
- la= G.main->lamp.first;
+ la= bmain->lamp.first;
while(la) {
for(a=0; a<MAX_MTEX; a++) {
if(la->mtex[a] && la->mtex[a]->tex==tex) {
@@ -829,7 +874,7 @@ void make_local_texture(Tex *tex)
}
la= la->id.next;
}
- wrld= G.main->world.first;
+ wrld= bmain->world.first;
while(wrld) {
for(a=0; a<MAX_MTEX; a++) {
if(wrld->mtex[a] && wrld->mtex[a]->tex==tex) {
@@ -842,7 +887,7 @@ void make_local_texture(Tex *tex)
}
wrld= wrld->id.next;
}
- br= G.main->brush.first;
+ br= bmain->brush.first;
while(br) {
if(br->mtex.tex==tex) {
if(br->id.lib==0) {
@@ -860,6 +905,7 @@ void make_local_texture(Tex *tex)
void autotexname(Tex *tex)
{
+ Main *bmain= G.main;
char texstr[20][15]= {"None" , "Clouds" , "Wood", "Marble", "Magic" , "Blend",
"Stucci", "Noise" , "Image", "Plugin", "EnvMap" , "Musgrave",
"Voronoi", "DistNoise", "Point Density", "Voxel Data", "", "", "", ""};
@@ -868,7 +914,7 @@ void autotexname(Tex *tex)
if(tex) {
if(tex->use_nodes) {
- new_id(&G.main->tex, (ID *)tex, "Noddy");
+ new_id(&bmain->tex, (ID *)tex, "Noddy");
}
else
if(tex->type==TEX_IMAGE) {
@@ -878,12 +924,12 @@ void autotexname(Tex *tex)
BLI_splitdirstring(di, fi);
strcpy(di, "I.");
strcat(di, fi);
- new_id(&G.main->tex, (ID *)tex, di);
+ new_id(&bmain->tex, (ID *)tex, di);
}
- else new_id(&G.main->tex, (ID *)tex, texstr[tex->type]);
+ else new_id(&bmain->tex, (ID *)tex, texstr[tex->type]);
}
- else if(tex->type==TEX_PLUGIN && tex->plugin) new_id(&G.main->tex, (ID *)tex, tex->plugin->pname);
- else new_id(&G.main->tex, (ID *)tex, texstr[tex->type]);
+ else if(tex->type==TEX_PLUGIN && tex->plugin) new_id(&bmain->tex, (ID *)tex, tex->plugin->pname);
+ else new_id(&bmain->tex, (ID *)tex, texstr[tex->type]);
}
}
diff --git a/source/blender/blenkernel/intern/unit.c b/source/blender/blenkernel/intern/unit.c
index 133f858e9ea..3d984c7e877 100644
--- a/source/blender/blenkernel/intern/unit.c
+++ b/source/blender/blenkernel/intern/unit.c
@@ -24,6 +24,8 @@
#include <stdio.h>
#include <ctype.h>
#include <string.h>
+#include "BKE_unit.h"
+
#ifdef WIN32
#define _USE_MATH_DEFINES
#endif
@@ -31,20 +33,51 @@
#include "BLI_winstuff.h"
+
#define TEMP_STR_SIZE 256
#define SEP_CHR '#'
#define SEP_STR "#"
-#define EPS 0.000001
-
+#define EPS 0.00001
+
+#define UN_SC_KM 1000.0f
+#define UN_SC_HM 100.0f
+#define UN_SC_DAM 10.0f
+#define UN_SC_M 1.0f
+#define UN_SC_DM 0.1f
+#define UN_SC_CM 0.01f
+#define UN_SC_MM 0.001f
+#define UN_SC_UM 0.000001f
+
+#define UN_SC_MI 1609.344f
+#define UN_SC_FUR 201.168f
+#define UN_SC_CH 20.1168f
+#define UN_SC_YD 0.9144f
+#define UN_SC_FT 0.3048f
+#define UN_SC_IN 0.0254f
+#define UN_SC_MIL 0.0000254f
+
+#define UN_SC_MTON 1000.0f /* metric ton */
+#define UN_SC_QL 100.0f
+#define UN_SC_KG 1.0f
+#define UN_SC_HG 0.1f
+#define UN_SC_DAG 0.01f
+#define UN_SC_G 0.001f
+
+#define UN_SC_ITON 907.18474f /* imperial ton */
+#define UN_SC_CWT 45.359237f
+#define UN_SC_ST 6.35029318f
+#define UN_SC_LB 0.45359237f
+#define UN_SC_OZ 0.028349523125f
/* define a single unit */
typedef struct bUnitDef {
char *name;
char *name_plural; /* abused a bit for the display name */
char *name_short; /* this is used for display*/
- char *name_alt; /* can be NULL */
+ char *name_alt; /* keyboard-friendly ASCII-only version of name_short, can be NULL */
+ /* if name_short has non-ASCII chars, name_alt should be present */
char *name_display; /* can be NULL */
@@ -59,7 +92,7 @@ typedef struct bUnitDef {
/* define a single unit */
typedef struct bUnitCollection {
struct bUnitDef *units;
- int base_unit; /* use for 0.0, or none given */
+ int base_unit; /* basic unit index (when user desn't specify unit explicitly) */
int flag; /* options for this system */
int length; /* to quickly find the last item */
} bUnitCollection;
@@ -74,14 +107,14 @@ static struct bUnitCollection buDummyCollecton = {buDummyDef, 0, 0, sizeof(buDum
/* Lengths */
static struct bUnitDef buMetricLenDef[] = {
- {"kilometer", "kilometers", "km", NULL, "Kilometers", 1000.0, 0.0, B_UNIT_DEF_NONE},
- {"hectometer", "hectometers", "hm", NULL, "100 Meters", 100.0, 0.0, B_UNIT_DEF_SUPPRESS},
- {"dekameter", "dekameters", "dkm",NULL, "10 Meters", 10.0, 0.0, B_UNIT_DEF_SUPPRESS},
- {"meter", "meters", "m", NULL, "Meters", 1.0, 0.0, B_UNIT_DEF_NONE}, /* base unit */
- {"decimetre", "decimetres", "dm", NULL, "10 Centimeters", 0.1, 0.0, B_UNIT_DEF_SUPPRESS},
- {"centimeter", "centimeters", "cm", NULL, "Centimeters", 0.01, 0.0, B_UNIT_DEF_NONE},
- {"millimeter", "millimeters", "mm", NULL, "Millimeters", 0.001, 0.0, B_UNIT_DEF_NONE},
- {"micrometer", "micrometers", "µm", "um", "Micrometers", 0.000001, 0.0, B_UNIT_DEF_NONE}, // micron too?
+ {"kilometer", "kilometers", "km", NULL, "Kilometers", UN_SC_KM, 0.0, B_UNIT_DEF_NONE},
+ {"hectometer", "hectometers", "hm", NULL, "100 Meters", UN_SC_HM, 0.0, B_UNIT_DEF_SUPPRESS},
+ {"dekameter", "dekameters", "dam",NULL, "10 Meters", UN_SC_DAM, 0.0, B_UNIT_DEF_SUPPRESS},
+ {"meter", "meters", "m", NULL, "Meters", UN_SC_M, 0.0, B_UNIT_DEF_NONE}, /* base unit */
+ {"decimetre", "decimetres", "dm", NULL, "10 Centimeters", UN_SC_DM, 0.0, B_UNIT_DEF_SUPPRESS},
+ {"centimeter", "centimeters", "cm", NULL, "Centimeters", UN_SC_CM, 0.0, B_UNIT_DEF_NONE},
+ {"millimeter", "millimeters", "mm", NULL, "Millimeters", UN_SC_MM, 0.0, B_UNIT_DEF_NONE},
+ {"micrometer", "micrometers", "µm", "um", "Micrometers", UN_SC_UM, 0.0, B_UNIT_DEF_NONE}, // micron too?
/* These get displayed because of float precision problems in the transform header,
* could work around, but for now probably people wont use these */
@@ -94,17 +127,121 @@ static struct bUnitDef buMetricLenDef[] = {
static struct bUnitCollection buMetricLenCollecton = {buMetricLenDef, 3, 0, sizeof(buMetricLenDef)/sizeof(bUnitDef)};
static struct bUnitDef buImperialLenDef[] = {
- {"mile", "miles", "mi", "m", "Miles", 1609.344, 0.0, B_UNIT_DEF_NONE},
- {"furlong", "furlongs", "fur", NULL, "Furlongs",201.168, 0.0, B_UNIT_DEF_SUPPRESS},
- {"chain", "chains", "ch", NULL, "Chains", 0.9144*22.0, 0.0, B_UNIT_DEF_SUPPRESS},
- {"yard", "yards", "yd", NULL, "Yards", 0.9144, 0.0, B_UNIT_DEF_NONE},
- {"foot", "feet", "'", "ft", "Feet", 0.3048, 0.0, B_UNIT_DEF_NONE},
- {"inch", "inches", "\"", "in", "Inches", 0.0254, 0.0, B_UNIT_DEF_NONE}, /* base unit */
- {"thou", "thous", "mil", NULL, "Thous", 0.0000254, 0.0, B_UNIT_DEF_NONE},
+ {"mile", "miles", "mi", "m", "Miles", UN_SC_MI, 0.0, B_UNIT_DEF_NONE},
+ {"furlong", "furlongs", "fur", NULL, "Furlongs",UN_SC_FUR, 0.0, B_UNIT_DEF_SUPPRESS},
+ {"chain", "chains", "ch", NULL, "Chains", UN_SC_CH, 0.0, B_UNIT_DEF_SUPPRESS},
+ {"yard", "yards", "yd", NULL, "Yards", UN_SC_YD, 0.0, B_UNIT_DEF_NONE},
+ {"foot", "feet", "'", "ft", "Feet", UN_SC_FT, 0.0, B_UNIT_DEF_NONE}, /* base unit */
+ {"inch", "inches", "\"", "in", "Inches", UN_SC_IN, 0.0, B_UNIT_DEF_NONE},
+ {"thou", "thous", "mil", NULL, "Thous", UN_SC_MIL, 0.0, B_UNIT_DEF_NONE},
{NULL, NULL, NULL, NULL, NULL, 0.0, 0.0}
};
static struct bUnitCollection buImperialLenCollecton = {buImperialLenDef, 4, 0, sizeof(buImperialLenDef)/sizeof(bUnitDef)};
+/* Areas */
+static struct bUnitDef buMetricAreaDef[] = {
+ {"square kilometer", "square kilometers", "km²", "km2", "Square Kilometers", UN_SC_KM*UN_SC_KM, 0.0, B_UNIT_DEF_NONE},
+ {"square hectometer","square hectometers", "hm²", "hm2", "Square Hectometers", UN_SC_HM*UN_SC_HM, 0.0, B_UNIT_DEF_NONE}, /* hectare */
+ {"square dekameter", "square dekameters", "dam²","dam2", "Square Dekameters", UN_SC_DAM*UN_SC_DAM, 0.0, B_UNIT_DEF_SUPPRESS}, /* are */
+ {"square meter", "square meters", "m²", "m2", "Square Meters", UN_SC_M*UN_SC_M, 0.0, B_UNIT_DEF_NONE}, /* base unit */
+ {"square decimetre", "square decimetres", "dm²", "dm2", "Square Decimetres", UN_SC_DM*UN_SC_DM, 0.0, B_UNIT_DEF_SUPPRESS},
+ {"square centimeter", "square centimeters", "cm²", "cm2", "Square Centimeters", UN_SC_CM*UN_SC_CM, 0.0, B_UNIT_DEF_NONE},
+ {"square millimeter", "square millimeters", "mm²", "mm2", "Square Millimeters", UN_SC_MM*UN_SC_MM, 0.0, B_UNIT_DEF_NONE},
+ {"square micrometer", "square micrometers", "µm²", "um2", "Square Micrometers", UN_SC_UM*UN_SC_UM, 0.0, B_UNIT_DEF_NONE},
+ {NULL, NULL, NULL, NULL, NULL, 0.0, 0.0}
+};
+static struct bUnitCollection buMetricAreaCollecton = {buMetricAreaDef, 3, 0, sizeof(buMetricAreaDef)/sizeof(bUnitDef)};
+
+static struct bUnitDef buImperialAreaDef[] = {
+ {"square mile", "square miles", "sq mi", "sq m","Square Miles", UN_SC_MI*UN_SC_MI, 0.0, B_UNIT_DEF_NONE},
+ {"square furlong", "square furlongs", "sq fur",NULL, "Square Furlongs", UN_SC_FUR*UN_SC_FUR, 0.0,B_UNIT_DEF_SUPPRESS},
+ {"square chain", "square chains", "sq ch", NULL, "Square Chains", UN_SC_CH*UN_SC_CH, 0.0, B_UNIT_DEF_SUPPRESS},
+ {"square yard", "square yards", "sq yd", NULL, "Square Yards", UN_SC_YD*UN_SC_YD, 0.0, B_UNIT_DEF_NONE},
+ {"square foot", "square feet", "sq ft", NULL, "Square Feet", UN_SC_FT*UN_SC_FT, 0.0, B_UNIT_DEF_NONE}, /* base unit */
+ {"square inch", "square inches", "sq in", NULL, "Square Inches", UN_SC_IN*UN_SC_IN, 0.0, B_UNIT_DEF_NONE},
+ {"square thou", "square thous", "sq mil",NULL, "Square Thous", UN_SC_MIL*UN_SC_MIL, 0.0, B_UNIT_DEF_NONE},
+ {NULL, NULL, NULL, NULL, NULL, 0.0, 0.0}
+};
+static struct bUnitCollection buImperialAreaCollecton = {buImperialAreaDef, 4, 0, sizeof(buImperialAreaDef)/sizeof(bUnitDef)};
+
+/* Volumes */
+static struct bUnitDef buMetricVolDef[] = {
+ {"cubic kilometer", "cubic kilometers", "km³", "km3", "Cubic Kilometers", UN_SC_KM*UN_SC_KM*UN_SC_KM, 0.0, B_UNIT_DEF_NONE},
+ {"cubic hectometer","cubic hectometers", "hm³", "hm3", "Cubic Hectometers", UN_SC_HM*UN_SC_HM*UN_SC_HM, 0.0, B_UNIT_DEF_NONE},
+ {"cubic dekameter", "cubic dekameters", "dam³","dam3", "Cubic Dekameters", UN_SC_DAM*UN_SC_DAM*UN_SC_DAM, 0.0, B_UNIT_DEF_SUPPRESS},
+ {"cubic meter", "cubic meters", "m³", "m3", "Cubic Meters", UN_SC_M*UN_SC_M*UN_SC_M, 0.0, B_UNIT_DEF_NONE}, /* base unit */
+ {"cubic decimetre", "cubic decimetres", "dm³", "dm3", "Cubic Decimetres", UN_SC_DM*UN_SC_DM*UN_SC_DM, 0.0, B_UNIT_DEF_SUPPRESS},
+ {"cubic centimeter", "cubic centimeters", "cm³", "cm3", "Cubic Centimeters", UN_SC_CM*UN_SC_CM*UN_SC_CM, 0.0, B_UNIT_DEF_NONE},
+ {"cubic millimeter", "cubic millimeters", "mm³", "mm3", "Cubic Millimeters", UN_SC_MM*UN_SC_MM*UN_SC_MM, 0.0, B_UNIT_DEF_NONE},
+ {"cubic micrometer", "cubic micrometers", "µm³", "um3", "Cubic Micrometers", UN_SC_UM*UN_SC_UM*UN_SC_UM, 0.0, B_UNIT_DEF_NONE},
+ {NULL, NULL, NULL, NULL, NULL, 0.0, 0.0}
+};
+static struct bUnitCollection buMetricVolCollecton = {buMetricVolDef, 3, 0, sizeof(buMetricVolDef)/sizeof(bUnitDef)};
+
+static struct bUnitDef buImperialVolDef[] = {
+ {"cubic mile", "cubic miles", "cu mi", "cu m","Cubic Miles", UN_SC_MI*UN_SC_MI*UN_SC_MI, 0.0, B_UNIT_DEF_NONE},
+ {"cubic furlong", "cubic furlongs", "cu fur",NULL, "Cubic Furlongs", UN_SC_FUR*UN_SC_FUR*UN_SC_FUR, 0.0,B_UNIT_DEF_SUPPRESS},
+ {"cubic chain", "cubic chains", "cu ch", NULL, "Cubic Chains", UN_SC_CH*UN_SC_CH*UN_SC_CH, 0.0, B_UNIT_DEF_SUPPRESS},
+ {"cubic yard", "cubic yards", "cu yd", NULL, "Cubic Yards", UN_SC_YD*UN_SC_YD*UN_SC_YD, 0.0, B_UNIT_DEF_NONE},
+ {"cubic foot", "cubic feet", "cu ft", NULL, "Cubic Feet", UN_SC_FT*UN_SC_FT*UN_SC_FT, 0.0, B_UNIT_DEF_NONE}, /* base unit */
+ {"cubic inch", "cubic inches", "cu in", NULL, "Cubic Inches", UN_SC_IN*UN_SC_IN*UN_SC_IN, 0.0, B_UNIT_DEF_NONE},
+ {"cubic thou", "cubic thous", "cu mil",NULL, "Cubic Thous", UN_SC_MIL*UN_SC_MIL*UN_SC_MIL, 0.0, B_UNIT_DEF_NONE},
+ {NULL, NULL, NULL, NULL, NULL, 0.0, 0.0}
+};
+static struct bUnitCollection buImperialVolCollecton = {buImperialVolDef, 4, 0, sizeof(buImperialVolDef)/sizeof(bUnitDef)};
+
+/* Mass */
+static struct bUnitDef buMetricMassDef[] = {
+ {"ton", "tonnes", "ton", "t", "1000 Kilograms", UN_SC_MTON, 0.0, B_UNIT_DEF_NONE},
+ {"quintal", "quintals", "ql", "q", "100 Kilograms", UN_SC_QL, 0.0, B_UNIT_DEF_NONE},
+ {"kilogram", "kilograms", "kg", NULL, "Kilograms", UN_SC_KG, 0.0, B_UNIT_DEF_NONE}, /* base unit */
+ {"hectogram", "hectograms", "hg", NULL, "Hectograms", UN_SC_HG, 0.0, B_UNIT_DEF_NONE},
+ {"dekagram", "dekagrams", "dag",NULL, "10 Grams", UN_SC_DAG, 0.0, B_UNIT_DEF_SUPPRESS},
+ {"gram", "grams", "g", NULL, "Grams", UN_SC_G, 0.0, B_UNIT_DEF_NONE},
+ {NULL, NULL, NULL, NULL, NULL, 0.0, 0.0}
+};
+static struct bUnitCollection buMetricMassCollecton = {buMetricMassDef, 2, 0, sizeof(buMetricMassDef)/sizeof(bUnitDef)};
+
+static struct bUnitDef buImperialMassDef[] = {
+ {"ton", "tonnes", "ton", "t", "Tonnes", UN_SC_ITON, 0.0, B_UNIT_DEF_NONE},
+ {"centum weight", "centum weights", "cwt", NULL, "Centum weights", UN_SC_CWT, 0.0, B_UNIT_DEF_NONE},
+ {"stone", "stones", "st", NULL, "Stones", UN_SC_ST, 0.0, B_UNIT_DEF_NONE},
+ {"pound", "pounds", "lb", NULL, "Pounds", UN_SC_LB, 0.0, B_UNIT_DEF_NONE}, /* base unit */
+ {"ounce", "ounces", "oz", NULL, "Ounces", UN_SC_OZ, 0.0, B_UNIT_DEF_NONE},
+ {NULL, NULL, NULL, NULL, NULL, 0.0, 0.0}
+};
+static struct bUnitCollection buImperialMassCollecton = {buImperialMassDef, 3, 0, sizeof(buImperialMassDef)/sizeof(bUnitDef)};
+
+/* Even if user scales the system to a point where km^3 is used, velocity and
+ * acceleration aren't scaled: that's why we have so few units for them */
+
+/* Velocity */
+static struct bUnitDef buMetricVelDef[] = {
+ {"meter per second", "meters per second", "m/s", NULL, "Meters per second", UN_SC_M, 0.0, B_UNIT_DEF_NONE}, /* base unit */
+ {"kilometer per hour", "kilometers per hour", "km/h", NULL, "Kilometers per hour", UN_SC_KM/3600.0f, 0.0, B_UNIT_DEF_SUPPRESS},
+ {NULL, NULL, NULL, NULL, NULL, 0.0, 0.0}
+};
+static struct bUnitCollection buMetricVelCollecton = {buMetricVelDef, 0, 0, sizeof(buMetricVelDef)/sizeof(bUnitDef)};
+
+static struct bUnitDef buImperialVelDef[] = {
+ {"foot per second", "feet per second", "ft/s", "fps", "Feet per second", UN_SC_FT, 0.0, B_UNIT_DEF_NONE}, /* base unit */
+ {"mile per hour", "miles per hour", "mph", NULL, "Miles per hour", UN_SC_MI/3600.0f, 0.0,B_UNIT_DEF_SUPPRESS},
+ {NULL, NULL, NULL, NULL, NULL, 0.0, 0.0}
+};
+static struct bUnitCollection buImperialVelCollecton = {buImperialVelDef, 0, 0, sizeof(buImperialVelDef)/sizeof(bUnitDef)};
+
+/* Acceleration */
+static struct bUnitDef buMetricAclDef[] = {
+ {"meter per second squared", "meters per second squared", "m/s²", "m/s2", "Meters per second squared", UN_SC_M, 0.0, B_UNIT_DEF_NONE}, /* base unit */
+ {NULL, NULL, NULL, NULL, NULL, 0.0, 0.0}
+};
+static struct bUnitCollection buMetricAclCollecton = {buMetricAclDef, 0, 0, sizeof(buMetricAclDef)/sizeof(bUnitDef)};
+
+static struct bUnitDef buImperialAclDef[] = {
+ {"foot per second squared", "feet per second squared", "ft/s²", "ft/s2", "Feet per second squared", UN_SC_FT, 0.0, B_UNIT_DEF_NONE}, /* base unit */
+ {NULL, NULL, NULL, NULL, NULL, 0.0, 0.0}
+};
+static struct bUnitCollection buImperialAclCollecton = {buImperialAclDef, 0, 0, sizeof(buImperialAclDef)/sizeof(bUnitDef)};
/* Time */
static struct bUnitDef buNaturalTimeDef[] = {
@@ -114,7 +251,7 @@ static struct bUnitDef buNaturalTimeDef[] = {
{"minute", "minutes", "min", "m", "Minutes", 60.0, 0.0, B_UNIT_DEF_NONE},
{"second", "seconds", "sec", "s", "Seconds", 1.0, 0.0, B_UNIT_DEF_NONE}, /* base unit */
{"millisecond", "milliseconds", "ms", NULL, "Milliseconds", 0.001, 0.0 , B_UNIT_DEF_NONE},
- {"microsecond", "microseconds", "us", NULL, "Microseconds", 0.000001, 0.0, B_UNIT_DEF_NONE},
+ {"microsecond", "microseconds", "µs", "us", "Microseconds", 0.000001, 0.0, B_UNIT_DEF_NONE},
{NULL, NULL, NULL, NULL, NULL, 0.0, 0.0}
};
static struct bUnitCollection buNaturalTimeCollecton = {buNaturalTimeDef, 3, 0, sizeof(buNaturalTimeDef)/sizeof(bUnitDef)};
@@ -126,14 +263,16 @@ static struct bUnitDef buNaturalRotDef[] = {
};
static struct bUnitCollection buNaturalRotCollection = {buNaturalRotDef, 0, 0, sizeof(buNaturalRotDef)/sizeof(bUnitDef)};
-#define UNIT_SYSTEM_MAX 3
-static struct bUnitCollection *bUnitSystems[][8] = {
- {0,0,0,0,0,&buNaturalRotCollection,&buNaturalTimeCollecton,0},
- {0,&buMetricLenCollecton, 0,0,0, &buNaturalRotCollection, &buNaturalTimeCollecton,0}, /* metric */
- {0,&buImperialLenCollecton, 0,0,0,&buNaturalRotCollection, &buNaturalTimeCollecton,0}, /* imperial */
- {0,0,0,0,0,0,0,0}
+#define UNIT_SYSTEM_TOT (((sizeof(bUnitSystems) / 9) / sizeof(void *)) - 1)
+static struct bUnitCollection *bUnitSystems[][9] = {
+ {0, 0, 0, 0, 0, &buNaturalRotCollection, &buNaturalTimeCollecton, 0, 0},
+ {0, &buMetricLenCollecton, &buMetricAreaCollecton, &buMetricVolCollecton, &buMetricMassCollecton, &buNaturalRotCollection, &buNaturalTimeCollecton, &buMetricVelCollecton, &buMetricAclCollecton}, /* metric */
+ {0, &buImperialLenCollecton, &buImperialAreaCollecton, &buImperialVolCollecton, &buImperialMassCollecton, &buNaturalRotCollection, &buNaturalTimeCollecton, &buImperialVelCollecton, &buImperialAclCollecton}, /* imperial */
+ {0, 0, 0, 0, 0, 0, 0, 0, 0}
};
+
+
/* internal, has some option not exposed */
static bUnitCollection *unit_get_system(int system, int type)
{
@@ -256,8 +395,9 @@ void bUnit_AsString(char *str, int len_max, double value, int prec, int system,
if(usys==NULL || usys->units[0].name==NULL)
usys= &buDummyCollecton;
-
- if(split) {
+
+ /* split output makes sense only for length, mass and time */
+ if(split && (type==B_UNIT_LENGTH || type==B_UNIT_MASS || type==B_UNIT_TIME)) {
int i;
bUnitDef *unit_a, *unit_b;
double value_a, value_b;
@@ -443,10 +583,6 @@ int bUnit_ReplaceString(char *str, int len_max, char *str_prev, double scale_pre
for(unit= usys->units; unit->name; unit++) {
-
- if(unit->flag & B_UNIT_DEF_SUPPRESS)
- continue;
-
/* incase there are multiple instances */
while(unit_replace(str, len_max, str_tmp, scale_pref, unit))
change= 1;
@@ -458,18 +594,15 @@ int bUnit_ReplaceString(char *str, int len_max, char *str_prev, double scale_pre
bUnitCollection *usys_iter;
int system_iter;
- for(system_iter= 0; system_iter<UNIT_SYSTEM_MAX; system_iter++) {
+ for(system_iter= 0; system_iter<UNIT_SYSTEM_TOT; system_iter++) {
if (system_iter != system) {
usys_iter= unit_get_system(system_iter, type);
if (usys_iter) {
for(unit= usys_iter->units; unit->name; unit++) {
-
- if((unit->flag & B_UNIT_DEF_SUPPRESS) == 0) {
- int ofs = 0;
- /* incase there are multiple instances */
- while((ofs=unit_replace(str+ofs, len_max-ofs, str_tmp, scale_pref, unit)))
- change= 1;
- }
+ int ofs = 0;
+ /* incase there are multiple instances */
+ while((ofs=unit_replace(str+ofs, len_max-ofs, str_tmp, scale_pref, unit)))
+ change= 1;
}
}
}
@@ -482,10 +615,6 @@ int bUnit_ReplaceString(char *str, int len_max, char *str_prev, double scale_pre
if(str_prev) {
/* see which units the original value had */
for(unit= usys->units; unit->name; unit++) {
-
- if(unit->flag & B_UNIT_DEF_SUPPRESS)
- continue;
-
if (unit_find(str_prev, unit))
break;
}
@@ -543,6 +672,49 @@ int bUnit_ReplaceString(char *str, int len_max, char *str_prev, double scale_pre
return change;
}
+/* 45µm --> 45um */
+void bUnit_ToUnitAltName(char *str, int len_max, char *orig_str, int system, int type)
+{
+ bUnitCollection *usys = unit_get_system(system, type);
+
+ bUnitDef *unit;
+ bUnitDef *unit_def= unit_default(usys);
+
+ /* find and substitute all units */
+ for(unit= usys->units; unit->name; unit++) {
+ if(len_max > 0 && (unit->name_alt || unit == unit_def))
+ {
+ char *found= NULL;
+
+ found= unit_find_str(orig_str, unit->name_short);
+ if(found) {
+ int offset= found - orig_str;
+ int len_name= 0;
+
+ /* copy everything before the unit */
+ offset= (offset<len_max? offset: len_max);
+ strncpy(str, orig_str, offset);
+
+ str+= offset;
+ orig_str+= offset + strlen(unit->name_short);
+ len_max-= offset;
+
+ /* print the alt_name */
+ if(unit->name_alt)
+ len_name= snprintf(str, len_max, "%s", unit->name_alt);
+ else
+ len_name= 0;
+
+ len_name= (len_name<len_max? len_name: len_max);
+ str+= len_name;
+ len_max-= len_name;
+ }
+ }
+ }
+
+ /* finally copy the rest of the string */
+ strncpy(str, orig_str, len_max);
+}
double bUnit_ClosestScalar(double value, int system, int type)
{
@@ -566,6 +738,12 @@ double bUnit_BaseScalar(int system, int type)
}
/* external access */
+int bUnit_IsValid(int system, int type)
+{
+ return !(type < 0 || type >= B_UNIT_MAXDEF || system < 0 || system > UNIT_SYSTEM_TOT);
+}
+
+
void bUnit_GetSystem(void **usys_pt, int *len, int system, int type)
{
bUnitCollection *usys = unit_get_system(system, type);
diff --git a/source/blender/blenkernel/intern/world.c b/source/blender/blenkernel/intern/world.c
index 1d1b5ec16f7..42df92443f3 100644
--- a/source/blender/blenkernel/intern/world.c
+++ b/source/blender/blenkernel/intern/world.c
@@ -44,10 +44,6 @@
#include "BKE_main.h"
#include "BKE_icons.h"
-#ifndef DISABLE_PYTHON
-#include "BPY_extern.h"
-#endif
-
void free_world(World *wrld)
{
MTex *mtex;
@@ -69,9 +65,10 @@ void free_world(World *wrld)
World *add_world(char *name)
{
+ Main *bmain= G.main;
World *wrld;
- wrld= alloc_libblock(&G.main->world, ID_WO, name);
+ wrld= alloc_libblock(&bmain->world, ID_WO, name);
wrld->horr= 0.05f;
wrld->horg= 0.05f;
@@ -129,6 +126,7 @@ World *copy_world(World *wrld)
void make_local_world(World *wrld)
{
+ Main *bmain= G.main;
Scene *sce;
World *wrldn;
int local=0, lib=0;
@@ -146,7 +144,7 @@ void make_local_world(World *wrld)
return;
}
- sce= G.main->scene.first;
+ sce= bmain->scene.first;
while(sce) {
if(sce->world==wrld) {
if(sce->id.lib) lib= 1;
@@ -164,7 +162,7 @@ void make_local_world(World *wrld)
wrldn= copy_world(wrld);
wrldn->id.us= 0;
- sce= G.main->scene.first;
+ sce= bmain->scene.first;
while(sce) {
if(sce->world==wrld) {
if(sce->id.lib==0) {
diff --git a/source/blender/blenkernel/intern/writeffmpeg.c b/source/blender/blenkernel/intern/writeffmpeg.c
index 8ebf98ef930..6cd207f628c 100644
--- a/source/blender/blenkernel/intern/writeffmpeg.c
+++ b/source/blender/blenkernel/intern/writeffmpeg.c
@@ -515,6 +515,7 @@ static AVStream* alloc_video_stream(RenderData *rd, int codec_id, AVFormatContex
if (codec_id == CODEC_ID_XVID) {
/* arghhhh ... */
c->pix_fmt = PIX_FMT_YUV420P;
+ c->codec_tag = (('D'<<24) + ('I'<<16) + ('V'<<8) + 'X');
}
if (codec_id == CODEC_ID_H264) {
diff --git a/source/blender/blenkernel/intern/writeframeserver.c b/source/blender/blenkernel/intern/writeframeserver.c
index 0ec8837c0e7..b0c05c31fa1 100644
--- a/source/blender/blenkernel/intern/writeframeserver.c
+++ b/source/blender/blenkernel/intern/writeframeserver.c
@@ -45,7 +45,6 @@
#include <stdlib.h>
-#include "MEM_guardedalloc.h"
#include "DNA_userdef_types.h"
#include "BKE_global.h"
diff --git a/source/blender/blenlib/BLI_ghash.h b/source/blender/blenlib/BLI_ghash.h
index 92a99c9a3b4..0e985184f7a 100644
--- a/source/blender/blenlib/BLI_ghash.h
+++ b/source/blender/blenlib/BLI_ghash.h
@@ -36,12 +36,11 @@
extern "C" {
#endif
-#include "stdio.h"
-#include "stdlib.h"
-#include "string.h"
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
#include "BKE_utildefines.h"
-#include "MEM_guardedalloc.h"
#include "BLI_mempool.h"
#include "BLI_blenlib.h"
diff --git a/source/blender/blenlib/BLI_listbase.h b/source/blender/blenlib/BLI_listbase.h
index 599487354c3..c4dc0894f80 100644
--- a/source/blender/blenlib/BLI_listbase.h
+++ b/source/blender/blenlib/BLI_listbase.h
@@ -45,6 +45,7 @@ void BLI_insertlink(struct ListBase *listbase, void *vprevlink, void *vnewlink);
void *BLI_findlink(struct ListBase *listbase, int number);
int BLI_findindex(struct ListBase *listbase, void *vlink);
void *BLI_findstring(struct ListBase *listbase, const char *id, int offset);
+void *BLI_findstring_ptr(struct ListBase *listbase, const char *id, int offset);
int BLI_findstringindex(struct ListBase *listbase, const char *id, int offset);
void BLI_freelistN(struct ListBase *listbase);
void BLI_addtail(struct ListBase *listbase, void *vlink);
diff --git a/source/blender/blenlib/BLI_math_base.h b/source/blender/blenlib/BLI_math_base.h
index bb20cb7c8e1..48ad46282c2 100644
--- a/source/blender/blenlib/BLI_math_base.h
+++ b/source/blender/blenlib/BLI_math_base.h
@@ -155,6 +155,8 @@ MINLINE float interpf(float a, float b, float t);
MINLINE float minf(float a, float b);
MINLINE float maxf(float a, float b);
+MINLINE float signf(float f);
+
MINLINE float power_of_2(float f);
MINLINE float shell_angle_to_dist(float angle);
diff --git a/source/blender/blenlib/BLI_math_color.h b/source/blender/blenlib/BLI_math_color.h
index 72724c1c0f7..2f40520e59a 100644
--- a/source/blender/blenlib/BLI_math_color.h
+++ b/source/blender/blenlib/BLI_math_color.h
@@ -75,12 +75,21 @@ float srgb_to_linearrgb(float c);
float linearrgb_to_srgb(float c);
void srgb_to_linearrgb_v3_v3(float *col_to, float *col_from);
void linearrgb_to_srgb_v3_v3(float *col_to, float *col_from);
+
+/* rgba buffer convenience functions */
+void srgb_to_linearrgb_rgba_buf(float *col, int tot);
+void linearrgb_to_srgb_rgba_buf(float *col, int tot);
+void srgb_to_linearrgb_rgba_rgba_buf(float *col_to, float *col_from, int tot);
+void linearrgb_to_srgb_rgba_rgba_buf(float *col_to, float *col_from, int tot);
/************************** Other *************************/
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(char * rgb, float hue_offset);
+
/***************** lift/gamma/gain / ASC-CDL conversion *****************/
void lift_gamma_gain_to_asc_cdl(float *lift, float *gamma, float *gain, float *offset, float *slope, float *power);
diff --git a/source/blender/blenlib/BLI_math_rotation.h b/source/blender/blenlib/BLI_math_rotation.h
index ac8ed041ebc..1b3f4dced02 100644
--- a/source/blender/blenlib/BLI_math_rotation.h
+++ b/source/blender/blenlib/BLI_math_rotation.h
@@ -147,6 +147,7 @@ void mat4_to_eulO(float eul[3], short order, float mat[4][4]);
void axis_angle_to_eulO(float eul[3], short order, float axis[3], float angle);
void mat3_to_compatible_eulO(float eul[3], float old[3], short order, float mat[3][3]);
+void mat4_to_compatible_eulO(float eul[3], float old[3], short order, float mat[4][4]);
void rotate_eulO(float eul[3], short order, char axis, float angle);
diff --git a/source/blender/blenlib/BLI_math_vector.h b/source/blender/blenlib/BLI_math_vector.h
index 8ee93b0d658..2192c381611 100644
--- a/source/blender/blenlib/BLI_math_vector.h
+++ b/source/blender/blenlib/BLI_math_vector.h
@@ -151,9 +151,9 @@ void bisect_v3_v3v3v3(float r[3], float a[3], float b[3], float c[3]);
/*********************************** Other ***********************************/
-void print_v2(char *str, float a[2]);
-void print_v3(char *str, float a[3]);
-void print_v4(char *str, float a[4]);
+void print_v2(const char *str, const float a[2]);
+void print_v3(const char *str, const float a[3]);
+void print_v4(const char *str, const float a[4]);
MINLINE void normal_short_to_float_v3(float r[3], const short n[3]);
MINLINE void normal_float_to_short_v3(short r[3], const float n[3]);
diff --git a/source/blender/blenlib/BLI_path_util.h b/source/blender/blenlib/BLI_path_util.h
index b8c886d95a9..f01e1a25d8a 100644
--- a/source/blender/blenlib/BLI_path_util.h
+++ b/source/blender/blenlib/BLI_path_util.h
@@ -100,6 +100,7 @@ int BKE_rebase_path(char *abs, int abs_size, char *rel, int rel_size, const char
void BLI_getlastdir(const char* dir, char *last, int 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);
int BLI_replace_extension(char *path, int maxlen, const char *ext);
void BLI_uniquename(struct ListBase *list, void *vlink, const char defname[], char delim, short name_offs, short len);
void BLI_newname(char * name, int add);
diff --git a/source/blender/blenlib/BLI_rect.h b/source/blender/blenlib/BLI_rect.h
index 0b886c17309..13b12fc4e1e 100644
--- a/source/blender/blenlib/BLI_rect.h
+++ b/source/blender/blenlib/BLI_rect.h
@@ -60,7 +60,10 @@ 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);
void BLI_union_rctf(struct rctf *rcta, struct rctf *rctb);
void BLI_union_rcti(struct rcti *rcti1, struct rcti *rcti2);
+void BLI_copy_rcti_rctf(struct rcti *tar, const struct rctf *src);
+void print_rctf(const char *str, struct rctf *rect);
+void print_rcti(const char *str, struct rcti *rect);
#ifdef __cplusplus
}
diff --git a/source/blender/blenlib/BLI_storage.h b/source/blender/blenlib/BLI_storage.h
index 0d9db40fc97..e443a853324 100644
--- a/source/blender/blenlib/BLI_storage.h
+++ b/source/blender/blenlib/BLI_storage.h
@@ -40,14 +40,20 @@
#endif
#endif
+#ifdef WIN32
+/* for size_t, only needed on win32 for some reason */
+#include <stddef.h>
+#endif
+
struct direntry;
+
void BLI_adddirstrings(void);
void BLI_builddir(char *dirname, char *relname);
int BLI_compare(struct direntry *entry1, struct direntry *entry2);
-int BLI_filesize(int file);
-int BLI_filepathsize(const char *path);
+size_t BLI_filesize(int file);
+size_t BLI_filepathsize(const char *path);
double BLI_diskfree(char *dir);
char *BLI_getwdN(char *dir);
diff --git a/source/blender/blenlib/BLI_string.h b/source/blender/blenlib/BLI_string.h
index 39123a438df..ccb10190816 100644
--- a/source/blender/blenlib/BLI_string.h
+++ b/source/blender/blenlib/BLI_string.h
@@ -132,6 +132,9 @@ size_t BLI_strnlen(const char *str, size_t maxlen);
void BLI_timestr(double _time, char *str); /* time var is global */
+int BLI_utf8_invalid_byte(const char *str, int length);
+int BLI_utf8_invalid_strip(char *str, int length);
+
#ifdef __cplusplus
}
#endif
diff --git a/source/blender/blenlib/CMakeLists.txt b/source/blender/blenlib/CMakeLists.txt
index ab1dc3fe909..320d4ac783f 100644
--- a/source/blender/blenlib/CMakeLists.txt
+++ b/source/blender/blenlib/CMakeLists.txt
@@ -27,25 +27,31 @@
FILE(GLOB SRC intern/*.c)
SET(INC
- . ../makesdna ../blenkernel ../../../intern/guardedalloc ../include
- ../gpu ../../../intern/ghost
- ${FREETYPE_INCLUDE_DIRS}
+ .
+ ../makesdna
+ ../blenkernel
+ ../include
+ ../gpu
+ ../../../intern/ghost
+ ../../../intern/guardedalloc
${ZLIB_INC}
+ ${FREETYPE_INCLUDE_DIRS}
)
+# unused
+LIST(REMOVE_ITEM SRC "${CMAKE_CURRENT_SOURCE_DIR}/intern/BLI_bfile.c")
+
+
IF(CMAKE_SYSTEM_NAME MATCHES "Linux")
-SET(INC
- ${INC}
- ${BINRELOC_INC}
-)
+ LIST(APPEND INC "${BINRELOC_INC}")
ENDIF(CMAKE_SYSTEM_NAME MATCHES "Linux")
IF(WIN32)
- SET(INC ${INC} ${PTHREADS_INC})
+ LIST(APPEND INC ${PTHREADS_INC})
ENDIF(WIN32)
IF(WITH_OPENMP)
- ADD_DEFINITIONS(-DPARALLEL=1)
+ ADD_DEFINITIONS(-DPARALLEL=1)
ENDIF(WITH_OPENMP)
BLENDERLIB(bf_blenlib "${SRC}" "${INC}")
diff --git a/source/blender/blenlib/Makefile b/source/blender/blenlib/Makefile
index ae8a5afd0ba..d4dcfaeeabf 100644
--- a/source/blender/blenlib/Makefile
+++ b/source/blender/blenlib/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
# All rights reserved.
diff --git a/source/blender/blenlib/intern/BLI_ghash.c b/source/blender/blenlib/intern/BLI_ghash.c
index 11756ada40e..6daa2928716 100644
--- a/source/blender/blenlib/intern/BLI_ghash.c
+++ b/source/blender/blenlib/intern/BLI_ghash.c
@@ -28,10 +28,10 @@
* A general (pointer -> pointer) hash table ADT
*/
+#include "MEM_guardedalloc.h"
#include "BLI_ghash.h"
#include "BLO_sys_types.h" // for intptr_t support
-
/***/
unsigned int hashsizes[]= {
diff --git a/source/blender/blenlib/intern/Makefile b/source/blender/blenlib/intern/Makefile
index 7ef44aff881..018fd3477df 100644
--- a/source/blender/blenlib/intern/Makefile
+++ b/source/blender/blenlib/intern/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
# All rights reserved.
diff --git a/source/blender/blenlib/intern/bpath.c b/source/blender/blenlib/intern/bpath.c
index d1a8de14181..cf7eb873409 100644
--- a/source/blender/blenlib/intern/bpath.c
+++ b/source/blender/blenlib/intern/bpath.c
@@ -633,7 +633,7 @@ static int findFileRecursive(char *filename_new, const char *dirname, const char
if (S_ISREG(status.st_mode)) { /* is file */
if (strncmp(filename, de->d_name, FILE_MAX)==0) { /* name matches */
/* open the file to read its size */
- size = BLI_filepathsize(path);
+ size = status.st_size;
if ((size > 0) && (size > *filesize)) { /* find the biggest file */
*filesize = size;
BLI_strncpy(filename_new, path, FILE_MAX);
diff --git a/source/blender/blenlib/intern/dynlib.c b/source/blender/blenlib/intern/dynlib.c
index f42b342e326..55d6ce7a241 100644
--- a/source/blender/blenlib/intern/dynlib.c
+++ b/source/blender/blenlib/intern/dynlib.c
@@ -87,7 +87,7 @@ char *PIL_dynlib_get_error_as_string(PILdynlib* lib) {
return buf;
}
- return err;
+ return NULL;
}
void PIL_dynlib_close(PILdynlib *lib) {
diff --git a/source/blender/blenlib/intern/fileops.c b/source/blender/blenlib/intern/fileops.c
index fde770c238c..06b427240ba 100644
--- a/source/blender/blenlib/intern/fileops.c
+++ b/source/blender/blenlib/intern/fileops.c
@@ -41,12 +41,12 @@
#ifdef WIN32
#include <io.h>
#include "BLI_winstuff.h"
+#include "BLI_callbacks.h"
#else
#include <unistd.h> // for read close
#include <sys/param.h>
#endif
-
#include "BLI_blenlib.h"
#include "BKE_utildefines.h"
diff --git a/source/blender/blenlib/intern/listbase.c b/source/blender/blenlib/intern/listbase.c
index 0a6831558d1..776f2d085df 100644
--- a/source/blender/blenlib/intern/listbase.c
+++ b/source/blender/blenlib/intern/listbase.c
@@ -374,6 +374,27 @@ void *BLI_findstring(ListBase *listbase, const char *id, int offset)
return NULL;
}
+void *BLI_findstring_ptr(ListBase *listbase, const char *id, int offset)
+{
+ Link *link= NULL;
+ const char *id_iter;
+
+ if (listbase == NULL) return NULL;
+
+ link= listbase->first;
+ while (link) {
+ /* exact copy of BLI_findstring(), except for this line */
+ id_iter= *((const char **)(((const char *)link) + offset));
+
+ if(id[0] == id_iter[0] && strcmp(id, id_iter)==0)
+ return link;
+
+ link= link->next;
+ }
+
+ return NULL;
+}
+
int BLI_findstringindex(ListBase *listbase, const char *id, int offset)
{
Link *link= NULL;
diff --git a/source/blender/blenlib/intern/math_base_inline.c b/source/blender/blenlib/intern/math_base_inline.c
index b364ff73e4f..fc413457122 100644
--- a/source/blender/blenlib/intern/math_base_inline.c
+++ b/source/blender/blenlib/intern/math_base_inline.c
@@ -122,5 +122,10 @@ MINLINE float maxf(float a, float b)
return (a > b)? a: b;
}
+MINLINE float signf(float f)
+{
+ return (f < 0.f)? -1.f: 1.f;
+}
+
#endif /* BLI_MATH_BASE_INLINE */
diff --git a/source/blender/blenlib/intern/math_color.c b/source/blender/blenlib/intern/math_color.c
index 396f2c52058..2b6a091cc8d 100644
--- a/source/blender/blenlib/intern/math_color.c
+++ b/source/blender/blenlib/intern/math_color.c
@@ -372,6 +372,42 @@ void linearrgb_to_srgb_v3_v3(float *col_to, float *col_from)
col_to[2] = linearrgb_to_srgb(col_from[2]);
}
+/* todo, should these be moved elsewhere?, they dont belong in imbuf */
+void srgb_to_linearrgb_rgba_buf(float *col, int tot)
+{
+ while(tot--) {
+ srgb_to_linearrgb_v3_v3(col, col);
+ col += 4;
+ }
+}
+
+void linearrgb_to_srgb_rgba_buf(float *col, int tot)
+{
+ while(tot--) {
+ linearrgb_to_srgb_v3_v3(col, col);
+ col += 4;
+ }
+}
+
+void srgb_to_linearrgb_rgba_rgba_buf(float *col_to, float *col_from, int tot)
+{
+ while(tot--) {
+ srgb_to_linearrgb_v3_v3(col_to, col_from);
+ col_to[3]= col_from[3];
+ col_to += 4;
+ col_from += 4;
+ }
+}
+
+void linearrgb_to_srgb_rgba_rgba_buf(float *col_to, float *col_from, int tot)
+{
+ while(tot--) {
+ linearrgb_to_srgb_v3_v3(col_to, col_from);
+ col_to[3]= col_from[3];
+ col_to += 4;
+ col_from += 4;
+ }
+}
void minmax_rgb(short c[])
{
@@ -430,3 +466,28 @@ void lift_gamma_gain_to_asc_cdl(float *lift, float *gamma, float *gain, float *o
}
}
+/* ******************************************** other ************************************************* */
+
+/* Applies an hue offset to a float rgb color */
+void rgb_float_set_hue_float_offset(float rgb[3], float hue_offset)
+{
+ float hsv[3];
+
+ rgb_to_hsv(rgb[0], rgb[1], rgb[2], hsv, hsv+1, hsv+2);
+
+ hsv[0]+= hue_offset;
+ if(hsv[0]>1.0) hsv[0]-=1.0;
+ else if(hsv[0]<0.0) hsv[0]+= 1.0;
+
+ hsv_to_rgb(hsv[0], hsv[1], hsv[2], rgb, rgb+1, rgb+2);
+}
+
+/* Applies an hue offset to a byte rgb color */
+void rgb_byte_set_hue_float_offset(char rgb[3], float hue_offset)
+{
+ float rgb_float[3];
+
+ rgb_byte_to_float(rgb, rgb_float);
+ rgb_float_set_hue_float_offset(rgb_float, hue_offset);
+ rgb_float_to_byte(rgb_float, rgb);
+}
diff --git a/source/blender/blenlib/intern/math_geom.c b/source/blender/blenlib/intern/math_geom.c
index fd0829ebe3b..68b1feea632 100644
--- a/source/blender/blenlib/intern/math_geom.c
+++ b/source/blender/blenlib/intern/math_geom.c
@@ -841,10 +841,8 @@ int isect_line_line_v3(float v1[3], float v2[3], float v3[3], float v4[3], float
sub_v3_v3v3(a, v2, v1);
sub_v3_v3v3(b, v4, v3);
- copy_v3_v3(dir1, a);
- normalize_v3(dir1);
- copy_v3_v3(dir2, b);
- normalize_v3(dir2);
+ normalize_v3_v3(dir1, a);
+ normalize_v3_v3(dir2, b);
d = dot_v3v3(dir1, dir2);
if (d == 1.0f || d == -1.0f) {
/* colinear */
@@ -908,10 +906,8 @@ int isect_line_line_strict_v3(float v1[3], float v2[3], float v3[3], float v4[3]
sub_v3_v3v3(a, v2, v1);
sub_v3_v3v3(b, v4, v3);
- copy_v3_v3(dir1, a);
- normalize_v3(dir1);
- copy_v3_v3(dir2, b);
- normalize_v3(dir2);
+ normalize_v3_v3(dir1, a);
+ normalize_v3_v3(dir2, b);
d = dot_v3v3(dir1, dir2);
if (d == 1.0f || d == -1.0f || d == 0) {
/* colinear or one vector is zero-length*/
diff --git a/source/blender/blenlib/intern/math_geom_inline.c b/source/blender/blenlib/intern/math_geom_inline.c
index 697ac8dc782..f2d8e27cbd5 100644
--- a/source/blender/blenlib/intern/math_geom_inline.c
+++ b/source/blender/blenlib/intern/math_geom_inline.c
@@ -15,7 +15,7 @@
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software Foundation,
- * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
* The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
* All rights reserved.
diff --git a/source/blender/blenlib/intern/math_matrix.c b/source/blender/blenlib/intern/math_matrix.c
index 6c06da2e32d..3b5ffa2d442 100644
--- a/source/blender/blenlib/intern/math_matrix.c
+++ b/source/blender/blenlib/intern/math_matrix.c
@@ -595,9 +595,7 @@ void transpose_m4(float mat[][4])
void orthogonalize_m3(float mat[][3], int axis)
{
float size[3];
- size[0] = len_v3(mat[0]);
- size[1] = len_v3(mat[1]);
- size[2] = len_v3(mat[2]);
+ mat3_to_size(size, mat);
normalize_v3(mat[axis]);
switch(axis)
{
@@ -658,9 +656,7 @@ void orthogonalize_m3(float mat[][3], int axis)
void orthogonalize_m4(float mat[][4], int axis)
{
float size[3];
- size[0] = len_v3(mat[0]);
- size[1] = len_v3(mat[1]);
- size[2] = len_v3(mat[2]);
+ mat4_to_size(size, mat);
normalize_v3(mat[axis]);
switch(axis)
{
@@ -1002,7 +998,7 @@ void rotate_m4(float mat[][4], const char axis, const float angle)
void blend_m3_m3m3(float out[][3], float dst[][3], float src[][3], float srcweight)
{
float squat[4], dquat[4], fquat[4];
- float ssize[3], dsize[3], fsize[4];
+ float ssize[3], dsize[3], fsize[3];
float rmat[3][3], smat[3][3];
mat3_to_quat(dquat,dst);
@@ -1024,7 +1020,7 @@ void blend_m3_m3m3(float out[][3], float dst[][3], float src[][3], float srcweig
void blend_m4_m4m4(float out[][4], float dst[][4], float src[][4], float srcweight)
{
float squat[4], dquat[4], fquat[4];
- float ssize[3], dsize[3], fsize[4];
+ float ssize[3], dsize[3], fsize[3];
float sloc[3], dloc[3], floc[3];
mat4_to_quat(dquat,dst);
diff --git a/source/blender/blenlib/intern/math_rotation.c b/source/blender/blenlib/intern/math_rotation.c
index 4d015e527a8..b8cef511293 100644
--- a/source/blender/blenlib/intern/math_rotation.c
+++ b/source/blender/blenlib/intern/math_rotation.c
@@ -135,10 +135,7 @@ void mul_fac_qt_fl(float *q, const float fac)
float si= (float)sin(angle);
q[0]= co;
normalize_v3(q+1);
- q[1]*= si;
- q[2]*= si;
- q[3]*= si;
-
+ mul_v3_fl(q+1, si);
}
void quat_to_mat3(float m[][3], float *q)
@@ -595,9 +592,8 @@ void axis_angle_to_quat(float q[4], float axis[3], float angle)
{
float nor[3];
float si;
-
- copy_v3_v3(nor, axis);
- normalize_v3(nor);
+
+ normalize_v3_v3(nor, axis);
angle /= 2;
si = (float)sin(angle);
@@ -654,8 +650,7 @@ void axis_angle_to_mat3(float mat[3][3],float axis[3], float angle)
float nor[3], nsi[3], co, si, ico;
/* normalise the axis first (to remove unwanted scaling) */
- copy_v3_v3(nor, axis);
- normalize_v3(nor);
+ normalize_v3_v3(nor, axis);
/* now convert this to a 3x3 matrix */
co= (float)cos(angle);
@@ -1254,6 +1249,15 @@ void mat3_to_compatible_eulO(float eul[3], float oldrot[3], short order,float ma
copy_v3_v3(eul, eul1);
}
+void mat4_to_compatible_eulO(float eul[3], float oldrot[3], short order,float M[4][4])
+{
+ float m[3][3];
+
+ /* for now, we'll just do this the slow way (i.e. copying matrices) */
+ copy_m3_m4(m, M);
+ normalize_m3(m);
+ mat3_to_compatible_eulO(eul, oldrot, order, m);
+}
/* rotate the given euler by the given angle on the specified axis */
// NOTE: is this safe to do with different axis orders?
void rotate_eulO(float beul[3], short order, char axis, float ang)
diff --git a/source/blender/blenlib/intern/math_vector.c b/source/blender/blenlib/intern/math_vector.c
index 9baf897c830..6d908ddb1cd 100644
--- a/source/blender/blenlib/intern/math_vector.c
+++ b/source/blender/blenlib/intern/math_vector.c
@@ -120,10 +120,8 @@ float angle_v3v3(float *v1, float *v2)
{
float vec1[3], vec2[3];
- copy_v3_v3(vec1, v1);
- copy_v3_v3(vec2, v2);
- normalize_v3(vec1);
- normalize_v3(vec2);
+ normalize_v3_v3(vec1, v1);
+ normalize_v3_v3(vec2, v2);
return angle_normalized_v3v3(vec1, vec2);
}
@@ -300,17 +298,17 @@ void ortho_basis_v3v3_v3(float *v1, float *v2, float *v)
/*********************************** Other ***********************************/
-void print_v2(char *str, float v[2])
+void print_v2(const char *str, const float v[2])
{
printf("%s: %.3f %.3f\n", str, v[0], v[1]);
}
-void print_v3(char *str, float v[3])
+void print_v3(const char *str, const float v[3])
{
printf("%s: %.3f %.3f %.3f\n", str, v[0], v[1], v[2]);
}
-void print_v4(char *str, float v[4])
+void print_v4(const char *str, const float v[4])
{
printf("%s: %.3f %.3f %.3f %.3f\n", str, v[0], v[1], v[2], v[3]);
}
diff --git a/source/blender/blenlib/intern/path_util.c b/source/blender/blenlib/intern/path_util.c
index 9a56722b5d9..384f3aa541f 100644
--- a/source/blender/blenlib/intern/path_util.c
+++ b/source/blender/blenlib/intern/path_util.c
@@ -48,6 +48,12 @@
#include "GHOST_Path-api.h"
+#if defined WIN32 && !defined _LIBC
+# include "BLI_fnmatch.h" /* use fnmatch included in blenlib */
+#else
+# define _GNU_SOURCE
+# include <fnmatch.h>
+#endif
#ifdef WIN32
#include <io.h>
@@ -311,10 +317,17 @@ void BLI_cleanup_file(const char *relabase, char *dir)
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 useual way below
+ * simply strip this prefix then evaluate the path as useual. pythons os.path.normpath() does this */
+ while((strncmp(dir, "/../", 4)==0)) {
+ memmove( dir, dir + 4, strlen(dir + 4) + 1 );
+ }
while ( (start = strstr(dir, "/../")) ) {
- eind = start + strlen("/../") - 1;
+ eind = start + (4 - 1) /* strlen("/../") - 1 */;
a = start-dir-1;
while (a>0) {
if (dir[a] == '/') break;
@@ -328,12 +341,12 @@ void BLI_cleanup_file(const char *relabase, char *dir)
}
while ( (start = strstr(dir,"/./")) ){
- eind = start + strlen("/./") - 1;
+ eind = start + (3 - 1) /* strlen("/./") - 1 */;
memmove( start, eind, strlen(eind)+1 );
}
while ( (start = strstr(dir,"//" )) ){
- eind = start + strlen("//") - 1;
+ eind = start + (2 - 1) /* strlen("//") - 1 */;
memmove( start, eind, strlen(eind)+1 );
}
@@ -586,7 +599,7 @@ int BLI_path_abs(char *path, const char *basepath)
BLI_strncpy(tmp, path, FILE_MAX);
}
#else
- BLI_strncpy(tmp, path, FILE_MAX);
+ BLI_strncpy(tmp, path, sizeof(tmp));
/* Check for loading a windows path on a posix system
* in this case, there is no use in trying C:/ since it
@@ -603,7 +616,7 @@ int BLI_path_abs(char *path, const char *basepath)
#endif
- BLI_strncpy(base, basepath, FILE_MAX);
+ BLI_strncpy(base, basepath, sizeof(base));
BLI_cleanup_file(NULL, base);
@@ -626,17 +639,19 @@ int BLI_path_abs(char *path, const char *basepath)
BLI_strncpy(path, tmp+2, FILE_MAX);
memcpy(tmp, base, baselen);
- strcpy(tmp+baselen, path);
- strcpy(path, tmp);
+ BLI_strncpy(tmp+baselen, path, sizeof(tmp)-baselen);
+ BLI_strncpy(path, tmp, FILE_MAX);
} else {
- strcpy(path, tmp+2);
+ BLI_strncpy(path, tmp+2, FILE_MAX);
}
} else {
- strcpy(path, tmp);
+ BLI_strncpy(path, tmp, FILE_MAX);
}
if (path[0]!='\0') {
if ( path[strlen(path)-1]=='/') {
+ /* remove the '/' so we avoid BLI_cleanup_dir adding an extra \ in WIN32 */
+ path[strlen(path)-1] = '\0';
BLI_cleanup_dir(NULL, path);
} else {
BLI_cleanup_file(NULL, path);
@@ -1160,7 +1175,7 @@ void BLI_make_existing_file(char *name)
{
char di[FILE_MAXDIR+FILE_MAXFILE], fi[FILE_MAXFILE];
- strcpy(di, name);
+ BLI_strncpy(di, name, sizeof(di));
BLI_splitdirstring(di, fi);
/* test exist */
@@ -1276,6 +1291,36 @@ int BLI_testextensie_array(const char *str, const char **ext_array)
return 0;
}
+/* semicolon separated wildcards, eg:
+ * '*.zip;*.py;*.exe' */
+int BLI_testextensie_glob(const char *str, const char *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;
+ }
+ else {
+ len_ext= sizeof(pattern);
+ }
+
+ BLI_strncpy(pattern, ext_step, len_ext);
+
+ if(fnmatch(pattern, str, FNM_CASEFOLD)==0) {
+ return 1;
+ }
+ ext_step += len_ext;
+ }
+
+ return 0;
+}
+
+
int BLI_replace_extension(char *path, int maxlen, const char *ext)
{
int a;
diff --git a/source/blender/blenlib/intern/pbvh.c b/source/blender/blenlib/intern/pbvh.c
index 7069eeea510..bd721871f0a 100644
--- a/source/blender/blenlib/intern/pbvh.c
+++ b/source/blender/blenlib/intern/pbvh.c
@@ -24,6 +24,8 @@
#include "DNA_meshdata_types.h"
+#include "MEM_guardedalloc.h"
+
#include "BLI_math.h"
#include "BLI_ghash.h"
#include "BLI_pbvh.h"
diff --git a/source/blender/blenlib/intern/rct.c b/source/blender/blenlib/intern/rct.c
index 5466acdba9f..aa424c1c2bb 100644
--- a/source/blender/blenlib/intern/rct.c
+++ b/source/blender/blenlib/intern/rct.c
@@ -36,6 +36,8 @@
*/
#include "DNA_vec_types.h"
+#include <stdio.h>
+#include <math.h>
int BLI_rcti_is_empty(rcti * rect)
{
@@ -222,3 +224,21 @@ int BLI_isect_rcti(rcti *src1, rcti *src2, rcti *dest)
return 0;
}
}
+
+void BLI_copy_rcti_rctf(rcti *tar, const rctf *src)
+{
+ tar->xmin= floor(src->xmin + 0.5);
+ tar->xmax= floor((src->xmax - src->xmin) + 0.5);
+ tar->ymin= floor(src->ymin + 0.5);
+ tar->ymax= floor((src->ymax - src->ymin) + 0.5);
+}
+
+void print_rctf(const char *str, rctf *rect)
+{
+ printf("%s: xmin %.3f, xmax %.3f, ymin %.3f, ymax %.3f\n", str, rect->xmin, rect->xmax, rect->ymin, rect->ymax);
+}
+
+void print_rcti(const char *str, rcti *rect)
+{
+ printf("%s: xmin %d, xmax %d, ymin %d, ymax %d\n", str, rect->xmin, rect->xmax, rect->ymin, rect->ymax);
+}
diff --git a/source/blender/blenlib/intern/storage.c b/source/blender/blenlib/intern/storage.c
index edb6aecabb1..9c31557619b 100644
--- a/source/blender/blenlib/intern/storage.c
+++ b/source/blender/blenlib/intern/storage.c
@@ -237,8 +237,19 @@ void BLI_builddir(char *dirname, char *relname)
if (newnum){
- if (files) files=(struct direntry *)realloc(files,(totnum+newnum) * sizeof(struct direntry));
- else files=(struct direntry *)malloc(newnum * sizeof(struct direntry));
+ if(files) {
+ void *tmp= realloc(files, (totnum+newnum) * sizeof(struct direntry));
+ if(tmp) {
+ files= (struct direntry *)tmp;
+ }
+ else { /* realloc fail */
+ free(files);
+ files= NULL;
+ }
+ }
+
+ if(files==NULL)
+ files=(struct direntry *)malloc(newnum * sizeof(struct direntry));
if (files){
dlink = (struct dirlink *) dirbase->first;
@@ -410,7 +421,7 @@ unsigned int BLI_getdir(char *dirname, struct direntry **filelist)
}
-int BLI_filesize(int file)
+size_t BLI_filesize(int file)
{
struct stat buf;
@@ -419,11 +430,11 @@ int BLI_filesize(int file)
return (buf.st_size);
}
-int BLI_filepathsize(const char *path)
+size_t BLI_filepathsize(const char *path)
{
int size, file = open(path, O_BINARY|O_RDONLY);
- if (file < 0)
+ if (file == -1)
return -1;
size = BLI_filesize(file);
diff --git a/source/blender/blenlib/intern/string.c b/source/blender/blenlib/intern/string.c
index c344d8c0711..76193ba9a13 100644
--- a/source/blender/blenlib/intern/string.c
+++ b/source/blender/blenlib/intern/string.c
@@ -348,3 +348,114 @@ size_t BLI_strnlen(const char *str, size_t maxlen)
const char *end = memchr(str, '\0', maxlen);
return end ? (size_t) (end - str) : maxlen;
}
+
+/* from libswish3, originally called u8_isvalid(),
+ * modified to return the index of the bad character (byte index not utf).
+ * http://svn.swish-e.org/libswish3/trunk/src/libswish3/utf8.c r3044 - campbell */
+
+/* based on the valid_utf8 routine from the PCRE library by Philip Hazel
+
+ length is in bytes, since without knowing whether the string is valid
+ it's hard to know how many characters there are! */
+
+static const char trailingBytesForUTF8[256] = {
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,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,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+ 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,4,4,4,4,5,5,5,5
+};
+
+int BLI_utf8_invalid_byte(const char *str, int length)
+{
+ const unsigned char *p, *pend = (unsigned char*)str + length;
+ unsigned char c;
+ int ab;
+
+ for (p = (unsigned char*)str; p < pend; p++) {
+ c = *p;
+ if (c < 128)
+ continue;
+ if ((c & 0xc0) != 0xc0)
+ goto utf8_error;
+ ab = trailingBytesForUTF8[c];
+ if (length < ab)
+ goto utf8_error;
+ length -= ab;
+
+ p++;
+ /* Check top bits in the second byte */
+ if ((*p & 0xc0) != 0x80)
+ goto utf8_error;
+
+ /* Check for overlong sequences for each different length */
+ switch (ab) {
+ /* Check for xx00 000x */
+ case 1:
+ if ((c & 0x3e) == 0) goto utf8_error;
+ continue; /* We know there aren't any more bytes to check */
+
+ /* Check for 1110 0000, xx0x xxxx */
+ case 2:
+ if (c == 0xe0 && (*p & 0x20) == 0) goto utf8_error;
+ break;
+
+ /* Check for 1111 0000, xx00 xxxx */
+ case 3:
+ if (c == 0xf0 && (*p & 0x30) == 0) goto utf8_error;
+ break;
+
+ /* Check for 1111 1000, xx00 0xxx */
+ case 4:
+ if (c == 0xf8 && (*p & 0x38) == 0) goto utf8_error;
+ break;
+
+ /* Check for leading 0xfe or 0xff,
+ and then for 1111 1100, xx00 00xx */
+ case 5:
+ if (c == 0xfe || c == 0xff ||
+ (c == 0xfc && (*p & 0x3c) == 0)) goto utf8_error;
+ break;
+ }
+
+ /* Check for valid bytes after the 2nd, if any; all must start 10 */
+ while (--ab > 0) {
+ if ((*(p+1) & 0xc0) != 0x80) goto utf8_error;
+ p++; /* do this after so we get usable offset - campbell */
+ }
+ }
+
+ return -1;
+
+utf8_error:
+
+ return (int)((char *)p - (char *)str) - 1;
+}
+
+int BLI_utf8_invalid_strip(char *str, int length)
+{
+ int bad_char, tot= 0;
+
+ while((bad_char= BLI_utf8_invalid_byte(str, length)) != -1) {
+ str += bad_char;
+ length -= bad_char;
+
+ if(length == 0) {
+ /* last character bad, strip it */
+ *str= '\0';
+ tot++;
+ break;
+ }
+ else {
+ /* strip, keep looking */
+ memmove(str, str + 1, length);
+ tot++;
+ }
+ }
+
+ return tot;
+}
+
diff --git a/source/blender/blenlib/intern/winstuff.c b/source/blender/blenlib/intern/winstuff.c
index f2261546f5c..b3438590321 100644
--- a/source/blender/blenlib/intern/winstuff.c
+++ b/source/blender/blenlib/intern/winstuff.c
@@ -34,7 +34,6 @@
#include <stdio.h>
#include "MEM_guardedalloc.h"
-
#include "BLI_path_util.h"
#include "BLI_string.h"
#define WIN32_SKIP_HKEY_PROTECTION // need to use HKEY
diff --git a/source/blender/blenloader/BLO_readfile.h b/source/blender/blenloader/BLO_readfile.h
index d6418f426c8..719a3c065ae 100644
--- a/source/blender/blenloader/BLO_readfile.h
+++ b/source/blender/blenloader/BLO_readfile.h
@@ -111,38 +111,6 @@ BlendFileData *BLO_read_from_memfile(struct Main *oldmain, const char *filename,
void
BLO_blendfiledata_free(
BlendFileData *bfd);
-
-/**
- * Convert an idcode into a name.
- *
- * @param code The code to convert.
- * @return A static string representing the name of
- * the code.
- */
- char*
-BLO_idcode_to_name(
- int code);
-
-/**
- * Convert an idcode into a name (plural).
- *
- * @param code The code to convert.
- * @return A static string representing the name of
- * the code.
- */
- char*
-BLO_idcode_to_name_plural(
- int code);
-
-/**
- * Convert a name into an idcode (ie. ID_SCE)
- *
- * @param name The name to convert.
- * @return The code for the name, or 0 if invalid.
- */
- int
-BLO_idcode_from_name(
- char *name);
/**
* Open a blendhandle from a file path.
@@ -155,6 +123,19 @@ BLO_blendhandle_from_file(
char *file);
/**
+ * Open a blendhandle from memory.
+ *
+ * @param mem The data to load from.
+ * @param memsize The size of the data.
+ * @return A handle on success, or NULL on failure.
+ */
+
+ BlendHandle*
+BLO_blendhandle_from_memory(
+ void *mem,
+ int memsize);
+
+/**
* Gets the names of all the datablocks in a file
* of a certain type (ie. All the scene names in
* a file).
diff --git a/source/blender/blenloader/CMakeLists.txt b/source/blender/blenloader/CMakeLists.txt
index cae0fccd12a..cc70d3355f2 100644
--- a/source/blender/blenloader/CMakeLists.txt
+++ b/source/blender/blenloader/CMakeLists.txt
@@ -27,10 +27,15 @@
FILE(GLOB SRC intern/*.c)
SET(INC
- . ../../../intern/guardedalloc ../blenlib ../blenkernel
- ../makesdna ../readblenfile ../include ../makesrna
- ../python ../../kernel/gen_messaging
+ .
+ ../blenlib
+ ../blenkernel
+ ../makesdna
+ ../readblenfile
+ ../include
+ ../makesrna
../render/extern/include
+ ../../../intern/guardedalloc
${ZLIB_INC}
)
diff --git a/source/blender/blenloader/Makefile b/source/blender/blenloader/Makefile
index 4ffc558f889..069bad4d371 100644
--- a/source/blender/blenloader/Makefile
+++ b/source/blender/blenloader/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
# All rights reserved.
diff --git a/source/blender/blenloader/intern/Makefile b/source/blender/blenloader/intern/Makefile
index f4690fcc066..fe178ea2610 100644
--- a/source/blender/blenloader/intern/Makefile
+++ b/source/blender/blenloader/intern/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
# All rights reserved.
diff --git a/source/blender/blenloader/intern/readblenentry.c b/source/blender/blenloader/intern/readblenentry.c
index 6101012203a..b637d538b91 100644
--- a/source/blender/blenloader/intern/readblenentry.c
+++ b/source/blender/blenloader/intern/readblenentry.c
@@ -28,6 +28,7 @@
* .blend file reading entry point
*/
+#include <stddef.h>
#include "BLI_storage.h" /* _LARGEFILE_SOURCE */
#include <stdlib.h>
@@ -46,6 +47,7 @@
#include "BKE_main.h"
#include "BKE_library.h" // for free_main
+#include "BKE_idcode.h"
#include "BKE_report.h"
#include "BLO_readfile.h"
@@ -61,118 +63,25 @@
#include "BLI_winstuff.h"
#endif
- /**
- * IDType stuff, I plan to move this
- * out into its own file + prefix, and
- * make sure all IDType handling goes through
- * these routines.
- */
-
-typedef struct {
- unsigned short code;
- char *name, *plural;
-
- int flags;
-#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", "gpencil", 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", "keys", 0},
- { ID_LA, "Lamp", "lamps", IDTYPE_FLAGS_ISLINKABLE},
- { ID_LI, "Library", "libraries", 0},
- { 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_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},
-};
-static int nidtypes= sizeof(idtypes)/sizeof(idtypes[0]);
-
/* local prototypes --------------------- */
void BLO_blendhandle_print_sizes(BlendHandle *, void *);
-
-static IDType *idtype_from_name(char *str)
-{
- int i= nidtypes;
-
- while (i--)
- if (BLI_streq(str, idtypes[i].name))
- return &idtypes[i];
-
- return NULL;
-}
-static IDType *idtype_from_code(int code)
-{
- int i= nidtypes;
-
- while (i--)
- if (code==idtypes[i].code)
- return &idtypes[i];
-
- return NULL;
-}
-
-static int bheadcode_is_idcode(int code)
-{
- return idtype_from_code(code)?1:0;
-}
-
-static int idcode_is_linkable(int code) {
- IDType *idt= idtype_from_code(code);
- return idt?(idt->flags&IDTYPE_FLAGS_ISLINKABLE):0;
-}
-
-char *BLO_idcode_to_name(int code)
+ /* Access routines used by filesel. */
+
+BlendHandle *BLO_blendhandle_from_file(char *file)
{
- IDType *idt= idtype_from_code(code);
-
- return idt?idt->name:NULL;
-}
+ BlendHandle *bh;
-int BLO_idcode_from_name(char *name)
-{
- IDType *idt= idtype_from_name(name);
-
- return idt?idt->code:0;
-}
+ bh= (BlendHandle*)blo_openblenderfile(file, NULL);
-char *BLO_idcode_to_name_plural(int code)
-{
- IDType *idt= idtype_from_code(code);
-
- return idt?idt->plural:NULL;
+ return bh;
}
- /* Access routines used by filesel. */
-
-BlendHandle *BLO_blendhandle_from_file(char *file)
+BlendHandle *BLO_blendhandle_from_memory(void *mem, int memsize)
{
BlendHandle *bh;
- bh= (BlendHandle*)blo_openblenderfile(file, NULL);
+ bh= (BlendHandle*)blo_openblendermemory(mem, memsize, NULL);
return bh;
}
@@ -308,13 +217,13 @@ LinkNode *BLO_blendhandle_get_linkable_groups(BlendHandle *bh)
for (bhead= blo_firstbhead(fd); bhead; bhead= blo_nextbhead(fd, bhead)) {
if (bhead->code==ENDB) {
break;
- } else if (bheadcode_is_idcode(bhead->code)) {
- if (idcode_is_linkable(bhead->code)) {
- char *str= BLO_idcode_to_name(bhead->code);
+ } else if (BKE_idcode_is_valid(bhead->code)) {
+ if (BKE_idcode_is_linkable(bhead->code)) {
+ const char *str= BKE_idcode_to_name(bhead->code);
- if (!BLI_ghash_haskey(gathered, str)) {
+ if (!BLI_ghash_haskey(gathered, (void *)str)) {
BLI_linklist_prepend(&names, strdup(str));
- BLI_ghash_insert(gathered, str, NULL);
+ BLI_ghash_insert(gathered, (void *)str, NULL);
}
}
}
diff --git a/source/blender/blenloader/intern/readfile.c b/source/blender/blenloader/intern/readfile.c
index 81b5d7a5ef7..4385caa19df 100644
--- a/source/blender/blenloader/intern/readfile.c
+++ b/source/blender/blenloader/intern/readfile.c
@@ -47,26 +47,19 @@
#endif
#include "DNA_anim_types.h"
-#include "DNA_action_types.h"
#include "DNA_armature_types.h"
-#include "DNA_ID.h"
#include "DNA_actuator_types.h"
-#include "DNA_boid_types.h"
#include "DNA_brush_types.h"
#include "DNA_camera_types.h"
#include "DNA_cloth_types.h"
-#include "DNA_color_types.h"
#include "DNA_controller_types.h"
#include "DNA_constraint_types.h"
-#include "DNA_curve_types.h"
-#include "DNA_customdata_types.h"
#include "DNA_effect_types.h"
#include "DNA_fileglobal_types.h"
#include "DNA_genfile.h"
#include "DNA_group_types.h"
#include "DNA_gpencil_types.h"
#include "DNA_ipo_types.h"
-#include "DNA_image_types.h"
#include "DNA_key_types.h"
#include "DNA_lattice_types.h"
#include "DNA_lamp_types.h"
@@ -74,16 +67,10 @@
#include "DNA_material_types.h"
#include "DNA_mesh_types.h"
#include "DNA_meshdata_types.h"
-#include "DNA_modifier_types.h"
#include "DNA_nla_types.h"
#include "DNA_node_types.h"
-#include "DNA_object_types.h"
-#include "DNA_object_force.h"
#include "DNA_object_fluidsim.h" // NT
-#include "DNA_outliner_types.h"
-#include "DNA_object_force.h"
#include "DNA_packedFile_types.h"
-#include "DNA_particle_types.h"
#include "DNA_property_types.h"
#include "DNA_text_types.h"
#include "DNA_view3d_types.h"
@@ -95,13 +82,11 @@
#include "DNA_smoke_types.h"
#include "DNA_sound_types.h"
#include "DNA_space_types.h"
-#include "DNA_texture_types.h"
-#include "DNA_userdef_types.h"
#include "DNA_vfont_types.h"
#include "DNA_world_types.h"
-#include "DNA_windowmanager_types.h"
#include "MEM_guardedalloc.h"
+
#include "BLI_blenlib.h"
#include "BLI_math.h"
@@ -121,6 +106,7 @@
#include "BKE_image.h"
#include "BKE_lattice.h"
#include "BKE_library.h" // for which_libbase
+#include "BKE_idcode.h"
#include "BKE_main.h" // for Main
#include "BKE_mesh.h" // for ME_ defines (patching)
#include "BKE_modifier.h"
@@ -138,7 +124,6 @@
#include "BKE_sequencer.h"
#include "BKE_texture.h" // for open_plugin_tex
#include "BKE_utildefines.h" // SWITCH_INT DATA ENDB DNA1 O_BINARY GLOB USER TEST REND
-#include "BKE_ipo.h"
#include "BKE_sound.h"
//XXX #include "BIF_butspace.h" // badlevel, for do_versions, patching event codes
@@ -1412,6 +1397,14 @@ static void IDP_DirectLinkIDPArray(IDProperty *prop, int switch_endian, FileData
prop->data.pointer = newdataadr(fd, prop->data.pointer);
array= (IDProperty*) prop->data.pointer;
+
+ /* 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 dont crash */
+ if(array==NULL) {
+ prop->len= 0;
+ prop->totallen= 0;
+ }
+
for(i=0; i<prop->len; i++)
IDP_DirectLinkProperty(&array[i], switch_endian, fd);
@@ -3155,6 +3148,7 @@ static void direct_link_particlesystems(FileData *fd, ListBase *particles)
psys->clmd->clothObject = NULL;
psys->clmd->sim_parms= newdataadr(fd, psys->clmd->sim_parms);
+ psys->clmd->sim_parms->effector_weights = NULL;
psys->clmd->coll_parms= newdataadr(fd, psys->clmd->coll_parms);
if(psys->clmd->sim_parms) {
@@ -4128,8 +4122,9 @@ static void composite_patch(bNodeTree *ntree, Scene *scene)
static void link_paint(FileData *fd, Scene *sce, Paint *p)
{
- if(p && p->brush) {
+ if(p) {
p->brush= newlibadr_us(fd, sce->id.lib, p->brush);
+ p->paint_cursor= NULL;
}
}
@@ -4317,11 +4312,6 @@ static void direct_link_scene(FileData *fd, Scene *sce)
seq->strip= newdataadr(fd, seq->strip);
if(seq->strip && seq->strip->done==0) {
seq->strip->done= 1;
- seq->strip->tstripdata = 0;
- seq->strip->tstripdata_startstill = 0;
- seq->strip->tstripdata_endstill = 0;
- seq->strip->ibuf_startstill = 0;
- seq->strip->ibuf_endstill = 0;
if(seq->type == SEQ_IMAGE ||
seq->type == SEQ_MOVIE ||
@@ -5103,7 +5093,9 @@ static void direct_link_screen(FileData *fd, bScreen *sc)
direct_link_gpencil(fd, v3d->gpd);
}
v3d->localvd= newdataadr(fd, v3d->localvd);
- v3d->afterdraw.first= v3d->afterdraw.last= NULL;
+ 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;
view3d_split_250(v3d, &sl->regionbase);
@@ -10708,6 +10700,15 @@ static void do_versions(FileData *fd, Library *lib, Main *main)
SEQ_END
}
+ /* particle brush strength factor was changed from int to float */
+ for(sce= main->scene.first; sce; sce=sce->id.next) {
+ ParticleEditSettings *pset= &sce->toolsettings->particle;
+ int a;
+
+ for(a=0; a<PE_TOT_BRUSH; a++)
+ pset->brush[a].strength /= 100.0;
+ }
+
for(ma = main->mat.first; ma; ma=ma->id.next)
if(ma->mode & MA_TRACEBLE)
ma->shade_flag |= MA_APPROX_OCCLUSION;
@@ -11156,6 +11157,13 @@ static void do_versions(FileData *fd, Library *lib, Main *main)
}
}
+ {
+ ParticleSettings *part;
+ for(part = main->particle.first; part; part = part->id.next) {
+ if(part->boids)
+ part->boids->pitch = 1.0f;
+ }
+ }
// init facing axis property of steering actuators
{
@@ -12678,8 +12686,8 @@ static void read_libraries(FileData *basefd, ListBase *mainlist)
append_id_part(fd, mainptr, id, &realid);
if (!realid) {
- BKE_reportf(fd->reports, RPT_ERROR, "LIB ERROR: %s:'%s' missing from '%s'\n", BLO_idcode_to_name(GS(id->name)), id->name+2, mainptr->curlib->filepath);
- if(!G.background && basefd->reports) printf("LIB ERROR: %s:'%s' missing from '%s'\n", BLO_idcode_to_name(GS(id->name)), id->name+2, mainptr->curlib->filepath);
+ BKE_reportf(fd->reports, RPT_ERROR, "LIB ERROR: %s:'%s' missing from '%s'\n", BKE_idcode_to_name(GS(id->name)), id->name+2, mainptr->curlib->filepath);
+ if(!G.background && basefd->reports) printf("LIB ERROR: %s:'%s' missing from '%s'\n", BKE_idcode_to_name(GS(id->name)), id->name+2, mainptr->curlib->filepath);
}
change_idid_adr(mainlist, basefd, id, realid);
@@ -12714,8 +12722,8 @@ static void read_libraries(FileData *basefd, ListBase *mainlist)
ID *idn= id->next;
if(id->flag & LIB_READ) {
BLI_remlink(lbarray[a], id);
- BKE_reportf(basefd->reports, RPT_ERROR, "LIB ERROR: %s:'%s' unread libblock missing from '%s'\n", BLO_idcode_to_name(GS(id->name)), id->name+2, mainptr->curlib->filepath);
- if(!G.background && basefd->reports)printf("LIB ERROR: %s:'%s' unread libblock missing from '%s'\n", BLO_idcode_to_name(GS(id->name)), id->name+2, mainptr->curlib->filepath);
+ BKE_reportf(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);
+ if(!G.background && basefd->reports)printf("LIB ERROR: %s:'%s' unread libblock missing from '%s'\n", BKE_idcode_to_name(GS(id->name)), id->name+2, mainptr->curlib->filepath);
change_idid_adr(mainlist, basefd, id, NULL);
MEM_freeN(id);
diff --git a/source/blender/blenloader/intern/undofile.c b/source/blender/blenloader/intern/undofile.c
index 40b03a78f34..9cdf8613011 100644
--- a/source/blender/blenloader/intern/undofile.c
+++ b/source/blender/blenloader/intern/undofile.c
@@ -36,10 +36,7 @@
#include "MEM_guardedalloc.h"
#include "DNA_listBase.h"
-#include "DNA_userdef_types.h"
-#include "BKE_utildefines.h"
-#include "BKE_global.h"
#include "BLO_undofile.h"
diff --git a/source/blender/blenloader/intern/writefile.c b/source/blender/blenloader/intern/writefile.c
index ed001cc283f..3a63230018e 100644
--- a/source/blender/blenloader/intern/writefile.c
+++ b/source/blender/blenloader/intern/writefile.c
@@ -88,38 +88,26 @@ Any case: direct data is ALWAYS after the lib block
#include "DNA_anim_types.h"
#include "DNA_armature_types.h"
-#include "DNA_action_types.h"
#include "DNA_actuator_types.h"
-#include "DNA_boid_types.h"
#include "DNA_brush_types.h"
#include "DNA_camera_types.h"
#include "DNA_cloth_types.h"
-#include "DNA_color_types.h"
#include "DNA_constraint_types.h"
#include "DNA_controller_types.h"
-#include "DNA_curve_types.h"
-#include "DNA_customdata_types.h"
-#include "DNA_effect_types.h"
#include "DNA_genfile.h"
#include "DNA_group_types.h"
#include "DNA_gpencil_types.h"
-#include "DNA_image_types.h"
-#include "DNA_ipo_types.h" // XXX depreceated - animsys
#include "DNA_fileglobal_types.h"
#include "DNA_key_types.h"
#include "DNA_lattice_types.h"
-#include "DNA_listBase.h" /* for Listbase, the type of samples, ...*/
#include "DNA_lamp_types.h"
#include "DNA_meta_types.h"
#include "DNA_mesh_types.h"
#include "DNA_meshdata_types.h"
#include "DNA_material_types.h"
-#include "DNA_modifier_types.h"
-#include "DNA_nla_types.h"
#include "DNA_node_types.h"
#include "DNA_object_types.h"
#include "DNA_object_force.h"
-#include "DNA_outliner_types.h"
#include "DNA_packedFile_types.h"
#include "DNA_particle_types.h"
#include "DNA_property_types.h"
@@ -131,11 +119,9 @@ Any case: direct data is ALWAYS after the lib block
#include "DNA_space_types.h"
#include "DNA_screen_types.h"
#include "DNA_sound_types.h"
-#include "DNA_texture_types.h"
#include "DNA_text_types.h"
#include "DNA_view3d_types.h"
#include "DNA_vfont_types.h"
-#include "DNA_userdef_types.h"
#include "DNA_world_types.h"
#include "DNA_windowmanager_types.h"
@@ -146,23 +132,16 @@ Any case: direct data is ALWAYS after the lib block
#include "BKE_action.h"
#include "BKE_blender.h"
-#include "BKE_cloth.h"
#include "BKE_curve.h"
-#include "BKE_customdata.h"
#include "BKE_constraint.h"
#include "BKE_global.h" // for G
#include "BKE_library.h" // for set_listbasepointers
#include "BKE_main.h"
#include "BKE_node.h"
-#include "BKE_packedFile.h" // for packAll
-#include "BKE_pointcache.h"
#include "BKE_report.h"
-#include "BKE_screen.h" // for waitcursor
#include "BKE_sequencer.h"
-#include "BKE_sound.h" /* ... and for samples */
#include "BKE_utildefines.h" // for defines
#include "BKE_modifier.h"
-#include "BKE_idprop.h"
#include "BKE_fcurve.h"
#include "BLO_writefile.h"
@@ -294,7 +273,7 @@ static void mywrite( WriteData *wd, void *adr, int len)
* @param write_flags Write parameters
* @warning Talks to other functions with global parameters
*/
-static WriteData *bgnwrite(int file, MemFile *compare, MemFile *current, int write_flags)
+static WriteData *bgnwrite(int file, MemFile *compare, MemFile *current)
{
WriteData *wd= writedata_new(file);
@@ -2373,7 +2352,7 @@ static void write_global(WriteData *wd, int fileflags, Main *mainvar)
fg.curscene= screen->scene;
fg.displaymode= G.displaymode;
fg.winpos= G.winpos;
- fg.fileflags= (fileflags & ~G_FILE_NO_UI); // prevent to save this, is not good convention, and feature with concerns...
+ fg.fileflags= (fileflags & ~(G_FILE_NO_UI|G_FILE_RELATIVE_REMAP)); // prevent to save this, is not good convention, and feature with concerns...
fg.globalf= G.f;
BLI_strncpy(fg.filename, mainvar->name, sizeof(fg.filename));
@@ -2408,7 +2387,7 @@ static int write_file_handle(Main *mainvar, int handle, MemFile *compare, MemFil
blo_split_main(&mainlist, mainvar);
- wd= bgnwrite(handle, compare, current, write_flags);
+ wd= bgnwrite(handle, compare, current);
sprintf(buf, "BLENDER%c%c%.3d", (sizeof(void*)==8)?'-':'_', (ENDIAN_ORDER==B_ENDIAN)?'V':'v', BLENDER_VERSION);
mywrite(wd, buf, 12);
diff --git a/source/blender/blenpluginapi/CMakeLists.txt b/source/blender/blenpluginapi/CMakeLists.txt
index 2699b3b7c3b..3abf1e44449 100644
--- a/source/blender/blenpluginapi/CMakeLists.txt
+++ b/source/blender/blenpluginapi/CMakeLists.txt
@@ -27,15 +27,20 @@
FILE(GLOB SRC intern/*.c)
SET(INC
- . .. ../../../intern/guardedalloc ../blenlib ../imbuf ../makesdna
+ .
+ ..
+ ../blenlib
+ ../imbuf
+ ../makesdna
+ ../../../intern/guardedalloc
)
IF(WIN32)
- SET(INC ${INC} ${PTHREADS_INC})
+ LIST(APPEND INC ${PTHREADS_INC})
ENDIF(WIN32)
IF(WITH_QUICKTIME)
- SET(INC ${INC} ${QUICKTIME_INC})
+ LIST(APPEND INC ${QUICKTIME_INC})
ADD_DEFINITIONS(-DWITH_QUICKTIME)
ENDIF(WITH_QUICKTIME)
diff --git a/source/blender/blenpluginapi/Makefile b/source/blender/blenpluginapi/Makefile
index 83678309b45..c91161d8cfd 100644
--- a/source/blender/blenpluginapi/Makefile
+++ b/source/blender/blenpluginapi/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
# All rights reserved.
diff --git a/source/blender/blenpluginapi/SConscript b/source/blender/blenpluginapi/SConscript
index b310bcb95ec..680ae79f461 100644
--- a/source/blender/blenpluginapi/SConscript
+++ b/source/blender/blenpluginapi/SConscript
@@ -8,8 +8,8 @@ incs = '. .. #/intern/guardedalloc ../blenlib ../imbuf ../makesdna'
defs = []
if env['WITH_BF_QUICKTIME']:
- defs.append('WITH_QUICKTIME')
- incs += ' ' + env['BF_QUICKTIME_INC']
+ defs.append('WITH_QUICKTIME')
+ incs += ' ' + env['BF_QUICKTIME_INC']
if env['OURPLATFORM'] == 'linux2':
cflags='-pthread'
diff --git a/source/blender/blenpluginapi/intern/Makefile b/source/blender/blenpluginapi/intern/Makefile
index 20a61e9a25c..696462f3f46 100644
--- a/source/blender/blenpluginapi/intern/Makefile
+++ b/source/blender/blenpluginapi/intern/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
# All rights reserved.
diff --git a/source/blender/collada/CMakeLists.txt b/source/blender/collada/CMakeLists.txt
index 420650a6ff7..a72ecc4be6c 100644
--- a/source/blender/collada/CMakeLists.txt
+++ b/source/blender/collada/CMakeLists.txt
@@ -61,4 +61,8 @@ SET(INC
ENDIF(APPLE)
+IF(WITH_BUILDINFO)
+ ADD_DEFINITIONS(-DNAN_BUILDINFO)
+ENDIF(WITH_BUILDINFO)
+
BLENDERLIB(bf_collada "${SRC}" "${INC}")
diff --git a/source/blender/collada/DocumentExporter.cpp b/source/blender/collada/DocumentExporter.cpp
index 7a994d6b418..9fdc07f391b 100644
--- a/source/blender/collada/DocumentExporter.cpp
+++ b/source/blender/collada/DocumentExporter.cpp
@@ -48,10 +48,14 @@ extern "C"
#include "BLI_path_util.h"
#include "BLI_fileops.h"
#include "ED_keyframing.h"
+#ifdef NAN_BUILDINFO
+extern char build_rev[];
+#endif
}
#include "MEM_guardedalloc.h"
+#include "BKE_blender.h" // version info
#include "BKE_scene.h"
#include "BKE_global.h"
#include "BKE_main.h"
@@ -158,47 +162,124 @@ like special chars (e.g. micro sign), umlauts and so on.
The COLLADA spec also allows additional chars for member access ('.'), these
must obviously be removed too, otherwise they would be heavily misinterpreted.
*/
-const unsigned char translate_map[256] = {
- 95, 95, 95, 95, 95, 95, 95, 95,
- 95, 95, 95, 95, 95, 95, 95, 95,
- 95, 95, 95, 95, 95, 95, 95, 95,
- 95, 95, 95, 95, 95, 95, 95, 95,
- 95, 95, 95, 95, 95, 95, 95, 95,
- 95, 95, 95, 95, 95, 45, 95, 95,
- 48, 49, 50, 51, 52, 53, 54, 55,
- 56, 57, 95, 95, 95, 95, 95, 95,
- 95, 65, 66, 67, 68, 69, 70, 71,
- 72, 73, 74, 75, 76, 77, 78, 79,
- 80, 81, 82, 83, 84, 85, 86, 87,
- 88, 89, 90, 95, 95, 95, 95, 95,
- 95, 97, 98, 99, 100, 101, 102, 103,
- 104, 105, 106, 107, 108, 109, 110, 111,
- 112, 113, 114, 115, 116, 117, 118, 119,
- 120, 121, 122, 95, 95, 95, 95, 95,
- 95, 95, 95, 95, 95, 95, 95, 95,
- 95, 95, 95, 95, 95, 95, 95, 95,
- 95, 95, 95, 95, 95, 95, 95, 95,
- 95, 95, 95, 95, 95, 95, 95, 95,
- 95, 95, 95, 95, 95, 95, 95, 95,
- 95, 95, 95, 95, 95, 95, 95, 95,
- 95, 95, 95, 95, 95, 95, 95, 183,
- 95, 95, 95, 95, 95, 95, 95, 95,
- 192, 193, 194, 195, 196, 197, 198, 199,
- 200, 201, 202, 203, 204, 205, 206, 207,
- 208, 209, 210, 211, 212, 213, 214, 95,
- 216, 217, 218, 219, 220, 221, 222, 223,
- 224, 225, 226, 227, 228, 229, 230, 231,
- 232, 233, 234, 235, 236, 237, 238, 239,
- 240, 241, 242, 243, 244, 245, 246, 95,
- 248, 249, 250, 251, 252, 253, 254, 255};
+const unsigned char translate_start_name_map[256] = {
+95, 95, 95, 95, 95, 95, 95, 95, 95,
+95, 95, 95, 95, 95, 95, 95, 95,
+95, 95, 95, 95, 95, 95, 95, 95,
+95, 95, 95, 95, 95, 95, 95, 95,
+95, 95, 95, 95, 95, 95, 95, 95,
+95, 95, 95, 95, 95, 95, 95, 95,
+95, 95, 95, 95, 95, 95, 95, 95,
+95, 95, 95, 95, 95, 95, 95, 95,
+65, 66, 67, 68, 69, 70, 71, 72,
+73, 74, 75, 76, 77, 78, 79, 80,
+81, 82, 83, 84, 85, 86, 87, 88,
+89, 90, 95, 95, 95, 95, 95, 95,
+97, 98, 99, 100, 101, 102, 103, 104,
+105, 106, 107, 108, 109, 110, 111, 112,
+113, 114, 115, 116, 117, 118, 119, 120,
+121, 122, 95, 95, 95, 95, 95, 95,
+95, 95, 95, 95, 95, 95, 95, 95,
+95, 95, 95, 95, 95, 95, 95, 95,
+95, 95, 95, 95, 95, 95, 95, 95,
+95, 95, 95, 95, 95, 95, 95, 95,
+95, 95, 95, 95, 95, 95, 95, 95,
+95, 95, 95, 95, 95, 95, 95, 95,
+95, 95, 95, 95, 95, 95, 95, 95,
+95, 95, 95, 95, 95, 95, 95, 192,
+193, 194, 195, 196, 197, 198, 199, 200,
+201, 202, 203, 204, 205, 206, 207, 208,
+209, 210, 211, 212, 213, 214, 95, 216,
+217, 218, 219, 220, 221, 222, 223, 224,
+225, 226, 227, 228, 229, 230, 231, 232,
+233, 234, 235, 236, 237, 238, 239, 240,
+241, 242, 243, 244, 245, 246, 95, 248,
+249, 250, 251, 252, 253, 254, 255};
+
+const unsigned char translate_name_map[256] = {
+95, 95, 95, 95, 95, 95, 95, 95, 95,
+95, 95, 95, 95, 95, 95, 95, 95,
+95, 95, 95, 95, 95, 95, 95, 95,
+95, 95, 95, 95, 95, 95, 95, 95,
+95, 95, 95, 95, 95, 95, 95, 95,
+95, 95, 95, 95, 45, 95, 95, 48,
+49, 50, 51, 52, 53, 54, 55, 56,
+57, 95, 95, 95, 95, 95, 95, 95,
+65, 66, 67, 68, 69, 70, 71, 72,
+73, 74, 75, 76, 77, 78, 79, 80,
+81, 82, 83, 84, 85, 86, 87, 88,
+89, 90, 95, 95, 95, 95, 95, 95,
+97, 98, 99, 100, 101, 102, 103, 104,
+105, 106, 107, 108, 109, 110, 111, 112,
+113, 114, 115, 116, 117, 118, 119, 120,
+121, 122, 95, 95, 95, 95, 95, 95,
+95, 95, 95, 95, 95, 95, 95, 95,
+95, 95, 95, 95, 95, 95, 95, 95,
+95, 95, 95, 95, 95, 95, 95, 95,
+95, 95, 95, 95, 95, 95, 95, 95,
+95, 95, 95, 95, 95, 95, 95, 95,
+95, 95, 95, 95, 95, 95, 95, 95,
+95, 95, 95, 95, 95, 95, 183, 95,
+95, 95, 95, 95, 95, 95, 95, 192,
+193, 194, 195, 196, 197, 198, 199, 200,
+201, 202, 203, 204, 205, 206, 207, 208,
+209, 210, 211, 212, 213, 214, 95, 216,
+217, 218, 219, 220, 221, 222, 223, 224,
+225, 226, 227, 228, 229, 230, 231, 232,
+233, 234, 235, 236, 237, 238, 239, 240,
+241, 242, 243, 244, 245, 246, 95, 248,
+249, 250, 251, 252, 253, 254, 255};
+
+typedef std::map< std::string, std::vector<std::string> > map_string_list;
+map_string_list global_id_map;
/** Look at documentation of translate_map */
static std::string translate_id(const std::string &id)
{
+ if (id.size() == 0)
+ { return id; }
std::string id_translated = id;
- for (unsigned int i=0; i < id_translated.size(); i++)
- {
- id_translated[i] = translate_map[(unsigned int)id_translated[i]];
+ id_translated[0] = translate_start_name_map[(unsigned int)id_translated[0]];
+ for (unsigned int i=1; i < id_translated.size(); i++)
+ {
+ id_translated[i] = translate_name_map[(unsigned int)id_translated[i]];
+ }
+ // It's so much workload now, the if() should speed up things.
+ if (id_translated != id)
+ {
+ // Search duplicates
+ map_string_list::iterator iter = global_id_map.find(id_translated);
+ if (iter != global_id_map.end())
+ {
+ unsigned int i = 0;
+ bool found = false;
+ for (i=0; i < iter->second.size(); i++)
+ {
+ if (id == iter->second[i])
+ {
+ found = true;
+ break;
+ }
+ }
+ bool convert = false;
+ if (found)
+ {
+ if (i > 0)
+ { convert = true; }
+ }
+ else
+ {
+ convert = true;
+ global_id_map[id_translated].push_back(id);
+ }
+ if (convert)
+ {
+ std::stringstream out;
+ out << ++i;
+ id_translated += out.str();
+ }
+ }
+ else { global_id_map[id_translated].push_back(id); }
}
return id_translated;
}
@@ -1296,7 +1377,7 @@ private:
int offset = 0;
input.push_back(COLLADASW::Input(COLLADASW::JOINT, // constant declared in COLLADASWInputList.h
COLLADASW::URI(COLLADABU::Utils::EMPTY_STRING, joints_source_id), offset++));
- input.push_back(COLLADASW::Input(COLLADASW::WEIGHT,
+ input.push_back(COLLADASW::Input(COLLADASW::WEIGHT,
COLLADASW::URI(COLLADABU::Utils::EMPTY_STRING, weights_source_id), offset++));
weights.setCount(me->totvert);
@@ -1559,13 +1640,13 @@ public:
if (ma->spec_shader == MA_SPEC_BLINN) {
ep.setShaderType(COLLADASW::EffectProfile::BLINN);
// shininess
- ep.setShininess(ma->spec);
+ ep.setShininess(ma->har);
}
else if (ma->spec_shader == MA_SPEC_PHONG) {
ep.setShaderType(COLLADASW::EffectProfile::PHONG);
// shininess
// XXX not sure, stolen this from previous Collada plugin
- ep.setShininess(ma->har / 4);
+ ep.setShininess(ma->har);
}
else {
// XXX write warning "Current shader type is not supported"
@@ -1582,17 +1663,19 @@ public:
COLLADASW::ColorOrTexture cot;
// transparency
- // Tod: because we are in A_ONE mode transparency is calculated like this:
- ep.setTransparency(1.0f);
- cot = getcol(0.0f, 0.0f, 0.0f, ma->alpha);
- ep.setTransparent(cot);
+ if (ma->mode & MA_TRANSP) {
+ // Tod: because we are in A_ONE mode transparency is calculated like this:
+ ep.setTransparency(ma->alpha);
+ // cot = getcol(1.0f, 1.0f, 1.0f, 1.0f);
+ // ep.setTransparent(cot);
+ }
// emission
cot=getcol(ma->emit, ma->emit, ma->emit, 1.0f);
ep.setEmission(cot);
- // diffuse
- cot = getcol(ma->r, ma->g, ma->b, 1.0f);
+ // diffuse multiplied by diffuse intensity
+ cot = getcol(ma->r * ma->ref, ma->g * ma->ref, ma->b * ma->ref, 1.0f);
ep.setDiffuse(cot);
// ambient
@@ -1605,15 +1688,15 @@ public:
ep.setReflective(cot);
ep.setReflectivity(ma->ray_mirror);
}
- else {
- cot = getcol(ma->specr, ma->specg, ma->specb, 1.0f);
- ep.setReflective(cot);
- ep.setReflectivity(ma->spec);
- }
+ // else {
+ // cot = getcol(ma->specr, ma->specg, ma->specb, 1.0f);
+ // ep.setReflective(cot);
+ // ep.setReflectivity(ma->spec);
+ // }
// specular
if (ep.getShaderType() != COLLADASW::EffectProfile::LAMBERT) {
- cot = getcol(ma->specr, ma->specg, ma->specb, 1.0f);
+ cot = getcol(ma->specr * ma->spec, ma->specg * ma->spec, ma->specb * ma->spec, 1.0f);
ep.setSpecular(cot);
}
@@ -1639,12 +1722,15 @@ public:
// create only one <sampler>/<surface> pair for each unique image
if (im_samp_map.find(key) == im_samp_map.end()) {
- //<newparam> <surface> <init_from>
- // COLLADASW::Surface surface(COLLADASW::Surface::SURFACE_TYPE_2D,
-// key + COLLADASW::Surface::SURFACE_SID_SUFFIX);
-// COLLADASW::SurfaceInitOption sio(COLLADASW::SurfaceInitOption::INIT_FROM);
-// sio.setImageReference(key);
-// surface.setInitOption(sio);
+ // //<newparam> <surface> <init_from>
+ // COLLADASW::Surface surface(COLLADASW::Surface::SURFACE_TYPE_2D,
+ // key + COLLADASW::Surface::SURFACE_SID_SUFFIX);
+ // COLLADASW::SurfaceInitOption sio(COLLADASW::SurfaceInitOption::INIT_FROM);
+ // sio.setImageReference(key);
+ // surface.setInitOption(sio);
+
+ // COLLADASW::NewParamSurface surface(mSW);
+ // surface->setParamType(COLLADASW::CSW_SURFACE_TYPE_2D);
//<newparam> <sampler> <source>
COLLADASW::Sampler sampler(COLLADASW::Sampler::SAMPLER_TYPE_2D,
@@ -1719,11 +1805,7 @@ public:
// most widespread de-facto standard.
texture.setProfileName("FCOLLADA");
texture.setChildElementName("bump");
-#ifdef WIN32 // currently, Windows builds are using revision 746 of OpenCollada while Linux and Mac are using an older revision 721
ep.addExtraTechniqueColorOrTexture(COLLADASW::ColorOrTexture(texture));
-#else
- ep.setExtraTechniqueColorOrTexture(COLLADASW::ColorOrTexture(texture));
-#endif
}
}
// performs the actual writing
@@ -1735,7 +1817,7 @@ public:
twoSided = true;
}
if (twoSided)
- ep.addExtraTechniqueParameter("GOOGLEEARTH", "double_sided", 1);
+ ep.addExtraTechniqueParameter("GOOGLEEARTH", "show_double_sided", 1);
ep.addExtraTechniques(mSW);
ep.closeProfile();
@@ -1774,6 +1856,7 @@ public:
for (int a = 0; a < MAX_MTEX; a++) {
if (ma->mtex[a] &&
+ ma->mtex[a]->tex &&
ma->mtex[a]->tex->type == TEX_IMAGE &&
ma->mtex[a]->texco == TEXCO_UV){
indices.push_back(a);
@@ -2523,6 +2606,8 @@ protected:
void DocumentExporter::exportCurrentScene(Scene *sce, const char* filename)
{
+ global_id_map.clear();
+
COLLADABU::NativeString native_filename =
COLLADABU::NativeString(std::string(filename));
COLLADASW::StreamWriter sw(native_filename);
@@ -2535,6 +2620,15 @@ void DocumentExporter::exportCurrentScene(Scene *sce, const char* filename)
// XXX ask blender devs about this?
asset.setUnit("decimetre", 0.1);
asset.setUpAxisType(COLLADASW::Asset::Z_UP);
+ // TODO: need an Author field in userpref
+ asset.getContributor().mAuthor = "Blender User";
+#ifdef NAN_BUILDINFO
+ char version_buf[128];
+ sprintf(version_buf, "Blender %d.%02d.%d r%s", BLENDER_VERSION/100, BLENDER_VERSION%100, BLENDER_SUBVERSION, build_rev);
+ asset.getContributor().mAuthoringTool = version_buf;
+#else
+ asset.getContributor().mAuthoringTool = "Blender 2.5x";
+#endif
asset.add();
// <library_cameras>
@@ -2595,4 +2689,3 @@ NOTES:
* AnimationExporter::sample_animation enables all curves on armature, this is undesirable for a user
*/
-
diff --git a/source/blender/collada/DocumentImporter.cpp b/source/blender/collada/DocumentImporter.cpp
index b9052d23511..2a3df69f0db 100644
--- a/source/blender/collada/DocumentImporter.cpp
+++ b/source/blender/collada/DocumentImporter.cpp
@@ -56,6 +56,7 @@
#include "COLLADAFWVisualScene.h"
#include "COLLADAFWFileInfo.h"
#include "COLLADAFWArrayPrimitiveType.h"
+#include "COLLADAFWLibraryNodes.h"
#include "COLLADASaxFWLLoader.h"
@@ -1628,6 +1629,13 @@ private:
// }
for (i = 0; i < totuvset; i++) {
+ if (mesh->getUVCoords().getLength(i) == 0) {
+ totuvset = 0;
+ break;
+ }
+ }
+
+ for (i = 0; i < totuvset; i++) {
CustomData_add_layer(&me->fdata, CD_MTFACE, CD_CALLOC, NULL, me->totface);
//this->set_layername_map[i] = CustomData_get_layer_name(&me->fdata, CD_MTFACE, i);
}
@@ -3240,7 +3248,9 @@ private:
std::map<COLLADAFW::UniqueId, Lamp*> uid_lamp_map;
std::map<Material*, TexIndexTextureArrayMap> material_texture_mapping_map;
std::map<COLLADAFW::UniqueId, Object*> object_map;
+ std::map<COLLADAFW::UniqueId, COLLADAFW::Node*> node_map;
std::vector<const COLLADAFW::VisualScene*> vscenes;
+ std::vector<Object*> libnode_ob;
std::map<COLLADAFW::UniqueId, COLLADAFW::Node*> root_map; // find root joint by child joint uid, for bone tree evaluation during resampling
@@ -3294,6 +3304,19 @@ public:
/** This method is called after the last write* method. No other methods will be called after this.*/
virtual void finish()
{
+ std::vector<const COLLADAFW::VisualScene*>::iterator it;
+ for (it = vscenes.begin(); it != vscenes.end(); it++) {
+ // TODO: create a new scene except the selected <visual_scene> - use current blender scene for it
+ Scene *sce = CTX_data_scene(mContext);
+ const COLLADAFW::NodePointerArray& roots = (*it)->getRootNodes();
+
+ for (unsigned int i = 0; i < roots.getCount(); i++) {
+ write_node(roots[i], NULL, sce, NULL, false);
+ }
+ }
+
+ armature_importer.make_armatures(mContext);
+
#if 0
armature_importer.fix_animation();
#endif
@@ -3305,6 +3328,29 @@ public:
translate_anim_recursive(roots[i]);
}
+ if (libnode_ob.size()) {
+ Scene *sce = CTX_data_scene(mContext);
+
+ fprintf(stderr, "got %u library nodes to free\n", libnode_ob.size());
+ // free all library_nodes
+ std::vector<Object*>::iterator it;
+ for (it = libnode_ob.begin(); it != libnode_ob.end(); it++) {
+ Object *ob = *it;
+
+ Base *base = object_in_scene(ob, sce);
+ if (base) {
+ BLI_remlink(&sce->base, base);
+ free_libblock_us(&G.main->object, base->object);
+ if (sce->basact==base)
+ sce->basact= NULL;
+ MEM_freeN(base);
+ }
+ }
+ libnode_ob.clear();
+
+ DAG_scene_sort(CTX_data_main(mContext), sce);
+ DAG_ids_flush_update(CTX_data_main(mContext), 0);
+ }
}
@@ -3356,39 +3402,81 @@ public:
// XXX could store the scene id, but do nothing for now
return true;
}
- Object *create_camera_object(COLLADAFW::InstanceCamera *camera, Object *ob, Scene *sce)
+ Object *create_camera_object(COLLADAFW::InstanceCamera *camera, Scene *sce)
{
const COLLADAFW::UniqueId& cam_uid = camera->getInstanciatedObjectId();
if (uid_camera_map.find(cam_uid) == uid_camera_map.end()) {
- fprintf(stderr, "Couldn't find camera by UID. \n");
+ fprintf(stderr, "Couldn't find camera by UID.\n");
return NULL;
}
- ob = add_object(sce, OB_CAMERA);
+ Object *ob = add_object(sce, OB_CAMERA);
Camera *cam = uid_camera_map[cam_uid];
Camera *old_cam = (Camera*)ob->data;
- old_cam->id.us--;
ob->data = cam;
- if (old_cam->id.us == 0) free_libblock(&G.main->camera, old_cam);
+ old_cam->id.us--;
+ if (old_cam->id.us == 0)
+ free_libblock(&G.main->camera, old_cam);
return ob;
}
- Object *create_lamp_object(COLLADAFW::InstanceLight *lamp, Object *ob, Scene *sce)
+ Object *create_lamp_object(COLLADAFW::InstanceLight *lamp, Scene *sce)
{
const COLLADAFW::UniqueId& lamp_uid = lamp->getInstanciatedObjectId();
if (uid_lamp_map.find(lamp_uid) == uid_lamp_map.end()) {
fprintf(stderr, "Couldn't find lamp by UID. \n");
return NULL;
}
- ob = add_object(sce, OB_LAMP);
+ Object *ob = add_object(sce, OB_LAMP);
Lamp *la = uid_lamp_map[lamp_uid];
Lamp *old_lamp = (Lamp*)ob->data;
- old_lamp->id.us--;
ob->data = la;
- if (old_lamp->id.us == 0) free_libblock(&G.main->lamp, old_lamp);
+ old_lamp->id.us--;
+ if (old_lamp->id.us == 0)
+ free_libblock(&G.main->lamp, old_lamp);
return ob;
}
+
+ Object *create_instance_node(Object *source_ob, COLLADAFW::Node *source_node, COLLADAFW::Node *instance_node, Scene *sce, bool is_library_node)
+ {
+ Object *obn = copy_object(source_ob);
+ obn->recalc |= OB_RECALC_ALL;
+ scene_add_base(sce, obn);
+
+ if (instance_node)
+ anim_importer.read_node_transform(instance_node, obn);
+ else
+ anim_importer.read_node_transform(source_node, obn);
+
+ DAG_scene_sort(CTX_data_main(mContext), sce);
+ DAG_ids_flush_update(CTX_data_main(mContext), 0);
+
+ COLLADAFW::NodePointerArray &children = source_node->getChildNodes();
+ if (children.getCount()) {
+ for (unsigned int i = 0; i < children.getCount(); i++) {
+ COLLADAFW::Node *child_node = children[i];
+ const COLLADAFW::UniqueId& child_id = child_node->getUniqueId();
+ if (object_map.find(child_id) == object_map.end())
+ continue;
+ COLLADAFW::InstanceNodePointerArray &inodes = child_node->getInstanceNodes();
+ Object *new_child = NULL;
+ if (inodes.getCount()) {
+ const COLLADAFW::UniqueId& id = inodes[0]->getInstanciatedObjectId();
+ new_child = create_instance_node(object_map[id], node_map[id], child_node, sce, is_library_node);
+ }
+ else {
+ new_child = create_instance_node(object_map[child_id], child_node, NULL, sce, is_library_node);
+ }
+ set_parent(new_child, obn, mContext, true);
+
+ if (is_library_node)
+ libnode_ob.push_back(new_child);
+ }
+ }
+
+ return obn;
+ }
- void write_node (COLLADAFW::Node *node, COLLADAFW::Node *parent_node, Scene *sce, Object *par)
+ void write_node (COLLADAFW::Node *node, COLLADAFW::Node *parent_node, Scene *sce, Object *par, bool is_library_node)
{
Object *ob = NULL;
bool is_joint = node->getType() == COLLADAFW::Node::JOINT;
@@ -3411,10 +3499,10 @@ public:
material_texture_mapping_map);
}
else if (camera.getCount() != 0) {
- ob = create_camera_object(camera[0], ob, sce);
+ ob = create_camera_object(camera[0], sce);
}
else if (lamp.getCount() != 0) {
- ob = create_lamp_object(lamp[0], ob, sce);
+ ob = create_lamp_object(lamp[0], sce);
}
else if (controller.getCount() != 0) {
COLLADAFW::InstanceGeometry *geom = (COLLADAFW::InstanceGeometry*)controller[0];
@@ -3422,7 +3510,17 @@ public:
}
// XXX instance_node is not supported yet
else if (inst_node.getCount() != 0) {
- return;
+ const COLLADAFW::UniqueId& node_id = inst_node[0]->getInstanciatedObjectId();
+ if (object_map.find(node_id) == object_map.end()) {
+ fprintf(stderr, "Cannot find node to instanciate.\n");
+ ob = NULL;
+ }
+ else {
+ Object *source_ob = object_map[node_id];
+ COLLADAFW::Node *source_node = node_map[node_id];
+
+ ob = create_instance_node(source_ob, source_node, node, sce, is_library_node);
+ }
}
// if node is empty - create empty object
// XXX empty node may not mean it is empty object, not sure about this
@@ -3434,7 +3532,11 @@ public:
// check if object is not NULL
if (!ob) return;
- object_map[node->getUniqueId()] = ob;
+ object_map[node->getUniqueId()] = ob;
+ node_map[node->getUniqueId()] = node;
+
+ if (is_library_node)
+ libnode_ob.push_back(ob);
}
anim_importer.read_node_transform(node, ob);
@@ -3448,7 +3550,7 @@ public:
// if node has child nodes write them
COLLADAFW::NodePointerArray &child_nodes = node->getChildNodes();
for (unsigned int i = 0; i < child_nodes.getCount(); i++) {
- write_node(child_nodes[i], node, sce, ob);
+ write_node(child_nodes[i], node, sce, ob, is_library_node);
}
}
@@ -3467,17 +3569,6 @@ public:
// we link Objects with Meshes here
vscenes.push_back(visualScene);
-
- // TODO: create a new scene except the selected <visual_scene> - use current blender
- // scene for it
- Scene *sce = CTX_data_scene(mContext);
- const COLLADAFW::NodePointerArray& roots = visualScene->getRootNodes();
-
- for (unsigned int i = 0; i < roots.getCount(); i++) {
- write_node(roots[i], NULL, sce, NULL);
- }
-
- armature_importer.make_armatures(mContext);
return true;
}
@@ -3487,6 +3578,14 @@ public:
@return The writer should return true, if writing succeeded, false otherwise.*/
virtual bool writeLibraryNodes ( const COLLADAFW::LibraryNodes* libraryNodes )
{
+ Scene *sce = CTX_data_scene(mContext);
+
+ const COLLADAFW::NodePointerArray& nodes = libraryNodes->getNodes();
+
+ for (unsigned int i = 0; i < nodes.getCount(); i++) {
+ write_node(nodes[i], NULL, sce, NULL, true);
+ }
+
return true;
}
diff --git a/source/blender/collada/Makefile b/source/blender/collada/Makefile
index 3b5f09594de..d4cc18d22b6 100644
--- a/source/blender/collada/Makefile
+++ b/source/blender/collada/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2008 Blender Foundation.
# All rights reserved.
diff --git a/source/blender/collada/SConscript b/source/blender/collada/SConscript
index b86e7312698..e026f2fb022 100644
--- a/source/blender/collada/SConscript
+++ b/source/blender/collada/SConscript
@@ -14,7 +14,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2006, Blender Foundation
# All rights reserved.
@@ -28,12 +28,15 @@
Import ('env')
sources = env.Glob('*.cpp')
+defs = []
# relative paths to include dirs, space-separated, string
if env['OURPLATFORM']=='darwin':
- incs = '../blenlib ../blenkernel ../windowmanager ../makesdna ../makesrna ../editors/include ../../../intern/guardedalloc [OPENCOLLADA]/COLLADAStreamWriter [OPENCOLLADA]/COLLADABaseUtils [OPENCOLLADA]/COLLADAFramework [OPENCOLLADA]/COLLADASaxFrameworkLoader '.replace('[OPENCOLLADA]', env['BF_OPENCOLLADA_INC'])
+ incs = '../blenlib ../blenkernel ../windowmanager ../makesdna ../makesrna ../editors/include ../../../intern/guardedalloc [OPENCOLLADA]/COLLADAStreamWriter [OPENCOLLADA]/COLLADABaseUtils [OPENCOLLADA]/COLLADAFramework [OPENCOLLADA]/COLLADASaxFrameworkLoader '.replace('[OPENCOLLADA]', env['BF_OPENCOLLADA_INC'])
else:
- incs = '../blenlib ../blenkernel ../windowmanager ../makesdna ../makesrna ../editors/include ../../../intern/guardedalloc [OPENCOLLADA]/COLLADAStreamWriter/include [OPENCOLLADA]/COLLADABaseUtils/include [OPENCOLLADA]/COLLADAFramework/include [OPENCOLLADA]/COLLADASaxFrameworkLoader/include '.replace('[OPENCOLLADA]', env['BF_OPENCOLLADA_INC'])
+ incs = '../blenlib ../blenkernel ../windowmanager ../makesdna ../makesrna ../editors/include ../../../intern/guardedalloc [OPENCOLLADA]/COLLADAStreamWriter/include [OPENCOLLADA]/COLLADABaseUtils/include [OPENCOLLADA]/COLLADAFramework/include [OPENCOLLADA]/COLLADASaxFrameworkLoader/include '.replace('[OPENCOLLADA]', env['BF_OPENCOLLADA_INC'])
-env.BlenderLib ('bf_collada', sources, Split(incs), [], libtype='core', priority=200 )
+if env['BF_BUILDINFO']:
+ defs.append('NAN_BUILDINFO')
+env.BlenderLib ('bf_collada', sources, Split(incs), defs, libtype='core', priority=200 )
diff --git a/source/blender/editors/Makefile b/source/blender/editors/Makefile
index e259168a4ef..168d919e6de 100644
--- a/source/blender/editors/Makefile
+++ b/source/blender/editors/Makefile
@@ -17,7 +17,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) Blender Foundation.
# All rights reserved.
diff --git a/source/blender/editors/SConscript b/source/blender/editors/SConscript
index 226e9247f91..e8159bdf03f 100644
--- a/source/blender/editors/SConscript
+++ b/source/blender/editors/SConscript
@@ -3,38 +3,38 @@ Import ('env')
SConscript(['datafiles/SConscript',
- 'space_api/SConscript',
- 'util/SConscript',
- 'interface/SConscript',
- 'animation/SConscript',
- 'armature/SConscript',
- 'mesh/SConscript',
- 'metaball/SConscript',
- 'object/SConscript',
- 'curve/SConscript',
- 'gpencil/SConscript',
- 'physics/SConscript',
- 'render/SConscript',
- 'sound/SConscript',
- 'space_buttons/SConscript',
- 'space_file/SConscript',
- 'space_image/SConscript',
- 'space_info/SConscript',
- 'space_graph/SConscript',
- 'space_node/SConscript',
- 'space_outliner/SConscript',
- 'space_time/SConscript',
- 'space_view3d/SConscript',
- 'space_sound/SConscript',
- 'space_action/SConscript',
- 'space_nla/SConscript',
- 'space_script/SConscript',
- 'space_text/SConscript',
- 'space_sequencer/SConscript',
- 'space_logic/SConscript',
- 'space_console/SConscript',
- 'space_userpref/SConscript',
- 'transform/SConscript',
- 'screen/SConscript',
- 'sculpt_paint/SConscript',
- 'uvedit/SConscript'])
+ 'space_api/SConscript',
+ 'util/SConscript',
+ 'interface/SConscript',
+ 'animation/SConscript',
+ 'armature/SConscript',
+ 'mesh/SConscript',
+ 'metaball/SConscript',
+ 'object/SConscript',
+ 'curve/SConscript',
+ 'gpencil/SConscript',
+ 'physics/SConscript',
+ 'render/SConscript',
+ 'sound/SConscript',
+ 'space_buttons/SConscript',
+ 'space_file/SConscript',
+ 'space_image/SConscript',
+ 'space_info/SConscript',
+ 'space_graph/SConscript',
+ 'space_node/SConscript',
+ 'space_outliner/SConscript',
+ 'space_time/SConscript',
+ 'space_view3d/SConscript',
+ 'space_sound/SConscript',
+ 'space_action/SConscript',
+ 'space_nla/SConscript',
+ 'space_script/SConscript',
+ 'space_text/SConscript',
+ 'space_sequencer/SConscript',
+ 'space_logic/SConscript',
+ 'space_console/SConscript',
+ 'space_userpref/SConscript',
+ 'transform/SConscript',
+ 'screen/SConscript',
+ 'sculpt_paint/SConscript',
+ 'uvedit/SConscript'])
diff --git a/source/blender/editors/animation/Makefile b/source/blender/editors/animation/Makefile
index a7f36aa58ac..f120091e917 100644
--- a/source/blender/editors/animation/Makefile
+++ b/source/blender/editors/animation/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2007 Blender Foundation
# All rights reserved.
diff --git a/source/blender/editors/animation/anim_channels_defines.c b/source/blender/editors/animation/anim_channels_defines.c
index 09fbdf2d70d..3fb8e441d6f 100644
--- a/source/blender/editors/animation/anim_channels_defines.c
+++ b/source/blender/editors/animation/anim_channels_defines.c
@@ -83,11 +83,6 @@
}
-/* XXX */
-extern void gl_round_box(int mode, float minx, float miny, float maxx, float maxy, float rad);
-extern void gl_round_box_shade(int mode, float minx, float miny, float maxx, float maxy, float rad, float shadetop, float shadedown);
-
-
/* *********************************************** */
/* Generic Functions (Type independent) */
@@ -115,7 +110,7 @@ static void acf_generic_root_backdrop(bAnimContext *ac, bAnimListElem *ale, floa
/* rounded corners on LHS only - top only when expanded, but bottom too when collapsed */
uiSetRoundBox((expanded)? (1):(1|8));
- gl_round_box(GL_POLYGON, offset, yminc, v2d->cur.xmax+EXTRA_SCROLL_PAD, ymaxc, 8);
+ uiDrawBox(GL_POLYGON, offset, yminc, v2d->cur.xmax+EXTRA_SCROLL_PAD, ymaxc, 8);
}
@@ -405,7 +400,7 @@ static void acf_summary_backdrop(bAnimContext *ac, bAnimListElem *ale, float ymi
* - special hack: make the top a bit higher, since we are first...
*/
uiSetRoundBox((1|8));
- gl_round_box(GL_POLYGON, 0, yminc-2, v2d->cur.xmax+EXTRA_SCROLL_PAD, ymaxc, 8);
+ uiDrawBox(GL_POLYGON, 0, yminc-2, v2d->cur.xmax+EXTRA_SCROLL_PAD, ymaxc, 8);
}
/* name for summary entries */
@@ -755,7 +750,7 @@ static void acf_group_backdrop(bAnimContext *ac, bAnimListElem *ale, float yminc
/* rounded corners on LHS only - top only when expanded, but bottom too when collapsed */
uiSetRoundBox((expanded)? (1):(1|8));
- gl_round_box(GL_POLYGON, offset, yminc, v2d->cur.xmax+EXTRA_SCROLL_PAD, ymaxc, 8);
+ uiDrawBox(GL_POLYGON, offset, yminc, v2d->cur.xmax+EXTRA_SCROLL_PAD, ymaxc, 8);
}
/* name for group entries */
diff --git a/source/blender/editors/animation/anim_draw.c b/source/blender/editors/animation/anim_draw.c
index f5f50e10bcb..b564780f6c0 100644
--- a/source/blender/editors/animation/anim_draw.c
+++ b/source/blender/editors/animation/anim_draw.c
@@ -25,6 +25,7 @@
*
* ***** END GPL LICENSE BLOCK *****
*/
+#include "BLO_sys_types.h"
#include "DNA_anim_types.h"
#include "DNA_object_types.h"
diff --git a/source/blender/editors/animation/anim_filter.c b/source/blender/editors/animation/anim_filter.c
index f631430b03e..feb680ff40a 100644
--- a/source/blender/editors/animation/anim_filter.c
+++ b/source/blender/editors/animation/anim_filter.c
@@ -49,7 +49,6 @@
#include "DNA_anim_types.h"
#include "DNA_armature_types.h"
-#include "DNA_constraint_types.h"
#include "DNA_camera_types.h"
#include "DNA_lamp_types.h"
#include "DNA_lattice_types.h"
@@ -82,7 +81,6 @@
#include "BKE_material.h"
#include "BKE_node.h"
#include "BKE_sequencer.h"
-#include "BKE_utildefines.h"
#include "ED_anim_api.h"
@@ -1391,8 +1389,23 @@ static int animdata_filter_dopesheet_mats (bAnimContext *ac, ListBase *anim_data
short ok = 0;
/* for now, if no material returned, skip (this shouldn't confuse the user I hope) */
- if (ELEM(NULL, ma, ma->adt))
- continue;
+ if (ma == NULL) continue;
+ if (ma->adt == NULL) {
+ /* need to check textures */
+ if(ma->mtex) {
+ MTex **mtex = ma->mtex;
+ int a;
+ for (a=0; a < MAX_MTEX; a++) {
+ if (ELEM3(NULL, mtex[a], mtex[a]->tex, mtex[a]->tex->adt))
+ continue;
+ else
+ ok=1;
+ }
+ }
+ else
+ continue;
+ }
+
/* check if ok */
ANIMDATA_FILTER_CASES(ma,
@@ -1409,7 +1422,6 @@ static int animdata_filter_dopesheet_mats (bAnimContext *ac, ListBase *anim_data
}
/* if there were no channels found, no need to carry on */
- // XXX: textures with no animated owner material won't work because of this...
if (mats.first == NULL)
return 0;
@@ -2401,11 +2413,26 @@ static int animdata_filter_dopesheet (bAnimContext *ac, ListBase *anim_data, bDo
/* firstly check that we actuallly have some materials */
for (a=0; a < ob->totcol; a++) {
Material *ma= give_current_material(ob, a);
+ int mtInd;
if ((ma) && ANIMDATA_HAS_KEYS(ma)) {
matOk= 1;
break;
}
+
+ if(ma) {
+ for (mtInd= 0; mtInd < MAX_MTEX; mtInd++) {
+ MTex *mtex= ma->mtex[mtInd];
+
+ if (mtex && mtex->tex && ANIMDATA_HAS_KEYS(mtex->tex)) {
+ matOk= 1;
+ break;
+ }
+ }
+ }
+
+ if(matOk)
+ break;
}
}
diff --git a/source/blender/editors/animation/anim_ipo_utils.c b/source/blender/editors/animation/anim_ipo_utils.c
index b71e9ac3507..4bc2654e581 100644
--- a/source/blender/editors/animation/anim_ipo_utils.c
+++ b/source/blender/editors/animation/anim_ipo_utils.c
@@ -157,6 +157,9 @@ int getname_anim_fcurve(char *name, ID *id, FCurve *fcu)
/* icon for this should be the icon for the base ID */
// TODO: or should we just use the error icon?
icon= RNA_struct_ui_icon(id_ptr.type);
+
+ /* tag F-Curve as disabled - as not usable path */
+ fcu->flag |= FCURVE_DISABLED;
}
}
diff --git a/source/blender/editors/animation/anim_markers.c b/source/blender/editors/animation/anim_markers.c
index 719b46738d3..5c4d231fd3a 100644
--- a/source/blender/editors/animation/anim_markers.c
+++ b/source/blender/editors/animation/anim_markers.c
@@ -362,6 +362,7 @@ static int ed_marker_add(bContext *C, wmOperator *op)
BLI_addtail(markers, marker);
WM_event_add_notifier(C, NC_SCENE|ND_MARKERS, NULL);
+ WM_event_add_notifier(C, NC_ANIMATION|ND_MARKERS, NULL);
return OPERATOR_FINISHED;
}
@@ -511,6 +512,7 @@ static void ed_marker_move_cancel(bContext *C, wmOperator *op)
ed_marker_move_exit(C, op);
WM_event_add_notifier(C, NC_SCENE|ND_MARKERS, NULL);
+ WM_event_add_notifier(C, NC_ANIMATION|ND_MARKERS, NULL);
}
@@ -537,6 +539,7 @@ static int ed_marker_move_modal(bContext *C, wmOperator *op, wmEvent *evt)
if(WM_modal_tweak_exit(evt, mm->event_type)) {
ed_marker_move_exit(C, op);
WM_event_add_notifier(C, NC_SCENE|ND_MARKERS, NULL);
+ WM_event_add_notifier(C, NC_ANIMATION|ND_MARKERS, NULL);
return OPERATOR_FINISHED;
}
@@ -614,6 +617,7 @@ static int ed_marker_move_modal(bContext *C, wmOperator *op, wmEvent *evt)
}
WM_event_add_notifier(C, NC_SCENE|ND_MARKERS, NULL);
+ WM_event_add_notifier(C, NC_ANIMATION|ND_MARKERS, NULL);
ED_area_headerprint(CTX_wm_area(C), str);
}
}
@@ -635,6 +639,7 @@ static int ed_marker_move_modal(bContext *C, wmOperator *op, wmEvent *evt)
ED_area_headerprint(CTX_wm_area(C), str);
WM_event_add_notifier(C, NC_SCENE|ND_MARKERS, NULL);
+ WM_event_add_notifier(C, NC_ANIMATION|ND_MARKERS, NULL);
}
}
@@ -840,6 +845,7 @@ static int ed_marker_select(bContext *C, wmEvent *evt, int extend, int camera)
#endif
WM_event_add_notifier(C, NC_SCENE|ND_MARKERS, NULL);
+ WM_event_add_notifier(C, NC_ANIMATION|ND_MARKERS, NULL);
/* allowing tweaks */
return OPERATOR_PASS_THROUGH;
@@ -935,6 +941,7 @@ static int ed_marker_border_select_exec(bContext *C, wmOperator *op)
}
WM_event_add_notifier(C, NC_SCENE|ND_MARKERS, NULL);
+ WM_event_add_notifier(C, NC_ANIMATION|ND_MARKERS, NULL);
return 1;
}
@@ -1000,6 +1007,7 @@ static int ed_marker_select_all_exec(bContext *C, wmOperator *op)
}
WM_event_add_notifier(C, NC_SCENE|ND_MARKERS, NULL);
+ WM_event_add_notifier(C, NC_ANIMATION|ND_MARKERS, NULL);
return OPERATOR_FINISHED;
}
@@ -1042,8 +1050,10 @@ static int ed_marker_delete_exec(bContext *C, wmOperator *op)
}
}
- if (changed)
+ if (changed) {
WM_event_add_notifier(C, NC_SCENE|ND_MARKERS, NULL);
+ WM_event_add_notifier(C, NC_ANIMATION|ND_MARKERS, NULL);
+ }
return OPERATOR_FINISHED;
}
@@ -1136,8 +1146,10 @@ static int ed_marker_camera_bind_exec(bContext *C, wmOperator *op)
}
}
- if (changed)
+ if (changed) {
WM_event_add_notifier(C, NC_SCENE|ND_MARKERS, NULL);
+ WM_event_add_notifier(C, NC_ANIMATION|ND_MARKERS, NULL);
+ }
return OPERATOR_FINISHED;
}
diff --git a/source/blender/editors/animation/anim_ops.c b/source/blender/editors/animation/anim_ops.c
index 9570fd64433..9b9c9435518 100644
--- a/source/blender/editors/animation/anim_ops.c
+++ b/source/blender/editors/animation/anim_ops.c
@@ -29,6 +29,8 @@
#include <stdlib.h>
#include <math.h>
+#include "BLO_sys_types.h"
+
#include "DNA_anim_types.h"
#include "DNA_scene_types.h"
diff --git a/source/blender/editors/animation/drivers.c b/source/blender/editors/animation/drivers.c
index 9edcf637cdc..898d7db89fc 100644
--- a/source/blender/editors/animation/drivers.c
+++ b/source/blender/editors/animation/drivers.c
@@ -372,12 +372,12 @@ static int add_driver_button_exec (bContext *C, wmOperator *op)
/* try to create driver using property retrieved from UI */
memset(&ptr, 0, sizeof(PointerRNA));
- uiAnimContextProperty(C, &ptr, &prop, &index);
+ uiContextActiveProperty(C, &ptr, &prop, &index);
if (all)
index= -1;
- if (ptr.data && prop && RNA_property_animateable(&ptr, prop)) {
+ if (ptr.id.data && ptr.data && prop && RNA_property_animateable(&ptr, prop)) {
path= RNA_path_from_ID_to_property(&ptr, prop);
if (path) {
@@ -389,6 +389,8 @@ static int add_driver_button_exec (bContext *C, wmOperator *op)
if (success) {
/* send updates */
+ uiContextAnimUpdate(C);
+
DAG_ids_flush_update(CTX_data_main(C), 0);
WM_event_add_notifier(C, NC_ANIMATION|ND_FCURVES_ORDER, NULL); // XXX
@@ -427,12 +429,12 @@ static int remove_driver_button_exec (bContext *C, wmOperator *op)
/* try to find driver using property retrieved from UI */
memset(&ptr, 0, sizeof(PointerRNA));
- uiAnimContextProperty(C, &ptr, &prop, &index);
+ uiContextActiveProperty(C, &ptr, &prop, &index);
if (all)
index= -1;
- if (ptr.data && prop) {
+ if (ptr.id.data && ptr.data && prop) {
path= RNA_path_from_ID_to_property(&ptr, prop);
success= ANIM_remove_driver(ptr.id.data, path, index, 0);
MEM_freeN(path);
@@ -440,6 +442,8 @@ static int remove_driver_button_exec (bContext *C, wmOperator *op)
if (success) {
/* send updates */
+ uiContextAnimUpdate(C);
+
DAG_ids_flush_update(CTX_data_main(C), 0);
WM_event_add_notifier(C, NC_ANIMATION|ND_FCURVES_ORDER, NULL); // XXX
@@ -478,14 +482,16 @@ static int copy_driver_button_exec (bContext *C, wmOperator *op)
/* try to create driver using property retrieved from UI */
memset(&ptr, 0, sizeof(PointerRNA));
- uiAnimContextProperty(C, &ptr, &prop, &index);
+ uiContextActiveProperty(C, &ptr, &prop, &index);
- if (ptr.data && prop && RNA_property_animateable(&ptr, prop)) {
+ if (ptr.id.data && ptr.data && prop && RNA_property_animateable(&ptr, prop)) {
path= RNA_path_from_ID_to_property(&ptr, prop);
if (path) {
/* only copy the driver for the button that this was involved for */
success= ANIM_copy_driver(ptr.id.data, path, index, 0);
+
+ uiContextAnimUpdate(C);
MEM_freeN(path);
}
@@ -522,14 +528,16 @@ static int paste_driver_button_exec (bContext *C, wmOperator *op)
/* try to create driver using property retrieved from UI */
memset(&ptr, 0, sizeof(PointerRNA));
- uiAnimContextProperty(C, &ptr, &prop, &index);
+ uiContextActiveProperty(C, &ptr, &prop, &index);
- if (ptr.data && prop && RNA_property_animateable(&ptr, prop)) {
+ if (ptr.id.data && ptr.data && prop && RNA_property_animateable(&ptr, prop)) {
path= RNA_path_from_ID_to_property(&ptr, prop);
if (path) {
/* only copy the driver for the button that this was involved for */
success= ANIM_paste_driver(ptr.id.data, path, index, 0);
+
+ uiContextAnimUpdate(C);
MEM_freeN(path);
}
diff --git a/source/blender/editors/animation/fmodifier_ui.c b/source/blender/editors/animation/fmodifier_ui.c
index 8c6a81bddf4..35e6cb66d45 100644
--- a/source/blender/editors/animation/fmodifier_ui.c
+++ b/source/blender/editors/animation/fmodifier_ui.c
@@ -119,7 +119,7 @@ static void draw_modifier__generator(uiLayout *layout, ID *id, FModifier *fcm, s
but= uiDefButR(block, MENU, B_FMODIFIER_REDRAW, NULL, 0, 0, width-30, UI_UNIT_Y, &ptr, "mode", -1, 0, 0, -1, -1, NULL);
uiButSetFunc(but, validate_fmodifier_cb, fcm, NULL);
- uiDefButR(block, TOG, B_FMODIFIER_REDRAW, NULL, 0, 0, width-30, UI_UNIT_Y, &ptr, "additive", -1, 0, 0, -1, -1, NULL);
+ uiDefButR(block, TOG, B_FMODIFIER_REDRAW, NULL, 0, 0, width-30, UI_UNIT_Y, &ptr, "use_additive", -1, 0, 0, -1, -1, NULL);
uiBlockEndAlign(block);
/* now add settings for individual modes */
@@ -226,7 +226,7 @@ static void draw_modifier__fn_generator(uiLayout *layout, ID *id, FModifier *fcm
/* add the settings */
col= uiLayoutColumn(layout, 1);
uiItemR(col, &ptr, "function_type", 0, "", 0);
- uiItemR(col, &ptr, "additive", UI_ITEM_R_TOGGLE, NULL, 0);
+ uiItemR(col, &ptr, "use_additive", UI_ITEM_R_TOGGLE, NULL, 0);
col= uiLayoutColumn(layout, 0); // no grouping for now
uiItemR(col, &ptr, "amplitude", 0, NULL, 0);
@@ -254,14 +254,14 @@ static void draw_modifier__cycles(uiLayout *layout, ID *id, FModifier *fcm, shor
/* before range */
col= uiLayoutColumn(split, 1);
uiItemL(col, "Before:", 0);
- uiItemR(col, &ptr, "before_mode", 0, "", 0);
- uiItemR(col, &ptr, "before_cycles", 0, NULL, 0);
+ uiItemR(col, &ptr, "mode_before", 0, "", 0);
+ uiItemR(col, &ptr, "cycles_before", 0, NULL, 0);
/* after range */
col= uiLayoutColumn(split, 1);
uiItemL(col, "After:", 0);
- uiItemR(col, &ptr, "after_mode", 0, "", 0);
- uiItemR(col, &ptr, "after_cycles", 0, NULL, 0);
+ uiItemR(col, &ptr, "mode_after", 0, "", 0);
+ uiItemR(col, &ptr, "cycles_after", 0, NULL, 0);
}
/* --------------- */
@@ -276,14 +276,14 @@ static void draw_modifier__noise(uiLayout *layout, ID *id, FModifier *fcm, short
RNA_pointer_create(id, &RNA_FModifierNoise, fcm, &ptr);
/* blending mode */
- uiItemR(layout, &ptr, "modification", 0, NULL, 0);
+ uiItemR(layout, &ptr, "blend_type", 0, NULL, 0);
/* split into 2 columns */
split= uiLayoutSplit(layout, 0.5f, 0);
/* col 1 */
col= uiLayoutColumn(split, 0);
- uiItemR(col, &ptr, "size", 0, NULL, 0);
+ uiItemR(col, &ptr, "scale", 0, NULL, 0);
uiItemR(col, &ptr, "strength", 0, NULL, 0);
/* col 2 */
@@ -473,8 +473,8 @@ static void draw_modifier__envelope(uiLayout *layout, ID *id, FModifier *fcm, sh
uiItemR(col, &ptr, "reference_value", 0, NULL, 0);
row= uiLayoutRow(col, 1);
- uiItemR(row, &ptr, "default_minimum", 0, "Min", 0);
- uiItemR(row, &ptr, "default_maximum", 0, "Max", 0);
+ uiItemR(row, &ptr, "default_min", 0, "Min", 0);
+ uiItemR(row, &ptr, "default_max", 0, "Max", 0);
/* control points header */
// TODO: move this control-point control stuff to using the new special widgets for lists
@@ -526,13 +526,13 @@ static void draw_modifier__limits(uiLayout *layout, ID *id, FModifier *fcm, shor
/* x-minimum */
col= uiLayoutColumn(split, 1);
- uiItemR(col, &ptr, "use_minimum_x", 0, NULL, 0);
- uiItemR(col, &ptr, "minimum_x", 0, NULL, 0);
+ uiItemR(col, &ptr, "use_min_x", 0, NULL, 0);
+ uiItemR(col, &ptr, "min_x", 0, NULL, 0);
/* y-minimum*/
col= uiLayoutColumn(split, 1);
- uiItemR(col, &ptr, "use_minimum_y", 0, NULL, 0);
- uiItemR(col, &ptr, "minimum_y", 0, NULL, 0);
+ uiItemR(col, &ptr, "use_min_y", 0, NULL, 0);
+ uiItemR(col, &ptr, "min_y", 0, NULL, 0);
}
/* row 2: maximum */
@@ -544,13 +544,13 @@ static void draw_modifier__limits(uiLayout *layout, ID *id, FModifier *fcm, shor
/* x-minimum */
col= uiLayoutColumn(split, 1);
- uiItemR(col, &ptr, "use_maximum_x", 0, NULL, 0);
- uiItemR(col, &ptr, "maximum_x", 0, NULL, 0);
+ uiItemR(col, &ptr, "use_max_x", 0, NULL, 0);
+ uiItemR(col, &ptr, "max_x", 0, NULL, 0);
/* y-minimum*/
col= uiLayoutColumn(split, 1);
- uiItemR(col, &ptr, "use_maximum_y", 0, NULL, 0);
- uiItemR(col, &ptr, "maximum_y", 0, NULL, 0);
+ uiItemR(col, &ptr, "use_max_y", 0, NULL, 0);
+ uiItemR(col, &ptr, "max_y", 0, NULL, 0);
}
}
@@ -567,8 +567,8 @@ static void draw_modifier__stepped(uiLayout *layout, ID *id, FModifier *fcm, sho
/* block 1: "stepping" settings */
col= uiLayoutColumn(layout, 0);
- uiItemR(col, &ptr, "step_size", 0, NULL, 0);
- uiItemR(col, &ptr, "offset", 0, NULL, 0);
+ uiItemR(col, &ptr, "frame_step", 0, NULL, 0);
+ uiItemR(col, &ptr, "frame_offset", 0, NULL, 0);
/* block 2: start range settings */
col= uiLayoutColumn(layout, 1);
@@ -583,7 +583,7 @@ static void draw_modifier__stepped(uiLayout *layout, ID *id, FModifier *fcm, sho
uiItemR(col, &ptr, "use_frame_end", 0, NULL, 0);
subcol = uiLayoutColumn(col, 1);
- uiLayoutSetActive(subcol, RNA_boolean_get(&ptr, "use_end_frame"));
+ uiLayoutSetActive(subcol, RNA_boolean_get(&ptr, "use_frame_end"));
uiItemR(subcol, &ptr, "frame_end", 0, NULL, 0);
}
@@ -616,7 +616,7 @@ void ANIM_uiTemplate_fmodifier_draw (uiLayout *layout, ID *id, ListBase *modifie
uiBlockSetEmboss(block, UI_EMBOSSN);
/* expand */
- uiItemR(subrow, &ptr, "expanded", UI_ITEM_R_ICON_ONLY, "", 0);
+ uiItemR(subrow, &ptr, "show_expanded", UI_ITEM_R_ICON_ONLY, "", 0);
/* checkbox for 'active' status (for now) */
uiItemR(subrow, &ptr, "active", UI_ITEM_R_ICON_ONLY, "", 0);
diff --git a/source/blender/editors/animation/keyframes_draw.c b/source/blender/editors/animation/keyframes_draw.c
index 5c348f16c06..02e141a7a69 100644
--- a/source/blender/editors/animation/keyframes_draw.c
+++ b/source/blender/editors/animation/keyframes_draw.c
@@ -55,18 +55,12 @@
#include "DNA_world_types.h"
#include "DNA_gpencil_types.h"
-#include "BKE_action.h"
-#include "BKE_depsgraph.h"
-#include "BKE_fcurve.h"
#include "BKE_key.h"
#include "BKE_material.h"
-#include "BKE_object.h"
#include "BKE_global.h" // XXX remove me!
-#include "BKE_context.h"
#include "BKE_utildefines.h"
#include "BIF_gl.h"
-#include "BIF_glutil.h"
#include "UI_resources.h"
#include "UI_view2d.h"
diff --git a/source/blender/editors/animation/keyframes_edit.c b/source/blender/editors/animation/keyframes_edit.c
index 3175e9e34a7..17d674784f8 100644
--- a/source/blender/editors/animation/keyframes_edit.c
+++ b/source/blender/editors/animation/keyframes_edit.c
@@ -48,7 +48,6 @@
#include "DNA_scene_types.h"
#include "DNA_world_types.h"
-#include "BKE_action.h"
#include "BKE_fcurve.h"
#include "BKE_key.h"
#include "BKE_material.h"
diff --git a/source/blender/editors/animation/keyframes_general.c b/source/blender/editors/animation/keyframes_general.c
index abced485769..befcc0a71cb 100644
--- a/source/blender/editors/animation/keyframes_general.c
+++ b/source/blender/editors/animation/keyframes_general.c
@@ -40,9 +40,7 @@
#include "DNA_scene_types.h"
-#include "BKE_action.h"
#include "BKE_fcurve.h"
-#include "BKE_key.h"
#include "BKE_utildefines.h"
#include "ED_anim_api.h"
@@ -84,6 +82,12 @@ void delete_fcurve_key(FCurve *fcu, int index, short do_recalc)
/* Delete this keyframe */
memmove(&fcu->bezt[index], &fcu->bezt[index+1], sizeof(BezTriple)*(fcu->totvert-index-1));
fcu->totvert--;
+
+ if (fcu->totvert == 0) {
+ if (fcu->bezt)
+ MEM_freeN(fcu->bezt);
+ fcu->bezt= NULL;
+ }
/* recalc handles - only if it won't cause problems */
if (do_recalc)
diff --git a/source/blender/editors/animation/keyframing.c b/source/blender/editors/animation/keyframing.c
index bd50b52b27d..e92065eea91 100644
--- a/source/blender/editors/animation/keyframing.c
+++ b/source/blender/editors/animation/keyframing.c
@@ -55,7 +55,6 @@
#include "BKE_main.h"
#include "BKE_nla.h"
#include "BKE_global.h"
-#include "BKE_utildefines.h"
#include "BKE_context.h"
#include "BKE_report.h"
#include "BKE_key.h"
@@ -1363,9 +1362,9 @@ static int insert_key_button_exec (bContext *C, wmOperator *op)
/* try to insert keyframe using property retrieved from UI */
memset(&ptr, 0, sizeof(PointerRNA));
- uiAnimContextProperty(C, &ptr, &prop, &index);
+ uiContextActiveProperty(C, &ptr, &prop, &index);
- if ((ptr.data && prop) && RNA_property_animateable(&ptr, prop)) {
+ if ((ptr.id.data && ptr.data && prop) && RNA_property_animateable(&ptr, prop)) {
path= RNA_path_from_ID_to_property(&ptr, prop);
if (path) {
@@ -1406,6 +1405,8 @@ static int insert_key_button_exec (bContext *C, wmOperator *op)
if (success) {
/* send updates */
+ uiContextAnimUpdate(C);
+
DAG_ids_flush_update(bmain, 0);
/* send notifiers that keyframes have been changed */
@@ -1447,9 +1448,9 @@ static int delete_key_button_exec (bContext *C, wmOperator *op)
/* try to insert keyframe using property retrieved from UI */
memset(&ptr, 0, sizeof(PointerRNA));
- uiAnimContextProperty(C, &ptr, &prop, &index);
+ uiContextActiveProperty(C, &ptr, &prop, &index);
- if (ptr.data && prop) {
+ if (ptr.id.data && ptr.data && prop) {
path= RNA_path_from_ID_to_property(&ptr, prop);
if (path) {
@@ -1477,6 +1478,8 @@ static int delete_key_button_exec (bContext *C, wmOperator *op)
if (success) {
/* send updates */
+ uiContextAnimUpdate(C);
+
DAG_ids_flush_update(bmain, 0);
/* send notifiers that keyframes have been changed */
diff --git a/source/blender/editors/animation/keyingsets.c b/source/blender/editors/animation/keyingsets.c
index 690e9dfa8a6..d80ccf2cd29 100644
--- a/source/blender/editors/animation/keyingsets.c
+++ b/source/blender/editors/animation/keyingsets.c
@@ -40,22 +40,14 @@
#include "BLI_dynstr.h"
#include "DNA_anim_types.h"
-#include "DNA_constraint_types.h"
#include "DNA_scene_types.h"
#include "DNA_object_types.h"
#include "BKE_main.h"
#include "BKE_animsys.h"
-#include "BKE_action.h"
#include "BKE_context.h"
-#include "BKE_constraint.h"
#include "BKE_depsgraph.h"
-#include "BKE_fcurve.h"
-#include "BKE_utildefines.h"
-#include "BKE_context.h"
#include "BKE_report.h"
-#include "BKE_key.h"
-#include "BKE_material.h"
#include "ED_keyframing.h"
#include "ED_screen.h"
@@ -331,10 +323,10 @@ static int add_keyingset_button_exec (bContext *C, wmOperator *op)
/* try to add to keyingset using property retrieved from UI */
memset(&ptr, 0, sizeof(PointerRNA));
- uiAnimContextProperty(C, &ptr, &prop, &index);
+ uiContextActiveProperty(C, &ptr, &prop, &index);
/* check if property is able to be added */
- if (ptr.data && prop && RNA_property_animateable(&ptr, prop)) {
+ if (ptr.id.data && ptr.data && prop && RNA_property_animateable(&ptr, prop)) {
path= RNA_path_from_ID_to_property(&ptr, prop);
if (path) {
@@ -417,9 +409,9 @@ static int remove_keyingset_button_exec (bContext *C, wmOperator *op)
/* try to add to keyingset using property retrieved from UI */
memset(&ptr, 0, sizeof(PointerRNA));
- uiAnimContextProperty(C, &ptr, &prop, &index);
+ uiContextActiveProperty(C, &ptr, &prop, &index);
- if (ptr.data && prop) {
+ if (ptr.id.data && ptr.data && prop) {
path= RNA_path_from_ID_to_property(&ptr, prop);
if (path) {
@@ -530,20 +522,12 @@ ListBase builtin_keyingsets = {NULL, NULL};
/* Find KeyingSet type info given a name */
KeyingSetInfo *ANIM_keyingset_info_find_named (const char name[])
{
- KeyingSetInfo *ksi;
-
/* sanity checks */
if ((name == NULL) || (name[0] == 0))
return NULL;
/* search by comparing names */
- for (ksi = keyingset_type_infos.first; ksi; ksi = ksi->next) {
- if (strcmp(ksi->idname, name) == 0)
- return ksi;
- }
-
- /* no matches found */
- return NULL;
+ return BLI_findstring(&keyingset_type_infos, name, offsetof(KeyingSetInfo, idname));
}
/* Find builtin KeyingSet by name */
diff --git a/source/blender/editors/armature/CMakeLists.txt b/source/blender/editors/armature/CMakeLists.txt
index 9e22bbd7d44..b5634921343 100644
--- a/source/blender/editors/armature/CMakeLists.txt
+++ b/source/blender/editors/armature/CMakeLists.txt
@@ -33,7 +33,7 @@ SET(INC
)
IF(WIN32)
- SET(INC ${INC} ${PTHREADS_INC})
+ LIST(APPEND INC ${PTHREADS_INC})
ENDIF(WIN32)
BLENDERLIB(bf_editor_armature "${SRC}" "${INC}")
diff --git a/source/blender/editors/armature/Makefile b/source/blender/editors/armature/Makefile
index 4838282de92..707ceb55246 100644
--- a/source/blender/editors/armature/Makefile
+++ b/source/blender/editors/armature/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2007 Blender Foundation
# All rights reserved.
diff --git a/source/blender/editors/armature/armature_intern.h b/source/blender/editors/armature/armature_intern.h
index fadb4f234d9..2d28d3cb9e5 100644
--- a/source/blender/editors/armature/armature_intern.h
+++ b/source/blender/editors/armature/armature_intern.h
@@ -66,6 +66,8 @@ void ARMATURE_OT_select_linked(struct wmOperatorType *ot);
void ARMATURE_OT_delete(struct wmOperatorType *ot);
void ARMATURE_OT_duplicate(struct wmOperatorType *ot);
void ARMATURE_OT_extrude(struct wmOperatorType *ot);
+void ARMATURE_OT_hide(struct wmOperatorType *ot);
+void ARMATURE_OT_reveal(struct wmOperatorType *ot);
void ARMATURE_OT_click_extrude(struct wmOperatorType *ot);
void ARMATURE_OT_fill(struct wmOperatorType *ot);
void ARMATURE_OT_merge(struct wmOperatorType *ot);
diff --git a/source/blender/editors/armature/armature_ops.c b/source/blender/editors/armature/armature_ops.c
index 63cef278104..535cc62caf6 100644
--- a/source/blender/editors/armature/armature_ops.c
+++ b/source/blender/editors/armature/armature_ops.c
@@ -29,15 +29,11 @@
#include <stdlib.h>
#include <math.h>
-#include "MEM_guardedalloc.h"
-
+#include "BLO_sys_types.h"
#include "BLI_math.h"
#include "BLI_blenlib.h"
-#include "BKE_context.h"
-#include "BKE_global.h"
-#include "BKE_utildefines.h"
#include "RNA_access.h"
@@ -76,6 +72,8 @@ void ED_operatortypes_armature(void)
WM_operatortype_append(ARMATURE_OT_delete);
WM_operatortype_append(ARMATURE_OT_duplicate);
WM_operatortype_append(ARMATURE_OT_extrude);
+ WM_operatortype_append(ARMATURE_OT_hide);
+ WM_operatortype_append(ARMATURE_OT_reveal);
WM_operatortype_append(ARMATURE_OT_click_extrude);
WM_operatortype_append(ARMATURE_OT_fill);
WM_operatortype_append(ARMATURE_OT_merge);
@@ -207,7 +205,8 @@ void ED_keymap_armature(wmKeyConfig *keyconf)
RNA_boolean_set(kmi->ptr, "snap", 1);
/* only set in editmode armature, by space_view3d listener */
-// WM_keymap_add_item(keymap, "ARMATURE_OT_hide", HKEY, KM_PRESS, 0, 0);
+ WM_keymap_add_item(keymap, "ARMATURE_OT_hide", HKEY, KM_PRESS, 0, 0);
+ WM_keymap_add_item(keymap, "ARMATURE_OT_reveal", HKEY, KM_PRESS, KM_ALT, 0);
WM_keymap_add_item(keymap, "ARMATURE_OT_align", AKEY, KM_PRESS, KM_CTRL|KM_ALT, 0);
WM_keymap_add_item(keymap, "ARMATURE_OT_calculate_roll", NKEY, KM_PRESS, KM_CTRL, 0);
diff --git a/source/blender/editors/armature/editarmature.c b/source/blender/editors/armature/editarmature.c
index e8942bcd963..930f6e684fc 100644
--- a/source/blender/editors/armature/editarmature.c
+++ b/source/blender/editors/armature/editarmature.c
@@ -27,11 +27,11 @@
#include <ctype.h>
#include <stdlib.h>
+#include <stddef.h>
#include <string.h>
#include <math.h>
#include <float.h>
-#include "MEM_guardedalloc.h"
#include "DNA_anim_types.h"
#include "DNA_armature_types.h"
@@ -39,6 +39,8 @@
#include "DNA_meshdata_types.h"
#include "DNA_scene_types.h"
+#include "MEM_guardedalloc.h"
+
#include "BLI_blenlib.h"
#include "BLI_math.h"
#include "BLI_editVert.h"
@@ -58,12 +60,10 @@
#include "BKE_object.h"
#include "BKE_report.h"
#include "BKE_subsurf.h"
-#include "BKE_utildefines.h"
#include "BKE_modifier.h"
#include "DNA_object_types.h"
#include "BIF_gl.h"
-#include "BIF_generate.h"
#include "RNA_access.h"
#include "RNA_define.h"
@@ -88,10 +88,6 @@
#include "reeb.h"
#endif
-/* ************* XXX *************** */
-static void BIF_undo_push(const char *msg) {}
-/* ************* XXX *************** */
-
/* **************** tools on Editmode Armature **************** */
/* Sync selection to parent for connected children */
@@ -178,18 +174,37 @@ EditBone *make_boneList(ListBase *edbo, ListBase *bones, EditBone *parent, Bone
eBone->flag = curBone->flag;
/* fix selection flags */
+
if (eBone->flag & BONE_SELECTED) {
+ /* if the bone is selected the copy its root selection to the parents tip */
eBone->flag |= BONE_TIPSEL;
- if (eBone->parent && (eBone->flag & BONE_CONNECTED))
+ if (eBone->parent && (eBone->flag & BONE_CONNECTED)) {
eBone->parent->flag |= BONE_TIPSEL;
- else
+ eBone->flag &= ~BONE_ROOTSEL; /* this is ignored when there is a connected parent, so unset it */
+ }
+ else {
eBone->flag |= BONE_ROOTSEL;
+ }
}
- else
- eBone->flag &= ~BONE_ROOTSEL;
-
- VECCOPY(eBone->head, curBone->arm_head);
- VECCOPY(eBone->tail, curBone->arm_tail);
+ else {
+ /* if the bone is not selected, but connected to its parent
+ * copy the parents tip selection state */
+ if(eBone->parent && (eBone->flag & BONE_CONNECTED)) {
+ /* selecting with the mouse gives this behavior */
+ if(eBone->parent->flag & BONE_TIPSEL) {
+ eBone->flag |= BONE_ROOTSEL;
+ }
+ else {
+ eBone->flag &= ~BONE_ROOTSEL;
+ }
+
+ /* probably not selected but just incase */
+ eBone->flag &= ~BONE_TIPSEL;
+ }
+ }
+
+ copy_v3_v3(eBone->head, curBone->arm_head);
+ copy_v3_v3(eBone->tail, curBone->arm_tail);
eBone->roll= 0.0f;
@@ -487,13 +502,7 @@ void docenter_armature (Scene *scene, Object *ob, float cursor[3], int centermod
/* checks if an EditBone with a matching name already, returning the matching bone if it exists */
static EditBone *editbone_name_exists (ListBase *edbo, const char *name)
{
- EditBone *eBone;
-
- for (eBone=edbo->first; eBone; eBone=eBone->next) {
- if (!strcmp(name, eBone->name))
- return eBone;
- }
- return NULL;
+ return BLI_findstring(edbo, name, offsetof(EditBone, name));
}
/* note: there's a unique_bone_name() too! */
@@ -576,8 +585,8 @@ static int apply_armature_pose2bones_exec (bContext *C, wmOperator *op)
curbone= editbone_name_exists(arm->edbo, pchan->name);
/* simply copy the head/tail values from pchan over to curbone */
- VECCOPY(curbone->head, pchan->pose_head);
- VECCOPY(curbone->tail, pchan->pose_tail);
+ copy_v3_v3(curbone->head, pchan->pose_head);
+ copy_v3_v3(curbone->tail, pchan->pose_tail);
/* fix roll:
* 1. find auto-calculated roll value for this bone now
@@ -1883,7 +1892,7 @@ void ARMATURE_OT_delete(wmOperatorType *ot)
* toggle==2: only active tag
* toggle==3: swap (no test)
*/
-void ED_armature_deselectall(Object *obedit, int toggle, int doundo)
+void ED_armature_deselectall(Object *obedit, int toggle)
{
bArmature *arm= obedit->data;
EditBone *eBone;
@@ -1954,7 +1963,7 @@ int mouse_armature(bContext *C, short mval[2], int extend)
if (nearBone) {
if (!extend)
- ED_armature_deselectall(obedit, 0, 0);
+ ED_armature_deselectall(obedit, 0);
/* by definition the non-root connected bones have no root point drawn,
so a root selection needs to be delivered to the parent tip */
@@ -2062,7 +2071,7 @@ float ED_rollBoneToVector(EditBone *bone, float new_up_axis[3])
sub_v3_v3v3(nor, bone->tail, bone->head);
vec_roll_to_mat3(nor, 0, mat);
- VECCOPY(up_axis, mat[2]);
+ copy_v3_v3(up_axis, mat[2]);
roll = angle_normalized_v3v3(new_up_axis, up_axis);
@@ -2089,12 +2098,12 @@ static void auto_align_ebone_zaxisup(Scene *scene, View3D *v3d, EditBone *ebone)
vec_roll_to_mat3(delta, 0.0f, curmat);
/* Make new matrix based on y axis & z-up */
- VECCOPY(yaxis, curmat[1]);
+ copy_v3_v3(yaxis, curmat[1]);
unit_m3(targetmat);
- VECCOPY(targetmat[0], xaxis);
- VECCOPY(targetmat[1], yaxis);
- VECCOPY(targetmat[2], zaxis);
+ copy_v3_v3(targetmat[0], xaxis);
+ copy_v3_v3(targetmat[1], yaxis);
+ copy_v3_v3(targetmat[2], zaxis);
normalize_m3(targetmat);
/* Find the difference between the two matrices */
@@ -2117,7 +2126,7 @@ void auto_align_ebone_topoint(EditBone *ebone, float *cursor)
sub_v3_v3v3(delta, ebone->tail, ebone->head);
vec_roll_to_mat3(delta, ebone->roll, curmat);
copy_m4_m3(mat, curmat);
- VECCOPY(mat[3], ebone->head);
+ copy_v3_v3(mat[3], ebone->head);
/* multiply bone-matrix by object matrix (so that bone-matrix is in WorldSpace) */
invert_m4_m4(imat, mat);
@@ -2236,6 +2245,8 @@ static void undoBones_to_editBones(void *uarmv, void *armv)
ebo= uarm->act_edbone;
arm->act_edbone= ebo->temp;
}
+ else
+ arm->act_edbone= NULL;
/* set pointers */
for(newebo= arm->edbo->first; newebo; newebo= newebo->next) {
@@ -2349,7 +2360,7 @@ void add_primitive_bone(Scene *scene, View3D *v3d, RegionView3D *rv3d)
mul_m3_m3m3(totmat, obmat, viewmat);
invert_m3_m3(imat, totmat);
- ED_armature_deselectall(obedit, 0, 0);
+ ED_armature_deselectall(obedit, 0);
/* Create a bone */
bone= ED_armature_edit_bone_add(obedit->data, "Bone");
@@ -2402,7 +2413,7 @@ static int armature_click_extrude_exec(bContext *C, wmOperator *op)
to_root= 1;
}
- ED_armature_deselectall(obedit, 0, 0);
+ ED_armature_deselectall(obedit, 0);
/* we re-use code for mirror editing... */
flipbone= NULL;
@@ -2422,19 +2433,19 @@ static int armature_click_extrude_exec(bContext *C, wmOperator *op)
arm->act_edbone= newbone;
if (to_root) {
- VECCOPY(newbone->head, ebone->head);
+ copy_v3_v3(newbone->head, ebone->head);
newbone->rad_head= ebone->rad_tail;
newbone->parent= ebone->parent;
}
else {
- VECCOPY(newbone->head, ebone->tail);
+ copy_v3_v3(newbone->head, ebone->tail);
newbone->rad_head= ebone->rad_tail;
newbone->parent= ebone;
newbone->flag |= BONE_CONNECTED;
}
curs= give_cursor(scene, v3d);
- VECCOPY(newbone->tail, curs);
+ copy_v3_v3(newbone->tail, curs);
sub_v3_v3v3(newbone->tail, newbone->tail, obedit->obmat[3]);
if (a==1)
@@ -2478,7 +2489,7 @@ static int armature_click_extrude_invoke(bContext *C, wmOperator *op, wmEvent *e
fp= give_cursor(scene, v3d);
- VECCOPY(oldcurs, fp);
+ copy_v3_v3(oldcurs, fp);
mx= event->x - ar->winrct.xmin;
my= event->y - ar->winrct.ymin;
@@ -2508,7 +2519,7 @@ static int armature_click_extrude_invoke(bContext *C, wmOperator *op, wmEvent *e
retv= armature_click_extrude_exec(C, op);
/* restore previous 3d cursor position */
- VECCOPY(fp, oldcurs);
+ copy_v3_v3(fp, oldcurs);
return retv;
}
@@ -2537,8 +2548,8 @@ static EditBone *add_points_bone (Object *obedit, float head[], float tail[])
ebo= ED_armature_edit_bone_add(obedit->data, "Bone");
- VECCOPY(ebo->head, head);
- VECCOPY(ebo->tail, tail);
+ copy_v3_v3(ebo->head, head);
+ copy_v3_v3(ebo->tail, tail);
return ebo;
}
@@ -2865,10 +2876,10 @@ static void fill_add_joint (EditBone *ebo, short eb_tail, ListBase *points)
short found= 0;
if (eb_tail) {
- VECCOPY(vec, ebo->tail);
+ copy_v3_v3(vec, ebo->tail);
}
else {
- VECCOPY(vec, ebo->head);
+ copy_v3_v3(vec, ebo->head);
}
for (ebp= points->first; ebp; ebp= ebp->next) {
@@ -2897,11 +2908,11 @@ static void fill_add_joint (EditBone *ebo, short eb_tail, ListBase *points)
ebp= MEM_callocN(sizeof(EditBonePoint), "EditBonePoint");
if (eb_tail) {
- VECCOPY(ebp->vec, ebo->tail);
+ copy_v3_v3(ebp->vec, ebo->tail);
ebp->tail_owner= ebo;
}
else {
- VECCOPY(ebp->vec, ebo->head);
+ copy_v3_v3(ebp->vec, ebo->head);
ebp->head_owner= ebo;
}
@@ -3113,8 +3124,8 @@ static void bones_merge(Object *obedit, EditBone *start, EditBone *end, EditBone
/* step 2a: parent children of in-between bones to newbone */
for (chain= chains->first; chain; chain= chain->next) {
/* ick: we need to check if parent of each bone in chain is one of the bones in the */
+ short found= 0;
for (ebo= chain->data; ebo; ebo= ebo->parent) {
- short found= 0;
/* try to find which bone from the list to be removed, is the parent */
for (ebone= end; ebone; ebone= ebone->parent) {
@@ -3130,6 +3141,9 @@ static void bones_merge(Object *obedit, EditBone *start, EditBone *end, EditBone
break;
}
}
+ if (found) {
+ break;
+ }
}
/* step 2b: parent child of end to newbone (child from this chain) */
@@ -3141,6 +3155,9 @@ static void bones_merge(Object *obedit, EditBone *start, EditBone *end, EditBone
ebone= (ebo == start) ? (NULL) : (ebo->parent);
bone_free(arm, ebo);
}
+
+ newbone->flag |= (BONE_ROOTSEL|BONE_TIPSEL|BONE_SELECTED);
+ ED_armature_sync_selection(arm->edbo);
}
@@ -3245,6 +3262,81 @@ void ARMATURE_OT_merge (wmOperatorType *ot)
/* ************** END Add/Remove stuff in editmode ************ */
/* *************** Tools in editmode *********** */
+static int armature_hide_exec(bContext *C, wmOperator *op)
+{
+ Object *obedit= CTX_data_edit_object(C);
+ bArmature *arm= obedit->data;
+ EditBone *ebone;
+
+ /* cancel if nothing selected */
+ if (CTX_DATA_COUNT(C, selected_bones) == 0)
+ return OPERATOR_CANCELLED;
+
+ for (ebone = arm->edbo->first; ebone; ebone=ebone->next) {
+ if (EBONE_VISIBLE(arm, ebone)) {
+ if (ebone->flag & BONE_SELECTED) {
+ ebone->flag &= ~(BONE_TIPSEL|BONE_SELECTED|BONE_ROOTSEL);
+ ebone->flag |= BONE_HIDDEN_A;
+ }
+ }
+ }
+ ED_armature_validate_active(arm);
+ ED_armature_sync_selection(arm->edbo);
+
+ WM_event_add_notifier(C, NC_OBJECT|ND_DRAW, obedit);
+
+ return OPERATOR_FINISHED;
+}
+
+void ARMATURE_OT_hide(wmOperatorType *ot)
+{
+ /* identifiers */
+ ot->name= "Hide Selected Bones";
+ ot->idname= "ARMATURE_OT_hide";
+
+ /* api callbacks */
+ ot->exec= armature_hide_exec;
+ ot->poll= ED_operator_editarmature;
+
+ /* flags */
+ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
+}
+
+static int armature_reveal_exec(bContext *C, wmOperator *op)
+{
+ Object *obedit= CTX_data_edit_object(C);
+ bArmature *arm= obedit->data;
+ EditBone *ebone;
+
+ for (ebone = arm->edbo->first; ebone; ebone=ebone->next) {
+ if(arm->layer & ebone->layer) {
+ if (ebone->flag & BONE_HIDDEN_A) {
+ ebone->flag |= (BONE_TIPSEL|BONE_SELECTED|BONE_ROOTSEL);
+ ebone->flag &= ~BONE_HIDDEN_A;
+ }
+ }
+ }
+ ED_armature_validate_active(arm);
+ ED_armature_sync_selection(arm->edbo);
+
+ WM_event_add_notifier(C, NC_OBJECT|ND_DRAW, obedit);
+
+ return OPERATOR_FINISHED;
+}
+
+void ARMATURE_OT_reveal(wmOperatorType *ot)
+{
+ /* identifiers */
+ ot->name= "Reveal Bones";
+ ot->idname= "ARMATURE_OT_reveal";
+
+ /* api callbacks */
+ ot->exec= armature_reveal_exec;
+ ot->poll= ED_operator_editarmature;
+
+ /* flags */
+ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
+}
void hide_selected_armature_bones(Scene *scene)
{
@@ -3262,7 +3354,6 @@ void hide_selected_armature_bones(Scene *scene)
}
ED_armature_validate_active(arm);
ED_armature_sync_selection(arm->edbo);
- BIF_undo_push("Hide Bones");
}
@@ -3285,7 +3376,6 @@ static void hide_unselected_armature_bones(Scene *scene)
ED_armature_validate_active(arm);
ED_armature_sync_selection(arm->edbo);
- BIF_undo_push("Hide Unselected Bones");
}
#endif
@@ -3306,7 +3396,6 @@ void show_all_armature_bones(Scene *scene)
}
ED_armature_validate_active(arm);
ED_armature_sync_selection(arm->edbo);
- BIF_undo_push("Reveal Bones");
}
#endif
@@ -3491,7 +3580,7 @@ static int armature_bone_primitive_add_exec(bContext *C, wmOperator *op)
mul_m3_m3m3(totmat, obmat, viewmat);
invert_m3_m3(imat, totmat);
- ED_armature_deselectall(obedit, 0, 0);
+ ED_armature_deselectall(obedit, 0);
/* Create a bone */
bone= ED_armature_edit_bone_add(obedit->data, name);
@@ -4374,7 +4463,7 @@ int ED_do_pose_selectbuffer(Scene *scene, Base *base, unsigned int *buffer, shor
/* since we do unified select, we don't shift+select a bone if the armature object was not active yet */
if (!(extend) || (base != scene->basact)) {
- ED_pose_deselectall(ob, 0, 0);
+ ED_pose_deselectall(ob, 0);
nearBone->flag |= (BONE_SELECTED|BONE_TIPSEL|BONE_ROOTSEL);
arm->act_bone= nearBone;
@@ -4421,7 +4510,7 @@ int ED_do_pose_selectbuffer(Scene *scene, Base *base, unsigned int *buffer, shor
test==2: only clear active tag
test==3: swap select (no test / inverse selection status of all independently)
*/
-void ED_pose_deselectall (Object *ob, int test, int doundo)
+void ED_pose_deselectall (Object *ob, int test)
{
bArmature *arm= ob->data;
bPoseChannel *pchan;
@@ -4461,13 +4550,6 @@ void ED_pose_deselectall (Object *ob, int test, int doundo)
if(arm->act_bone && (arm->act_bone->flag & BONE_SELECTED)==0)
arm->act_bone= NULL;
-
- //countall(); // XXX need an equivalent to this...
-
- if (doundo) {
- if (selectmode==1) BIF_undo_push("Select All");
- else BIF_undo_push("Deselect All");
- }
}
static int bone_skinnable(Object *ob, Bone *bone, void *datap)
@@ -4658,7 +4740,7 @@ void add_verts_to_dgroups(Scene *scene, Object *ob, Object *par, int heat, int m
bArmature *arm= par->data;
Bone **bonelist, *bone;
bDeformGroup **dgrouplist, **dgroupflip;
- bDeformGroup *dgroup, *curdg;
+ bDeformGroup *dgroup;
bPoseChannel *pchan;
Mesh *mesh;
Mat4 *bbone = NULL;
@@ -4752,13 +4834,7 @@ void add_verts_to_dgroups(Scene *scene, Object *ob, Object *par, int heat, int m
// 0 = don't strip off number extensions
flip_side_name(name, dgroup->name, FALSE);
-
- for (curdg = ob->defbase.first; curdg; curdg=curdg->next) {
- if (!strcmp(curdg->name, name))
- break;
- }
-
- dgroupflip[j] = curdg;
+ dgroupflip[j] = defgroup_find_name(ob, name);
}
}
@@ -4842,8 +4918,6 @@ static int pose_clear_scale_exec(bContext *C, wmOperator *op)
{
Scene *scene= CTX_data_scene(C);
Object *ob= CTX_data_active_object(C);
-
- KeyingSet *ks= ANIM_builtin_keyingset_get_named(NULL, "Scaling");
short autokey = 0;
/* only clear those channels that are not locked */
@@ -4874,6 +4948,17 @@ static int pose_clear_scale_exec(bContext *C, wmOperator *op)
/* perform autokeying on the bones if needed */
if (autokey) {
+ KeyingSet *ks;
+
+ /* get KeyingSet to use
+ * - use the active KeyingSet if defined (and user wants to use it for all autokeying),
+ * or otherwise key transforms only
+ */
+ if (IS_AUTOKEY_FLAG(ONLYKEYINGSET) && (scene->active_keyingset))
+ ks = ANIM_scene_get_active_keyingset(scene);
+ else
+ ks = ANIM_builtin_keyingset_get_named(NULL, "Scaling");
+
/* insert keyframes */
ANIM_apply_keyingset(C, NULL, NULL, ks, MODIFYKEY_MODE_INSERT, (float)CFRA);
@@ -4909,8 +4994,6 @@ static int pose_clear_loc_exec(bContext *C, wmOperator *op)
{
Scene *scene= CTX_data_scene(C);
Object *ob= CTX_data_active_object(C);
-
- KeyingSet *ks= ANIM_builtin_keyingset_get_named(NULL, "Location");
short autokey = 0;
/* only clear those channels that are not locked */
@@ -4942,6 +5025,17 @@ static int pose_clear_loc_exec(bContext *C, wmOperator *op)
/* perform autokeying on the bones if needed */
if (autokey) {
+ KeyingSet *ks;
+
+ /* get KeyingSet to use
+ * - use the active KeyingSet if defined (and user wants to use it for all autokeying),
+ * or otherwise key transforms only
+ */
+ if (IS_AUTOKEY_FLAG(ONLYKEYINGSET) && (scene->active_keyingset))
+ ks = ANIM_scene_get_active_keyingset(scene);
+ else
+ ks = ANIM_builtin_keyingset_get_named(NULL, "Location");
+
/* insert keyframes */
ANIM_apply_keyingset(C, NULL, NULL, ks, MODIFYKEY_MODE_INSERT, (float)CFRA);
@@ -4977,8 +5071,6 @@ static int pose_clear_rot_exec(bContext *C, wmOperator *op)
{
Scene *scene= CTX_data_scene(C);
Object *ob= CTX_data_active_object(C);
-
- KeyingSet *ks= ANIM_builtin_keyingset_get_named(NULL, "Rotation");
short autokey = 0;
/* only clear those channels that are not locked */
@@ -5094,6 +5186,17 @@ static int pose_clear_rot_exec(bContext *C, wmOperator *op)
/* perform autokeying on the bones if needed */
if (autokey) {
+ KeyingSet *ks;
+
+ /* get KeyingSet to use
+ * - use the active KeyingSet if defined (and user wants to use it for all autokeying),
+ * or otherwise key transforms only
+ */
+ if (IS_AUTOKEY_FLAG(ONLYKEYINGSET) && (scene->active_keyingset))
+ ks = ANIM_scene_get_active_keyingset(scene);
+ else
+ ks = ANIM_builtin_keyingset_get_named(NULL, "Rotation");
+
/* insert keyframes */
ANIM_apply_keyingset(C, NULL, NULL, ks, MODIFYKEY_MODE_INSERT, (float)CFRA);
@@ -5276,6 +5379,7 @@ static int hide_selected_pose_bone(Object *ob, Bone *bone, void *ptr)
if (arm->layer & bone->layer) {
if (bone->flag & BONE_SELECTED) {
bone->flag |= BONE_HIDDEN_P;
+ bone->flag &= ~BONE_SELECTED;
if(arm->act_bone==bone)
arm->act_bone= NULL;
}
@@ -5471,6 +5575,8 @@ void ED_armature_bone_rename(bArmature *arm, char *oldnamep, char *newnamep)
/* do entire dbase - objects */
for (ob= G.main->object.first; ob; ob= ob->id.next) {
+ ModifierData *md;
+
/* we have the object using the armature */
if (arm==ob->data) {
Object *cob;
@@ -5514,11 +5620,22 @@ void ED_armature_bone_rename(bArmature *arm, char *oldnamep, char *newnamep)
}
if (modifiers_usesArmature(ob, arm)) {
- bDeformGroup *dg;
- /* bone name in defgroup */
- for (dg=ob->defbase.first; dg; dg=dg->next) {
- if (!strcmp(dg->name, oldname))
- BLI_strncpy(dg->name, newname, MAXBONENAME);
+ bDeformGroup *dg= defgroup_find_name(ob, oldname);
+ if(dg) {
+ BLI_strncpy(dg->name, newname, MAXBONENAME);
+ }
+ }
+
+ /* fix modifiers that might be using this name */
+ for (md= ob->modifiers.first; md; md= md->next) {
+ if (md->type == eModifierType_Hook) {
+ HookModifierData *hmd = (HookModifierData *)md;
+
+ /* uses armature, so may use the affected bone name */
+ if (hmd->object && (hmd->object->data == arm)) {
+ if (!strcmp(hmd->subtarget, oldname))
+ BLI_strncpy(hmd->subtarget, newname, MAXBONENAME);
+ }
}
}
@@ -5655,11 +5772,12 @@ void transform_armature_mirror_update(Object *obedit)
eboflip->tail[1]= ebo->tail[1];
eboflip->tail[2]= ebo->tail[2];
eboflip->rad_tail= ebo->rad_tail;
+ eboflip->roll= -ebo->roll;
/* Also move connected children, in case children's name aren't mirrored properly */
for (children=arm->edbo->first; children; children=children->next) {
if (children->parent == eboflip && children->flag & BONE_CONNECTED) {
- VECCOPY(children->head, eboflip->tail);
+ copy_v3_v3(children->head, eboflip->tail);
children->rad_head = ebo->rad_tail;
}
}
@@ -5669,12 +5787,13 @@ void transform_armature_mirror_update(Object *obedit)
eboflip->head[1]= ebo->head[1];
eboflip->head[2]= ebo->head[2];
eboflip->rad_head= ebo->rad_head;
+ eboflip->roll= -ebo->roll;
/* Also move connected parent, in case parent's name isn't mirrored properly */
if (eboflip->parent && eboflip->flag & BONE_CONNECTED)
{
EditBone *parent = eboflip->parent;
- VECCOPY(parent->tail, eboflip->head);
+ copy_v3_v3(parent->tail, eboflip->head);
parent->rad_tail = ebo->rad_head;
}
}
@@ -5715,7 +5834,7 @@ EditBone * subdivideByAngle(Scene *scene, Object *obedit, ReebArc *arc, ReebNode
parent = ED_armature_edit_bone_add(arm, "Bone");
parent->flag |= BONE_SELECTED|BONE_TIPSEL|BONE_ROOTSEL;
- VECCOPY(parent->head, head->p);
+ copy_v3_v3(parent->head, head->p);
root = parent;
@@ -5740,17 +5859,17 @@ EditBone * subdivideByAngle(Scene *scene, Object *obedit, ReebArc *arc, ReebNode
if (len1 > 0.0f && len2 > 0.0f && dot_v3v3(vec1, vec2) < angleLimit)
{
- VECCOPY(parent->tail, previous);
+ copy_v3_v3(parent->tail, previous);
child = ED_armature_edit_bone_add(arm, "Bone");
- VECCOPY(child->head, parent->tail);
+ copy_v3_v3(child->head, parent->tail);
child->parent = parent;
child->flag |= BONE_CONNECTED|BONE_SELECTED|BONE_TIPSEL|BONE_ROOTSEL;
parent = child; /* new child is next parent */
}
}
- VECCOPY(parent->tail, tail->p);
+ copy_v3_v3(parent->tail, tail->p);
/* If the bone wasn't subdivided, delete it and return NULL
* to let subsequent subdivision methods do their thing.
@@ -5869,7 +5988,7 @@ void generateSkeletonFromReebGraph(Scene *scene, ReebGraph *rg)
obedit= scene->basact->object;
/* Copy orientation from source */
- VECCOPY(dst->loc, src->obmat[3]);
+ copy_v3_v3(dst->loc, src->obmat[3]);
mat4_to_eul( dst->rot,src->obmat);
mat4_to_size( dst->size,src->obmat);
@@ -5951,8 +6070,8 @@ void generateSkeletonFromReebGraph(Scene *scene, ReebGraph *rg)
bone = ED_armature_edit_bone_add(obedit->data, "Bone");
bone->flag |= BONE_SELECTED|BONE_TIPSEL|BONE_ROOTSEL;
- VECCOPY(bone->head, head->p);
- VECCOPY(bone->tail, tail->p);
+ copy_v3_v3(bone->head, head->p);
+ copy_v3_v3(bone->tail, tail->p);
/* set first and last bone, since there's only one */
lastBone = bone;
@@ -6016,8 +6135,6 @@ void generateSkeletonFromReebGraph(Scene *scene, ReebGraph *rg)
}
BLI_ghash_free(arcBoneMap, NULL, NULL);
-
- BIF_undo_push("Generate Skeleton");
}
void generateSkeleton(Scene *scene)
diff --git a/source/blender/editors/armature/editarmature_generate.c b/source/blender/editors/armature/editarmature_generate.c
index c48e7686ca9..1c9024f6f91 100644
--- a/source/blender/editors/armature/editarmature_generate.c
+++ b/source/blender/editors/armature/editarmature_generate.c
@@ -32,7 +32,6 @@
#include <math.h>
#include <float.h>
-#include "MEM_guardedalloc.h"
#include "DNA_scene_types.h"
#include "DNA_armature_types.h"
@@ -42,8 +41,6 @@
#include "BLI_graph.h"
#include "BKE_utildefines.h"
-#include "BKE_global.h"
-#include "BKE_context.h"
#include "ED_armature.h"
#include "armature_intern.h"
diff --git a/source/blender/editors/armature/editarmature_retarget.c b/source/blender/editors/armature/editarmature_retarget.c
index af91823f917..637c6076314 100644
--- a/source/blender/editors/armature/editarmature_retarget.c
+++ b/source/blender/editors/armature/editarmature_retarget.c
@@ -48,8 +48,6 @@
//#include "BDR_editobject.h"
-#include "BKE_global.h"
-#include "BKE_utildefines.h"
#include "BKE_constraint.h"
#include "BKE_armature.h"
#include "BKE_context.h"
diff --git a/source/blender/editors/armature/editarmature_sketch.c b/source/blender/editors/armature/editarmature_sketch.c
index 2c9ddf3abd8..241301b8ee1 100644
--- a/source/blender/editors/armature/editarmature_sketch.c
+++ b/source/blender/editors/armature/editarmature_sketch.c
@@ -38,10 +38,6 @@
#include "BLI_graph.h"
#include "BLI_ghash.h"
-#include "BKE_utildefines.h"
-#include "BKE_global.h"
-#include "BKE_DerivedMesh.h"
-#include "BKE_object.h"
#include "BKE_context.h"
#include "BKE_sketch.h"
diff --git a/source/blender/editors/armature/meshlaplacian.c b/source/blender/editors/armature/meshlaplacian.c
index 0325232e5b9..84b02b4796a 100644
--- a/source/blender/editors/armature/meshlaplacian.c
+++ b/source/blender/editors/armature/meshlaplacian.c
@@ -36,7 +36,6 @@
#include "DNA_object_types.h"
#include "DNA_mesh_types.h"
#include "DNA_meshdata_types.h"
-#include "DNA_modifier_types.h"
#include "DNA_scene_types.h"
#include "BLI_math.h"
diff --git a/source/blender/editors/armature/poseSlide.c b/source/blender/editors/armature/poseSlide.c
index 21b99bc10c0..8d8f1bf24ee 100644
--- a/source/blender/editors/armature/poseSlide.c
+++ b/source/blender/editors/armature/poseSlide.c
@@ -44,17 +44,10 @@
#include "DNA_object_types.h"
#include "DNA_scene_types.h"
-#include "BKE_animsys.h"
-#include "BKE_action.h"
-#include "BKE_armature.h"
-#include "BKE_depsgraph.h"
#include "BKE_fcurve.h"
-#include "BKE_object.h"
-#include "BKE_global.h"
#include "BKE_context.h"
#include "BKE_report.h"
-#include "BKE_utildefines.h"
#include "RNA_access.h"
#include "RNA_define.h"
@@ -63,7 +56,6 @@
#include "WM_types.h"
-#include "BIF_gl.h"
#include "ED_armature.h"
#include "ED_keyframes_draw.h"
diff --git a/source/blender/editors/armature/poseUtils.c b/source/blender/editors/armature/poseUtils.c
index c9a80318050..b8b9c354d9a 100644
--- a/source/blender/editors/armature/poseUtils.c
+++ b/source/blender/editors/armature/poseUtils.c
@@ -44,17 +44,11 @@
#include "DNA_object_types.h"
#include "DNA_scene_types.h"
-#include "BKE_animsys.h"
#include "BKE_action.h"
#include "BKE_armature.h"
#include "BKE_depsgraph.h"
-#include "BKE_fcurve.h"
-#include "BKE_object.h"
-#include "BKE_global.h"
#include "BKE_context.h"
-#include "BKE_report.h"
-#include "BKE_utildefines.h"
#include "RNA_access.h"
@@ -62,7 +56,6 @@
#include "WM_types.h"
-#include "BIF_gl.h"
#include "ED_armature.h"
#include "ED_keyframing.h"
diff --git a/source/blender/editors/armature/poselib.c b/source/blender/editors/armature/poselib.c
index 408a2e1e599..f490158424c 100644
--- a/source/blender/editors/armature/poselib.c
+++ b/source/blender/editors/armature/poselib.c
@@ -48,13 +48,9 @@
#include "BKE_action.h"
#include "BKE_armature.h"
#include "BKE_depsgraph.h"
-#include "BKE_modifier.h"
-#include "BKE_object.h"
-#include "BKE_global.h"
#include "BKE_context.h"
#include "BKE_report.h"
-#include "BKE_utildefines.h"
#include "RNA_access.h"
#include "RNA_define.h"
@@ -282,8 +278,16 @@ static void poselib_add_menu_invoke__replacemenu (bContext *C, uiLayout *layout,
uiLayoutSetOperatorContext(layout, WM_OP_EXEC_DEFAULT);
/* add each marker to this menu */
- for (marker= act->markers.first; marker; marker= marker->next)
- uiItemIntO(layout, marker->name, ICON_ARMATURE_DATA, "POSELIB_OT_pose_add", "frame", marker->frame);
+ for (marker= act->markers.first; marker; marker= marker->next) {
+ PointerRNA props_ptr;
+
+ props_ptr = uiItemFullO(layout, "POSELIB_OT_pose_add",
+ marker->name, ICON_ARMATURE_DATA, NULL,
+ WM_OP_EXEC_DEFAULT, UI_ITEM_O_RETURN_PROPS);
+
+ RNA_int_set(&props_ptr, "frame", marker->frame);
+ RNA_string_set(&props_ptr, "name", marker->name);
+ }
}
static int poselib_add_menu_invoke (bContext *C, wmOperator *op, wmEvent *evt)
@@ -1490,6 +1494,8 @@ void POSELIB_OT_browse_interactive (wmOperatorType *ot)
/* properties */
// TODO: make the pose_index into a proper enum instead of a cryptic int...
ot->prop= RNA_def_int(ot->srna, "pose_index", -1, -2, INT_MAX, "Pose", "Index of the pose to apply (-2 for no change to pose, -1 for poselib active pose)", 0, INT_MAX);
- // XXX: percentage vs factor?
- RNA_def_float_factor(ot->srna, "blend_factor", 1.0f, 0.0f, 1.0f, "Blend Factor", "Amount that the pose is applied on top of the existing poses", 0.0f, 1.0f);
+
+ // XXX: percentage vs factor?
+ /* not used yet */
+ /* RNA_def_float_factor(ot->srna, "blend_factor", 1.0f, 0.0f, 1.0f, "Blend Factor", "Amount that the pose is applied on top of the existing poses", 0.0f, 1.0f); */
}
diff --git a/source/blender/editors/armature/poseobject.c b/source/blender/editors/armature/poseobject.c
index 92b52d4b62a..b8c945f0d77 100644
--- a/source/blender/editors/armature/poseobject.c
+++ b/source/blender/editors/armature/poseobject.c
@@ -45,23 +45,15 @@
#include "BKE_anim.h"
#include "BKE_idprop.h"
-#include "BKE_animsys.h"
#include "BKE_action.h"
#include "BKE_armature.h"
-#include "BKE_blender.h"
#include "BKE_context.h"
#include "BKE_constraint.h"
#include "BKE_deform.h"
#include "BKE_depsgraph.h"
-#include "BKE_displist.h"
-#include "BKE_fcurve.h"
-#include "BKE_global.h"
#include "BKE_modifier.h"
-#include "BKE_object.h"
-#include "BKE_utildefines.h"
#include "BKE_report.h"
-#include "BIF_gl.h"
#include "RNA_access.h"
#include "RNA_define.h"
@@ -165,7 +157,7 @@ static short pose_has_protected_selected(Object *ob, short only_selected, short
}
/* only for real IK, not for auto-IK */
-int ED_pose_channel_in_IK_chain(Object *ob, bPoseChannel *pchan)
+static int pose_channel_in_IK_chain(Object *ob, bPoseChannel *pchan, int level)
{
bConstraint *con;
Bone *bone;
@@ -175,18 +167,25 @@ int ED_pose_channel_in_IK_chain(Object *ob, bPoseChannel *pchan)
for(con= pchan->constraints.first; con; con= con->next) {
if(con->type==CONSTRAINT_TYPE_KINEMATIC) {
bKinematicConstraint *data= con->data;
- if((data->flag & CONSTRAINT_IK_AUTO)==0)
- return 1;
+ if(data->rootbone == 0 || data->rootbone > level) {
+ if((data->flag & CONSTRAINT_IK_AUTO)==0)
+ return 1;
+ }
}
}
for(bone= pchan->bone->childbase.first; bone; bone= bone->next) {
pchan= get_pose_channel(ob->pose, bone->name);
- if(pchan && ED_pose_channel_in_IK_chain(ob, pchan))
+ if(pchan && pose_channel_in_IK_chain(ob, pchan, level + 1))
return 1;
}
return 0;
}
+int ED_pose_channel_in_IK_chain(Object *ob, bPoseChannel *pchan)
+{
+ return pose_channel_in_IK_chain(ob, pchan, 0);
+}
+
/* ********************************************** */
/* Motion Paths */
@@ -1586,7 +1585,7 @@ static int pose_armature_layers_invoke (bContext *C, wmOperator *op, wmEvent *ev
/* get RNA pointer to armature data to use that to retrieve the layers as ints to init the operator */
RNA_id_pointer_create((ID *)arm, &ptr);
- RNA_boolean_get_array(&ptr, "layer", layers);
+ RNA_boolean_get_array(&ptr, "layers", layers);
RNA_boolean_set_array(op->ptr, "layers", layers);
/* part to sync with other similar operators... */
@@ -1606,7 +1605,7 @@ static int pose_armature_layers_exec (bContext *C, wmOperator *op)
/* get pointer for armature, and write data there... */
RNA_id_pointer_create((ID *)arm, &ptr);
- RNA_boolean_set_array(&ptr, "layer", layers);
+ RNA_boolean_set_array(&ptr, "layers", layers);
/* note, notifier might evolve */
WM_event_add_notifier(C, NC_OBJECT|ND_POSE, ob);
@@ -1698,7 +1697,7 @@ static int pose_bone_layers_exec (bContext *C, wmOperator *op)
{
/* get pointer for pchan, and write flags this way */
RNA_pointer_create((ID *)arm, &RNA_Bone, pchan->bone, &ptr);
- RNA_boolean_set_array(&ptr, "layer", layers);
+ RNA_boolean_set_array(&ptr, "layers", layers);
}
CTX_DATA_END;
@@ -1772,7 +1771,7 @@ static int armature_bone_layers_exec (bContext *C, wmOperator *op)
{
/* get pointer for pchan, and write flags this way */
RNA_pointer_create((ID *)arm, &RNA_EditBone, ebone, &ptr);
- RNA_boolean_set_array(&ptr, "layer", layers);
+ RNA_boolean_set_array(&ptr, "layers", layers);
}
CTX_DATA_END;
diff --git a/source/blender/editors/armature/reeb.c b/source/blender/editors/armature/reeb.c
index fd95879f3ec..9602d80575a 100644
--- a/source/blender/editors/armature/reeb.c
+++ b/source/blender/editors/armature/reeb.c
@@ -31,14 +31,13 @@
#include <stdlib.h> // for qsort
#include <float.h>
-
#include "DNA_scene_types.h"
#include "DNA_object_types.h"
-#include "BKE_context.h"
-
#include "MEM_guardedalloc.h"
+#include "BKE_context.h"
+
#include "BLI_blenlib.h"
#include "BLI_math.h"
#include "BLI_editVert.h"
@@ -51,11 +50,7 @@
//#include "BIF_interface.h"
//#include "BIF_toolbox.h"
//#include "BIF_graphics.h"
-#include "BIF_gl.h"
-#include "BKE_global.h"
-#include "BKE_utildefines.h"
-#include "BKE_customdata.h"
//#include "blendef.h"
diff --git a/source/blender/editors/curve/Makefile b/source/blender/editors/curve/Makefile
index 6449700e50b..d9c51c7420e 100644
--- a/source/blender/editors/curve/Makefile
+++ b/source/blender/editors/curve/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2007 Blender Foundation
# All rights reserved.
diff --git a/source/blender/editors/curve/curve_intern.h b/source/blender/editors/curve/curve_intern.h
index 10c1bd84262..2567494ddf3 100644
--- a/source/blender/editors/curve/curve_intern.h
+++ b/source/blender/editors/curve/curve_intern.h
@@ -97,9 +97,9 @@ void CURVE_OT_primitive_nurbs_path_add(struct wmOperatorType *ot);
void SURFACE_OT_primitive_nurbs_surface_curve_add(struct wmOperatorType *ot);
void SURFACE_OT_primitive_nurbs_surface_circle_add(struct wmOperatorType *ot);
void SURFACE_OT_primitive_nurbs_surface_surface_add(struct wmOperatorType *ot);
-void SURFACE_OT_primitive_nurbs_surface_tube_add(struct wmOperatorType *ot);
+void SURFACE_OT_primitive_nurbs_surface_cylinder_add(struct wmOperatorType *ot);
void SURFACE_OT_primitive_nurbs_surface_sphere_add(struct wmOperatorType *ot);
-void SURFACE_OT_primitive_nurbs_surface_donut_add(struct wmOperatorType *ot);
+void SURFACE_OT_primitive_nurbs_surface_torus_add(struct wmOperatorType *ot);
void CURVE_OT_de_select_first(struct wmOperatorType *ot);
void CURVE_OT_de_select_last(struct wmOperatorType *ot);
diff --git a/source/blender/editors/curve/curve_ops.c b/source/blender/editors/curve/curve_ops.c
index 47b1fee3cf6..89c19d93b0f 100644
--- a/source/blender/editors/curve/curve_ops.c
+++ b/source/blender/editors/curve/curve_ops.c
@@ -29,16 +29,12 @@
#include <stdlib.h>
#include <math.h>
-#include "MEM_guardedalloc.h"
#include "DNA_curve_types.h"
#include "BLI_math.h"
#include "BLI_blenlib.h"
-#include "BKE_context.h"
-#include "BKE_global.h"
-#include "BKE_utildefines.h"
#include "RNA_access.h"
@@ -109,9 +105,9 @@ void ED_operatortypes_curve(void)
WM_operatortype_append(SURFACE_OT_primitive_nurbs_surface_curve_add);
WM_operatortype_append(SURFACE_OT_primitive_nurbs_surface_circle_add);
WM_operatortype_append(SURFACE_OT_primitive_nurbs_surface_surface_add);
- WM_operatortype_append(SURFACE_OT_primitive_nurbs_surface_tube_add);
+ WM_operatortype_append(SURFACE_OT_primitive_nurbs_surface_cylinder_add);
WM_operatortype_append(SURFACE_OT_primitive_nurbs_surface_sphere_add);
- WM_operatortype_append(SURFACE_OT_primitive_nurbs_surface_donut_add);
+ WM_operatortype_append(SURFACE_OT_primitive_nurbs_surface_torus_add);
WM_operatortype_append(CURVE_OT_smooth);
WM_operatortype_append(CURVE_OT_smooth_radius);
diff --git a/source/blender/editors/curve/editcurve.c b/source/blender/editors/curve/editcurve.c
index f2e05da7995..7b9c6c7cc95 100644
--- a/source/blender/editors/curve/editcurve.c
+++ b/source/blender/editors/curve/editcurve.c
@@ -36,6 +36,11 @@
#include <io.h>
#endif
#include <stdlib.h>
+
+#include "DNA_key_types.h"
+#include "DNA_object_types.h"
+#include "DNA_scene_types.h"
+
#include "MEM_guardedalloc.h"
#include "BLI_blenlib.h"
@@ -44,10 +49,6 @@
#include "BLI_rand.h"
#include "BLI_ghash.h"
-#include "DNA_key_types.h"
-#include "DNA_object_types.h"
-#include "DNA_scene_types.h"
-
#include "BKE_context.h"
#include "BKE_curve.h"
#include "BKE_depsgraph.h"
@@ -56,9 +57,7 @@
#include "BKE_key.h"
#include "BKE_library.h"
#include "BKE_main.h"
-#include "BKE_object.h"
#include "BKE_report.h"
-#include "BKE_utildefines.h"
#include "WM_api.h"
#include "WM_types.h"
@@ -726,7 +725,7 @@ static void calc_shapeKeys(Object *obedit)
int a, i, j;
EditNurb *editnurb= cu->editnurb;
KeyBlock *currkey;
- KeyBlock *actkey= ob_get_keyblock(obedit);
+ KeyBlock *actkey= BLI_findlink(&cu->key->block, editnurb->shapenr-1);
BezTriple *bezt, *oldbezt;
BPoint *bp, *oldbp;
Nurb *nu;
@@ -740,7 +739,7 @@ static void calc_shapeKeys(Object *obedit)
int act_is_basis = 0;
/* find if this key is a basis for any others */
for(currkey = cu->key->block.first; currkey; currkey= currkey->next) {
- if(obedit->shapenr-1 == currkey->relative) {
+ if(editnurb->shapenr-1 == currkey->relative) {
act_is_basis = 1;
break;
}
@@ -808,7 +807,7 @@ static void calc_shapeKeys(Object *obedit)
currkey = cu->key->block.first;
while(currkey) {
- int apply_offset = (ofs && (currkey != actkey) && (obedit->shapenr-1 == currkey->relative));
+ int apply_offset = (ofs && (currkey != actkey) && (editnurb->shapenr-1 == currkey->relative));
fp= newkey= MEM_callocN(cu->key->elemsize * totvert, "currkey->data");
ofp= oldkey = currkey->data;
@@ -1037,6 +1036,7 @@ void make_editNurb(Object *obedit)
}
if(actkey) {
+ editnurb->shapenr= obedit->shapenr;
init_editNurb_keyIndex(editnurb, &cu->nurb);
}
}
@@ -1804,7 +1804,7 @@ void CURVE_OT_switch_direction(wmOperatorType *ot)
/****************** set weight operator *******************/
-static int set_weight_exec(bContext *C, wmOperator *op)
+static int set_goal_weight_exec(bContext *C, wmOperator *op)
{
Object *obedit= CTX_data_edit_object(C);
ListBase *editnurb= curve_get_editcurve(obedit);
@@ -1842,7 +1842,7 @@ void CURVE_OT_spline_weight_set(wmOperatorType *ot)
ot->idname= "CURVE_OT_spline_weight_set";
/* api callbacks */
- ot->exec= set_weight_exec;
+ ot->exec= set_goal_weight_exec;
ot->invoke= WM_operator_props_popup;
ot->poll= ED_operator_editsurfcurve;
@@ -4109,7 +4109,7 @@ void CURVE_OT_spin(wmOperatorType *ot)
/* flags */
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
- RNA_def_float_vector(ot->srna, "center", 3, NULL, -FLT_MAX, FLT_MAX, "Center", "Center in global view space", -FLT_MAX, FLT_MAX);
+ RNA_def_float_vector_xyz(ot->srna, "center", 3, NULL, -FLT_MAX, FLT_MAX, "Center", "Center in global view space", -FLT_MAX, FLT_MAX);
RNA_def_float_vector(ot->srna, "axis", 3, NULL, -1.0f, 1.0f, "Axis", "Axis in global view space", -FLT_MAX, FLT_MAX);
}
@@ -4278,7 +4278,7 @@ void CURVE_OT_vertex_add(wmOperatorType *ot)
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
/* properties */
- RNA_def_float_vector(ot->srna, "location", 3, NULL, -FLT_MAX, FLT_MAX, "Location", "Location to add new vertex at.", -1e4, 1e4);
+ RNA_def_float_vector_xyz(ot->srna, "location", 3, NULL, -FLT_MAX, FLT_MAX, "Location", "Location to add new vertex at.", -1e4, 1e4);
}
/***************** extrude operator **********************/
@@ -5577,7 +5577,9 @@ int join_curve_exec(bContext *C, wmOperator *op)
nu= cu->nurb.first;
while(nu) {
newnu= duplicateNurb(nu);
- CLAMP(newnu->mat_nr, 0, ob->totcol-1); /* TODO, merge material lists */
+ if(ob->totcol) { /* TODO, merge material lists */
+ CLAMP(newnu->mat_nr, 0, ob->totcol-1);
+ } else newnu->mat_nr= 0;
BLI_addtail(&tempbase, newnu);
if( (bezt= newnu->bezt) ) {
@@ -5867,13 +5869,13 @@ Nurb *add_nurbs_primitive(bContext *C, float mat[4][4], int type, int newname)
makeknots(nu, 2);
}
break;
- case CU_PRIM_TUBE: /* tube */
+ case CU_PRIM_TUBE: /* Cylinder */
if( cutype==CU_NURBS ) {
Curve *cu= (Curve*)obedit->data;
if(newname) {
- rename_id((ID *)obedit, "SurfTube");
- rename_id((ID *)obedit->data, "SurfTube");
+ rename_id((ID *)obedit, "SurfCylinder");
+ rename_id((ID *)obedit->data, "SurfCylinder");
}
nu= add_nurbs_primitive(C, mat, CU_NURBS|CU_PRIM_CIRCLE, 0); /* circle */
@@ -5949,7 +5951,7 @@ Nurb *add_nurbs_primitive(bContext *C, float mat[4][4], int type, int newname)
BLI_remlink(editnurb, nu);
}
break;
- case CU_PRIM_DONUT: /* donut */
+ case CU_PRIM_DONUT: /* torus */
if( cutype==CU_NURBS ) {
float tmp_cent[3] = {0.f, 0.f, 0.f};
float tmp_vec[3] = {0.f, 0.f, 0.f};
@@ -6235,21 +6237,21 @@ void SURFACE_OT_primitive_nurbs_surface_surface_add(wmOperatorType *ot)
ED_object_add_generic_props(ot, TRUE);
}
-static int add_primitive_nurbs_surface_tube_exec(bContext *C, wmOperator *op)
+static int add_primitive_nurbs_surface_cylinder_exec(bContext *C, wmOperator *op)
{
return surf_prim_add(C, op, CU_PRIM_TUBE|CU_NURBS);
}
-void SURFACE_OT_primitive_nurbs_surface_tube_add(wmOperatorType *ot)
+void SURFACE_OT_primitive_nurbs_surface_cylinder_add(wmOperatorType *ot)
{
/* identifiers */
- ot->name= "Add Surface Tube";
- ot->description= "Construct a Nurbs surface Tube";
- ot->idname= "SURFACE_OT_primitive_nurbs_surface_tube_add";
+ ot->name= "Add Surface Cylinder";
+ ot->description= "Construct a Nurbs surface Cylinder";
+ ot->idname= "SURFACE_OT_primitive_nurbs_surface_cylinder_add";
/* api callbacks */
ot->invoke= ED_object_add_generic_invoke;
- ot->exec= add_primitive_nurbs_surface_tube_exec;
+ ot->exec= add_primitive_nurbs_surface_cylinder_exec;
ot->poll= ED_operator_scene_editable;
/* flags */
@@ -6281,21 +6283,21 @@ void SURFACE_OT_primitive_nurbs_surface_sphere_add(wmOperatorType *ot)
ED_object_add_generic_props(ot, TRUE);
}
-static int add_primitive_nurbs_surface_donut_exec(bContext *C, wmOperator *op)
+static int add_primitive_nurbs_surface_torus_exec(bContext *C, wmOperator *op)
{
return surf_prim_add(C, op, CU_PRIM_DONUT|CU_NURBS);
}
-void SURFACE_OT_primitive_nurbs_surface_donut_add(wmOperatorType *ot)
+void SURFACE_OT_primitive_nurbs_surface_torus_add(wmOperatorType *ot)
{
/* identifiers */
- ot->name= "Add Surface Donut";
- ot->description= "Construct a Nurbs surface Donut";
- ot->idname= "SURFACE_OT_primitive_nurbs_surface_donut_add";
+ ot->name= "Add Surface Torus";
+ ot->description= "Construct a Nurbs surface Torus";
+ ot->idname= "SURFACE_OT_primitive_nurbs_surface_torus_add";
/* api callbacks */
ot->invoke= ED_object_add_generic_invoke;
- ot->exec= add_primitive_nurbs_surface_donut_exec;
+ ot->exec= add_primitive_nurbs_surface_torus_exec;
ot->poll= ED_operator_scene_editable;
/* flags */
diff --git a/source/blender/editors/curve/editfont.c b/source/blender/editors/curve/editfont.c
index 20355de0e73..ae79c0b0053 100644
--- a/source/blender/editors/curve/editfont.c
+++ b/source/blender/editors/curve/editfont.c
@@ -51,12 +51,9 @@
#include "BKE_curve.h"
#include "BKE_depsgraph.h"
#include "BKE_font.h"
-#include "BKE_global.h"
#include "BKE_library.h"
-#include "BKE_main.h"
#include "BKE_object.h"
#include "BKE_report.h"
-#include "BKE_utildefines.h"
#include "RNA_access.h"
#include "RNA_define.h"
@@ -239,10 +236,7 @@ static int insert_into_textbuf(Object *obedit, uintptr_t c)
ef->textbuf[cu->pos]= c;
ef->textbufinfo[cu->pos] = cu->curinfo;
ef->textbufinfo[cu->pos].kern = 0;
- if(obedit->actcol>0)
- ef->textbufinfo[cu->pos].mat_nr = obedit->actcol;
- else
- ef->textbufinfo[cu->pos].mat_nr = 0;
+ ef->textbufinfo[cu->pos].mat_nr = obedit->actcol;
cu->pos++;
cu->len++;
@@ -260,16 +254,14 @@ static void text_update_edited(bContext *C, Scene *scene, Object *obedit, int re
{
Curve *cu= obedit->data;
EditFont *ef= cu->editfont;
-
- if(cu->pos)
- cu->curinfo = ef->textbufinfo[cu->pos-1];
- else
- cu->curinfo = ef->textbufinfo[0];
+ cu->curinfo = ef->textbufinfo[cu->pos?cu->pos-1:0];
if(obedit->totcol>0)
- obedit->actcol= ef->textbufinfo[cu->pos-1].mat_nr;
+ obedit->actcol= ef->textbufinfo[cu->pos?cu->pos-1:0].mat_nr;
+
+ if(mode == FO_EDIT)
+ update_string(cu);
- update_string(cu);
BKE_text_to_curve(scene, obedit, mode);
if(recalc)
@@ -374,7 +366,7 @@ static int paste_file(bContext *C, ReportList *reports, char *filename)
}
MEM_freeN(strp);
- text_update_edited(C, scene, obedit, 1, 0);
+ text_update_edited(C, scene, obedit, 1, FO_EDIT);
return OPERATOR_FINISHED;
}
@@ -757,7 +749,7 @@ static int cut_text_exec(bContext *C, wmOperator *op)
copy_selection(obedit);
kill_selection(obedit, 0);
- text_update_edited(C, scene, obedit, 1, 0);
+ text_update_edited(C, scene, obedit, 1, FO_EDIT);
return OPERATOR_FINISHED;
}
@@ -815,7 +807,7 @@ static int paste_text_exec(bContext *C, wmOperator *op)
if(!paste_selection(obedit, op->reports))
return OPERATOR_CANCELLED;
- text_update_edited(C, scene, obedit, 1, 0);
+ text_update_edited(C, scene, obedit, 1, FO_EDIT);
return OPERATOR_FINISHED;
}
@@ -856,7 +848,7 @@ static int move_cursor(bContext *C, int type, int select)
Object *obedit= CTX_data_edit_object(C);
Curve *cu= obedit->data;
EditFont *ef= cu->editfont;
- int cursmove= 0;
+ int cursmove= -1;
switch(type) {
case LINE_BEGIN:
@@ -926,7 +918,7 @@ static int move_cursor(bContext *C, int type, int select)
break;
}
- if(!cursmove)
+ if(cursmove == -1)
return OPERATOR_CANCELLED;
if(select == 0) {
@@ -1020,7 +1012,7 @@ static int change_spacing_exec(bContext *C, wmOperator *op)
ef->textbufinfo[cu->pos-1].kern = kern;
- text_update_edited(C, scene, obedit, 1, 0);
+ text_update_edited(C, scene, obedit, 1, FO_EDIT);
return OPERATOR_FINISHED;
}
@@ -1065,7 +1057,7 @@ static int change_character_exec(bContext *C, wmOperator *op)
ef->textbuf[cu->pos - 1]= character;
- text_update_edited(C, scene, obedit, 1, 0);
+ text_update_edited(C, scene, obedit, 1, FO_EDIT);
return OPERATOR_FINISHED;
}
@@ -1108,7 +1100,7 @@ static int line_break_exec(bContext *C, wmOperator *op)
cu->selstart = cu->selend = 0;
- text_update_edited(C, scene, obedit, 1, 0);
+ text_update_edited(C, scene, obedit, 1, FO_EDIT);
return OPERATOR_FINISHED;
}
@@ -1198,7 +1190,7 @@ static int delete_exec(bContext *C, wmOperator *op)
return OPERATOR_CANCELLED;
}
- text_update_edited(C, scene, obedit, 1, 0);
+ text_update_edited(C, scene, obedit, 1, FO_EDIT);
return OPERATOR_FINISHED;
}
@@ -1248,7 +1240,7 @@ static int insert_text_exec(bContext *C, wmOperator *op)
MEM_freeN(inserted_utf8);
kill_selection(obedit, 1);
- text_update_edited(C, scene, obedit, 1, 0);
+ text_update_edited(C, scene, obedit, 1, FO_EDIT);
return OPERATOR_FINISHED;
}
@@ -1316,12 +1308,12 @@ static int insert_text_invoke(bContext *C, wmOperator *op, wmEvent *evt)
}
kill_selection(obedit, 1);
- text_update_edited(C, scene, obedit, 1, 0);
+ text_update_edited(C, scene, obedit, 1, FO_EDIT);
}
else {
inserted_text[0]= ascii;
insert_into_textbuf(obedit, ascii);
- text_update_edited(C, scene, obedit, 1, 0);
+ text_update_edited(C, scene, obedit, 1, FO_EDIT);
}
}
else if(val && event == BACKSPACEKEY) {
@@ -1563,7 +1555,7 @@ static int set_case(bContext *C, int ccase)
}
}
- text_update_edited(C, scene, obedit, 1, 0);
+ text_update_edited(C, scene, obedit, 1, FO_EDIT);
return OPERATOR_FINISHED;
}
diff --git a/source/blender/editors/datafiles/Makefile b/source/blender/editors/datafiles/Makefile
index d7bb4e7222f..c76014df60e 100644
--- a/source/blender/editors/datafiles/Makefile
+++ b/source/blender/editors/datafiles/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2007 Blender Foundation
# All rights reserved.
diff --git a/source/blender/editors/datafiles/splash.png.c b/source/blender/editors/datafiles/splash.png.c
index e374742c8da..de4fcb8f865 100644
--- a/source/blender/editors/datafiles/splash.png.c
+++ b/source/blender/editors/datafiles/splash.png.c
@@ -1,5790 +1,6820 @@
/* DataToC output of file <splash_png> */
-int datatoc_splash_png_size= 185087;
+int datatoc_splash_png_size= 218043;
char datatoc_splash_png[]= {
-137, 80, 78, 71, 13, 10, 26, 10, 0, 0, 0, 13, 73, 72, 68, 82, 0, 0, 1,245, 0, 0, 1, 26, 8, 6, 0, 0, 0, 8, 90,
-206, 70, 0, 0, 0, 1,115, 82, 71, 66, 0,174,206, 28,233, 0, 0, 0, 6, 98, 75, 71, 68, 0,255, 0,255, 0,255,160,189,167,
-147, 0, 0, 0, 9,112, 72, 89,115, 0, 0, 11, 19, 0, 0, 11, 19, 1, 0,154,156, 24, 0, 0, 0, 7,116, 73, 77, 69, 7,218,
- 7, 20, 16, 36, 40,202, 81, 99, 29, 0, 0, 32, 0, 73, 68, 65, 84,120,218,236,189,121,188, 37,215, 85,223,251,221, 67,213,153,
-238,189,221,247,222, 30, 53, 88, 82,107,178,141,144,176,101,155,196,198,208, 96, 57,196, 16, 8, 96, 36,158, 9,216,143, 73,202,
- 64, 18, 8,207, 45,243,224, 5,243, 1,131,213, 64,204, 20,130, 5,132,151, 56,196,196,178, 33, 60,242, 1,140,228,208,198, 54,
- 96, 27, 25,121,192,131,108,181,102,245,124,111,223,225,140, 85,123,175,247,199,222, 85,167,206,233,219,163,186, 91,131,107,233,
-115,212,247,156, 83,167,106,215,174, 93,235,183,214,111, 13, 5,181,212, 82, 75, 45,181,212, 82, 75, 45,181,212, 82, 75, 45,181,
-212, 82, 75, 45,181,212, 82, 75, 45,181,212, 82, 75, 45,181,212, 82, 75, 45,181,212, 82, 75, 45,181,212, 82, 75, 45,181,212, 82,
- 75, 45,181,212, 82, 75, 45,181,212, 82, 75, 45,181,212, 82, 75, 45,181,212,114, 81,196, 92,228,227,169,248,106, 2,187,180,102,
-171, 8, 61, 32,139,159,215, 82, 75, 45,181,212, 82, 75, 45,207, 1, 81,128,214, 90, 93,243, 19,183,222,244,251, 15,252,226,183,
- 29,254,204, 47,127,251,177,159,251,158,151,254, 81,106,245,205,149,109,106,169,165,150, 90,106,169,165,150,103,185,167,174,128,
-244, 95,190,238,250,183,253,226,119,190,240,141,219,179,126,103,235, 92,167,245,234,175,190,246,250,175,121,225,214, 91, 62,252,
-185,131, 7,151,215, 71, 15, 2, 82,131,123, 45,181,212, 82, 75, 45,181, 60,187, 65, 93, 3,237,175,187,178,245,250,127,180, 45,
-191,161,127,100,137,108,249, 24,121,127,200,117,215, 93, 49,255,157, 95,115,245,183,124,225,201,101,243,197,167, 86, 63, 9,244,
-107, 96,175,165,150, 90,106,169,165,150,103,183,167,222,248,232, 35,171, 7, 23, 55,165, 55,190,234,234,185, 29,146, 11,110,109,
-149,124,109,141,249,109,219,236, 27, 94,243,226,175,115, 62,191,246,195,159, 61,248,119,192,177, 26,216,107,169,165,150, 90,106,
-169,229,217, 9,234, 0, 74,132,181, 63,249,236,202, 3,135,250,110,241,181, 47,218,124, 93,211, 88,178,126, 31,119,124, 9, 26,
-109, 94,251,170, 23,191,232,198, 43, 54,237,254,224,103,158,122,100,125,144,239,175, 47, 81, 45,181,212, 82, 75, 45,181,156,185,
-247,124,177,143,215, 4, 54, 1,151,125,205, 53,179,111,250,111,111,216,245,131, 87,180,108,179,215,203,192, 24,244, 37, 87,210,
-188,252,114, 30,122,234,216,234, 29,191,190,239,231, 63,240,192,147,191, 1,172,197,223,203,179,121, 50, 69,228,102, 96, 62,190,
-221,175,148,122, 94, 27, 37, 95,110,231, 91, 75, 45,181,212, 82,131,250,198,162,129, 57, 96,251,142, 57,251,173,255,227, 77, 87,
-255,187,175,217,209,217, 49,232, 59,192,163,182, 95, 70,235, 5, 87, 49, 18,207,255,245,187, 31,249,175,191,246, 71,159,254, 73,
-224,241, 56,222,167, 13,236, 34,178, 11,216,117,134,155, 47, 43,165,238, 63,195,253,222, 11,220, 18,223,190, 69, 41,117,215,243,
- 28,212,159, 23,231, 27,141,147, 91,162,129,114,115,229,171,251,129,253,192, 61, 74,169,229,243,112,156,233,253,115,190,215, 96,
- 45,181,212,242,229, 45,246,105,128,178, 7,102, 23,103,146,175, 92,236,216, 69, 47, 74, 77, 88, 10, 10,148, 82, 74,138, 79, 84,
-241,121,249,173, 5,218,153,147,254,143,254,201,225, 63,251,229,111,187,252,219, 94,185,173,179,121,148, 9, 44, 31, 99,208,158,
- 33, 89,220,206,175,222,177,251,141, 55, 95,179,253,250, 31,121,231, 95,190,249,248,250,232,195,231, 9,216,111, 5,222,126, 22,
-202, 24,224, 30,224, 62,165,212,221,245,178,121,222,176, 12,183,198,215,201, 12,188,194, 96,121,167,136,220, 29, 13,151,167, 3,
-238, 55, 3,247,158,195,239,238, 3, 94,123, 78,231,185,119,247,153,220, 43, 14, 88, 5, 14, 1,159, 2,222, 15,188, 87,237,217,
-183, 90,175,148, 90,106,121,254,131,186, 2, 84,167, 97,110,254,217,215, 93,241,115,111,184,105,219,238, 77,173, 36,245, 74, 7,
-192,214, 58,188,148, 66, 89, 51,241, 30,173, 81,198,140,223,171,240,157, 71, 73, 38,202,231,214,162, 43,251,201, 93,134,239, 43,
-222,244,218, 27,190,250, 37,215,108,125,223, 15,188,227,190,159,250,219, 7,143,252, 46, 48,228,226, 83,241,183, 2,183,138,200,
-173,192,109,231,195,115,171,229, 25,149,191, 61,203,237,111, 7,110, 17,145,219,158,135, 94,179,137, 44,197, 60,240, 66,224, 54,
-224,151,100,239,238, 31, 87,123,246,253,230, 69, 51,180,166, 12, 16,181,103, 95,157, 40, 91, 75, 45, 23,201, 83,223,186,247, 91,
-174,122,199,191,124,229,165,175, 30,245, 60,226, 21, 70,171,224,192,139, 10, 47, 52,202,171, 0,189, 2,104, 21,124,123, 47, 96,
- 64, 41, 21,252,125, 1,163,148,178, 90,153,232, 17, 7, 80, 23, 64, 4,175, 20,195,222,136, 27,175,216,182,245,222,159,251,142,
- 95,255,151,191,241, 23,215,190,251,127, 63,248,243,192,145,243,228,181, 23,158, 16,167,241,214,170,239,239, 21,145,215,214,192,
-254,188,145,251, 35, 19,115,191, 82,234,190,232,201,207,199,107,125,123,101, 13,236, 2,222, 35, 34, 47, 59, 79,215,254,110, 2,
-189,127, 58,121, 38,214,217,102,224, 63,201,222,221,151,171, 61,251,126,162, 94, 34,181,212,242, 60,246,212, 27,137,222,245, 79,
- 94, 52,255,114,233,102,100,131, 33,120, 31, 64,186,100,214, 11,127, 94,141,113,215,104,244,226,182, 8,238, 30,165, 1, 31, 89,
-124, 5, 37,194,107, 31,128, 95,235, 64, 10,154,176,139,209, 48, 99, 83,154,234,255,190,231,155,126,244,229,215,239,248,202, 31,
-255,237,143,236, 25,102,238,129,243, 1,236, 74,169, 83, 82,155,209, 59,127, 59, 99,154,246,230,168,236,239,170,151,208,115, 90,
-238, 6,238,222,200,243,142,160,125, 15,112,143,136,188, 51, 94,239, 2,216,207,215,181,191,167, 48, 34, 46,150,108,228,253,202,
-222,221, 41,176, 3,120, 53,240,102,224,166,202,215, 63, 46,123,119,255,153,218,179,239, 67,245,114,169,165,150,103,191,232,115,
-248,141, 25,101,254,216,239,127,234,200, 71,149, 30,210, 73, 29,157, 22,180,155, 18, 95,126,252,119,195,211,212, 35,112, 25,170,
-209, 14, 32,239, 61,120, 79,233,149, 3, 48, 2, 63, 0,223, 7, 25, 0,195,240, 94, 70,113,123, 65,196,147, 57, 79, 62,116,252,
-232,235, 95,126,203,189,123, 95,255, 63,175,220, 62,247, 29, 17,246,245,133,156, 36,165,212, 61,132,152,102,213, 99,186,181, 94,
- 62,207,105,121,173, 82,234,142, 51,161,210,149, 82,119, 76,121,212,119, 62,159, 38, 66,237,217, 55, 82,123,246, 61,166,246,236,
-251, 61,224,171,129, 15, 87,191, 6,254, 85,189, 92,106,169,229,249,235,169, 35,112,236,206, 63,122,228,167,254,228, 51, 71,191,
-227, 69, 59, 90, 87, 40,208, 94,196, 23, 58,192, 75,128,236,222,200,235,151,188, 96,246,197, 63,244,181,215,236,106,218,166,246,
-222,131, 49, 65, 77,120,143,140,214, 81, 70,161, 47,191, 9,189,245, 26,212,220, 14, 84,115, 14,242, 33,190,123, 4, 89, 59,128,
- 63,242, 32,228,125, 80, 45, 4,135, 19,240,235, 35, 94,125,195, 11, 94,240,254,189,175,255,157,127,252,150, 63, 48, 15, 31, 88,
-121, 31,227,228,189, 11, 5,236,251, 69,228,158,138,199,118,243,249,216,239, 6, 25,209,247,159,167, 76,235,106,134,255, 57,149,
-155,157,143,125, 92,140,243,157, 26,231, 25,237,239, 28, 60,228,187, 25, 39, 87,206,139,200,205,207,199,140,116,181,103,223, 80,
-246,238,254, 9,224,131,149,143, 95, 85,171,202, 90,106,121,254,130,186, 3,186,192,231, 62,248,208,250, 59, 62,248,208,122,139,
-141,155,216, 44,190,238,198,109, 63,240, 29, 47,187,106,103, 91,167, 58,247, 18,168,247,193, 0, 25,118,193,117, 49,215,189, 26,
-251,178,239,198, 92,245, 15, 78, 74, 33,200,210, 35,228, 15,125, 0,247,232, 71, 80, 38, 5, 17, 68,193,168, 55,226,186, 75, 22,
- 55,253,207,159,254,167,255,241, 53,111,126,207,210,209,149,193,255,230,252,197,216, 79, 38,231,165, 14, 59, 2,219,237,209,219,
-191,121,131,239,247, 51,166,134,151, 79,178,143,183, 87,126,123,143, 82,234,238,202,126,111,103, 42,163, 59,238,243,174, 51,201,
-222, 23,145,219,163, 55,186,235,108,199,117, 33,206,247, 20,231,122,103,220,239,124,101,243,115,206, 20, 63,141, 76, 3,248,252,
-243, 88, 47, 76, 39, 17,110,171, 85,101, 45,181, 60,127, 65,221, 3, 3, 32, 39, 52,133,137, 81,239,178,230, 93,148,226,197,119,
-125,231,117,111,125,243,238, 43,119,187, 17,140,156, 67,178, 33, 50,232, 65, 62, 4, 43, 52,190,233,199,177, 47,123,195,233, 61,
-135,133, 43, 73, 22,126, 0,189,227, 70,242,143,255, 54,104, 23, 32, 95, 41, 70,189,140, 27,175,221,185,229, 29,255, 98,247,222,
-239,125,251,159,125, 7,240,216, 5, 6,245,170, 34, 63, 39,239, 82, 68,110, 1,222,115, 26, 80,216, 21,189,194,219, 79,145,109,
- 93,212, 86, 3,220, 23, 75,180,222,121, 10, 6, 97, 23,161, 52,235,230, 72, 39,159, 12,124,223,201,201, 67, 11,197,184,110, 21,
-145,215, 94,196,243,221,232, 92,239,125,158, 3,235,179, 73,122,103,116,173,247,238,190, 6,248,103,192,215, 3,215, 3,139, 81,
- 47, 28, 5, 62, 75, 40,149,251,127,213,158,125,135,167,126, 39, 39,217,159,156,130, 81, 80, 83,219, 94, 5,188, 62, 30,251, 43,
-129,237, 81, 55,173, 2,143, 68, 67,229, 15,129, 63, 83,123,246, 73,125, 73,107,169, 65,125,234,126, 35, 60, 3, 61, 43,238,177,
-248,175,185, 98, 75,243, 91,222,249,134, 23,222,245,141,215,109,185,118,216,247, 56,151,193,176, 15,121, 6, 74, 80, 9, 52,190,
-253,231, 49, 55,124,115,185,179,213,254,144,247, 63,240, 8,239,255,228, 35, 44,173,247, 73,140,226, 69,151, 44,240,173, 47,187,
-134,151, 94,189, 51,236,248,242,151,163,210, 89,178, 15,255, 18,164, 54, 12, 65, 43,242,245, 33,223,243,154, 27, 94,242,223, 62,
-240,249, 31,120,255,199, 31,121, 27, 23,168,220, 45, 2,222,173, 83, 30,225,217,238,227,214, 8,112,211, 30,224,125, 21, 35,161,
-234,205,238, 98,156,105,127,255,105,140,141,247, 84, 60,235,123, 42,158,229,205, 83,227,190, 93, 68,246,159,164, 81,204,219, 55,
- 0,244,234,190,138,177,221,188,193,121, 92,172,243,157,159, 2,244,229,202,248,118, 93,192,123,229,150,211,120,238, 79,103, 93,
-157,247,240,203,211,148,105,195,240, 83,167, 1,243,205,192, 59,128, 55,177,113, 67,171, 29,241,245, 13,192,191,151,189,187,127,
- 10,248, 15,231, 3, 92,101,239,238,221,192, 91,128,127,116,146, 99, 23,165,122, 47, 1,126, 8,120, 64,246,238,126,163,218,179,
-239,211,181,250,175,165, 6,245,147, 24,205, 17, 68, 55,189,238,134,133, 31,189,251,182,235,247, 92, 54,211,106,245,187, 14,113,
- 67,200,134,241, 72, 6,149,119, 73, 94,245,131, 19,128,254, 55, 95, 60,192,155,127,239, 67,236, 63,186, 70,179,145,144, 88,141,
- 22,248,228,227, 75,188,247,175, 63,207,183,188,236,106,254,159, 91, 95, 77,187,145,160,183,191, 16,123,195,109,228,127,247,187,
- 48,187, 29,144, 16, 68, 23,197, 79,191,241,149, 63,248,231,127,251,200,123, 69,248, 12, 33, 68,112,190, 1,253,157, 83,160,113,
-247, 89,238, 99, 87,220, 71, 33,251,129, 59, 54,136,237,222, 53,229,221, 22,199,126,217, 41,118,127,103, 5,128,239,152, 6,133,
-120,236,247, 84,148,245,157, 34, 50, 65,117, 71,202,253,246, 41,208,186,109, 42,142, 94, 29,219, 45,207,208,249,222, 89,217,223,
- 91, 98, 18,227,244,181,186, 16,114,235, 5, 0,222, 13, 25,140, 24,142,184,135, 16,142,184,168,173,119, 99, 38,252,207, 76,125,
-252, 95, 79,177,253,174,104,100,157,169, 65,213, 1,126,145, 80, 15,255, 67,231, 97,200,127,113,150,219,127, 21,240, 17,217,187,
-123,183,218,179,239, 19, 53, 4,212, 82,131,250,198,128,126,213,143,124,195,165, 63,243,246,215, 93,249,207,172,183,244,134, 25,
-184, 17,184, 60,196,209, 21, 32, 14,181,229,114,236, 43,222, 88,254,248,139, 7,151,121,227,127,124, 63,135,251, 57,237, 78,139,
-204, 24,146,196,144, 26,133,145, 20,229,114,222,247,209, 47, 97,180,230,103,191,123,119,240,216,175,249,122,220, 23,254, 12,220,
- 58,216, 22, 40,200, 71, 25, 47,185,122,219,142, 87,188,104,199, 55,126,244,179, 7, 63, 71, 8, 17,156,177, 23, 32, 34,119,158,
-198, 67,155, 6,176, 59,206, 33,209,234,157, 83,222,229, 73,107,157,149, 82,247, 69,122,187,240, 72,111, 22,145,219, 79, 19, 15,
-191, 79, 41,117,219, 73,246,183, 95, 68,222,194,184,155, 89, 81,131,125,207, 6, 96, 89, 0,230,134,117,248,149,177,253,237, 51,
-120,190,251, 79,182,191, 11,225,229,198,245,113,206, 6,221,105, 24,150,141,100, 87,188, 30,119,138,200, 5,111,191, 43,123,119,
- 39,209,147,254, 26, 66, 73,219, 75, 42, 95,255, 57,240,187,167,240,208,255,124,106,110, 30,140, 94,251, 7, 8,173,157, 13,240,
- 98,224,251,163,209, 88,164,203,252,160,236,221,253, 25,181,103,223,175, 20, 84,250,211,104, 62,227,129, 63, 3,254, 0,248, 27,
- 2,221, 62, 0,102,129,235,128,111, 6,126, 24, 88,136,219,207, 2,239,150,189,187,111, 80,123,246,101, 53, 12,212, 82,131,250,
- 24,208,213, 66,199,190,230, 55,110,189,250, 23,191,235,198, 45, 55, 13, 7, 48, 84, 25,248, 64,181,147,232,114, 75,201, 70,216,
-235,190, 22, 53,179,165,220,193, 91,126,239, 35,124,241,137, 21,216, 52,195,202,122, 14,202, 97, 20,180,141, 98, 75,199, 50,223,
-178,108,218, 52,195,255,252,216, 23,217,253, 21, 87,112,203, 77, 87,129,177,152, 93, 95, 75,254,192,127, 65,109,189, 18,196,227,
-149, 34,109,165,124,215,238,235,111,249,232,103, 15,254,103, 96,137,179,163,224,207,180,101,236,221,156, 67,109,113,165,183,120,
-121,234,167, 3, 31,165,212,253,177, 53,233,157, 21,227,226, 84, 96,114,199,105,246,119,159,136,220,207, 36,213, 93,140,111,186,
- 85,234, 93,167, 26, 95,101,108,183, 63, 67,231,123,215,197,162,168,227,185,188,125,202, 75, 63, 31,160, 94,244,149,175,210,248,
-213, 30,244,229,218, 20,145, 93, 39,203,131, 56, 7, 0, 63,211,251, 98, 5,248, 13,224,167,213,158,125, 39,171, 42,249, 69,224,
-234,202,251,247, 1,223,163,246,236, 27, 76,109,247,113,224,227,178,119,247, 7, 34, 59, 81,128,245,207,200,222,221,239, 82,123,
-246, 45, 61,141, 83,250, 35, 96,143,218,179,239,193, 13,190, 59, 14,124, 12,248,152,236,221,253,155,209,171,191, 62,126,119, 29,
-240,157,192,187,107, 24,168,229,249, 36,231, 82,223, 93, 36,197,205,188,250,234,217,127,247,145,127,245, 21,239,253,174, 23, 45,
-220,212,235, 57, 28, 46, 0,186, 6,140, 66, 25,133,178, 10,101, 52,202, 42,244, 37, 55,148, 59,121,248,208,113,254,244,129,199,
-160,221, 10,101,110, 90,131, 49, 56, 52,107, 67,199,195, 71,122,236, 63,220, 35, 19,133, 55,134, 15,124,250,209,241, 0,182, 92,
-131,244, 87,129, 60,142, 70, 32,247,188,240,178,133,171,129,157, 92,184, 7,213,220, 26,189,200,179,165,120,171, 0,183,124, 22,
-160,112,223,212,177, 79, 10, 16,103, 72,211,222,127,146, 49,221, 50, 5,176,103, 50,190,123,158,161,243,221,127,177,250,239,199,
- 16, 66,181, 87,251,242,233,140,167,211,200, 50, 33,254,123,181, 82,234,101, 74,169,219,148, 82,119, 85, 94,183, 41,165, 22,226,
- 54, 85,163,229,246,104,120, 93, 44,249, 12,240,125,192, 79,168, 61,251,134, 39, 49, 14,174,140,219, 20,242,208, 73, 0,189,234,
-121,191, 23,248,173,202, 71,179,192,247, 62, 45,170,112,207,190,111, 59, 9,160, 79,111,119, 0,248,215, 83, 31,127, 91, 13, 1,
-181,124,185,131,122, 65,183,239,252,254,127,176,245,151,238,253,254,235,127,225,186,217,230,166,222,200,135, 78,112,146,163, 68,
-208, 30, 20, 42, 80,239, 90,135,100,117,155,162,231, 95, 80,238,232,145, 35,171,244,227,227, 86, 75, 59,161,240, 33, 98,191,248,
-227,235, 25, 95, 58,216,197,139,102,109, 48,102,201,212,108, 76,108, 29,246, 80, 58,182,155,205,115,174,218, 62,187,173,145,154,
- 29,231, 0,234,111, 57,197,171,218,202,115, 62,122,109,247,158, 37,176,223,114, 18, 96,229,116,222,245, 6, 94,227,233,192,240,
- 84,114, 50,224,223,117,182,251, 58, 13, 91,113, 33,207,247,162,212,134,199,235, 59, 29,243,126,203,211,169, 77, 87, 74,221, 31,
-193,123,255,105,182,187,139, 19,203,242,222,126, 17,245,194, 13, 4, 42,251, 83,178,119,247,201,214,220, 63,155,210, 31,191,122,
- 42, 64,175,200,127,158,122,255,143, 47,226,121,125,120,234,253, 75,107, 8,168,229,249, 38,103, 67,191, 43,128,217,166,121,229,
- 47,124,243,101,123,239,184,121,235,171, 70, 35, 24, 36,161,229,171, 56, 65,101,158, 52,213,172, 56,231, 91,104,141, 53,101, 5,
-123, 8,154,229,229,206,182,109,106, 99,210, 4,231,137,253,226, 37,130,122,252, 87, 20, 24, 77,183,151,241,232, 96, 64,227,166,
-202, 80,197,129,100,144, 15, 64,207,161,196, 35,222,179,208, 73,218,155,218,233,252,225, 81,255,172,140,149, 51,137, 89,198,184,
-234,157,140, 31,207,121, 47,167, 78, 94,171, 74, 85, 49,238,138,143, 44, 61, 23,153, 63,133, 7,248,116,228,156, 64, 56,110,123,
-243, 69, 62,223, 11, 14,234, 17,208,239,157, 58,143, 59, 46,230, 19,250, 98, 56,226, 45, 21, 48,223, 37, 34,183, 78, 39, 6,158,
-131,103,187, 81,155, 88, 13,108, 34, 36,175,125, 7, 33,254,220,140,224,254,151,178,119,247, 55,169, 61,251, 62, 56,245,179,111,
-152,122,191,239, 12,135,240,247, 27, 24, 16, 79,255,154,133,248,254,109,113, 45,127, 5,112, 41, 48,195,198, 61, 52, 10,185,180,
-134,128, 90,190, 28, 65,189, 80, 2,201, 11,183, 55,191,251,247,190,235,170,187, 94,186,173,189,173, 63,242,208,176, 1,208, 51,
-143,205, 60,105,203,240, 19, 31,120,242,147, 87,108, 78, 55,255,208,205, 91,175, 24, 8,193,147, 86, 10,178, 12,127,244, 75,232,
-203, 95, 14,192,139, 46, 93,228,171,175,221,198, 95,125,238, 8, 88, 27, 64, 92, 71, 64, 47, 34,120, 62,252,118,176,212,229,218,
- 29, 99,253, 46,171, 79,193,112, 21, 25,110, 70,197, 39,198,136, 47,140, 2, 52, 23,128,126, 87, 74,221, 21, 91,219, 22, 74,246,
- 76,146,215, 54, 2,167,179,121,150,251, 51, 33,203,231, 97,219,231,210,249,158, 9,160,191,229, 25,122,228,238,221, 83, 30,250,
- 5,153,199, 24, 51, 95, 6,254, 26,248,107,217,187,251,247,128,191, 36,208,227,109,224,247,101,239,238, 23,169, 61,251,142, 87,
-126,246,162,169,221,124, 66,246,238,158,214, 25,167,250,187,180,239,159, 38,152, 43,224,199,128,159,138, 32,126, 54,210,170, 33,
-160,150, 47, 55, 80, 47,232,246,109,183,125,213,194,155,127,229,155, 46,251, 55, 59,154, 73,218,243, 10,213, 14, 6,176,140, 60,
- 77, 47, 12, 82,248,215,127,252,232, 31,223,253,145,195,127,248, 59,183, 93,185, 71, 73,124,158,139,137,217,239, 86, 35,135, 62,
- 83,238, 88,107,197, 79,126,251,203,248,166,207,254, 47, 24,100,208, 72,227,211,221, 34,168,123, 64, 60,172,247,120,201,139, 47,
-229,123,191,238, 43,202,223,250,195,159, 67, 36, 67,185, 81,216, 80, 4,173,132,165,245, 65,127,181, 55, 90,187,128,222,211, 93,
-177,187, 89, 33,183,114,246,153,208,251, 57,247,206,116,207,197,167,194, 61,215,206,119, 26,208,239,190,208,217,231,167, 88,111,
-203, 83,201,141,183,112, 17, 30, 34,164,246,236,123, 64,246,238,190, 11,248,217,248,209, 14,224,159, 79, 25, 24, 91,166,126,102,
-206,241,112,233,211, 28,238,175, 81,247,166,175,165,150, 51, 2,117, 5, 40,107,212,117,111,251,199,151,252,202,155,255,225,142,
-111,204,115,232, 89,141,106,104,196, 11,210,119,116,172,226,145, 97, 62,248,190,255,246,240,111,239,123,112,245,247, 0,255,216,
- 74,118, 8, 37, 47,148,210, 83, 7,154,109,220, 35, 31,198, 46, 63,130,154,191, 18,128,215,189,228, 74,238,254, 23, 95,207,143,
-252,206,135,232, 29, 31, 66,179, 1, 70, 7, 42,126,148, 65,175,207, 75, 95,184,157,247,190,249,155,233, 52,147, 48,170,172,143,
-251,236,251, 80,105, 3,148, 3,241,136,119,160, 53, 15, 29, 60,126,100, 48,114, 71,184,112,137,114, 16, 98,206,183, 84,148,236,
- 89,123, 95,207, 20, 72, 60, 67,242,156, 57,223,248, 52,182,105, 64,191,227, 25, 30,214, 51,101,200,253, 97, 5,212, 1,190,117,
- 10,212,245, 51,126,189,246,238,126,237, 6,128,254, 65,224,119, 8, 97,154, 39,129,117,181,103,159,171,120,245,158, 90,106,249,
- 50, 6,245,109,111,255,166, 75,255,227,143,253,195,237,175,233,143, 64,218, 22,149, 40, 36, 23,232, 57, 58, 45,195, 95, 60,182,
-118,232,251,222,189,255, 63, 60,122,108,248,191, 8,165,100,230, 11, 71, 7, 95, 64,171,175,195,197,204, 55,163,131, 14, 24,174,
-147,125,248, 29,164,223,242, 43,229, 65,126,232, 53, 95,193, 87, 95,179,157,223,253,192,103,249,163, 79, 60,202,129,227, 61,172,
- 86,220,120,237, 22,190,251, 85,215,242,127,190,230,197,116, 26, 73,185,125,254,241,223, 70,142, 63, 2,141, 54,162, 34,145,144,
- 59,104, 24,190,240,196,242,163,132,231,172, 63,219,110,220,139,238,109, 93,164,241,221,242, 28, 61,223,147, 1,250,237,207, 50,
- 64,127, 38,229,225,169,247,211,116,251, 10,227,186,111,128,197,167, 89,154,118, 46,242, 47,166,222,191, 11,120,211, 41, 58,213,
-205,213, 42,191,150, 47,103, 80,231,242,249,116,247,247,125,229,194,107, 70, 3, 15, 51, 9, 42, 85,200, 72, 48,131,156, 70,199,
-240,174, 79, 30,251,252, 15,191,247,145, 95, 88,237,187, 15, 1,199, 8, 15,122,105,254,229, 67,107, 31, 59,176,150,125,255,150,
-118, 98,157,200,184, 8,174,213,198, 63,246,151,228, 31,249,101,236,171,126,164, 60,206,141, 87,108,225, 29,223,255,181,252,252,
-247,230, 28, 92,234,146, 38,150, 75, 22, 58, 39,140,199,125,246,143,200, 63,245, 46,104,182,131,213,161, 13,226, 60,202,121,178,
-193,144,247,125,232,161,143, 16,250,209, 95, 72, 80, 63,151,184,230, 4,200,137,200,252,179,160, 21,104, 85,246, 87,198,119, 70,
- 79,159, 59, 69, 38,254,115,225,124,159, 75,128,126,174, 73,140, 79, 87,166,217,174,246,212,251, 7,129,234,147,152,110,228,204,
-147,229,206,151,252,195,169,247,111, 59, 77,235,217,107,106,149, 95,203,243, 93, 78, 69,161,217, 43, 23, 26,215,206, 55, 12,185,
- 15,217,237,210,115,164, 35,135,106, 40,222,252,254,199,239,123,227,187, 30,250,177,213,190,251, 0,112, 40, 90,238, 35, 32,123,
-234,248,232, 99,239,251,220,242, 3,137, 5, 25, 56, 64, 80,154, 80,175,222,158,197,125,234,191,146,221,247,147, 72,239,232,196,
- 1,155,137,229,202,237,155, 78, 4,244,172,143,251,232,111,144,127,232,109,168, 70,138, 50, 38,196,235,147, 6,100, 57,137,134,
-191,249,194,129,131,127,245,217, 67,247, 17,122,191, 95, 16, 80,159,122,196,231,217, 40,217,233,242,175,219,159,101,235,160, 58,
-190,249,216,182,245, 92,189,244,231,194,249, 62, 39, 0, 61,182,238,157, 54,190, 46,150, 92, 53,245,254,216,212,251,233,108,248,
-219,206,195, 49, 39,238,219, 72,151,159, 74,182,158,229,252,124, 99,173,242,107,249,114, 6,117,243,217, 67,253, 7,159, 24,185,
-188,221, 54,180, 51, 71,219,192,186,241,242, 61,239,217,255,238, 95,188,247,192, 91,129, 79, 18,158,192,212, 37,244, 91, 47, 30,
-244,114,232, 87, 62,120,232,158,149,204, 97, 51, 7,153, 15, 89,115,177, 41, 13,157, 89,252, 67,127,202,232,125,111,196,253,253,
-251,144,213, 39, 55, 86,106,221, 35,248,135,238, 99,244,135,223, 79,254,119,191, 5,205, 38, 24, 27,154,205, 40,133,210, 9,106,
-144,129, 17,126,246,247,255,238, 15,129, 47,197,227,159,119, 80,175,212, 45, 87,229,140,202,139, 98, 25, 82, 85,225,220,121, 26,
- 79,247, 98,203, 61, 76,198,110,239, 60,131,185,184,243, 57,124,190, 39, 3,244,251, 9,189, 9,206,217,232, 19,145, 59, 43,175,
- 91,166,230,236,108,215, 91, 53,134,189,124,166,235,237, 60,201,235,167,222, 79, 63,212,229, 93, 83,239,127, 80,246,238,126,186,
-229,105,171, 83,239, 55,157,102,251,238,212,251,157, 39,157,207,189,187,103, 57,145,174,175,165,150, 47, 43, 80,231,216,122,254,
-241,239,122,247,195,119,189,231,193,227, 15,126,224, 96,239,208,175,223,127,228,254,175,249,181,207,255,244, 61,247, 47,253, 2,
-161,131,212, 49,160,207,228, 3, 84, 28,208,255,210,145,193,159,190,237,127, 31,188, 55,105, 24,100, 61, 71, 50, 15,196,242, 54,
-165,160, 61, 7,249, 10,217,135,127,142,209,251,190,155,209,255,119, 7,249,135,247,146,255,205,175,146,255,213, 47, 49,250,147,
-127,203,232,189,111, 32,187,239, 45,200,250, 35,208,217, 20,154,210, 20,182,187,215,200, 80,145, 52, 53,255,229,190, 47,124,246,
-207, 63,241,228,187, 9,212,251,121,237,229, 28, 21,245,237,132, 94,231, 55, 79, 41,217,179,201,124,175,122,127,243,132, 6, 54,
-183,156,225,241,239, 60, 77,127,250,167, 37,145, 26,175,198,189,111,137,128,119, 50,176, 57,147,199,158, 62,107,207,247, 20,128,
-254,218,167, 25, 38, 40, 30, 33, 91,188,170,235,229,102, 17,185,247, 76, 58,195,157,228,209,178, 23,175, 53,110,104, 56,243,230,
-169,143,255, 96, 98,205,236,217,247,247, 76,182, 88, 77,128, 63,149,189,187, 95,122,134,199,120,165,236,221,253,231, 83, 31, 63,
- 58,245,254,116,251,250,252,212,251,127,115,146, 99, 89, 66,255,250,203,106,149, 95,203,243, 93, 78, 21, 83,207,128,165,191,222,
-191,246,159,255,122,255,218,189,132,154,213, 99,192, 65, 2,213,190, 30,183,153,142, 97, 21,207, 91, 63,248, 75, 31, 56,240,142,
-151, 92,222,190,234, 13, 55, 45, 94,211, 95, 29,161,230, 82,104,232,208,105, 14,129, 36, 65, 37, 73,200, 96, 63,246, 73,242,195,
-247,151,187, 83,218,130, 77,161, 51, 85,122, 42,192,200, 33,190, 69,179,145,114,255, 23, 15, 45,255,219,223,250,232,222,232,165,
- 79, 27, 24,103,170,224,207,229, 17,144,119,156,141,146,141,189,215,239, 96,252,228,178, 2,232,238, 35,208,213,247, 79,129,195,
- 46, 2,197, 93, 0,195, 91, 46,240, 90,184,155,201,199,160,222, 30, 65,248,238,202,216,110,137, 64, 56, 31, 61,241,101, 78, 18,
-131,127, 54,159,111, 60,175,141, 66, 2,239, 57,139,165,112,207, 57,212,174,223, 18, 13,166,253,113, 14, 54,234,253, 62,253,168,
- 92, 8,109,128, 47, 88,178, 97,164,185,231, 8,201,112,175,103,220,124,166,144, 47,176,241, 67, 93,126,152, 16, 87, 47,168,250,
-203,128,143,202,222,221,191, 31, 89,173, 79, 68, 38,207, 17, 74,224, 94, 8,188,154,208,115,253,198, 13,246,247, 97,224,166,202,
-251,119,200,222,221,255, 54,238,103,109,131,120,249,123,129, 87, 84,222,255,152,236,221,221, 4,126, 61, 58, 29,179,241,120, 63,
- 73,104, 20,245,191,128,127, 82,171,253, 90,190, 92, 65,221, 69,224,206, 35,136,235,248,217, 48,190, 28, 39,127,104, 74, 14,172,
-123,145, 79,255,243,223,127,248,103, 23, 59,246,109,255,232,154, 77,151, 14, 86, 70, 48,155,160,154,102, 92,191, 30, 16, 28,210,
-230,169,235,208, 4,240, 2, 67,135, 95, 29,209,218,185,157,207, 29, 88, 94,191,237,174, 15,222,181,210,205, 62, 84, 49, 50, 46,
-180,220, 31, 1,253,172,147,150,148, 82,119, 87, 26,216,204, 87, 21,253, 51,189, 16, 98, 77,244,109, 76, 62, 70,179,240, 60,167,
-101,153, 16, 67,125,251,115,245,124, 55,144,179, 13, 15,220,247, 52,142,181,139, 51,207, 51,184,251,124, 26, 56,103,241, 64,151,
- 66, 14, 1,255,116,163,167,153,169, 61,251,150,100,239,238,215, 0,127,202,248, 65, 41, 22,248,158,248, 58, 91,249,205,200,240,
- 20,122,233, 70, 42,143, 86,173, 52,183, 41, 58,227,253, 70,156,199,106, 2,220,191, 98,227,186,245, 3,113,219,167,106,181, 95,
-203,243, 89,244,105, 96, 52, 39,196,173,150, 9,229,106,199,129, 94,252, 92, 78,243,219, 33,176,178,218,119,251,190,253,238, 7,
-255,239,119,253,221,177,207, 55, 83, 77,178,154,225, 87, 50, 24,248,114, 47, 10,133, 82, 27,188,226,127, 56, 96,228,145,213, 28,
-181, 60,164, 53,191,153,125,251, 87, 14,126,227, 79,221,247, 83,251, 15,173,255, 65, 28, 91,143, 11,151,245,126, 95, 84,174,183,
-197, 7,113, 60,157,254,223,119, 71,175,225,110,206,172, 6,249,158,168,232, 46,120, 71,179,216,147,252,101,167, 57,214,125,132,
-199,158,222,255, 92, 63,223,139, 44, 69,188,254, 76,215,206, 61,132,112,192, 29,207, 96,229,192, 31, 3, 47, 83,123,246,125,225,
-164,215,119,207,190,135,129,151, 3,191, 74, 72,148, 61, 35,219,130,240,168,212,175,157,218,215,103, 8, 77,110,134,103,180,182,
-246,236,235, 2,175,139, 76,194,169,228, 65,224,235,227, 67, 93,106,169,229,121, 45,234, 2,239,223, 16, 74, 97,230,129,175,248,
-190, 87,110,251,193,159,121,221,165,223,122,233,166,212,230, 67, 33,183, 10,154, 6,101,117,240,220,117,101, 56, 34,224, 64,114,
- 15, 3,135,201, 60, 73,162, 88,117,240,115, 31, 90,250,139,255,240,199, 15,189, 51,115,254,227,140, 75,233,242,231,226, 5,136,
- 84,240,180,151,184,159,240,116,179,251,158,193,113, 21,116,120,245,153,232,247,157,225,211,224,158,115,231,251, 12, 93,247, 93,
-156,152,155,112, 63,129,110, 63, 47, 64,126, 22,158,121, 55, 26,237,159, 35, 60,147,252,191,171, 61,251, 62,119,150,199,218, 14,
-252, 31,192,107, 8, 61,221,119, 16,104,252,126,244,144,255, 62,122,222,239, 85,123,246, 61,121,138,253,236, 2,222, 72,160,206,
-175, 7, 54, 71, 61,162,166, 60,245, 98,251,118,244,194,191,147,240,236,246, 57, 2,187,248, 41,194,227, 96,127, 71,237,217,215,
-223,104, 62,206,226,153,237,181,212, 82,131,122, 5,216,155,132, 76,214, 29, 47, 88,104,124,195,237,175,222,246,109,111,186,121,
-203, 43, 46,155, 77, 18, 68, 33, 34,120,165,240,149,209,104, 1, 45, 18, 74,215, 20, 28, 27, 56,255, 63, 62,185,244,233,119,126,
-228,240, 31,127,234,241,238,159, 0, 79, 68, 37,212,127,174, 2,122, 45,181,212, 82, 75, 45,181, 60,215, 64,189, 56, 78, 10,116,
-162, 21,189, 99, 97,198,126,213, 43,174,156,121,197,119,222,180,240,242,155, 46,109,239,156,111,152, 78,199,170,212,106,165,115,
-143,244,156, 31,173,140,124,239,139,135,251, 71,238,121, 96,233, 19,127,181,127,253, 99, 79, 29, 31, 21,173, 31, 87, 9, 49,244,
- 11, 86,147, 94, 75, 45,181,212, 82, 75, 45, 53,168,159,250, 88, 26,104, 16,168,180, 54, 33, 59,117, 1,216,222,110,232,197,166,
-213,115,137, 81,105,238, 37, 31,228,178,214, 27,186, 99, 34, 28, 38, 80,236,171,132,184,121,151,211, 39,234,213, 82, 75, 45,181,
-212, 82, 75, 13,234, 23, 17,220,147,232,189, 23, 47,203,228,147,158, 60, 33,155, 61, 35, 36,224, 12, 9, 52,123, 13,230,181,212,
- 82, 75, 45,181,212,242, 44, 1,245,233,227, 23, 32, 95,252, 91, 5,117,169,252, 91, 3,121, 45,181,212, 82, 75, 45,181, 60,139,
- 65,253, 84,227,169, 65,188,150, 90,106,169,165,150, 90,106,169,165,150, 90,106,169,165,150, 90,106,169,165,150, 90,106,169,165,
-150, 90,106,169,165,150, 90,106,169,165,150, 90,106,169,165,150, 90,106,169,165,150, 90,106,169,165,150, 90,106,169,165,150, 90,
-106,169,165,150, 90,106,169,165,150, 90,106,169,165,150, 90,106,169,165,150, 90,106,169,165,150, 90,106,169,229, 2,137,122,229,
- 75, 95, 5,128, 86, 26,173, 99,131, 55, 37, 40,165, 66,251, 23, 5,160, 40,222, 78,180,132, 81, 10,205,137, 93, 98,194,207, 20,
- 74, 73,252, 50,244,148, 81,241, 95,137,191, 16, 64, 73,124, 34,139, 10, 91,137,108,180, 55, 38,126, 31,183,140,191,137, 99, 43,
-158,203, 78,248, 27, 37,148,187, 82,196,109,226,239,100,188,111, 81,234,196, 14, 60, 19,231, 24,126,139,140,199,174,202,227,171,
-184, 59,169,140, 77, 42,219,233,242, 51, 85,221, 97,156,129, 98,183,138,240,135, 16,199,172,198, 91, 78,244,227, 41,191,147,202,
-223,147, 3, 87,168,120,157,226, 53,140,115, 35, 27,158, 88,121,121,203, 99, 73,252,191, 66,197, 57, 21,170,141,254, 84, 60,109,
- 85,206,111,252,165,146,202, 21, 26,143, 65, 16,180, 42,102, 76,161, 84,120, 42,159, 0, 94,194,211,118, 85, 28, 64,185,157,148,
-203,107,124, 92, 29,174,174,146,226, 82, 8,226,193, 35,248,248, 52,191,234,149, 52, 26, 44, 58,204, 1, 69,235, 66, 21,247, 25,
-198,132, 2, 39,227,118,134, 94,192, 40, 65, 35, 97, 93,139,224,227,162,119, 30,180, 86,152, 56, 87, 90,133,115,209,241,156,140,
- 30,175, 63, 85,221, 70,166,231, 24, 42,179, 49, 94, 3,113, 94,203,251, 45, 94,171,241, 61,195,196, 10,211,113, 21,137, 82,232,
-184,104,164,114, 29,199, 55, 69,252,125, 92, 15, 82,189,175, 69,226,202, 12,215,163,152,119, 41,151,152,196,123,134,202,247, 97,
-108,229,182,113,224,225,251,184,173,138, 47, 1,231, 5, 29,175,173, 76,220, 33, 97, 91, 31,215,130, 82,241,111,169, 92,247, 56,
- 33, 34, 30, 47,224,226,247, 46, 30,220, 87, 38, 68,198, 90, 1, 69,188,110,106,188,228,213,212,173, 93, 92,167,112, 77, 85,185,
- 86,137, 99, 70,141,215, 69,248, 92, 42,107,189,178,223,120, 1,149,170,238,119,172, 23, 40, 85,170,170,220,245, 76, 14,108,234,
-186,149, 58, 73,169,241,254, 84, 85, 35,200,244,109, 92,234,210,170, 78,208,197,111,100,124,191,198, 83, 43,239, 65, 53,165, 97,
-171, 26,162,216,166,186, 40,124,188,175,125,188, 6, 34, 18,183,147,241, 34,217,160,109, 88,161,127,131,238,168,220, 9, 83, 42,
-157,241, 45, 16,214,166,200,228,148,169, 98,108, 69,155,209,226,188, 66,227,209, 66,199, 23,231, 10, 82,249, 87, 38,214,120,245,
-186,150,250,177,132, 22, 85, 30, 78,169,160,127,180, 10, 47,226, 61,175,170,227,174, 46,138,120,252,241, 24,199,227, 20, 0, 31,
-239, 27, 31,230,110,242, 34, 68,101, 32,197, 60, 73, 92, 7,106, 3,149, 63,190, 62,213,107,165,174,154,127,129, 20, 64,170,162,
-162, 26,223,172,241,164, 38, 46,146,102,252, 96,180,226,119,186,114,129,217, 8,109, 80, 24,148,174,116,125, 85, 30, 68,143, 87,
- 53,106, 98,145,140,197,151,239, 69, 71, 69,235,125,220,206,161,226,123,165,138,166,240, 26,239,253,196,239,116, 52, 82,130, 18,
- 14,106, 44,108, 19,206, 89,107, 93, 57,255, 0, 8, 74, 41,188, 31,131,133,209, 38, 40, 97, 29, 94,168,202, 2,213, 42, 24, 68,
-170, 0,105,141,114,213,113, 10,206,121,188, 8,206, 59,178, 60, 39,207, 61, 46,243, 40, 37,104, 29,192, 71,233,114, 37, 6,197,
- 25,231, 85,203,216, 0, 64,105, 20, 58, 40, 28, 1,165,165, 4,202,233,249, 11,215, 82, 87, 20,208,137,215, 69, 16,156,246,227,
- 5,161, 20, 17,170,198,227, 2,116,188, 57,124,169, 48, 44,198, 24,172,214, 24,109, 17,227, 17,113,120, 47,229, 43,203,114,148,
-214, 24, 99, 74,101,173,227, 2,157, 88,107, 18,144,218, 75, 80,224, 32,229,130, 46,230, 88,107,141, 54, 10,196, 76, 40,157,234,
-191,197, 62, 39,207, 63, 0,127,169,124, 68, 80,226,203,155,169, 80, 78,225, 26,235,248, 2,173, 65,105,202, 27,207, 59,133,199,
-131, 81,108,219,190,133,205,139, 29, 90,109,139, 18, 88, 62,118,148, 81,191,207,142,109,219,121,217,141, 47,225,239, 63,241, 73,
- 86,142,175,210,243, 57,107,131, 17,237,217,205,116,215,186, 72,158, 97, 21,120, 60, 35,239, 16, 9,215,190,211,110, 51,236, 15,
-200,178, 12,163,198,107,220,139,224,138, 37,161, 12, 8, 97, 94,115,207, 80, 52, 63,254,239,127,134,227,171, 75, 60,248,224,253,
-124,244,175,254,134,245,227,107, 40,209,184, 44, 35,151, 28,173, 53, 54, 49,228, 46,199, 59, 79, 98, 45,136,208,176, 9, 90,107,
- 36,119,164, 54,204,103, 38, 66, 98, 13,206,133,113, 89,107, 81, 90,145,231, 25,214, 90,156,178,188,233,135,126,152,143,127,226,
- 1, 62,245,153,191,231,169,167, 30, 71,242, 1,155, 58, 13,102,211,132,166,181,228,249, 40,204,164, 49,228,206,145,101, 57,141,
-180,129,247, 30,231, 28, 73,195,146,185, 33,185,203,209,202, 98,173,101, 48, 24, 97,109, 18,174,163, 87, 40, 13,163,209, 16,239,
- 61,214, 90, 70,163,209,120, 60, 74,145,101, 57,162, 44, 90,107,242, 60,143,250, 52, 92,231,145,203,163,134,210,120,231,195, 28,
-250,156, 36,177, 8,190, 92, 27,218, 24, 92,188,255,173, 49, 32,130,209, 6,239, 29, 2, 56,239, 81,218,160,181, 65,124,248, 93,
-208,179, 14,188, 96,140, 33, 77, 83, 18,171,113,121,206,112, 56,196, 24, 19, 63, 79,200,243,156, 60,207,163, 94, 81,165, 30,200,
-243, 28, 99, 76,112,134,140, 33,203, 50, 68, 64,107,131, 82, 26,173,195, 88,138,245,153,187, 17, 73,146,144,196,109,189,247,225,
-186, 21,235, 88, 41,146, 36,193,101, 25, 56, 9,231,130,138,224, 37, 78,149,197,197, 0, 0, 32, 0, 73, 68, 65, 84, 40, 13,202,
- 22,136, 17,143,171, 64,225, 73,173, 6,239, 40,208, 71, 43,161,209, 76,241,185,195, 90, 27,206, 83,107,196, 59,140, 9, 58,181,
- 97, 20, 90,124,137,116, 65, 63, 72,212, 15,138, 52, 77, 48, 74,130, 83,232,133, 36, 73,176,198,160,163, 97,166,148, 34, 53,150,
- 86, 35,197,104,143,181, 96,141, 99,126,166,193,230,166,101,107,167,201,230, 52, 97,113,190, 73, 39, 81,108,154,237, 48,183, 99,
- 17,219, 73,144, 52, 65, 6, 57,135, 31,122, 20, 59,204,152, 89,156,165,185,185,141, 51, 48, 58,186, 66,162, 83,186, 3,120,228,
-208, 10,159,248,228, 23,177, 70,115,249,246, 5,174,185,242,106, 62,254,137, 7, 72,218, 45, 46,217,182,131, 3,143, 61,204,252,
-226, 12, 91,119, 46, 98,243,156,133, 43, 47,227,200,242, 17,174,124,197, 75, 25,230, 67, 30,252,235,251,121,241,214,203, 89, 59,
-114,152,133, 43, 47, 33, 51, 9,203,143, 62, 65,203, 90,154,155,154,168,133, 54, 73,167,205,195, 95,120,148,165,161,227,248,241,
- 30,215, 94,119, 3,159,121,112, 63, 95,248,210,227,136,164, 36,202,162,101,196,101,151, 44,208,106, 91,150, 86,214, 56,112, 96,
-153,149,117, 71,214,207,153,155,153,225,216,161,195, 52,141, 37,207,114,146,180,129,203, 50,172, 8, 9,208,177,134,217, 86, 74,
-214,239, 49,219,110,146,141,134,204,164,205,232,108, 56,172, 14,243,105,140,101,152,229,184,136,159,162, 96,224, 61,102,115,115,
-238,173, 27, 89, 85,165,235, 32, 85,111,251, 68,179,170,170,156, 39,183,153, 6,245,177,151, 52,105, 59,171,147,252, 78, 78, 60,
- 70, 48, 61,131,130,215, 26,163, 76, 4, 32,141,210, 1,174,125,245, 36, 74, 79, 94,151, 22,143, 86, 26, 19,111,216,240,185, 2,
-165,131, 7, 83, 1, 65, 95,190,130,223,234, 37,236,219,123, 34, 56,123,156,243,184, 8, 96,225,185,240, 32, 30,196, 11, 18,191,
- 47, 20,154, 23,143,247, 66,238,165,252,141,243, 30, 81,133,135, 94, 88,148,190, 98,213, 73,233, 29, 23, 6,149, 80, 57,175,210,
- 2,148,177, 69, 56, 5,116,211,128, 62,222, 86,112,226,163,167, 52, 6, 60,188, 76, 58, 17, 2,136,143, 96,171, 80, 17,232,195,
-252, 23,127, 71, 59,210,251, 96,133, 74, 97, 21,251,210, 40,210,128, 81, 96,149,194, 40,131,209,186,180,124,139,151,138,107, 46,
-120, 80, 96,180, 38, 49, 26,107, 52,198,104,140, 42,128, 87, 97,180, 42, 61, 64,163, 9,239,181,194, 22,223,233,194,232, 42,140,
- 6, 79,225,151, 22,222,143, 72,197, 5, 21,153,240,192,213,132, 67,165,240, 62, 62,136,192,123,214,214,215, 88, 95, 95,167,223,
- 27,144, 38, 77,230,102,231, 72,147,132,209, 96, 8,185,167,221,104, 50,219,110,227,149,166, 59, 28,162,141,101,148,103, 40, 13,
-237,118,139,245, 94, 23,148, 34,203,115, 26,141, 6,121,150,129, 82,184,168,248, 4,193, 75,177, 14, 52, 40,133, 49,224,157, 3,
-209, 8,134, 93,187,174,225,149,175,254, 7,140,242, 30,159,254,228, 39, 56,240,212,147,140, 70, 35,172, 49,228, 89, 78,230, 50,
- 68, 4,147,216,232,202,142,215,133,213, 38, 0,142,151,242,124, 61,130,177,225,190, 82, 58,120,176, 90,135,121, 87, 10,156, 40,
-174,127,209, 13,244,123, 25,107,107,125,150,150,143,147,103, 25,222,101,193, 51,246, 57,185,243,160,116, 24,187, 72,184,102,102,
-188, 15,165, 53,104,197, 40,143,224, 41,144, 59,135,243, 66,150,231,225,214,243, 14,231, 92, 52, 4, 11,112,210,104,155,144, 59,
-137,160, 43,241,158, 18,114,239,200,189, 39,207, 29,162,192,137,143,215,114, 12,124, 58, 30,223, 24, 19, 28, 0,173, 49,209,152,
- 41, 65, 59, 94, 91,145, 48, 39,214,104,108, 92,163,217,112,132, 82, 66,195,166,116, 90, 45, 26, 73,138,120,143,143,128, 87,232,
-163, 98,188, 90,235, 96, 32, 20,198,124, 4,227,194, 16,209, 90,151, 6,150, 82,133, 19, 34, 88, 27, 12, 11,132,112,126,222,211,
-108, 54,194,117,143,227,171, 30,103,108,132,143, 57, 42,109, 76,249,185, 87, 18,239,219,112,206,225,120, 65, 75,138,119,165,145,
-109,181, 33, 77, 27, 72, 28,243,132, 91, 38,126,194,243,247, 82,208,107,145, 93, 51,134, 70,179, 65,179,221, 66, 41,141, 73, 19,
- 76,146, 96,146, 20, 81, 42, 48, 3,198, 96, 27, 13,180,177,160,117,212,123, 14,231,250,204,205,182,153,105, 54,152,177,134,237,
-155,219, 92,117,217, 22, 58, 51, 29, 70,162, 57,124,120,149,135, 62,247, 16, 42, 27, 50,211,178,120, 55,162,211,158,227,240,129,
- 99,184,225,128,206,226, 22,104, 52, 48,141, 38,249,241,117, 58,164, 44,182,102, 16,114,196, 38, 28, 61,186, 74, 43,105,112,201,
-182,237,100,163,140,163,107,199, 73,103,154,204, 54,155, 44, 52,218, 36,179, 13,102,118, 46,178,124,236, 8,131,149,101, 22,118,
- 94,138, 22,195,160,187, 78,154, 26,116,106, 16,237,105, 52, 83,100, 56,228,200,218, 18, 42,181, 88,157,208,238,108,102,211,246,
- 75, 56,120,224, 16,249, 48, 35,203,133,149,149, 46,199,151,215,216, 60,183, 9,173, 60,205,134, 97,243,230, 77,120, 7, 71,143,
- 29,199,218, 6,206,133,107,155,143, 70,193,117,146,128, 73, 74, 5,237,222,176,134, 84, 43,172, 2,237,114,154,105, 74,154, 24,
- 26, 70,163,196, 97,117,100, 33,141,137,108,134, 68,140, 10, 14,151, 87, 10, 51,223,216,244, 86, 20, 21, 69, 38,193, 75,175,210,
-173, 27,130,238, 52,176,107,228,148,221,218,229, 4, 74,117, 18,212,171,207,108,241, 83, 70, 70,244,192,212,248,111,165,116,197,
-235,211,104,101, 2, 48,235,138, 39, 72,161,164, 2, 24,105,109, 80,162,209,232,120, 52, 21,189,225, 56, 6, 81, 40,101, 40, 9,
- 88,101, 34,136, 26,208, 38, 78,156, 66, 68,225,124, 4,124, 41,126, 27,141, 1, 39, 1, 0,156,224,221, 24,252,115, 39,100, 46,
- 40, 32,231, 3,192,139, 84,168, 75, 21, 21,185,168, 73,170, 83, 84, 9, 60,126,130,224, 1, 37,227, 57,155,100, 48,228, 68,211,
- 72, 85,104,160,146,110, 21, 92,188,222,229,239, 10,118,163, 2,234,226,203, 95,148, 52,182, 45, 12, 43, 29,120, 3, 21,141, 63,
- 41, 65,210,163, 34,205, 29, 0,189, 48,191,198,212,180,142,199,209,209,210, 87, 58, 0,123, 1,210, 37, 80,155, 8,182,154, 96,
- 72,148,227,144,242,111,173, 2,141,170, 10,111, 68, 23,122,167, 28, 84, 0,117, 5, 42,142, 77, 85,200, 49,188, 43,153, 1, 74,
-154, 57,222, 19,162,195,245, 34,120,217,226,133,108,148, 49,232, 14, 24,141, 50, 94,252,226, 27, 64,105,134,163, 17,131, 94,143,
-185, 86,155,134, 77,104,119, 58, 60,117,224, 48, 54,109, 96,172,165,209,108, 48,202, 51,114, 23,188,161, 44, 27, 49, 59, 59,203,
-218,250, 58,198, 24,242, 60,199, 38, 9, 78,130,209,167,208,193, 72, 68,128, 44,208,238, 42, 65,196,112,227, 75,111,228,138, 93,
- 59,233,245,150,249,219,143,125,148, 99, 71,142,150, 74, 34,207, 70,160, 21,214, 6,111,184,122, 93, 1,172,181,193, 11,139,231,
-107,141, 65,153, 2,196, 13,185,203,112,226, 34, 37,238, 25,101, 25, 40,205,214,237, 59,152,155, 91,160, 63,200,232,246,134,228,
-121,206,104, 52, 32, 73, 19, 70,217,136, 52, 77,209,198, 96,172,141,225, 21,137,225, 31, 33,115, 35, 70, 89, 22,238,131, 60,199,
-229,130,119, 97, 46, 11,214, 44, 73, 18,114,231,130, 7, 46, 48,202, 3,224,231, 46,222, 67,121,142,247,158,204,229,225, 58,168,
- 96, 60,122,113,129, 30, 53,193,131,209,170, 80,148, 10, 99, 76, 4, 84, 53, 97, 40, 36,105, 26,142, 43,193, 64, 48,214,150,140,
- 93,113,245,109,152, 0, 26,209, 91,214, 42, 24, 42, 54, 9,128, 60, 28, 14,200, 37, 0,102,146, 36, 32, 50,246,168, 81,209,168,
- 8, 58,203,218,224,201,151,172,194,104, 20, 13,130,192, 26, 20,158,124, 1,246, 34,145,119,212, 10,151,231, 19,172, 98,113, 14,
-197,254, 68,130, 46, 16,145, 16,154, 80, 65,131, 42, 93, 97,173, 16,172, 81,168, 8,236,141, 36,176, 76,133,170, 47,214,136,137,
- 70, 1, 34,136,143,247,150, 30,199, 22,116,164,177,108,154,146,182, 90, 36,105, 90, 26,168, 30,133, 24, 3,202,144,123,193, 35,
- 96, 44,218, 90,156, 4, 35,142,212,226, 83, 69, 98, 19, 22, 58,155,184,100,243,102,118,204,182,216,182,185,193,150,249, 38,226,
- 6,244,135,125,102,231, 22, 73, 90,155,233,142,132,199, 31,127,146,181, 67, 71,153, 79,155, 52, 18, 75,179,221,226,224,129, 3,
-116, 90,109,146,180,129,110,182,144,204,225,187,125,172,135, 86,154,144, 13,133, 36,237,240,248,161, 3,164,173, 6,205, 70, 66,
- 35,177, 12, 6, 61,218, 73,194,150,205,155,241, 58,135,109, 51, 36,157, 54,107,199, 86,152,109,164, 44, 31,124,146, 29,215, 94,
- 29,140, 62,113,232,196,144,204,182,241, 13,131,120,199,108,123, 6, 53,219, 97,181, 63, 96,125,173, 75,130, 38, 27, 14, 89, 93,
-235,113,124,101,157,213,213, 46, 90, 41,102,103,218, 28, 95, 62, 70,187,209, 96,126,126,158,213,149, 53,180,177, 12, 71, 35, 26,
-105,112, 0, 36,247,164, 38, 5,239,176, 70,145,234, 0,232, 77,173, 80,121, 70, 43, 49, 88,229,153,105, 54, 72,141, 96,181, 39,
-181,193,113,177, 70, 71, 3,210, 4, 96, 71,192, 24, 60, 96,230,155,115,111,141,238, 88,136,131,113,162,215,135, 20, 49, 2, 41,
-169,244, 98, 53,140,169,247, 51, 12,226,171, 73, 47, 93,162,194,245,213,227,151, 1,175, 34,198, 84,196, 81,199, 94,125, 24,114,
- 0,244, 2,228,161,120, 95,120,135,186,194, 18, 68,111, 16, 19, 53,190,142, 94,161, 62,225,165, 37, 66,141,210, 99, 10,187, 36,
- 45,198,112, 82,122,250, 5, 84, 9,227, 88,138, 39,210,208,225, 55,190, 98, 4,248,194,170,138, 84, 86, 9,188, 50,142, 77, 22,
-231, 27,217,232,248,251,104,136,196, 3, 73, 4,250,192, 40, 72,140, 47, 23,116,173, 46, 13,134, 24,140, 40,183, 41,254, 43,226,
-153,129, 77,136,140, 67, 53,119, 65, 10, 39,175, 98, 8, 20, 51,160,116,200,195, 40,169,201, 24,199,242,129,134, 23, 31,128,179,
- 0,230, 0,254, 99, 47, 88,151,215, 77, 77, 24,148, 74, 75,185,125,225,105, 23, 30,163,209, 69,236, 43, 82,128, 49,196,162,148,
-140, 99,154, 49,222, 95,120,106,197,197,144, 64,161, 4, 3, 34, 26, 49,170,140,166,141,191, 87,149, 32,173, 82, 82,198,173, 37,
-210,168,197,164,248, 60, 7,129,225,112,196, 90,183,203,220,166, 57,142, 31, 95, 97,109,101,149,212, 36,108, 93, 88,196,229, 57,
- 74, 91,250,189, 62, 42, 4,221, 25,101, 35, 90,141, 38, 70,105,196, 7, 69,158, 38, 41,198,132,181,106,140,193, 42, 29,129,215,
- 68,227, 52,120,116, 74, 91,180, 14,212,249, 75,110,254, 74,182,239,156,231,169, 3,143,241,201, 79, 60,192,160,223, 39,177, 41,
-222,249,184,159, 0,232,101, 4,191,240, 90,181,174, 24,189, 4,207, 48,184, 9, 37,184,122, 95,228, 41,132,107, 44, 18, 60, 50,
-231, 28,215, 93,119, 61,198, 24,178,124,196, 48,235,147,231, 25,163,225, 8,101, 12, 89,238, 24,101, 57,105,163, 65,230, 66,152,
- 73,128,193,104, 88,126,231, 28,120, 23, 61,235, 50,254, 25,128, 53,208,214, 14,165,116, 12, 87,141,169,222,220,185, 8,210, 22,
- 47, 46,132, 22, 34, 16, 91, 51,102,126,172, 9, 70, 76, 49,119, 90,171,112, 93,167, 66, 84,196,247, 70,235, 24,102,171,132,155,
-138, 48, 28, 4,224, 53,154,102, 35,141,244,127, 22,194, 36,129, 74, 42,199, 94,134,169,138, 80, 30, 96, 19, 59, 54,148,242,188,
- 52,188,141, 49,100, 89, 48, 80,180, 9,243,107, 76,160,250,197, 71,229,161, 10,175, 63,176, 83,229, 49, 42,192, 94,120,239, 69,
-104,206, 68,250,189,170,107,131, 81, 83, 24,183,158,196, 26,194,148, 8,214,216,200, 42,248,177, 70, 86, 97,157,235, 34, 23, 69,
- 7,150,179, 8, 47,216, 52, 33, 73,210,200, 48, 72, 25,254, 80,198,196,188, 7, 79,238,131,145, 37,232, 24, 70, 8,172, 67, 96,
- 88, 50,148,184,232, 86, 41,122,131, 17,199,187, 67, 68,167,172, 13, 51,188,177,204, 37,179,248,245, 30, 77, 28, 91,231,102,217,
- 58,191,131,238,154,227,192,129,163,140,134, 61, 54,109,106,209,108, 54, 56,124,248, 16,155, 23, 22, 64,114,172,214,248, 97,198,
-160, 63,160,209,104, 97,156,102,118,102,134, 53, 25,240,232,193, 39, 72,141,101,198,166, 92,178,184, 5,165, 29,205,249, 14,155,
-183, 45,208,207,135,116, 87,151,104,108,110,177,120,205, 53,244,142, 44, 49,211,108,144,116, 26,136,207,209,202,163, 53, 72,106,
-176,179, 51,140, 6, 3,104, 53,152,187,116, 27, 90,132, 97,183,135,198,112,108,121,141,149,213, 62,131, 81,142, 19,207,246,109,
- 91, 88, 93, 89, 33, 27,142,152,155,157,161,219,235,209,104,182, 24,101, 67, 58,157, 54,195,193, 48,132, 76, 48,104,132,153, 86,
-131,124, 56,160,105, 45, 86, 60,237,196, 50,215,110,146, 42,161,149,106,172,246, 36, 26,154,169, 69, 17,174,151,209, 54,228, 1,
-217,112,239,249,136, 19,214,137, 59,129, 97, 47,147, 0,138,132,158,146,186, 61,209,203, 22,217, 40,187,108, 35, 48, 31,223,192,
- 19, 17, 93, 25,115,189, 19,223,109,192,226,135,120,232,164, 81,160, 42, 79,108, 13, 94,156,143, 73, 5,193,146, 87, 74,199, 36,
- 24, 98,114, 84,240,198,139,100, 15,165,166, 24, 4,153,228, 14, 42, 72, 81,142, 87, 42, 73, 93, 5,144, 7,175,164, 50,126, 95,
-196,136,139, 44, 2, 61,246, 28,139, 81,107, 27, 89,145, 49,165,174, 41,206, 81,208,152, 48, 62, 15, 74,249, 50,217,163, 56,174,
-174, 24, 97,136, 76,196, 23, 11, 67, 65, 23, 33,148, 74, 6,138,143, 96,231,165, 66,221, 23,249, 25,158,232,189, 71,246, 64,133,
- 88,162, 39, 80,127, 74, 20,162, 5,165, 12, 94,185,113,234, 99, 53, 22,236,125, 84,188,106,124,237,131, 59, 61,190,172,186, 56,
- 1, 53, 78,178, 97,154, 2, 87, 99,197,204,216,232, 8,235,196,151,158,208,100,178, 94, 52,168, 34, 5, 60, 30,143, 84, 18, 31,
- 21,198,168,248,253, 56,220, 32,222,135,107, 37,130,104,143,148, 70,157, 39,247, 69, 56,202,225,188,139,199,135, 60,247, 60,242,
-200,195, 60,254,212, 19,164, 70,163,115,199,210,193, 99,204,207,204, 35,249,144,166, 49,104,231,200, 92, 14,214,224,242, 28,131,
-198,103, 14,131, 38,207,114, 68, 57, 68,235, 0, 72,121,136, 37,103, 49,150,109,140,162, 63,112,136,232, 48,231,222,145,229, 35,
-230,230,154,228,249,128,165, 99,199,130,130, 0,156,119,225,118,215,227,181, 90, 36,168,249, 72, 51, 3,100,121, 54, 94,227,226,
-145, 60, 67,242, 49,216,133,185, 16, 50, 21,192,211, 57,143,103,200,254,135,191,200,117,215, 95,203, 11,174,184, 10,236, 16, 39,
-107, 24,147,113,124,105, 21,151, 11,163, 97, 23,196, 99,146, 17, 89,150,225,242,140,196,106,114,151,151,215,175, 0, 62, 65,225,
-188,155, 88,175, 46, 82,227, 33,230,157, 99, 98, 28,189,136, 59, 23,113,220, 68, 2,120, 25,165,113,113, 93,230,121,142,120,143,
- 73,146,104,132,121,226,173, 31, 12, 88,231, 75,192,181,214,226, 93, 56, 55,173, 20, 73, 98,199,244,182, 10,121, 21, 74,133, 80,
- 64, 72,244, 12, 97, 2, 0,101, 20,163,209, 8,231, 29, 73,163, 65,146, 36,120, 31, 88, 4, 19, 1, 92, 69,166, 32,207, 93, 84,
- 77, 66,158,187,146,130,183, 54,161,217, 84,140, 70,209, 64,176, 73,105, 80, 21,222, 57, 42,122,225,206, 67,244,158,139,107, 81,
-132, 70, 74,134, 46,234, 4,231, 61, 58,254,206, 57,135,119, 18, 65,221,160, 36, 24,202,121,188,246, 86,155,210, 56, 81,168, 96,
- 76,104,194,152, 41,114, 10, 2,187,145,164, 22,163, 85,121,111,185,194,216,162, 96, 97, 92, 76, 44, 84,160, 37,230, 66, 12,199,
- 76,154, 86, 49,247, 70, 99,197,160, 1, 39,142,158, 12, 65, 53, 16,109, 56,190,222,167,157,164,108,238,108, 66, 91, 69,218, 78,
- 57,112,232, 41,140, 19, 22,230, 54,177,109,199, 38,186,163, 54,143, 28, 62,204,145,222, 65, 94,120,229, 78, 48, 93,122,221, 46,
- 13, 13,190,215, 39,181, 13, 84,154,224, 50, 97,203,124,155,181, 97,151, 27,174,188, 4, 55, 26,112,252,248,113,146, 89,216,177,
-117,129,157,151, 93,198,210,224, 24, 50,187,133, 57,157,146,245,186,184, 65, 78,182,182,204,252,117,151, 98,103,230,144, 35,199,
-195,181, 68,163, 26, 13,178, 97, 23, 99, 18,230,174,191,138,225,250, 58,190, 33, 52, 54, 25,230,119,204,243,119, 31,255, 28,163,
- 44,163,223,235,211,106, 54, 89,235,117,201, 69,216,121,201,101,116, 87, 87,200,134, 33, 87,102,203,226, 38, 6,131, 30,131, 81,
- 70,103,166,197, 82,119,128, 50, 22,227,160,149, 88,134,206, 97, 16,172, 86, 36, 70,209, 76, 52,169, 77, 72,149, 68,224,246, 72,
-238, 48,132,100, 81,231, 93,224, 62, 69,176, 86,227, 92,208, 97,102,166, 49,243, 86, 87, 64, 67,145,232, 21, 21,165, 30,147,144,
- 39, 80,225,167,147,113, 98, 82,177,167,137,188,211,138,103, 85,236, 79, 77,253, 71, 73,173, 22,244,179,248,170,247, 56, 78,244,
- 26,179,139,227,228,190, 34, 78,107,162, 55, 25,226,177, 6,141,193, 40, 59, 62,110,204,128, 45, 65,164, 56,239,152,237, 56,142,
-253,234, 9, 90,175,156,172, 98,172, 83, 79,124, 23,165, 75,114, 88,170, 41,174,101, 70,107, 8, 11,160,245, 56, 52, 80, 30,203,
-160, 98,190,128,142,241,103,165, 53, 42,110, 51,193, 78, 76,176, 12,106, 34, 60,161,162, 55, 40, 85, 6,161,204,138, 15,172,129,
-210, 58,130,151,174, 24, 47, 58,198,239, 35, 11,128,144,139,139,192,168, 74,118,166,152, 47, 34,235,224,188,139, 30,150,155, 72,
-112,171,102,214, 86, 67, 0, 94,124,153,209, 60,142,255,141,231,168, 52, 86, 74,112,158,252,119, 28,106, 8,191,245, 69,158,131,
-115,227, 87, 1,234, 81,105, 86,169,104, 95, 9, 89,120,239,241, 49, 78, 91,102,210, 42,193, 19,194, 37,130,196, 56,105,100, 34,
- 36,199,251, 60,102,102, 7,138, 56, 27, 5, 90, 57, 27, 57, 14, 31, 58,204, 11,175,185,138,217,217, 25,250,189, 30, 89,158, 97,
- 18,131,243, 14,163, 21, 62,247,209,171, 22,116,140,171,182,154, 45, 0,210, 52,101, 48, 24,150,172,199,112,148,161,117,131,225,
- 48, 35,119, 35,156,140,120,193,149,151,208,153,157, 97,255, 67, 15,243,200, 35,143,227,242,160,136,131, 82, 14,212,186, 14, 46,
- 90, 0,246,202,185, 6, 58,216,162, 80,248, 8,172,222, 23,185, 3, 33,183, 62,228,127,196,176, 81, 30, 60,173, 44, 27,178,186,
-186,204,182,237,243, 92,123,221,149,108,218,212,166,223,239,163,176,184, 76,161, 77,184, 7, 7,131, 97, 8, 33,136,148,158,119,
-145,207, 82, 56, 9, 82,100,245,198, 53, 87,128, 79,145, 89,172, 35,115,161,181, 46,211,158,189,132, 28, 20, 29, 25, 13,239,198,
-137,107, 18, 25,138, 2,164, 93, 4, 97, 93,201, 1, 41,230, 32, 73,146,242,251, 42, 69,159,231,121,153, 52, 87, 48, 68, 62, 82,
-229,206, 59,140, 53, 24, 27,232, 78,109,116, 60,159,176,143,196,218, 72,189, 11, 70, 91,156,247,113, 30,130,145,230, 92, 96, 68,
-108,146,160, 32,134, 18, 92,105,168, 56,151, 7, 29, 21,153,129, 66,195,186, 60,159,184,143,170, 33,132,170,254, 44,140, 54,173,
- 52,205,102,147, 34, 87,189,200,240, 87,145,173, 42, 28, 54, 69,181, 90,168, 82,143,164, 10, 32, 79, 72,210,148, 36, 73, 74,199,
-193,104, 67,158,101,100,217, 40,176, 42, 62,199, 21,204,144,214,224, 61, 70, 41,196,133,251, 68, 23,119,189,143,127, 7, 42, 15,
- 37,130, 53, 9, 86, 39, 40,132,102,162,104, 89, 97,115,167, 73, 43,177,248,209,136,153, 86,202,246,197,121, 22, 23,102,177, 86,
-232,117,215, 88, 89,239, 67, 99, 19,235, 67, 56,252,212, 33, 22,119,236,228,232,225,163,108,158,153,133, 97,198,104,189, 71,163,
-209, 98,180,214, 69,233,140,153,133, 54,107, 71,150,184,234,138, 93, 28, 89, 58,206,202,122,151, 60, 31,178,117,251, 60,118,198,
-210,185,242, 5,244,142, 30,195,107, 97,219,150, 69,214,151,150, 72, 22,102, 80, 73, 76, 16,109, 55,233,118,123,140,196, 49,179,
- 99, 11, 89,158,193,166, 54,233,214, 77,168, 68,232,245,187, 88,219,194,153, 6, 15,125,254, 97, 70,195,192,148,118,102, 58,172,
-174, 46,211,110,183, 25, 14, 6, 12, 7,125,180,130,217, 78,139,197,197,121,122,189, 30,214, 36,172, 44, 31,199,106,139, 17,161,
-101, 45, 6, 65,123, 71,203, 26, 26, 6,102, 82,139,241, 25,169, 81,101, 40, 19,241, 24,109, 48,218,196, 48,112, 8,185,136,214,
-225,158,115,130,105, 37,173,183,122,124, 40, 15, 81,147, 57,238,213,210,143,113, 9,130, 66,169, 51,165,218, 35,184,108,232,121,
- 79,238, 71, 77,167,204,149, 37, 36,170,180, 36, 21,102,162,188,106,227, 58,180,194,219,211,101,166,186,142, 65,214, 34,206,206,
-132,209, 32,147,231, 83, 4,154, 10,192, 47, 41,246,130, 25, 8, 49,121,173, 66, 54,124, 81, 10, 56, 77,225, 23,161,131,106, 98,
- 89, 17,219, 83, 49, 22, 29, 12,135,152,184, 23,203,175,140, 50,229,182, 74,153, 10, 77,173,203,172,251,241,190, 76,101,255,147,
-201,127,229, 56,164,242, 93, 52, 8,138,237, 74, 10,189,242, 91,165, 13,198, 38,104, 99,131, 97,162, 52,162,199,249, 12,227, 50,
-163,113, 66, 77, 65,187,149,137,119,213,236,243,138,241, 52,142,253,143, 75,147,138, 68, 61, 95, 45,141, 41, 67, 15,225,115,151,
-251,144, 80, 21,105,188, 42,160, 23,251,243,149, 4,196,130, 62, 30, 31,199,151, 49,222,170,183, 63,206, 48,143,192, 95, 30,123,
-204,200,140, 67, 27,227,146, 26, 81, 82,134, 71,148,178,225, 58,105, 19,255,181, 69,173, 0,219,182,204,241, 85, 55,221, 72,167,
-221,193,249,156,110,175, 27,178, 5,117, 80,204,205, 86,139, 44,203,131,119, 73,176,198,157, 11,244,101,230,242, 72,245,134, 4,
-180, 60,210,209, 74, 43,108,106, 72,155, 45,154,205, 38, 79, 29, 56,196,193, 3,135,201,115, 65, 43, 75,158,187,232, 45, 70,234,
- 88, 38,147,228, 10, 79,210,149,115, 24,231, 19, 41,141,165,178,180,138,113,117, 0,128,115, 57,221,238, 58,203,199,143, 50, 59,
-215,225,218,107,119,177,109,235, 22,210,196,134,220,135,212,210,108, 54,208, 70,135,236,240, 52, 41, 1, 66, 68, 48, 49,150, 95,
- 80,185,101,194,107,229,239, 34, 25,172, 0,170,177, 49, 22,140, 53,137,148,248,120,140,227,184, 98, 32,165,130,210, 43,140, 2,
- 23,243, 23,202, 88,113,145, 87, 96, 18, 84,164,181,165, 98,172, 74, 76,244, 76, 98, 34, 82,233, 93, 27,131, 54,166,156, 19,107,
- 18,156,203, 99,172,218,150, 52,115,238, 28,198, 38,184,152,184, 23, 18,120, 65, 27, 27,214,168, 11,108,132,119, 82,178,159, 74,
- 23, 97,145,201,170, 28, 19, 61,238,146,169,136,161, 17,165, 40,199, 93,204,159,137,227,172,230, 30,232,104,228,132, 4,203, 49,
- 83, 82,130,251,148, 34, 87, 58,228, 53, 36, 73, 18,230, 56,230, 84,168, 88, 10, 34, 34,164,137, 45,117,145,177, 6,101,194,220,
- 20,224,174,163,241,110,140,174,148, 73, 51,174, 44, 81,154,212, 36, 88,107,176, 9,164, 73,200,176,183, 74,104,104, 69,170, 96,
-115,187,141,207, 2,245,221, 93, 91,101,216, 31,226, 50,197,220,220, 60,205, 24, 87, 71, 89,246, 31, 56,196,209,213, 30, 56,197,
-252,204,102,172,178,100,131, 12, 99, 52,253,124, 72,163,211,225,248,177, 21,180,109, 32, 90,179,176,101, 11, 40,225,200,209, 67,
- 44,238,220, 70,123, 97,129, 67, 79, 61,197,226,165, 91, 25,228, 67,210, 52,165,181,105, 14, 51,215,134, 20,104,167,216,217, 54,
- 75,199, 14,211,220,186, 72,186, 56,135,222,178, 25,167, 60, 40,135, 36, 22,139,193, 57,205,231, 63,253, 32, 13,219,162,211,106,
-145, 54, 52,237, 78, 8,177,205,180, 59, 44, 45, 45,209,105,165,164, 38,228, 11,205,204,205,177,222,235,147,229, 57,195,126,143,
-205,237, 54, 13, 66,101,128,207,115,148,207,153,109, 53,104, 90,133, 21, 71, 51,177,101,158, 81, 8,155,132, 80,135, 82, 58,230,
-175, 8, 46, 38,158,122, 15,166,213,104,191,181,160, 95,125,181,214, 50,210, 78,227, 26, 91, 85,177,156,213, 25, 0,186,174, 0,
-162,154,174,139, 59, 33,206, 94, 40,234,105,152, 23,169,102, 42,171,147,208,243, 85, 31, 80, 77,214,166, 79, 89, 11, 74, 84,133,
-182,173,208,190,170,186,203,233,138,192,162, 70,218, 84,178, 77,199,177,253,162, 62, 87,197,216, 43, 17, 28, 41, 50,187, 75,144,
-174, 36,114,169, 8,204, 49,125,172,176,190, 76,153,128,166, 49,198, 6,192, 45,226,125,145, 18, 11,180,161,142,134, 75,164,136,
- 84,244,248,149, 25,123,221, 4, 64, 47,246, 93,128,183,209,182,252, 59,128,125, 80, 88, 69,146, 83,149, 21, 8,166,126, 48,116,
- 2,251, 48, 89, 55, 46, 82,201,212, 46, 43, 39,170,101,107, 99, 22, 97, 42,189,178,172, 79,159, 40,135, 84, 99,143,190,168, 43,
-245,149, 26,207,106, 86,128,103, 50, 71,160,172,243,143,235,166, 96, 72,124, 53, 84, 84,169, 39,245,101,246,255,184,132,147, 74,
- 29,106,193, 92, 20,201,146,101, 55,130, 2,208,181,197,104, 27,128, 29,131,181,105,184,246, 70, 99,172,162,221, 12, 30,216,241,
-229,227,244, 7, 61, 76,106,233,141, 6,100, 46,148,177,172,175,119,233, 15,134, 8, 66,183,223,167,219,237,210, 31, 13,232, 15,
- 7, 12,179, 81, 92,133,161, 68, 42,147, 33, 74, 5, 38, 66, 68,227, 60, 52, 91, 45, 86, 86, 87, 88, 93,233,210,235, 13, 65,235,
- 96,189,187, 28,231,242,104,213, 87,234,106,181,166,209,104, 76,220, 67,133, 1, 32, 18, 74,144,148, 82, 56,113, 49,116, 53, 86,
-234,101,226,169,210,244,122,125, 14, 31, 58,200, 96,208,101,113, 97, 51, 91,183,206, 51,191, 48,135,181, 9, 94,132, 86,171, 73,
-171,157,210,108, 54, 66,242,156, 82,100,163, 81, 76,118, 84, 49, 86,174,198,198, 69,133, 65,113, 46, 47,141,236, 2,164,138,114,
-182,162,218, 35, 73,146, 50,222,238, 99,200, 64, 69, 54,171,236, 27, 81,241,110, 11, 67,193, 87, 88,155, 34,193, 54,207, 93,164,
-214,199, 10, 51, 41, 75,186,194,253,155, 38,105,200,135, 24,141, 66, 9,146,181, 12, 7, 67,172,209,140,134,225,188,242,232,137,
-187,184,198,116,168,139,101,148,101,193, 24,144,177,193,164,212,216, 16, 23,241, 19,158,121, 89,118,167, 99, 25,173, 14,204, 73,
- 94, 73,150, 27,135, 36,244,132, 63, 19,116,232,184,194, 33,150,226, 20,133,209, 49,153, 89,198,157, 68,244, 88,191, 18,115, 0,
-148, 14,215,196,249,144, 15, 97,141, 9,165, 40,132, 36, 57,173, 53,205, 86,139,102,167,141, 73, 76, 72,148,147,112,255, 24, 29,
-170,136, 76, 52,112, 37,222,255,198, 90,108,146, 96,108,130,181,161,204, 45,236, 54,148, 23,118, 58, 51,160, 13,189,193, 8, 49,
-134,110,238, 88,233,245,104,164, 9,243,157, 14,155,231, 54, 49,204,114, 70,222,161, 36, 67, 73,206, 74, 54,128,164,193, 80, 44,
- 7, 87,123, 60,126,120,137, 97, 46,172,118,187, 12,189, 3,219,224,208,161,101,134, 30,182,238,220,193,112, 56, 2, 45,108,185,
-100, 7,189,193, 0,237, 21, 98,160,189, 56, 79,107,231, 54,146,173,155, 49,137,194, 24, 33, 87, 96,231,103, 97,182,129, 52, 13,
-155,182, 46,112,240,177,199,153,123,241,117, 48,211, 66,205,116,144,213, 53,146, 60, 71, 53, 90, 28, 91,234,178,244,248, 97,154,
-166, 73,171,145,210,106,165, 92,127,221, 53, 28, 95, 90,138,216, 98, 88,220, 60,203,250,202, 18, 51, 51, 45, 58, 51, 51,172,172,
-172,161,180, 37,203,114, 82, 1,147, 57,210, 36, 9,238, 64, 54,162,221,176,204,181, 26, 88, 28,141, 36,228,176, 36,198, 4, 99,
- 40,150,100,230, 46, 39, 19,135, 87,190,100,132,179,204, 99,218,173,246, 91, 39, 60,235,104,109,233,138,254, 43, 63,173, 80,207,
-101, 66,210,134,110,123,180,154, 11, 47,120, 3, 64,223,248,119,106, 34,233,237,196,154,117, 78, 29,115,159, 68,239, 49, 27, 48,
- 17, 47,175, 50, 4,114, 34,160,151, 33,136,113,178,154,175, 82,253, 83,219,251, 74, 78,186, 84,104, 13,197,100,105,136, 84,234,
-161,203,204,253, 8,120,101, 89, 76,140,231,233, 2,220,163,165, 91,122,230,166, 48, 14,244, 24,140, 43,177, 70,173,170,172,128,
- 25, 3,115,133,226,215, 21, 42,127, 26,208,149, 30, 51, 3,166,100, 32,198,117,235, 10,131, 86,225, 5,129,141,144, 50,145, 80,
-143,203, 7, 35, 83,161,116,213,192, 24,155, 94,190,240,178,202, 6, 29,170, 76, 90,140,181, 79, 49, 14, 44, 37,160,151, 77, 74,
-244,100,162,227,248,111, 61,174,102, 40, 26,157, 40,133,232,106, 66, 99,153,121, 23, 89,136,168,176,116, 81,241, 48,222, 95,225,
-121, 67,156, 23,138,249, 44,188,114,139,142, 47, 19, 13,165, 42,149,107,180, 98,182,221, 98,219,214,237,116,187,235,116,123, 61,
- 30,126,228, 81, 6, 89,206,122,183,199,210,242,113,146, 52,197,121,207, 90,183, 27,198, 27, 89,156, 97,150,197, 74,203, 48,215,
- 74, 75,164,250, 37, 36, 41,161, 25, 12, 7, 40, 29,234,216,187,131, 17,253,225,136, 81, 62, 10,141, 83,136,241, 96,241, 88, 99,
- 99, 51,148,144,105,169,181, 66, 98, 34, 84, 40,201, 50,145,154, 14,224,169, 77,240,194,108,225, 77, 23,148,176,130,102,154,150,
- 43,161,223,235,243,212, 83, 7, 56,114,248, 8,189, 94,151,225,160,143,115, 66,158,141, 24, 13, 7,140,134, 67, 68, 28,217,112,
- 20,194, 15, 89, 86, 54,241, 24,131,186, 46,195, 32, 33, 20,165, 74,150, 46,148,159,201, 68, 72,233,100, 25,185, 66,165, 44, 81,
-169,178,108,204,196,228,190,170,247, 63, 93, 98, 91, 86,199, 20, 84,125,164,251,157,207, 43,172, 80,200, 49,112, 62,120,205,214,
-218, 50,115,190,168,121,119, 34, 49,252,145,227,197,151,201,113,168,113,146,110, 56, 39, 87,122,231, 85, 38,164, 48,120,148, 10,
- 57, 47,206, 5,195,202,249,216, 32,171, 18,250,171, 54,187, 10, 9,104,110, 50,188, 68, 76,222, 43, 28,177,200,216, 21,243, 93,
-156,103,121,173,147, 36,150,248,197,172,122,107, 72, 27, 13,180, 13,217,212,170,146, 19,149, 36, 9, 42,134, 8,138,202,138, 80,
- 34, 24, 18, 51,195,247, 6, 29, 19, 53,181,181,161,204, 46,150,216,121, 66,120, 46, 92,219,112,223,101,185,167, 59, 26,209,119,
-194,209, 94, 70,207,195,112,148,177,116,232, 40,195, 94,159, 65,230,112,198,210,237,103, 28, 91, 90,101,181,219, 71,119, 58,104,
-147, 34, 24, 6,162, 88,201, 28, 71,214,123, 28, 89,237, 49, 68, 51,112,134,158,211,172,244, 71,164,237, 54,199, 87, 87, 88, 27,
-172, 51,191,117,129,220,141,152,237,204,112,172,183,130,207, 51,154,173,148,100,182, 13,179, 45,148,209, 12,122, 93, 84,167,137,
- 78, 53,210, 0,179,169, 19, 12,183,108,128,157,155,193,116,218,184,229, 21,186,199,150,104, 54,218,144,107,150,158, 56, 74,170,
- 18,242, 44,167,209, 72, 65,121,210, 52, 65,156, 48,236, 15,176, 26, 52,161, 12,114,113,113, 30,165, 13, 7, 15, 31, 38, 73,155,
- 12,214,122,116,140,101,115,167,137, 85,130,207, 51,102, 91, 77, 82, 45,164, 6,172, 53,232,152, 28,231, 92, 94,160, 16,142,112,
-255, 11, 58,150,135, 10,121,238,177,136, 15,101, 83, 19,133,107, 50, 6, 86,136, 73, 58, 85,151,215,151, 11,164,236,225, 52,213,
- 5,172,100,106, 9,165, 17, 27, 83,243,170,140,245, 86,111, 56,145, 19,227,247, 74,141,169,211,147, 33,188, 42,227,220,149,158,
- 91, 78, 98,242,137, 62,193, 11,175, 36,247,199, 44,251,162, 46,188,218,203, 77,198, 37, 29,227,220,235,152,131, 46,149,158, 62,
- 76,132, 38, 84,121, 59,176,177,215,143, 47,147, 19,199,201, 66,178,113,165,128, 98,170,171,222, 84,155,172,146, 49, 56,209,200,
- 18, 29,142, 84, 36,159,133,155,187,202, 44,200,137, 29, 2, 42,201,143,177,202, 21,239, 2,147, 35, 33,251,110,220, 53,140, 16,
- 15,215, 82, 25, 89, 44, 63,147, 10,184,250, 74,147,179,144,229,103,202,218,240,105, 35,175,244,182,161,226,205, 23,185, 0,122,
-106,126,170,205,103,166, 58,229, 21, 37,121,241, 56, 33,121, 14,124,225,161,232, 10, 67,160,199, 73,147,197,202, 87, 69, 82,101,
-204, 2, 14, 89,198, 97,231, 70,201, 68, 92, 82, 77,182, 20, 11,128,150, 67,218,108,115,124,245, 17, 46,185,236, 18,156, 73,120,
-228,137, 39, 80, 24,140,241,172,173,173, 97,147,148, 70,179,193,112, 56, 68,161,201,114, 87, 26, 93,162, 96,152,119,209, 90,147,
- 38, 13, 92,150,211, 76, 67,104, 36,115, 35,142, 28, 62,204,214, 29, 59,105,183, 91,228,222,177,188,180,140,203, 67,178,151, 50,
- 9, 74, 2, 45,167, 53,216,200,236, 56, 23, 50,143, 37,122,241,170, 40,113,171,148, 91, 85,197, 36,182, 4,197, 52,209, 12, 6,
- 57, 54, 73, 17,160,223,237,243,240, 67, 79,240,196,227, 7,153,153,105, 99,147, 70,240,106,189,224,178, 17,189,110,151,108,148,
-225,242,208, 36, 74,137,196,220, 72, 85,246, 61,208, 90,227, 99,102, 55, 42,128,100,200, 53, 80,227, 46,120,149,117, 93,140,179,
- 0,236,106,199, 60, 19, 65, 70, 71, 90,189,122, 95, 22, 64, 95,236,203,139, 27, 87,113,136,170,244,123,240,228,177,153, 85,238,
-131,238, 48, 86, 69,195,195,134,100,202, 88, 93,226,240,228,121,134, 49, 22,165, 13,190, 50, 6, 31,235,192,173, 14,181,241,196,
- 26,121, 84, 48,106,198,140,161, 10,212,181, 49,101,197, 69,168, 52, 8, 37,125,218,132,100, 41, 99,108,200,179,200,163, 49, 17,
- 13,177, 34,115, 61, 96,110,104,166,160,117,104,110,163,138,138, 28,175,202,168,165, 49, 54,148,141, 90, 67,146,132, 4, 56, 99,
-131,241,230,179, 17, 73,146, 6,166,167,146,120, 91,220,113,137, 77,201, 92,142, 19,135, 21, 83,174,155, 34,206,175, 34,213,175,
- 98, 70,157, 23,202,108,251,162, 52,206, 0, 73,164,145,197, 90,116,163,129, 50, 64, 30, 40,123, 99, 21, 43,235, 61,214,189,163,
-173,133, 3,235, 75,204, 30, 94, 37,213,154,197,249, 69, 26,141, 25, 6,249,136,238,129,227,120,132, 86,187, 69,167,209, 8, 73,
-167,206, 65, 83, 88, 18, 97,132, 97,109,125,141,254,122,159,163,195,199,216,178,169,195,104,152,211,105,166, 72, 39,101,113,113,
-134,133, 77,219,120,234,169, 39,240,131, 17,170, 59,192,225, 81,157,132,206,214,121,134,171,235,144, 41,236,226, 12, 94, 67,107,
-215,229,140,158,120, 28,215, 95,195,180,103,177, 91, 23, 49, 71,143, 33,253, 33, 12,135, 88,163, 88, 29,245,217,185,243, 18, 30,
-127,242,113,230, 23, 54,161, 27,138,229,195,199,104,219, 16, 22,152,153,233, 48, 26,245,200, 6, 61,182, 46,204, 48,219,105,176,
-214,243,216,118, 19, 11,168,188,207, 66,187, 69,222,237,198,121,247,140, 70, 67, 26,141, 70,137, 25, 38,198,206,157,115, 36, 54,
-101, 48,200, 66,101,142,243,161,244,209, 11,182,208,124, 5, 43, 83, 40,209,178,213, 40,122, 3,197, 73,121,243, 84,111,184,113,
-108,106,178,249,160,174,212, 75,158,208,224,110,156, 88,126,154,178, 56, 93, 42,221, 83,149,194,203, 68,198,218,216, 19, 63,225,
-248,213, 30,178, 76,255, 61,149, 24, 88,246, 98, 28,151,147,249, 13,178,253, 39,230, 98, 42,246, 95, 85,152,122,220, 51,110,210,
-123, 56,211,100,133,147, 36, 38,158,116,230, 42, 9, 73,101,147,138, 34,110, 41, 30, 85,161, 67,169,100,210, 79,118,250,211,101,
-105,144,210, 6,209,161, 61,105, 40, 79, 19, 84,161, 95, 43, 73,135,186, 12, 53,108, 84,206, 56, 57, 55, 27,141,127,186, 59, 92,
- 53, 33,232,228, 29,242, 38,129,191,104,117, 43, 18,186, 92,169, 88,162, 86,109,247, 89,141,207, 23,237, 54,117, 1,234, 49, 4,
- 81,237, 58, 88,182, 1, 82,149,106, 9, 53,213,159, 83,160,215,239,179,178,182,138,177,150, 7, 31,252, 18,151, 92,254, 2,146,
- 67,135, 17,237,162,129,234,177,218,144,231, 25,137, 9,149, 14, 65,177,217, 96,128,120, 65, 91, 75,171,209, 12, 64,149, 57, 52,
-138, 70,154,194, 72,192,121,150,142, 28, 97,203,182, 29, 52,210,132, 68, 27,134,131, 65,152,183,220,209,239,247, 66, 25, 95,145,
-143, 49,213,166,181,136,205,134,210,183,144,148, 21,192, 96, 28,235,133, 80,130,166,180,142,140, 85, 65, 27,135,146, 26,163, 53,
- 62,247,172, 46,175, 49,202,150, 98,167,180, 28,148, 38,207,179, 50, 87, 67, 36, 36,225, 25, 47,101,239, 3,143, 43,217, 0,197,
-184, 20, 85, 25, 53,206, 82,175,228, 80, 76, 3,116,181,131, 96,113, 30,197,191, 69, 92,185, 0,156,130,190, 46, 26,208,248, 88,
- 62,166,140, 42,245,195,104,148,209,104, 36,129,214, 47, 58,170, 65, 73,173, 43, 69,204,228, 31,135,137,138,210,186,144,160, 56,
-190,183, 68,170,213, 25,227, 82,177, 49,144,187,113,153,109,245,125, 44,229,180, 54,193,123,135, 19, 79,150, 57,178,204,145,231,
-190,172, 0,242,185, 43,157, 21, 85,101, 7, 85,212,217, 50,214,225, 62, 86,212,148,249, 11,166,208,201, 30, 33,100,193, 83, 86,
- 22,229, 24,163, 66,254,131, 53,193,171,206,114, 92,238, 24, 56,143,177, 33,215,167,200,221, 40,238,163,162, 43,160, 73,211,144,
- 0, 88, 86, 27,248,192, 12,233,192, 12,129,132, 94, 33, 90,145,121,135, 31,244, 73,173, 33,141,172,128,228,158,102,136, 89, 52,
- 46, 0, 0, 32, 0, 73, 68, 65, 84,187,133, 86,138,227,221,117, 18, 44, 43,125,135,145,156, 39,250,135, 73,108, 8, 89,180,211,
- 4,131,208,234,204,210,180, 9,198, 11,166,149, 50,114, 67,122,131, 53,218,115, 11,164,237, 5,150, 14,193, 76,179, 69,187,213,
- 98, 54, 81, 12,215,214, 89, 95, 94,102,199,194,102, 70,235, 93, 46,219,182, 29,219,108,224, 92,142,206, 50,196,141, 96,243, 22,
-140, 79, 25, 29, 63,142,233,180,200,140, 39,153, 79,177,109,139,214, 33, 84,163, 91, 29,146, 70,138, 91,207, 89, 61,182,204,104,
- 52, 68, 3,157, 78,139,181,181, 85,150,151, 90, 92,113,197, 85, 60, 54,122, 28, 81,134, 45,139,139, 28, 60,116,128, 70, 83,179,
-222,237,177,185,209, 98,235,150, 45,172, 63,126, 8,155, 38,104,113,248, 60,195, 42,133, 53, 10,231, 50,208, 9, 74, 27, 70,131,
- 33, 77, 27, 67, 39,202,160, 98,203,106,231, 66, 95, 4,147, 54,131,202,113,193,174,179, 99,229,233, 35, 16,197, 62,200, 69,119,
- 47, 57,209,139, 83,138,169,150,164,234,148,160, 82,180,120, 61,121,131,117, 74,171,242,212,113,250,211,110, 48,209, 63,126,242,
-223,226,183,102,195,242,187,113, 47,228,208,192, 99,124,163,168,233, 60,188,178,100,232,140,227, 2, 19, 96, 48,238, 43,172,207,
- 16,196,171,115,171, 42,253,176, 75, 47,230, 20,185, 10, 82, 1, 68,181, 65,187,216,201, 74, 3, 53, 81,250, 86,206,223,244, 28,
- 23,229, 46, 42,100,180, 42, 93,105, 30,164,170,221,220, 42,221,230,166,128,122, 26,152, 67, 94,130, 63,101,152,166,240,208, 54,
-154,155, 82,193,151,157,219, 55,232, 31,175,252,134,151,107,162, 89, 79,185, 63,153, 72, 12,173,142,183,168, 29, 47,234,218, 79,
- 48, 50,162, 39, 50,200, 50,150,143,175,224,128, 81,158,243,240,163,143,210, 31, 12,104,180,218, 12, 6,195,144,193,234, 92,136,
- 91,198,184,106,154, 38, 12,134, 3, 58,205, 86,153,193,110, 98,151, 56,107, 76,232,110,214, 16, 52,138,225, 96,128,119,158,135,
- 30,124,144,118,187, 19,122,217,143, 70, 88,107, 24, 13, 7, 24, 29, 12,209,160, 76, 99,226, 88,225,221,169,241,253, 22,188,247,
-184,238, 99, 2,142,115,121, 72,250, 19, 41,251, 11,100,153,139,201,101, 62, 94,215,240, 95,106,146,216, 76, 97,220,157,206,121,
- 65,124,236, 84,103,198,160, 93,109,162, 82,140,163,104, 35,140, 31,119, 72,172, 26,158, 27, 25,113, 89,150,149,177,246, 2,172,
- 11,239,220, 87,107,184, 43,241,246,220,141,195, 13,129,150, 15, 44, 70, 81, 53, 97, 98,205,120,136, 3, 83,122,158,185,119,101,
- 13,184, 54, 38,128, 36, 99,246,104, 52, 10,173,110, 11,227, 34, 73, 44, 58,198, 75, 75,138,188,194, 28, 84,141,200, 34, 1,109,
-114, 78,138,241,197,100,206,104,100, 20, 61, 6,202, 30, 11,106,220, 35, 99,162, 91,103,108,115,173, 43,250, 65,219, 80,207,140,
-137, 6, 78, 30,235,216,167,140,240, 44, 23, 68, 12,248, 17, 9,150, 36, 77,104, 88,131,246, 69,206,203,184, 77,120, 48,148,132,
- 36, 77,202,117, 42, 46,143,201,145,141,192, 70,138, 39,207,114,180, 10, 52,178,169,244,181, 80,132, 10, 11,229,130,177,146,197,
-184,124,226, 52,189,225, 0, 47,150,129,119, 88,147, 4, 3, 88,192, 15,115, 90,105,194,166,206,102, 18, 45, 28, 91,239,178,186,
-190,198, 76,179, 65,195, 41, 90, 45,203,182,133,237,236,220,177,133, 99, 71,142,161, 26,194, 85,151,109, 70,178, 1, 91,230,183,
- 99,181,208, 79, 91,248, 92,211,237,174, 50,127,245, 78,124,106,192, 40,196, 1, 46, 71,245,250,152,180, 65,179, 51, 67, 62,200,
- 73,182,205,134, 78,120, 6, 52,121,104, 84,229, 5,175, 53,195,110,151, 39,247, 63,134, 21,197, 32,207, 1, 71,179,153,210, 93,
-239,242,248, 99, 79,210,108,182, 56,118,228, 40,173,206, 12, 30, 69,127,144,177,180,180, 66,163,213,161,221,110,178,125,235, 22,
- 14,254,255,156,189,217,146, 36, 71,154,165,119,116,183,197,221, 35, 34, 19,168, 2,170,186,171,167,187,103, 19, 82,134, 34,188,
-227, 35,240,177,240, 98,124, 5,138,144,188, 24,161,112, 70,122,175, 2,144,153,136, 8, 95,108,209,149, 23,191,170,154,154, 71,
- 36,170,100, 26, 18, 82,232, 64, 70,164, 47,230,166,255,114,206,119,254,248, 35, 98, 98,208, 66,195,185, 5,189, 34,240, 77,100,
- 18, 90, 74,196,213, 34, 50,210, 35, 68,134, 44,160, 13,128, 80,232, 76, 7, 27,200,138,232,124, 64, 72, 60,119,234,181,203,140,
-155, 38, 60,165,198, 50,246,182, 27,175, 10,225,180, 63,108,191,218,173,167,191, 64, 92,199,247,227,215,191,244,192,124,255, 0,
- 76, 59, 31, 60, 99,251, 84,128,173, 11,100, 59,207,124, 66,130,128,120, 51,202,110,105, 83,169,165,238,221,249,195, 89,129,195,
- 48,145, 15,209, 88, 87,252,172, 17,146,129,189, 45, 98,254, 92,167, 94,111, 82, 72, 32,102,213,230, 83,103,239,112,223,171,225,
- 44,177,119, 34, 45,182, 98,103,123,255,226, 93, 0, 67,220,176,181, 77,168, 13, 18, 49, 1,164, 20,153, 80,133, 6, 94,146,154,
-131,176, 97, 30,180,129, 3,123,187, 65,115, 83, 98,239, 31,216,205, 60,125, 11,132,105, 67, 15,218,194, 44,189, 89, 99,188, 89,
-229,236, 70, 78,216,214, 46,109, 16,199, 87,223,147, 50,116, 15, 59,209,221,155, 63,199, 0, 23, 34,250,113, 4,231,155, 7, 59,
-196,136,117,181, 96, 76,160, 51, 26,118,153,179, 69, 75, 98,181, 11,148,234, 17,163,196,195,233,128,215,215, 23, 12,125,143,215,
-215, 11,237,237,203, 78, 53, 70, 68,231, 33, 33,224,150, 21,201,123, 44, 87, 18,222,176, 16, 16, 83,128, 96,200,138,100, 90, 91,
-109,187,115, 58,120, 90, 17, 25,242,129,209,210, 24,185, 84,213, 90, 22,124,160, 3,162, 20,106, 89, 89,207, 52, 29,230, 92, 8,
- 8, 65, 54, 61,161,232,160, 93,236, 10,166, 68,222,241,147, 62, 55, 6,208, 90,160,132,249, 52, 92,116, 6, 81,239, 37,109, 55,
-219,118,185,155,136,108,179,167,181, 64,150,246,207,128, 19,151,221, 59,151,109, 89, 89,151,145, 15,118, 41, 52,229, 48, 56,215,
- 92,131,244,119, 42,174,242,206, 55,238, 62,255, 45,166,181,248,211,233,113,216,252, 25, 34,191,112,101,173, 99, 43, 70,156,115,
-187,105, 79,185,182, 67, 44, 7,158,130,214,166,146, 38, 99,140, 88,150, 5, 34, 59, 9,202,206,220, 90, 11,169, 5,198,126, 4,
-103,192,106,137, 9, 16,171, 98,158,220, 0,146,211, 10,204, 40, 3,173, 21,221, 91, 89,230, 22, 20,234, 94, 66,126,254, 41, 99,
-118, 89, 37,251,129,231,247, 56,255, 25,157,247,228,206,249, 60,217,201, 54, 71, 79, 66, 89,203, 44,140, 49, 48, 66, 33,120, 15,
-235, 61, 9,239,138,224,209, 59,104,158, 7,195,130,180, 67,116, 46,208,193,239, 98, 4, 7, 17, 56, 95,158, 95,203,146, 23, 82,
- 41,120,112, 40,169,161, 59,133,232, 45, 98,240,248,252,229,130,190,151,144,130, 86, 97,110, 89, 49, 40, 78, 5,164, 7,254,248,
-207,127,196,249,114,129,157,110,120,249,252, 9, 18, 30,143, 29,137, 93,163,245,248,252,211, 23,232, 7, 9,121,232,192, 58,133,
- 32, 18, 68, 55,192, 77, 19,150,231, 51,186,223,126, 3,244, 3, 77,177,179,150, 73,244, 61,184,209, 72,243, 4,188, 92,160,250,
- 3, 46,151, 47, 16, 14,248,112,120,128,240, 51,188,117, 56, 62, 28, 97,109, 0,151, 2,171,243,248,246, 55,191,197,207,159, 62,
-231,181, 8,195,243,235, 5,227,241, 2, 46, 21,134, 94, 67, 26, 1,107, 29,116, 55,162,115, 1, 2, 17, 54, 88, 40,169,144,172,
-133, 0, 33,164,201, 49,193, 17,243,245,183,216, 0, 31, 81,245, 60, 76, 42,184,192, 32,223,132,129,240,125,218,213,215,187, 78,
-246, 21,236, 43,154,195,126,155,171,179, 95, 25, 71,167, 50, 25,104, 25,228,117,228,206,118,221,125,123,184,190,231,139,111, 15,
-243,242,225,120,239,103, 42,151,188, 40,235,219,156,181, 24,238, 14,156,125,119,201, 91,245,221,123, 35,224,146,134,197, 0, 68,
- 78, 33, 8,205,206,125, 27,241,178,183,211,138, 95,233,210,121,229, 68,147, 32,253, 30,236,243,238,248,122, 47, 82,104, 14,183,
- 84, 71,204, 91, 17,246,254,235, 74,157, 79,161,234,229, 0, 27, 38,239,128,193,169,241, 20,163, 6, 61, 32,171,227, 75, 24, 78,
-123, 35,222, 30,119,218,144,184, 45,179,155,241,187,215, 21, 85,241, 94,212,184,169, 9,132, 73,213,201, 16,191, 34,194, 44,128,
- 17,177,155, 64,149,107,149, 97, 19,113,149,240,160, 90,144,213,199,154,133, 83,108, 91,163,188, 9,146, 73,168, 34,187,159, 63,
-253,130,177, 83, 88, 87,139,199,195, 1, 74,221, 72,113,237, 29,188, 40, 62,113,142,195,241, 4,185,208,200, 90, 41,133,235,249,
- 5,136, 33,119,232,212, 65,134, 12,249, 40, 65, 36,235,186, 2,145,246,182, 68,126,203, 97, 15,121,116,109,145,114,199, 77, 35,
-107, 33, 37, 98, 6, 87,164, 24,193, 19, 65, 89, 2,227, 89, 24,185, 63,116,202,168,154, 10,130,109, 47, 75, 8, 83,150,141, 52,
-249,117, 10,156,138,137,196,161,164, 0,227, 6,214,123,240, 16, 32,132,132,103,196,174, 23,249,243,230, 51,103, 92,114,153,139,
-157,172,153,201,188,130,214,126, 87, 14,212, 50,165, 41,193, 40,173,253,139,132,222,164,220,102,130,193, 7,255,238, 78,190,144,
-221, 56, 74,158, 73,170,187, 97, 42,118,232, 0, 44,229, 95, 17,218,181, 30,241, 86,105, 94, 14,193, 80,137,119, 84,156,172,235,
-186,179,230,149,221,185,148, 98, 55,129,144,146,214, 47, 46,120,196, 53, 65, 43, 5,165, 36,164, 52,248,248,241, 9, 96,192,178,
- 76, 36,156, 11, 17,189,145, 16, 66,210,193,204, 57, 62, 28, 30, 0,198, 48, 47, 75,134, 67,145,154, 94, 9, 78, 97, 54,121,130,
-192, 56,105, 74,188,247,224,140,195, 89, 71, 7,187, 32, 75, 89,215, 27,112, 46, 41,135, 32, 3,188,220,106,113,181, 43,148,224,
-152, 67, 64,223,245,232,250, 1, 49, 70, 88,107,161, 20, 9,122, 75,160,205,186,174,232,164,198, 48, 24,116, 93,135,224, 3, 98,
-182,222, 41, 69, 54, 54,231, 61, 61,151,204, 4, 40, 2, 66,145, 69,188, 28, 9,156,251,236,201,166,251,138,115, 30, 8,145, 44,
-111, 82,100, 55, 8, 0,151,224,167, 5,227, 96,208,247, 3,184,228,120,189,205, 88, 22,139,225,248,128, 37,246,152, 87,139, 63,
- 12,223,225,227,168,112,250, 48,194,135, 5,236,242,130,197, 95, 96,216, 9,235,229,138,238,216, 65,118, 6, 24, 53, 4, 79,152,
-127,249, 5,189, 18, 72,125, 7, 88,135,148, 60, 24,215,128,236, 9,135,251,252, 35,248,101,130,232, 62,192, 79, 14, 15,102,196,
-186, 0,231,151, 23,124,126,126,134,231, 9,195,233, 1, 63,125,254,132,117, 94,241,135,223,255, 30,183,219,140,105, 89,145, 66,
- 0, 67,196,151, 47,207,248,171,191,254, 43,132,232,224,163,199,225,112,192,109,182,120, 26, 6,136, 96,225,111, 30,146,209,202,
- 75, 74, 1, 33, 57,253,221, 49,100,190, 72, 33, 34, 74, 88, 79,171, 25,135,132, 41, 49,136,177, 27,126,216,143,119,183, 94, 4,
-239,141,163,255,135,118,192,236, 13,183,124, 67,154,147, 79,184,132, 9,220,239,208,222,219,231,191, 17,131,181, 59,209, 20,119,
- 69, 74,123,128,108, 31,238,175,117, 87,109,184,200,190,232,120,111, 20,248,181,175, 45, 32,166, 8, 77, 26,143,122,225,211,223,
-165,149,177,255,129, 81, 60,218,248,192,180,247,184,178,118,143,206,246, 99,100, 94, 9,188, 44,251, 74,211, 87,223,207, 24, 99,
- 78, 10,203,146, 58, 46, 32,133,202,157,163,216,184,237,108,255,123, 42,244,162, 96,168, 88,172, 99,120,158,217, 5, 12,236, 77,
-156,207,215,118,235,239, 64, 19, 50,111,255,235, 41,127,239, 61,159,242,126,252,218,238, 62,181,100,197, 50,209,204, 98,123, 81,
-113,195,251,196,185,118, 92, 92,186, 17,128, 97,186, 93,240,248,112,194, 48,244,164,116,207,156,119, 58, 12, 36,132,228, 56,158,
-142, 56, 28, 14,136, 49,212, 93,112,111,122,196, 76,175, 27,134,177,138,194, 74,221, 90,212,213,197, 46,165,132,132, 96, 84,197,
- 11, 78, 30,107,169,120,245,241, 23,251,216,110,151,155,147,233,116, 78,109, 43, 65, 42,229,128,187,215, 58,112,145,119,191, 5,
-107,154, 34, 65, 83,132, 32, 1, 85, 14, 47, 41,201,124, 68, 21,163, 34, 89, 10, 1, 41, 36,148, 80,116, 67,138, 33,139,169, 98,
-245, 79, 87, 69,118, 62,200,203,174,191,221, 57,151,251, 67,129, 11,165, 12,220, 72,237,245,159,139,118,158,167, 26,200, 69, 76,
-185, 74,138,109,148,246,207,132,158, 45, 5, 68,140,161, 2,121,218, 53, 64,123, 47,217,114, 18,248,206,195, 95,224, 68,156, 23,
- 64, 12,117,197,125,223,215,199, 30, 2,193,111, 74,247,189,174, 22, 49,146, 82,218,104, 13,103, 29,166,121, 6, 99, 9,175,175,
- 47, 88,150, 5,199,177, 3, 67,132, 82, 2, 93,103,224,188, 67, 76, 30, 92, 48,248,224, 0, 22,209, 15, 29, 66,112,132, 52, 77,
-100,187,227,130, 99,153,167,124, 79, 68, 38, 32,122, 12,195,128,135,135,135,236,195, 7, 68,126,157,157,119, 72, 41,194, 46, 43,
-188,179,144, 74,162,235, 58, 8, 46,209,153, 14, 66, 42, 88, 75, 62,112, 99, 52,148,146,249,253,163,247, 67, 10,137, 24, 28, 49,
-241,157,219, 68,152, 69, 15,194, 5, 77, 77, 98, 32, 69,124,162, 61, 48,229, 15, 16, 69,145, 44,142, 17,178,215,240, 41,194,122,
-151,167, 65,128, 54, 18, 49,122, 76,203, 2,159,157, 45, 99,215, 67, 11, 1,248, 0,149,195,101, 2, 18, 14,167, 39,220,110, 51,
-122, 35,241,159,255,254, 15,120, 24, 36,188,159,161, 68, 66,176, 43,158,158, 62,226,233,227, 7, 48,163,225,167, 9, 76, 75, 48,
- 9,112, 41, 33, 4,135,237, 56,244,183, 31,137, 47,176, 92, 33,250, 17, 44, 36,240,152, 32, 83,130,212, 10,184, 5,252,244,255,
-254, 19,194,205, 34, 6, 6,101, 6,252,233,231,159,241,248,241, 3, 68,182, 61,122,235,177, 46, 43,184, 16,120,126,189,162, 27,
- 6,132,224,208, 15, 29,180,214,184, 77, 19,124, 76,184, 92, 38, 44,215, 27,190,233, 59,140,130,193,205, 11,180, 82, 8,222,225,
- 48,246, 88,115,114, 97,200, 83,181,152,104, 18,152, 24,137,107, 87, 31,177, 50,129, 63, 94, 23,136, 83, 55,254, 16,239,110,164,
-156, 53, 62,236,108,104,122,239, 64,255,181,131,168, 61, 88, 99,138, 25, 52, 74,255,148, 94, 43, 34, 3, 75, 50,142,113, 75, 3,
-195,157, 58,125,207,153,223, 58,248,141, 59, 79, 95,241,171, 54,184,251,239, 85,214, 56,123,155, 81,195,192,222, 60,199,251, 67,
-125,207,137,190, 63,212, 9, 54,193,179,205,139,151,220,109,108, 81,173, 91,180,201,215,191,190,246, 60,246, 40,216, 45, 93,237,
-189, 3,173, 30, 58,119, 59,110,114, 26,198,221,222,253,107, 83,148,194,148, 47, 86, 58, 33,228,118, 99, 76,121,225,192, 54,177,
-161,224,105, 83,144,215, 47,182,115, 69,180, 46, 51,252, 10,177,112, 87, 76, 50, 52,163,119,126,183,143,103, 59,182, 1,208, 90,
- 35,177,193,120,176,207, 19,104, 85,252,169, 69,218, 98,235,208, 25,163,231, 83, 38, 17, 53,150,160,137,167, 21, 69, 29, 95,199,
-248,140, 48,192, 33, 96,158,174,232,123,131,241,112,192,249,114, 1, 18,195,241,112, 68,223,119,228, 59,205, 52,178,105,154,104,
-244,137, 4,109, 52, 69,215, 34, 65,155, 14,203,178,108, 17,233,130, 99,117,150,118,187,156,103,101,118, 14,104,137,148,204, 70,
-234,118, 58,184,124,230, 66,167,166,160, 46, 65, 77,165, 67,111,197,102,117,207,126, 55,230,142, 49,194, 89,151, 15, 64,178,156,
-209, 77, 94, 86,206,119,138,168,135,122,240, 1,198, 24,168, 92, 52, 32,131, 83, 10,165,145,113,212, 2,164, 88, 50, 83, 62,144,
-247, 22, 45, 84, 54,124,204, 40,223,216,192,131, 82,158, 62, 20,101,121,140, 4,135, 41,239,183, 16, 18, 74,234,234, 87, 37,155,
- 96,193,213,102,156,110,198, 6,135, 72,120, 99,173,245,190,160,201,239,115, 59, 1, 76, 57,156,188, 76,128,138,247,220, 24, 93,
-175,197, 16,124,157, 14,148,169, 0,137,242, 40, 82,214, 24,131,190,239,235,216,189, 51, 26,135,195, 0, 37, 5, 30,142, 7,244,
-157,129,150, 2, 82, 16, 14,116, 93, 22,140, 67,143,195, 56, 82,199,188, 44,116, 87,141,200, 42,246,132,105,154,177,204, 14,206,
- 90, 34,224,229,112, 32, 6, 96, 24, 6,204,243,132,101, 89,112, 58, 29, 96, 58, 3, 31, 61,152, 32, 21,188,200,151,191, 82, 10,
- 46, 23, 78, 70,107, 4, 31,225, 86, 7,239, 92,166,202,209, 97,219, 25, 3,163, 13, 21,108, 74, 81,130, 88,190,134,188,243,240,
-214,213, 27,185,181,150,120, 5,117,252,158, 50, 51,131, 33,248,144,135,186, 17,224,140, 96, 75, 57,190,213,123,139,224,125, 78,
-150, 76, 96, 66, 34,228,207,165,179, 43,180,228, 24,187, 14,167, 67, 7, 36,135,224,102, 40, 35, 96, 12,199,114,253,140,239, 63,
-244, 56, 14, 9,122, 16,136,243,132, 65, 31,208,141, 39, 48, 70, 40, 97,230, 3, 68,167, 73, 35,179,102,216,142, 20,224,198, 32,
- 5,155,109,191, 26,225,229, 21,105,153, 50,118,216, 35, 37,141,244,124, 5,151, 6, 63,255,252,140,227,195, 7,252,233,167, 79,
- 25,203,155,192, 66,192,195,120, 0, 24,217,205,150,213,195,135,128,161, 55,112,206,162, 31, 7, 72, 73,209,172, 92, 40,104, 46,
-193,237,140, 35,103,120,236, 7,172,243,138,126, 28,225,252, 68,164, 63, 41, 41, 13,210, 57,250, 60, 39, 86,211, 11,215,144,112,
-245, 12, 63, 94, 23,136, 67, 55,254,208, 70,111,238,186,186, 44, 94, 43,157,230,123,221,207,215,148,203,233,142, 45, 94, 82,149,
- 80,111,162, 45, 48, 36,127,197,180, 75, 21, 67,179, 91,175,140,242,250, 59,247,157, 89,217,231,214,113,113, 99,107, 77, 59,128,
- 78,164, 12,242,119, 70,251,117,195,158,216, 27,248, 77,107,233,251, 53,245,117, 41, 14, 98,179,179,221,145,234,107, 80,247, 95,
- 66,228, 75, 95,221, 51,167,134,192, 86, 35, 83,223,217, 33,115,190,249, 95, 25,107, 39, 49,177, 30, 88, 96,111, 39, 6,187, 27,
- 88, 42,222,114, 14,206,201,151, 93, 38, 26, 40,234,242, 24, 42,193,106, 43,152, 18, 1,212, 50,170,148,231, 49,113,249, 57, 81,
-146,218, 10,174,156,237,119,231,239, 78, 14, 18,219,237, 42, 83, 98,119,187,238,253, 4,160, 36,222,148,117, 7,103, 28,239,201,
- 59, 88, 35,209,103,205, 26,129,231,238,124, 11,162,217,126, 79,187,163, 23,124,243,227,111,224, 19,138,139, 13,222, 66,107,137,
- 63,252,205, 31,160,148,198,243,243, 47, 56, 12, 61, 18, 34, 86, 79, 59,209, 97, 24,113,187, 94,225,125,168,228, 52,151, 71,239,
-171, 93,225,125,128, 84,186, 38,152,133, 24,178, 63,121,191, 91, 46,210, 7,231,108,165,202,197,196,106,152, 15,242, 24,188,248,
-180, 89, 83,248,181, 19,169,251, 78,189, 32, 92,169,104,219, 8,133, 60, 79, 36,164,212,180, 46, 97, 27,159,128,115,158,209,206,
- 44,231, 50,160,250,154,193,182,117, 2,249,178,233,171, 8, 64, 91,154, 28,238,216,245,177, 65, 29,151,201, 79, 97, 51, 72,169,
- 43,219,225,126,114,213,254,255, 74,137,186,250,104, 71,253,117,117,116,183,150,242, 25,215, 90,254,108, 41, 96, 40,144, 37,230,
- 41, 7,207, 19, 24, 13, 6, 98,187,151, 48,172,237,245, 44,142, 3,149, 39, 48, 30,211, 52, 33,198, 80, 51, 14, 24, 75,144,138,
-103, 39, 3,141,194,199, 97, 68,204, 93,190,115, 14, 33, 4,140,195, 8,173, 53,132, 36, 44, 45, 7, 48, 12, 35,198, 97,160,245,
- 10, 24, 98, 72, 89, 61, 95,232,132, 20,247, 43,165,200, 43, 2, 6,211,153,202, 47,144, 66,192, 40, 67,147, 18, 46,192,165,204,
- 43, 32,149, 89,232,168, 0,148,132,136,101,153,225,203, 72, 61, 37, 24, 77, 83, 60,173,116, 62,220,105,197, 67, 69, 0,242,251,
- 26,234,189,197, 57, 7, 95,116, 1, 62,228,148, 75, 58, 11, 56, 24,122, 99, 32, 25,131, 86,146, 10, 7,173, 9,128,163, 53,148,
- 20, 0,143,112,193,194,217, 25,138, 39, 60, 29, 58,124,115, 60,224,177, 31,112,253,229, 5,235,229,138,135,195, 8,228, 41, 70,
-127, 26,160, 30, 6,120,120,204,231, 11,204, 55,143, 8,215, 27,120, 2,146,117,192,109, 65,180,142,212,251,193, 99,241, 11,116,
- 63, 32,121, 14,255,203, 47,224,154,195, 49, 6, 8,137,248,122, 67,178, 17,209, 3, 63,254,248, 5,156, 27,188,188, 92,240,205,
-199, 15, 24,123,147,247,225, 0,151, 10,231,243, 21,224, 18,151,235, 21, 74, 41,112,193,170,234,252,124,157,225, 60,192, 66,128,
-242, 22,143, 82,224,168, 13,110,183, 25, 93,111,192, 68,194, 60,205, 20,211, 28, 60, 66,140, 13,167, 67, 16,113, 50, 50,220, 60,
-199, 47, 54,179,223, 83,220, 70,215, 37, 65, 43, 33,147,202, 18,175, 42,109,206,183,240,142,138,203,188,251,135,224, 2,185,146,
-206,190,207,128,210,169, 55,209,156,205, 1, 21, 83, 36, 48, 1,167,145, 74, 81, 94,165, 98,183,203,221,125, 77, 27,163, 74, 35,
-255, 93,205, 87,153, 3, 48,212, 36,180,218,137,101, 50, 25,120,193,184,242,221,228, 54, 53,227,106,158, 43,143, 84, 90, 26,196,
-253,238,151,181,211,130,252, 88,211,118,200, 20,212,100, 10,233, 46,180,246,110,199,253,103, 45,105, 44,231,103,167,157,119,188,
- 93, 53,144,100,184,164, 59,221, 9,188,120, 3,173, 64, 34,206, 74, 3,147,160,233, 33,171, 34, 31,178,181,196, 55, 30,133, 80,
-102,190,137, 83,101,205,196,166,106, 47,217,213,249, 90, 40,137, 80,172,250,202,219,192,214,230,181, 76,239, 72, 18, 24,165,180,
-177,106,104,103, 77, 93,151, 42,161, 10, 57, 57,172, 74, 5, 10, 14,177,124, 47,231,129, 39,132,230,103,202, 9, 22,107, 55,125,
-239, 42,104,199,231,228,187,103,100,215, 99,205,116,163,181,235,113,158,115, 2,248, 86, 12,166, 13, 48,196,184,168, 69,100,240,
- 14,255,254,239,254, 22,243,237,130,101,186,225,219,143, 31,224,220,138, 24,232,102,183,206, 43, 98, 32,254,123,201,172,174, 26,
-140,124, 33,115, 38,114,135, 64,196,176,224, 3, 4, 35,230, 54,203,227,113, 41, 57,152, 32,159,188,146, 10, 37,224, 54,100,255,
-112,140, 17, 41, 68,168,172, 28,231, 82,228,180,174,205,181, 32,164,216, 20,255, 57,110,147, 11, 78,212, 48, 73, 8, 86, 33,120,
-245, 99, 11,145, 69,147,172, 32,121,233,218,244,209, 87,133,116, 68,170, 9,103, 33, 6,162, 97, 57,159,209,194,219, 8, 39,230,
-235,186,136,228,182,130, 29,164,227, 72,121, 52, 47,228, 54,105,200, 69, 21,203, 24,211,152, 39, 14,111,249, 1, 60, 79, 54, 66,
- 78, 62,139,187,221,188,200,202,246, 80, 10,165, 70, 88, 26, 34,229,130,103,105, 57,100,142, 90, 45, 9,130,198,232, 10,119, 90,
- 22, 11,187, 58,196, 72,217,239,101, 74,226,115, 51,194,243,228, 96,154,103, 4,231, 32,121, 66,215, 41,116, 90,224,116, 28,113,
- 60, 82,167,222,247, 29,148, 82,152,110, 11,230,121,193, 48,244, 88,237,146, 71,240, 1,211,188, 64,104,218, 85,171,252,188,125,
- 62, 24,237,106,177, 46, 83,222,161,211,227, 85,154, 32, 51, 82, 9,218,221,107, 5, 41, 41, 54,182, 51, 26,189,238,154,162,135,
-196,133,222, 59, 40,173,161,141, 34, 0, 81,103, 42,112,135, 53, 40,112, 89, 38, 45,177,172, 67,136,239, 33,149,130,233, 58, 8,
- 33,161,149,206,159, 19, 15, 33, 56,188,115, 85,159, 33,179,144, 83,230,192,155,226,100,138,206,226,113,232,112,234, 58, 40, 78,
- 77, 89,223,107, 32, 56, 60, 29,143,128,163,180, 68,173, 12, 82,138,152,166, 43, 98,112,248,254,233, 17,255,233,239,255, 30,255,
-240,175,255,130,241,241, 1, 99,215, 65,135,128, 56,205, 8,158,129,153, 1,235,243, 11, 12, 4,210,101, 66,124,189,129, 45, 14,
-108,177,184,124,121,134,246, 12,188, 31,144,192,193,149, 65, 92,110, 72, 97, 69, 24,122,232,161,167,235,207,115,132,217, 34, 76,
- 22,243,117,133, 95, 35,190,124,254,130,111, 62,126,196, 50, 47, 72, 9, 20,241,203, 56,166,121, 6,192, 48,223,230,154,182, 89,
-120, 12,231,219,130, 16, 18,100,138, 16, 49,224,113, 28,193, 66, 68,112, 43, 20,223, 10, 75, 41, 84, 21, 92, 11, 73,247, 64, 23,
- 73,218,189, 88,224,186, 4,138, 1, 59,152,195, 15,228,101,140, 57, 0,128, 85,198, 58, 71,238,172, 74,203, 82, 41,107,251,253,
-120,172, 29,227, 54, 14,163,160,178, 50,102, 79,136, 44,238, 70,173, 49, 6,148, 98,162,138,224,242,190,147, 53, 34,180,162, 52,
-143, 44,100, 14,249, 94, 56, 94,252,188, 49,165, 55,143,109,167,153,103,187,224,214,186, 83, 78,119, 66, 44,198, 80, 97, 60,247,
-132,188,189,230,236, 94,101, 31,247,135,109, 62,236,144,246, 49, 38,205,171,182,251,247,237,144,190,243,213,167, 86,139,157,246,
-118,152,156, 50,151,238,152,230,117,151,206, 25,209,159, 56,175,126,113,214,250,198, 27, 91, 53, 82, 34, 26,108, 33,155,101,146,
- 94, 40,176,141,140, 74,229, 76, 2,188, 20,122,145, 94,135,230,181, 47, 16,140, 86, 8, 87,108,144,229, 53,223,240,177,119, 2,
- 63,214,218, 18, 75, 81,179,253, 79,204,111,124, 76,119,239,197,110, 71,206,106,113, 81,118,166, 27,177, 14, 13, 56,233,253,233,
-196,118, 45,150, 68,210, 22,237,123,175, 79,192, 22, 84,204, 54, 97, 29,178,194, 56,178, 4,134,152,147,247, 18,254,240,251,223,
-225,122, 57,211,104, 14,192,233,116,192,178,206,208, 90, 83,237,200, 57,172,115,164, 14, 22, 57,178,182,218,182, 4,141,221, 66,
-132, 80,162, 22, 61, 5,243, 42, 21, 37,254,113,193, 41, 81, 47, 39, 76, 21,176, 18,141,245,177,227,173,151,175, 66,156,107,189,
-222,101,188, 93, 60,223, 33,209,138,140,246,185,177,134,144,132, 16,176, 44, 11,233, 1, 66,192,178,174,181,203,246,222, 55, 19,
-133,184,165, 3,102, 52,108, 33,155,165,252, 60,200, 6, 23,191,226, 88, 96,217,243,206, 16,163,191,243,195, 16,210, 85,137, 34,
-180,162, 67, 98, 19,194,198, 76,109,204,214,221,244,150, 48,183,125,166,238,175, 45,177,225,144, 99,128,148,148, 56,214,117, 10,
- 90, 82,198,182,148,116,160, 25,173,161,132,196, 97, 28, 97,140,201, 97, 44, 60,107, 31,120,101,228, 35,209, 14,190, 51, 26, 70,
- 75,244,125,135, 97,232, 96,122,141,152, 40,178, 54,166, 4, 99, 58,138,111,133, 64, 76, 17, 74, 11, 28, 14, 3, 86,187,162, 31,
-122,204,203,140,105,186,210, 65,157,155, 21,202,184,183,248,240,244,152, 9,112, 2,195, 48, 82, 6, 60, 35,129,101, 65, 22,120,
-151,211,244,154, 66,177, 51, 93, 93,117, 48,206,208,117, 29, 21,104,193,195,121, 7,187,174,213, 50,168,141,105, 86, 82, 28, 41,
- 36,132,136, 92, 48,162,250,236,121, 46,250,104, 37,146, 54,140,113,158, 0,109,201,118,165, 80,102, 4,164, 97, 9, 41,121, 24,
- 33,240,215,191,251, 29,144, 2,166,117,129,139,100,193,156,174,183, 92, 64, 11, 88, 31,225,124,128,233, 12, 62,124,252,128,231,
- 47,159,112,155, 39,124,190, 78,208,166, 7,124,196,111, 30,159, 96,184, 4,227, 10,126, 90,193,124, 64,184, 46,224,137, 35, 44,
- 14, 10, 2,112, 17,183,231, 51,226,109, 5,143,192, 50,175, 20,194,195, 3,212,177,135,139,180, 94, 72,214,194, 45, 1,176, 1,
-243,207,207,208,188,199,229,229,134,105, 90,208, 13, 61,126,121,254,130,241,112, 64, 74,156,220, 46, 92,224,245,245,156,115, 31,
-202,109,159,225, 48,142,152, 87, 7,239, 35,122, 37,192,189,199,168, 52,252, 50,131,167, 8,165, 41,131,157,138,213,152,175,245,
- 60,233, 74, 64, 4,135,243, 9,171, 75, 88, 60, 53,190,212,169, 55,135,122, 9, 45,217,236, 72,172, 65,176,110, 68,176,221, 81,
-213, 28,170,169, 5,170,182, 9, 90, 41,108,227,241, 60, 90,217,163,101, 0, 81, 63, 66,108,103,215, 34,188, 96,115,184,221, 67,
- 67, 50,187,155,186, 79,254,118, 79,219,144,106,121,217,113, 51,142,247,220, 74,239, 81,109,217,206,183,221, 10,237,246,194,172,
-214, 15,191,183,214,225,174,187, 78,119,226,190,253,247,139, 58,127,255,179,241,206, 29,176, 23, 6,182,121,247,101,158, 93, 87,
- 38,117,172,135, 38,107,190, 21,234,109,175, 77,219, 93,111,175,109, 89,130, 11, 48, 33, 51, 99, 62,143,240,203, 99,102, 13,174,
- 38,165, 93, 22, 58,231, 69,152,149, 26, 37, 58,175, 57, 2,245, 49, 52, 73,121,219, 53,215,196,129,178,141,225, 94,127, 54,189,
- 53, 58, 50,126,119,237,166, 18,187,139, 59,109,198,251,182, 55,158,215, 18,140,109, 44,129, 54,117,142,109,115,235, 77,195,192,
- 83, 19, 6,180,173,123,106,244,109,136,248,155, 63,252, 53,142,135, 3,110,183, 11, 24, 79,248,253,239,190,199,183,191,249, 45,
-172,181,152,215, 21,171,119, 20,230,226, 86,244,125, 7,239, 45,237, 58,149,198,188,172,136, 89, 53, 94,120,236,164,244,166,137,
-147, 50,134,172, 83,193,109,233,122, 89,208, 19, 66,160,157,101, 86, 59, 23,149, 54, 69,144, 18, 28,132,160, 46,161, 30,184,180,
- 95,166,131,222, 90, 11,231, 72, 73,205,193,105,156,234,233,239,177,206, 17,243, 60,211,210,202,110,254,126,250,180,121,177,243,
-168,159,109,136,225,132,180, 99,155,223,255,108,241,110,111,197, 62,169,200,137,246, 70, 72, 94,169,100, 62,172,182, 42, 48,198,
- 64, 74,172, 6,237,204,114,197, 88,126,103,137,232,221,236,115, 84, 8, 73,158,167, 2,249, 49,107, 45, 41,124, 36, 69,112, 70,
- 19,205,227,113,128, 49, 10,198, 24,116, 93, 15,100, 33,154,247, 30, 90, 75, 60, 62,158, 48,244, 29, 66,240,248,230,219, 71, 72,
-201, 48,244, 26,167,211,128, 97,208, 56, 12,116,152, 31, 14, 35,249,223,179,170,124,154, 23,204,243,138,235,245,138,195,241, 1,
- 66, 48,132,232,160,141, 68, 63,208,168,220,174, 22,227, 48,208,212,195, 19,130,215,152, 14,227,120, 64, 76, 1,151,243, 11, 14,
-199, 17, 12, 60, 11,217,168, 59,150, 74,214,233, 68, 8, 1, 34,139,215,202, 61, 56,165,132,195,225, 0,153,177,175, 92,108,227,
-249, 18, 12,195,242,207,148,223,105,140,174,193, 58,148,171, 78,100, 59, 10,240, 33, 6,252, 50, 47,176,203,138,148, 72, 20, 40,
- 53,137, 5,133,216, 50, 50,170,197,146, 6,170,181, 33,244,206,227,229,229, 5,145,113,248,148,224, 35,224, 92,130,117,129, 4,
-107,130,147,136,207, 7,216,117,197,124,155, 17,144, 48,199,132, 47,207, 11,146, 87, 64,224, 88, 47, 55,196,213,194, 36, 14, 1,
-160, 63, 28, 33,181, 6,180,134, 84, 26,203,188,226,246,114,129,228, 10, 82, 27,168,135, 7,136, 78,129,249, 8,255,242, 74,220,
-135, 0,168,174, 67,178, 43,228,225, 8,251,233, 25,183,127,251, 2, 4,137, 63,253,248, 5,243,234,112, 60,157,240,242,250, 74,
- 41,125,222, 35,250, 8,231, 61,172, 11,240,137, 17,245, 17, 12, 90, 41,184,101, 69, 55,140,248,244,229, 11, 30,134, 30,194, 59,
-244,156, 67, 38, 10,127,225, 82,192, 6, 58,212,157,181, 57,187, 33, 79,197, 25,173, 35, 87, 27,224, 66,132, 13,148, 22, 41, 14,
-102,108, 14,117,250, 64,240, 26,194,177,193, 58, 91,182,121,218, 9,168,210, 78,208, 86, 59,235,114, 32,148,195,152,189, 99, 55,
-111,104,167,180,187,228,187,191, 43,229,155,100, 44,129, 27,173,112, 46,135, 77,180, 86,173,132,237,240,143,109, 55, 91,200,164,
-216, 43,219,217, 29,130,245,237,161, 94,186,209,182, 83, 46,234,232, 61,133,108, 75, 26,139,123, 93, 0,246, 66,172, 90,244,220,
-125, 47,101,143,102,220, 37,149,165,170, 63,168,127, 31,218, 84,179, 80, 11,139,216,174,223,155,195,135, 11,190,141, 85,249, 59,
- 7,214, 93, 7, 90, 15,191, 18, 18,145, 82,115,168, 19, 14,147, 18,151, 0,164,112, 23,203,155,106,102, 64,155,251,179,197, 61,
-166, 93,151,190,105, 56, 74,215,203,114, 1,194,118,186,137,141, 19,191,219,150,103, 4,192,157,189,178, 81,174, 55, 77, 95, 67,
- 84, 75, 77,176, 5,118, 62,231,150,204,197,119, 99,246,253,129, 94,159, 79, 11, 83,105, 74, 17,222, 88,250, 56, 24, 88,164,221,
-246,245,124,129,146, 2,171, 93, 49,205, 87,252,252,233,103,124,250,249, 51,110,243, 12,166, 36, 86,239,129,108,115, 75, 89, 35,
-226, 92,192, 52, 45, 80, 90,195,102,225,147,115,142, 98, 98,243,126,178,236, 51, 67, 22, 23,145,176, 44,102, 11, 76,170,126,240,
-152,232,123, 59,103, 8, 47,211,143, 28,149, 26, 66, 77, 18, 36, 65, 78,202,211, 2, 26,173, 22,149,124, 8,212, 81,242,172,228,
- 47,153,222,101, 47, 95, 10,202, 86, 96, 86,110,222,177,137,190, 5, 40,244,132, 68,100,226, 77,129,181,177,244, 75,138, 32, 50,
-219,220, 83, 88, 12,103, 91, 20,111,126,254,228,139, 14, 53,180,164, 8,217,106,151,147,245, 59,219,250,140,174,137,224, 55,116,
- 44,217,172, 24, 14,135, 49, 99, 85, 25, 78,135, 17,199,227,136,135,227, 1,130, 3, 74,114,216,117, 1, 18,195,151,207,191, 96,
-186,205, 85,236,229,236,130,121,154, 16, 67,192,233, 56, 98, 89,103,112, 66,233, 65, 73, 6,173, 21, 56,163,199, 81, 92, 7, 69,
-203,160, 85, 71,221,181, 84,120,126,126, 65, 63, 24, 76,211,132,148, 8, 64,212,247, 67, 38,184, 37,244, 29,169,168, 99, 32,150,
- 64,223,245,232,187, 46,175, 45, 19,198,161, 39, 14, 63, 18,148, 34,203, 26,237,239,121,181,227, 21, 85,188,119,182,190,191, 82,
- 81,209,100,173,197,178,204,208, 70, 99, 28,135,188,215,167,204, 2,109, 52, 21, 28, 89, 84, 41,165,162, 34, 75,138, 74, 49, 12,
- 72, 57,132,136,194,114,188,115,176,214,214,144,160, 66, 79, 44,126,118, 42,164,242,244,143,151,220,240,132,197, 58,172,214, 35,
- 50,202, 93, 16, 82,215,105,145,143, 33,175, 54,128,161, 31, 97,116,135,190,239, 96, 67,128,247, 28,214, 70, 12, 67,143,195,208,
-225,122,123,197,249,250, 74,122,138,224,113,190,156,241,249,243,103, 92,206, 87,192, 83,240, 77, 55,142,232,143, 39,204,211, 13,
-221,227, 35,248,233,144, 53, 7, 1,246,182, 66,105, 1, 4,138, 76, 78, 63,190,192,189, 44,248,252,233, 21,159, 62,189,226, 50,
- 45, 96, 82,225,120, 58, 82,145,189, 56, 76,215, 43,110,211, 10,101, 70,204,214,194,121, 90, 89,117, 74, 3,193, 67,247, 29,214,
-117,193,177,239,192,157,135, 97, 12,134, 17,220, 75,114,134,152, 40,226, 89, 9, 89, 63, 35,229,254,182,186, 8, 23, 0,231, 35,
-124, 17,191,214, 67,157,197, 55,204,245,214,214,134,156, 44,150,129,115, 53, 15, 59,229, 88,202, 18, 85,153,216, 94, 69,156,106,
-184, 74,122,183, 45, 46, 55,150, 18,232,144, 88,177,191, 53,211, 0,150,238, 24,239, 27, 32, 36,177,150,195, 94,163,215,235,252,
-140,181, 65, 42,216,110,200,104, 71,239,205,191,179, 76, 73,219,175,184, 55,216, 73, 42, 38,243,124, 63,136,119,144,158, 54, 47,
-188,174,197,155,215,170, 21,242,181,197, 64,108,254, 91,186, 83,182,239,159, 91,188,243,228,163,118,102, 40, 19,139,156,242,182,
- 9,229,242, 78,189, 30,172,123, 78, 61, 26,218, 93, 35,158,104, 44,135,133,129, 94,130, 32, 8,114,145, 16,155, 36, 63,182, 83,
-187,139,230, 49,180,133, 91,233,208,217, 78, 84,214,190, 15,236,173,189,173,104, 21, 90,162, 94, 76,149,245,207,246,188,214, 55,
-157,248, 27,119,194, 87,172,132,237,122,162, 22, 32,119, 93,122,187,171,225,121,222,196,242,206,187, 20,132,244,213, 4,111, 36,
- 42,148,151,117, 65,136, 30,143, 79, 15, 56,156, 70,252,242,229, 25,183,105,193,151,231,103,112, 37, 33,181,130,143, 1, 15, 15,
- 15,152,174, 55, 72, 73,163, 55,206, 5,156,117, 96,160, 61, 36,203,216,211, 54,244, 4, 41,213,236,109, 6,150,133,114, 12,214,
-121,164, 72,113,164, 33,199,183, 22,203, 90,202, 63, 3,208, 4,160,122,194, 27, 37,124,193,178,106,165,106, 23,234,131,207, 1,
- 65,212, 5,202,188,127, 13, 25,223,122,223,157,151,101, 83,113, 9, 20, 49, 98,153, 6, 72,165,118, 69, 64, 89, 15,180, 19, 46,
-138, 17, 70, 94, 11,133,170, 52,151, 66, 34,100,161, 86, 27,177, 74,113,167, 91, 84,106,235,121,175,154,141,148,170, 54, 32,165,
- 88, 11,136,195,225,128,161,239,160, 36,240,240,112,192,241, 52,146,159,220, 89, 58, 60, 57,199,227,233, 17,211,116,197,178,204,
- 88, 23,135, 16,136,141,158,114,134,124,200,138,247,206, 24,164, 72,182,182,174,163,131, 49,132,128,215,151, 51, 46,151, 9,235,
-106,243,148,130,213,231,180,174, 14,231,243, 5,175, 47, 23,226, 8,164,136,167, 15, 15, 72,113, 11,186,209,170, 35, 7, 69, 71,
-123,119,107, 87,104,101,112,189, 94, 49, 12, 29,180, 86,232,123, 3,198,128,167,199, 39,104, 67,157, 53,141,247, 29,150,101,161,
- 9,107,134,220,108, 32, 42, 58,104,215,117,134,115, 14,125,223,213,247,211, 59,135,174,235,201,206, 42, 68, 93,105, 80,216,148,
-168,156, 1,206, 24,148, 84, 89, 55,225,234, 20, 38,134, 64, 43,135, 78,215,247,155,138,149,141,105,193, 57,135, 96, 91,147,195,
-165,132, 11,100,135, 19,146,146,222, 74,161,169, 36, 69,149,250, 68, 49,183, 82, 8,172,203, 76,194,214, 72,194, 82,199, 24,110,
-118,194,199,143, 15, 80, 50,226,155,111, 30,113,124, 60,226,199, 95, 62,227,227,227, 9,227,227, 9, 31,190,251, 13, 62,252,238,
- 59, 72, 45,208,141, 61,120, 39, 33,250,236, 89,121, 0, 0, 32, 0, 73, 68, 65, 84,159, 14,176,203,132,100, 45,160, 36,248,113,
- 0, 55, 6,230,233,137,214, 73,211, 4,246, 58,195,254,116,193, 79,255,244, 39, 68,175,112,190,173,176,129,225,227,183, 31,209,
-245, 29,120, 2,122,109,112, 60, 30, 17,144,240,203,249,130,217, 18, 40, 72,107,133,193,104,116, 70, 33, 34, 66,106,137, 81,105,
-196,121,129,140, 9, 60, 70, 26,191, 11, 18,219, 82,230, 3,175, 43,138, 16, 3, 66, 2,156,245, 0, 4, 86, 23,234,154, 84, 28,
-187,195, 15, 85,177,157, 15,140,234,167,110,226, 49,219,208,149, 88, 58,251, 20,247, 35,241,102,247, 92, 58,163, 54,213,109, 71,
-120,107, 83,179,138,229, 88, 20,229,248, 62, 98, 51,167,114,224,190,183,109,211,224,182, 67,146,189,139,142, 45,187,213,162,188,
-141, 95,163,210,230, 15,123, 59, 6, 79,105,163,174,109, 0,153,124,179,105,145,145,119, 67,255,123, 11,220, 27, 97, 92,162,209,
-103, 42,157, 89, 22, 25, 33,197, 55, 73,114, 89,125, 87, 31, 35,107,118,236,213, 67,222, 20, 84,188, 57,212, 75,167, 89, 71,226,
-104,211,234, 54, 6, 61, 43,130,188,102, 10, 18,179,223, 22, 77,226, 19, 23,172,250,182, 73, 13,158,247,184,205,142, 94,148,238,
-117, 71,150, 75,216,194,130,240, 6,218, 82,158, 85,235,157,223,210, 89,138,255, 63,219,222, 83,249,147,216, 95,131,172,112,173,
-179,229,163,198,222,226,206, 17,143, 55,154, 9,214, 10,233, 83,172, 55,255,247,108,139,162,142,254,155,206, 29,172, 10,236,202,
-152,184, 20,147, 41,239,243,173,179, 24,134, 30,195, 56,192,122,143,213,122,220,150, 25,214, 57,244,227, 64, 29, 4, 72,137,108,
-237, 10,239, 2,140,238, 16,125, 66,244, 1, 70, 43, 82, 41,231, 27, 43,165,176,113, 24,109,160,148,204,156,237,124, 40,166,108,
-181,203,187, 86,153,105,111,165,155, 46,215,161,202,153,204, 45, 57,173,125,174, 69, 52, 86, 70,243, 59, 7, 72,181,175,249,154,
-236,214,142,208, 75,158,248, 86, 32,209, 11,237,202,168,255,174, 88, 98,237, 24,182, 17,202, 85,181,121,113, 38, 36, 18,199, 5,
- 79,182, 63,198, 57, 69,166,230,105, 67,209,237,208, 88,158,231, 93, 46,125,191, 20,156,200,157,236,241,120, 36,223,181,148,208,
- 90,195, 57, 7,187,206,208, 26, 89,239, 18,144, 66,192,178, 46,176,214,193,173, 30,222, 5,116, 67,151,167, 23, 2, 74,105,148,
-193, 33,231, 28,227, 56, 96, 28, 7, 40, 69, 81,183,243, 60,227,122,187,225,122,189,129,115,137,227,225, 8,100,176,200,106, 45,
-230,121,169,135,124,202,202,186,211,233,136,126,232, 97, 58, 67,214, 49,163,241,250,122,193,245, 50,225,122,189,225,114,185, 32,
-198,132,174, 51, 56, 29,143,152,151,149, 64, 48, 82, 64,202,220,197,122, 82,189, 75,197, 49,140,244, 92,149,146, 52, 2,207,209,
-206,125,223,215,200, 89,235, 44,214,117,197, 48,142,132, 47, 46, 68,184,224,115,225, 72,215,116,140,113,135,128,166,194, 79, 67,
- 74, 65,247,178, 70, 47, 37, 4,175,223, 67, 12, 16,156, 85,146,159, 86,186,210,229, 82,136,112,222, 98,181,164,209,224,121,213,
-103,186,142,174,225, 92, 80,153,174,163,226,148, 37,208,244, 62, 11, 58, 25, 96,164, 64, 47, 57,140,208,176,158,225, 22, 2,174,
-217, 55,175, 33,112,254,114,198,116,243, 16,170,199, 52,189, 96, 56,244,232, 79, 71,128, 69,240, 78, 64,140, 10,120,232,129, 78,
-128, 73, 14,149, 40, 94, 55,165, 0,161, 21,216,227, 17, 97,165,131, 55,158, 23,196,151, 5, 95,254,248, 5,183, 57,226,243,243,
- 13, 95, 94, 94,241,241, 55, 31, 33,133,192,229,229, 5,118, 89,176,216, 5, 17, 12,183,101,133,212, 6,222, 90, 24, 37,241,112,
- 28, 96, 20,195,241, 52,194,219, 21,167,174,135,189,220, 0,235,160, 57,135, 98, 32,198,125, 74, 80, 90,110,121, 5,121, 42, 29,
- 98,130,115, 17, 62,146,144, 19,137,156, 39,226,216,209, 78,189,116,147,187,155,215,174,211,105,101, 41,219,142, 23,173,237,138,
-229,195,175,222,196,121, 77, 60, 3,139,251, 3,141, 97, 7,238,168,138,250,178,131,207,195,116,236,144,157,252,206,190,116,151,
-217, 13,246,134,202,182, 11,100,169,194,187,134,120,122, 23,200, 81,179,198,106, 46,119,172,143,125, 27,245,230,195,188,245,133,
-183,157, 93, 94,236,126, 13, 44,147,170,136, 46,110,163,214,114,104, 55, 7,118,205, 67,206,177,153,155, 33, 31,155,164, 63,191,
- 74,184,179,100,109, 54, 31,182,165, 36,177,237,139,229,111, 38,182,141, 72, 69, 51, 6,223, 91, 8, 55, 55, 2, 9, 91,178,119,
-155,109,104,213,186,199, 78,155,143,187,190, 78, 91,235,221,148, 64,237,132, 36,213,241,108,125,149, 89,187,174,168, 17, 42,185,
-192,219,124,214,117,232,205,210,246, 24,170,213,141,109,182,189,186, 70,122, 11, 15, 66, 51,189,216,174,174,180, 61,183,247, 44,
-127,249,253,103,251,192,223,237, 49, 49,142, 54,183, 26,141, 47,250,182, 76, 88,157,197,229,122,131,143, 41, 19,230, 60,186,174,
- 71,138, 17,135,126,192,249,245,181,170,188,133,144, 88,230,181,241,147,251, 58,146, 38,171, 89,190,241, 58,159,115,203,105,132,
-234, 67,200,112,154, 92,172,139,125,190,248,142,101,192,249, 91,113, 90, 83, 28, 10, 41,119,197, 83, 29,177,223,113, 17, 90, 27,
-154,111, 4,119,101,180, 92,186, 9, 31,222,186, 16,238,201,111,251,128,148,118, 93, 70, 0, 28,165, 37,237,117, 25,133, 13,113,
- 48,132,124,104, 72,193,193, 16,161,165,192, 56,244,121,236, 45, 32, 56,240,248,240, 8,165,201, 87,221,117, 6,235,178,224,112,
- 56,128, 51,134,101, 89,168,235,213, 10,166, 83, 52, 38, 53, 6, 93,223, 81,216, 14, 35,181,184, 82, 26,183,233,134, 97, 24, 43,
-169, 77,155, 60,113,200, 14,162,121, 89, 72,225, 31, 60,156, 15,217,206, 22,225,125,192,106, 29,132,208,121,132, 45,234,253,171,
-188, 22, 93,215, 85, 63,119,136, 30,211,116, 35,223,185, 16,240, 46,228, 0, 25, 6,235, 44,137, 28,125,128, 54,166, 50, 15,180,
- 86,208, 90,214,140, 9,114, 20,184, 26,143, 90, 98, 96, 9, 24, 19, 42,170, 86, 8, 81, 11, 27,165,116,165, 9, 74, 41,177, 44,
- 11, 56, 56,156,243,217,107, 79,112,161, 50,225, 64, 76,228,230, 72, 84,128, 50,144,104, 78,100,194, 93,175, 21,116,198, 15,167,
- 12, 4,138,165, 88, 8,161, 10,140,171,243, 35, 11,118,189,243,121,218,184, 23,169, 10,206,137,203, 32,200,118, 39, 0, 48,111,
-233, 43, 6, 40,163,193,148,160,113,119, 98, 48, 92, 65, 66, 98,190,173, 48,166,199, 56, 40,172,211,132, 94, 73, 72,197,193, 53,
- 7, 27, 20, 88, 39,193, 58, 77, 29,255,180,130, 37, 6,111, 23,232,135, 3, 96, 20,156, 15,224,215, 27,226,121, 2,174, 30,151,
-231, 9,231,179,197,101,114,112, 96,144, 70,161, 55, 6,201, 57,178,180,102, 1, 57,152,128,209,134,238,193, 41,224,219, 15, 39,
- 28, 6,133,195,208, 1,206,131, 45, 14,105,182,208,224,136,222,129,165, 64,255, 45,133,204, 81,192, 46,241,212,135,136, 16, 25,
-172,219, 26, 47,206, 0,113,234,143, 63,160, 10,107,194, 27,175, 58,223,145,178,178, 32,139,181, 7,122,170,170,241,150, 35, 94,
- 15,244,148,119, 88, 44,222,141,211,154,241,111,106, 44,202,121,150,188,211,165,215, 34, 67,160,193,184,236,110,163, 72,251, 3,
-124,207, 64,111,124,206, 13, 58,181, 29, 97,151,137, 58,223,128,224,155, 56,142,165, 55,133, 77,189,245,199, 38,122, 54, 53,177,
-161,108,223,249,191, 79,177, 79,191, 26,132,211, 10,233, 98,131, 66,221,137,226,216,214,229,166,187, 29,177,200,185,222, 34, 31,
-182,133,244, 89, 87, 29,205,142,185,218,182, 26,205, 68, 74,219,161, 94, 71, 59, 89, 36, 87,236,113, 60,241, 60, 10,223,122,109,
-158, 45,101,101,156, 87,112,175, 41,103,132,151,228,179,237, 45, 44,111, 62,223, 45, 89,202,228,104,191, 42,105, 86, 41,217,174,
-181,201,248, 27,187, 94,190,246,154, 56,119,108,239,240,254, 32,106,135, 40,247,246,181,175, 29,234,188, 81,189,227, 45,202,126,
-119,221,130,165,157, 69, 12, 96, 88, 87,135,144, 34,186,174,195,233,116, 2, 18,129, 65,190,255,237,111, 17,188,199,249,124,174,
- 55,112, 58, 24, 98,189, 14, 66,238, 64,153, 16, 20, 82, 34, 5,249, 87,243,205,185,140,157,183,247,120, 91,164,113,193,119,152,
-213, 16, 66, 25,239, 84,200,203, 22, 20,148, 31,127,201, 53, 23, 60,239,175,195, 27, 70,196, 70, 76,219, 91,209,218,174,191,126,
- 54, 50,144,170, 29,183,239, 96, 85, 49,238, 72,110, 85,160,154, 10, 41,142,110,114,130,211,151,204, 98, 57,206, 25,140, 81, 56,
- 30, 14,212,177, 25, 13,163, 54,253,135, 81,146,208,187,118,133,233, 12, 18, 18,214,133,172, 70,183,219, 13,183,219,156,195, 88,
-178,104, 48,145,240, 72, 10,158,133,133, 34,219,195,232,223, 11,129,163,235, 58,172,118,174,116,181, 24, 73,128,150,192, 96,221,
- 10, 38, 4,180,209, 96,156, 67,107, 3,109, 12,180, 54,144, 66,213, 93,127,103,250, 45, 65, 46, 4, 56,103,225, 61,145,199,128,
-173, 43,118,206, 81, 66, 94,158,174,132,224,234,199,231,252,122, 70,223, 15, 80, 90, 97, 93, 23,114, 79,112, 14,231,104, 53, 65,
- 83, 24, 2,224, 24, 99,178,239, 60,145, 37,146, 49, 24,211, 17,110, 53, 79,129,236,106, 43,154,155,162,119,137,147, 16,156,175,
-211,142, 16, 28, 98, 36,139, 36,103,156,138,169,140,127, 13, 33,192, 89, 11,164, 68, 99,228,130,224,174, 33, 60, 60,103, 19,208,
-115,230,249,179,166, 58,178,222, 49,148,137,211,182, 42, 41,169,126, 62,147, 12, 25, 56,148,210,244,251, 24, 32, 82,192, 95,125,
-247, 13,254,203,127,254, 27,252,199,191,253, 30,235,124,197,116, 62, 67, 9,137,167, 15, 79,240, 97, 69,215,113,112, 30,240,211,
-207,159,112, 58,156,208, 73,129,206, 8,240, 65, 3,189, 6,250,142, 4,193, 66, 32, 46, 19,221,105, 66, 64,136, 30,105,232,193,
- 36, 67,252,233, 19,196,151, 27,190,252,203, 39, 92,206, 11,158,207, 11,102, 7, 68, 78,154, 2, 45, 57, 68,140,144,156, 97, 94,
- 38,112, 38, 97,164,130, 18, 18,154, 51, 68,183,226,183,223, 62,162,239, 4, 12,103,192,188, 98,125,185,130,187, 8,158,128, 24,
- 61, 56, 75,208,138,230,150, 33,250, 93, 19, 28, 19,145, 62,125,100,240,158, 98,130, 19, 34, 88, 2,228, 94,212,245, 14, 67,188,
- 42,199,202, 12, 62,237,168,111, 91, 7,148,234,161, 95, 15,247, 42, 26,219, 98, 8,223,114,216,211, 22,180, 93,245, 97,105,199,
- 81,111, 71,227, 37, 31,187,113, 59,109,130,215,152, 26,140, 76, 3,193,201,225, 5, 49, 67,112,216,166,241,207,172,247, 84,147,
-151,182, 45, 53,175, 22,156,125,150, 76,218, 30, 87, 34, 5,226, 86, 24, 52, 25,219,129, 85,181, 54,227, 77,218, 93,218,254,158,
-214,138, 70,130,165,244, 14, 77, 47,251,235,219, 9, 66,177, 90, 97,191,251,103,181, 35, 47,188,186,152,237,137,251,243,147, 62,
- 72,141,141,239,254,125, 96,251,215,177, 45,196,138, 88,240,189, 92,118,220,105, 9,218,139, 16,185,168,192,238,117,222, 94, 82,
-126,207,104,111, 10,191,212,234, 40,210, 86,197,211, 24, 62,110, 33, 57,173, 55,177,229,207,191,113,222,163,190,239,237,164,105,
-123,142,155,194,177,133,179,212, 14, 61,195,247, 55,247,195, 94,117,189,255,104,108,213, 98,181,130,165, 4,163, 52,156, 13, 88,
-173, 69, 76,180, 11,214, 74, 67, 73, 13, 37, 21,158,158,158, 16, 99,196, 45, 78, 88,214,149,144,160, 57,107, 61,242,132,196, 19,
-124,116,224,156,110,214,215,219,149, 14,243, 16, 32,178, 18,217,135, 64,123, 73,198,128, 16,193, 56, 3, 79, 34, 39,137,169, 13,
- 26, 34, 40, 0,164,112,206,185, 16,121,175,238,160, 21,237, 48,131, 39,234, 88, 76, 33,171,155,211, 62,237,173,133, 77,101,113,
- 37,227,228,187,217,178,207,105, 92, 95,144,173, 5,196,194,235,247, 54,125, 0,109, 43, 66,102,152,199,236,131,231,208, 90,162,
-211,100, 15,243,142,172, 98, 12,172,122,219, 59, 99, 32, 25,135,207,129, 59,133, 84,198,177, 17,209,180,214,148,155,238, 45, 89,
-131,162,167,223,207, 25, 92,142,139,237,187, 30, 66, 73,112,150,234,148,228, 48, 14,224,140,225,249,249,153, 88, 13, 66, 82, 16,
-135, 34,214, 57, 3,131,148, 10,206, 5,172,171,133,226, 2, 76,208,127, 3, 79,208, 76, 1,160,209,243,243,203, 5, 82, 72, 60,
- 61,156, 32, 56, 69,153,114, 36, 60,158,142, 8, 49, 63,102,193,209,117, 26, 62, 58,196,224, 97,114, 26,154,247, 49, 31,238,137,
- 34,145,179,160,112, 60, 28,176, 44, 11, 14,199,177,242,232,165,214, 56, 28, 71,164,152,224,156, 5, 0,220,110, 55,218,185,119,
- 61, 20,231, 88,115,209, 45,132,168,193, 51, 74, 18,182, 54, 6, 71,105,128, 41,161,211,134, 10,120,206,176,174, 11,137, 21, 21,
-225, 85,231,105, 38,232,140,228,121,138,197, 96,164, 2,148,106, 38,119,244, 81, 8,153, 85,192, 56, 77, 52, 68,158, 0,150,181,
-175,200,130,176,232, 40,152, 40,177,108,173,245, 0,178, 96, 50, 70,218,215, 43, 67,175,251, 96, 6, 72,120,132,217, 34,121,139,
- 14, 30,127,245, 96,240,219,255,245,191,224,255,184, 89,252,219,151, 87,188, 92,111,120,236, 13, 34,179,208,131,134,157, 7,252,
-248,211, 23, 60,116, 26, 66, 68,244, 60, 65, 49,138, 26, 22, 93, 79, 66,191, 65, 67,235, 30,233,124,129, 8, 9,108,114, 96,186,
-135,139, 2,235,203,132,215, 47,175,232,204, 35, 86,119,133,245, 30, 62, 37,124,250,252, 25,211,237,138,158, 11, 60, 29,142, 24,
-198, 35,220,234,225,108, 32,250,157, 25, 33,146,197,116,126,197,191,251, 79,255, 1,201, 58,252,183,127,248,127,112,236, 14,185,
-105,102,228,111, 15,235,230, 18,137,212,241, 23,253,113,200,205, 86,209,196,148, 40,104, 33, 57,196,177,127,252, 33, 86,207,116,
-220,241,142,203,156, 99, 15,155,217,186,244, 34, 96, 97,111,218,148,205, 95,158, 50,188,229,215,209,230,169,221, 30,211,223,199,
- 43, 85,124,167,112,142,101, 50,144, 15,130, 66, 49,219,241,218, 75,119,213,162, 93,171,119,187,236,123,169,183,229, 41,213,174,
-171,252,179, 29,137, 49, 11,255, 26, 9, 88,126, 29, 8,118,147,119,243,237, 86,160,216,188, 16, 27, 91, 90,218,201,225,139,109,
- 35, 84, 64, 14,171,129, 38, 85,110,198,232, 72, 46,196,244,152,117, 0, 5, 4,195,154,160,114,150,154,217, 69, 74,144, 44, 87,
-173, 60,131, 81,184,216, 40, 89,173,176,141,241,237,144, 44,107,147,234,185, 70,221, 75,199, 72,251, 27,145,147,154,138,151, 84,
-228, 17,115, 44,124,131,212,236,211,219, 2,174,236,246, 43,169,112,147,254,241, 92, 97,111,226,180, 70, 52, 87, 44, 79,229, 57,
-163,137,154, 44,169, 83,156,109,196,186,252, 26,166,152,182,199,144, 11,160,182, 56,100, 89, 17,206, 26, 22, 2,231,108,159, 1,
- 0, 65, 55,238, 76, 80, 75, 25,140,195,179,118,128,241,205, 13,194,218,189, 70,177, 19,178, 6, 66,179,155, 46,176,220,117,136,
-205, 74,200, 68, 62, 80, 3,110,211, 13, 9, 30,140, 71, 60, 62, 28, 96,164, 6,151, 9, 93,111,208,229,195,227,233,195, 1,131,
- 76,224,206, 65, 49, 78, 52,172, 20, 33,141, 65,168, 69,122, 66,140, 46,199,158,110, 69,146,224, 89,108,151,195,113,136, 99, 32,
-234,206, 92, 74, 9,169,117, 22,195,145,112, 43,102,145, 19,103,155, 18, 86,112,133, 88, 14,236, 24,179,111,150, 62,155, 82,171,
-250,122, 10, 33,107,254,118, 9,131, 81, 66, 80,144, 75,126,125, 4, 3,180, 96, 80, 28,208,146, 68, 65, 70, 73,244, 70,225, 56,
- 24, 60, 30,122, 60,157, 6,156, 70,133, 99,175,240,116, 28, 96,180,132, 96, 17,189, 20,144, 44, 65, 32,192, 8, 6,197, 18,180,
-228,136, 33,192, 40,149,149,223, 52,194,245, 33,212,247,108, 90, 87,128,243, 28, 27,154,111,162,121, 76,106,140,198, 97, 60, 32,
-186,128,243,235, 43,214,117,133, 18, 2,206, 90, 60, 60, 62, 0,137,225,229,245, 12, 31,128,219,117, 69,215,245, 88, 87,135,105,
-162,131, 78, 42,242,177, 15,163,193,233,116,204,191, 95,192,104, 66,158, 74,193,208, 25,133,199,211, 9, 66, 50, 48, 22, 33, 4,
-195,225, 48,160,235, 13,164,150, 80, 70,130, 11,186,207, 10,150, 96, 58,133,190,239,192, 24, 42, 3,158, 64, 48,153,233,238,168,
-216, 34,188,176,133,214, 10,183,235, 21,214,174,164,168, 23, 58, 23,141, 18,118, 93, 48,223,110, 52,217,208, 58,227,119, 3,180,
- 18, 80, 66,224,122, 57, 35,120, 79, 93,165, 18, 48, 90,131,165,132, 24, 2,250,174,203,142, 11, 79,190,105,162, 83,229, 17, 53,
-133,196, 20,213,174,119, 84,140,120,183, 66,102,145,151,181, 43, 1,157,144,104,171,233, 82, 93,173,196,204,201, 63, 14, 35,156,
- 91,145, 98, 64, 8,142,178,197,179, 48, 86, 73,131, 16, 34, 58, 99, 16,220,138,190,147,232,164,132, 74, 9, 7, 41,240, 96, 36,
-140,240,248,254, 97,192,167,127,250, 39, 28,198, 17, 65, 9,124, 57,223,224,151,128,239, 78, 31, 17,230, 27, 14,163,193, 65, 25,
- 64, 0,159,207,207, 88,157, 7,247, 9, 50,144,213, 44, 36, 11,174,104,175, 78,195,230, 72,159,167, 99, 15, 8, 1,188,204,248,
-252, 47, 63,225, 79,255,246, 5,147, 77, 96,227,128,159,159,127,129, 80, 18,145, 9, 68,174,241,122,181,184, 45, 1,211, 58,195,
-152, 14, 74, 48,176, 20, 96, 12, 67,111, 20,224, 3,190,123,250, 22, 95,254,248, 5,127,252,215,159, 96,250, 1,183,101,134, 84,
- 18, 82, 50, 32,120,116, 90, 17,149, 83,208,217, 34,121,217, 29, 19, 41,210, 89, 90,223, 22,109, 76, 39, 36,196,177, 63,253,176,
-121,160,227, 14,165,248,110,254,239,155, 84,180,247,113,169, 59, 15,246, 59,190,236, 63, 23, 96,194, 27,235,211, 61, 40,162, 90,
-136,202, 65,125, 55,166,199, 29,195,123, 63,121, 72, 59,149,242,123,176,154, 92, 66,238, 3, 62,208, 54, 98,205, 72,188, 29,223,
-231, 98,129,191,179, 67, 47,191,164,142, 44,145, 16,238,246,198,233,190,176,105,236,112,177,153,166,108,217,225,219,127,111, 94,
- 4,250, 0, 9,202,126,230,133,179,205,178,239,177,226, 65,121,117, 52,108,123,229,109, 37,210,174,240, 67, 76, 68, 42, 18,146,
-188,167,140, 70, 96, 34, 39, 5,145, 72, 46,179,199, 43,219, 27,245,198,206,218, 53, 72, 67,239, 43,133, 99, 89,155,240, 6, 20,
-147,154,101, 8, 26,129, 21,208,226, 63,223, 50, 5,246, 29,119, 97, 23,176,183, 37,100,251,190,222, 69, 5, 19,129,143,239,160,
- 51,229,162,217,137, 12, 55, 74, 78,245,163,179, 29,212,135, 53, 78,131,253,248,158,146,171, 36, 66,244,123,107, 93,214, 43,176,
-236,193,142, 41, 97,181, 43,144, 34, 58, 46,208,167,136,255,237,239,255, 22,255,251,255,252, 63,225,239,186, 30,127,253,244,128,
-199,211,128,135,193,192,112, 42,232, 88, 74,121,127, 76, 35, 81,145, 3,120, 10,193,138,115,129,174,239, 73,136,196, 40,218,179,
- 76, 81,132, 16,208,157,222, 82,196,212, 22, 67, 76, 33, 36, 41,123,139, 1,149,163, 87, 43,241, 74,211,174,185,252, 89,202,114,
-111, 18,206, 98,200, 55, 38,218, 77,147,199, 89, 98, 28,122,116,157,196,216, 27,244,249, 64, 31, 59,141,222, 40, 40, 14, 24, 45,
-192, 83,128,150, 12,200, 81,165,130, 51, 4,103,145, 2, 5,195,164,156, 0,199,115,145, 70, 29,179,203, 16, 28,151, 61,247,116,
-232, 17, 93,141,196,103, 42,147,231,250,190,195,113, 60,160, 51, 38,235, 36,169, 40, 95, 45, 49,247,157,117, 96,156,213, 17,185,
- 54,196, 67,215,218, 96, 89, 38, 60, 60, 60,224,245,245, 21, 33,164, 92, 64,167,140, 67,205, 62,127,187,224,244,120,196,227,195,
- 9,227,208, 35,197, 0, 31, 28, 24, 34, 58,163, 41,230,148, 51,244, 67,135,206,104, 12,125, 7,173, 36,148,204, 54,176,213, 18,
-165, 44,135,254,148,132,179,206,116,185,211,143,152,167, 25,203, 60,211,206,156,137,140,148,245,176,171,195,186,172, 68, 32, 20,
-164, 63,234,250, 1,171,115,152,150, 5,253, 48,128, 51,137,101,186, 34,196,128,135,135, 39, 8, 33, 48, 47, 51, 4,231, 21,214,
-211, 25, 67, 5,130,214,232,186, 14, 82,208, 53, 21,235, 99,209,249,189, 33,125, 71,129, 2, 73, 46,234, 40, 94,107,133,213, 90,
- 4, 79,105, 99, 34,103, 31, 8, 41, 49,142, 3,192, 25,174,215, 43, 16, 35,156,179,244,251, 99,162,212, 61, 48,200,140,224, 29,
- 58,131, 20, 3, 4,128,209, 40,136, 20,193,131,197,135,135, 17,235,124,197, 95,125,255, 29, 78,135, 3,254,191,255,254, 15,120,
-190, 76,184,204, 14,209,115, 12, 66, 67, 6, 15, 17, 28, 14, 74,225,233,225, 4,112, 1, 23,128, 95,158, 47, 72,137, 65, 51, 1,
-205, 24,152, 96,224,199, 17,105, 93,193, 23, 11,172, 14, 97,157,193, 98,130,123,189,226,246,122,198,235,121,197,231,243, 21,230,
-112,132, 96, 18,163, 25,136,211,159, 53, 76, 82, 8, 4,159,224,173,135,204,233,144,227, 56,160,235, 12,192, 34,110,183, 87,252,
-219, 63,255, 17,118, 37,120, 78,202,116,189,224, 28, 56, 18, 58,173,106, 40, 18, 7, 39,126, 66,206,187, 72,137,101,129, 92,246,
-217,112,142, 20, 34,196,113, 56,252,176,131,196,220, 41, 95,255,220,225,251,231,254,204,215,254,251,159, 61,212, 57,111, 14,156,
-183, 40,213, 86,236,246, 94,223,255,213,248,246,252, 98,164, 18,213,201,182, 46, 28,140,111, 7,100,123, 88,238,164,209,219, 33,
- 85,249,223,169, 61,184,190, 86,176,236,161, 26,145, 81, 87, 19,217, 38, 18,100, 59,193,224,238,156, 70,220,188, 82,141,240,235,
- 13, 42, 47,251,114,233, 80,103,121,159,206,139, 42,156,101, 47,121, 86,131,167,157, 74,191,116,204,153, 19,158,163, 48, 67,214,
-233, 33,135,185,240,188, 59,227,249,247,150, 67,189, 60, 12,234,188, 55,228,232,150,102,150,197,131, 37, 26,138,111, 34,199,114,
-152,111,208,161,214, 28,183,137, 64, 88,101,191,239,227,106,217, 59, 65, 56,251,226,238,254,253,136,141, 83, 99,243,206, 23, 40,
- 78, 89,204,112,150,178,218, 31, 53,183,128, 55, 98,202,244, 78,232,204,230,247,231,123,139,220,174, 40,229, 77,198,249,230, 62,
- 72, 41, 66, 72, 14, 32,230,155, 60,125, 14,214,117,134,214,146,222, 31,191,224, 63,126,115,194,255,242,219, 15, 48,225, 10,206,
- 29,152,183,208, 44, 65, 32, 65, 10, 14,187,172,184, 94,174, 8, 62,193, 5, 26,241, 23, 59, 90, 25,177, 47, 51, 41,130,157,245,
- 88, 87, 18,134, 13, 67, 71,217,218,206, 2, 49,162,211, 10, 74,112, 28,143, 35,250,142, 48,156, 36,232, 51, 24,134, 30, 41, 37,
-104,173,161, 53,221,144,133, 84, 80,138, 96, 44,214, 90, 36,164,236, 37, 47, 7, 3, 81,223, 4,223,108,100, 49, 56, 8, 1, 24,
-201,105,255,157, 18, 20,231, 72,209,195,104, 14, 36, 7, 37, 25,137,222,180,204, 2, 77,134,232, 61,250,206,100,161, 41, 69,206,
-202,108,221, 20,138, 4,116,198, 24, 18,139,165, 60,233, 48,134,226,139, 51,173,109,153,103,104,165,200,174,231,168, 91, 13, 57,
-169, 44,101,244,244,241, 72, 35,109,165, 53,180, 54,212,113, 25, 34,166,157, 47,103, 56,239,209,245, 26, 31, 62, 60,193, 24,157,
-237,100, 84,252, 80,114, 25,199,120, 24,112, 60, 29,192,115,151,205,115, 12, 43,231, 44, 23, 52,212,209,167,148, 48,221, 38,220,
-174, 87, 92,175, 23,204,243, 12, 41, 4,198,225,128, 24, 34,164,146,117,127,204, 24, 48, 77, 55,132,224,242,245, 46,242,107, 45,
- 48,221, 38,218,187, 11,250,243,198,116, 72, 33,135,200,128,129, 21, 97, 30,163, 66,253,229,153, 68,153,199,195, 1, 49,166, 44,
-146, 83, 24,114,193,192, 5, 21,103, 52,225, 97, 53,160,166,235,123, 28,142, 7, 24,163,192, 37,135,181, 43,162,119,112,171,173,
-140,140, 34,130, 43,108,128,152,167, 58, 92,146,178,189, 27, 6, 74,173,235, 12, 34, 75,152,231, 25, 28,192,146,173,110,109,228,
-110,153,241, 73, 45, 17,146, 35, 46, 60, 56,140,228, 56, 13, 10, 15, 71, 3, 45, 57,137,249,206, 87,252,187,223,126,135, 81, 15,
-120,121,189,226,249, 54,227,236, 29, 46,126,133, 24, 21, 46,235, 5, 71, 5,116, 74,226,155,199, 39, 48,159,192, 66,196,124,187,
- 34, 69, 7,183,222, 16, 18, 32,100, 15, 54, 7,224,234,176,188, 94, 17,185,132,236, 71,192, 39, 28,187, 19, 62,127,126,193,101,
-246, 0, 55, 48,114,128, 95, 28, 82,136,120,120, 60, 96, 28, 52, 4, 34, 36, 72,184,108, 87,130, 74,105,163,241,241,227, 19,130,
- 11,248,231,127,248,103, 76, 55,135,152, 40,171,222,232,158,166,131,121,102, 43, 5,135,144, 12,146,209, 84, 57,133, 8, 41, 53,
- 66, 72,240, 49, 18,247, 61,100, 39, 80, 78,197,148,251, 3,175, 65,104, 52, 89,228,191,118, 40,255, 90, 20,107,219,149,124, 45,
- 7,253, 47, 57,236,171,136,134,237,180, 97, 95, 63,192,223,248,204,223, 63,248,105,247,243, 14, 19,167, 1,105,236,146,183,202,
- 81,154,119,251,224,165, 51,216, 30, 87,250, 26,199,189, 81,147,239,205,106,251, 34,128, 37,188,131,226,205, 34,136, 70, 57,158,
-114, 71,198,218,212,182,148, 26,245, 62,111, 58,202,109, 28,189, 75,158,202,163,224,148, 53, 7, 53, 58,245,157, 87,138, 51,209,
- 76, 69,226,155,100,181,132,176,243,139,183,196,190,150, 11,144,242,248,187,173,151, 82,243,103,118,131,234, 28, 38,148,216, 38,
-150, 18,172,224,144,242,148,224,110,141,205,238, 86, 58,241,157,129, 77,106, 58,124,198,246,118,203, 77, 93, 91, 68,127,121,108,
- 93,245, 7,133,126,245, 94,177,240,245,253, 61,242,136,191,136, 15,105, 55,234,161, 52, 7,139, 44,223,188,202,254,152,246,138,
- 52, 18, 37,251, 32, 23, 64, 96, 12,188,147,184, 76,175,224, 34,192, 49,139, 0,139,228, 22,248,121,197,116,190,194, 70, 14,191,
-174,136,222,131, 27,141, 20, 2,188,179, 20,243,202,139,109,117, 35,171, 17, 33,140,225,225,225,152,111,250, 1,206,211, 33,175,
- 13,117,123,235,186, 64, 42, 13,105, 36,142,250, 64,106,252,101,193,234, 87, 12,195, 0,128,195, 71, 2,221,220,110, 83,213,137,
-144,181,142,166, 17, 33,250,109,238,146, 80,189,229,135, 67, 15,111, 45, 38, 59, 35,229, 46, 93, 42, 77,150,189,108,217, 72, 33,
-100,101, 57,229,212,115,136, 28,152,148,114,231, 73, 7,183, 40, 94,118,206,145, 68, 14,124, 78, 20, 89, 90,232,120,206,145,242,
- 92, 73, 3,183, 90,188,174,150,216,229,146,124,215,195, 97,192,203,203, 13, 58,171,227, 67,240,248,238,187,239,240,227,143, 63,
- 99, 93, 46,144, 82,224,241,195, 3,230,121,198,239,255,250,247,132,245, 77, 9, 47, 47,191, 64,107, 77, 96, 24,165, 17, 83,194,
- 50, 79, 64, 12, 88,151, 5, 41, 25, 48, 70, 76,118, 82,169,115, 8,174,177,174, 43,150,117,197,249,114,193,235,235, 5,203, 66,
-217,228, 74, 10, 72, 37, 97,221, 11, 36,191, 85, 56, 15,227, 46, 23,131, 4,142,161,105,128,135, 16,228,145, 31,122,234,244,175,
- 57, 56, 36,184,136,121,154, 8, 76,211, 83,132,171,183, 43, 66, 70, 7,199, 24, 49,246, 61,162,247, 88,166, 25,156, 49,204,211,
- 4,183,208,216,155,172,116, 38,191,206,200, 5, 14,101,190,207, 51,177, 20,180,166,240,150,190,235, 97,231,105, 27,187, 7, 18,
-212,133, 20,235, 8,159, 11, 78,147,146,156,228, 22, 35, 21, 92,235,188,192,249, 53,231, 32, 44,116,111,138,196,187, 72, 89, 15,
- 34,149,202,249, 0, 1, 49, 49, 36, 46,128, 72,215,180, 80, 12, 74, 83,227, 97,186, 1, 95, 62,255,140,207, 95, 94,112,234,123,
-252,221,247,223, 67, 12, 39,252, 95,255,248,207, 20,150,195, 57,226, 18,208,127, 24,144,150,128,217,158, 41,128, 69, 57, 44, 46,
-194,174,180, 34, 58,255,195, 79,144,191,204, 56, 30, 6, 28,198, 14,195,239,190, 67,232, 37,152, 86,224,107, 0,139, 51,142,166,
- 3, 79, 47,184, 93,206,208,250,132,203,117,194,235,116, 1, 59,255,130,111,127,251, 13, 6,163, 16, 65,174,148,195,135, 7,184,
-176,130, 43, 74,156,187,190,174,176,147, 68,130,134,141, 43,188,143, 56,112, 14,231, 29, 24, 35, 27,219,226, 28,184,144,232,140,
-202, 60,120, 15, 30, 40,160, 39,230, 38,148,114, 29,200,125, 96,180,132, 44, 29,203,198, 14,103,117,175,122,159, 51,253, 94, 55,
-253, 94,238,249,175, 29,212,247, 33, 26,191,174,252,142,111,121, 53,247, 58, 62,206,222,166,197, 49,246, 70,113,254,238,243, 40,
- 63,147,176, 27,153,239,189,211, 57, 47, 57,149,125, 59, 32,182,200,176,157, 40,175,116,114, 95,179,191,239,236,121,101,184,156,
- 90,223, 57,170, 5,176, 4,178,108, 97, 22,172,177,125,181,175,199,150,169, 89, 30, 27,125, 32, 34, 82, 0, 82,222, 89,162,161,
-234,149, 85, 1,234,251,199,246, 9,105,213,118,200,182, 0,159, 18,220,146, 34, 5,149,176,180, 27,131, 87,207,126,115,224,177,
-157,192, 47,221,209,231, 26,245,121,253,251,223,138,205, 24, 3,120, 73, 24, 75,109,218,222, 30,225,187, 21, 69,137, 4, 93,141,
- 10, 3,111, 70,249,156,180, 33,247,145,195,252,206,245, 81, 52, 6, 57,152,168,197,228,221,231, 6,252,218,117,191, 23,224,221,
- 33,133, 19,203,140,246, 0,198,200,227, 91,186, 37,109, 8,234, 34, 36,237,181,185, 16, 8, 43, 48,221, 44,236,146, 48, 93, 61,
- 94,167, 21,159,175, 43,206,214,226,101,177,184,250, 4,155, 18,134,211, 9, 66,107,168, 24, 49,164, 30, 74, 10, 88,235,192, 56,
-161, 66,139,101,172,122,183, 37,131,136, 12, 42, 73, 88,187, 64, 41,133,211,233,152,233,117, 2,231,203, 5, 44,123,154,129, 8,
- 99, 36, 98,210, 36,166,211, 26,171,119,112,139, 67,167, 53,150,217, 82,151,218, 41,248,213, 86, 11,158, 86, 18,146, 75, 68, 31,
-225,173, 67,159, 57,227,130, 49, 24,213,129,165, 72,161, 53,185,192, 9,193,147, 10,154,111, 92,136, 24,129,196,104,223, 31, 17,
-242,103, 36,213,177, 56,141,115, 69,214, 16,208, 91, 38, 51, 96, 6, 49,119,249, 33, 98,186, 94, 17, 44, 25,103, 25,167, 38, 96,
- 28, 15,112,214,193, 24, 5,107,109,133,239,132, 16,240,205,199,111,240,203, 47, 95,240,242,114,198,225, 56,162,235, 58,162,173,
-205, 11,161, 79, 37,197,236, 46,243, 4,123,126, 69,204, 1, 48, 18, 64,223, 31, 72, 11,148, 34,236,186,226,245,245,138,113, 24,
- 96, 87,139,121, 93,192,149, 68, 12,192,188,122,196,196,193,146,128,247,168,193, 51,107,152, 16, 19,113,220,141, 49,164,249,200,
- 86, 49, 45, 76,214,183, 80,225, 18, 67, 4,231,192, 55, 31,159,114, 96, 10,135, 60,142, 88,230, 9,126, 93,224, 45, 42, 2,182,
- 88, 30,189,119,240,206, 99, 13, 1, 90,146, 50,127,154,103,120,107, 49,223, 38,168,108,131, 59,158, 14,120,120,164,130,102,181,
-150, 94,251,140,248, 85, 82,130, 43,142,163,121, 0, 18, 48,207, 55,154,122,196, 4, 35,168, 83, 85, 74, 1, 12,112,214, 98,177,
- 30,130,145,176,240,124, 62, 35,248,128, 24, 9,148,164,238,109,162,130, 87, 97,114, 8, 1, 42, 73,210, 73, 4,178,245,121,112,
-156,167, 27,130, 3,126,243,244, 1, 33, 69,136,135, 3,254,251,203,207,248,247,253,247, 96, 2,232, 13,195,227,193,224, 60,175,
-232,164,130, 25, 31,112,185, 94,241,237,239,127, 3,182, 78, 48, 44,160, 59, 38, 4,217,225,248,241, 3,212,216, 35, 32, 66,157,
- 70, 26,195, 27, 6, 12, 18, 98, 80,132, 45,159, 86, 72,172,248,230,116,128,255,253,239,240,223,254,244, 5,211, 50,129,117, 6,
-118, 58, 67,114, 9,187, 58, 40, 67,171,200,167,167, 3, 56, 15,248,246,195, 1, 79, 15, 71,176,164,240, 95, 95, 94, 49,173, 12,
- 62, 11,202, 61,128,155,115,144, 41, 66,247, 26, 30,196, 25,232,153,202,164, 68, 1, 46, 0,231, 50,121, 52,135,231, 72, 65, 60,
-121,145, 18, 36, 0,249,150, 93,158, 15,246,244,246,144,126,155, 73,254,235, 17,164, 95,203, 54,255,181,206,188,165, 80,189,179,
- 14,255,213, 17,255,253,243,104,255, 79, 52,183,248, 55, 96,119,214,218,126,168,187,107, 19, 92,202,111,227,105,195,157,242,230,
-140,190, 31,149,255,218,108,224,141,240,127,199,191,103, 85,205, 95, 8,118, 44, 71,235, 84,206,123,203, 66, 47,249,195,213,210,
- 87, 14,122, 86, 11,140, 34, 36, 68,163,226,222,173, 68,242, 15,209,249,252,118,117,176,235,221,211,198, 17, 40,147,142,194, 20,
- 96,105, 11, 64,225,205,196,129,189, 25,147,239, 5, 4,181, 83, 78,216, 57, 9,144,129, 34, 69,200,199,155,196,129, 74, 24, 76,
-123,222,112, 25,181,167,132, 6,116,243, 14,224, 63,165,173,176,105,128, 57, 44,187, 54,120, 89, 5,176,141,189, 80,120,229, 44,
-181,128,163,244,171, 81,196,111,175,195,180,187, 86,139,114,158,115, 1,150,111, 80,219, 65,203,238,212,205, 18,130, 41, 88, 88,
-252,124,158,241,143,159,206,248,167, 31, 95,241,243,106,241,243,108,113,177, 22,215,200,113,245, 14,221, 56, 18, 77, 43,120, 12,
- 67, 71,112,163,108, 43, 85, 82,129,101,225, 86, 12, 17,222,163,242,164, 57,207,169, 92,138, 18,185,140, 50,152,174, 19, 98, 72,
-116,104,129, 97,158,174,208, 90, 67, 41, 73, 22,177, 44,162, 67,222, 65,123, 23, 97,140, 2, 99, 29,140,201,227,241, 68, 32,157,
- 20, 35,184, 18, 80, 82,209,244,136,115,172,118, 33, 5,123, 66, 77, 64, 43,104,100, 33, 37,132,104, 65, 68, 4,145,161, 84, 56,
-153, 5, 94, 30, 42, 67,117,130, 79,224, 50,239,251,165,216,180, 44,156,244, 43, 82,208, 40,217,171,128,213,134,188,106, 42, 25,
-227, 11, 94,207, 23,124,248,248,136, 48, 79, 48,166,199, 52, 47,120,122,124,194, 52,173, 56,157, 78,100, 33,243, 14,159, 62,125,
-198,120,232,193,133, 34,192, 81,177,144,230,177, 54,192, 48, 47, 22,151,215, 43,130,117, 8,241, 23,124,255,253,119, 20,122,227,
- 1, 33, 12,214,149,186,171, 16, 19,230,219, 2,193, 21, 4, 87,249,186,205, 94,112,235,179,237, 43,146,126, 37, 0,222,122, 26,
-111,103,251, 94,215,245,245, 57, 19,228,165, 16, 4, 21,250,227,136,219,109,130,212, 2, 90,112,188, 60, 63, 19,241,206,249, 45,
- 72,133, 19,221, 76, 40,133, 57, 68, 92,110, 87, 28, 48,146,165, 45, 37, 88, 75,222,246,219, 60, 17,142, 53, 70,152, 78, 35, 88,
- 42,192,144, 87, 50, 33, 4, 96,221, 82,235,164,214,232, 6,162,231,205,211, 76,227,251,117, 65, 8,101,122,162,225, 66,160, 66,
- 51, 71, 55, 35,210,152,190, 56,145,136, 90, 72,235, 62,235, 60, 84,207,145, 66,128, 93, 86,140,199, 3,124, 12, 80, 90, 33, 9,
- 14,151,128,196, 21,172, 11, 36,126,206, 34,188, 94, 41, 8, 31, 48,177,132,199, 78,227, 54,207,112,206, 98, 52, 29,126,250,229,
- 19,126,243,109,196, 55,218,224, 36, 73,155, 33, 14, 3,208, 9,136, 15, 39,120, 22,193, 21, 9, 25, 3, 15, 96,130,129,229,117,
- 82, 48, 2, 16, 12, 34, 58, 60, 14, 6,223,126,120,192,213,115, 76, 54,226, 98,123, 60, 60, 61, 0,150, 2,152,166,213, 66, 74,
-129,239, 62,140,232,146,197,247,143, 71, 44, 81,225,114,123,197, 53, 0, 96, 18, 8, 17,137,113,204, 62,128, 5, 7,169, 56, 18,
- 79, 24,180,193,234, 2, 12, 99, 72,136,144,140, 19,254, 25, 12,206, 5,242,231,203,236,169, 15, 17, 41,120,136, 67, 63,252, 80,
- 70,130, 49, 54, 99,107,246, 62, 98,243,235,201, 86,191,190, 79,255,181,223,129,175,110,160,255,220,120, 19,239,134, 64,220,223,
- 76,249,206,169,251,254,225,219,250,217, 83,235,115,207, 89,220,237,145,196,154,240,147,123, 31,252, 87,159,210, 61, 0,159,237,
-217,164,123,112, 77, 25,243,223, 61,204,157,255,176, 61, 88, 82, 85, 88,163, 9,205, 16, 98,243,239,190,143, 75,221, 94,231,157,
-147, 43,179,195, 35,216,142, 40,199, 50,157,174,238,203, 75, 96, 57,163,200, 86,145,199,238, 34,167,105,177,202,134, 45,141, 56,
-223,237,190,235, 14,187, 10,227, 54,139, 89, 98,233, 77,245, 83,166, 50,169, 14,224,223,190,153,187,220,120,246, 94,224, 64, 75,
-137, 19, 85,212,135, 12,147,217,242,211,139,110,160, 97,164,179,141, 34, 87, 40,125,247,215,249,126,205,180,135,221,236,223,131,
-237, 90, 41, 63, 19,147,175, 62,233, 16,136,208,166,184,172, 72,215,117,161,132,172,243,116,197, 28, 44,254,245,249,140, 63, 94,
-102,252, 98, 29,102, 48,204, 9,224, 70, 67,247, 29,164, 22,240,145,130, 69,100, 78,120, 34, 43, 76,204,153,204,164,182,143, 49,
-230, 76,110, 65,144, 20,231, 72, 4, 37, 37,198,225,128, 79,159,190, 32,134,136,195,241, 8,211, 25,138,236,204, 35,121,163,117,
-245, 59, 27,211, 65, 10, 9,173, 13, 56, 39,250,213,186,174,152,166, 25,214, 90,218, 87,199,132,105,158,177, 46,115, 78,117,243,
- 59,193,163,224, 28, 74, 73,128,145, 2,189, 68,201, 34,171,242,139, 31, 90, 8, 90, 37,145,240, 47, 23,222,145,174,143, 88, 35,
-136,233,117,182,118,173,251,109, 48,142,224, 99,126,225, 5,124,126, 76,156, 11, 98,103,251, 64,190,116,165,114,188, 47,131,115,
- 30,195,208,227,114,121,197,199,143,143,212, 61, 75, 1,107,125,198,181, 42,232, 76,178,227,140, 84,246,118,117,208,218, 32,248,
-136,121,166,241,254, 52, 77, 0,231,120,121,121,197, 50,211,110,117, 28, 15,232,135, 2, 11,163,109, 0, 0, 32, 0, 73, 68, 65,
- 84,158, 14,199, 8, 44,179, 37,206,148,139,245,106, 21, 57,214, 84,144, 93, 1, 33, 99,127,163,143,112,214,193, 46, 22,193,123,
-116,166, 3,139, 52,146,103, 12,184,221, 38,172,203,130,190,239,179,239,221,161,235, 7, 88, 71,193, 34,214,249,138,167, 38,124,
- 48, 0, 33, 32,164,192,229, 54,147,134, 32, 3,112,116,103, 8,203,106, 12,164, 82,132,246,205,226, 54,210, 13,144, 4, 95, 10,
- 9,112, 96,181, 22,215,219, 45,139,220, 34,116, 22, 45,122,151, 51,233, 99, 73,178, 36,158,122,181,180,102,135,133,104,128, 88,
- 37, 96,135, 50, 3, 8,160,163,132,130,146, 10, 41, 38, 40, 45,144, 16, 48,244, 35,120, 4, 70,165, 49, 26, 5,153, 40,182,181,
-147, 28,154,147,114,255, 60,205,184,174, 22, 62, 70, 28,250, 17,243,141, 98, 90, 15,163, 38, 39, 69,167,137,175, 63,246, 72, 42,
-129,143, 6, 44, 39, 34, 50, 45,193, 36, 7,239,122,164,200, 0,155,192, 46,228, 45,159,150, 21, 75, 12, 56,156, 78, 8,209,225,
-114,121, 69,223,107,252,230,155,143,248,240,244,136,243,245,140,243,243, 51, 88,138, 56,245, 29,158, 62,124,192,203,249,130,255,
-243,255,254,175,176, 76,131, 49, 2, 0, 37, 38, 16,114, 51, 19,243, 1,110,148, 70,116, 1, 60, 5, 40,153,197,174, 53,167, 33,
- 39, 78,166, 28,123,155, 60, 24, 2,196,216, 15, 63,164, 26,137,216, 18,210,176, 59, 12,118, 97, 22,205,215,159, 83,178,191,215,
-221,255, 37, 2,188,183, 99, 88,214, 34,215,223, 20, 29,191, 54,214,191,239,202,216,123,135, 58,246,135,122,233,208,217,187,202,
-124,236, 58,245,247,146,222,254,236,161, 94,208,184,247,199, 82, 35,208, 99,237, 55, 26, 10,223,254, 37, 10,197,116, 93, 89, 0,
-162, 97, 4,111,135, 48,171,170,238,134,169,139,130,131, 35,114,222,254, 80, 79, 96,217, 15,153, 75,163,204,232, 23,156,213,136,
-213,178,241, 23, 89,233, 74, 7, 30,175,138,246, 10,127, 97,155, 85, 47,181,201, 43,153,247,143, 6,210, 2,236, 51, 98,203,183,
-202, 46, 59,221, 17,224,208,164,188,213, 81, 63,195,251,222,243,122,200,102,218, 94, 21, 61,102, 59, 94,141,170,101, 16, 72, 53,
- 64,164, 22, 95,104, 34, 34,249,175, 95,203, 27, 60, 37,131, 95,248,219,201, 66, 97,103, 35,135,142, 8,201,169,144,224, 9,222,
- 59, 92,207, 23, 88,239,176,174, 43,145,226,144, 96,225,113,177, 51, 46, 54,130, 15, 7,200,174, 67, 82, 18,178,211,232,199,161,
-138,237, 40,147,219,208, 36, 38, 16,185,174,208,225,188, 15,180,255, 78,116,168,115,193,112, 62,159,243, 94,184, 7, 7,135,247,
-212,101, 1, 28, 31, 63,126,132, 54,116,115, 94,215,149,176,179, 82, 98,158,103,120,239, 49,207,148, 9,125,187,205, 68, 30,203,
- 54,182,146,248, 69,121,227,128, 54,164,152,239, 58,131, 24, 29,184, 96,232,250, 46, 31, 76,122, 19,206,105,153,185,236, 4,212,
- 81, 82, 18, 65,172, 20, 95,137, 10, 72,196,226, 60,200,241, 75, 57,145,174,100,129, 83, 65, 4, 8, 38, 17, 66,206, 74,207,177,
-194,224,130,154, 67, 48, 8, 65,135, 85,241,246, 91, 23, 48,244, 3, 46,215, 27,156, 91, 48,142, 3, 81,230,140,134,247, 17, 90,
- 25, 2,181, 48, 78,251, 99,107, 51,175,159,116, 8, 82, 81,193,211,247, 35, 57, 3,148,198, 48,142,100,171, 3,189,183,231,243,
- 25,222, 57,172,203,140,105, 38, 22,123, 10, 91,118, 2, 71, 34,113,100,140, 72,129,214, 7,217, 33,156,131,177, 5,162, 39,154,
-156,181,107, 21,148, 89, 71,239, 77, 74, 9,231,215, 51, 0, 96, 24, 71, 92,175, 19,198,195, 17,166,235,234, 84,100,181, 14,203,
-186,194,133, 0,161, 20,134,195,136,110, 24, 32,148,130, 50, 6,170,211, 80,198,128, 75,142,213,174,224, 92, 96, 89, 22, 44,203,
- 10, 48, 6, 93, 99, 86,169, 99,119,150, 88,239,209, 19, 80,102,153, 22,204,243, 4,163,116,189,254, 24, 24,253, 57,231, 43, 81,
-142, 37,130,224,240,130, 41,231, 13,104, 43,139,183,121,158,224,112,198, 33,153, 66,215,169, 58, 89, 74, 46, 66, 51,178,182, 61,
-244, 10,209,174, 64,140, 56, 29, 59, 60,140, 61, 6,211,129,171, 14,159, 95,206,184, 77, 11, 14,221, 8,173, 20,172, 95, 48,244,
- 6,189, 82, 48, 66, 17, 60, 71,113, 36,149,192, 58, 1, 38, 56,224, 45,193,211, 36, 3,151, 25,158,181, 56,240,171, 67, 92, 45,
-212, 48,192, 51, 2,143, 46,183, 9,199,177,199,249,252, 12, 41, 24, 30,198, 14,223, 60,246, 24, 15, 3,152,144,184,204, 19, 18,
- 23,120,126,190,226, 31,254,241, 71,164,212, 35, 6,186,183,248,152, 96, 67, 4, 24, 71,116, 1,189,210,144,137, 65, 50, 14,201,
- 19,148, 16, 16,140, 82, 18,131,143, 52,142,103, 2,130, 73, 48, 14, 72,197, 96,148,132, 56,116,135, 31,202,168,183, 48,150,139,
-237, 11,187,138,233,237, 94,252,207,217,211,222,198,139,254,101,251,244,251, 40, 21,214,140,201, 55,142,120,222, 33,179, 28, 28,
- 82,246,173,245,241, 54,194,240, 93, 55, 77,194,176,246, 48, 21,105,159, 36,198,203, 77,191, 46,117, 43, 63,181, 77,123, 39,245,
- 58, 54,130, 92,100,169,177,153, 21,143, 63,223,136,104,108, 15,175,217, 65,213,210, 86,124,176,187,185, 64,125, 46,188,141,139,
-141,149,189, 93,252,219, 69,208, 39, 5,145,157, 56, 47,238,188,114,120, 52,147, 5, 94,226,106,201,222,150, 26, 29, 69,140, 9,
- 62,134, 93,136, 13, 75, 13,169,142, 21, 90, 96,106, 38, 5,169,170,220, 5,207, 7, 52,127, 59,119, 97, 28,251, 64, 25,198,118,
- 7, 45,238, 95, 23,214,188, 39,197,110,214,142,205,115,129,193, 91,182,120,139, 18,110, 11,136, 6, 27,204,243, 84,129, 55, 5,
- 2,221, 76,242,225,206,177, 43,136,176,139,101,109,112,194,191,178, 78,226,119,236,248, 66,217, 35, 93, 66, 2, 23, 9, 82, 9,
-112,158,192,121,132, 82,100,241, 18,146, 50,195,149,148, 24,251, 30,253,216,193,100,143,177, 80, 2,253,208, 3,156,163, 27, 15,
-240, 0,162, 96,100, 39,211, 26,203, 66,234,225, 15, 31,158,208,117, 29,156,181,184, 92,175, 21,255, 89,186,227,243,249, 76,234,
-238, 60, 86,238,250, 17,183, 43,117,208, 74, 42, 44,235,140,195, 56, 64, 41,129,143, 31,159, 16, 17,177, 44, 43,172,165,176, 17,
- 74,246, 10, 0, 56,172,181, 88, 87,178, 43,157, 30, 78, 84, 20, 8,134,105,158, 48, 77, 19,172, 93,115,110, 55,141, 93, 15,227,
- 1,211,109,130, 16, 2,135,227,136,121,162,189,237, 50, 45, 96, 44,225, 48,246, 80,138,104,103, 50,163,114, 99,238, 8,131, 39,
-161, 88,171, 2, 39,194,154,170, 24,233, 4,150, 17,173,148,253, 46,184,168, 68,198,146, 21, 30, 60,224, 28,117,239,222, 7, 72,
-109,160,181, 66,215,119,212, 9, 39,218, 77, 63, 61, 61, 32,196, 0,235, 22,104,163, 48,140, 7,244,253,136,235,117,193,243,203,
- 23, 44,203, 2,198,129,126,232,241,240,248, 8, 46, 36,164, 82,249,240,142, 56, 30, 6, 28, 15, 35,134, 65, 3, 41,224, 56,246,
-240,118,133,181, 43,198,129,138,130,101,154,193, 18, 67,167, 52, 9,228, 56, 21,118,156, 87, 78,100,182,126,115,196,200, 16,178,
-205,148, 48,161, 9,171, 11,112, 46, 98, 89, 45,184,160,235,227,114,190, 0,156,225,225,244,136,196, 56,166,121,197,241,116,130,
-202,206, 4,211,119, 96,156,227,112, 24, 49, 30, 70, 12,135, 17,199,227, 9, 41,165,156,244,214,195,230,199,201, 56,200,241,208,
-117,144, 92, 64, 10,145, 45,109,188,242,200, 99, 44,122, 32,142, 16, 34,164,144,176,150, 30,143,224, 60, 39, 4, 18,252, 39,250,
-128,152, 25,242,116,219,225, 53, 65,111, 23,185,219, 64,189, 56,103,196,124,143,137,222,235,204,126,239,255,127,206,222,173, 71,
-178, 44, 61,207,123,214,105,239, 29,135,204, 58,116,247,116,207,104, 6, 34, 41,202, 4, 45,139,146, 32, 64, 23, 6,104, 73,134,
-161,159,224, 27,255, 25,254, 48,223, 9, 16, 12, 19, 48,108,194, 38, 65,145, 28,145,156,153,102,119, 87, 87,101,101,102,196, 62,
-172,163, 47,190,181, 15, 17,153, 89,221,195, 2,102,170,187,186, 50, 35, 50, 98,199, 94,223,225,125,159,183, 6,230,228, 34, 58,
- 20,163, 20,141,179,148, 24,241,211,153, 95,252,252, 75,202,216, 19,251,158,182,107, 25, 82,226,190, 31, 9, 17,110,118, 29,133,
-192, 23,183, 7, 62,191, 57,208, 29,118, 20, 3, 73, 37,212,190, 67,117, 22,140, 38,141, 35, 86,137,126,160, 52, 6, 93,192,191,
-187, 67, 61, 12, 20,101,248,187, 95,127,139,109, 15, 28,110, 14, 40,157,209,170,208, 53,134,215,183, 59,126,242,246,200,135,111,
-126,195,171,155,142,253,209,241, 79,126,250, 83,246,183,183,252,249,159,255,146,239, 63, 12, 76,147,144, 95, 98, 17, 80, 80,138,
-137,198, 53,228, 40, 16,169,227,174,147, 48, 33, 63, 72,162, 93, 92,215,116,146,131, 33,206,143,214, 25, 26, 99,176,177,204, 41,
-109,155, 67,120,177,251, 60, 63,102,191,222,193,255, 24,207,249, 75,163,248, 31,254,162,122, 83,159, 5, 74,234, 18, 52,179, 61,
-176,175,133,109,243,207,162,174,246,229, 11, 45,173,126,157, 46,155, 67,117,246,177,151, 75, 82, 93, 94,246,211,213,106,176,192,
-120,184,130,243,168,170,206,188,180,193,149, 37, 88,166,118,153,243, 65, 91,212, 42, 92,187,242,115,171,133,234,126, 41, 98, 91,
-158,216, 12,147, 41, 18,220, 33, 0, 17,249,126,118, 51,118, 87, 90, 85,192,136,190,240,138,111, 75, 38,125, 37, 58, 76, 21,239,
-185,104,185, 42,248, 65, 43,241,156,138,255,121,141,187,157, 15,116,189, 96, 63,215, 98,104, 30, 6,104,117,121,160, 95, 77,225,
-151,215,135, 77,170,223,106,108,219,176,160,149,222,208,169,212, 22, 20,188, 40,214,175, 57,230,139,248, 77,175, 34, 56,179,164,
-198,169, 11, 30,254,252,239,230, 25,143,249,214, 9,162,245,234, 46,120,122, 61,151, 85, 65,191, 5, 34,213, 67, 93,107, 17, 61,
- 25,163, 48, 6,118, 59,135, 82, 9, 99, 10,144,104, 27, 91, 59,217,140,143, 99, 77,193, 18, 18, 93,211, 56, 81,158,251, 80,171,
- 15,185, 62,165,195, 23, 15,108,219,182,213, 99,237,241, 83,192, 56, 75,183,219, 73,220,103,205,197,126,243,246,141,132,122, 84,
- 86,184,115, 45,227, 48, 10,161,170,192,205,241,192,227,233, 81, 96, 74, 90,132,104,143,167, 51, 31, 63,222, 51, 77,158,224, 35,
- 77,211,114, 60, 28, 22,226,155,124, 47,137,166, 12, 53,184, 38,215,241,106,219,182,104, 99,232,118,123,206,167, 51,141,109,232,
-186,150, 48, 91,237,130, 20, 27,251,202,191, 79, 57,214,168,206, 88,227, 62, 93,117, 1, 40,156,107,107,158,187,228,202,207, 2,
-198,148, 11,227, 20,121,120,236, 25, 39, 47,112,150,153,172,151,132,151,174,170, 79, 63, 70, 65, 76, 26,235,208,198, 44,133,199,
- 48, 14,180,141, 3,228, 57,148,146, 57, 28,119, 40,165, 56,157,207, 40,165,121,184, 63,113, 60, 28, 49, 6, 14,213,194,118, 30,
-122,134, 97,168,250, 20,121, 61,134, 97,228,238,238,123,161,124, 25,177,243,165, 20,184,189,189,161,113, 13, 62, 4,134, 97,160,
-109, 90, 41, 92,234, 8, 63,231, 76, 66,166, 6, 33,100, 18,154,144, 51, 62, 38, 34, 2,173,114,237,142, 41, 4,198, 16, 81,218,
- 16,130,100,106, 15,163,136, 20, 95,191,121, 67, 65,209, 79,158,201, 7, 82, 77,211,212, 90,179, 63, 30,132, 84, 89,228,103,236,
-135,158,199,199, 71,241,195,143, 19,143, 15, 15,156,207,162,158,127,253,250, 21,141,115,130,133, 85, 26, 87,217, 6, 57, 39, 81,
-201,135,192,221,135,143,228, 40, 0, 26,101, 12,206, 54,140,227,184,188,238,242, 56,105,161,102,138, 37, 86, 62, 63,102,198, 70,
- 51, 35,128,213, 69, 46,196,252, 89,180, 53, 40,168,212,162,222,105,177, 57,182,214,200, 4,164,100, 66,201,104,163,241, 83, 96,
-156,122,222,190, 62,114,236, 28, 77, 73, 28, 90,135,235, 26,206, 33,242,241, 60,113, 26, 2,157, 51, 28, 59,195,231,135,134, 87,
-157,161, 57, 88,216, 91,162,202,216,227, 30,156, 28,234, 37, 36, 84, 82,104,215,144,157, 69,187, 22,245, 56, 82, 38, 79,177,240,
-217,207,190,162,219, 31,233,253,196,135,251,143, 60,158, 7, 94,189,254,140,211,249,129,113,234,185,221, 29,177, 10,218,214,210,
- 89,195, 87,255,236, 15,248,179, 63,251,175,252,221,215,239, 72,198,145, 88,215, 17, 10,133, 85, 2, 42, 26,199,158,198, 10, 55,
- 95,145,234, 20, 71,147, 83,189, 31,107, 1,229, 8,195, 65, 50,216,143,214, 97,110,107,167,158,151, 52,164,188,116,108,215, 35,
-247, 31,178,174,125,234, 48,255,109,188,239,151,231,250,186, 17, 55,213,122,197, 51, 98,174,109,100,233,162, 54, 87,101,147, 54,
-183, 61,212,213,101,247,120,141, 32,223,196,182,240, 92,102,182,186, 18,127, 61, 43, 62,187, 66,130,151,237,190, 87, 93, 88, 7,
- 95,238,246,214,221,224,162, 82,223, 36,199,173,198,188,217,158,150, 43, 20, 70, 87,175,184,220, 76,150, 3,190, 92,113,246,235,
- 9, 39, 93,248,250,218,228, 90,121,203,248, 75,215,244, 41, 85,227, 22,205, 66, 67,147, 73,192, 54, 90,117,134,206,136,255, 26,
-181,141, 92,229, 9,115,253,114, 28,190,141, 61, 93, 27,120, 93,253,180,243,239,203,107, 59, 79, 46, 54,251,253,237,225,175, 55,
-248, 91,181,133,189,109, 8,116,198,168,245,223,205, 58, 10,183,250, 42, 93,110, 86,255,215,189,222,130,186,157,133,139, 11, 34,
-249, 50, 65, 80,166, 94, 91,248,188, 20,116,206, 25, 26,231,234,136, 25, 38, 63,200,136,214, 90,180,134,105,154,106,113,149, 22,
-213,119, 74,226, 13,150,206, 55,208, 54,142,182, 17,149, 54, 5,252, 36,225, 26, 55,199, 3, 37, 39,134, 97,141,206, 52,198,212,
- 3, 71, 32, 42,243,190,187,105, 26, 73,124,179,178, 19,159,198, 1,103, 13,183,183,175,216,237, 59, 98,140, 28,111,110,200, 57,
- 19, 66,170,110, 7, 85,213,208,134, 93, 21,225,181,173,227,112,220,139, 10,188, 17,155,150,208,207, 20,187,221,142,227,241,134,
-221,110, 15, 74, 66, 94,102, 17,238, 56,122,206,125, 47,159,241, 2,141,109, 80, 23,233,140,162,248,111,155, 86,186, 54, 37,150,
-168, 53, 11,157,133,172,229,125,228,225,254, 76,223,143, 40,101,216,239,247,245,121, 7,166,209, 99,180,171, 72, 93, 75, 41,178,
-123, 14,117,108,109,157,172, 7, 82,140,149, 19, 47,239,177,181,146,136, 55,231,215, 3, 12,189,231,112, 56,144, 83, 18, 22,187,
-247, 60, 86,245,182,159, 98, 77, 51,131, 20,147,116, 88, 73, 44,109,135,253, 94,242,181, 67, 64,107, 69, 63,140,244,125, 95,197,
-128, 78,214, 23,181,235, 78, 5,124,144,125,191,177, 13, 25, 69,183, 63,200, 78,187,113,248, 20,153,102, 66,158,150, 34,124, 38,
- 47, 42,173, 25, 38,207,253,195,137, 16, 2,135,195, 13,251,253,158, 24, 37, 67,224,225,225,145,190, 31,152, 38,207,126,191, 23,
-132,173,146,132,187, 92,196, 61,176,219,117, 28, 15, 55, 88,227, 8, 62,112, 62,157,121,188, 63,241,225,253,123,238,238, 62, 94,
-120,137,103, 77, 76,240,114,232, 60,158, 30,150,213,204, 12, 53, 18,139,150, 90,114, 6,172, 49,107, 24, 86,181,168,105,205,146,
- 78, 89,102, 96, 81,101, 88,232,197,125, 35,182, 54,165, 21,206, 24,156,179,236, 58, 1,226,236, 14, 71,166,113,196, 86,171,156,
- 86,133,183, 55, 7,194,249, 68, 83,215,147, 33, 23, 18,134,211, 20,249,120, 58,113,188, 61,112,219, 56, 94, 41,248,236,246,128,
-109, 44, 52, 26,117,219, 81, 28, 20, 83, 27,162,202,144, 80, 90,161,246, 13,170,113, 48, 78,232, 2,166,179,216,155,134,230,102,
-199, 77,219,113,243,246, 11, 62,244, 61,127,245,223,254,158, 80, 44,223,220,157,184,191, 63, 81,148, 65, 55,150,125,119, 68,187,
-142, 63,255,139,191,225,251,187, 51, 62,105,114,166,174, 75,100, 13,148, 75, 70,149, 66,231, 12,134, 66,137,190,210,232, 68, 44,
- 57, 59,175,140,177,216,122, 46, 89, 52,182,100,246,157,198,188,218,221,252, 9,115,112,199, 6,169, 49,143, 26,159,163,185,205,
-225, 13,191,205, 56,253, 31,123,160,207,199,159,222,236,212,215,120, 53,117,129, 19, 65, 93, 11,214,158, 63,212, 85, 89,177,161,
-234, 9, 23,125, 21,215, 45,118,174,107,188,201,213,161,190,141,148, 84,219,159,245, 74,181,127,121, 88,191,176,147,191,120,205,
-202, 5, 80,101, 62,208,215,152,215,122,248,232, 89,137, 94, 42, 65, 76,215,174,186,118,236, 70,173, 91,132, 43,112,158, 90,236,
-114,235, 19,157,181, 21,165, 40, 74,174,106,114, 53,135, 90,216, 69,225,186, 38,160,205,163,236,170,126,223,166, 44, 93, 28,212,
-106, 1,223,204,239,203, 74,146, 85, 11,188, 71,171,203, 1,197,122, 29,232,139, 29,250, 76, 19,222,166,179,173, 20, 56, 22, 50,
-219,130,145,213,235,122, 96, 46,116,180, 97, 1,233,232,205,120, 93,235,235,218,177,108, 70,252,108, 62, 43,107,224,239,242, 94,
-204,207, 69,235, 37,231, 94,215,149,132, 28,232, 85,213, 93, 34, 49,250,154,250, 53,167,223, 41,218,182,145, 81,112,215,161,173,
- 89,212,197, 90, 27, 17,162, 41, 69,215, 9, 24,132, 82,100,114, 82, 5,128,119,119,119,244,231,126, 9,237,240, 33,224,189, 39,
-198,180,236,203,231, 3,125,191,219, 17, 99, 88,210,199,130, 15, 28,143, 71,154, 70,252,207, 50,174, 79,220, 63, 60, 18,188, 64,
- 69, 26,103,177,198,210,117, 13,206, 25,110,142, 7,186,174,165,148, 36, 7, 55,138,113, 24,121,120, 60,209, 52, 50, 61,138, 49,
- 50,142, 3,195, 40,221,112,227, 28,231,211, 64,204,137,156,193,104, 91,119, 89, 50, 37,107, 90,241, 79,107,168,163,219, 34,118,
-190, 20, 73,121,206,110,144,252,110, 17,126, 69,166, 49, 46,176,149,249, 87,138, 73, 56,222,218, 72, 96, 85,174, 90,145, 34, 34,
-210, 16,227,130,115,238,186,150,227,113, 95, 35, 90,195, 18, 89,219, 84, 39, 64, 41,153,182,105, 9, 33,240,248,248,200,208, 15,
-248, 81, 0, 62, 90,233,139,105,133,115, 78,132, 79,133,138,115,221,161, 80,180, 53, 69, 77,107, 77,211, 10,204,198, 90,135,247,
- 81,148,224, 81,108,141,177, 64,209,166, 42, 85, 52, 83,202, 76, 33, 98,156,227,254,241, 68,136,162,189,152,175,175, 25,242, 51,
- 7, 47,165, 10,139,138, 41,115,255,240, 72, 63, 72, 81,145,179,226,241,116, 98, 28, 38,134, 97,228,225,225,196,227,227,169, 94,
- 95,117, 42,166,101,226,113, 58,157,185,187,251,200,195,131, 68,189, 78,163, 95,210,217,250,190,151, 41,130,143, 2,183,105, 58,
-140,117,149,248,102,128,194, 52,141,196, 24, 64,137,186, 62,165,188, 52, 33, 51,221,112,254, 12, 45,246, 67,181,213,184,232,170,
-209,145,102,110,166, 5,106,107,176, 86,116, 25,214,104,156,214, 56, 43, 12, 13,231,154,138, 39, 87,164, 24,216,187, 6,134, 1,
- 83, 50,251,227, 1,215,118,148,162, 24,167,192, 67,223, 83,180,230,160, 20, 95, 28,118, 28, 91,139,107, 44,133,128,121,115, 64,
-237,156,184,119,140,145, 69, 64, 18, 86,189,234, 44, 41, 6, 24, 39,166,115,207,112, 26,235, 53, 25, 41, 5,236,237, 13, 95,254,
-206,207,121,123,188,225,227,247, 31,185,125,245, 25, 62,203, 4,225, 31,190,253, 7, 62,255,236,115,222,254,252, 23,252,249,159,
-253, 5,223,189, 63,145,104,100,185, 88,215,158,170, 78, 67, 32, 99,107,154,219,174,107, 41, 41,139,210,189,226,149, 41,178,154,
- 82, 37,227,148,162, 81,138,189,211,116, 45, 88,181,193,116, 62, 57,188,231, 44,232,151, 96, 48,155,223, 95,130,212,252,216, 95,
- 23,169,106,139,240,165,242,197,175,188,216, 23,132,182,205, 65, 89,126, 76,161, 80, 20, 27, 68,203, 26,200,169,158,238, 72, 5,
-128, 82, 86,252,108, 41, 79,245,214,243, 88,117, 51, 54, 98,155, 73,126,157, 22,183,242, 89,158, 16,201, 46,133, 93,149,118, 94,
- 54,250, 47,182, 99,234,117,102,175, 54,252,114,165, 46,103, 16,179, 29, 76, 47, 60,124,245,140,118,111,142,204, 85,172, 3, 1,
-181,116,137,203, 65,170,159, 25,155,207,153,229,136,160,103,193,240,206,251,120,181,114,239,175, 49,169, 79, 70,215, 75, 80, 79,
-126,130,111,153, 15, 76, 93, 54,186, 65,117, 57,149, 41, 90,173, 65, 56, 51, 61,112, 51,238,223, 58, 32,180, 42,151, 42,249, 37,
-234,145,139,194,236,122,197,180,101, 51,108, 61,242,115,129, 85, 42, 7,127,203,188,223,174, 85,172, 86, 56,171,137,209,147,210,
- 36,164, 56,171,151,245,128, 54,178,163,206, 69, 14,164,148,179,168,244,141,140,141,189, 15, 53,200, 1, 66, 10,210,165,207, 59,
-235,152,200,213,245,224, 67,192, 7, 17, 45, 57,103,233,186,142,251,251,123,246,251, 61,227, 56,114, 83, 59,112, 17,173,137,165,
- 75, 27, 69,136, 83, 13, 59,145, 27,246,227,233, 68, 72, 17,141,162,107, 91,198,113,164,235, 58,118,123,217,245,229,156,240,163,
- 40,220,219, 22, 26,231,216,237,218,154, 5, 31,176, 70,124,180,129,194,110, 39, 36,172, 97,232,229, 80, 77, 17,109, 29,198, 58,
-198,126, 16,160, 76, 81,152, 49, 8,148, 38,142,144,133, 39, 30,125,164,105,180,216,157,172,227,254,116,194, 24, 43,135, 71,202,
-180,237, 14,165,202, 18,214,226,125,172, 7,186,173, 41, 96, 25,215, 56, 57,244,146,168,225,149, 22,235,155,177,142,195,174,197,
- 90,195,110,231, 8,113,183, 81, 23,139, 2, 30,160, 31,250,138,193,157,243, 27, 50,206,137,231,123,118, 12, 88,107,185,191,191,
-167,105,154,154, 53,239,152,166,137,143,119,247,149,239,126,100,119,216,163,141,229,120,211,144,179, 34,164, 15,100, 5,182,131,
-148, 64, 39, 42, 45,172, 16, 98,194,181,142,152, 19, 15,143,143,203,154,108, 9,234,217, 88, 17,149, 50,213, 34,105,107, 23, 45,
-248,219, 97, 60,243,205,183,239,104, 92,195,103,159,125,193, 52,142, 76,147,248,235,173,109, 46, 44,173,195,105,168, 43,143, 84,
-117, 51, 34,202, 3, 73, 31, 67,101,180, 81,248, 32,215,132,247, 31,177, 90,112,212, 82,208, 8, 92,198, 58, 71, 8, 19, 57, 21,
-166,232,101, 61, 84,215,118,169, 54,132,186,226,131, 19,153, 68,169, 96,169,202,213,152,133,202,133, 26, 65,108,200, 20,114, 20,
-252,108,219,182,132,224, 9, 26, 89,109, 20, 97,174, 43,235, 56, 13,103,154,146,153,146,176,220,199, 80,184, 63, 13,236, 19, 88,
-211,136, 2,253,230,192,189,247, 60,146,241,250, 13,131, 79,236,250, 9, 93, 20,140, 19,234,112, 35,122, 27,173, 32, 74, 86, 4,
- 70, 83,180,194,164, 2,214,145, 12,156,206, 3,175,143, 71,178,109, 57,223, 61,240,250,245,231, 88, 11,191,248,234,192, 91,245,
-187,124,253,238,129, 59,123,131,206,145,183, 55, 95,161, 75, 18,212,172, 85, 4, 85, 8, 90,111,196,145, 70, 92, 9, 57,209, 89,
- 69,200, 89, 86, 54, 69, 87,177,167,102,244,129,157,179, 53,154, 44, 11, 76,199,168,186, 87,215,236,247, 26,243,170,187,249,147,
- 57, 6, 49,151, 66,170,253,189,236, 12,121,150, 4,119,221,161,111,199,244, 47,169,228, 63, 53,126, 95, 32, 38, 92,178,184,149,
-210, 23,221,249,245,212,118, 78, 81, 43,106, 37,185, 61,221,109,110, 51,186,107,144,203,149, 80,238,170,151,191,128,195, 92,140,
- 80, 23, 49,219,165,101, 73,215, 80,155,101,168,127,245, 60, 84, 93, 27, 44,187,251,133,185,174,127, 64,123, 80,150, 83,109, 57,
- 84,212, 58, 90, 86,250, 82, 91, 48, 87,186,198,152,165, 19,181,230,234, 96,185,178,179,233,165,152,201,107, 22, 90,237,106,164,
-187, 41,228, 74,233,210,198, 96,172, 69, 27,189,100,115, 11,196, 69,100,122,186, 84, 5,252,252, 24,122, 29, 85,232,250, 51, 63,
- 63,145, 88,119,250, 90,171,139, 53,138,210,106,225,149, 95,184, 49,182,162,181,141,114,222,108, 52, 9,107,247,205, 70,104, 39,
-221,185,217, 40,207,151,176,153,141, 3,253, 58, 45,240, 34,127,252,201,245, 92, 3, 23,106, 80,139,160, 53,245, 42,226, 82, 34,
-124, 35, 39, 92, 99,104,172, 34, 39, 79,183,107, 49, 70,178,170,115,201, 18,141, 83, 69, 63,169,142, 75,181,118,164, 44,126,225,
-243, 73, 58, 38,239, 87, 22,248, 52,200,222, 60,231,130,143,226,251,213, 53,103, 61, 23, 48,218,144,114,225,253,251,247, 85,188,
- 5,135,195, 1,133, 34,229, 40, 66, 47, 5, 31, 63,222,209,117,173,252, 55,165, 43,158,118,146,195,163,222,176,253, 52,209,117,
- 45,166, 42,188,231,195, 77, 16,176,194, 31,159,233, 98,109,235,150,152,207, 92,181, 0, 41, 71, 66, 12, 75, 53, 61,239,179,251,
- 65, 24,227,251, 93,135,169, 89,240, 57, 9,142, 54,120, 9,243,152,225, 88, 33, 68,206,125, 68,105,199,185, 31, 42,107, 93,213,
-209,191, 35,165,192,228, 39, 10,194,214,119,213,130, 69,197, 31, 59,215,224, 99,148,171,189,102,210, 7, 95, 1, 57, 70, 40,110,
-143,167, 19, 74,107, 66, 8,140,227,176, 52, 45,214, 89,130, 23, 58,159,228,149, 55,116,109, 43,175, 83, 77,155, 27,134, 1,165,
- 52,227, 56,242,120, 58,241,248, 40,123,246, 67,221, 99,159, 78, 61, 15, 15, 39,137,101,173,239,149,107, 27, 92, 99, 69, 3, 17,
- 60,227,228, 47,156,171, 57,215,105, 67,146, 49,117,235, 28, 41,198,139,201,145,170,150,178,146,197, 63, 46, 59,218, 76, 8,178,
-202, 49,218,138,197,174,239, 9, 49,210,184,202,230, 79, 25,239, 3, 67, 63, 48,140,131,216,219, 98,174,147,185,186,112, 44,146,
-218,166, 20, 52,173,165,109,218, 69, 88, 61,223, 87, 98, 76,114, 13,250,137, 16,197, 50,105,106,174,128, 91, 48,188,185,134, 56,
-173, 57, 9,165, 22,220,206,217,186, 10, 18, 22,127, 74,113, 65, 72,155,154,226,167,181, 2, 45, 93,175,136,229,138,236,213,155,
- 6,109,100, 55,239, 92,195,224, 61,138, 66,163, 53, 13, 10, 91, 93, 17,227, 56,160,208, 68, 10, 89, 43,122, 31, 72, 33,112,115,
-179,231,208, 26, 14, 10,116,244,160, 51,180, 22, 58, 39,251,126,159, 33, 70, 74,103, 41,173, 67,133, 12,253, 64,251,234, 21,199,
-175,126, 78,110, 29,231,251, 15, 28,154, 14,101, 32,235,128, 13, 35, 77, 10,168,146,217,237, 26,110,119,142,195,161, 99, 26, 78,
-124,254,179,159,242,248,208,243,215,191,252, 13,185,180,245,231, 88,245, 20,101,158, 10, 22,225, 19,104, 37,141, 64,206, 51, 54,
- 87, 85, 37,124,161,181, 26, 91, 18,157, 51, 52, 22,142,175, 59, 57,212,231,209,187,248, 22,211,133, 16, 72, 95, 5,163, 92,119,
-233,191, 45, 39,254, 69,202, 92, 29, 29,207, 98,168, 37, 61,108,163, 14,159,161, 20,207,133,160, 60,253,190,234,226,240, 85,215,
-155,244, 13,158,244,165, 67, 93,177,181,146,233, 11,180,233, 83,133,245,229,115,152, 21,249,203,115, 47,229, 66, 68, 53,171,184,
-159, 35,221, 61,245, 58,115,217, 29,206, 66, 50,165,159,245,219,219, 90,189, 74, 14,180, 90,246,235,219, 67,105, 43, 54,220, 70,
-135,150, 82,106, 37, 61, 23, 74,106,201,111,118,206,173,150, 47,189,238,247,213,146,215, 94, 69, 48,122,173, 94,148,210,152,202,
- 62,254, 49,215,195, 53, 25, 80,113, 53,198, 87,215, 59,248,245,128,191,220,155,175,138,255, 85,249,191,238,212,175,119,248,122,
- 91,148, 94, 23, 87,240, 36,164,103, 59, 42,216,254,189, 45,215,156, 58,169, 81, 37,211, 56, 35, 35,245, 70,186, 25,215,200, 1,
-162,141, 33,166, 64,136, 94,118,192,149,171, 61,122,177,142,133, 24, 25,199, 73, 82,198, 98, 90,146,212,230,231, 26, 83, 66,105,
-217,199, 9,172, 67, 70,145,195, 48, 10,119,101,222,167, 87, 44,232, 56, 78,242, 89,175,187,226,253,126, 39,252,242,174, 91,236,
-103,214,186,101, 34,161,181, 0, 70, 20,138,253,254, 80, 51,211,103,203,148,116, 92,177,134,115,196, 24,241,222,211,117,157,208,
-195,144, 96,151,243,249,188, 68,181, 90, 39,194, 60,141,161,237, 58,252, 36, 59,230,182,254,121,172, 33, 44, 69,149,101, 42, 16,
- 98,169,234,230,136,228,228,153,250, 90,136,130, 61,215,241,146,143,190, 10,232, 74,245,203, 75, 65, 36,215,181, 98, 10,145,172,
- 20,177,250,178, 75,129, 20,243,130, 50, 45, 20, 78,231, 51,160,153, 38,143, 49,110,241,199,135, 16, 56,236, 15,116,221,142,182,
-109,150,207,164,247,161,186, 0, 84, 21,131,213, 61,250, 84, 85,250,141, 40,182, 83, 29,173,167, 92,152,188,160, 63, 39, 31,249,
-238,251,239, 9, 33,209,117, 29,135,195,129, 16, 60, 74,201,154, 96,153,238, 88,205,174,109,201, 41, 46,129, 81,135,253, 78, 98,
-101, 85, 97, 43, 5, 94, 20,252, 37, 97,181,174,235, 25, 9, 21,153, 87,166, 49,134,154,179, 30,150,208,155, 92,197,176,198, 26,
-246,187,142,253,161, 99, 95, 25,255,135,195, 78,130,102,118, 2, 29,210, 74,213,128,145,203,251,198,226,236,168, 19,191, 89,127,
-146,147,100,206,207,159,237,153,130,166,107,128, 81,170, 4, 65, 93,212, 98,111,211,245, 90, 22,203,160, 56, 31,140,209, 88,103,
-234,218, 65,209,118, 13, 49, 78,236,246,187, 26,204, 83, 73,146, 70,244, 69,199,166,197, 2,113,154,208,149,231,223,116, 45, 41,
-103, 78,195,128,105, 58, 41, 0, 99,224, 39,175,110,184,177,134, 28, 6,178,202,168,125,135,126,115, 11, 70,147,207, 35, 37, 36,
-104, 27,138, 1, 19, 10,241,254,145,164,193,190, 62, 98,142,123,204, 52, 50,188,127, 79,163, 51,198, 89,194,253, 9,211, 29, 68,
-167, 98, 50, 55,135, 29, 74, 23,126,250,213, 87,164, 18, 81, 89,241, 55,191,252, 53, 37,202, 57, 97, 22,204, 87,169,175, 91, 94,
-214,145, 70,203, 1, 47,241,196, 10,149, 51,173,179,180, 86, 97, 74,164, 53, 10, 75,225,246,102, 71,123,219, 98,222,180, 55,127,
-146,159, 57,212, 37,140,254,249,180,179,114,213,193,252, 54,123,245, 39,228,184,178, 94,148,210,105,234, 11,164,167, 46,171, 50,
-125,126,142, 79, 8, 47, 47, 21, 20,170, 92, 30,234, 75, 55, 86,227, 76,231, 84,174,107,218, 89,125,220,139,113,184, 18,162, 28,
-151,176,185,167,197,192, 85, 55,247, 36,217,174, 42,242,117, 37, 79,149,141,229,233, 73,183,174,120,146, 91,190,116,199,155,160,
-148,203,125,191,194,104,196, 10,100,165, 99, 55,198, 60, 1,164, 92, 68,210, 46,151,211,154, 15,158,106,220,234, 60,169,208,117,
-159,110,230, 20,177,249, 3, 90,132, 2,165, 41,213, 87,187, 5,217, 92,189,174,207,253,140,219,235,162,182,215,121,187,242,216,
-140,201,231,202,110, 45, 34, 55, 34, 56,189, 25,175, 95, 0,104,182,250,138,167,133,128,122,166,184,120, 17,180,116,193, 19, 80,
-151,137,108,218, 96,140,173,227,208,202, 9,200, 66, 98, 91,133,121, 5,165, 51,214,130,181,178,222,144,157,247, 72,136,113, 19,
-188,146,165,123,179, 77,141,208, 21,129,208, 44, 98,114, 78, 2, 84,246,135,189,236,102,219,134,182,109,176,214,212,215,111, 14,
-255,144,204,244,162,192,181, 13,135,227,129, 24, 98, 45,206, 12,135,195, 65,162, 81,181,194, 56, 91,211,179, 4, 16,114, 62,159,
-235, 94, 52, 74,151, 70, 61, 32,140,174,193, 40,138,105,156,232,207, 3, 49, 36, 26,215, 46,121,220,125,223,163,148,226,230, 70,
- 48,179, 77,211,224, 39,191, 22,104, 5,188, 15,149, 35,110,121,253,250, 86, 10,148,224, 49,214,210, 29, 36, 52, 69, 88,237,162,
-178,119, 77, 75,204,101,153, 38,230, 34,254,108, 41, 62,164,131,159,133, 91, 37,139, 66,126, 28,125,157,178, 25,124, 72, 76, 62,
-138, 55, 29, 33,148,133,154,181, 30,171, 66, 31, 37,132, 55,109,106,177, 21, 35,211, 20, 36, 16, 37, 43,206,253,192, 56,120, 57,
- 84,114, 33,166, 34,163,238,170, 62, 79, 25, 38, 47, 99,240,219,219, 87,116,221, 94,136,115,122,125, 60,215,182, 52,237,142,113,
-154, 64, 25, 14,135, 35, 57, 37,250,126, 64,107,195,205,205, 17,103, 43, 22, 20, 85,105,128,105,177,248,205,169,126, 50, 2,247,
-181, 88,149, 14,117, 22, 34,230, 34,235,134, 84,164,120,137, 81,108,103, 50,197, 19,187,107, 8,126,129, 26, 45,247, 32, 10,214,
-106,246,251,150,227,113,199,126,223,210,117, 14, 99, 1,189,138,216,134,254, 44, 41, 98, 27,171,166, 28,230,186,194, 98,242,133,
-192, 84, 38, 44,242,120,166,146,236, 74, 46, 75,162, 91,166, 84, 22,124,193, 32, 90,129, 82, 39,160,141, 21,202,158,171,226,220,
-162,114,157,194,236,234, 89,149,232, 90, 87, 93, 22,165, 22,117,243,100,174,208, 90, 3,222, 67,141,163, 53,187, 6,229, 12,193,
- 7,116,179,227, 60,156, 49, 37,243,229,235, 91,110, 15, 13,205,206, 18, 74,196, 30,111, 80,199, 61, 89, 41,138, 15, 98,227, 53,
- 26,237, 44,106,138,224, 19, 33,121,148,203,232, 24,136,239, 78,164, 62,114,255,221, 7,226, 24,249,240,238, 61,195,253, 29,199,
-157,163,140, 19,141,113,194,251, 87,144,187,134,221,241, 21,223,125,247,129,119,239, 62,138, 11, 67,203,170,121, 78, 53,157, 9,
-129,148, 66,227, 26, 74,150,201, 5, 73,174,139, 93,211,208,104,133, 45,137,189, 49,116,141,230,230,213, 30,123,179, 19,161, 92,
-126,177, 83,231, 98, 7,251,220,193, 61, 31, 16, 63, 20,216,178,237, 72,175,199,247,139,184,105, 73, 57,231,217, 27,233,156, 41,
-190,165,137, 94,239,137, 47, 29,238,101, 85,208,215,199, 52,219, 3,108, 75,135,187, 62,212,151,128,150, 45,120,164, 92,116,249,
-148,167,126,252,173, 71,121,249,179, 77, 1, 83,170,194,115,217, 95,111, 10,163,235,206, 61,215,178, 99,209, 24,168,213,231, 60,
- 31, 30,235, 96,121,221,175,201,216, 93, 87, 1, 84,157, 26, 92, 31,162,155, 98,170, 92, 29,186,243,152, 71, 70,240, 53,239, 88,
-155, 69, 28,183,116,233, 84, 69,116,145,204,103, 85, 15, 32,205, 38,107,124, 89,127,232, 85,222, 55, 79, 24,174,117, 20,243, 71,
-113,179,131, 95, 21,243,179, 24,109,142, 69, 45, 27, 49,231,165, 48, 82, 61,243,243,110, 11, 26,253, 66, 17,165,231, 53,137,250,
- 68,161,120, 85, 64,113, 69, 25,180,198, 8,192, 98,246,208, 87,102,187,117, 85,192,104, 68,253, 14, 18, 45,185,172,141,244, 58,
-170,220, 31, 14,104, 37,156,239,174,181, 52,173,227,246,230,166,166,127, 73,124,102,223,159, 5,191, 26, 60,125, 63,112,238,207,
- 76,126,146,110,177,190, 71,243,232,184,105, 90,154,122,200, 53,173,140, 78, 99,148, 14,173,235, 90,154,182,173,108,242, 82, 69,
-100,210,221,107,173,107, 87, 42,104,209, 89, 55,144, 82,102, 28, 5,253, 57,142,158,161,159,136, 49, 45, 49,154,165,228,202,243,
-150,164, 52, 10, 11,155, 93, 56,227, 73,152,224,109,199, 48, 78, 76,211,136, 51,134, 55,111,110, 65, 67,168,121,221, 77,215, 50,
-133, 64,136, 34,130,219, 29,246,196,156, 80,100,114,142,213,253,160, 73,169, 84, 15,119, 17,118,124, 81,156,251,145,156, 11,147,
-143,140, 99,144, 93,122, 17,216,138, 79,169,238,214,133,106, 55, 39, 18,230,146,197,250, 85,215, 31, 41,102, 33,213, 41,195, 56,
- 6,140,182,178,250,240, 82,120,229, 12, 62, 70, 98,146,226,108, 78,122, 68, 25, 30, 78,103, 17,165, 77, 94, 60,243, 49, 50,249,
- 68,223,143, 82, 28,140,137, 41, 68,250,243, 64,138, 98, 95, 27,199,137,243,233, 76,140, 17,163, 69, 80, 41,207, 45,161, 20,248,
- 16,228, 51,175, 21, 33,198,197, 34, 82, 80,132,121,250, 64, 17, 46,251, 44,120, 69,214, 48,170,142,203,115,145,112,156, 21, 32,
-181, 5, 88,231, 37,201,177,105, 13,198, 66,209, 25,138,188,230,193, 7,226, 20,136,163, 71,171, 82,109,102,117, 51,153, 87,107,
-141,222,102, 74,104, 85, 71,231, 50,225, 43, 57,227, 22, 2,157,240, 49,172,179,148, 20, 5, 42,163,205, 82, 20, 24, 45, 96,159,
- 57,184,170,212, 52, 72, 81,210,154, 90, 32, 11,187,160,164,121,237, 80, 73,124,245,177, 72,153, 86,195,109,219,162,141,194, 52,
- 86, 18,251, 92, 75, 49,150,135,243,137,226, 3, 71,103,249,217,207,126,130,109, 53, 73, 23,236,241,128,186,217,161,172, 70,197,
-132, 74,194, 46, 80,214,194, 48,202,218,164,235,200, 62, 49,254,250, 14, 23, 12,251,195,158, 99,103,216,189,126,195,190, 61,208,
- 24, 75,158, 38, 60, 82,196, 78,185,240,112,122,228,230,243,207, 48, 62, 50, 60, 78,220,127,255,145,156,164,137,154,207,178, 42,
- 87, 94,180, 73,206, 90, 97,169, 20,133, 42, 26,163,140,236,208,141,166,211, 26,167, 11,199, 93,203,237,235, 35,246,237, 45,230,
-166, 30,234, 89,201,226,189, 84, 1,134,136,159,234, 78, 69, 61,127, 72, 95,119,128,159,234,214, 95,252,243,138, 8, 44,232,101,
-191,114,193,209, 86,155, 36, 54,189,241,125,235,167,120, 85,197,202, 27,159, 5,113,101,203, 61, 47,101, 1,197,204,182,128, 25,
- 81,120, 17, 68,162,228,176, 76, 64, 94,118,223,171,209, 90,179,121,109, 94,250,249,180, 92,132,133,117, 6, 63,139,168,180,214,
- 23,136, 84,165, 85, 21,121,137,114, 83, 40,107, 84,236,234,218,157,207, 7,215, 60,150, 42, 40,138, 22, 22,250, 44,158,171,214,
-229, 26,219,201,242, 97, 82,245,131,118,145, 54, 55, 31,228, 70, 93, 76, 78,114,205,158,206, 40,178, 82, 53, 76, 68,196, 42,182,
-170,215,101,247,147, 81, 89, 32, 9,115, 55,170,180, 17, 70,242,147,235, 98,253, 95, 81,101,131,143,189, 20,167, 73, 72, 78,157,
- 68,232,109,232,139,140,240,205, 60,109, 41,219,221,156,216, 61,182, 96, 26,181, 73,126, 83, 79,200,188,207,117,230,242, 26, 23,
- 85,138,204,234,114, 0, 0, 32, 0, 73, 68, 65, 84,126,128,247,187, 41, 26, 75, 90,181, 31,243,104,191,138, 87,114, 73,242,238,
-107, 9,164, 72, 37,147,138,216,156, 36,160, 37,215,226, 67, 87,245,187, 19,255,173,181,149,174, 37, 97, 30,243,170,101, 24, 7,
-252, 36, 42,246,126,156,228, 70, 30, 18, 49, 72,247,227, 42,124,197, 24,179, 80,212,110,110,110,232, 58,129,169,164, 40,140,237,
-155,227, 1, 85,217,232,159,189,126, 69,219, 24,156,209,146,211, 29, 34, 86, 91,250,115,191, 40,180, 37, 29,203,212,253,190,197,
- 88,199,228, 3,198,184,218, 8,100,172,213, 52,141,149, 48,148,166,145,164, 40, 99, 24,135,158,225,124,166, 84, 15,115,138,185,
-118,180, 18, 21,154,146, 80,199, 74,150,235,200,106, 69,211,218,197,106,216, 52,173,228,103, 27,131,177,154,148, 19,141,115,144,
- 11,141,109, 72, 94, 32, 38,171, 88,181,160,172,194, 54, 45, 57,105,124, 44,132, 8, 33, 21,178, 82, 76, 41,136,248, 65,205,140,
-125,153,104,148,106,163, 8, 57, 19,115, 65, 91, 71,240,145,146,196, 54, 52,147,232, 6, 31, 64, 25, 98, 86,196, 34, 33, 79,169,
-234, 9,132, 1, 47,107,129,126,152,240, 21,251,169,138,163,100,141, 15,121, 17,233, 57, 39, 83, 21,173,132,241, 30,115,193, 53,
-109,181,125,201,254,223,123, 25,255,135, 16, 32,231,106, 59,213,132,152,201, 74, 30, 55,103, 49,173,151, 84,214,228,200, 44,175,
-181,224, 70,244, 34, 56, 46, 74, 58, 98,173, 65,151, 76,215,200, 4, 73, 96, 38, 85,227,160,213, 66,169,116, 21, 47, 44,186, 38,
- 75,201,154, 48, 38,226, 20,200, 81,118,252,186,118,217,185,172, 20,199, 25,224,100,230,241,186,210, 23,214,208,162,144,196, 62,
- 61,143,231, 37,124, 74, 33, 12,140, 57,154, 85, 24,246, 9, 55, 83, 4,141, 90, 44,142, 50, 21, 83, 34, 40,115, 29,170, 24, 82,
- 82,160,106,144,143,134,144, 35,218, 88,200,137,125,235,184,185,217, 97, 45,148, 52,209, 26, 3, 41,211,180,142, 97,154, 24, 42,
- 54,247,167, 63,249,140,253,222, 98, 27, 67, 49, 26,181,235,192,106,212, 56, 18,199,158, 96, 18,166, 20,244,144, 40, 41,147,209,
- 24,221,226,239,123,250,247, 31, 8,231, 7, 78,195,137, 98,246,196,104,240, 65,244, 29,239,223,125,224,179,159,254, 19,138,210,
-188,127,255,145,215, 55,111,216,237,110, 80, 5,190,253,254, 93, 69,246,218, 74,242,148,243, 96,193,239, 34, 46, 38, 87, 68, 48,
-139,113,149,168, 87,216, 91,205,206,193,126,215,210,118, 13,221,109,135,121,211, 98,203, 51,123,233,139, 17,249, 11,135,250,167,
- 40,114,191,205, 47,181,177,111, 21,202, 51, 7,207, 70,112, 85,244,197, 78,255,186, 83, 42, 27, 50, 27,155, 61,252, 26,242,241,
-242,227,151,109,112,203,140, 74, 93,106,166, 21, 83,251,132, 19,255, 2,111,126, 22,255,189, 24,128, 83,174,204,123,101,149,170,
-173,216,115,189,146,201,212,170,215,151,238, 65, 45, 41, 95,243,115,212,117,132, 80,204,182,224,185, 28, 19,171,151, 8,182, 87,
-170,255,101,204,175, 36, 4, 67,207, 5, 28, 79, 35,106,103,118,247,162,122, 71, 61,203,228, 95, 35, 88,103, 27,203,117,200,203,
-106, 15, 43, 85,176,247,132,173, 95, 46,167, 10, 79,186,241,103, 98,120, 23,197,218, 15,224,140,215,199, 82, 79,156, 9,207, 93,
-215,107,113,182, 78, 21,114,201, 21,214, 83, 81,159,117,135, 63,231, 29,139, 13,141, 42, 8,139, 50,134, 52,114, 3, 16,229,182,
-164, 94,229, 82,240,126, 68,149, 76, 44,165,238,134,165,104,105,156,100, 47,151,250,193,223,215, 61,161, 50,102,141, 98,172,251,
-202,125,215,209,117,187, 69,193, 29, 98,160,219, 53, 18,197,217,117, 76,211,200,135,239,223,211,238,246, 28,142, 71, 82,200, 75,
-216,135,107, 26,166, 48, 49,249,169, 22,124,137,199,199, 51, 41, 38, 92,237, 34,231, 81, 60, 20,148, 83,228, 16, 32, 67,235, 12,
-122,223, 85,224, 75,237, 18,171, 79, 89,198,203, 48, 77,254, 34, 21,240,124,238, 49, 83,157,232,104,133, 31, 83, 61,232, 2,201,
-104,172, 81, 76, 41,211, 53,173,136, 47,231,238,111,214,147,106, 43,138,122, 83, 8, 41, 46,190,250,153,104,102,141,161,237, 90,
-166, 81,188,253, 86, 87, 17, 86, 20, 15, 50, 89,138, 87,103, 12, 89, 73, 17, 49, 77,126, 21,229, 42,141, 79,113, 89, 89,204, 2,
-199, 83,223, 11, 96,199, 53, 40,180,248,219,139,100, 93, 83,132,187,174,150, 60, 6,153,102, 72,225,149,105,186,134, 92,167,144,
- 51,135, 62, 23,121, 30,227, 40,145,171,183, 55, 29,206, 54,156, 7, 79,202, 2, 89, 41, 27, 47,199,214, 74, 89, 18,149, 3,190,
-138,132,103,205,140, 76,142,228, 30,123,216,237, 32, 39, 70, 99,170, 95, 63,161,138, 94, 92, 1, 33,100, 98,144,209,102,137,153,
-161,159, 72,147,167, 68, 25,115,147,133, 25,143, 46,139, 96,174,222,132,182, 70,150,229,121,204, 34, 57, 99,182,246, 45,181,224,
-173,141,117,171,117, 86, 67,174, 65, 57, 41,229,170, 13,168,187,114,161, 97,213,206,124, 14, 63,210, 24,109, 37,145,210, 32,218,
-131,106,235,157,123,222,164, 20, 93,211, 50,158, 39,206,131, 7, 20,111,111, 95,241,230,230, 13,167, 62,208,135,192,187,199, 7,
-190,252,217,207,200, 12,164, 70, 67,137,232, 32,105,104,212,213,137,138, 25, 6,113,149,168, 61,128,135,161,103,154, 60,185,235,
-120,243,243,223,225,227,253, 68, 76,154,251,247, 35,253,249,145, 98, 44, 95,191,127,228,225,161,199,154,134,239,190,253,134,159,
-124,145, 72,105,228, 39, 95,188,229,241,148, 57,245, 3, 90, 25, 73, 12, 84, 10,165, 45, 62, 38, 58,215, 48,250, 68,215,216,138,
-216, 46,180,173, 35, 17,137,206, 16,116, 70, 91,139,107, 59,112, 14,186,221, 85,158,250, 70,205,254,169, 60,149, 31, 19,230,242,
-143,181,181, 61, 21,142,109, 66,102,174,111,172,121, 69,155,206,187,241,114, 97,111, 43, 75, 98, 25, 87,105,172,101, 91, 9,160,
-158, 36,169,101,158,210,242, 74, 77, 33,123, 78, 52,248, 68, 47,176,148, 6,219, 31,112, 30,121,233, 11,210,157,218,164,180,205,
-232,215,235,252,117,181, 25,215,207,175, 73,121, 98,195,155,131, 80, 54,238,129, 79,228,211,207,175,233,181,109,177,108,128,235,
-114,208,233, 75,252,234,102,116,174, 55,190,240, 11,139,221, 51, 12,131,114, 21,186,162,175, 61,251,155, 46,187,108, 66,216, 46,
- 53, 6,249, 9,180, 70,158,103,185, 44,238, 54,158,195, 89, 57,189,142,242,205,197,245,165,102,138,224,246, 11, 85,185,120,189,
-159,123, 29,103,164,238,172,218,159,199,250, 70, 43,154,198,162,102,255, 93, 29,237,151,154,239, 93,114, 1,181,238, 29,199, 25,
-154, 81, 59,191, 89,113, 14,144,131,216,175,180, 49,130,115,109, 59,172,117,156, 31, 79,168,182,161,115,142,156, 34,197, 90,178,
- 86,132,202, 54, 87,200,141, 55,120,129,175,204,147, 22, 9,212,144,197,206,227,233,145,146,197,195,155, 42,192, 69,172,113,242,
-248,143,143,143, 53, 39, 93,196,121, 41, 72, 38,186,146,187, 41, 26,240,125, 79,211, 56,246, 21, 13, 91,178, 40,159, 75,142,117,
- 71,107,101,167,171,138,132, 84, 88, 73, 50, 27, 39,241,222,155, 58,138, 85,181, 75,179, 56, 82,150,209,119, 12,145,166, 17,229,
- 52, 26,176,122,225,255, 43,165,112, 78,166,101, 57, 23,148, 49,130, 73, 85, 18, 37, 90, 74,228,112, 56,146,146, 4,181,248,152,
- 49,198,226,199, 17,146, 20, 92, 74,107, 74, 20, 65, 89, 1, 26,107, 73, 57, 51, 85, 50,156, 36,164, 21,180,113,164, 34, 34, 70,
- 99,215,195, 52, 4, 33,181,105, 45, 76,238, 16, 2,214, 56, 98,202,132, 44, 2, 62,133,248,253, 67, 12, 56, 55, 39,203,137,104,
-203, 24,205,148, 3, 25,216,117, 59,166, 97,146,199,204,129, 93,231, 32, 43,110,111,143,188,126,125, 36,132,196,240,235,239, 40,
- 37,214,117, 88,237,170, 85, 94, 2,134,180, 22,132,236, 28,227, 59, 95,159,203,212,171,164, 58, 19, 21,241, 89,152,198,101,170,
- 35,117,175, 90,114, 33,114,132, 20, 10,105, 10,194, 40,240, 25, 93, 68, 84, 56,115, 44,174,155,156,249,250,151,149,157,172,107,
- 36,251,189, 46,167,212,122,111, 44,172, 92, 8,106,241,181,181,233,137, 31,187,136,221,115,190, 7, 86, 76,183, 81,194, 67, 87,
-117,186,137,150, 53, 72,161,224, 18, 80, 34,187,227, 1, 85,175,183,182,235,234,193,174,121, 24, 35,247,227,137, 93,187, 39,188,
-127,160, 15, 9,148, 65, 89,197,175,191,251,142, 63,252,163,223,197, 24, 40,173, 76,215, 84,170,132,140, 12, 4,233,150, 75, 31,
-106, 1, 31,120,255,112,226,221,183,247, 40,101,232,240,220,134, 1, 91, 6,110, 14,183,236,204, 45, 15, 39,197, 57, 69, 30, 79,
- 35,223,223,157,232, 90,205, 52,158,104,218, 14,159, 11, 62,131,178, 66,144, 60,245, 94,158,103, 81, 36,234,193,142,194, 26,199,
-164, 44,100,207,177,115,248,226,113, 78, 19, 90, 71,210,133, 98, 12,218, 25, 76,211, 66,215, 61, 61,212,159,116,108,234,135, 69,
-111,207,117, 60,255,216, 95,159, 26,223,171,162, 22,113,219,117,167,121,209,225, 22, 54, 29,223,147,115,245,242, 64,191,232,246,
-213,122,152, 60, 23,171,122, 81, 8,124,170, 16,185,172, 65,174,197,112,107,200,199,181,135,125, 19,148,179,233, 96,150, 34,227,
- 42,231,102, 91,143,172,221,253, 11,239,203,246, 48, 87,234,147,173,250, 10, 32, 90, 90,210, 85, 84,166, 69,225,158,235,226,124,
-166,200,109,224,245, 11,176,167,168, 75,240,206,172, 47,152,211,206,244, 92,129,111,244,122,121,169,242,203,179,215,227,133, 8,
- 7,174, 10,191,106,199,163, 60, 51,250,191, 44,138,182,233, 96, 92, 67,141,158, 74,252, 94,156,110,204, 69,112, 97,118, 13, 36,
-154, 74,113, 75,217,175,128,158,170,226,141, 49,160,116, 17, 48, 75,245,148,207, 56,211,105,154, 8, 57, 45, 58,149,148,228,176,
- 51, 5,180,177,132, 28,107,184,203, 40,138,244, 12,157,181,132,156,152, 98, 98, 8,158,172,101, 52, 44, 72, 79,195,212,143, 11,
-195,160, 84, 26,151, 86, 66, 84, 59,247,167, 10, 8, 81,164, 82,197, 95, 62, 96,140, 37,214, 52, 48, 73,117,147,104,213,195,110,
-135,171, 34,166, 82, 50, 57, 38,156,181,180,198,144,125, 64,217,122,184, 40,141,216,125, 71, 92,211, 17,234,247,180, 70, 4,107,
-198, 40, 98,244,117, 95,232,240,147,151, 53,133, 54,164,162,200,152, 10, 58, 81,248, 41,208, 58,135, 86, 73, 52, 11, 74, 99, 40,
- 56,163,105, 93, 43,153,225,192,232, 61, 37, 69, 92, 35,232, 89,171, 21,170, 36, 82, 12, 88, 99,137, 81,236, 79,164, 44,123,219,
- 90,148,148,186,187, 45, 85,100,214, 26, 65,131,234,106,173, 11, 73,198,192, 93,219,202,158, 61,103,138, 74,139,222, 70, 33, 29,
-182,107, 12, 41, 38, 38,239, 49,214,213,145,180, 8,218,114,138,180,109, 83, 29, 1,171,174, 38,198, 32,160,157, 25,110, 82, 50,
-141,145, 52,180, 67,103,120,125,123,203,225,216, 98, 26,205,195,131,120,254,141,150, 17,109,174,247,102, 99,100, 60,171,116,169,
-215, 97, 38, 71, 93,237,176, 91,183, 11, 27, 43,161,100,169, 79,117,122,147,102,130,164, 42,139,237, 52,165, 68,127,234,235,251,
- 92, 19,216,230, 38,170,126,163, 25, 90,165,180, 38,215,176,150, 82, 74, 93, 27, 93,179, 36,202,178,107, 55,198,205, 91, 63,225,
-144,168, 88, 17,185,235,223, 55,218, 80,114, 45,250,178, 36, 64,170,185,145,211, 69, 58,117, 45,113,192, 41, 84,247, 65,200,116,
-173,140,167,117,181,126, 53, 78,222, 11,237, 90,134, 20,152,208,156,250, 17,134,140, 61, 9,128, 70, 41, 69, 99, 29,143,195,196,
-187,111,222,243,213, 79,111,101,221, 87,199,223,115,208, 14, 65, 86, 69,105, 26,201,218,240,240,120,230, 55,223,220,241,225, 28,
-240, 89,241,197,151,111,217,159, 60,254,225,129,199,143, 15,148,164,105, 15, 71, 92,183,103,215, 21,134,126,168, 44,132,142,239,
-222, 15,124,247,225,204, 41,105,238,167,192,144, 11, 35, 48,197,140, 79,137, 84, 10, 55,183, 55,188,253,234,103,132,201,115,127,
-247,158,157,150, 20, 55,114, 32,169,150,168, 13,106,231, 72,182,144,173, 22, 27, 94,235,176,107,136,203, 11, 7,115,225,199, 38,
-160,254,246,221,123,185,132,178,106,173, 62,141, 77, 85,151,226, 52,181, 25,243,204,255,175,235,133,155, 54,103,118,121,225,185,
- 21,181,238,217, 63,249, 51,105,125,161,122, 22,234, 96,121, 49, 47,254, 83, 24,221, 45,152,100,157, 6,108, 44, 83,245,207,103,
- 4,250,214,159, 46,251, 43, 25, 5, 74, 39, 87,158, 30,200, 23,190,246,234,225, 87,107,144, 13,234,249, 41,244,165, 19, 97, 43,
-241,159, 51,217, 97,235, 74,211, 90, 65,154,133,103, 8,223, 96,230,228,111, 92, 19, 37,151, 11, 68, 42, 85,221, 57,219, 98, 46,
-187,238,149, 42,183, 94, 27, 27,178,239,143, 27,247, 44,169, 93,235, 96, 65, 45, 5,234,246,103, 92,128, 49,207,189,135, 79,150,
- 82,101,227, 86,216,102,170, 87, 27, 74, 78,203,120, 81, 27,195, 52, 13,164, 28, 22,221,201, 58, 33,145,189,166,132,146,136,106,
-247,124,238, 37, 84,196, 90,218, 86, 72,113, 49, 70, 50,114,192, 27, 20,218, 89,252, 24,233,251,158,125,215, 49, 14, 35,166,192,
- 99,146, 88,201,199,243,153, 62, 4,176,166,194,106, 12, 67, 74,210,137, 26,197,126,191,227,230,230,149,140, 13, 21,140,253,128,
- 41,138,186,194, 37,147,165,235,175,108,120, 52, 76, 33, 72,241, 85, 50, 93,219, 98, 54,130,211,105, 18,149, 60, 9,162,151, 44,
-234, 24,164, 35, 52,213,155,222,185, 29, 33, 73,134,123, 74, 89,172,114,198,241,248,120,174,130, 66, 71,169,113,161,109,219, 10,
- 2, 55, 68,108,211,162,170,149,142,156, 36,151, 61, 77, 24, 13, 93,227, 56,238, 26, 90,103, 80,100,162, 18, 2,154,194,208, 58,
-135, 15,146,217, 46, 13, 96,192,213,196,186,214, 25, 82,206,180,117,114, 48, 11, 79, 37, 83, 92,112,182,143,167,199,101,205,150,
- 82, 68, 1, 77, 29,233, 15,253, 25,171, 13,164,218,205,166,140,178, 6, 31,163, 28, 40, 41,139,181, 48,122, 81,229, 43, 93,163,
- 66, 83,245, 93, 75, 65,167,245, 60, 18,207, 34, 30, 12,114, 24,246,253,137,214, 89,116, 78, 28,154,134, 87,135,134, 67,167,104,
-109,146, 9,135, 65,246,240,117, 50,161,141, 20, 29, 95,124,245, 21, 63,251,234, 75,254,246,111,127, 73,223, 15, 53, 83, 93,180,
- 81,219, 48,161,178, 42,139,137,185, 48,134, 4, 90, 38, 7, 33, 85, 93, 0,226, 45, 87, 40,114,136,203,253, 83, 52, 43, 85, 43,
-146,146,136,111,173,188,110,169, 78,206,174, 45,169,107,225, 93, 46,120, 33,179,245,209,106, 93, 3,176, 36,152,165, 66, 21,228,
- 83, 89,106, 84,110,181,215,170,146, 43,243,125,221, 66,198,152,100,114,170,221,242,217, 17, 61, 24, 28,218,150,221,126,199,228,
- 7,193,178,170,217,234,102,193, 53, 4, 21,192, 88,162,150,130,232,246,176,199,168,136, 53,154,111,127,243, 61, 95,190,121, 37,
- 41, 95,173,220,247, 67, 85,191,107,165, 41, 49,242,120, 58, 49,228, 76,177, 13,183, 55, 55,156,194,153,239,239,123,250,119,143,
- 60, 76, 19,244,247,188, 61, 28,249,240,254, 76, 81, 31,216, 31, 44,237,174,195, 79, 35,141,187,229,176,127,195,185,143, 60,246,
-247,188,187, 59,113, 55, 4, 62, 62,142,248, 4, 33, 65, 66, 4, 81,231, 83,207,248,238, 61,255,234, 95,254,107,126,247, 15,255,
-123,254,250,255,254, 83, 66, 58, 99,138,166, 36, 69,202,138,162, 45,205, 77, 67,123,211, 80, 26, 13,173, 89, 59,245,173,130,123,
-185,193,171, 79,143,200,159,179, 39,253, 86,219,244,170,156, 80, 92, 90,196,158,222,100,213,179,187,223, 92,245, 86,219,195,123,
-233, 12,235, 23,148,114,121, 64, 92,119, 90,229,170, 88,184,248,186,235,253,241,230,160,251,177, 7,250, 75,175, 83,174, 41, 39,
-235,254, 90, 45, 98,147,178, 57, 44, 46,200,178,149,237,190, 80,224,102,133,127, 97, 1,112, 44,251,219,205, 96,255,162,137,175,
-234,240, 39, 47,228,188,199, 86, 91,187, 86,217,172, 51,202, 37,140,165,238, 61,217, 56, 2,102,211,247,140,127, 84, 23,172,129,
-178, 0, 39,230,145,255,162, 86,159,127,196, 92,214, 84,190,103,166, 8, 79, 34,116,159, 73, 14,124, 50,171, 40, 44,197,226,118,
- 98,242,252,251,116,249,216,215,182,203, 37, 97,111, 67,249,155,119,154,185,194, 49,164,211, 41,181, 35,209, 21, 11, 42,228,181,
- 88, 15,128,217,223,173, 40,140,195, 80, 57,217, 98, 9,139, 57, 51, 12,163,236, 41,181, 38, 68,177, 40, 77,125, 15, 74,209, 54,
- 45,195,121,128,162, 24,106,176,202,161,219,227,189, 68,133, 42,235, 68,236, 24, 35,206,118,216, 70, 67,201,164, 41,114,255,254,
- 78,108,111, 64, 63,246,180,109, 71,107, 91, 81, 91, 43,200, 51, 73, 12, 48,170,112,232,186, 37,255,192, 79,129,243, 48, 10,173,
-110,156, 68,193, 94,192,216, 88, 89,236,178, 82,152, 5,118, 70, 91,250,177,231,112, 60, 48, 77, 53,166,117, 28,105,218,157,240,
-225,135, 73,210,232,144, 93,119,172,227,211,118,215,226,189,116,176, 41, 38, 84,150, 29,169, 81,176,239, 90, 90,167,233,172,162,
-113,166,194, 86, 12, 40, 77, 72,153,148,225,220, 79,140, 85,252, 53, 76, 1,163,231,171,184, 10,242,148, 8,184, 82,165,178,229,
- 36,227,232,211,249, 84,163, 87,253,162,158, 78, 41, 75,183,150,178, 92,239, 57, 11, 72,168, 30, 58,122, 94,191, 24, 37, 86,178,
- 36,135,144,217,136,120,115,146, 12,248, 82,191, 70, 41,203,110,215, 85,143,187,216,252,146,143,236, 92,139, 38, 19,167, 9,239,
- 50,131, 21, 47,127, 78, 22,218, 6, 48, 11,159,192,106, 85, 99, 76,225,205,171, 55,252,241, 31,255,123, 62,124,120,207,195,195,
-137,198,153,205,103, 99,155, 25,161, 80,198, 98,170,229,241, 60,140,216,106, 45,155,239, 36, 70, 23, 26, 39,169,151, 37,213, 34,
-117,190, 57,150, 88, 39, 15, 90,242,227, 17,129,110,206, 25,178, 76, 59,200,165,218,178,114,117, 37,196, 42,136,148, 21,132, 20,
-118, 2,209,201,117, 34, 5,245, 58,170,211, 64,106, 58,158,174,205,212,204,129,207, 64, 76,226, 70,208,170, 34,172,163,128,157,
- 26,227,132, 30,104,180, 92,247,135, 22,107,160, 57,236, 33, 37,108,235,234,125,181, 96, 93, 67, 46,103,156,113,188,121,117, 32,
-246, 39, 94,239, 90,142,135, 35,254,241,158, 15,119, 15,244,167,137,221,126, 79, 14, 2,248, 17,224, 86,130,148,137,163, 39,148,
- 66, 50,150,127,120,247,158,199, 94,241,161,143,124,236, 7,154,156,185, 61, 54,252,228,171, 47,105,156,101,120,244,120,175, 25,
- 30, 61,249, 49, 50, 14,145,199,199,123, 52, 45, 69, 25,166,193,115,186, 31,248,254,254,204, 41, 2,202, 18,107,104, 77, 65,118,
-249,211,253, 3,255,251,127,249, 47,252,193, 63,255,125,254,248,127,254, 95,248,203,255,227, 63, 19,238,190, 39,103, 35,186,134,
-146,217,191,186,197,236, 20,102,223,146,157,194,188, 62,188,250,147, 82,213,239,215,163,226, 5, 24,162,158, 30,232,207, 89,212,
-126, 59,174,187, 89, 34, 48, 55, 84,149, 11,225,145, 82, 79,163, 51, 47,162,192,183,177,153,219,199, 94,201,164,203,121,174,213,
- 85, 94,250,214,138,164,212,179,250,170,235,177,249, 74,142, 43,155, 14,244, 25, 45,194, 11, 58,133,139,215,103, 59,125,168, 19,
- 6,189,224,122, 89,172, 85,170,238, 97, 69, 32,151, 22,168, 73, 89, 16,180,101, 13, 77,169,130, 67,107,196,163,110,141, 84,212,
- 70,109,168,105,106,139,236, 41,155, 3,182,114,152, 23,162, 92,174,161, 46,106,205, 30, 87,122, 85,211, 47, 35,184, 89, 11, 80,
- 54, 17,168,215,201,115,235,161,190, 88, 37,203,108, 3, 91, 5, 45,179, 40, 30,117, 9,253,173, 6,150, 53,157,237, 25, 31,249,
-115,215,224,115,239,201,245,251, 80, 54,175,161,186, 40,167,184,148, 23, 46,149,163, 90,197, 73, 91,108, 81,189, 78,119, 93, 83,
-133, 97,165, 90, 0,229,112, 16,254,122,168, 97, 23, 6,107,101, 20,105,173,165,237, 90,177, 95, 77,158, 97,154, 40,185, 16,162,
- 88,182, 38, 31,164,147, 15, 98,249, 41, 41, 51,244, 35,231, 97, 68,215,100, 47,133,198, 56,199, 52,121,226,224,201, 62, 80, 98,
- 34,199, 72,244,129, 16, 60, 90,233, 74, 48,155, 3, 81,228,121,165, 10,143, 9, 33,210,247, 35,211, 56,213,113,172,128, 85, 78,
-253, 80,115,215, 53, 41, 75,132,231, 48, 70, 98, 17,103,200, 48, 69,124, 76,100,101,152, 82,198, 39, 24,125, 36,100, 40,202,242,
-240,112,166,104, 41, 86, 10, 90,252,216, 74, 11, 49,207, 7, 40,133,152,196, 14,103,172, 96, 95,115,142,116, 77,131,166, 96,181,
-240,175, 59,103, 56,180,142, 55, 55,123,217,165,171, 82,179, 13,172, 64,104,124,148, 92,240,232,235,148, 67,132,108,186, 38,138,
-205,188,134,110,183,103,242,113,113,153,160,103, 70,127, 21,111,206, 90,134,178, 70,231,206, 10,111,165,205, 2, 48,174, 66,115,
-217, 47,215,117,217, 44, 6, 91, 2,166, 42,191, 97,169,123,149,192,120,102,174,193, 56, 78,210, 85, 83,120,251,246, 53,166,254,
- 92,243,202, 35,164, 76, 42,154,126, 74,196,168,240, 99, 97, 24,124,141, 93,149,207,237,249,124,230,215,191,250, 21, 31, 62,220,
- 85,146, 91,185,210, 9,173, 66,228, 57, 24,165, 84,152, 80,140, 17,173,141,100,192, 91, 67,227, 76,117, 34,148,197,154, 58,123,
-215,181,130,182,113,116, 77, 43,244,183, 82, 45, 94, 10, 92,227, 40,185,186,161,138, 90, 92, 27,133,173,152, 81,180, 7,214, 88,
-108,117,180, 58, 99, 48, 21,213,171,171, 29,214, 85, 75,168,174, 62,237, 82, 42, 62, 54, 11,196,102, 22,167,234,250,190, 25,109,
-216,119, 59, 72, 69, 56,240, 90,177,219, 57,154, 78, 86, 29,166, 72,161,162, 75,225,230,230, 72,202,153,135,135, 71,148, 86, 28,
- 77,225, 95,253,254,239,241,179,159,188,102, 24, 30, 56, 28,118, 52, 74,227,246,142,215,191,248, 9, 49,123,116,169,214,178,209,
- 67,150, 64,159,187,251,145,119,143, 35,125, 48,124,253,190,231,253,105,224, 28, 34,253, 24,121,247,238, 3,253, 56,224, 67, 34,
- 38,131,182, 59,188,118,124,253,237, 3, 15,143,137, 16, 19,167,243, 35,239, 63,222,113,247, 48,240,155,239,238,185,247,153,104,
- 91, 66,150,207, 84, 90, 2,141,132,155,144, 74,225,219,239,223, 49,244, 3,255,225, 63,252, 71,254,254,239,126,133, 33, 97, 75,
-226,216, 25, 14, 59,203,237,235, 3,230,182, 69,127,126,139, 45, 27, 88,246,143, 13,104,121,169, 75,253, 71,237,211,127, 11,177,
-124,217,192,211,203,194, 9, 95,149,235,203,152,105,190,225,110,187,179, 43,222,122, 81,159,126,236,107,202,156,122, 66, 79,122,
- 57, 97,237,250,128,121,254, 80,223, 48,204,103,220,237,124,192, 84, 33,140,209, 44,248, 67, 17,216, 80, 41, 82,171, 63,127,187,
-127, 86, 27, 49,201,114,232,214, 27,139, 74,229,197,151,187,104,179, 42,242,175,115,239,183, 7,219, 51, 29,238,156,180,164,171,
-130,127,166, 66, 21,214,231,161,230,247,103,254,110,229,234,245,221,168,232,231,226, 66,177,170,214,231,180,120,245,236,166,157,
- 39, 99,191,151, 10,206,231, 59,251, 53,154,229,130,138,159,213,147, 52,185,121,132,175,212, 42, 22,152, 39, 44,186,218,254,140,
-210,140,211, 64,215,181,160, 5, 79, 25,147, 40,161, 75, 41,116,187,142,166,181,213,114,168,232,218,142,211,249, 76, 74,165, 18,
-190,162,236, 17, 21, 50,230,243,129,146, 51, 59,215, 81, 50,196, 26,147,170,180,163,233, 90,250,254,204,187,251,143,148, 24, 49,
- 40, 26,237, 42,221,111, 62,172, 50,166,162, 82,115,202,244,253,136,247,147, 8,149,173, 33, 41,241,177,203,224,200,129,179,204,
-239, 94,204, 25, 99, 27,118,199, 29,211, 24,233,135, 65, 70,215,245,112, 83,104,154,195, 13,251,189, 4,195,220,159, 31,107,160,
-144, 1,173,105, 93, 67,242,129, 97, 12, 24, 43, 5, 9,165, 16,166,243,130,160,158, 39, 76, 33, 6, 66, 72, 24, 45, 55,231, 28,
- 38,156,145,253,121, 99, 45,175, 14, 59,118, 86, 19,189, 39,170, 36, 41,107, 89,222,159,249, 0, 84,115, 68,173,151,207,138,214,
-107,113,158, 82, 18,219,108, 8,100, 10,182,113,104, 43, 58,134, 84, 10,218,154, 5,223,156, 66,168,136, 84,217,181,231, 88,239,
- 33,198, 80, 66,216, 20,191,114, 80,249,148, 46, 86,149,243,138,134,106,181,220, 94,111,115,152,142,247, 94, 72, 15, 37,139,133,
-202, 41,218,221,129,105,212,236,186,142, 24, 3,221,241, 64, 63, 14,228, 52,113,122,248, 64,201,178, 90,113,214,160,116, 2,165,
- 8, 83,224,215,191,250, 77,189, 46, 77,157, 6,176,168,203,103,205,139,169,161, 79, 90,131, 51, 14,107,229, 0, 23, 60,171, 88,
- 40,181,146, 2,101, 94, 97,234, 77,217,106,173, 28,206,185, 90, 31,203,102,172, 46,107, 5, 17, 25,146,100,207, 79,109, 18, 99,
- 12,116, 93, 71, 74,117,221, 80, 50,170,134,245,176,124,166, 51,141, 53, 56, 35,158,243, 28,203,178,178, 16, 91,243, 44,148,149,
-187, 64,202, 5,227,236,114,159,207, 33, 9,220, 69,131, 53,185,130,104,228, 90,211,198, 44,244,147, 20,228,144,110, 27,121,175,
-127,239,159,126,201,190,201,220,127,255, 27,254,240, 15,255, 57,163,143,124,243, 87,127, 67,127, 58,201, 90,160,181,228,211, 25,
-139,162,164, 76,242,153,243,195,196,175,190,254,192,135, 80,240,201, 96,237,158,198,102,166,152, 40,202,210,238, 94,129,109,249,
-216,103,238,222,223,115, 58,189,163, 61,236,241,169,208,143, 35,218,237, 73, 35,244, 99,224,251,147,231,195,148,137,170,126, 62,
-231, 6, 51,203, 61,158, 20,235,109, 70, 83,140,225,207,255,250,151,188,186,125,197,239,255,209,191,225,175,254,244, 63,115,219,
- 89, 82,242,168,156,177, 77,131,106,219, 75,245,251,179,184, 87,197,146, 1,190, 29,207,111,179,203,203,188,195,252,209,230,181,
- 75, 75, 87, 94,110,238,207,135,165, 92, 40,141, 75,185,176, 75, 92,231,100,109,178, 72, 46,215,205,245,224, 41,155, 35,227, 58,
- 40,237, 66,212,117, 69,149, 83,171,226,109,249,218,124,129,125, 93,179,203,231, 73,195, 86,172, 53,147,180,214,133,118, 97, 77,
- 87,223,244,164,165,238, 80,171,119,217, 40, 93, 83,164, 10,182,105,112,198, 48,140, 99,237,122,202, 19,205, 91,153,199,245,155,
-220,149,249,176, 93, 11,128,167,111, 75,220, 38,144, 21,208,179, 71, 72,109,115,201,103, 14,116,125,164, 44,149,186,209,171, 96,
-104,123, 98,235,250,125,228,252, 83, 23,175,241, 34, 69,219, 62,217,173, 48,176,108,253,249,151, 9,120,252, 0, 7, 97,254,187,
- 51,153,105,251,245,235,182,161, 92,141,219,159, 78,106,148,186,108,118,174,115,232,175, 76, 7,203,180, 36,165, 72,211, 24, 92,
- 99,132, 56,102, 36, 66,113,183,107,100,186,162, 11,218, 66, 76,129,166,233, 24,199,145,148,178, 8,195,148,236,218, 75,129,243,
-169,134,164,236,118,114,128, 77,158,113,154,104,109, 35,226, 46, 52, 31, 63, 62, 72,172,101,206,232, 2,199,182, 67,165, 92, 89,
-218,174,238,115, 69,229, 61,122, 95,129, 41,178, 68, 23, 59,150,252,183,199,243,132,181, 50,238,246,190,178,194,235, 4,193,199,
-196,253,135,123, 1,175,228, 76,211,117, 98,223, 41, 21, 62, 98, 45,166,109,249,240,112, 79, 81,194,118, 80,181,179,114, 74,147,
- 80,184,198,209, 15,189,248,109,181, 38, 86, 36, 41, 57, 67,204,139,138, 91, 43,161,106, 89, 45, 93,156,213, 50,106,182, 20, 74,
- 10,164,162,233,118, 29,166, 21,142,185, 50, 18, 38,159,115,194,217,134,126, 26,241,161,160,148,197, 24, 41,132,141,179,232, 34,
-187, 92,153, 62,248, 5,117, 60, 13,211, 18,146,228, 39, 73, 20,235,186,134, 24, 37,254, 84, 25, 57, 88,218,182,193,251, 80,217,
-235,134, 88,146, 8,213,138, 90,174,215,237, 61,108,185,118,106,231, 95,114, 89,226, 98,231,148,182,105,154, 36,124,165, 2,157,
-222,127,248, 64,201,153,166,105,133,116,135,162,219,107,206, 99, 18, 81,224,238, 72,240, 9, 75,170,135,162,166,113,141,224, 87,
- 81, 53,208, 69,154,135,113, 28,217,237,118, 21,246, 19, 41, 41, 99, 85, 38,165,128, 82,208, 54, 13, 37,167, 26,144,226,171,250,
- 92, 46, 96, 85,159,179,190,104,108,106, 51, 83,169,109,210,225,215,157,120, 17,209, 94, 65,120, 9, 69,175, 52,200, 5, 12, 85,
-139,134, 28,171, 88, 46, 11, 47,160,212,233,141,208,251, 82, 45, 46, 4,171,172,107, 97, 34, 83,129,117,162,106,141, 37,165, 72,
-172,107, 13, 85, 25, 7, 70, 23,118,109,131,210, 53,105, 46, 38,110, 14,123,116,145,191,183,107, 45,209, 79, 52,198, 96,145,194,
-243,241,244,128, 74,133,127,241,111,255, 5,175,127,241, 79,248,205, 95,254, 13,109,107,121,184,127, 32,140, 30,123,212, 82,200,
-249, 64, 25, 39,252, 57, 50,244,145, 24, 44, 31, 63, 60,144, 77, 87,217, 22,138,157,177,152,198, 50,134, 19, 49, 42,166,146, 57,
-188,126, 77, 86, 35,239,223,125, 96,244, 66, 75,188, 63, 15,180, 77,199,121,128,199,177, 16,180,173,107, 5, 1,134,229, 20, 49,
-181,177,203,245,206,154,171,184, 50, 99,248,211,255,231,255,227,143,254,183,255,149,221,103,159, 17,252,189, 52,121,117, 12,175,
- 15, 29,229,208,173, 68, 57, 85, 71, 76, 79, 18,215,212,203,254,243,217, 2,177,181,243,188,220,102,111, 47, 19,245, 12,100,125,
-179, 55,189,226,164,173, 35,242, 57,158,177,108,132, 76, 91,202,208,229,141,182,108,210,221,230, 49,236, 2, 23, 41, 60,189, 99,
-207, 55,231,178,238,153,133,103,174,214, 81,183,218,122,168, 87,216,130,252,179,220, 36, 43, 90,173,142,246, 54, 4,186,217, 51,
- 63, 31,104, 42, 47,199,138,214, 5,103, 53,214, 66,219, 88, 26, 39,162,152, 56, 77,248,105, 92,200, 66,128,112,170,151,168,220,
-188,138,193,106,222,180,169,153,224,115,186,145,218,238,209,175,184,178, 69, 65, 86,171,103,148,122, 3,170,159, 47,138,214, 24,
- 99, 37,222,179,138,226,102, 34,157, 4,121,232,229,123, 45, 41,113,170, 92,240,210,183,206,193, 39,215,136,122,106,145,188,238,
-230,103, 24,210,133,125,113,126, 63,175,174,203,173,187, 97, 38, 37, 42,173, 54,251,254, 21,251, 59,223,125,117,125, 3, 75, 37,
-214, 93, 25,239,175,126,182,237, 9,191, 38, 25,202, 75,146,104,156,165,237,172, 36,157,133, 32,129, 58, 42,163, 85, 89, 68,124,
- 41,199,170,126, 22,244, 99,202,146, 82,149,178,236,112, 39, 31,208,104, 14,251, 35,214,138, 32,202, 88, 83, 15, 89, 25,199, 63,
-158, 78, 34, 8, 13, 9,135,230,205,254,136,203, 5, 91, 63, 19, 51, 56, 36,134, 68, 44,153,172, 4,228, 43, 94,110,105, 99,167,
-144, 8, 81, 70,186, 83,136, 88,215,144,178,136,231,124,136,244,163,103,119, 56,146,149, 18,203,144, 0, 18,150,233,145, 8, 3,
- 13,211, 56,214, 66, 76,124,235,165,166, 1,197,224,241, 33, 16, 98,146, 12,242,146,103,139, 51,198, 57, 41, 78, 92, 83,189,217,
-107,201,157, 98,194,104,203, 97,183, 39, 5,143, 82,121,177,108,233, 89,240, 24, 11, 37,202, 62,215,123, 9, 65,153, 66, 34, 38,
- 68, 64, 84, 88,210,192,230,189,178, 53, 14,148,194, 40, 91,213,220,176,239,118, 4, 31, 22, 71,202,172, 97,208, 53,192, 72, 86,
- 5,121,217,151,215,143,136, 76, 0,178, 90, 58, 90,125, 49,211,146, 14,125, 46,130,203, 38, 43, 66,192, 51,150, 87,183,175, 8,
- 33, 45,215,186,173,145,154, 93,211,146,115,196, 79, 94,152,249, 20,162,156,254, 20,192, 88, 41,236,231, 27, 91, 12,129, 82, 41,
-123,228,132, 74,169,118,221,162, 46, 39, 69, 74, 8,116,141,101,215,136,253, 81, 33, 46, 13,163,168, 43, 14,181,196, 17, 59, 55,
-195,127, 10,214, 25,140, 93,239,237, 37,165,133,228,136,210,228, 13, 1,114,241,224,187, 70,112,168, 26,156, 86,216,106,238,181,
- 90,215, 85,162, 8,237, 74,201,184,154,230, 54, 67,119, 82,146, 34,129,234, 10, 17,241, 27,148, 36, 86, 58,205, 10,101,202,185,
-200,216,158, 34, 76, 4,149,105, 26,201, 84,208, 26,137, 55,214,133, 93, 99,105,172,162,181,134, 56, 5,118,221, 78, 18, 9,173,
-229,103,191,248,156,127,251,239,255, 29, 55, 63,185,225,244,205,215, 60,222,221,179,239,246,244,247, 15,180,251,134,195,241, 70,
- 8,114,193, 19, 63, 60,114, 62,123,254,238,155, 59,126,245, 15, 31,249,254,190,231, 52,140,156,199,137,209, 39, 82, 42,248, 48,
-241,246,237,107,190,250,242, 75,162, 79,124,255,205,183,248, 97,162, 20,203,233, 60, 10,144, 40,107, 9, 99, 26, 61,253,232, 25,
-235, 4,137, 26,194, 99, 20, 52,149, 4, 90,106, 68,120, 44,185,186, 40,132,155,239,195,196,127,247,123,191, 67,255,221,215,188,
-114,154, 87,135,150, 87,111,142,152,207,143,164, 47,223,172,209,171,165,168,103, 69, 66, 63, 4,151,121, 2, 24,249, 17, 93,251,
-162, 32,190, 82, 40,175, 85,239, 37, 92,100,153, 16, 92, 61,230,178, 7, 35, 95,126,172,182,171,208,234, 35, 46,172,214,176,203,
- 40, 23, 54,204,215, 53,214, 52, 47,222, 72,253, 4,167,170,138,146,110,118,182,161,205, 54,173,250, 28,242,147,201, 67, 89, 40,
-119,170, 86, 95,242,113,176,213,195, 44, 97, 40, 78,103,172,134,206, 88, 25,247, 80,104,246, 45, 49,201,152, 80,145,112, 78, 51,
- 4, 81,138, 42, 10,122,121,126,229, 50, 62,118,166,213, 41,158,188,142, 79,212,249,229,130,109,179,157, 74, 47, 1, 59,106,203,
-116,175,137, 98,242, 94,230, 75,171,158, 90, 85,229,203, 52,228,106, 23,254,156, 96,237, 57,199,192, 75,127,119,134,251, 60,167,
- 97,184,184,118, 46, 38, 2,155,130,160,158,250,229, 98, 2,115,221,145,255,136,235,120,153, 17,173,184, 60, 31, 2, 33,123,218,
-182,161,212,188,111, 87, 71,187, 40, 77, 63,140,164, 18, 73, 57,160, 21,124,246,230, 51, 98,156,240, 21, 25,171,148, 40,177,115,
-156,247,179,154,221,110,199, 56, 76,220,125,188, 99, 24, 39, 82,202,236,118, 59, 17, 13,105,205,206, 56,180, 81,180,174,195,247,
-103,218,166, 19,161, 82,206, 88,215, 80,148,196,136, 22, 20,198, 88, 26,165,241,201, 75, 65,151,178,236,153,131,103, 24,167, 69,
-247, 96,173, 35, 35,157,109,201, 5,171, 13,161, 6,155,236,118,114, 16,238,247, 59, 38,239, 41, 9, 82,172,169,106, 83, 88, 16,
-159,211,228, 49, 53,107,124, 28, 6,114,202,236,218,150,148,194, 18, 78,147, 82,145,212,169,154, 91, 30, 67,165,229,197,196, 48,
-121,201,139,174,123,217, 5,215,172, 52,198,105,146,207,164,156, 68,173, 79,166, 84,127,123, 41,170,114,207,133,196,102,172, 93,
-162,120,163,143,164, 28,177,149,145, 62, 12,177, 30,138,162, 69, 65,171, 26,188,146, 9, 94, 86, 33, 33,229,186,158, 84,203,186,
- 73,149, 31,179, 57, 20,155,167, 42,122,249, 12,120,239,151,107, 90, 46,223,170, 81,169,218,148,105,154,208,102, 94, 25,212, 66,
- 74,107,250, 52, 45,249,226,115,225,158, 82, 38,230, 36,104, 96,192, 42, 57, 0,149,214,164, 81, 4,152, 84,124,235, 48, 77, 50,
- 22,223,212,170,212,195,210, 89, 43,247, 35, 59,223, 15,179,172, 35,152, 65, 54,114,157, 80,137,145, 37,207,105,130,171, 85, 77,
- 83,131,139,180,198, 26,161,220,201,142,220,226,189, 71, 27, 83,139,128,153, 29, 34, 59,253,156, 10,141,115,116, 93, 71,156,124,
-157,114, 38,124, 74, 56,230, 12, 11, 7, 41, 74, 48, 85, 1,149, 34,141, 81,228,105,192,238,247, 36,241,199, 18, 74, 33,199, 68,
-131, 97,191,219, 67,154,104,172,229,245,205, 14,157, 19,118,223,178,191,217,163,190,203, 52,187,150,183, 95,188,102,247,229, 23,
-124,252,251,255,202,199, 95,127,205,207,255,224,127,224,187,191,248,111,180,214,114,250,230, 29,159,127,249, 5, 28, 52,202, 54,
- 36,101,121,127,122,224,239,239,238,249,230,225,132,167, 33, 57,131,143, 9,157, 50, 59,107, 81,177,112,254,120,162, 63,220, 18,
-124,194,180, 29,119, 15,119,248, 73,147,139, 38, 23,120, 56, 13,236,218,150, 88, 20, 83,134, 88,100,154, 5, 66,230,108,173,166,
-209, 90,240,182,206,224, 75,169,235, 36,133, 86,162, 31,249,251, 95,253, 3,255,211,191,249,151,124,237, 51,147, 19,145,102, 44,
- 5,167, 45,198,117,178, 83, 95, 19,118,202, 39, 15,240, 31,162,197,125,242, 96, 87,249,169,111,250, 98, 6,174,159,168,181,183,
- 99,253,237,129, 94,100,200,119, 65,148,145, 3,165,200,248,103,190,241,171, 76, 49,165, 90,173,242,213,115,124,106,143, 91,207,
-247,114,169, 24, 47,250,162,131,156,187,248,153,136, 86,230,221,217,179,130,234, 92, 39, 11, 74, 24,202,213, 26, 97,173,195,152,
-134,198, 58, 65, 33,150, 72, 99, 50,135,174,193, 41,217,225,132, 10,242,112,246, 64,201, 82,177, 79, 49, 18,188,103, 76,177,234,
- 2,158,238,154,159,140,142,159, 75, 64,123,238,189,219,172, 55,158, 22,111, 27, 63,249,102,106,177,170,225, 75, 45,106,202,143,
-178, 58, 62,187,155,255, 45, 24, 8,159, 4, 32,229,114,121,184,151, 21, 65,187,144,242,102,221,219, 6,162,179,216, 0,159,115,
- 45, 60,103,222,184, 80, 93,214,252,120, 20, 37, 21,114,170, 59,206, 44,220,113,107, 44,227, 56,226,131,136,101,238, 62,222,241,
-230,245,205,178,107,140, 67,172, 66,174, 70,180, 19,133,152, 90, 0, 0, 0, 32, 0, 73, 68, 65, 84, 69, 70,147,135,227,145,143,
- 31, 63,242,241,227,157,140,128, 43, 8,166,105, 26,166,209,115,115,115,172, 17,147,144,134,177, 50,200, 5, 49,130,145,195,169,
-104, 69,204, 25,107, 26,134,113,228,120,115,164,127,232,133, 55,223,118,194, 13,167, 44,246, 43, 61,115,218, 43, 64,165, 20, 89,
-183,180, 77,203, 20, 60,209, 7, 20, 48,244,131, 8,197,106,103,222,247,103,140, 22,171,147,196,141,139, 35,192,152, 26,226,161,
- 69,124,215,182,109, 13,155,145, 36,186,237,138, 76, 25,203,238,208, 65,202, 60,156, 78,220, 30, 90,140,181, 88,107,104,172,160,
- 75,165, 42, 83,196, 28,209,104,156,213,117, 92,105,170,152, 77, 18,211, 82,146, 16,149, 20,163, 80,199,140,174, 48,148, 82, 15,
-252, 58,106,158,113,166, 86, 98, 96,219,174,149, 34, 38,132, 10, 33, 42,117, 65, 47, 58, 2,201, 26, 23, 76,113,190, 26,251,173,
-159,177, 75, 75,164, 18,218,138,184, 26,148, 98,154, 70,108,141, 51,157,166, 9,231,108, 77,104,211,196, 60,227, 85,101, 29, 23,
-179, 8,235, 98, 74, 85, 93, 78,205,123, 79, 75, 92, 39, 91,230, 57,194,192, 31,199, 81, 8,134, 41, 83,116, 33, 35,130,180,146,
-165,139,158,239,117,185, 78,140,108, 85,181,231, 34,190,236, 89, 64, 40,162,184, 66, 46,138, 56,249, 77,161,173, 23, 14,131, 64,
- 97, 52, 86, 73,138,152, 53, 66, 78,204, 73, 26,174,173,240, 56, 86, 79,187,172, 49, 19, 62,103,178, 15,114,184,183, 29, 33, 77,
- 21, 64,163, 41, 33,146, 99,164, 49, 6, 93,242, 82, 60,152,170,113,136, 37,129,106, 72, 40,134, 83,207,113,223,112,251,234,150,
-190,239,121,117,104,105,140,166, 49,154,227,177,227,254,227, 61, 93,103, 49, 38,211, 54, 10,237, 61,119,127,251, 55,124,253,237,
-175,248,253,127,247,175,249,248,155,111,249,252,247,126,206,195,247,223,203,117, 83, 2,166, 52, 48,101,250,251,129,239, 63,156,
-232,167, 76,198,145,146,166,143,137, 80, 29, 73, 83, 24,176, 70,209, 30, 26, 62, 60,244,156,206,103,238, 31, 30,171,192,148,117,
-170,161, 50,167,193, 19, 81,248, 12,197,136,200, 80,229,128, 81,138, 22, 69, 83,215,143,101, 94,233,105,232, 99,144,130, 10,197,
-119,239, 63,242,208, 71,134, 41, 51, 58,105, 18, 69,184,106,208,182, 89, 59,117, 25,163,235, 90,245, 62,127, 88,191, 40,142,123,
-134,178,246,169,142,125,190,176, 47,190,159,122,202,234,206, 87, 22,175,203,253,122,190, 18,238,213,248,147,242, 52, 1,236,185,
-238,116,254, 26,189, 29, 33,213, 71, 74, 85, 8,163,102,127,227,117,113, 67,190,116, 51, 43,225,123,151,101,132, 91,255,111,206,
- 27, 70,201,158,164,118, 48, 77,211,208,180, 59,186,238,200,174,221,201, 46, 81, 23, 12, 9, 83,146,132,206,228, 66,241, 3,217,
- 75,236,223, 97,191,195, 57, 67, 86, 64,140,188,251,120, 71, 20,155,240,246,152,218, 64,104,214, 53, 1,234, 19, 5,217, 11,244,
- 84,165,149,236, 34, 89,199,206, 82,145,231,181, 88, 81,207,196,219, 22,117, 1, 55,120, 41, 94,245, 83,197,224, 75,211,160,231,
-172,129, 79,126,174,178, 33,243,109,126,159,187,233, 39,215,194,115,164,184,231, 48,180,207,126, 38, 46, 69, 10,243,254,212, 88,
- 75, 74,243,154, 66,213, 24, 79, 75, 41,154,224, 51,143,167, 19, 90, 25,186,110,191, 92,123,146,128,103,104,155, 70,194, 84,172,
- 28,140,239,223,191,103,168,225, 36,146,216,228,100, 76,158, 34,111,222,190, 6, 20, 31,222,125,199,193, 57,210, 56,145, 99,166,
-148,136,155,197, 88,202, 96,156, 67,167,140,115, 13, 41, 23,206,125,143,117,194, 21,239,135,190,102,135,167,186, 75, 45, 52,245,
- 57, 88,109,232,218,142,105,154, 48,141,147,223,235,225, 86, 42,162,211, 24,201,191,118,173, 99, 28, 71, 73,165,211, 26,239,189,
- 8,159, 82,174, 9, 99, 18,165, 23, 84,193, 90, 67, 8, 98, 29,155,145,169, 98,247, 3,215,216, 69,109,174,155, 6, 31, 19, 33,
- 66,115,216, 9,159, 62, 71,108,237,244, 94,191,190,197,143, 19,185, 24, 90,165,208,211,132,154, 2,177, 8,120,164, 88, 71,219,
- 52, 85,168, 88,234, 88, 23,156, 19,225,214, 28,115,219, 30,246,156,251,179,116, 87, 90, 4,125, 82,224,200,132, 67, 38,124, 66,
-197, 83,185, 44,171,148,116,133, 30, 94,108,181,234,170, 65, 82, 25,133, 89, 28, 20,222,251,165,168,153,179, 22,164, 96, 19,235,
-157, 82,138,118,215,146, 18, 4,159,136, 5, 9,198, 33,131, 86,188, 58,190, 38,165, 72, 74, 18,203, 75, 17,101,248, 76,105, 76,
- 49,131, 42, 50,218, 46,165, 98, 84, 69,159, 99,180,133, 34,227,226, 57,233,165, 40, 69, 86,133, 56,174, 63,235,124, 88,207,244,
-187, 92, 87, 67,203,250, 93, 43,172,149,207,191,155,215,181, 37, 85,150,127, 66, 18,235,231,155,143, 38,164,128,177, 6, 40,162,
- 11,169, 84, 69, 83,113,198,170, 64,240,147,172, 14,180, 20, 39,251,174, 37,138,173,128, 28,227,178,106,117, 86,160, 48, 89,105,
- 6, 31, 73,254, 84,225, 64,158,227,161, 35,133, 72,219, 25, 92, 99,101, 29,102, 13,251,198,113,214,133, 87, 55,123,110,246, 29,
-135,125,199,253,135,119,184,183,154, 63,248, 79,255,145,254,235, 95, 99, 95,223, 96,142,175, 81, 71,199,112,119,150, 68, 52, 99,
- 9, 15, 35,167,135,137,119, 31, 78,124,253,237, 29, 33, 57, 66,204, 4, 45,244,183, 98, 45, 56,199, 99, 28, 57,189,255,192,237,
-232, 25,207, 61,196,140,228,163,137,138, 63,133, 26, 58, 99,101,140,158, 41, 4,185, 81, 44, 45,173, 46, 96,114, 66,151, 34,171,
- 79, 50, 86,120, 59,171, 21,214, 88,148,107, 56,188,122,139,230, 81,206, 46,171, 41, 86,161, 92, 83,213,239,179,146,252, 25,236,
-233,143, 97,185,231, 92,150,228,174,151, 60,192,215,138,249,167,170,228,109,101,171,158, 32, 75,179, 2,157,245,114,169,148, 79,
-168,205,185, 98, 14, 95,103,149, 47,148,182, 45,159,189, 54,253,139,178,117,211,237,102,181,138,230, 22, 64,204,156,179, 62,239,
-205,245, 38, 40,166, 42,190,173,169,153,234,179, 18, 19, 85, 5, 35,129,108, 45, 49, 78,140,179, 10,184, 86,161,206, 24, 90,215,
- 74, 55,102, 91,178, 58, 51,157,206,228,243, 64,215, 56,218,125,203,171,227, 1,239, 71,198, 20, 25,235, 8,142, 92, 3, 70,140,
- 89,172, 40, 51, 90,244,147, 7,228,124,248,149,205, 72,121,246,170,111,124,230, 90, 75,149, 89, 10,151, 1, 13,139, 77,237,210,
-195,126,205,198,127,113, 7,254, 35,188,254,101,129,237, 60, 93, 35, 60, 41,218,102,235,206, 21,141,224, 7,128,123,207,236,250,
-213,211,108,129,139,107,184, 92, 60, 55,165, 86, 15, 66,170,161, 27,186,226, 71,231,105,207,236, 66,180,214,113,188,121, 45, 62,
-232,250,181,130, 83, 21, 76,171,115,178,251,253,240,225,142, 97, 12,245, 48, 21,109,132,173,100, 54,235, 28, 15,167, 71,130,247,
- 40,173, 8,100,218,174, 99,240,158,144,100,183,170,148, 33, 27,205, 88,119,120,147,207,180,187, 29,170, 36, 17,131,101, 65,168,
-206, 33, 25, 74,107,186,166, 89, 14,239, 82, 18,211, 52, 96,172, 33, 6,191,248,173,115, 41,236,187, 29,195, 48,224,140, 69,187,
- 26, 64, 81, 15,232, 69,181, 92, 68,232,180,219,237,152,166,137,113,156,112, 78,138,141,152, 60, 90,107,186,174,163,177, 59, 98,
-140,130,167, 53,178,162,200, 5,246,109, 75,163, 11,186, 36,206,143,143, 52,214,176, 55,210, 69, 91, 45, 49,150,165, 36,188, 31,
- 73, 49,145, 17,223,178,115, 86,254,217, 8,113,108,244,146,164, 54,142,190,142,248, 71,172,107, 37,168,165,192, 56, 12,180,109,
-203,193, 53,226, 68,168, 66,212,133,219, 95, 69,151,185, 58, 24,230,194, 89, 27,187, 16,216,230, 59,199,156,237,190,220, 63, 55,
-247,152,249,207,140, 17, 21,185,248,213, 51,214,238, 41,133,165,176,153,215, 18, 33, 70,114,202,180,251,189,188, 62,245,241,135,
- 97, 88,236, 59,199,227,129,113, 28,153,242, 4, 90, 38, 51,169,200,202,209,199, 36,227,106,192,230, 25,230,146, 36,137,179,210,
-232,178, 18,158,206,108,169, 53, 21,215,187,124,206, 42, 81,178,168, 25, 94, 85,150,140,249, 84, 71,253,177,136,102, 68,107,197,
- 84,243,217,141,145,241,123,140,178,170,211,198,202,247,137, 81,130,131, 54,241,200, 57, 38,156,169, 14,161, 2,157,182,114,136,
-251, 72, 9, 18,244,147,149,150,195, 95, 67, 68,145,178, 38,166, 44,118, 74, 50, 93,215,240,246,245, 13,175,143,123,108,201, 88,
-109, 5,158,164, 90, 94,189, 58,114,187,111,137,121,226,205,155, 27, 94, 29,246,236,187, 29,159,255,222, 27,254,217,127,250, 31,
-185,251,187, 95,162,140,229,245, 63,253,138,111,254,223,191,228,203,223,255, 93,126,245,127,254, 95,232, 8,106, 10,220,191,191,
-231, 55,239, 31,248,219,111,223,243,224, 19, 33, 1, 88,112, 45,177, 82,206,252,224, 73, 64, 28, 60,231,241, 1, 93, 32,142,158,
- 70, 59,140,201, 53,132,107,109, 90, 83, 73, 20,165,176, 74,236,158,121,131, 5, 87,202, 84,253,129, 76,120, 76, 93,207,196,148,
-153,107,195, 16, 51,187,253, 13,227,199, 59,124,136, 24,103,208,173, 21,193,221, 34,184, 42, 63,188, 7,127,121,223,190,118,102,
-215,118,162,231,124,237,159,178,129, 61,247,152, 89,205,148,184, 79,175, 10, 94,210, 1,204, 23,233,124,209, 92,112,194,244, 60,
- 26, 95,133, 84,165,212, 15,181,210,181, 68,186, 12, 29,201,245, 13, 81,117,212, 5,114,200,207, 17,129,170,230, 4,139,189,172,
- 44,144,138, 82,102,250, 84, 98, 26, 7, 66, 72,104,213,215, 61,158, 90,222,192,174,233,100, 47,234, 20, 24, 75,112,150,201,143,
- 12,211,128, 77,147,120,116,155,134, 93, 49,152,156, 9, 33,203, 46, 55, 9,199,122,157,124,148, 39, 2,198,151,118,234,229,210,
-189, 37,171, 15,163, 37, 75, 93,203, 49,173,183,240, 25,173, 95,164,177, 61,247, 56,243, 14,252, 31,147, 27,240,210,200,253,217,
-159,133,151,189,138,159,154, 4, 60, 41, 50,127,196,243,219,254,221,242,194, 68,202, 88, 81,180, 6,239,235,123,235,232,186, 6,
-148,136,217,230,104,209, 20, 34,187, 58,150,206, 57,243,253,251, 59,198,209, 75, 7, 87,196,154, 40,152, 81,185,126,134,105, 98,
-127, 56,224,167,137,174,107, 48,104, 30,238, 31,104,173,133,144,228,235,180, 8,115,114, 85,251,230, 92,152,198, 81,198,202, 90,
-232, 96,206, 89,116, 13,143,208, 37,147, 83,148,157,170,209,128,112,212,167,193,211,184, 70,214, 4, 53, 68, 38,214,220,117,225,
-214,155,133,227, 30,230,120, 80, 86, 43,217,252,103, 34, 54, 20,250,158,181, 70,242,173,141,162,239,207,164, 24, 37,168,168, 70,
-139, 30,111,110,240,227,192,255,207,218,155,245, 88,150,157,233,121,207,183,166,189,207, 16, 57,212,192,170, 34,217,236,185, 37,
- 53,108,217, 87,210,157, 33,223,248,255, 10, 16, 4, 24,144,124, 97, 67,144,100,192,118, 11,205,238, 38,187, 73, 22,201,154,178,
- 42, 43, 43, 51, 99, 56,103,239, 53,250,226, 91,123,159,115, 34, 35,179,170, 27, 34, 81,168,202, 41, 50,226,196, 62,107,125,195,
-251, 62,111,174, 77,207, 79, 99,217,141, 35,227,224,105, 45, 83,115,226,238,168,133, 65,176,142,216, 20, 33,155,146,126,205, 34,
- 16,167,194,113,154,104,162,254,250, 82,155,162,119,173,229, 56,117,200,140, 83,161, 94, 78,133, 90,163,126,174, 86,249,244,231,
-192, 37, 67,215,230,116, 85,246,105, 80, 88, 47,163, 35,206,118,233,244,169,253,178, 90, 92,109,182, 75, 22,106,143,223, 77, 73,
-217, 5, 49,230, 30, 6,163,207,214,118,187, 99, 58, 30,153, 15, 71,172,181,108, 6, 77,114, 59, 30,142,171,112,116,154, 38, 74,
-171, 88,103, 41,173, 49, 4, 79,237,232, 95,245,208, 55, 76,133,178,144, 54, 91, 82,215, 64,107,148,220,150,116, 84,125,142,115,
-198, 59,189,216, 91, 23, 6,158,107,105,114, 81, 92,174,102, 88,180,181,144, 45,181,246,149, 75,211,179,122, 65,171,138,158,217,
-206,133,110,135, 83,125,137,233,235, 78,239, 92, 95, 79,218, 83,118,131,208, 1, 62,134,105,154, 21,183,220, 20, 96,145,155, 90,
-115, 75,171, 61,158,183, 50, 12,142,253,118,199,213,224,216, 59, 67,160,178,223, 12, 61,207, 65, 51, 8,106,203,236,158,190, 15,
-190, 98,130,101, 55, 14,108, 71,207,163, 39, 79,248,246,215,191, 6,147,121,255, 47,254,146,111,255,230,111,121,255, 95,252, 41,
- 55, 63,255, 20,139,134,184,212,155,153, 87,207, 95,243,226,118,226, 88, 44,206, 5, 36,120, 68, 28, 38,120,142,181,119,212,147,
- 96, 91,165,196,130, 51,129, 41, 38,112, 3, 55,113,102,172,130, 51,173,199, 18, 55,189,208,151,169,242,178,192, 17, 33,181, 70,
- 2, 77,130,235, 80,160, 98, 44,121,217,174,116,176,143, 17,131,183,134,151,223,125,199,163, 16, 24, 55, 35,206,219,222,149,134,
-179,157,186,180,183, 10, 63, 30,186,156,127, 72, 1,176,140,150,190,143,184,246,174,238,173,222,163,213,138,105,103, 56,212,246,
-224,231,248,182,241,238,234,169,238,137,104, 39,197,244,201, 71,189,254,248, 98,180, 86, 79,221,214, 50,153, 53,172,162,183, 19,
- 76,165, 41,172,160, 87,235,214,117, 21,186, 52, 90,143,211, 91, 62,143,156,213, 95,168, 85,217, 2,119,209, 52,174, 60, 31,153,
-172,215, 44, 95,163,213,126, 73, 51,180,138, 77,125,220, 94, 22, 69, 48, 56, 67,143,137, 61, 75, 74,235,187,206, 38,237,123, 95,
-127,185,231, 6,120,219,183, 88, 68, 35, 58, 87, 96, 14,178,126,127,238,173,241, 31,204, 50,127,107,119,253,131, 9,176,141,115,
-109,220,101,199,222,222,218,136,159,251,215, 31,186,180,229,109, 23,245, 59, 69,161,167,181, 85,123,151,137,179,106,199,158,179,
-142,224,141,133, 16, 60,198,193, 28, 39, 74, 49, 12, 33,232, 52, 7, 77,217,170, 61,195, 59,165, 76,206, 89, 49,152,131, 61,237,
-187, 91, 91, 59,251, 48, 14,236,247, 59,190,253,230, 57, 62,120, 36,235,115,235,189, 35,181, 74,108,149, 57, 39, 90, 21, 66,216,
-146,139,162,107, 83,141, 29,142,163, 74,228,165, 24,148,190, 63,175, 61,113, 14,192,123,183,250,145,107,107,228, 24,149,211, 94,
- 10, 85, 26, 53,170,198,165, 94,168,205, 79,147, 48, 89,163, 78,117,207, 45, 6,124,119, 83,140,131,103, 51, 14,196, 41,145, 83,
- 82, 54,124,255,181,101,175, 31,198,145,205,224, 25,188,211,213, 20, 22, 35, 22,164, 80,114, 35, 38,157, 58,148, 82,152,230, 68,
- 46,112, 55,233,136, 91,140,101, 78, 73,149,213, 29,177,218, 74,165, 26,253,113,154, 38,196,154,213,233, 97,172, 91, 61,222,149,
- 83,202,155,142,227,101,213, 2, 53,121,211, 73,163, 83,174,179,175, 89,122, 44,106, 47, 14, 26, 93,220,217,227, 65,143,211, 97,
-237,224,230, 57,174,221,250, 50, 97, 84, 54, 69, 89, 95, 11, 13, 95,209,232,214,156,149,240, 86, 74,195, 6, 79,174, 89, 69,105,
- 41,227,188,235, 83, 58,200, 49,246,207, 87,131,124, 74, 65, 47,140,110, 33, 52,162, 60, 2,233, 78,134, 41, 38,172, 61,185,160,
-172, 57,179,224, 74,235,107, 21,157, 22,149,156,245,210,238, 34,198, 86, 27, 46,168,229, 76,147,254,212, 71,221, 90,237, 96, 41,
- 57,203, 95,175,250,251,154,206,156, 23, 92,176, 49,134,148, 34,213,232, 69,151,107,111, 76,218,146,128,168, 5,196, 56, 4,182,
-227, 64,176,194,198,130, 47,137, 80, 65,178, 96, 90,192, 25,248,217, 39, 31, 49,221,188, 64,164,224, 6,193, 22,131,219, 58,118,
- 87, 35,193, 90, 14, 95, 62, 35,108, 62,228, 71,255,250, 95,114,248,226, 51,118, 31,188,135, 9, 6,191, 55, 76,166, 81,110,143,
- 28,142,145,103,223, 92,243,213,235, 3,183, 51,196, 2, 81, 50, 98, 42,182, 85,170, 53,164,168, 19,149,221,110,207,110,187,229,
-230,230,182, 23,110, 6,235,131,186, 23,154,144, 99,193, 58,213, 72, 44,162,203,214, 22, 52,184, 33,182,194,177, 23, 70,222,168,
-181, 53,150,202, 92, 84, 80, 87,251,235, 87, 75,130,154,121,245,221, 11,254,232,147,189,146, 6,141,129,230,168,243, 25, 38,246,
-135, 66, 96,238,131, 73,218, 61,250,218, 27,168,217, 31, 0,178,185, 56, 48,207, 14,196, 42,239,234,146, 56, 67, 32,242, 86,202,
-221, 15,230,223,200, 9,137,122, 34,211, 40, 89,203,156,109,219,181,140, 86, 43, 77,235,254,244,101, 55,101,209,111,134,119, 90,
-209,121,175, 15,120,138,179,118, 34,157, 41, 93, 75, 65,140,122,153,131,119,120,231,181, 41,110, 25, 67,195,178,164,184, 85,173,
-126,107, 5, 84,233,155, 74, 81,124, 38,234,105,174, 20,173, 90,171,118, 94,173, 84, 16,223, 9,110, 6, 19,204, 69,206,248,219,
- 96,254,114, 15,167,183,238,226, 47,110,250, 19, 11,192,180, 69,177,219,163, 2,215, 11,241, 28, 91,219,222, 16,183,253, 83, 59,
-117,145, 55, 59,240, 5,255,122,201,136,145,119,142,214,219, 3, 95,239, 67,107,161,239, 19,135, 74,231, 88,191, 91, 36,175,207,
-143,117, 11, 26,182, 48,134,128, 15,142, 84, 98,183, 16,121,157,254, 84, 29, 37,111, 54, 86, 15,102,231, 58,201,207, 50,142,158,
-224,195,154, 80, 54, 71,141,105,173, 52,188,245,188,186,190,166, 9,164, 90, 52, 87,189,154,149,127, 47,214,226,197,146, 83,101,
-158, 38,156,119,170,100, 94,132,165,165,232,231,104,124,255, 53, 85, 25,235,136, 24,194,232,217,237,118,188,126,125,163,222,234,
-222, 49,148,154,251,170,167,173,148, 58,122,103,119,126,153,159, 63, 7, 58,182, 85,197, 74, 74, 17, 99,233, 76,115,215, 67,110,
- 2, 99, 48, 12,219, 29,223,188,122,221,109,172, 10, 79,178, 34, 12, 33, 16,211, 4, 69, 83,185, 82,170,164, 92,180, 91,173,149,
-134, 37,197,130, 56,143,193,145, 19, 88,103,176,226, 41, 77,216,108,183,228, 90,153,227, 76, 42, 17, 63,248,174, 32,175, 61,214,
- 91, 47, 14,237, 80,245, 89,177, 86, 45,109,173, 46,233, 99,122,249,183, 94,201, 63, 68,162, 60,105, 85,116, 92,220,218,242,252,
- 26,134, 97,160,212, 76,173,185,143,234,181,176,223,237,118,220,222, 30,214,226, 25, 78, 5,210,102, 19, 58, 95, 95,139,196,152,
- 35,214, 90, 21, 75,206, 26,139,235, 67,231, 90,244,177,116,142, 71, 21, 24, 90, 75, 79,251,165,164, 74,179, 70, 47, 13, 55,156,
-248,240,232,153,101,172, 70,148, 26, 49,228, 14, 65,178, 34,212,154,213,174, 25,156, 38,193,233,252,185, 19,221, 52, 12,165,164,
-168, 54,193,166,171, 36,231,140, 66,105, 68,144,142, 17,182, 86,109,115, 53,165, 85, 9, 84,123, 67,228,122, 94, 64, 45,133, 68,
-237,192, 28,167,103, 93,167,231,121,103, 25, 54, 65, 39, 90, 22, 6, 35,132,150,217,136, 96, 91,193,101, 52,229,175, 68, 66,181,
-236,131,229,233,135,239,211,218, 12,174, 48, 62,222, 96,131,225,201,135,143, 56, 94, 31,216,252,236, 35,126,244,175,255, 37,183,
-223,189, 32,123,207,163,199,143,185,125,254,156,221,143, 63, 70,156,225,155,231, 47,184,187,153,249,250,250,142, 47,110, 15,220,
- 52,141,164,101, 55, 16,134, 64, 44, 9, 83, 18,146, 19,173, 85, 94,223,190, 82,184, 1, 58,228,204, 49,169,101,213, 40, 89, 82,
-125,194,170, 83,210,132,205,178,222, 97,138, 99, 54,204,165, 82, 69, 72,221,185,149, 27,164,210,104, 29, 53,141,129, 31,253,232,
-131,142, 76,214,194,222,249,110, 28, 44,134,103,191,255, 22,167, 21,195,217,200,100, 57,132,151,159, 59, 31,117, 55, 89,149,224,
- 75, 42,151, 60,184,111,228,141, 93,246, 63,234, 98, 63, 79, 34,107,231, 36,180,122,233,131, 91, 47, 63,222,248,187,223,246,247,
- 20,234, 41,197,237,141,207,105,249,122,212,211,187,136,231, 26, 26,105, 40,103,145,167,205, 44,185,235,221,135,137, 48, 88,203,
-198,123,198,193,147, 91,101,158,143, 28,167, 89, 35, 26,139, 42, 66,173, 49,108,134, 13,155,237,142,113,220, 49,132,160, 86,154,
-146,145,146, 48,181, 96, 23,209, 94, 7,187,148, 90,152,147,138, 66,230, 90, 41, 82, 41, 13, 74, 19,172,243, 24,235,200, 41,246,
-194,161, 34, 81,244,224, 49, 5, 91, 5, 59,168,144,175,180,170, 19,134,174,192, 95,161,183,114, 1, 36, 56, 19,238, 55,205,102,
-175, 13,204, 18, 18, 81,250, 67,105,168,125,188,111,164, 93, 82,237,228,161,239,249,233, 98, 94,202, 55,189,148,101,221, 67, 66,
-187,215, 85,179,250,222,233,129,162,242,208,133,125, 95,157,222,228, 1,146, 76,189,216,149,223, 95, 30,189,113,177,191, 33,142,
-188,252,175, 38,111,186, 12,206,182,239,171,114,117, 21,161, 90, 81, 43,146, 87, 90,220, 24, 6, 74,243,196,216, 83,215,150, 30,
-176,169, 61,171,228,196, 56, 14,216,172,207,140,247,161,251,222, 61,211, 60,147,211, 12,198,112,156,103,142,243,196,214,121,172,
- 46, 70,241,214,145,110, 39,164,130, 56,171,113,174, 52,252,232,245,251, 83,192, 25,141, 19,213,253,167, 34,133, 77,183, 60,145,
- 42, 67,131, 97, 12,188,247,163,167,216,209, 50,205, 55, 28,103,104, 29,214, 37, 98,206, 22, 29, 13,235, 13, 53, 42, 8,102,161,
-128,213, 90,123,200,166,118,169,206,106, 7,153,122,102,123,138,133,217, 22, 68, 60,214, 5, 85,106, 87,184,190,185,165,166, 72,
- 8,150,150, 35,185, 53,170, 8,243,156,116,146, 17, 51,113, 78,204,169, 49,199,168,217,219,198, 81,138,250,201,155,148,245,251,
- 35, 86,104, 89,185,224,199,195,129,113,179,193, 25, 75, 69,125,234,214, 40, 98,119,138,113,141,245,213,132,189,210,149,225,101,
-213,207,128,190,239,107, 43,235,247,181,118,246, 64, 93,159, 91,115, 66, 26,117, 11,171, 22, 55, 61,100, 70, 42,185,230, 53, 67,
-188,244, 34,125,154,110, 88,114, 1, 22,135, 67, 74,145,214,191, 54, 63, 56,114, 74,171,152, 81, 3,112,238, 58,138,214, 96,155,
- 65,172, 80,115,239,230, 93,192, 45,161, 65, 69,161, 66,130, 48,110,134, 53,255, 92,133,187, 14, 35, 66, 78,185, 23,119,134, 86,
-122,247, 93, 27,133,130,179,157, 6, 88, 33,149, 46, 38, 68,213,239, 58, 13, 49, 56,134,142,174,214, 53, 74,156,115, 71,193,106,
-131, 17,172,165,148,172, 90,191,166,158,236, 34, 96,189, 35, 21, 21, 3,182,170,250,142, 82, 53,189,173, 74,211,247,141, 17, 70,
- 31, 8,222, 51,120,131, 19,195, 96,244, 34, 55, 77,181, 86,206, 26,156,113, 4,231, 9,214,192, 60,177, 29, 71,220, 80, 24,124,
-164, 57,176,143,246,132,221, 35,222, 43, 71, 94,186,198,211,127,246, 71, 76,243,196,225,213,107, 62,248,243, 63,227,249,239, 63,
-229,189,167, 79,184,251,197,231,140,126,207, 47,126,245,140,111,190,187,227,235,151, 7,142, 71, 13, 80, 33, 88, 82,205,164, 73,
- 19, 10,155,104,164, 43,198,173,176,161,249,112,196, 25,183,130,164, 84,225,159,113, 98,250,253,217, 29, 23, 61, 27, 94,204, 50,
-233,213, 51, 85, 35, 89,187,165,181, 83, 82,109,169, 20, 17,146,129, 79,254,224, 39,252,246,215,191,194, 53, 29,213,235,250,207,
-129,108,249,244,231,255,128, 83, 63,115,125, 99,188,190,142,163,219,219,135,139,242, 61,163,247,119, 9,231,126, 40,122,246, 33,
-160,204, 67,106,232,119,141,223,239,143, 96,223,102,229, 90,238, 52,211,204, 89,231,121, 70, 98,235, 59,118, 49, 74,192,162,123,
-228,173,177, 4,107,216, 14, 58,246,153,231, 35,135, 52,113, 60,196,158,141,237, 24,194,192,126,187, 99, 55,140, 92,109,183,140,
-227, 6,235,134, 62,230, 40,212, 20,169,181,173,157, 60,173,208,233, 16, 26,149,105, 12,197, 10, 41, 47,140,117,165, 29,209,211,
-172,140,117, 24,167, 7, 68,201, 69,189,208,162,192,130, 92, 11, 46, 56, 21,245,181, 14,135, 49, 58,198,212, 58,109, 25, 21,158,
-232,112,235,172, 98,137,152,236,224,144, 85,128,216,116, 50,113, 10,151,233,105,110, 92, 70,217,222, 79, 87, 89,186,175,245,207,
- 93,252,150,251,118, 32,121,243,110,126, 0, 11,251,230,115,210, 30,152,197,156,121,210,219, 9,121,251,131,158,187,183,205, 52,
-228,173,115,159,206, 46,232,194,185, 5,158,225,180,152,210, 75,218, 17,239, 14,196, 57,146, 98,194,121,181, 92,169, 98, 93, 95,
-207,171,171, 43,238, 14, 7,253,179,125,108, 27, 99, 84,242,212, 2,171, 17,195,163,171,199,140, 70, 11,195,148, 34,187,253, 21,
- 83, 21,110,174,111, 41, 89, 21,182,202, 86, 55,196,213, 7,141, 94,118, 70, 89,219,214,233,161, 91,115, 97, 48,194,198, 7,130,
-179,152,154,241,214,242,248,241,142,155,219, 9,234,146,192,169, 5,128,181,167,228, 63,231, 23,164, 39,125,140,110, 78, 23,200,
- 66, 9, 52, 66,206, 42, 98, 27,134,129,199,143, 31, 99,140,225,238,238,150,155,219, 91, 82,204,218, 57, 6,191,146,206,106, 47,
-233, 14,135, 25, 83, 27,241, 48,235,184, 90, 58,181,207,185, 94,104, 42, 62, 52, 47,162, 53, 52,152,198, 57,219,137, 94, 74, 91,
-203,165,224, 71, 79, 42,234,149, 15,189,163, 29,135, 13,133,198,225,120,236, 97, 49,181, 3,115,219,218,165, 91,107,145, 37, 5,
-237,172,176, 89, 92, 64, 70,236,122,118, 46,161, 28,230,140,133, 94, 74, 23,195,181,174,140,174,234, 36, 89,108,127, 75,104,203,
- 52, 77, 93, 67,161,123,115,205, 12,112, 43, 95, 94,187,230, 29, 55, 55,183, 43, 96,170,244, 11,221, 24,189,224,148, 7,160,221,
-162,174,165,117,162,162, 25, 22,141, 84,244,235,243,214,209,164,145, 82,102,191,221, 18,227,172,251, 95,192,121,191, 58, 93,156,
- 83,182,187,235, 40, 96, 37,236, 25,156, 49,148,190,163, 87,130,155,218,180, 92,215, 88,184,190, 15,175,247, 28, 77,181, 86,108,
- 81,159, 61, 73,117, 28,182, 53,188, 31,212,175, 29, 44,222,153, 14, 3,171, 12,214,226,164,170,253,203, 6,181, 21,118,112, 81,
-109,130,119, 14,111, 13,155,224,105, 37,113,123, 56,176, 51,142,159,253,241, 39,180,141,101,248,201,143,176,227, 35,134,249,192,
-123, 41,227,114,229,229,103,159,243,254,159,253, 49,204,145,157,243,152, 87,183,140,135,204,179,111,174,249,221, 55, 55,220,205,
-194,161,168, 29,181, 89,143, 25,148, 47,143, 64, 73, 25, 51, 14, 24,227, 53,123, 96,154, 86,191, 77,234,232, 92, 99, 44, 82,187,
-252,186,235, 73, 26,166,167,206, 73,135, 81,169,224,240,212, 96,235, 61,163, 54,237,218,125,109, 58, 25,217,140, 3,127,249,103,
-127,206, 95,255,199,255,200,199, 64, 8, 14, 27, 60,205, 91,104,133,195, 87, 95,222, 75,105, 59, 83,244,174, 81,149,111,153,205,
-203, 89, 12,227,249, 33,250,125,118,164,127,202,255, 30, 2,145, 60,228,109,190, 63, 29,248, 62,241,214, 59,126,227,217, 13, 34,
-171,117,105,189, 0,170, 42,172,157, 8, 78, 26,206, 20,130, 55,164, 60,113, 59, 31, 59, 69,171, 34, 98,216,110,118, 42,228,216,
-238,217,141, 27,130,115,140, 62, 80,209,234, 88,153,212,141, 56,207, 76,199, 59,226,116,160,214,220, 5,119,170,190, 53, 70,247,
-119,185, 22, 90,110, 43,173, 74, 90,211,253, 74, 23, 82, 57, 52, 87,121,177, 37,150,238, 65, 77,210, 24, 69,247,151,118,129,240,
- 45,236,120, 49,125, 15,184, 44,228,213,250, 82, 22,126,251, 26,221, 40,103,195,247,123,112, 23,228,108,202, 33,107,175,122,234,
-100,219, 3, 89,238,237,158, 21,168,173, 2,156,115, 95,252,229,253,217,222,196, 13, 63,248,188,180,119,236,147,100, 45, 78,254,
-113,151,249,247, 60, 79,103, 9,114,210, 78,217,214,231,202,121,105,167,215,231,120, 60,118, 47,117,233,204,130, 19, 95,187,181,
- 74,232, 40, 79,239,221,170, 72,182,214,210,234,164,209,166, 57, 51,134, 1,235,189,190,255, 98,194,134,192,147,247,158, 32,185,
-112,245,222, 35, 74,205, 76, 57, 43,125, 77,132,146, 83, 79,206, 90,114,175,165,147,199,212,126,105, 74,195,117, 8,213,124,156,
-240,118,195,241, 56, 19,182, 35, 87,219, 61, 33,188,102,238, 59,241,218,237, 53, 86, 84,200,100, 68,112, 65, 24, 54,158, 15,127,
-244, 17, 47, 94,124,199,235, 87,175,117, 42,212,167,128,203,138, 97, 24, 6,198,113,195,213,213, 21,222,123,174,111,110,136, 41,
-129,209,252,235,148, 75, 87,195, 71,182,206,232,232,187, 8,121,202,204,135,163,186, 43,108, 80,145, 23, 39, 34, 31,168, 8, 78,
-196, 32, 85, 95,233,121,142,248, 16, 24, 55, 27, 90,131,227,113, 34, 4,175,115, 31, 35,152,102,201, 41, 51,132,192, 52,207,132,
-113,196,117,189,192,210, 57, 25,163,153,222,244,172,120, 99,141,162, 98,123,116,176, 65,131, 74,106, 83, 59, 99,206, 89,215, 35,
- 85,241,191,138,123,214,142,223,244,247, 84, 24, 71, 98,236, 28,249,123,231,210, 18,252, 98, 59, 47,192,117,146,228,221,221, 93,
-167, 56, 10, 47, 95,190, 84,161,161, 83, 37,125, 41,218,225,135, 16, 16, 3,165,196, 53, 40, 39,151,132,239,214,195, 82,203,250,
- 44, 45,239, 40, 99, 13, 20, 97, 24,135,174,158,215,184,211, 37, 6,122, 41,194,115,202,122,137, 24,213,214, 44,137,127, 98, 12,
- 37,118, 40,209,116, 84, 71,133, 49,125, 39, 94,169,198, 80,227,172, 84,180, 14,250, 89,195,165, 68, 8,131, 39, 56,207,102, 28,
-117,173, 96, 45, 70,105, 3,218, 52,137,129,106,176,173, 66, 74,104,253, 58, 43, 9,207, 26, 6,107,241, 29,122, 99,164, 50, 6,
- 11,110,224,238,112,205,143,255,228,159, 97,158, 62,194,254,248, 9,238,199,159,128,217,225,226, 68,121,241, 29, 55,127,247, 43,
-158,252,229,207,144, 82,152, 62,251,138,253,184, 39,127,241, 53,183, 95,189,230,110,106, 60,187,155, 41,197,112, 59, 39,138,177,
-164, 86,144, 12,214,219, 14,100, 50,228,152, 9,195,134,216, 42,136, 37,166,121,229,151, 72, 7, 43,169,254,164,246, 53,238,137,
-145,177,130, 80,251,138, 85,141,207,221,237,181, 20,133,125,170,152, 59, 33,240, 95,253,143,255, 19,207,126,245, 27,236, 60, 49,
-238, 44,195,110, 64,130, 3,235,120,254,229, 51,230,111, 95,156, 93,234, 15, 53, 36,157, 30,246, 80,215,116,121, 65,190,153, 45,
-254,238,136,203,127,250,229,126,255,239,184, 63, 17,248,190,139,251,251,246,252,230,109, 29,126, 23,147,152,238, 5,245,198, 50,
-120,139,247,234,116,159,230, 35,199,227,113, 69,192,110,198, 13,143,175, 30,243,120,127,197, 54,108,240,189, 61,202,113,230,102,
- 58, 82, 16, 82,209,192,131, 41,206, 28, 14,183,212,154,201, 57, 98, 68,171,220,209, 7,156,104, 55, 45, 70, 83,140, 68, 26,174,
- 53,189,140,187,247,183,168, 25,146,234,108, 79,112,202, 93,140,151,213,199, 94,161,206,137, 92,213,242,230,156, 30, 82, 77,212,
-166,118, 46,223,149, 51,202,158,172,137,121,230,108,132, 94, 47,174,217, 21,229,122, 1,150, 63, 93,170,114,206, 33, 48,231,169,
- 58,247, 25, 5,178, 42, 66,223,128,222,252,163,158,145,118, 26,181,191, 57,172,231,191,239,255,206, 87, 14,103,163,214,158, 40,
-103, 67,232, 29,146,156, 44, 79,221,219, 61, 77,115, 23,161,133,254, 76,170, 64, 44,132,129,227,241,176, 10,225,134, 16,122,151,
- 14,119,183,119,136, 24, 82, 74, 58,233, 49,174,163,131, 43, 12, 70,211,222, 40, 92, 61,222, 99, 83,101, 48,134, 47,191,252,146,
-218, 45,161, 21,112,219, 45,211, 52, 35, 6, 92,167,131,233,161,146, 9,126, 64, 28,180,162, 23,234,221,225, 72,160, 82,234, 43,
-174, 62,120,202,251,239, 63,229,235,103,223, 17, 99,233,248, 93,179,118,176,181, 65,174,133,199,143,118,252,155,255,245,127,225,
-231,127,253, 55,252,213, 95,253, 55, 37,204, 33, 56,175, 0,153,134,176,219,237,200,165,112,125,125,173, 92,250,121,166,161,216,
-208,148, 35,222, 47,153,231,234, 74, 73,177,112,157,110,105, 41, 19,220,128,115,150, 57, 70,221,185,146,181,120, 21, 13,101,201,
-165,116, 81,152, 16,134, 64, 41,147,122,129,123,158,123, 19,200,237,244,204, 27, 49,228,146,137,243,140, 21, 97,186, 59,104,145,
- 99,100, 5,214, 24, 99,244,239,243,189, 83, 94, 10, 34,236,218, 76,180, 90, 58,155,220,144,179,186, 12, 88,114, 15, 90, 61,197,
- 62,208,214,191, 55,116, 62,127, 74,186, 54,139, 81, 59,235, 97, 24, 86, 47,123, 8,129, 97, 8,220,220,220,244, 75, 84, 59,188,
-113, 28,152,230,137,199, 87, 87,157,217,159,152,227,188, 90,206, 82,140,125, 47,109,240,214,118, 31,187,130,128,166, 60, 17,188,
-190, 22,206, 24,156,117,204,117, 34,230,204,102, 28,117, 77,178,216, 49, 57,101,109, 24, 99,212, 66, 25, 84,168, 39, 69, 5,146,
- 19, 16,134,113, 37, 18,182, 6,228, 66,236,118, 91,215,180,152, 48, 11,168,198,128, 15,129, 77,255,199, 91, 37,218,169, 20,180,
- 98,234, 98, 75,213,164,193, 97, 24, 59, 78,169,233, 4,167, 21,117, 82,244,241, 53,232,133,110,141,198,243,110, 70,207,221,124,
-199,135, 31, 60,225,233,143,222, 35, 63, 30,241,159,124, 4,126, 4, 25, 96,191, 35,150,200, 78, 60, 55,191,249,156,250,187,207,
-145, 40,124,245,155,159,179,243, 91,254,246,239,126,203,139,219,196,203, 67,164,137, 71,124,128, 18, 89,182, 83, 70,132, 97, 28,
-105,192,205,221,145,231,215,223,130,168, 6,198,186,208,249, 3,244,198,170,116,228,176,215,103,204, 40,147,100,201,126, 55, 52,
-172, 81,193, 35,166,158,173, 3,151, 41, 41,189, 88, 52,252,225, 39,159, 96, 14, 7,190,248,135, 95,242,196, 22,246,251,145, 97,
- 59, 16,182, 91,252,246, 9,191,254,207,255, 15,207,159, 61,215, 75,125,141, 28,111,114,209,172,182,251,233, 85,194, 15, 18,162,
-253,247,190,208,239,251,230,207,125,203,239,178,180,189, 77,244,244, 46, 32,138,116, 49,202,197,159,109,116,158,178,224,140, 97,
-244,202, 81,246,193, 81,146,250,136,227, 49, 34,205,225, 92, 96,191,219,243,222,227,199, 92,237,118,120,107,105,185, 50, 31,143,
-196,168,251,245,220, 10,169, 86,166, 92,152, 99, 36,119, 30,179,181, 6, 27, 28, 33,184,174,244, 53,189, 74,173,218, 77, 55,131,
-147,182,218,243,140,233, 44,248, 98,200, 93,124, 39, 70,171,231, 82,213,230, 70, 87,154,154, 86,186, 77, 35,105,160, 66,243, 72,
-247,252,170,218, 95,139,149, 42,231, 89,231,103, 23,214, 18,159,186, 8,176,214, 61,245, 61,245,119, 23, 96,157,103,143, 63, 60,
- 18,127,211, 75, 46,152, 55,132,110,247,229,147,231, 88,218,135,139, 51, 89, 35, 82, 47,252, 28,237,237, 66,186,135, 68,152, 15,
-138,159, 46,168,134,245,226,243, 58,161,128,245,245,171,181, 82, 98,214,157,104, 63,172, 68,132,176,221,104,134,119, 79,222,243,
- 65, 65, 50, 52, 85, 11,231, 53,165,173, 17,194,134, 6, 28, 14, 71,230,105, 38, 37,101,198,123,231,212,142,102, 28,173,100, 54,
- 99,192, 7, 79,173,133,113,115,165,129, 40, 24,118,143,119,236,228,199,124,250,249,151,196, 6,177,123,204,141,243,228,146,201,
- 85,243,178,107,201,235,238,210, 89,139,120, 75,173,142,121, 62,146,143, 19, 83, 74, 36,129,221,227, 39, 60,122,148,121,249,234,
-102,197,206,234, 80,203,210,170,144,114,229,229,119, 55,252,219,127,251,239,214,110,108,179, 25, 9,206, 99,196, 18,227,140, 49,
-158,121,154, 87,120, 77,237, 73, 90, 57, 87,114, 58,170,141,195, 41,255,221, 25,163, 89,217, 57,145, 81,124,242,224, 7,110,143,
- 7,140, 81,141,136,156,217, 65,157,243,186, 74,106,130,119,190, 23, 80,154, 40, 23,179,218,234,172,215,174,201,121,223,105,118,
-170, 72,223,110,119, 28,142, 7, 54,195,176, 94,226,186,231,173,136, 53, 58, 45, 43, 26,127, 91,187,112,111,177,181,154,174,142,
-119,206,247, 80, 22,229,153,167,152,112, 98, 21,186, 34,144, 75,198, 7,207, 28,147, 2,134,250, 25,102,173,233,163,246,182, 42,
-220,151,172,129,187,187, 91, 98,156, 72, 57,179,221,110,245,178, 15,150, 82,115, 79,199,203, 28, 15,199,213,134, 26,156,195,162,
-137,111,135,227, 1,138,234,111, 90,207, 52,111,165,226,141,226, 99,135,190,111,175, 89,167, 9, 62, 56,189,228,251,148, 33,166,
-164,171,189,222,220, 45,158,236, 84,106,143, 22,214,157,125,234,136, 97, 99,132, 92,162,114,222,251,247,196,216,158, 93, 96, 68,
- 69,162,206, 48, 4,215,173,136,202,136,175, 57,169, 5,216,138,158, 71,165,210,150, 21,227, 34,188,236,148,186, 92, 50,222,118,
-139,109,127,198, 74,202,212,158,144,168, 69,140, 99,187,223,243,241, 79, 63, 34,132, 74,221,239,177,219,247,105,198, 33,173, 82,
-167, 3, 30,197, 32,231,175, 95,147, 48, 28,239,224,179,223, 93,243,205,243,223,242,249,171, 27,158,191,142,220, 30, 10,195,118,
-160,166,138, 56,135, 51,130,247, 22,191, 9, 76,211,204,225, 56, 67,135, 72,165,164, 34,230, 5, 19,190,196,210,150, 82,176, 85,
-187,116,235, 60,173, 40, 35, 98, 9, 85, 98, 65,180,155, 78, 9,172,218,176,201,197, 26,187,177, 49, 66,185,185,230,139, 23,207,
-217,147,216, 14,150,237,222,241,232,233, 35, 54,219, 71,124,253,197, 11,254,223,191,250,123, 14, 73,250,165, 78,123, 99, 67,190,
- 94,146,103,167,220,170,212, 59,247,138, 47, 65, 32, 15,208,190, 30,182, 30,189,157, 42,246, 46, 84,232,187, 46,236,119,121,212,
-223, 86,124,156, 3, 22,228, 94, 22,251, 42, 37, 88,187,244,162,185,188,214, 48, 6,199,118,240,108, 67, 96, 74, 73,125,164,115,
-194,138,103, 51,108,216,239,174,184,218, 63,226,209,118,164,149,194,221,221, 13,105,142,196, 56, 19, 80,118, 68,226, 0, 0, 32,
- 0, 73, 68, 65, 84, 75, 38, 23,237, 44, 20,193,169,246,183, 77,112,120, 55,168,186,211,187,158,141,222, 86,200,205,185,144,237,
- 20, 41,171,228, 48,103,116, 87,222,138,142,201, 92, 15, 47, 17,175,248,217, 86, 11,148,204,224, 3,193, 91,229,140,231, 72,170,
-145,154, 10, 78, 6,130, 9, 93, 88,212,163, 44,215,212, 53,115,162,203,153,149,183,170,234,233,174,204,215,120,195, 94,252,173,
-236,247,243,189,124,187, 84,212,115,122, 92, 46, 85,233, 29, 55,202,217,154,101, 29,234,247,162,195, 60,164,221,184,188,244,197,
-156,196,156, 23,185,127,114, 38,192,123,147, 81,248,160,125,239,254, 37,127, 49, 21, 66, 71,170,231, 90,185,229, 32, 59, 1,138,
-234, 25, 86,151,213,214, 37,152, 30, 34,195, 26,223,169, 54, 69,237, 98,156, 15, 4,163, 57, 5,223,189,120,181, 50,225, 67, 8,
-253, 98, 87, 48,144,237, 43,149,237,102,208, 24,213,210,253,112,125,191, 88,142, 71,254,232,147,143,105,243,204, 87,223,189,228,
- 38,102,166, 76, 31,133,235,101, 74,171, 12,195,128,152,158,181,213, 45,111,214, 59,108,211,142,172, 53,184,125,125, 75, 76, 21,
- 31, 54,108,198, 13,183,135, 99, 23, 58,118,107, 99,210,117, 83, 77,141,219, 87,183, 56,111,248,224,189,247,113,198,242,234,213,
- 43,230,249,168, 86,185,126,200, 47,182, 60, 69,184,234,193,108,172,238, 81,115,204,248,126, 57,197,105, 34, 56,139, 67, 86,241,
-214, 16, 6,140, 53,196,121, 98, 51, 14, 76, 81, 57,246, 41,198,149,249, 48, 14, 10,146,177,198,144,147,170,176,231, 56, 97,189,
- 87,191,181,219,146, 75, 37,197,212,199,201,149,193,171,154, 60,117, 24,136,218,194, 4,219, 32, 88, 5,235,120,171,239,183, 20,
- 35, 88,139,233, 35,232,187,195,157, 34, 88,151,181,149, 17,154, 85,251,236, 24, 2, 83,156,180, 16, 40,122, 65,217,254,121,250,
-165,235,237,239,191, 97, 24,214,160, 36,211,233,147,126,112,248,234, 24,198, 64, 74,115,183,186,169, 37, 45, 37,253,126, 57, 99,
- 85,184, 85, 27,243, 60,209,156,142,173, 93,103, 11, 96,109,223,132, 41, 75,163,230, 76,233, 83,179, 57,206, 24,171, 52,209, 92,
-219,154,170,232,157, 70, 4, 59,107, 80,196,134, 96,131, 10,235, 90,183,194,149, 24,123, 56, 75,208,103, 39,232,247,212, 32,248,
-174,215, 8,110, 96,236, 65, 49, 99,112,138,123, 53,154, 29, 47, 43,184, 76, 71,208,185,159, 3,210,187,245,101, 98,208, 80, 63,
- 56, 61,228,132, 69,223,208,161, 55, 53,103,106, 11,180,190, 90,216,239,175, 40, 30,252, 7,123,204,135, 31,211,100,160,181,140,
- 76,215,212,151, 47,113,227,150,235,215, 55, 56,183,225,248,122,226,197,243, 35, 95, 62,159,248,230, 85,226,213, 12,207, 15, 19,
- 25, 65, 43, 59,253,199, 57, 65,134,142,210, 21, 52,149,237,152,176, 38,224,188,234, 10,114,201, 29,236,163, 4,201,101,106, 88,
-186, 31,223,152, 37,236, 71,117, 2,182, 55, 76,182,234,200,221,219,158, 34,105, 78,235,109, 35,194,216, 42,110, 58,176,177,176,
-113,194,110,239,217, 61,218,226,198, 17,241, 59,254,175,255,227, 63,243,217,183, 25, 92,192,233, 94, 94,119, 94,156, 71,170,222,
-155,195,171, 42,179,157,237,152, 23,255,229,101, 26,181, 57, 47, 0,206,196,105,230,236, 2,125,168,203,126,232,242,126,219,238,
-252,161, 95, 59, 31,191,127,223,184,254,161,143,119, 94, 24,156,191,240,250,101, 86,130,181,108,188,229,106, 24,216, 14, 30, 99,
-132,155,155, 73, 1, 50,214,179, 25,183, 92,109,175, 84,113, 41, 48, 29, 38,230,249,192,156,102, 82,214,177, 90,105,101,221,159,
-121,107, 48,152,206,241, 30,212, 11, 12, 72, 45,180,162,182,159,218,131,104, 22, 10, 84, 93, 45, 40,178, 18,238,140, 41,235, 3,
- 34, 93,189,186, 48,165,155, 21,245,223,118,133,190,105,141,193, 57, 6, 39,204,197,144, 74, 70, 98,196, 54,168, 98,176,185, 81,
- 49, 61,131,125,193, 69, 46,194, 58,211,109, 24,181, 95,174,167,228,186, 78, 13,185, 4,234,223, 7,178, 44,133, 73, 51,103,211,
- 22,185, 71,243, 59,187, 0, 91,123,131,234,118,238, 15,111,247,162,111,215,144,160,122,138, 91,149, 53, 58,150, 83,228,237, 25,
- 3,254,126, 91,126,177, 42, 88,215, 18,178,126,153,151,182,192,118,150,208, 38, 23,194,251, 53,194,215,200,197,248, 18,148, 10,
-181,204, 16,140,177, 23,110, 19,245, 36, 59,188,247,108, 54, 3, 95,126,249,165, 78,135, 22,193,212,172,124,108, 45, 41, 12,193,
- 5, 92,183, 24, 57, 31,244,245,170,149, 74, 37, 74, 98, 28, 3,135,195, 13,127,250,227,143,145, 20,121,118,125, 75, 48,142, 50,
- 37, 92,240,202, 58,232, 25,219,173,139, 62,189, 15,164,156,104, 98, 17,107, 24,253,134, 52,205, 24, 26,121,154,200,115,193,137,
-101,235, 29, 49,197,117,149,226,197, 98,157,103,179,221,168,158,212,194,213,110,199,179,103, 95,173, 12,114,141,250,204, 26,176,
-210, 69, 86, 10, 58, 41,140, 97, 80, 44,107,206, 61,156, 68,168, 49,225, 4, 28, 13, 39, 2, 37,227,125,192,136,213, 51, 36, 25,
-106, 74, 12,214,174, 57, 8, 85, 52,115, 30,151, 84,180,229, 7,140, 21, 98, 42,157,169,174, 15,219, 60,205, 10, 76,105, 13,111,
-245, 57, 9, 33,172, 23,156, 89,158,161, 14,131,176, 13,230,146,113, 75,212,112, 83, 11,159, 23,207, 20,103,182,195, 64, 41,133,
- 16,188,210,250, 98,210,247,177, 88,230,121, 34, 39,197,164,230, 78, 0,116,198,145,139, 98, 85,165, 95,206, 11,237,114,121, 38,
-150, 21,204, 28, 35,219,237,150,121,154, 86, 27,155, 49,134, 56,167,149,230,104,141, 78, 59,172,181,132, 97, 32,199,164,236, 11,
-163, 25,242,166,139,233,188,247, 74, 4,220,140,212, 90,152,167, 25, 55,216, 78, 10,236,128,174,218,167, 40, 85, 21,239,154, 79,
- 94, 48, 24,114,156,207,222,230,109,229,251,151,210, 86, 1,168,244,108,116,103,148, 5, 63, 56, 7, 45,247,181,165, 80,115, 63,
-171,122,208,209,226,197, 87,181,120, 91,167, 23,218, 56,104, 88,137, 69,186,134,161, 82,171,244,105, 64,235, 36, 59, 85,191, 67,
-165,180, 66,204,145,143, 54, 79, 9,251, 1,243,225, 19,216,238,145,102, 33,223,144,126,255, 91,234,171,215,184, 15,159, 18, 30,
- 61,225,230, 55,191,103, 24,183,220, 92, 63, 39,150,162,201,133, 83,161, 96,152,172, 64, 82,139,167, 18,239,192,123, 67, 76,113,
-165,254,105,194, 92, 98,142, 89,145,204,198,116,145,220,105,101,177,188, 94,170,101,144,211, 68,175,159,113,174, 45, 78, 25,181,
- 27, 42, 39, 65,135,179,170,193,104, 12,210,240,173, 48, 24,199,110,227,184,218,109,240,195, 64,216, 61,230,151,191,249,138,255,
-239,231,191,231, 54, 15,100, 41,184,122,143,191, 78,123, 64, 55,188, 36, 20,157, 95,249,139, 95,123,133,178,220,103,106,179, 90,
-228, 22, 49,197, 82,125, 62,212,101, 47, 23,236,249,175,203,247,120,142,223, 54, 74,255, 33, 30,251,119, 77, 9,212, 74, 97, 87,
-239,237,162,168,220,245,127,156, 17,142,199,169,191,169, 28, 97,220,176,221,108,241, 14, 90, 58, 82,128,212, 20,122,145,107, 33,
-150, 68,105,170, 94, 13,198,234, 88,170, 63,136,214,185,222,169, 65, 42,153,146,210,250,250,106, 17, 80,116, 79,184,196,189,222,
-159, 9, 75,198,114, 98, 7,215, 86, 25, 59, 13, 47,151,204,113,154,201, 49, 17,172, 16,156, 97,112,162,192, 15, 99,113, 93,200,
-211,114,197, 15,163,130, 77, 82,187,200,143, 95,123,237,123,202,243,197,114,199, 58,209,184,223,205,158,189,222,114,242,255,183,
-181, 30, 84, 1, 84, 79,226, 88, 77,241,235,199,190,199, 63, 56,191,118, 31,178, 44,190, 41,196, 59, 27,251,159, 41,237,245,196,
-144, 7,199,235,237,188, 43,151,115,107,231,249, 34,234,100,253,147, 7, 22, 9,114,110,201, 92,138,143,158,192,213, 58,166, 19,
-192, 56,131,149, 19,153, 13,212,102,102,173,163,230,194,205,205, 77,191,104, 52,188, 37,151,138,239, 93,148, 51, 74,135,163, 54,
- 44,170, 66,110,237,196,184,111, 34, 28, 74, 66,172, 65,230,153,143,119, 3,127,242,209,123,212,150,120,118,136,236, 7, 71,182,
-142,233, 56, 97,164, 97,169,136,213,206,223,208, 72, 85,145,171,173,195, 83,156,241, 8,149, 82, 51,141, 12,166, 49, 90,195,198,
-141,221,188,161,211, 6, 63, 12,136, 85,168, 74,179,134,155,215,175,186,147, 67, 11,160, 33,140,228,154,215,105, 79,205, 10, 29,
- 25, 66,160,100, 93, 59, 52,116,140, 77,107,120, 99, 9, 2,222,160, 23,180,177,212, 56, 97,124,160,230,196,102, 8,164, 24,251,
-193, 15, 27, 31,152, 83,210,238, 55,205, 24, 42,121,158,168, 98,240,222, 82, 98,195, 59,229,118, 91,171, 41,114,130,102,199,199,
- 28, 73, 37, 81,106,233, 62,107, 71,156, 99,215, 29, 20,134, 48,208, 74,237,209,168, 21, 47,150,105,158,144, 82,240, 13,156, 88,
- 18, 85, 59,174,218,112,214,145, 58, 21,172,246,160,156, 69, 77, 79,109, 84,209, 49,123,238,162,214,229,220, 91, 46,182, 82,202,
-234, 65,111,173,169, 45,182,234,100,111, 24, 6,117, 9,136, 96,140,250,213,167,121,166,181, 70,156, 83,127, 29,181, 80,136,157,
-111,111, 23, 0, 80, 74,218,221, 59,125,243,214, 86,251, 42, 69,207,156,148, 42,166,118, 73,172, 53, 56,175, 49,194,173,104,243,
- 88, 82, 82,104, 17,130,179, 75, 88,143,254,123,240, 94,155, 10,107,123,246,122, 89, 69,162,166,235,130, 82, 73,171,181,183,182,
- 74,109, 5,219, 41,137,181,235,150,164, 53, 77,186,148,178,138, 57,151, 73,178,179,210,195, 99, 58,236,171, 71,198,142,155,192,
-102, 59,176,217, 4,182,251,145,156, 39, 30, 61,121, 66, 27,182, 96, 3, 34,141,244,226,107,166,103, 95, 17,252, 64,125,180, 97,
-247,222,143,185,125,246, 45,243,139,175, 41,249,142,199,123,207,198,127,192,223,253,246,115, 74,174,148,230, 72, 2,206,169,215,
-127, 28, 3,219,113,196,198, 72,201,145,220,189,247,165, 67,214,106, 45,189, 96,211,247,103, 46, 73,225, 66,198,244,215, 95,139,
- 36,211, 39, 78, 70, 12,210,164, 83,226, 84, 11,100, 27,167,175,141,138, 69, 93, 70,174,233,215, 25,188,103, 8,142,237,102,203,
-110,243,136,216, 2,255,254,255,252, 47,124, 55, 21,178,169, 20, 49, 39,161,156,172, 59,245,101,204,219, 78,142,226, 5, 36,191,
- 28, 82,173,174, 7,224,114,238, 45,135, 74, 59, 15, 79,235, 75, 89,211,195, 98,238,119,206, 15, 41,144, 31, 2,129,188, 75,252,
-166, 73, 65,151,115,133,250,144,199,248,162, 19, 55,111, 87,234,247, 74,105, 17,108, 88, 35,108,156,103, 19,188, 90,214, 68, 72,
-115,226,238, 56,171,144,197, 15,157, 66,165,220,238,133,251, 62, 19, 40,210,200,173, 32,206, 48, 90,221, 45, 74, 93,104,112, 22,
-172,250,223, 99, 78,148, 86,201, 41, 51,167, 89,149,200,214, 96,219, 73,161, 94,155, 90,152,122,144,243,122, 1, 22,150,216,197,
-110,121,202,153,220,170, 70,127, 2,115,202,148, 6,227, 48, 98,173, 42,178, 91, 87, 6, 15,198, 97,105,196,156,176, 54, 43, 13,
-202, 52,102,116,255,218,250,156, 92,150, 84,182,190, 18, 88,211,243,106,237,152,195,118,239, 98,235,242, 57, 89,190, 23,173, 63,
-188, 39, 10,155,118,209,237, 44,104,189,174, 31,160, 33, 23, 44,129,115,238,251,247,173, 91, 46, 7, 76,125,120,223, 22,152,200,
- 73, 93,127,218,185,159, 42,165,251, 22, 60,125, 75,212, 53, 42,242,162,150, 90, 43,154,203,101,252,249,207, 44,226, 32, 61,176,
- 59,110,163,251,138,141,152,238, 19,215,103,204, 57,219, 15, 67,221,223,165, 57, 50,142,154,216,230,189, 35, 38, 85,109, 75,211,
-131,128,146,251, 33,216, 39, 15, 58,146,161,212, 70,179,173, 3, 44, 26,222, 91,142,211,129,167,187, 13, 79,183, 59,174,115,227,
-250,246,208,133, 73,181,115,212,181, 11, 42,173, 17,198,141,218,158, 58, 85,204, 26,203,213,227, 71,220, 92,191,194,160,228, 53,
- 93, 91,203, 58, 33, 52,222, 19,167,153,146, 42,233, 24,123,218,154,231,238,230,154, 86, 42,166, 9,193,122, 54,187, 61,215,183,
-215,228,190,195,205,165,244, 0, 18,117,123,228,121,238,113,161, 5,169, 48, 24,139,167, 96,170, 70, 18, 15,206,246, 20,179,220,
-167, 78,134, 26,245,185, 52, 93, 41,101,204,192,225,112,192, 58, 7, 22,182,251, 61,215, 61,123,222, 25,163, 99,254,254,252, 45,
-234,114,181,139,233,250, 98, 28, 71, 82, 74,171, 59, 4,105,228,164, 23,163,179,138,252,181,214,146,230,132, 55,150, 60, 71,213,
- 33,148, 74,203,149,148,116, 2,176, 4, 49,231,101,185,105,165, 23,112,170,214, 23,235,250, 37,101, 73,157,249,207, 34,186,235,
-140,136,148,103, 21,199, 25,213, 85,212, 90,217,142, 35, 37,183,190,250, 82, 42,219,178,218, 91,223, 15, 57,234, 37,210,244,125,
-167,239, 31, 13,100,209, 24, 84, 97, 58, 30,214,203,182,118,216,142, 24,233,106,237, 14,214,178,166, 79,211,164,139,209, 12,222,
- 12, 4,175,120, 87,103,245,236,181,198,116, 44,118, 67,122, 12,172, 17,206,110, 16, 86,149,127, 46,122,174,228,114, 18,221,182,
- 53,136, 74, 11,111, 47,203, 0,176,172,182, 65,181,225,105, 32,138,233,222,110,189,208, 13,227,224, 24,130, 39, 12,150,253,163,
- 13,187,237,128,223, 25,220,224,251,218,192, 66,139, 28,191,251, 22,239, 2,245,131,247,185,169, 19,239,111, 60,175, 95,190,228,
-230,243,223,241,201,123,123, 98,118, 60,251,250,134,193,171,157,209,244,177,121,237, 42,116,231,117,186, 53,248,128,136,167,222,
- 30,184, 61, 76, 90,188,157, 79, 96,141,130,155,242,178,162,172,149,210,237,149,139, 10,222,172,226,235,211,153, 84,155, 22,231,
- 86,172, 6,187,116,113,160,105,116,235,169, 37, 4,203, 56,142,108, 54,143,168, 50,242,239,255,195,127,226,211,111, 94,146,100,
- 67,173,122, 31, 56,221, 25,155,179,101,242,217,129,186, 30, 81,186, 67, 53,253,226, 64,186, 48,255,220,175,218, 63,209, 5, 74,
-129, 92, 10,149,222,150,148,246, 67,216,220, 43, 34,180,117, 79,245,153, 86, 93,250, 3, 33,167, 71, 71, 5, 10, 93, 20,212,238,
-117,113, 15,209,205, 46, 4,120,168,175,208, 84, 13,146, 24,156, 97,235, 13,163, 95,160,250,133,169, 20, 74,159, 58, 88,105, 88,
- 83,168, 37,146,197,208,140,195, 72,135, 18,148,140,115, 70,185,217,162, 99, 39,221, 96, 56, 74,237,145,176,173,146,114,234,200,
-208,210, 61,168, 65, 15,147,170, 30,198,154, 51,181, 38,141, 20, 93,146,224,144, 62,190,237, 56,222,190, 14,113, 70,133,121,216,
-165,123,218,224, 0, 63,238, 9, 33,116, 96, 65,193,180,132, 33, 97,131, 65,230, 10, 49, 98,208,110,231,104,234, 34,243, 84,145,
- 87,223,135,139,152,254,152, 44,118,181,254,140, 44,118,200, 21, 88, 36,212,118, 30,106,223,247,113,114, 62, 94,172,151,173,242,
-114,225,175,122,130,119,139, 26,223,154, 41,176,236,227,219, 89,205,128, 57, 11,116, 49,171,144,111, 29,207,183, 83, 22,253,165,
- 16,111,209, 22,180,147,154,116,125, 54,213,149,127, 73, 53,236,207,144, 61, 61,157,102, 81,136,247,255, 47, 14, 6, 13,248,105,
- 4,111,112,198,234, 37,159,146, 90,219, 68, 83,172,156,115,140,163,134,187, 56,111, 52, 60, 99,174,148, 92, 59,251,201,208,138,
-193, 24,223,189,176,141, 66, 70,170, 16,140, 83, 78,182,179,124,125,188, 69, 70,131,115,129,134, 97,240, 3, 37,169, 10, 31,167,
-184, 79,223,153,227,211, 28,241,222, 18,188,233,192, 28, 75,216, 8, 67, 25, 40,185,118, 47,110, 85,234, 97,211,139,106,202, 71,
- 48, 22,135,233,157,136, 96, 22,201,125,179,132,160, 30,253,227,225,142,154,116, 44,109,173, 87, 53,243, 16,186, 14,162, 96,139,
-138,209, 44, 66, 16,141,147, 53,165,170,109,180,199,133, 90,111, 25,173,163,161, 95, 79,109, 26, 34, 34,222, 80,170,174,141,156,
-245,164, 57, 43, 49,110,142,122,249,214,162,171,137,214,216, 12, 35, 49, 39,156, 83,108,148,146, 30, 23,171,151,193, 58, 81, 98,
-158,115,228,220, 95, 39,180,216,159,142,135, 30,223,106, 9, 11,249,173,115,206,105,122,240,151,166, 49,201,213,104,161,209,250,
-168, 94,223,247, 74,144, 43, 89, 83,241, 20,189,171, 98,188, 90,171, 2,165,140,213,247, 94, 47,228,151, 66, 74,140, 85,186, 88,
-158,187,120,173,172,161, 82,193,235,217,108,122,148,172,235,180, 55, 75,207, 12, 40, 69, 47,112,235, 86, 93, 73,107, 11, 2, 88,
- 11, 95,165,161, 73,159, 40,244,243,196, 10, 70, 60,224,122, 66,223, 9, 38,228,157, 50, 24,232,239,247,193, 5, 74,158,200, 53,
-245,241,185, 22,155, 57,118, 68,114, 23, 25, 54,178, 58, 8,172, 69,204,165,240, 89,181, 59,210,105,138, 94,177,190,206,174, 17,
-185,234,186,176, 74, 99,116,150,237, 16, 24,189,193, 7,203,110, 27,120,250,228,138,199,251, 45,110,231,160, 36,218,124,139,173,
- 51,229,120,131,153, 18, 50, 60, 97,248,240, 15, 57, 60,255, 27,210,231,159, 81,175, 95,242, 23,255,252,207,200, 47,239,248,221,
-111,159, 83, 83,198, 88,199,118, 24,136, 83, 38,231, 70,118, 22,219, 12, 83,201,232, 96,158,142,219,173,132,102,244,194, 30, 61,
- 37,102,108,169, 24,229, 60, 19,156,161,101, 93,225,232,215, 89, 46,148,237, 86, 26,210,146,246,226,226,122,100,180,244,224,167,
-190,206,148,222,144,228,202, 48, 90,118, 91,195,238,201,158, 54, 62,230, 63,252,151, 95,240,187,103,175,153,197, 82, 68,225, 65,
- 77, 87, 87,250, 7, 91,189,167, 20, 22, 89, 23,132,122,248, 45,217, 91, 61,169,203,176,118, 99,173,213,183,120,188,121,103, 23,
-126,255,242,190,191,107,127, 67,220,118,207,222,180, 0, 79,222, 64,160,182,126,176,116, 97, 82,251,158, 49,189, 94, 50,102, 45,
-104,164, 63,244, 94,132,193, 7, 6,231,215,220,226,152,146,118,191, 37,227,236,160, 63,159, 51,198, 44, 80, 7, 93, 85,232,190,
- 77, 48, 70,119,108,115, 41, 10,226,247, 67, 23, 81, 40,236,161, 81,149,160,100, 61,174,199, 86, 66, 31,183,229,220,131, 46, 10,
-214,178,218,107, 84,132,197,250,166, 81,165,232, 34,170, 80,123,210, 60,171, 80,198, 88,135,160, 99,222,230, 3, 98, 53,192,163,
- 21,237,213,116,100,106,136,199, 3, 37,101, 48,170,128, 53, 61,154,113,225, 23, 40, 17,235,140, 33,214, 78,254, 85, 89, 65, 10,
-230,222,107, 44,111,136, 16, 31, 18, 82, 46, 63,174,235,130,167,173,170,251,239, 3, 24,125, 95, 78,251,131,207,160,112,145,174,
-133,188,219, 70,121,185,207,231,193,164, 54,145,246,134, 74,222,244,175,255, 34,204,166,246, 75,128,165,139,119, 39,181,124, 41,
- 12,195,118,221,167, 46,171, 6,231, 29,210,160,196,194,102,179,225,230,213, 45,166, 42,232, 68,213,192,125, 4, 47, 11,175,161,
-123,143,105, 52, 3, 71,132,187,220, 85,220,181, 64,138, 72, 85, 43,164, 65,173,111, 78, 23,128,120,163,157,205, 48, 40,124, 68,
-188,103,187,191, 98,138, 25, 36,177, 49, 35, 6, 81, 5,123,133, 57, 39, 42, 16, 92, 87,133, 59,135,115,190,103,125, 27, 82, 85,
-225,208,116, 56,170,158,196, 41,253,108, 28, 6,196, 89,142,243, 68,156,102,188,211, 2,185, 81, 85, 49, 94,128,166,251, 76, 35,
- 66, 48, 66, 43,133, 98, 13,185,101, 90, 51,108,195, 70,231, 84, 70,245, 41,135,227, 65,223,195,198,224,199,160, 69, 78, 23, 47,
-197,162,243, 99,103, 60,199,227,145,138, 48,184, 13, 41, 30,241,131,210,236, 98,140, 64, 99, 24,130, 6,188, 76,202,199,207, 69,
-145,174, 11,154,185,228, 76,179,141, 27,160, 90, 97,179,217,112,119, 60,178,123,250, 72,167,110,181, 50,205,147,198,240,246, 93,
-170, 17, 84,181,237,122, 60,239,168, 10,243,142,189, 83, 69,126,183, 64,130,244,120,218,172, 94,243,222, 57,174, 51, 48,171, 97,
- 56,206, 40, 5,176,212,178, 10, 65, 77,239,154,107, 46,212,162,224, 23, 39,203,120,101, 25,239,215, 51, 39, 83, 91, 47,203,229,
-221,103,236,169,248,174, 57, 97,250,179,232,140,103,154,142, 56,103,250, 46,188, 94, 76,205,106,159,134,213, 82,187,163, 67, 71,
-235,234, 14, 72,157, 62, 9, 86, 78,133,179, 93,166, 91,253, 61,178,100,197,203, 66, 58,236,103,162,181,166,239,182,141, 78, 42,
-141,178, 88, 93, 8,140, 59,207,118,235,120,252,222, 21,251, 71, 59,118,143,118,236, 63,120, 76,138, 17,111,129,122,100,250,236,
-119,216,249,136,140, 91,204, 38, 16,194,200,231,255,233,255,230,189, 15, 31,179,223, 61,226,187,151,183,188,190,189,229, 48, 11,
-115,204,186, 94, 16, 75, 66, 85,237,227,232, 85, 28, 74, 83,218, 93,109,164,152,201,177,210,156,165,166,137, 32,130, 41,170, 79,
-243, 65,147,214,194, 96, 16,122,114,161, 49, 20, 17,114, 45,148, 10,217, 88, 74, 85,118,136,171,167,172,248,133,255, 0,165,219,
-128, 27,206, 13,248, 33, 16,182, 87,188,158, 50,127,243,235,255,198,215,223,222, 81,237,160,104,227,245,123, 42,157,149,248, 32,
-186,109, 81, 42,203,137, 30,215,150, 31, 43,106,178,153, 11,246,216, 91,169,109,247, 47,242,183,197,109, 62, 4,151,185,223,149,
-157,255,154, 57,199,146, 46, 36,158,229,243,232, 69,138,109,246,141,204,247,115, 65,242,125, 5, 54,107,232, 75,195, 91,199,198,
-233,155,167,181,166,232,215,172,123, 55,239, 45,173, 21,114,214, 29,145,250,133, 59,213,169,182,117, 82,145,208,195,196,248, 81,
- 9,112,214,105,248, 74,174,136, 81, 37,232,118,227, 16,169,148, 18, 73, 73,149,242,181,100, 85,221,122,229, 6,235,234,185,116,
-193,226,217,215,221,195,103,150,162,172, 46,170,241, 12, 25, 48, 53, 48,140, 91,160,113,156,142, 36, 81,222,188,180, 12, 37, 51,
-122, 67,112,158, 97,187, 95,201, 85, 34,118, 29,185, 55, 89, 43,184, 55,112,186,102,141,103,237,241,178,247,216, 50,139,103,251,
-124, 60,125,159, 10,119,234,112,251,122,125,117, 92,188,221,249,240,206, 60,245,127,164,167,253,226,130, 62,139,240,123,120, 53,
-211,116,117, 33,114,118,129,183,245,243, 71, 22, 71,197,201,210, 89,115, 89, 51,200,215,137,199,218,236, 11, 74, 35,173, 61,168,
-161,189,225,204, 48,198, 80,114,233,221,161,244,106,190,187, 1,122,132,103,169, 25,135, 87,244,102,213, 46, 56,231,218,167, 40,
-130, 53,129,215,243,204, 31,127,242, 17,223,188,122, 65, 76,134,187, 89, 85,246,214,131,163, 32,166, 82,106, 35, 56,207, 28,103,
-106, 2, 27, 44,143,159, 62,162,138,168,202,188, 22, 76,112,189,163,159, 57,246, 48,148,113, 28,181, 72, 45,203,118, 72, 9, 89,
-105, 78, 43, 54,118,179,217,170, 66,189, 36,230, 28,149, 83,223, 76, 47,100, 6, 30, 95,237, 57,222, 92, 51,140,129, 54, 37,164,
- 85,156, 24,140,212, 21,216,226,208,212,192,210,132,205,184,227,120,123, 84,239,189,243, 28,166, 59,140,115,154,120,230, 45,169,
- 19, 16, 75, 85,229,183, 51,150, 57, 69,156, 23,156, 11,122,209,199,136,113,150,121, 78, 56,167,227,105,122,162,155,179,142, 38,
- 16, 59, 1, 14, 99,116,172,238, 44,227,110,195,225,120, 36,209,192,121,174,211,204,230,106,203,235,195,173, 18,195, 90, 67,172,
- 16,188,195,148,130, 31, 22, 43,215,160,116, 64,209, 9, 72,235, 33, 37,210,255, 59,198,116, 54,121, 50,212,110,253,202, 85,207,
- 20, 17, 77, 46, 51,152, 62,230,214, 21, 2,125,210, 32,221,206, 69,105,180,146,217, 14, 3,173,100, 77,110, 67, 40, 57,107, 76,
-243,250, 12,246, 92, 9, 99, 52, 70, 85,206,198,200, 62,172, 12,248,147, 46,234,116,230, 0,164, 84,116,165,215,139,218,148, 52,
- 42, 85, 47,231,172, 14,145,190,111,214,128,156, 62,185, 66, 48,173,195,194,138,197,186, 19,150,220,116,113,176,237, 33, 66,117,
-117,244,176, 82,249,130,115, 12,222, 18,156,193,142,142,171,167, 87, 60,121, 52,242,222,251, 87,108, 55,129,253,126, 68, 2,248,
-237, 72,187,157, 72,229, 25, 55, 95,124,201,163,237,192,248,241,123, 32, 19,245,230,128, 73, 19, 31,252,225, 31, 83,158,189,228,
-219,175,191,229,245,113,230,217,203,137,235,227, 76,174,186, 30,170, 52, 98, 86, 1,157,237,235,188,185,100,226, 20,187, 47,221,
- 81, 91,101,227, 2,174, 9,219,161,243, 37, 6,207,213,110, 68,122, 40, 79,112,129,253,230,138,215, 55,175, 48, 94, 56,204, 19,
- 47, 94, 29,168, 38, 96,113, 26,145, 43,149, 86,123,160, 79,171,171,155,201,121,203,118,187,161, 96,248,251,223,125,197,221, 20,
-153, 19, 36,172,218, 14,173,167, 54,101,244, 27, 99,112,235,156,146,246, 22,212,171, 92, 80,179,206,127,254, 33, 15,239,187,172,
-101,239, 58,128, 31,218,147,126,111,215, 69, 91,119, 46,114,134, 2, 49, 29,180,177, 62,140,103,170,124, 46, 40,105, 15, 11,173,
- 90,203, 24,129, 96,173,170,110,155,102, 27,151, 90, 73, 77,213,223,173,234,184,195, 59,175,111, 94, 17, 98, 44,212,178,104, 10,
- 58,211,220,122,154, 88,106,161,191,153,181,243,240,206,244,238,191, 40,233, 43,103,114,154,187,103,180,225,157, 94,172,166, 23,
- 41,186,127,213,224,150,229,123, 82,123,158,244,217, 82, 24, 74,189,176,163,149, 28,177,197,107,165, 94,133, 88, 33, 87,139, 55,
-170,180, 79, 41, 51,120,203,214,171,122, 57,231,140,109,130, 23, 52, 84, 96,201,150,191,231,134,144, 53,185, 73,206,118,223,239,
-238,166, 31,250,222,182,243,209,247, 25,145,238,109, 68,184,243,105,206,195,207,147,172, 59,253,135,133,116,237, 12, 80,211, 63,
-255, 7, 62,206,249,223,115, 81,168, 46, 41, 92,152, 11, 31,233,233,166, 94,130,128,148, 95, 45,125,103, 94, 22, 69,107, 91,184,
-247, 42,111, 44, 93, 48,179,140,222, 74,202, 12,195, 22, 87, 51,165,229,158,142,150,161,251,221,115, 46,125, 85,161, 66, 35,206,
- 58, 38, 99, 5,162, 30,206,235,238,187, 9,205, 5, 98,201,248,193,240,211, 15,158,114,119,251, 5, 12, 1,194, 72,169, 19,166,
-214, 85,225, 95,114, 83,200, 70, 41,108,198,173,170,235,123, 18,160,183,234, 99,143, 41,235,222, 91, 56,203, 80, 87,255,123,234,
-123, 65,211, 15, 38, 31, 2,161, 91,197, 20,128,163, 19,131,105,154, 78,226, 88,224,120,125, 67,141,145,106, 12, 38, 87,194,234,
-213,237, 88,100, 84,128, 52,248,129, 54, 39, 72, 9,219,247,241,165,137,138,235,172, 97, 46, 42, 78, 45, 69, 71,211,198, 58, 98,
-201,196, 82, 73,125,171,212, 68,136,109,225,110, 91,154, 21, 98, 79, 99, 51, 78,119,220, 83,154,123, 46,249, 34,102, 85,104,141,
-245,134,155,233, 14, 99, 13,105,206,234, 65, 54,144,110, 11, 65, 26,174, 11,153, 76, 79, 52,116, 86,201,112,187,205,176, 42,251,
- 23, 65,152,177, 26,190,226,172, 94, 96, 94, 92,183, 60,210,125,204, 3,113,158,113, 34,116,169, 44,251, 81, 61,210,210,244,156,
- 75, 81, 39, 34, 45,233,234,101, 78,221, 14,103, 13, 57, 23,213, 42,228,140,113,158, 48, 12,184, 14, 19,171,165,244,236,121,117,
-202,196, 24,123, 66, 90,162, 36, 21,236, 22, 78, 43, 44, 99, 85,155,161,222,107,117, 76,136,156, 20,233,165,171,248,109, 53, 29,
-208,107,250,170,169, 94,228, 66,172,197,125,183,216, 45,126,124,133, 19,185,158, 48,121, 54, 25, 89,100,228,221, 77,162, 63, 39,
-120, 99,216,239,119, 60,122,186,101,255,120,203,147, 39, 59,246, 87, 35, 79,222,219,171,183,124, 99, 16, 47,180,155,137,223,255,
-237,175, 56,196,153, 71,255,234,127,166,120, 65,174,191,229,246,215,191,225, 39,127,241, 71,180,187,196,237,151, 47,120,241,236,
- 37,135, 88,185,142,153,155,105, 38,225,213,223,223,250,132,216,185,190,195,183, 76,135, 3,226, 2, 34, 66,172, 17, 17, 75,142,
- 32,165,193,182,242,254,211, 13,143, 31,239,153,111,143, 24,175,161, 91, 87,131,229,106,172,252,197, 79,127,194,159,254,241, 71,
- 20, 18,215,119,145, 95,252,195,103,124,246,197, 53,165,121,134,160,244, 63,154,174, 53,196, 26,182,187,145,253,126,203, 92, 18,
-207,190,126,201,221,220,152,178, 35, 73, 35, 35,212,158, 89,111,140,165,137,161,104, 82,241, 69,166, 84,135,156,220, 27,157, 46,
-130,134, 11, 44,236,137, 18,126,238, 69,126, 23,194,245,221,104,207,119,100,100, 63,176, 67, 61, 83,192,173, 66, 11, 89,243,208,
-219,170, 78, 62,143,217,148,123,221,163,188, 1, 20,161, 43, 17,245,133, 9,206,170,226,179, 7, 34, 52, 81, 48, 64, 41, 42,236,
-113,253, 66,111,173,105,228, 99,174,136,120, 61,124, 69,187,230, 82,117, 12,229,195,168,222, 91, 81,203, 88,201,153, 84,148, 36,
- 85, 83,164,150,164, 84,170, 86, 49, 86,214,177,119, 42,121, 69, 64, 46,250,128, 69, 43,160,223, 49, 61,120, 52, 57, 77, 78,246,
-168,206,157,110, 34,204, 57,234, 21,214, 59,235, 50,207, 20, 67,199, 49,194,113, 78,148,148, 24,131, 2, 80, 92, 5, 47,130, 23,
-161, 72,123, 11,174,245,116,161,157, 43,223,239,143,204,229, 7,172, 98, 46, 60,222,114,182, 23,191,255,231,133, 11,148,241,178,
-218,150,139,103,240, 68,188, 61, 41,214,219,133,127,124, 41, 66,196,112,225,253, 63,127,230,207,159,185,101,124,126,185,187,239,
- 31,191,158, 24,239,247,247,242,166, 7,126,180,218,167, 15,237,100,239,180,198,146,146,142,225,164,163,170, 90,133, 24, 19, 33,
-231, 46, 62,242, 43, 45,144,166, 23,245,154,105,180, 48,249,251,123, 49,231, 68,112, 65, 47,241,218,200, 89,237, 85,181,170,178,
- 29,111, 56, 28,111,249,248,241,158,235,171, 45,175,178, 33, 90,199,148, 12,181, 9,177, 20,196,120,170,104, 20,104, 24, 84,117,
- 63, 29,238,176, 67, 32,120, 71,188,131, 41,206, 93,240,164,248, 82,245, 74, 23,172,243,218,205, 56,203,102,179, 85, 27,155, 83,
- 97, 81, 18, 21,130, 25,111, 25,198, 65,189,246, 13, 54,227, 6,151,102,200,153, 50,207,120, 84,199,226,187,101, 83,140, 90,247,
-164,213,213, 6, 20,231,185,107, 76, 42, 77, 44, 33, 56,110, 15,119,152,193, 17,163, 78,205, 74, 41,180,172,194,191, 44,153,140,
- 16,107, 37, 55,214, 98, 34, 67,223, 21,131, 25,130,250,181,115,162, 54,131, 12, 1,111, 45,116, 46,249, 92, 10, 91, 63, 98, 4,
-101,231,247,181,220,198, 26,198, 94,212,120,163, 83, 19,223,189,255,166, 53,194, 16,104, 6,194, 16,200,113,214, 81,118,191,152,
- 90,109, 76, 83, 2,107, 59,107,189, 59, 26, 88, 44, 90,142,146, 35,227,232, 41, 8,211, 52,119,172,116,237,236,126, 77,168, 19,
-209,206, 87,196,172, 54,171,148, 83, 23,146,169,199, 60,149, 66, 67,173,122,131, 15, 88,107, 58,209,176,225,230,136,115,110,141,
-225, 85,186,155,118,245,151, 78,165,118,193, 84, 88,166, 75,102, 21, 82, 47,111, 70,179,190, 95, 90, 61,173,182,140,145,206, 55,
- 63, 59, 35,140,166, 98, 89,107,186,231, 92,223, 67,206, 14, 90, 8,247, 41, 73, 41, 21,223,215, 22, 98, 13,173,170, 6,100,179,
- 9, 60,190,218,178,223, 13,108, 54,150,237,104, 25, 55, 30, 51,170,184,144, 57, 49, 95, 79,220,125,253,130,237,207,126,194,240,
-209, 71, 28,190,249,146,252,219, 79,121,186,127,130, 15, 35,119,191,249,156,223,254,254, 25, 95,126,119,195,215,119,133,231,215,
- 7,230,102,250, 68,163,173, 54,212,215, 55, 7,198, 33, 96,165,244, 24, 95,181, 58, 55, 43, 72,169,120, 44,219,237,192,199, 31,
- 63,162,230,107, 62,120,188,229,117,173,188,124,121,131, 56,157, 98,140, 87,142, 54,221,224,242,158, 71, 59,199,199, 79,158,242,
- 56, 56, 70,243, 27, 24, 6,126,246,211,159, 34, 2,135,227,204,235,215,119, 28,166,136, 56,167, 92,253, 67,194, 5,135,177,142,
-146,202,137, 95, 34,130,105,102, 53,217, 34,224, 90,123,168, 59,111,103, 59,244, 51,208,204, 27, 49,169,103, 56,208,251,209,169,
-255,132,172,236,239,219,153,222, 31,207, 47, 85,228,162,178, 94, 41,120,237, 50, 27, 94,206, 60,196,230, 30,220,108, 21,114,119,
- 16,140, 38,219,170,210,213,116,198,117,233,182, 25,233,234,215,101, 52, 63,132, 65, 51,111, 99, 36,149,130, 49,154,152, 86,154,
- 16,155, 90,128,140,181,120,235,113,182, 81,243,196,156, 53, 73,138,166,145,156,139, 32,209,200,226,107, 54,148,154,200, 69,187,
-141, 82,117, 44,186, 42,248, 47, 22,212,253,162, 40,253, 98,239, 10,173,101, 29, 33, 61, 66,179,149, 68,110,218, 17, 26, 17,172,
-202, 30,105,102,209,174, 11,169, 65,157, 35, 99,208, 55,189,171, 21,215, 17,151,114,241,250,159, 94,231,229,118, 49,139, 63,251,
- 7,176,246, 31, 90,173, 92, 38,241,201,137, 96, 39,111,238,228, 21,107,219, 46,236,103,151,182,115,233,252,250,203,189,247,253,
- 96, 25,228, 94, 60, 44,231, 1, 47, 39, 1,104,163,190,117, 74,212,206, 4,130,167, 98,192,188,193,130,175, 93,197,187, 28,110,
-203,132,171,228,178,218, 25,181,211,209, 2, 34,197,196,184,241, 42,174,169, 32,173,244, 2,161,219,249, 22, 27,161, 57, 47, 60,
-186,216,176, 95, 24,244, 24,203, 38, 90,244,122, 35, 92,223,222,240,135, 31,254,136,240, 7, 63,229,139,235, 59,190,190, 59,114,
-157, 26, 45, 4,124,211,172,232, 34, 2,198, 18, 75,161,220,220,226,189,231,238, 48,245,174, 81,243,179, 99,202, 29,244,163, 36,
- 57,101,125,123,156,245,248, 16,184,187, 61,168,181,199, 58,154, 81,125,136,247, 30,179,140, 84, 75, 97, 51,140,208, 42,190, 99,
-111, 3,122, 24, 57, 4,191,240,226, 87,188,129,238,105, 19, 73,253,200, 94, 52, 94, 52, 21,172,120,114,173,180,163,166,214,229,
- 84, 25,119, 91,154, 73, 76,243, 76, 42,173,143,201,213, 87, 47, 93,151, 34, 98,216,236,246,196,156,153,230, 25,239, 44,133,202,
-224, 29,211,241, 14, 47,158,150,149, 94,182, 27, 7,166,227,129, 49, 4,246,206,245,136,209,134,113, 6,103, 53,119,193, 72,101,
-179, 9, 29,255,169, 74,241, 70, 5, 99,169, 89,147,248,244,153,182,250,122, 89, 11,162,133,157,113,142, 41,166, 53, 55, 29, 41,
-184,133, 76, 72,197, 88,143,247,125, 20, 95, 50,182,234,107,170, 35,252, 5, 6,165,205, 75,169,181,159, 57,118,125, 70, 21, 18,
- 84,168, 21, 98,202,216,190,247, 93, 88,240,203,122, 7,129,154,245, 50,243,182,131,171,186,148,189,246,177,253,210,156,153,190,
- 94,172,114,110, 71, 94, 60, 33,230, 2,255,188,188,159, 23, 39,136, 8,171, 34, 95,241,194,141,150,122, 49,227, 44,197, 10, 86,
- 84,155, 81, 75, 94,187,121,219, 11, 34,239, 12,227, 38,224,131,176,191, 26,217,239, 3, 67, 16,174,174, 54,136, 87,249,188,136,
- 1,191,227,250,245, 55, 28,143,119,236,140,234, 33,238, 62,251, 10,249,246,134,167, 63,254, 41,233,155, 27,126,255, 15, 95,240,
-119,207, 94,240,245, 92,249,238, 46, 19,171,161, 25,131,109,150, 96, 32,149,184,162,153,141,177,250,253,198, 32,182,145, 83, 92,
- 83,243,196, 22,172,207, 60,125,178,101,104,129,173,113,188,152, 39,140,135,155,219, 59, 54,143, 45, 97,180,108,182,142,207,191,
-250,130, 97, 52,124,244,201, 79, 57,198,137,253,149, 5,155, 25,252, 17,193, 48,213, 3, 86, 34, 49,222,225,237,142,195,113, 98,
-138, 89,115,239,173, 54,154, 53, 21,114, 43, 52, 89,232,252, 66,109, 58,197,115,111, 35,179,137,180,123,169, 83,188, 49,174, 62,
- 79, 40,226,204, 38,118, 30,109,249, 67,144,177,239,218,197,191,139, 44,119,209,185,182,118, 15, 58,186,130,196, 46, 80,183,111,
-196,119,158, 3, 84,186, 29,109,185,212, 27,144,114,234, 24, 77,221,224,219,158,253,235,157,102, 49,207, 81,147,216, 16,139,113,
-142,106, 44,115,210,140,102,231,189,134, 11,212, 66, 58, 78,107,168,133,181,129, 48,104,222,122,138,145,214,199,177,165,119, 88,
- 41, 87, 77,144,106, 77,115,210,219,105, 42, 98,132, 51,240,137,118, 47,214, 42,196, 99, 57,228, 23, 8,141, 53,202,166,103,193,
- 15,246,100,169, 38, 22, 49, 14,235, 7, 4,186,223, 94, 31, 24, 5,206,152,238, 1, 78, 93, 47,217,222, 74, 88, 93, 81,178,239,
-248,158,254,144, 2, 79, 39, 17,242, 22, 76,107,123,139, 59,226,242,247, 95,168,214,223,250, 60, 45, 23,245, 41,216, 69,238,117,
-232,154,111,222, 46,104,116,239,244,198,191,241,223,172,174, 1,150, 75,214, 44,187,115, 13,108, 41,165,234,248,188,158, 46,250,
- 90, 27,206, 43,221,108, 33,134, 25, 81, 15,175,179, 1, 17, 72, 57, 95,188, 17,155,156, 61,236, 61,137,107,233,148,244,130,208,
- 21, 85,172,141, 36, 96, 82,229, 47,126,244, 17,143, 54,215,228, 79, 63,229,106,191,129, 97,228, 54, 70,110, 99,230, 54, 87, 14,
-169, 48, 39,125,174,157,113,120, 31,184,203,119, 90,252,149, 68,174,141,212, 26,121,142, 93, 83, 97,152, 83, 36,140,174,103, 72,
-119, 75, 87, 31,231, 46,130,167, 82, 11,113,158,184,218,237, 48,136,142, 49,107,101, 52, 22, 82, 98,227,188,122,117, 57,179,150,
-218,229,124,145,117, 21,177,125,178,231, 48, 69,166, 56, 19,231,166,246, 48,107,152, 99, 34, 55,225,246,230,150,108, 96,206,153,
- 34,134,212, 85,237,181, 51, 16,114, 78,108,119,123, 82,212, 28,118, 47,104,212,171, 1,219, 50,219,142,127,254, 96,191, 93,227,
- 87,199, 81,247,211,155, 97,232, 93,172,168, 56, 9, 97,179, 25, 58,162,119,232,221,116,102,206,250, 58,180,146,215,130, 45,198,
-220,233,139, 74,169,160,136, 44,238, 0, 0, 32, 0, 73, 68, 65, 84,196, 24,176,110, 29,159,150, 90, 87,172,112,140,185,175,231,
- 52,153,204, 59, 79,169,202,131,167,175, 55, 90, 67,215,122,193, 17, 99, 86, 31,127,209,104,228,213, 43, 14, 90,176,180,220,117,
- 4,105,157,175,218,238,102, 18,209,238, 87,137, 83, 58,213,202,173,104,158, 67, 15,187, 88,194,104, 22,126,188,172,154,232, 19,
- 53,205,208, 16, 83,251, 51,168,151,180,244,162,194, 57,115,154,192, 25, 61,115,189,119,167,224,167,117,234,167,102,192,210, 35,
- 94,117,106,161,225, 85, 86, 44,222,233,202,192, 15,142,113, 27, 24, 54,158,253,126,228,209,214, 97,130,208, 28, 36,219,240,227,
-134,118,156, 72,199, 59,222,251,201,199,120,132,195, 47,127,205,203, 95,254,138, 63,255,203,255,129,118,125,224,187, 95,126,201,
- 95,255,252, 55,252,246,213,196,235,104,185,141,149,195, 92,104, 94, 11,177, 16, 70,178, 13,196, 62, 25, 82,132,175,218, 43, 55,
- 97,100, 12,158,224, 2,211,221, 29,121,190,227,241,147,199,152, 22,121, 20, 6,126,246,241, 39,252,253,175, 62,229,182,100,172,
-245, 28,167, 72,108,149,187, 89, 83, 1,167,187, 66,121,126,131, 88,199,235,155, 59,246,187, 45, 37, 53, 90,203,204, 83,228,112,
-136,228, 98,120,245,221, 13, 83, 42,100,132, 38,150, 38,157, 37,111, 26,148,126, 55, 72,237,107, 99, 61, 19, 28, 77,222,178, 23,
-231, 77,155,219, 57,147,132,149,110,175,234,121, 57,139,221,108,237, 66,113,254,174,131,253, 33,159,250, 67,221,249,253,194, 66,
- 51,155,251,102,244, 28,103, 43, 15, 40,157,219, 67,145, 52, 39,168, 72,107,229,162, 24, 89, 42,202,218, 10,173, 36, 45,112, 22,
-209,211, 34,138, 19,136,115, 84,113,139, 24, 92,208, 55,232, 28,117, 44, 54, 12, 67, 71, 94, 30,160, 68,141, 87, 5,140, 13,138,
- 90,244,158,212,119,122,226,132, 20,103,106,105,204, 73, 81,141,165,202, 74,121,170, 11,248,167,223, 19,166, 87,189, 86,192,185,
-126, 41,168, 42,104,237,212,108, 31,159,111,140, 48,132, 0,226,152, 82, 37,150, 74,107, 22, 76,192,249, 43,196,192, 52,125,199,
- 28, 35,102,116,138, 45,108, 10, 85,216,120,207, 68, 35,215, 19, 19,190,221, 83,124,223,127,101,219, 3, 43,152,243, 9,203,219,
- 46,194, 31,116, 89,106, 61,122,166,147, 63, 91,163,244,206, 65, 46,168,118,156,141,213,207,201, 50, 92, 90,218,144,139, 75,251,
- 4,157, 57,241,230,255, 49, 19,167,182,102, 28,215, 55,138,155,165,144,136, 41,246, 31,107, 49,105, 59, 62, 85, 47,174,194,198,
-140, 88, 99, 56, 78,119,218,253,117,203, 86, 45,245,164, 25, 88, 72, 85,189, 8,185,255,122,159,146,226, 12, 77, 60, 49, 21,158,
-127,241, 28,113,223,178,189, 26,248, 56, 8, 7, 49,200,118, 96,116, 66,137,145,187,156,168, 69, 47,151,148,133, 42, 66,205,141,
-216, 42,118,240,220, 77,170,238,198, 10,214,235,100, 42,199,220, 95, 90, 85,237,123,163, 17,178,211, 52, 49,142, 35, 49, 70, 74,
- 41,108,118, 27,134,234, 25,125, 32, 78, 74, 97,163, 86,242,225,142,189, 15,120, 58,247,186,178, 34,116, 79,233,129,189, 11, 53,
-134,249,245, 45, 41, 22,198,176,225, 38, 70,162, 17,205,149, 47,149,102, 44, 83, 81,161, 94, 13,154,213, 45,214, 66,223,139, 27,
- 96,240,129,233,238,192,118,187,101,191,219, 50,207, 51, 67,216, 32, 84,230,233,160, 93,174, 19, 90, 60,232, 46, 95, 84,172, 36,
-193, 99,108, 99, 24, 60,212, 70,202,106, 57, 43, 49, 82, 91, 37,138,233,187,105,187,122,205,151,195,182,100, 45, 90,115,174,228,
-170,113,177, 49, 70,140,216,126, 62,149,158, 15, 0,109,137,218,237,191,223,249,165,176,243,204,243, 17,239,125, 7,123,105,103,
-173,234,247,190,135,237,103, 88,140,115,239,198, 43, 53,235, 89,169,161,159,230,132,111,180,189,128,236,207,183,113, 93,223,177,
-172,238,214,127,175,163,191,181,208, 92, 64, 57, 90, 60,230, 53,172,101, 57, 19,150, 70, 99,193,160,122,175,248,216,197,245,161,
-158,120,123, 70, 38, 93, 56, 11, 25,131, 95,143, 20,235,156, 78, 79,173, 78, 27,156, 9, 12,131, 39,140,158,237,126,195,176,241,
- 60,121,250,136,253,104,177,131,193,236, 7,218,104, 17,231, 56,124,251, 21, 95, 63,251,156,127,254,111,254, 55,190,252,221, 51,
-254,235,191,251,223,249, 23,127,242, 7,184,146,152,190,249,134,223,253,250,115,190,122,113,195,225,104,121,121,200,220,228,138,
- 53, 14, 91,123,206,123, 59,227, 64,116, 64, 78,140,153,171,221, 6,208, 68,188,124, 60,242,254,163,199, 28,239, 12,135,195, 17,
-247,193,142, 79, 62,216,115, 53,234, 26,235,246, 46,225,176,188,255,201, 99, 82, 74,236,159, 62,101,227,213,161,176,127,180,167,
-182,204,118,220, 80,170,112,156,116,125,132, 88,141, 26,158, 35,119,115,230, 16, 51,205,120,237,214,115, 38,102, 93,149,153,102,
- 86, 31,189,156,180,134,184,203,222,182,173,214, 8,125,210,250,110,189,157, 93,228,111,156, 98,178,142, 98,219, 26,246,113,106,
-114, 52,162, 81,176,198,245,189,233, 25, 98,246,194, 65,247,118,149,251, 18, 53,218,250, 39,242, 70, 33, 32,167,125,107,187,151,
-254,117,142,197,211, 44,172,210,177, 16,166,191,225,138,118,167, 52, 5,123,116, 33,134,145,110,233, 90,246,161, 61,199,216, 57,
- 13, 64, 57, 78, 71,166, 57, 33,198,227,188, 71,156, 35,166, 76, 46,234, 51,183,206,146,230,153,146, 34,166,123, 13,193, 98,253,
-128, 49, 78, 21,236, 98, 40, 52,114, 74, 58,106,239,158, 85, 61, 84, 53, 71,215,118, 33, 81, 89,222, 84, 93,227,239,186, 13,201,
-180, 74,237, 60,112,219,133, 28, 75,110,119,240,158,205, 16,216,142, 3,227,168,221,205,225,216, 87, 0, 34,224, 44,214, 41, 17,
-239,238,110,230,238, 24, 97, 27,240,166, 65, 46, 4, 55,146,139,116, 79,125, 81,246,242,210, 9,183,186, 78,115, 78,144,162,246,
-131, 69,142, 15,112, 11, 87,135,133,156,179,219,234,153,144,110,249,239,118, 95,112,215, 78, 84,187,118,190, 24,106,151,122,137,
-101, 82, 35,156,101, 24,240,198,186,166,157,125,172,118, 79,176,119, 6,199,123,167, 13,238, 98,130,116,198,108, 88, 58,145, 5,
-141,169, 62,104,237,204,197,232, 97, 55, 12,129,156, 11, 49, 70, 21, 59,137,209, 78,174,229,179, 98,249, 68,125, 50, 98, 41,185,
-106,178, 25,178,218, 34,151,179,187,137,218,158, 98,202, 84, 12,119,223,188,228,213,231,106,229,114, 98,105,109, 32, 77, 19,243,
-245,145,148, 74, 31,229, 53,108, 51,164,156, 57,150, 8,206,146,226,140, 11, 94,187,222,190,243,182,198,106,140,232,113, 86,125,
- 72, 41,164,227, 81, 3,134,186,173, 78, 80,254,121,153, 21,138, 50,205,183, 4,235, 8, 86, 69, 71, 91, 49, 4, 17,124, 47, 94,
- 75,215,138, 44,175, 89, 70, 56,244,125,181, 21,193,250,129, 87,119,215,164,124,224, 80, 43,197, 89,178,181, 72, 24,193, 58,124,
- 77,196,120,196,136, 97, 52, 78, 71,199, 37, 19,172, 96,187, 32,206, 13,142,150, 38,178,194, 58,104,179,170,148,183,222, 42,101,
-207,219, 85,168,101,157, 91,227, 96,173, 13,196,148,184,186,186,194, 69,181,245,149,162,147,185,156,117,196,157,115,234, 2, 52,
- 45, 68, 90,101, 13,243, 88, 28, 32,181,170, 69,108,220,108,153,142, 71,226,172, 7,186, 24, 67, 78,165,231, 10, 72, 79,233,154,
-148,106,102,232, 98,214,210,189,233,129, 40,122,118,228, 92,116, 20,159,213, 2,217, 74, 89,119,244,165,244,217, 94, 87,150, 47,
-218,162,149, 45,110, 78, 32,165, 90, 11, 84,197,244,106,230,247, 25, 93,177,135,216,208, 95,151,229,162, 53, 86,180,139,246,182,
-139, 55,181,144,113, 61,100, 69,211, 39, 51,198, 64,112, 1, 76, 91,153,238,230,140,134, 98, 12, 26, 21, 77,195, 6, 79,142, 73,
-209,192,163, 62,115,206, 64, 24, 29,187,171, 13,195, 38,176,127,180,225,233,211, 43,134, 77,192, 14, 30,241, 6,188, 71,106, 97,
-250,246, 21,191,252,219, 79,249,238,117,225, 23,255,245,111,144,146,120,127,191,231,163,247,222,231,240,233,151,124,246,139,207,
-248,245,151, 47, 57,148,129,105, 78,234, 59,119,174,175, 26, 26,243, 28,149, 69,226, 2,214,123,106, 42,148,146,241,110,160,196,
-138, 27, 13,142,198,118, 19, 48,109,230,147, 15,159, 48,184,204,126,227, 24, 7, 67,202, 51,185,162,174, 39, 26,183,199, 35,143,
-118,134,218, 50,165, 52,156, 88,166,219, 87, 93, 72,234,185, 57, 70,166, 84,113,205,112, 59, 69,230, 92, 20,121, 92, 42,185,194,
-221,221,145,105, 74,204,177,174,144,153,218,140,134, 41, 53,205,103,104, 70,217, 37,238, 52, 71,105, 43, 20, 67, 43, 52, 53,192,
- 27, 78,128,255, 7, 15,176, 37,180,226,172, 59,106,247, 21,234,203,116, 91,218,233, 98, 95,241,163,102, 69, 9,126, 95, 87,207,
-131, 29,252, 66,227,185,188,236, 87,245,242,186,247,236, 15,184, 26, 42, 16, 92, 15,229, 88,138, 1, 29,133,218,254, 49, 59, 76,
-106,197,248,229,154,241, 67, 0,163,118,132,227, 52,129,104,172,161, 6, 60,232, 88,210, 90, 7, 45,145,230,184, 38,187,137,113,
-228, 86,113, 46,232,112,164, 91,210, 74, 43, 43,226,179,245,194,194,138,198,236, 73,223, 11, 47, 67,146,218,119,199,198, 8, 78,
-186, 15, 53,107,117,191,196, 43,186,142, 30,101, 37,102, 57,154, 24, 82,110,132,210,216, 13, 35,131, 13, 28,227,204,221, 28,105,
- 57,226,130, 35, 12,129, 57,142,204,243,129,187,195,196,126,180,154,114, 85, 19,131, 25,201, 29,130,209, 22, 42,219,186,137,239,
- 23,162,145, 75,122,212, 59, 47,119,185,231,182, 56, 91,140, 52,222,100, 37,244,203,119, 73,203, 44,185, 94, 88,204,184,200,108,
-103,189,176, 79,204,247,135,166, 0,102, 37, 37,158,196,160,188, 25,205, 38,188, 33,169, 92,212,235,111,142,126,228,225, 15,177,
- 2,117,160,160,251,240,165, 52,202, 93,140,164, 29, 22, 43,212, 36,247,168, 80,197,111,106, 1,152,123, 66,219, 9, 4,180,208,
- 29, 79, 83,128, 20,115,143, 27,141, 23, 78,132,126, 77,211,164,145, 74,101,231,247,144, 45,215, 83,230,245,116,228,229,203, 35,
- 55,198,225,236,192,198, 55,114, 76, 56,103,137, 37, 99,157, 96,194, 70,159,225,164, 59,245,220, 42,185, 53, 90, 81, 17,216,116,
-156,240,198,169, 61,236, 56, 33,173,177, 27, 7, 13, 78,241,106, 11, 93, 80,176, 74,111, 11,216, 10,249,246,192,216,100,117,153,
- 72,171,228, 86, 41,210,150, 76, 30,196, 24, 98,107, 28, 91,163,149,194,126,183,227,208, 42,119,163, 71, 66, 0,171, 52,177,199,
-155, 45,214, 90,110, 94,191,198,253,255,140,189, 89,175,101, 89,122,174,245,140,110, 54,107, 55,209,100, 87,149,174,114,217, 62,
-166, 57,198, 96,176, 64, 66,112,135,184, 6,241, 11,248, 43,254, 79, 72, 71,112, 4, 66,135, 78, 72, 32, 56,198,174, 99,151,211,
-118,101, 85,182, 17,153, 17, 59,118,179,214,108, 70,243,113,241,141,217,172, 29, 59,179,108, 41,157, 85, 81,153,177, 99,239, 53,
-231, 24, 95,243,190,207,107, 45,179,171, 46, 1, 49, 40, 26,171,172,246,170,122,107, 97,113,148,146,233,187,190, 18,249, 28,109,
- 27, 48,166,208, 52, 58,202,118, 62,168, 77,174,122,181,231, 57,105, 92,108,229,225,151, 28,177, 54,208, 53, 61,167, 97, 36, 52,
- 27,230, 85,138,134,229, 8,194, 48, 78,202, 7,219, 25, 37, 82,202,220,190,187,213,172, 6, 44,165,234, 19, 48, 82,119,165,122,
-110,102, 41,244,214, 97,156, 35,229,162,182, 89, 17,156,215,183, 80,127,173,232,174, 23,200, 49,175, 99,244, 98,182,201,147,228,
-154, 99,190,188, 95,245,144, 43, 85,248,230,100,103, 85, 93, 67,139,116, 99,235,188,118,151, 14,139,219,204,195,216,160, 60,131,
-166,237, 41, 73,147,227, 74,205,108,183,117, 13, 96,241,196, 56,227,106,158,186,247,149,211, 81, 3,114, 48,138, 66,165, 6,189,
- 16, 11,243, 48,211,118,126,211,115, 1,221,161,165,187,104, 8,173,227,242,242, 64,215,120,250, 78,195, 84,104,170,255,126,136,
-156,238, 31,248,236,111,127,205,175,127,115, 3,190,227,219,191,252, 21,159,190,236,249, 79,255,252, 79, 24,191,124,205,171, 47,
-222,240,255,253,242, 75,254,225,251,129,219,177,112, 59,103,230,157,163, 37, 45,209,214, 98,136,113,214,147, 89, 44, 34,174, 22,
- 71, 86, 49,189, 57,226, 59,199, 79, 63,254,144, 95,252,244, 35,226,241, 45, 23,141, 94,180,221,225,154,148,132,211, 48,168, 16,
-113, 16,134,185,231, 52, 39, 14,215, 45,111,110,222,208, 31, 46, 49, 99,230,246,126,208,149,215,119,239,104,187, 3,111,223, 29,
-153, 98,226, 56,102, 78, 99,228,110,136,204, 17,166, 57,215,233,144,163,236,238, 45,135,186, 35, 64, 27, 48,111,222, 59,199,204,
- 78,253, 94,145,148,252,136, 21,141,109,103, 46,143,118,237,143,219,101,173, 38,118,193, 49,187, 17,191,236, 51,217,139, 84,130,
-144,173, 80,146,242,163, 9,109,231,199,170, 60, 34,139,153, 29,253,214,236, 40, 54,155,114,123,153, 66, 44,196, 60, 91, 73,106,
-165,198, 32,138,104,245,235,156,230, 56,207, 83, 4, 28,182,230, 14,235,190,101, 9, 0,169,249,200, 24,133,214, 84, 49,138,243,
- 1,223,180, 43,165, 93,147,170,114, 37, 96,185, 53,155, 89,163,147,116, 47,181,236,237,178,232,139, 87, 25,184, 53, 28,131,218,
-145, 43,248,195, 91,139,165,172,118,167,101,215, 21, 99,245,188, 91,207, 69,119,160,175, 66, 56, 99, 20, 81,235,138,208,212,224,
-133,136,102, 87, 15, 82, 48,189, 2, 61, 66, 40,116, 70,247,145, 82,109,116,166,142,240,206, 83,251,246, 1, 38, 59,111,106,217,
-125,118, 98,215, 75,110,227,186,179, 51,177,237,131, 81, 76,173,226, 13,251,167,100, 15,192, 95,158, 53,179,199,189,150, 13, 81,
- 91,105, 44, 59, 65,103, 13,137,177, 60,225,166,216,138, 2,131, 57,239,228,247, 33, 45,123, 27,220, 99,214,193,239,176,204,175,
-252,239, 69, 99, 82, 65, 65,206, 57, 66,211,172, 1, 25,160,214,199, 37,216,193, 57,207, 60, 69,130,111,106, 23, 84,214, 36,175,
-115,254, 3,235,126,179, 84,120,199, 42,170, 19,133,210,204, 41, 43,234,210, 90,122, 28,151,190,225, 33, 78,200,162,196,175, 7,
-247, 56, 71,141,234, 44, 25,147,133,241,120,132, 44, 90, 32,120,203,229,197,129, 97,154,144, 57,210,212, 24, 89,193,226, 27,143,
-169, 54,167, 67,219, 64, 61,184, 91, 99,200, 86,159,237,198, 90, 36, 38,130,136, 38,176, 57, 91,199,235,106,221, 20,163, 5,131,
- 49,134,108, 96,202,194, 40,144,157,129,182,161,185,232,200, 55, 55, 92, 92, 28, 8,214, 49, 14, 39,166,211,132, 55,208,218,140,
- 69,104, 27,171,188, 0, 49, 85, 15,179,140,191,115,213, 6,100,156,215, 66,101,193,214, 46,200,214,103,215,151,228,162, 5,204,
-233, 56,208,117, 29,215,151,151,188,189,185,225,242,112,224,116, 26,116, 47,223, 6,108,232,117,164,158, 18,125,223, 51, 85, 6,
-251,242,215,195,241,168, 42,248,138,123, 16, 81, 11,155,247,129,135,120,143, 51,144,179, 78,248, 66,208,149,223,146,234, 85,234,
-251,149,146,144,142, 5,239, 93, 29,107, 27,210, 28,153,103,189,224, 87,148,119,245, 81,151,204, 74,199, 91,139,191, 82,118,219,
-168, 74,173, 91,166,109,101, 91,225, 57,239,234, 25, 83, 5,109,206, 42,176,202,105, 86,188, 61, 43,184, 45,226, 44, 62, 4,108,
- 8,248,166,193, 57, 8, 54,104,250, 94,213,241,216,224, 85,120, 88, 18,166,174,153,150, 4,186,133,139,111,234,154, 71,137,126,
-202,117,152, 83,228,226,208,174, 5,175,247, 94, 59,219, 38,208,245, 45,125,219, 43,141,209, 26,172,205,196,105,100, 26,225,175,
-255,234,215,124,251,250, 13, 83,129,124,127,162,156, 34, 31,252,222,167,220,127,125,195, 55, 95,125,197, 63,252,250, 53,191,121,
-123,228,205, 49,243,246, 52, 51,227, 40, 86,145,193,206,234, 44,212, 25,191,194, 96, 98, 86, 71, 84, 66,170,147,192, 18,135,194,
-213, 69, 79, 99, 12,199,225,129,214,127,200,199, 31,191,196,150,200,231, 95,126, 75,119,145,120,119, 28,152,115,102, 78, 66,223,
- 6,110,110, 79,124,219, 88,114, 62, 48, 15,145, 25,117, 41,220, 28, 39,181, 91, 78, 35,229,110, 36,166,194, 56, 37,198,164, 59,
-254, 49, 10,243,148,136,185, 16,211,162,114, 55, 20,163,150, 72,231,237, 6,119, 23,193, 27,145, 93,179, 35, 43, 93,109,185,124,
-126,200,199,251, 4,104,123, 61,126,173,181,245,195,218,237,130,205, 6,128,145, 71, 74,228, 21,163, 89,105, 58,152,250,240, 96,
-183, 80,184, 39,132, 79,143, 59, 66,179,156,105, 85, 25,108,216, 49,249,246, 87,255, 78,188, 39,198,214, 11, 85,176,162,253,123,
- 83,129, 10,185, 42,208,157, 85,252,227,156, 18,199, 97,168,177,145,154, 22, 85,138,172, 2, 10, 5,133,232,126, 73,199,148,154,
-160,133,113,132,208, 41,109, 91, 4,201, 51, 82, 65, 31,193,171,101,167, 24,229, 38, 91,231, 84,237, 92,113,169, 69, 42, 4,193,
-128,243,250,239, 27, 17,124,219,212, 23, 47,235,213,151, 51,162,156,141, 85,153,106, 88,252,160, 22, 73,117,148,213, 52, 32, 70,
- 43, 83, 41,216,148,233,156, 99,112,158,217, 58,140, 11, 10, 8,153, 34, 29, 6,103,103,154, 16,152, 81, 28,162,160,118, 17, 35,
-182, 42,227,205,147, 64,182,115, 11,216,166,152,223,216, 21, 59,192,209,114,203,155, 45, 4,197,238, 58,240, 85, 24, 81, 47,123,
- 99, 56, 83,183,139,236,245, 27,143,225, 66,176,207,124, 55,134,117, 7,245,190, 13, 79,206,248,245,143,213,241, 11,245,206,190,
-215,254, 63,138,116,217, 21, 1,194,182,201,178,187,226,117, 81, 4,139, 17,218,174,169, 63, 51, 61, 88,114, 76,120,177, 26, 76,
-146,183,196,167,156,117,242, 83, 12,103, 73,119,234, 72, 88, 46,173,180, 83,211,155, 90, 56,170,181,173, 96,212,175, 28,132, 48,
- 71, 90,129, 75,231, 57,228,196,109, 22,202, 20, 41,181, 35,181, 5,229,185,163, 66, 49, 35, 21,136, 97, 13, 54,120,166, 56,235,
-207,194, 91,198,147,102,131, 7,107,208,100,209,130,171,171, 33,181, 72, 21,134,251, 59,165,137,149, 68, 17,245,161,187,198,212,
- 29,162,170,168, 37,203, 70,212, 55, 14,240,204, 89, 72,232, 78,191, 88,199,253, 60,209,123,129,156, 72,167, 35,193, 57,174,172,
-208, 56,131, 53,202, 35, 23, 89, 38, 74, 22, 83,189,223, 26, 92,146,177, 98,136,121, 91,245, 52, 77,195, 60,207,248,160, 99,122,
-231, 44, 83, 13, 79,105,218,142, 97,138,245,189, 63,225,131,103,158, 39, 14,135,142,121,154, 42, 90, 86,159,175, 82,114, 61, 71,
- 84, 72, 91,170,216,177, 84,168,140,138,203, 68, 89, 19,185, 32,149, 4,152, 75,161, 96,193,234, 59,175, 97, 44,133,148,119,141,
- 79, 49,170,179,169, 33, 46,193,123, 40, 22,169,227,126,169,129, 60,165, 22,111,212,130,112,177,134,200,217, 52,117, 27,163, 75,
-117,196,152,202,121, 55,245, 0,245,193,214, 96, 29,167,103, 89,219, 16,188, 87,146, 28,130,181,129, 12,100,172,234, 21, 12,124,
-242,147, 79,184,121,253,154, 34,179,134,149,212,124,244, 20, 35, 49,205,170,166,175,163, 51,231,220,250,156,106,252,111,213, 52,
- 89,167, 38,145,218,116, 57,107, 72, 41,210, 54, 30, 23, 52,151,222, 85,248,143,119, 26,110,130,192,241,238,158, 62, 55,220, 61,
- 28,249,237, 23, 55,124,246,217, 55, 92, 60,127,193,225,210,242,253,187,111,121,209, 29,232,109,199, 87,191,253,158,223,124,245,
-134, 87,119,137, 87,167,194,109, 20, 38,227,153, 69,227, 83, 84, 20,169, 69,181,179,149,209,111,212,241,100,188,165,105, 60, 49,
-235,243, 96, 49, 48, 70,196, 89,130,205,124,251,221,119,188,248,131,223, 67,162,240,236,195,143,185,125,200,152,182,163,228,145,
-214,119, 28, 79,145,214, 26,134, 4, 99,118, 12,217,112,123,115, 71, 17,199,113, 22,125,206,243,132,111, 58, 78, 67, 98, 28,103,
-230, 2, 99, 18,230, 4, 83, 82,125,149, 24, 75, 46,139,120, 84, 15,187, 92, 1, 66,165, 54,195,126,245, 4,213, 81,179,206,189,
-204, 89,134,250,239,218,142,238,233, 87, 43,195,215,185,243, 36, 43,179,159,158,239, 49,255,155,109,232,108,199, 41,130,216,242,
- 94,215,244,212,215,221, 32, 51,203,158,113,225,193,239, 57,198,156,141,100,237, 14,158,179,120,164, 87, 24,194, 66, 95,170, 9,
- 83,214, 7, 98,206,140,227,164, 31,180, 85,212,234,210, 17,149,170, 50, 93, 70,123,190,107,233,218,134, 28, 75, 85, 52, 7, 74,
- 81,123,152,238,247, 50,173,247, 52,206, 40, 45, 41,163,252, 96,107,241,198, 41,211, 91,114, 77, 58, 82,123,137,113, 58,185,112,
- 21,116, 19, 66, 61, 56,242, 92, 37,176,106, 3,177,213, 74,100,141,219,253, 44,161,111, 60,135,198,211, 88, 72, 37, 34,105,162,
- 20, 75,170, 97, 48, 77,227,176, 35,136,243, 26, 50,147, 51, 46, 70, 26, 11,193, 27, 58,235,153,107,151, 91,214,169,204, 10,122,
- 66,140, 80, 10,239,169,209,101,183,106, 49,166,236,210,196, 88,197,100,155, 8,206,114,166,189, 59,235,230,183,207,206,156,205,
-213,203, 35, 10,162,121, 82,244,185,138,203,164, 84, 23,192, 62,246,245,113,216,176,172,162,187,101, 80,181,239,214,181,243,221,
-127,141,115, 94,252,153,223,238,135,146,220,234,197,222, 52,205, 42, 38,155,231,121,237,176,114, 22, 58,107, 41,149,136,104,173,
- 93,137, 99,219,218,169,212,145,110, 85, 48, 87, 28,165,243,110,221,159, 82,233, 93, 57, 21,146, 24,230, 44, 92, 92, 94,226,166,
- 25,226,204, 44,153, 75,223,208,166, 72,107, 33, 25, 75, 52, 6,227, 61,222,192, 92,178,170,200,165, 96, 26,199, 92, 18, 18, 39,
- 76,112,120, 23, 16, 17,186,174, 37,207,145, 60,142,106,247, 68,187, 94,231, 44, 57,197,213, 14,235, 43, 20,101,129,150, 36,132,
- 33,199,250, 61,235, 38, 80, 19,218, 52, 8, 37,139, 97, 42,137, 36, 25,231, 12, 86, 10,126,158,104,108,226,195,235, 3,151,109,
-171,240, 23, 81, 18,151,243,174,242,239,181,187, 47, 89, 42,255, 65,227,104,131, 15,164, 52, 87,203,223, 57, 96,104, 78,177,174,
- 66, 50,211, 41,234, 59,228,155, 74,231, 75, 88,171,216, 85, 99, 12, 37, 38,188, 51, 72, 86, 91,226,242, 46, 76, 21, 13,155,115,
-169, 90, 8,253,124, 87,128, 74, 46, 24,239, 40, 69,167,119,198,154,154,211, 46, 42,142, 74,185,158,134,101,189,228,150, 2,103,
- 33,243, 33, 64, 90,144,170, 74,166, 83, 36,171, 62, 18,174, 90, 36, 93,219,213, 47, 89,240,182, 81, 86,123,211,208,132,182, 54,
- 33,250, 28, 24, 3,211, 56,114, 56, 28,106,120, 97, 97, 26, 31,116, 79,107, 52, 24,200,250,128,245, 13,197, 25,125, 70,147, 54,
- 42,221,101,167, 68,181, 28,121,241,252, 25,247, 55,111, 24, 78, 81,245, 19,185, 40,234,181,250,203,139,148, 10, 0,147,117, 4,
-191,252, 57,154,224, 48,245,156, 94,184, 14,206,110,171, 43,106, 26,155,190, 43, 13,161, 9, 53,130, 53,241,240,240,192,243,235,
- 11, 94,191,126,224,235, 87,223,243, 15,191,254,154, 40,134,113,142,196,251, 65,237,161,215,207,248,250,155,239,120,247,238,134,
-175,223, 14,124,117, 51,113, 55, 27,142, 73, 24,179, 80,140, 69,114,157,154, 45,199,194,186,242,211,149,149, 49,234,141, 87, 59,
-163, 78,166,134, 49,145, 37,115,209, 92,242,230,110,230,183, 95,189,225, 15, 62,122,193,252,112,228,170,185,166, 76, 17,137, 66,
-113, 58, 61,157,179,240, 48,100,250, 33, 49,156,116, 98,148, 74,161,184,134, 20, 35, 15,227,132,140, 39,230, 57,145, 10, 12, 83,
- 98,206, 48, 69, 33, 21,213,177,136, 49,164, 42,174, 93, 70,139, 57, 87, 36,184, 85,186,157, 90,218, 76, 57, 83,253,150, 42,140,
- 50, 59, 60,236,143, 43,126,117,255,179,140, 90, 23,133,228,190, 48,120,188,130, 52,216, 42,162, 91, 66, 74,228,125,122,215,234,
- 31,183, 63,104,111,123,236,145,183,117, 15,180,128,226, 69,116,172,190, 5,109,213, 3,217,236, 51,177,171,118,160,114,144, 65,
-173, 67,105,217,255,212,125,101,204,234, 55, 94, 8, 80, 75, 39,191,140,236,145, 66,215,182, 28,250, 14,176,250,195,175,227,123,
- 91, 19,185, 36, 69,218,160, 7,102,235,212,218, 82,114,194,161,163, 72, 35, 66, 78,170,100,183, 70,240,193, 85,149,168,169,149,
-170,175, 2,133,130,145,229,195,172, 81,174, 53,181, 72,213,220, 91, 60,168,119,150,198, 25, 72, 35,227,124,210,238,160,204,122,
-184,164, 68, 49,138,192,244,126,217,233, 25,114, 54,196,148, 40, 1,154,226,232,188, 91, 11, 4,169,186,193,101, 60, 44,219,243,
-181, 2, 93,100,247,139, 75,122, 95,161,108, 85,252,227, 45,244,162, 4, 63,191,189,183,207,236, 17, 20,102,243,128,155,179, 61,
-122, 5, 73,159,221,169,239,185, 59,120,228,248, 48,101,229,215, 27,243,136,156,104,158, 38,226,157,169, 1,126,199, 20,105, 29,
-254,155, 85,137, 80,197, 74, 42,194,122, 56, 30, 53, 87, 92,150,124,230,101,180,110,171,186, 93,237,145,243,156,222,243,247, 75,
-229, 39, 44,248, 96, 74,193,225,107,226,151,236, 96, 62,142, 40,137,177, 20,230,156,184, 52, 66, 35,133, 11,231, 57, 1,151,141,
- 80,176,164, 82,136,198,104,252,170, 8, 23,135, 3, 50,142,106, 5, 43,153,139,190,175, 93, 65,169, 28,244,172, 41, 82,198,172,
-231, 69,240,158,182,211,208,148,185, 40,169, 44, 75,193,138,238, 41,103, 41, 68, 17,166,172,190,113, 35,224, 98,141, 21,205,250,
- 44,207, 34, 76, 37, 18, 75,193, 6, 8, 82,184,104, 3, 47, 46, 90, 62,184,238,105,125,192, 91, 32, 27, 74, 49,196, 34, 36, 50,
- 99, 76,106,183,203,162,130,162, 12,177,234, 65,176,144,196, 16,115,161,233, 58, 82,206,170, 96, 78,137, 41,206,116, 11, 24,167,
-198,100,158, 30, 78,245, 60, 48, 72,170, 43, 49, 32,197, 25,145, 82,167,111,149,235, 93,149,228,169,142,150, 1,250,190, 87,225,
-216,226,182,112,250, 94,166,250, 94,148,229,157, 89, 18,228,164, 18, 34,139,190,199, 49,103,172,111,149,111,239,180, 19,115,174,
-118,199, 8,215, 87,151,120,239, 25,167, 17,235, 29, 93,223, 51,156, 6, 94,190,124, 65,219,182,220,223,222,241,242,229, 11, 68,
-132,219,251,123, 62,254,228, 19,134, 97,100, 56, 13,180, 93,199,225,208, 51, 79, 51,119,247,183,188,124,249, 18,201,145,105, 26,
- 56,205, 35,199,211, 73,133,183,110,209, 73,204,224,148,133,225,156,234,112,140, 13,204,243,140,164,145, 47,126,243, 57, 18,103,
-218,182,213,239,109, 86,166,128,130, 99,156, 90,230, 22, 69, 78, 93, 49, 57,167,231, 77, 74, 66,168,217, 8, 6, 48,182, 78, 90,
-237,182, 6,208, 9, 1, 52,109,187, 78,184,166, 56, 50,142,153, 57,194,215,223,188,225,239,255,241, 11,230, 92,248,224,195,151,
- 76,227,196,221,219,119,188,188,190,230,112,125,197, 55, 95,124,201,171,239,222,241,230,126,226,221,152, 25, 18,196, 92,137,164,
- 53, 6, 22,103,214, 85,111,170,110, 37,138,213,207, 43,101,166, 52, 19,124, 75,215,118,117,205, 7,113,154, 57, 30, 51, 95,167,
-129,119,223,221,114,243,234, 53,127,242,139,159,241,233,167,159, 80,172,231, 56,207, 36, 25,233,131,231,254, 97,192, 42,120,130,
-156,171, 8,214, 5, 4,203,241, 52, 49,198,204,156, 34, 49,234,132,103,138,153, 88, 44,211,148, 17,235,171, 21,178,118,236, 44,
- 33, 65,218, 96,165, 92, 86, 13,138,103, 53,175, 75, 69, 17,150,243,243,113,133,208,252,176,118,173,156, 5, 85,109,201,104,251,
- 49,183,221, 29,124,182,216, 13,212,177,116,111,143, 14, 79,131, 86,194,107, 8,236,143, 48,229,159,156,132, 62,134,213,152,141,
- 46,167,132,170,178, 94,233,206,106,165,104, 37,107, 39, 90, 71,103,212, 76,225, 44,133, 84,197, 31,170,108,215,200,193,178, 8,
- 86, 42,207,185, 13,129,139,195, 1,239, 2,195, 52, 99, 69, 71,101, 26,179,151,145,156,232,130,167,117,170, 92, 55, 57,146,102,
-205,116,238,186,182, 30, 24,117, 44, 21, 2,222,148, 26,228,162,236,106,237,112,212, 7, 43, 69, 71,212,190, 22, 25,110, 9,117,
-145, 66,138,139, 45, 73,189,163,197,170,191,184, 44,158, 30, 99,112, 38, 49,215,162,106,158, 20, 89,233,157,193, 36,157,142, 88,
- 87,201,100, 49,210,120, 71,227,131,238,157,170,141, 48, 9,155, 80,203,108, 16, 29,138,121,130, 64,183, 83,153,153,157,135,189,
- 58, 10,150, 61,157, 61,187, 52,215, 45,250,106,165, 91,158, 9,121,148,223,126, 22,169,186, 48,170,207, 36,120, 79, 57, 54,246,
-127, 70,183, 70,176,136,236,170, 0,171, 96,143,205,142,183, 55,231,203, 57, 89,239, 41, 15,191,216,117,213, 84,100,155, 60, 44,
-243,171,146, 51,190,104,167,166,204,112, 5,120,104, 70,179,134, 52,248,224, 25,199, 89,195, 33,154,134, 24, 79,235,200,116,209,
- 52, 44,197,244,226,129, 95, 14,205,141,236,165,169,133,198,232,218,229, 56, 78, 60,247, 30,151, 19,185, 8,173,192,243,198, 51,
- 77, 51,157,181, 68,171, 19, 28, 9,142, 97, 28,176,214,209,121,203, 56, 36,152,102,186,182,195, 90,207, 52, 69, 29, 33,231,140,
-119, 85, 12, 90,167,117,183,119,247,186, 27,183, 48,204, 74, 97, 27,166, 76, 22,171,148,194,224,136, 46,172,225, 33,206, 24, 76,
-214,131, 86, 74, 66,156,101, 50, 5, 19,132, 6,225, 50,120, 62,185, 62,240,241,245, 21,141, 99,141, 39, 30,147,142, 64,139, 49,
- 76, 73, 56, 85,208, 79, 1,154,174,195, 68, 33,207, 17, 49, 26, 67, 44, 2,198, 7,165,155,165, 68, 8,129, 97, 28,105,219,150,
-211,105,208, 36,195, 16, 56,244, 61,199,219,251,138, 72,213, 34,231,242,242, 66,177,203,206,147,146,218,244, 98, 76,107,178,224,
-146,244, 86, 74,209,105, 73, 61, 28, 75,210, 72,230, 38,120,181,121, 57,200,197, 48,167,132,115,158, 24, 39,172, 11, 56,235,153,
- 78,199,170,181,128,171,235,231, 92, 94, 63, 35,180, 61,195, 48,112, 56, 28,184,184,184, 84, 91, 83,156,249,248,227,143,152,167,
-145,219,119,183, 60,127,241,146, 82, 10,239,110,223,241,225, 39,159,112,119,119, 79,119,117,137,235, 90,238,239,238,193, 59,166,
-146, 73, 6,142,105,166,109, 46,136, 8,147, 36, 34, 74, 70,203, 2,197, 26,196,123,230, 2,109, 13,127, 50,206,227,172, 39,149,
-204, 56,205,120,171,192, 26,138,238,188, 93,176, 12, 15,119,180, 94, 93, 24,125,219, 65, 8,148,250,243,200,185,208,120, 71,156,
-231,181, 25, 18,145, 53,172, 69,106,161,105, 69, 61,245,203, 57,183, 88,223,188,181, 26, 59, 92,197,116,170,232,215,201,147, 15,
- 61,255,240,197,107,254,234,175, 63, 35, 38,248,244,211,143, 85,139,144,149,177, 80,114,225,235, 87,175,249,250,251, 27,110, 79,
-145,155,177,112,140,133, 33,150, 53, 52,186, 84,214,199,246, 46,171,154,159, 34,164,152,215, 51,203,123,141, 66, 30,135,137,139,
-195,129, 34,133, 81, 18,199, 2,173, 9,124,252,209, 75, 62,252,232, 0,206,242,230,251,215,164, 89,223,233,148, 11,209,137,250,
-213,231,194,253,113, 38,101,165,124,166,148,212, 53, 33,134,152, 21, 0, 53, 71,117, 64,229, 34, 36,109, 81, 86,192,214,222,218,
-188, 89, 62,245,172,206, 69,239, 14, 47,198,213,145,228,158,231,190, 23, 22,169, 21,235,199,247,233, 63,160,122, 22,221, 63, 26,
-171,135,155,221, 5,194,172,128, 14, 28,197,148,149,142,182,239,228,255, 41, 35,255, 31,251, 19, 45, 99, 75,163, 56,163,247, 96,
- 41, 70,234,134,116,141,140,205, 27,101, 73, 74, 21,216, 80, 45, 35,105,197, 55, 46, 88, 78, 29,137,233,207,166,105, 90,174,175,
-174, 42, 90,115,196, 20,237,255,125,112,234, 17,205,154,180,214, 58, 71,103, 29,150,204, 52, 30,235, 40, 61, 64, 81,127, 58, 53,
-183,215, 26, 67, 48, 89,153,219,193,173, 16,146, 18, 35,146,150,221,154, 35,216,170, 70,207,153,152, 39, 36,151,149,174, 7, 6,
-177,218,129,121, 11,222,171,221,105,156, 39,172,100, 92, 86, 79,189, 56, 79, 17, 37, 85, 89, 73, 85, 45,172,151,105,206,106, 7,
- 10,162, 2,175,136, 94, 12, 75,154,164, 44,158,113,243, 20, 8, 70,214,144,147,237, 34,173, 83,156, 82, 25,208,187, 66,172,172,
-110, 71, 89,215, 53,122,161,111, 19,160,205, 59,126, 62,134, 63, 11, 88, 41,156,237,208, 31, 95,236,249,145, 39,253, 44,242,117,
- 63,130,175, 22, 58, 5,105,236, 81,195,188,151, 70,247,212,255, 45, 4,172, 69, 66,185, 44,130,182,125,187,101,152,226, 25, 55,
-191, 36, 13, 11,194, 64,140, 26, 15,106,173,238,202,251,174,103, 28,166,213,143,188,247,232,111, 56,102,197,182,182,109,139, 72,
- 90,247,240,186,175,207,204,100,108, 19,112,115,193, 6, 71,202,130,143,145, 75,231, 24,124,224,148, 51,167,146,213, 22, 52, 70,
- 50, 66,219,117, 76,243, 76,227, 60,109, 8,107,119,222, 58,125,150, 92, 27, 24,243, 76, 82,123, 2, 38, 27,162, 42,221,152,103,
- 85,142, 91,231, 72,101,198,122, 67,235, 28,138,122, 8,106, 17, 21,203, 92,253,241, 49,102, 82, 73, 42,170, 44,133, 62,120, 14,
- 22, 94, 30, 90, 62,184,236,232, 61,228,168, 7,162, 88,213,119, 20, 68, 39, 11,176,198,177,230,156,152, 99, 34, 39,221,155,199,
-156,152, 79, 35,198,121,114,222, 88,229,167,211, 73, 71,225,162,239, 97,169,254,235,156, 51,221,161,199, 90,203,241,248,160,185,
-235, 82, 56,158, 78,244,125,143,243, 13,136,197,123,157,164, 44,107, 56, 91,169,144,165, 20,198, 97,192, 89,205,113,104,219, 6,
- 73, 73,149,212, 89, 42,196, 69,199,165,161,239,244,103, 29,103,157,154, 57,203,135, 31,126,192,207,126,254, 11,230,148,185,123,
-120,224,226,250,138, 23,207, 95, 48, 12, 35,183, 15,247,188,124,249,146,119,247,183, 8,194,152,102, 82, 78, 12,211,192, 24, 71,
-166, 60,145, 72,100, 43,248,190,161, 43, 29,233, 33,242,193, 7,207, 56,158, 78,136, 73,248, 0, 31,127,242,146,211,241, 30, 99,
- 34, 63,255,197, 79,184,186,186,226,179,207,254, 30,231, 29,183,247,247, 20,171,244, 59, 93, 39, 60,224,172,225,242,112,193,179,
-139, 3, 87,135, 3, 72, 38,151,168,186, 32,167,156,122,165,175,165,117,130,217,120,175, 12, 14,187, 89, 45,237, 78, 80,235,156,
- 83,150,192,226,242,201,218,201,122,107, 86,109,144,175,200, 94, 83,207, 81, 45,140, 29,195, 36,188,187,123,199, 63,254,250, 75,
-164,105,185,184, 82,167,206, 87, 95,191,230,225,230,134,143, 95,126, 72, 42,112,115,115,203,205,237,200,219,251,153,251,185,112,
- 74,234,222,136, 8, 88, 95, 99,189, 13,150,178,105,121, 28,120,235, 40, 53,102, 92, 41,120,126, 69,118,223, 31,239,232,251,142,
- 11,223,208, 97,185,118, 14, 51, 79, 60,127,241, 41, 31, 60,191,226,246,118,170,147, 0,163,132,209, 92, 39,107,198, 96, 71,189,
- 59, 82, 41,250,133,196,114, 26,103, 50,174, 22,158,166, 58, 33,150, 64, 45, 5, 55,109, 42, 34,187,158,165,171,187,108, 39, 25,
-246, 79,130, 64,140,188,215,121, 63, 25,174, 81,119,142, 26,222, 32,171, 55,119,197, 1, 86, 47,162,148,178, 27,145,234,174,107,
- 25,201,170,168, 72, 47,159,229, 2,126, 47,146,181,168, 10, 95,156,252, 14,185,158, 89,149,148,102,191,135,223, 31,174, 34,235,
- 72, 92, 71,152,154, 74,230,216,170,159, 61,167, 62,215, 10,124,185,208, 13,154,169,158, 37, 35,162, 48,154, 54, 52, 92, 93, 94,
-210,182, 93,141, 60, 84,136,129,113,134, 16,156,102, 51,139,238,244,122, 31,104,172, 35,142, 51, 86,132,182, 9,154, 48, 28,103,
-140,115,120,175, 59, 35, 3, 52, 36, 28, 5, 73, 69,247,154,113, 70, 74,161, 9,161,138, 86, 64,210, 76, 41, 73, 35, 61, 37,175,
- 56, 69, 89,114,207,173,169, 91,186,172,213, 94, 22,130, 51, 24, 27,112, 86, 56, 14,137,185,238,247,140,100, 26, 99,152,150,112,
- 6, 83,185,219,185,224,235,206,203,162,190,219,117,255, 37, 90,241,238, 17,194,143, 9,130, 43, 24,161,142,221,197, 44, 41,123,
-143, 99, 89, 55, 96,204,234,184, 49, 91,207,110,173,232,248,138, 93, 65,240, 40, 65,110,253,231,215,209,230, 6,143, 49,107,103,
-109, 30,185, 36, 55,146,190, 49,178,121,217,119, 83,133, 21,143,185, 8,232,204, 35,127,199, 35, 61,169, 26, 21,204, 6,153, 53,
-239,255, 51, 27,243, 94,200, 89,125,188,198,194, 48, 77, 74,244,139, 51,165,120,218,182,229, 56, 28, 65,116,162,243,240,112,218,
-198,239,156, 23,227,203,133, 52, 77, 83, 29, 45,171,135,217,213,200,222, 41, 69,220,213, 53,109, 99, 49,131,240,112,127,162,241,
-158,124, 58,209,249,134,166, 0,115,196, 89,135,175,239, 76,142,154, 18,118, 56, 28, 84,107, 34,133, 52, 69,196, 26,162,133,113,
- 26, 16,175,227,227,214,183,144, 11,105, 69, 20,171,152,206,121,199, 85,219,241,236,186,231,170,235,112,149,207, 94,114,210,192,
- 21,241,136,117, 28,231,196,195, 48, 65,202,244,237,129, 11,239, 56,120,195,101, 48,184,148,240,109,192,134, 70, 85,252, 21,140,
-146,115,214,182, 35,102, 92, 21,215, 46,239,114,170, 34,185, 41,170,210, 56,198,200,245,197, 21,167,113,212,103,222,168,223,219,
- 58,171,107, 16,231, 56, 13, 35,215, 87, 87, 20, 18, 41,205,248,202,208, 63, 13, 3,198, 7, 45, 32, 74,198,155,176, 19, 44,218,
-173, 29, 49, 26,157,234,125,160,241, 53,134,217, 26, 8,129,152,245,201, 19, 84, 20, 0, 0, 32, 0, 73, 68, 65, 84,125, 57,157,
- 70,196,120,166,156,112,141, 37, 27, 40, 86,255,242,222,241,236,197,115, 78,243, 72, 17,195, 48,158,120,241,226, 37,115,156,201,
-162,170,125,172, 38,223,165,148, 48,254,132,177,208,118,129, 41,122, 46, 46,123, 10,153,135,227,204, 71, 63,249,144,225,216,227,
-191,135,255,224, 79,255, 57,199,211,137,223,252,246,183, 12,227,145, 63,255,143,254, 61,190,250,234, 75, 90, 95, 40,105,228,211,
- 79,255, 25,211,116,226,175,254,242,175,177,214, 48,143, 19,141,183,244,125,203,135, 31,124, 76, 31, 60,125,112,196,225, 68, 99,
-162,142,145, 41,117,121,169, 19,197, 88,213,248, 37, 23,205,186,112,134,132,106, 15,124,213,122,152, 58,245, 92,196,200,214,185,
-202, 48,171,239,158,213,112, 34,231,106,120, 75, 45,108, 77,229, 45,148, 34,140,177,240,245,171,175,249,250,155,239,112,109,224,
-197,135, 47,112,214,112,104, 58,242,156,185,191,121,224,251,155, 91,174,250, 3,119,239,142,220, 31,103,198, 40, 36,156, 70,165,
-162,231,180, 6, 43, 45,247,120,205,208, 48, 26, 75, 61,231,172, 98,226, 5,195, 92,170, 70, 75,244,188, 76,146,112, 53,203,124,
-154, 31, 72, 93,195,191,254, 55,127,197,103,109,199,245,245, 39,140,146, 73, 37, 43,241,176,212, 38, 72, 10, 89,102,156, 61,111,
-102,198, 40,204, 37,214,180,181, 10,226, 17, 77,124,204, 11, 1,115,167, 65, 19,217, 1, 90,106, 2, 94, 29,119, 47,227,119,229,
- 13, 83,169, 70,103, 23,185, 49,171, 39,238,220,171, 86,200, 75, 87,229,214,223,111, 85,192, 87,173, 45,105,185, 92,106,254,182,
-117,110, 49, 57,238, 44,109,117,191,106,158,238,194,203, 34,152,147, 31,232,210, 69,214,208, 7, 43,118,119,185,215,255, 92,168,
- 66, 13, 22, 74,174, 10, 35, 86,193,193, 92,125,210,186, 71, 76, 18, 41,166,172,180,164, 66,161,241,129,198, 7,165, 55, 89, 75,
-142, 58,193, 8,190,229,162,191,160,111, 14, 56, 49, 76,211,128, 69,187,235,208,182, 24,107, 24, 6,101,119, 55, 53,219, 56,231,
-153,156, 35,173,215,199, 40, 38,245,170,135,208,208,132,158,166,233,235,169, 52, 48, 77, 3,243,168, 2, 42, 43,134,182,233,116,
- 68,149, 19,165,204,136,196,213, 29, 96,173, 10,229, 52,236, 66,118, 31,190, 80, 72, 43,156,199, 57,175,251,220, 70,247,180, 57,
-203,163,148, 60,181,162, 24,103, 86, 30,185,149, 66,103,132, 99, 21,229,136,206,173, 40, 69,214, 78,116,173, 23,237,227,207,181,
-170,199,243,238, 51, 53,203,252,199,108,255,222,238, 18,167, 62,141,103,133,130, 20,150, 79,119,165,199,153,178,235,173,205, 89,
-135,111,118,210,115,169, 8,224,149,173,176, 72,244,204, 14, 70, 83,159, 49, 67,169, 26,137,165,248,144,117, 61,148, 41,213,230,
-105,223, 47,118, 31,135, 24, 33, 63, 72,217, 59,219, 13, 44,191,148,151,212, 42,199,156,244,112, 31,231, 25,140,195, 4,199,195,
-112,228,217,179,103,100,150, 40,206, 26, 94,178, 85, 62,235, 79, 77, 35,116,149, 85,144,242,132, 96,112, 57, 19,109,102,122,214,
-208,245,207, 49,111,222, 17, 68, 85,239,210,118,204, 41,227, 16, 46, 27,175,193, 63,177,168,136, 8, 7, 38,115,154, 6,230,152,
-116, 71,237, 2,217, 24,108, 19,200, 49,106,136,136,209, 28,113, 7,186,102, 10,142,143,174, 15, 52,222,208,183, 13,141, 55, 92,
- 31, 90,156,129,113,200, 76, 69, 24, 99,197,127,198,140, 49,145, 67,223,242,209, 69,135, 41, 66,231, 91, 36, 69,210, 52, 32, 89,
- 51,212, 53, 35,193, 98,178, 22,151,169, 22,209,161,109, 73,197, 50,166,172,194,174, 92, 35, 60,189,224,155,134, 76,169,124, 7,
- 21,243, 81, 84, 57, 94,114,225,112, 56,168, 39,223, 90,154,208, 16, 99, 98, 60, 13,120,103,117,138, 6, 76,243,132, 53,190,230,
- 53,104, 23,151,227,188, 65, 84,140,165, 13, 45,193, 7, 88,180, 52, 37, 65, 54, 56,171,255,251,226, 45, 31,198,204,148, 11,201,
- 8,184, 90,160,212,204,115, 99, 45,182,113,116,151, 61,130,101,142,122,222, 52, 93,171,148,202, 24, 41, 57,114,125,217,171,222,
-166, 10,213,158,189,188,198, 88, 33,116,150,159,253,236, 35, 78,199,158,223,124,126,228,143,126,246, 9,239,110,110,120,247,250,
- 43, 74, 30,249,248,163, 23, 60,220,223,240,255,252,235,207,120,251,230,123,198,225,196,221,195, 3,191,250,236,239,121,243,230,
-134,121,140, 12,247,119, 92,245, 13, 57, 24,158, 95, 95,113,232, 90,188, 85, 7, 77,153,103,164, 68,198, 73,199,231, 62,120,189,
-228,168, 62,248,106,111,116,206, 97,157, 35,230, 72,104, 27, 82,156,107, 58, 93,253,249, 85,175,186,212,206,215,186, 80,109,156,
-245,243,243,218, 57, 55,214, 84,108, 55, 88,167, 5,226,237, 48,241,234,187, 91,238,222,221,114,104, 3, 63,249,240, 37,215,215,
- 87,228,148,248,246,155,215,124,243,197,183, 26,175,139,231,179,223,126,207, 52,213,221,180, 8, 83,169,185, 23,168, 13,174,102,
- 90,107,190,198, 50, 93,174,119, 85, 65,240,141,215, 96,171,152,241, 14,218,198, 83,138, 22,172,207,159, 95,209, 53,150, 79, 94,
-126,192,112,115, 75,156, 79,124,240,236,154,121, 46,220,142,134, 99, 22,146,181,117, 45,170,124, 3,113,142,211, 20,215,113,191,
-110,104, 44, 99,170,201,158,232,170, 76,170,146, 29,244,103,148,113, 53,107, 97, 59, 87, 77,213, 36, 44,106, 50,169,106, 94,127,
- 46,229,121, 60,146, 52, 27, 49,110,119, 24, 47,221,146,152, 82, 15, 74,139, 60, 26,123,111, 60,239,154, 36,195,178, 79, 45,154,
-215,109,159,202, 74,251, 17, 92,232,163,224,140,115,194,215,182,112, 88, 58,169,125,183,109,246,195,135,245,255,217,181,165, 91,
-133,126, 82,176, 89, 86, 42,215,146,119,172, 65, 3,126, 29, 15,149,202,218, 13, 62,112,232, 15, 28,250,131,230,236, 78, 51, 37,
-234,238,243,112,113,137,111, 60,227, 60,145, 83,194, 27,165, 52, 25, 10,113, 30,245, 69,119,154,226,150,165,224,124, 67, 8, 13,
-161,105,240, 94,179,177,199,147, 48, 12,170, 54,109,131,163, 13,158,198,219,106,137, 83,244,236, 34, 72,172, 65,134, 42,156, 90,
-108, 46,118,211, 42, 72,169,194,191,154,158,100, 44,180,125, 75,223, 54,204, 67,229,215, 47, 1, 45,102, 71, 89, 91,198,210,162,
-254, 95, 91, 47,124, 41,250,251, 72,165, 27, 89,217,113,215,139, 89,161, 17, 11,174,116, 31,164,178, 60,109, 89,100, 83,155,214,
-221,229, 50,166,151, 61,107,125, 55, 34,183,178,137, 48,247,126,115,150,201,207,218, 77,115,174,165, 88,145,199, 85, 40, 41, 79,
-217, 43,119, 33, 44,121,155, 86,101,246, 25,239, 11,164,233,199,159, 93, 83,179,159,237, 99,170,225,153,104,244,125,103,201,194,
- 61, 8,162,187,180,156, 11, 15,195,192,197,161,199, 88,237, 34,219,174,227,120, 28,200, 49,157, 7,216,239, 95, 5, 49,228, 41,
-210,245, 61,216,192, 24, 35,141, 24,198, 12,183,211, 68,247,233, 79,137,227,132,153, 51, 99,126, 32, 99, 41, 38,130, 41, 74, 49,
- 44, 26,110, 34,198,114,204,145, 83,156,170,150, 66,195, 81,196, 26, 82,201,184,172, 1, 27, 37,101,130,129, 67,215,113,209,119,
- 92,116, 45,109,125, 86, 77,201,180,174,208,133,128,149, 77, 59, 48,140, 35,121, 39,130, 77,211,140, 80,232,250, 14,135,165, 49,
-154, 93, 29,188, 2, 79,140, 44,211, 8, 75,219,182,148, 41, 18, 92,141,127,173,132,187,182,107,137, 69,177,164,243, 60,115, 56,
- 28, 20,130,211, 31, 24, 78, 19, 93,119, 96, 24, 7,154,106, 15, 77, 20,142,199, 7,124, 19,184,232,123,198,105, 90, 73,114,234,
- 57, 47, 92, 94, 94,106,163,146,102,226, 56,211,180,170,136,247,206, 86, 33,151,254, 94,173,213,117, 2, 56, 93,145,121, 91,115,
- 34, 84,245, 31, 83, 98,156, 19, 15,195, 72,198, 18,218, 14,172,197, 22, 85,222, 59,107,153,230,153, 16, 26, 14,253, 5, 93,127,
-224,238,225,158, 92,102, 94,188,184,224,159,253,225, 31,242,112,127,207,171,111, 3,125,223,242,179,159,255,140,148, 51,215, 87,
- 29,222, 59, 62,248,232, 3,254,230,111,255,134, 82, 18, 63,253,244,167, 60, 60,220,243,219, 47,190,224,217,213, 53,223,189,121,
-195,255,242,191,255,111,252,252,103,191,207,195,253, 3,167,135,129,255,233, 95,254,143,244, 93,199, 56, 12,152, 92,248,230,183,
- 95,112,209,247, 92,116, 45, 31, 60,187, 98, 60, 30, 85, 44, 39,133, 52,205, 56, 67, 93, 49, 56,166, 73,113,184, 57, 37,125,111,
-139,212,201,237,130, 60, 78, 20,167, 22, 95, 31,194,138,249, 53,133,202, 79,216,208,205,202, 4, 73, 88,231, 85,159, 36, 82,247,
-235,158,182, 11, 56,223,224,187, 3,197,182,124,251,246,129,175, 95,189,102,142,194,139,171, 75, 62,254,248, 39, 4,223,240,237,
- 55,223, 50,156, 38, 94,191,126,203,187,219, 7,154,230, 64,119,184,226,213,205,145, 57, 9,221,225,160,122, 1, 35,149,200,231,
- 54, 54, 73, 29,183,151, 82, 40, 6, 98, 78, 43, 63,160,241, 94,173,125,142,245, 92,116,235, 52,210,210,134,192,195,253, 61,151,
- 93,199,193,121,158, 95, 63,227,251, 55,119,220,221,223, 51,141,137, 8, 24,111, 87,252,182, 58,128, 52,166, 91,245, 4,218,245,
- 47, 54,181, 82,215,131, 2,216, 82,214,102, 99,117,225,236, 5,233, 98, 43,181,117, 1,129, 41,133,212,111,167,218, 6,156, 57,
- 15,217,220,237, 61,165,108,244,183,157, 80,200, 60,146,182,239,109,104,171,207,221, 84,214,182,252,211, 16,162,143, 59,155,167,
- 66, 97, 86,186,215, 89,184,136,249, 17,182,248,102,243, 17,179, 93, 48,219, 28, 68,103,190,154,126,180, 9,142,124, 8, 58, 90,
-154,230,245,162, 55, 34,180,109, 67,219, 52,136,136, 6, 96,196,132,111, 2,125,127,160,109, 59,178, 36,230,113,164,164,168,123,
-242, 82, 84, 92,151, 34,182,209,220,225,152, 18, 66,245, 96, 86,192,141, 49, 26, 17, 57,140, 19, 57, 21, 14, 77,195,161,241,120,
-167, 99,178,146,166,170, 54,174,108, 69,217,138,155,178,208,201,234,197,152,151,139,185,212,236,237,172, 23,186,119,250, 18,118,
-109,224, 52, 39,245, 34, 87,209,218,130,165,149, 34,152,160,225, 1,190,142,195,189, 57,247,254, 75,141, 4, 93,198, 65,203,196,
-197,236,193, 49, 5,246, 94, 53, 49,219,192,123, 25,163, 27, 35, 72, 54,171,104,115,209, 94, 60,250,176,215,180,167, 53,195,124,
-153, 2,152,173,130,205, 43, 19,161, 10,241,204, 35, 28,146,236, 60,242,230,177, 45,109, 55, 57,216, 49,227,247,226, 60,179, 92,
-236,143,116,125,242,136,113, 36,108,110,138,213,103,127,182,217, 50,187,126,127, 81,212,233, 88, 50,141, 51, 49,105,146,223,112,
- 84, 26,153, 53,142,227,105,226,249,243, 23,164,124,170,138, 87,179, 65,120,170,176,104,111, 11, 45,195, 72,211,181,136,133,113,
-142,132,226,248,254, 56,112,114,134,111, 31,238,249,236,205, 91,190, 24, 50,247, 49,115,140, 51,209, 26,162,181, 76, 2, 15,121,
-224, 84, 10,147, 1,241,141, 38,106,213, 81,119,138, 19,222, 41, 48,195, 55,158,195, 33,112,125,209,115,209,245, 75, 6, 8, 70,
- 82,237,226, 10,141, 85, 49,167,160,124,244, 41, 70,166,121, 86, 40,147,245,136,213,200,211, 34, 89,105, 93,214,147, 76,170,246,
- 76,139,201,145,198, 7,188, 49,180,141,103,152, 18, 22, 45, 64,164,166,136, 57,163,122,152, 20,179, 54,203, 37, 51, 79,147, 70,
-148, 86,239,248,225,112,201, 28,147, 62,203,213,110, 69,181,203, 29,186, 70,247,196,185,128, 20,218,182, 33,198, 72,140,177,170,
-183,161, 9, 30,138,208,134,160,226,212, 90,176,174,212,185,162,127, 15,189,230,109, 59,239,215,220,116,113,134, 49,206,204,165,
-224,219, 22,235,213,107,220,250, 78,249,242, 78,147,193,154,182,225, 23,191,247, 9,151,207,159,113,123,127,199, 87, 95,101, 94,
- 62,235,249,253,159,125,204,195,177,231,208, 25,110,222,189,229,207,254,236,223,229,219, 87,223,114,113, 25,248,155,191,249, 91,
- 62,250,248, 37, 34,153, 95,254,242,223,240, 39,127,242,167, 28, 79, 51,191,250,187,191,228,195, 15, 62,164,136,229,243,207,191,
-228,221,205, 29,222, 58,130,177,164, 97,100, 78,170, 91,184,188,184,210, 2,180,134,115, 5,106, 98, 95,209,169,102, 26, 71, 92,
-219,110, 46, 17, 50,113,158,201,214, 16, 26,229,179, 47,243, 43, 91,135,174,211,112,210, 98,205, 24, 82, 84,156,172, 53,106,227,
-125, 12, 43,179, 21,150, 21,156,195, 81, 8, 24,218,182,163,233,123, 76,215, 50,137,231,213,171, 27,222,188,187, 81,142,137, 49,
-204,177,240,229,215,223,112,209,181, 4,239,185, 31, 34, 55,199,200,105,182,140, 69, 56,149,153,104, 60,217, 22,138,211,145,123,
-206, 89, 17,171, 41, 86, 61, 85,169,153, 71,149,158, 87, 87,132,172,226,216,138,237,206,153,165,206, 79, 57,114,117,125,201, 52,
- 76,156, 76,164,247,158, 49, 39,186,222,114,125,125,201,241, 97,100,206,142, 60,103,196, 57,210,186,151,175,220,127, 84,148,104,
-178, 84, 55, 80, 94,207,197, 37,216, 74,113,201,230, 44,195, 98,157,188, 46, 13,243, 26,168,179, 3,164, 27,131, 63,159, 3,154,
-247,243,202,215,147,170,108,151,249,126, 15,105, 30, 9,135,100, 39, 98,218, 93,196,203, 37,233,140,253, 39, 39,119,253,144,149,
-104,191,246, 95, 52,125,118, 31, 7, 43, 63,204, 31,223,243,238,182, 80, 16,187, 27, 1,171,133, 34,149,234, 49,183,170, 60,223,
-126,144, 58,198, 13,193,211, 54, 30,131,104,120, 66, 86, 6,119,211,116,132,182,165,148,194, 52, 77, 21,161,105, 9, 22,172,100,
-114,154,241, 70, 95,128,152, 51, 83,138,244,125, 75,219,245,184, 58,146,154,166,145,113, 28,200, 57,209,181,129,206, 27, 60,137,
- 50, 13, 80,180, 59, 89,210,149, 20, 48, 82,214,139,214,219,109, 77,146,170,168, 68,119, 86,218, 29,121,235,170,138,188,144,162,
- 42,121,131,119,164, 28,215, 11,185,236, 49,106, 75,176, 66, 61,168,247, 30,237,101,111,169, 58, 4,251,168, 12,220, 37,176,237,
- 0, 71, 98,247,209, 98,122, 32, 47,117,159, 90, 53, 42, 55,125,177,146, 47, 97, 53, 75,182,107,217, 32, 49,171,221,109, 23,228,
- 34,123,100,171, 89,233,217,143,180, 32,118,157, 8,108, 42,122,195,227,169,213, 82, 98,240, 40, 5,206, 84, 27,220, 15,234, 58,
-204,242,115,172,223,196,163,100, 65,115, 70,195, 51, 91,113,106, 52, 4,196, 90,253, 76, 99,142, 52,226,201, 25, 78,131,230, 94,
-207,115,174, 57,203, 13,243,120,220,172,127,236,181, 3,117, 32, 87,247,162,185,122,148,135,148,113, 24,126,123,115,195,169,237,
-248,187,251,123,254,223,239,111,248, 34, 27,230,166, 37, 89,203, 28,163,134,180,228,162, 54, 49, 99, 41,222, 32,113,166,113,142,
- 38, 88,154,160,207,121, 31,172, 38,136, 57, 75,223, 6,181,174,197, 84,199,207,172,202,101, 95,243,178,157,247, 76,115,226, 52,
-233,133, 46, 21,242,209, 4,207, 92, 53, 0,177, 68,245,126,155,154, 90,150, 19,125, 27,112, 56,154, 16,232,154,166,102, 31, 64,
- 27, 60, 9,131, 15,158,135, 97, 32,131, 6,160, 88,171,138,251,221,207,164,212, 29,252,195,195,195, 10,188, 50, 69, 3,104, 28,
- 6,239, 3,195,105, 80, 23, 66, 41,132, 38, 48,167,136, 15,142,121, 26,144,162,249,244, 87,135, 11,221, 5,167, 84,245, 23, 42,
-222,242,214,208,132,138,150,173, 89,230,206,170,235, 37,139,174, 49,176,142, 88,127,239,139,235, 3,253,225,130, 57, 77, 56, 11,
- 23,109,167, 98,217, 38,112,121,117,193,191,243,199,159,242,242, 39, 31,115,115,127,199,243,235,134, 47,191,252,146,203,203,150,
- 55,111,191,229,226,170,231,175,255,230, 11,238,238,223, 17,243,204,183,175,190,230,171,175,191, 34,229,194,205,219, 91, 94,125,
-251, 61,243,248,151,140,195,196,241,254,129, 18, 19, 93,104,184,108, 59,134,187,123, 14, 93, 71,223,182,196,148,112, 37, 19, 79,
- 17,215,181, 96,181,144,247,206, 50,220,159,116,239, 91, 84,245,157,221, 46,209, 45, 87, 97,117, 93,245,197,121, 82,170, 91,237,
- 70,173,181, 20,163,174,160, 82,138, 22, 69,138, 19, 5,187,100, 73,236,210, 24, 22,208, 86,206,100,132, 16, 28, 62,120,218,190,
- 71,156,231,148, 10,239,222,126,207,195,241, 68, 22,181,222, 6, 39,116, 93,143,183,194,195,195,192, 52, 71,198, 4,183,247, 19,
- 15, 67, 2, 91,232, 15,150,236, 2,169, 36,142,243, 76,104, 28, 89, 4,235,124, 13,241,218, 80,196,139,253, 57, 39,221, 96, 75,
- 73, 56, 87,153, 38, 94, 9,158,174, 78,250,186,198, 33, 41, 34,100,226,100,104,140, 69,172, 35,149,194,231,159,127, 78,211, 92,
- 82, 68,215, 86,130,230,161, 99, 32, 97,177,171, 16,184, 90, 64,173, 22,124,212, 11, 61,203,249,181,187, 95,215,137,148, 93,179,
-179, 88, 86, 75, 45, 24,150,110, 94,182,232,213,178, 4, 80,236, 58,109, 35,231,244, 46,121, 36, 44,122, 60,126, 52,236, 58, 29,
- 99,214,250, 97, 17,174,237, 99, 54, 87, 85,250, 63,241, 98,127,250,240,220, 46,246,229,178,149, 71,107,132,125,167, 95,118,217,
-240,123, 65,151, 49, 27, 86,214, 86, 13,193,234,241,174,151,186,170,221, 75, 13, 78,113,180, 62,224, 48,196,121,214,139, 6, 75,
-232, 90,154,118, 17,190, 69,134,211, 17,201, 51, 33,120, 28,130,228, 72,137, 99, 37, 45, 25,230,148,177,198,209,247,151,116,237,
- 5, 24,221, 71,157,142,247,148,156,232, 91, 71,107, 51,196,137,148, 71, 76,137,234, 69,151, 58, 66, 55, 32, 57, 98, 81,250,210,
- 62, 9, 45,197, 74,185, 51,154,150, 36, 11,160,162,134,117,140,211, 64, 11,132,238, 64,112, 16,237,246,217, 52,214,129,147,186,
-199, 44,187, 56,211,243,139, 92,100, 71, 75, 53,251,233,206, 15, 67, 87,182,132,180, 45,244,100,241,150, 23,100, 71,142,171,159,
-100,217, 61,226,251,148,190,221,106,218,236, 11,203,189, 26,189,108, 33, 69,123,140,112, 70,158, 48, 65, 62, 70, 15, 47,134,206,
-237,197, 87,114,155,252, 14,119,134,172,123,250, 37, 38, 87,118,156,252,247, 18,221, 96, 71,217, 91,222,177,250,179, 46,234, 61,
-215,226,160,230,129, 99,120,120, 24,104,187,158, 92, 78,155, 31,125,157,152,153,181,192, 73, 73,127, 61,143, 35,161, 8, 56, 77,
-122,250,126,158,120, 53, 28,249,228,223,254, 99,120,123,143, 19,203,148,148, 30, 39,206,144,114, 34, 4, 79,239, 26, 92,240,136,
- 83, 21,115,235, 28, 33,248, 53,214,211, 27,221, 27, 31,186, 22, 68, 35,131,173,213,209,162, 10,167,188,166,108, 89,149, 83, 72,
- 42, 28,199, 73,133, 65,227,140, 55,150,190,146, 23, 83,212,209,174, 32,186,199, 94,147,192,124,229,197, 27,156, 55,181,123,158,
-105,131,199, 58,136, 34,186, 18, 52, 90,196, 72, 73, 80,244,211, 41,136,102, 5, 84,142,185,171,180, 57, 99, 84,181, 46, 5,154,
- 38,212,248,228,188,179, 45,214,252,240,122, 78, 93, 28,122,230,121,162, 9,158, 56,141, 52,109,131, 90,199,149,239,160,205,186,
-163,107, 3,185,184,250,231, 88,244, 73, 5,196, 98,189, 93,167, 61, 23, 23, 61, 31,127,244, 33, 87,207,174,201,146,200,105, 34,
- 77, 19, 30,143,180,142,182,247,220,223,191,229,167,191,248, 9,151,210, 50,199,200,183,223,190,230, 87,127,247,247,220, 63,220,
- 51, 76, 19,239,238,142,252,119,255,226,191,167,105, 26, 94,189,254,142,155,155, 59,222,190,185,163,107,122, 90, 27,120,251,205,
-107,174,174, 46,184,106, 2,121,158,232,155, 6, 95,163,163,211,195, 81,221, 60, 70,148,130,103, 13, 37, 69, 10,133,182, 13,148,
-146,104, 26,175,214,216,146, 25,134, 83,181,237, 90,230,105,174,216, 86,187, 2, 80, 82, 76,170, 80,183, 16,156,186, 44,172,217,
-130,186,116,154,225,234, 78,221,214,105,161,172, 81,215,165, 44, 64, 26, 21, 87,251,166,161, 56,199,152, 10, 49,142,188,126,251,
- 6,193, 16,124,131, 1, 78,199,129, 23,207, 46, 56,158, 6,190,191,125,135, 17, 97,142,153, 49,193,113, 76,196, 98,201, 37, 19,
-143, 15,170,131, 8, 10,223,137,177,168, 77,218, 24, 40, 14,183,238,254,148,124, 39,139,170,172, 34,122, 83, 54, 72,112,164, 18,
- 41, 41,211, 56,109,206, 16,225,250,226, 64,219, 56,198,168,161, 62,193, 55, 60, 28,111, 49, 18,152, 37,241,229,119,183, 76,198,
-144,140, 37,147,235,106,120,129, 69,149, 21, 24,229,168, 80,153, 37, 13,111,119, 46,218, 37, 30,186, 40,136,237,156,145,181,185,
-126,164, 10,153,150,223,215,239,189,182,178,219, 77,111,121,221, 21,226,178,200,147, 68,216, 64, 76,230,253, 0, 11,161, 6,166,
-152, 21,253,186,170, 66,235,158,122, 11,220,248,113,239,249, 15,102, 98,139, 89,131, 44,206,196,197,214, 60, 25, 62, 35,103, 23,
-182,108, 8,213, 61,220,100,217,243, 22, 77,227,177, 24,154,208,210,134,160,223, 73,206, 4,175, 15,102,168,190,113, 41,133,146,
-171, 55,208, 55, 42, 30,204,137,148, 35,227, 56,168, 42,184, 36, 29,223, 24, 71,137, 83, 13,110, 81, 40,131, 20,225,112,113,224,
-208,245,184,154, 38, 21,199, 1,147, 35,173, 51,144, 7,210, 60,225,115,194, 25,205,241,213,244,184,138,160, 51, 9,231,212, 99,
-238,156, 89,227, 93, 75,141, 77,196,232, 22,124, 73,138, 66, 10,198,234, 75, 88, 68,119, 55,174, 34,105,189,213,127,175,181, 48,
- 45, 7,182,173, 36, 66,163,184, 89, 49, 22, 49,121,167,133, 56,183,128,253, 56,160,232,124, 60,173, 15,241, 57, 98,181,156,177,
-248,229,233,152,220,197,255,189,143,134,145, 93, 57, 33,238,189,100,181,125,210,219, 30,116,180,159,221, 24,115,206,129, 95,190,
-254, 42,214,171,241,150,219,226, 90,158,164,215,109, 36,206,223,101,202,220,167,195,153, 51,144,205,202,222, 17,136, 73, 87, 8,
- 99,137, 42,252,178,138,126,245,141,134,253, 40,110,115,191, 50, 43,231,161, 57,178, 8,110,212,189, 17,139, 99, 76,134, 95,253,
-250, 55,252,183,255,205,127,197, 7, 63,249,136,223,220,188, 99, 74,137,185, 20,134, 42,204, 27,199,153,152, 50, 83,154,152,115,
-210,255,125,142,122,225,229,172,209,171,222,225,109,163, 86,185,164,233,135, 74, 92,180,132,208,144, 82, 36, 77,202,144, 55, 86,
-200,243, 72,206,162,214,205,162, 69,210,213,161,175,201, 92, 48,215, 24, 80, 31,220, 74, 70,116, 86, 32, 43, 81,206, 24, 33,167,
-136, 51,202,224,246, 33,112,124, 56,130,115,180, 77,224,225,221, 29,222,122, 93,105, 73,193,121, 79, 78,153,224,131,122,237,173,
-229,254,254,161,142,197, 67,221, 13, 79,122,217,131, 58, 86,234, 46,157, 82,180,227,174, 58,146, 54,120,245,228,163,132, 71,215,
-120, 21, 41,213,175,211,182,202, 59,215, 4, 59, 37,199, 77,211, 72, 27, 26,178,104, 71,219,135, 22,111, 44, 93,119, 32,132,192,
- 52, 78,100, 41, 76, 83,196,137,165,237, 90,222,188,125, 77,185, 61,241,175,254,213,255,193, 41, 42,205,236,151,191,252, 21,119,
-247, 35,255,195,191,252,159,185,122,118,205,233,116, 98, 24,103, 94,189,250,140,231,207,159, 83,138, 16,124,207,253,187, 59, 90,
-219, 98, 82,228, 16, 28,243,221,173, 70, 48, 91, 67, 62, 30,105,157,215, 29,250, 60,144,227,192,229,229, 37,211, 52,233,247, 60,
-171,251, 34,229, 88,121, 8,154, 52,151,170,125, 54,229, 76,206, 35, 82,137,135,214,250,154, 12,167,186,158,105,158, 9, 21,249,
- 90,202,146, 79, 80,209,199,117, 98,136,161, 22,154, 5,156, 95, 69,168,118, 21,189, 58, 93,187, 56,229, 8,220,222,222, 51,197,
- 17, 1,250,190,227,227,143, 62,230, 55,191,254, 28,131,112,127,119,207,241, 93,225, 16, 26,218,166,227,244,112,207,152, 5,219,
-116,204, 15, 3, 24,209,239,197, 83, 3,115, 20,252, 83,196, 82, 82,181,252,150, 92, 99, 97,195,186,154,181,182, 78,241,234, 94,
- 59, 22,200,166, 84,213,123,169, 77, 91,198,218, 66,219, 52, 52,221, 37,146, 45,119,119, 71, 26,103,152, 50,124,245,205, 27, 30,
-102,167,233,129, 86, 61,228,190,138,222,138,168,237, 81, 86,205,153,146, 3, 75,150,205,125, 37,165, 18, 34,151, 9,230,214, 57,
-109,129, 84, 53,106,103, 97, 80, 47, 19,169,146,241, 91,174,170,108,144,106,179,100,148,155, 51,171,146,156,117, 50,230,108,124,
-178, 16,196, 12,254,220,191, 99,228, 7, 10, 0, 57, 15,251,224,169,144, 22,243,164, 3,125,185,184,109, 29,149, 47,177,168,246,
-177,149,237, 7, 58, 41, 29, 43,149, 45, 99,123,229,129,171,125,129, 82,176,222,209,120,181,186,229,146,215, 92,224,178, 38, 15,
- 85, 26,220, 34, 90,176,122, 45,205,113, 34,166, 68,140, 19, 57, 71,108,209,232,204, 82,162,254,247, 42,214, 40, 57,209,216,134,
-203,190,199, 27, 75,142,138,160, 37, 71, 28,153, 18, 39,200, 3, 14,197, 43,218,149,164,175, 35, 50, 29,238, 24, 29,237, 7, 85,
-113,164, 82,149,146,165, 40, 75,184, 40,161,202, 89,187,190,160,101,138, 85, 20,104, 72, 89,112, 73,129, 59,142, 92,187,203, 26,
-228, 32,138,233,116,245,215,196,250, 90, 8, 40,139, 91,235,170, 58,242, 41,194,239, 74, 52,217, 20,230,231,234,111,179,203, 5,
-223,227,220,246,228,180,243,130,110,215,205,179,219,205, 21,214,125,252,227, 73,210,166,132,215,191, 23,217,143,212,151,169,204,
-249,247, 96,140, 60,174, 11,206, 20,253,203,215,121,111,146, 84, 47,244, 34, 79, 92,250,200, 15,146,146,100,227,226,174,239,162,
-221,173, 51,114,169, 81,135,222,146,114,164,200, 81,133, 84,119,119,187,241,190,217, 49,239,119, 69, 87,113, 72,118,140,115,228,
-178,235,153,109,195,175,254,241, 43, 98,140,252,231,255,254,191,197, 31,127,247, 45,111,222, 62,240,221,237, 29,239, 70,195,235,
-155, 59,200,145, 56,142, 4,103,177, 65,241, 60,190, 24,172,113, 68, 11,214,121,157, 44, 85,207,183,243,129, 28,149, 65,237,157,
- 99,174,100, 54,235,116,164, 15,162,151, 37,144,107,224, 72,127,232,184,236, 90,230,169,144,187, 6,155, 11, 65,194,134,106,206,
- 17, 91,179,199,188, 53, 92,116, 29, 93, 8,154,119, 39, 26, 5,220,132,134, 40,165, 94,176,172,116,199,195,225,192,156, 18, 34,
-105,229,112,228, 44, 4,175,158,255, 56, 37, 66,211,114,113,232, 56, 30,143, 53,229, 46, 86,139,170,171,107, 23,189,144,230, 73,
-163, 79, 67,215,224,125, 77,109, 76,165, 2,181,160,241, 14,139, 16,154,128, 0,167, 97, 0,177, 21, 40,178,217, 37,211, 52, 17,
-156,227,205,235,239,121,247,112,228,112,121,137, 24,207,195,253,131,174, 20,140,101, 26, 7,134,113, 32,127,249, 61, 95,189,186,
-227,217,203, 23,204,115,100, 24, 53,159,254, 56,204,244,125, 15, 18,104, 92,207,215, 95,188,226,162, 63, 16,227,196, 69,219,113,
-188,187,197,145,105,157,231,250,112, 96, 28, 70,250,166,103,158, 70,138, 81,238, 1, 20, 66,208,228,180, 34,162, 43,147, 42, 2,
-246, 65,173,125,135,174, 91, 47,244,113, 28,149, 74, 25, 26,124,211,146, 98, 92,131,107, 64,207, 3, 91,199,200,169, 20,188,215,
-226,136, 82,214,233,210, 18,198,228,188, 95,125,252,166,146,162, 74,213,106,101, 81,246,192,195,148,184, 63, 30,137,113,162,105,
- 60,109,104, 56, 61, 12,124,113,250,146,148,178,198, 74,119, 29,101, 78,220, 15,153,155,135, 35, 49, 27,230, 92, 16,147,176,222,
- 83, 82, 36,184, 6,193, 48,214,231,206,212,236,136, 82, 39,171, 66,205, 52,152, 39, 76, 61,215,115,165, 61,218,117, 53, 88,187,
-229, 10, 52,154,178,174, 51,147,192, 24, 19,253, 69,207, 56, 71,174, 47, 46,113, 20,190,251,254, 27, 94,124,244, 41, 55,223,222,
-169, 29,186,100,156,236,135,120, 59,210, 35,103, 67, 72,245,162,239,146, 41,235,141,190, 78, 56,228, 81,230,243, 94,155,180, 52,
- 20,214,216,165, 83,151,179, 49,251,123,113,147,203,224,114, 39,110, 56,195,206,217, 31,184,184,159,226,180, 23,249,129,196, 53,
-121,226, 82, 48,143,240,160,143,254,157, 29,188, 68,187, 30,187,237,214,159,136, 97, 45, 21,209,119,198,237,174,214, 38,187, 83,
- 42,219, 42, 90,113,214, 32, 57, 35,185,208,120, 79,202, 81,213,160, 53, 46, 54, 39,189,212, 67, 8, 74,162,147, 72, 74,145, 56,
- 39, 29,255,164,153, 96, 74, 13,114, 41,107,173,147,171, 40,171,107, 61,141,179,228, 52,147, 74,221, 41,165, 19,146, 38,144, 72,
- 35, 66,227,108, 29,195,104,252,169,179, 6,239, 12, 1, 8,206,210, 54, 45,214, 25, 82, 73,204, 57,107,186, 79, 44, 76,201, 80,
-112,184,170,118, 39, 41, 97, 73, 42,196,160,160,151,127,202,121,221, 59,107,140,174,199,161,197, 76,145, 82, 27, 63, 85, 65,231,
-122,169, 23,161,242,135, 31,119,189,230,189, 75,252,177, 64,227,204,203, 93, 45,105,155,219,122,201, 30,168,194, 57,121, 63,229,
-207,200, 70,138, 95,215, 61, 70, 7, 91,139,155, 97,251,218,230,252,171,175, 95,220,238,245, 39, 59,242,252,254, 18, 63, 87, 6,
-236, 9,110,250,183,242,131, 81,193,171,206,192,154, 39, 28,111,242, 62, 89,225,189, 95,175, 62, 85, 83,214,100,187, 5, 87, 58,
-199, 76, 19, 60,167,211, 80, 1, 51,114,246,178,201, 46, 85,113,251, 99, 21,181,109, 26,203, 49,142, 92,116, 61,175,134,119,252,
- 95,191,252, 91,254,235,255,242, 63,227,249,157,101,106,132, 83,103,184,155,102,108,168,133, 99,171, 48,140,156,181, 3, 15,149,
-196,134,117,235,238,175, 32,180,135, 11,238, 31,238,201,149,167,158, 83, 94,211,195,124, 48,149, 42,150,215,174, 25,107, 16, 87,
-150,120, 32, 60, 5, 83, 18,193, 41,132,201, 32,180, 77, 91,147,197,148,147, 16,140,165,177, 78,149,209,206,113,113,232, 24,139,
- 96, 93,194,137,242,201,251, 92, 56, 77,170, 36,159, 82, 84,155,210, 10,133,209,157,112,215, 6,138,215,139, 36,165,153,241, 56,
-213, 52, 46,139,167,168, 87,217, 65,206,234,249, 47,200,150,142,230, 44,227, 56, 19,188,215,177,251,146,148, 88,241,204,211, 60,
-173,138,234, 84,167, 44,174, 82,214,230,121,194,184,128,179,234,229,190,127,247,192,253,148, 21, 39, 61, 79,235, 40,107,225, 27,
- 8,134,155,155, 59,134, 41, 41,151,189,170,227,111,111,222,241,253,235,183,154, 83,158, 51,146,133,251,233,158,190,245,152, 38,
-227,200,216,154,197, 62,205,181, 11,143, 42,242,114, 86, 86,143,117,169, 43,215, 84,181, 64, 82,197, 98,227, 48,129,129,113,156,
- 8,190,170,219,107,134,198, 52,143,148, 82,189,249,213,157,146, 82,162,109, 91,181,128, 26, 67,202,147, 18,244, 68,211, 39,149,
-245,190, 4,237,136, 2,149,156, 87, 39,116, 13,131, 41, 69,253,231,164,194,113,152, 25, 82,133,127, 25, 45,152,126,254,179, 63,
-224,139,223,124,206,195,253, 72, 8, 1,177,112,123,119, 84,135, 74,113,250,174,250,150, 73,198,106, 37,212, 70,202, 88,175,121,
-227,104,250, 93,204, 81, 59, 96,103,171,152,211,177,127, 69, 64, 53, 71, 98,132,148, 19, 41, 23,124,157, 26, 12,243,132,113,158,
-113,206,204, 73, 5,111, 31,126,240,140,241,238,150,171,254,146, 55,239,222,209, 58,120,246,236, 37,159,124,244, 9,159,253,230,
-123, 21, 72, 55, 1,178, 2,135,114,205,152, 55,187,196, 41,133, 22,233, 4,204,216, 69, 79,180,107,104,138,172,209,211,139,136,
- 93, 19, 54,229,140,186,201,206, 49,228, 46,186,254, 47,148, 96,163, 30,237,117,159,183, 95,147, 26, 89,213,226,231, 65, 21,118,
- 55, 60,180,187,157,250,102,233, 89, 58,151,179,240,149,250, 0,189,175,114,151, 93,138,154,221, 34, 52,247,165,201, 46,119,123,
-181,171,153,205,147,254,216,150,103,206,196,122,162,227,235,221,142,120, 47,149,179, 70,127,232,222, 64, 27, 84,105,187, 88,104,
-124,208,100,161, 69, 76,103, 81, 15,187, 49, 66,104, 54,127,120, 74,137, 88,242,138,133, 13,198,210,250, 26, 71, 41, 75,170,142,
- 10,240,174, 46,175,240,193, 19, 99,212, 34, 96,210,177,152,177, 58,254, 14, 21, 0,179,140, 87, 12, 26,207,216, 54,134, 46,168,
-157,194, 59,221, 31,205,177,112,127,154, 25,230,204,152, 68,245,163, 54, 40, 95,191,170, 38,131,215,204,107,106,129, 52,231, 84,
- 63,115,179,142,151,150, 46,105, 17, 12, 46, 69, 81,104, 59, 70, 44,119, 49,115,202, 66,174,188,216,125, 34,214,142,213,183,165,
-149,237, 70,245,170,175,176,143,220, 12,203,101,189,140,149, 30,113,221,164, 2,229,101,185, 76, 89,121,253,106,136,223,211,149,
-170, 82,221,156,167,192, 61,201, 28,220,233, 60,182,226, 97,107,223,229,189,239,199, 34,178,255,181,167, 59,245, 51, 46,187, 89,
-138,198,221, 63,107, 87,159,225,198, 81, 88, 68, 51,198,156,133, 30,153,250,253,173, 47,248, 66, 33, 43,218, 37,234,152, 52,213,
-154,192,156,175,162,234,123,107,107, 54, 0,100,140, 45,106,139, 48,106,177,137,199,123,254,147, 63,255, 83,122, 47,156, 30,110,
- 57, 78, 35,167, 42, 96,203,185,212, 67, 90, 13,125,214,120, 82, 41,216,154,133, 80,150, 11, 83, 68, 51, 2,106,183,181,117,197,
-250,204,165,162,255,125, 73,229, 42,213, 41,210, 52,129,174,109,121,118,121,160, 9,122,169,148,221, 84,197, 59, 71,215,170, 63,
-218,228, 72, 31, 44,151,109, 67,227, 52, 86,184,136, 48,206, 51, 11, 18, 73, 5,161, 65, 1, 49, 86, 9,118,193,249,106,127,132,
-254,208, 81, 74,230,208,119,228, 26,119,187,120,199,109,157, 46, 4,239, 85,232,102, 44, 33,248,245,127,115, 78,137,124, 44,161,
- 85, 78, 15, 96, 87, 19,199,108,253, 76, 67,211,232,148, 44,198,234,160,161, 10, 2,183,200, 83,193, 96,189,142,228,135,113,214,
-245, 93,181,147, 26, 3, 93,215,105, 64,135,179,148, 92, 56, 29, 7,134,211,145,187,219, 59,142,199, 19,113,142, 88,131,126, 62,
- 69, 73,104,173, 87,157, 67, 41,106,255,203, 49,106, 83,226,155, 45,249,175,100, 92, 21,160,109,170,105,125,158,210,130,207, 69,
- 89, 25,165, 44, 59, 96,214, 28, 15, 83, 69,111,101, 89,231,212, 61,153, 34,130,221, 58,173,157,162,118,197,243, 52, 43, 29,174,
- 70, 65, 75,109, 6,150, 48, 29,140,134, 22,197,172,136,212,211, 56, 49, 76, 51,227, 52,147,114,230,208, 29,184,186,184,226,225,
-238, 8, 88,198,152, 24,135, 17, 22, 49, 91,213,155,228,234, 59, 31,102,157,144,106, 80,142,122,230,157,113,245, 71,187,172,246,
-204,154, 8,170,157,185, 37,120, 93, 35,236, 5,174,154,168, 87,237,165, 73, 49,183,203, 59, 81,144,250,117, 11,115, 46, 92, 94,
-246,180,141, 90, 48,167,225,200,241, 52,226,155,150,207,191,252,142,185,100,138, 49,234, 3, 95, 34,144,235, 10,122,217,149,171,
-115, 72,207,182, 92,214, 28,203,237, 92, 92,144,210, 70,125,233,203,100,249,188, 21, 94, 90, 28,253, 30,220, 69,123,249, 23, 82,
- 67, 35, 22, 11,144,250,182,133, 98, 54,136, 73, 94,149,181,219,101,107,151, 36, 40,177,143,198,232,187, 17,162,181,239,227, 56,
-119, 9, 98, 43, 27,126, 57,196,150,195,206,186,154,109,107,214,106,111, 99,254,176,118, 47,166, 62,112, 44, 17,130,143,162, 85,
- 31, 31,186,182,114,187, 69, 84,200, 98,173,134, 52,104, 40,133,122,201,131,245, 52, 33, 32,185, 96, 29, 53, 21, 72, 89,221,182,
-122,194, 23,156,172,113,166,162, 46, 75, 13,129,209, 42, 14, 81, 79,230,161,105,233,154,182,238,149,146,142,160,196,208,248,134,
-254,208, 35, 2,113,142, 72,206,164, 56, 97, 40, 56, 35,120,103,112,171,162, 84,199,224,193, 67,240,218,189, 7,163, 9, 78,115,
-154, 57, 77,145,251, 49, 51, 68, 72,120, 18, 86,145,157,182,106, 8,170,162,218, 58,187,243,223, 11,185,142,216,197,184,122,225,
-170, 98, 23, 49,168, 51, 88, 59, 26,235, 28,190, 59,112, 95,132,187, 84,136, 69,255, 25, 10,187,135,240,241,148, 70,167, 34, 43,
-180,104,177, 27, 62,226,164, 47,135,203, 98,135, 59,103,186,111, 69,195, 42, 34, 89, 71,213, 86,105,114,102, 11,126, 89, 5,115,
- 98,207,166, 60,231,153,227,155,116,255, 28,184,179, 57, 54,222, 43, 78,118, 17,194,108, 16,167, 31, 10, 98,123,148, 26, 40,107,
- 98,224,246, 13, 45,171,170,243,194,195, 60,230, 68,188, 55,233, 64,247,196, 69, 15, 23, 77,232, 42,171, 47,127,115, 2,232, 95,
-174,234, 88,140,243, 74, 43,116,224,173, 46,200, 90, 31,152,142,119,252,252,195,103,252,209,239,255,148,124, 58,169, 53, 76, 12,
-195,105,196,138,165, 24, 24,115, 2, 99,215,209,180,134,253, 36, 74, 74,202,246, 78,154, 71,174,123,236,188,176,255,200,197, 40,
-126,216, 88,124,232, 42, 3, 91, 15,215,254,186,199,119, 45, 41, 11,125,223,105, 74, 23,133,146, 74,165, 42,186,186,231, 46, 88,
- 17,156,100, 46,187,150,139, 86,213,239,222, 55, 58, 25,171,107,160, 57,166, 53,211, 60,175,159,175,170,224, 23,127,240,225,226,
-176,238, 76,157,115,116, 77,127,230,210, 1,221,173, 42, 63,159, 10,149, 41,235,229,174, 81, 81,208,117, 77, 77,159,155, 53,203,
-219, 40, 6,218,183, 45, 25, 37,216,177,196,163,214,168, 90, 21,151,153,234,213, 86,237,202,161,235,160, 36,130,211, 75,217,136,
-193, 27,101,172,107, 7, 94, 19,247, 80,181,121,237,132,214,115,110,211, 9,233,247,240,236,217, 51,109, 14,114,161,105,186, 26,
-205,105,234,168,124,196,215,255, 92,138,208,132, 86,139,172, 74, 50,244,222,146, 75,205,147,168,177,217, 77,211, 48, 96,117,191,
- 36, 0, 0, 32, 0, 73, 68, 65, 84, 78,115, 77,123,172, 23,185,232,232,122, 41,248,150, 32, 26,107,182, 63,158, 22,152,118, 93,
-135,232,168, 91,215, 71,122,238, 87, 97, 24,150, 57, 23,166, 88,184, 63, 13, 76,169, 80,112, 10,218,113,142, 23, 87,215, 60,191,
-184, 98, 28,103,222,222,223, 43,175,160, 9, 4,224,162,105, 8,190,209,124,132,162,177,213, 33, 56,197, 96,171,194, 84,155, 51,
-167, 19,210, 92,249,243,185,200,122,252, 88, 99,112,181, 72, 22, 17, 92,208,248,237,133, 58,168,214, 98,157, 78,142,243, 76, 22,
- 72, 37,215, 32, 27, 91,127, 63, 56,222, 13, 56, 81,226,233,213,117,207,213,179, 75,102,113,124,254,213, 91,198, 82, 72, 11,220,
-101, 29,227, 87,170, 92,169,127,246, 82,139,210,165, 73,145,205, 67,164, 14, 3, 5,229,136,229,204,171,126,182, 26,204,101,157,
- 52,136, 8,238,162,189,248, 11, 61,228,115, 21, 55,148,245,176, 93,173, 57,178,199,210,237, 65,242,203, 33,186,247,183,111,251,
-247,253, 1,189, 31,161,155,234, 51, 60,195, 43,154, 39,188,232,178, 9,135,140,177,107, 4,152,212,185, 0,123, 72,206,226, 11,
-254,157, 65,177,139,103, 94,214, 78,114,217,249,248,106,193, 9, 86,133, 58, 57, 38, 92, 5, 72,164,122,120,217,213,134,144,107,
-174,186,170, 71,115, 46,234, 69,173,123,141,224, 44,135,174,231,197,245,115,156, 83,210, 92,169, 73, 69,206, 58,218,166,197,123,
-229,104,151,164,170,197,146,162,242,135, 37,215,151,197,156,173, 33,172, 85, 82, 95, 41, 26,124, 49, 76,145, 83, 13, 39, 24,179,
- 80,156, 39, 27, 67, 44,137, 84, 18, 38,168,154,116,249,125,204, 46, 68,193, 88,135,193, 49,199,172,233,115, 86, 65, 48,206, 88,
- 13, 51, 96,163, 27, 25,231, 41,190,227, 33, 21, 78, 69,115,148,151,239, 19,163,254,157,197,205,176, 47,222,224, 60, 69,207, 88,
- 45, 52,214,201,138,217,243,212,205,153, 80,108,233, 94,109, 21,140,236, 59,123, 83,227,224,222, 91,199,236, 96, 46,123,175,233,
-121,247,251, 88,152,198, 19,194, 77,217, 37,189,201,147,127, 89,126, 92,224,249,131,174, 13,243, 88,224, 41,155,117,110,217,141,
-237,254,251,249,180, 74,214,203,102, 9,181, 88, 45,122,235,215,221, 10,101, 29,217,154, 85, 72,233, 23,143,176,173, 59, 96, 83,
-136, 15,239,248,143,255,236, 79,232,211,145, 84,133,108, 5, 71, 50,150, 41,229,154, 80, 24,215,233,154, 49,134, 24,163,142,175,
-107,120,138,216, 26,240,211, 28, 72, 38, 64,232,233,174,159,227,251, 75,126,246, 71,127, 76,211,247,140,179,174,135, 76,219,144,
-172,112,154, 38,164, 24, 58,239, 56,180,142, 52, 43, 55,188,235, 90, 48, 74,211, 11,222, 97,164,224,141,112,209, 54,180,193,115,
-121,232, 81, 98,167,169,233,107,134, 97,154, 9, 77, 75, 42,153,152, 50,214,187,181,251, 86,138,165, 97, 24,116, 47,110, 87, 56,
-145, 90,236,226,218, 85,107,215,185,233, 26, 20, 62,162, 23,189,161,111,187, 42, 16,211, 88,100,107,181,248,119,174,102, 59, 84,
-209,147,114, 39,244,137,154,231,185,190,111,142,148, 11,243, 28, 41,160,127,175,171,192,182,109,170, 90, 94, 63, 63, 95,187,224,
- 92, 5,184, 82, 22,136,145,221,105, 72, 42,255,160,104, 94,125,211,132,245, 34, 86, 17,172, 62, 31,193,123,134,211,160,184, 86,
-175, 2,194,121,154, 43, 48,199,236,138, 3,170,245,172,138,126,157, 39,173,145,185, 42,118, 91,158,197, 82, 53, 59,198,154,117,
-149,185, 20, 16, 90, 97,184, 26,157,234,170,125,185,206, 82,156, 37,229, 84,133,188, 48,165,204, 20, 19,195,156,234,133,175,111,
- 84,219,182, 53, 74, 86, 56,157, 6,230,121,210, 48, 42, 81,171, 96,223,180,152,162,153, 21,169,230,157, 99,171,104,211, 55,213,
- 53, 34,235,157, 52,205, 81,187,235, 21, 48,182, 9,114,157,221, 38, 53,214,235,247,152,139, 98,107,227, 28,137, 41,175, 77,246,
-226, 48, 41, 53,159, 35,198, 76,215,118, 72, 17, 98, 44, 60,220,159, 40, 24, 66,219, 96,252,129,175, 94,191,101, 42,203,118,122,
- 3,112, 45, 18,223,197,182, 91, 51, 37,183,213,246,162,214,169,118, 94,121, 47,149, 74,182, 96,168, 29, 43,132,186, 30, 55,123,
-246,251,227,126,225,189, 14, 70,228,189,241,226,249,198,178, 60,218, 9, 10, 79, 81,227, 13,246,189, 14,234,241, 65, 39,251,160,
-138,189, 90,126,103,145, 48,203,110,126,159,251,254,187, 34, 98,183,158,111, 69, 2, 46,251,204, 45,237, 75,163,255, 68, 17, 63,
- 56,171, 47,117,170, 47,171,181, 22, 49, 66, 38, 87,174, 58,117,212,168,187, 16,205, 7,246, 28,250,158, 23,151,207,104,189,231,
-120,255, 78,209,127,203, 40,165,126,111, 57,234,104, 51, 4, 45, 26,200, 25, 33,211, 52, 26,163, 42,213,139,104,106,101,151, 36,
-107, 44, 33,154, 66, 36, 98,136, 2, 5,175, 73,108,213,138, 17,171, 10,222,155,242, 94,103,158,164,208,248, 6,111, 20, 42, 51,
-165,204, 41,206,106, 37, 49,150, 82,244,193,147,218, 73, 90,107, 40,198, 49, 38,152,138, 37, 27, 91, 31,158,218, 9, 26,237,232,
-164,108,251,114,181,184,219, 77,149,109,182,135,115, 79, 29,116,139, 32,196, 60,242,182,155,109, 2, 80,106,216,194,118, 0,217,
-149,161,188,207,139,223, 95,102,118,181,204,149, 93,176,140,217,180,155,230, 41, 17, 31,251, 87,234, 61,177,220,251, 26,129,167,
-131, 92,206,158,227, 39,240,176,103,239, 21,242,158,124,110,129,199, 88,217,137,235,118,157,187,126, 79,231,251,181,101,194,102,
-118,250, 17, 83,119, 74,102,253,172,118, 74, 2,171,221,210, 92, 28,127,247,213, 43,254,207,191,250, 91,254,139,127,254,251,116,
- 99, 70,238, 34,161, 63, 96,146,165,105, 10,110,206, 52,161,197,216, 68, 18,225, 56, 77,132, 78,199,141, 38,137,146,209, 66,203,
-203,235,103, 60, 68,193,133,142,166,109,249,238,205, 27, 62,252,232, 35,238, 79, 71,110,238,143,220, 28, 79, 90, 4,215,160,154,
-224, 44, 69, 44,243,194,166,175,218, 17,189, 4,245,157, 42, 57, 87,160,167, 90,168,148,167,238,193, 25,142,167, 35,214,123, 76,
-206,180, 93,199, 56,199, 21,171,233,156, 67, 82, 86,241,153,119, 56,169, 35,232, 24, 9, 93,139,119,202, 96, 79,185, 16,130,210,
-224,108,197,193,230,156,177,222,174,228,192,156, 34,214,168,165,181,109, 91, 82,138, 28,186, 86, 9,141, 41,169,159,218, 55,138,
-243,149,133, 8,168, 7,118, 8,106, 71, 27,199, 17,223, 52, 72, 84, 11, 93, 49,134,177, 90,195,230,121, 84,219, 29, 78, 87, 28,
- 57, 17,231,169, 54, 28,186, 2,115, 70,170, 59,179,206,196,151, 85,140,213,160, 24,131,212, 16,149,132, 84,226, 91,206, 69, 67,
-120, 58,205, 79,119,198,208,118, 61,243, 56,114, 26, 71,156,179, 92, 94, 28, 16, 41,171,128,209,214, 66, 48,198, 88,181, 66,142,
-148, 51,105, 86,125, 68,223,118,136, 73, 85,143, 80, 21,221,213,122,105,164,104, 71, 90,182, 21,233, 18, 44, 21, 75,194,138,134,
- 96, 25, 23, 72, 89,163, 66, 99,202,187,233,172,171, 97, 83,122,161,223, 13, 3, 77,157, 68, 4,103,240, 93,195, 69,223, 65,204,
- 76, 81, 35,123,173,213,233,143,181,158, 24, 19, 41, 77,155,130, 60,107,104, 75, 70,214, 41,209,166,203, 90, 10,243,180, 53, 76,
- 57,211,180, 1,103, 13,243, 20,193, 24,154,160, 36,198,109,143,168,239,205, 52, 69, 90,223, 48,140, 17,145,168,122, 5, 41,204,
-111,110,185, 59, 29,193,222, 51, 69,213, 39, 25,187, 49,238,183,100, 74,181, 74, 99, 84, 39,101,214,140,116, 30,101,102,236,214,
-198,108,169,152, 91,162,169, 89,223,234, 69,223, 98, 20, 62,179, 63,145,236,218,157,236, 71,147,214,218,141, 14,182, 63,180,138,
-169,126,195,167,174,207,141,243,171, 99, 34,253, 82,214,153,247, 60,187, 91,166,250, 19,221,206, 18,215,186,116,134, 75, 49,241,
- 20, 97,142,189,218,254,220, 19,127,150, 60,183,231,105, 86,235, 80, 41, 5,217, 49, 61, 75, 29, 69, 53, 65, 3, 28, 98, 76,234,
- 5,175, 35,109,157,150,108, 72, 90, 77,239, 17,156,209,236,242,103, 23, 7, 46,250,150, 56,197,154,143,173,126,199,165,186, 44,
- 53,108, 34,132, 6,231,156, 2,108,200, 58, 66,218, 49,215, 23,176,140, 82,236,116, 20,175, 80, 14,237,170,115,133,249,175,123,
-228,101,239,154, 83, 29,115,109,209,168, 81, 4,151, 11,206,105, 22,182,142, 58, 61,228,196,156, 18,193, 54,250,176,217,197,183,
- 95,125,168, 34,204, 5,141,151,169, 43, 17, 91, 21,242, 88, 83, 59, 13,115, 14, 74,120, 44,145, 91,199,226, 91,149,105,119, 10,
- 50, 91, 20, 59, 44,108,120, 87,193,104,178,223, 35,101,119, 41,133,146, 99,213, 1,200, 74,211,179,103, 60, 4,115,166,209,216,
-111,161,246, 49,191,123, 82,220, 89, 29,137, 60, 49, 94,151,243, 20, 65,121,130,167,176, 43, 80,203, 89, 71,190, 20, 37,219,126,
-125,121, 49,247, 62,245, 39,102,241, 85, 68,195,186, 26,115,181,179,172, 89, 69, 90, 0,212,175,191, 4, 95,172, 2,209,138, 38,
- 54, 34,107, 81,179, 56, 54, 38, 60,247, 52,252,139,255,245,255,230, 63,252,227, 63,228,240,252, 19,158,143,133, 50,141,220,158,
- 78,116,206,112,217,180, 76, 57,147,172, 37,138, 96,250,158,230,226, 25,174,185,224,112,249,130,187,251, 17,219, 29,184,125, 56,
-113, 59,223,241,201,139,107,222,188,125,139,132,150,104, 13,217, 26,166,146, 25,210,204,161, 11, 24,155,171,192,204,209,218,134,
-139,203, 11,140,209,139,200,187,160,112,144, 37,109, 42,120,226, 48, 43,111, 59,103,186,174, 69, 12,140,211,196, 20,103,112,138,
-135,117,222, 97, 82, 66,114,166,109, 27,112,142,113, 60, 97,156, 70,168,206, 41, 34,120,124,141, 3, 53,162,128,149,148,106,113,
- 81,139, 71,239,125,181,184,185, 85, 88,155,235, 24,220,218, 26,110, 84,181, 4, 75,116,168,113,150, 41,170, 18, 60, 37,253, 62,
- 48, 48,103,205,147, 8,161, 97,170,240, 21, 91,195,118, 20,110,227,176, 69,104,172,231, 52, 78,196, 57,215,145,172,172,162, 88,
- 61,231,237,142, 70, 88,211,196,170, 62, 70,119,223,117,207,189,100, 52, 88,213,254,244,125, 79,206, 9,231, 29, 86, 12,211,172,
-174,151, 80,127, 6,167,113,168,150, 65,131, 65, 67,167,108, 22,226, 56,105, 97,101,108,125, 95,243,250,243,200, 69, 35, 95,125,
- 8,196,170,199,241,117, 92, 79,209, 9,230,194,100,178,214,146,139, 94,184,182, 56,166, 24,137,185, 32, 41,105,188,110,157,150,
- 44,231,115, 19,130,234, 60,230,137, 38, 52, 4, 11, 14,161, 11,142, 16, 52,229, 83, 98, 34,206, 81,127,206,162,188,248, 34,137,
- 28, 35,214,123,218,170, 49,241,222,115, 26, 6,181, 18, 98,215,226, 97,111,170,146,122, 6, 59,235,200,213,223,125, 26, 70, 93,
- 69,228, 76,206, 16,140,163, 20,209,108,142,218,103,231,172,141,197,156, 84,229,239,219,160, 19,205, 52,115,125,232,193, 90,142,
-167,153,152,133,108, 52,163,193, 27,179,118,209, 98, 44, 70,117,203,245,108,114,107,134,251,227,169,182, 78,142,216,176,231,242,
-232,182,147,229,174, 98,213,239, 56,231,182,241,187,200,114,129,108,151,213,126,140,184, 23,243,172,221,198, 46, 76,227,169,132,
-183,243,131,107,219,129,255,144,144,205,214,139,125,237, 54,150, 61,120,141,108, 93,112,130, 11,217,172, 26, 15, 55,200,253, 18,
-216,178, 23,229,189,183,231, 92, 33,241, 85, 20,118,190, 99, 9,117, 76, 41,146,245,225,106,254,127,214,222,109, 73,146, 44, 59,
-207,251,215,218, 7,119,143,200,204,170,234,234,158, 19,160, 25,112, 64,144, 16, 32, 80, 38, 65,124, 7, 93,232, 5,244, 54,120,
- 32,221,138,102,186,146,104,162,233, 70, 23, 50, 18, 6,145,162, 17,135, 1, 6,141,158,238,233,238,170,202,140,240,195, 62,233,
- 98,173,189,125,123,100, 86, 79, 15,193,134,149, 97,166, 38, 59, 51, 35,194,221,247, 58,252,255,247,123,108,219,134,109, 91,101,
- 76, 67,187,114, 84, 82,204,164, 90, 74,122,131, 57, 38,220, 79, 35,222,220,223, 99, 48, 6,219,188, 96,219, 22,228, 20, 17,162,
- 28, 68,134, 25,214, 57, 21,112,136,136,101, 89,133,102,101,140,144,169, 74, 78,162,238,212,247,218,121,219,232, 67,169, 0, 37,
- 11,248,194, 57,163, 55,102,214, 67, 77, 7, 16, 89,115,194,169, 75,247,233,188,142,226,221,149, 11, 59, 33, 35,134, 40, 65, 52,
- 42,122,217, 17,249,140, 8,139,141, 29, 54,102,100, 99,100,164, 95,113,144, 68,173,192, 49, 85, 68,164,161, 27,220,253, 49,196,
- 32, 35, 65, 8, 68, 80,100,164, 90, 39, 9, 34, 70, 82,198,178, 81, 2, 25, 27, 89,109,176,217,199,133,109,252, 89,181, 31, 37,
- 35,231,186,207,221, 71,215,245,143,124,198, 69,172, 81,196,106,217,203,251,215,208, 11, 27,116,237,146, 88,179, 15, 72,243,149,
-141,238, 80, 9, 44, 19, 19,110,107,206, 3,182,182,173,120, 24,135,255,206, 26, 63,217,222, 19,102,253,158,199,191,175,218,144,
-138,183,149, 64, 16,232,122, 68, 51,215,213, 7,207, 29,124,167, 22, 43,242,125,250,144,165,210, 58,222,250,151, 18, 94, 35,133,
-236, 50, 95, 49,198, 5,127,242,207,126, 31,101,187, 34,167, 13, 33,110, 8, 33, 99, 43, 6,209,122,164,225, 30,167, 55, 63,134,
- 57,189,129,127,248, 20, 75, 49,184, 70,224,146, 8,217, 13,120,127,185,226,205,219, 55,176,222, 96, 89,102, 76,211,136,105, 26,
- 49, 14, 22,203,245, 17, 97,189, 96,242,140,201, 3,222, 51,206,211, 9,247,211, 29, 30,198, 17, 8,171,232,247,178,252,238,214,
- 49,194,182,194,233, 78,220, 16,112, 30, 61,206,227, 8,102,194,227, 50, 3,108,192,222,225,186,108,141, 43, 46,131,183, 2,235,
-172,114,185,133,219,237,189, 83, 47,249,160, 48, 41,141,235, 32,180, 68,172,122,232, 86,165,190,179, 18, 84, 99,116, 81, 60,141,
- 3, 66, 78, 48, 78, 14,242, 82, 10,172,151,123,216,123,223, 30,188, 49, 37,120, 63,180,231, 79,204,154,169,173, 92, 6, 50,130,
-142,221, 66,144,195, 16, 5,131, 31,177,109, 1,108,156, 52, 7, 90,196, 23, 18,100,117,189,103,123,152, 75,233, 10,147,251,251,
-123, 44,203, 34,137, 99, 4,156,166,147,168,215,189,131,243, 3, 74,201,194,202,207, 25,219,186,193, 15, 94,130,164, 66, 0,235,
-245, 71, 10, 27,139, 26, 46, 53, 40, 96, 7,196, 96, 54, 77,160, 9,181,119, 49,139, 16,112, 89, 54,148,172,118, 52,141, 65,169,
-250, 43, 57,116,129, 37, 38,172, 33,107,135, 14, 68,226, 93, 0,171, 83, 62,199,132,211, 56,201,225,206,132,201,123,156,198, 1,
- 49,108, 64,138, 40, 49, 35,108, 27,114,214,228, 61, 84,207,187,232, 20, 98, 44, 88,194, 6, 54, 22,110, 24,229, 57,153,101, 26,
- 67, 44,133, 91, 1, 53, 71, 79, 13,186, 50,214,180,198, 39,105, 17,199,198,200,180, 35, 23,108, 73, 92, 20,170, 75, 84,161,155,
- 70,192,106,225,183,109, 58,205,217, 86,252,228,119,126, 7,239,222, 95, 48, 47, 81,154, 17,206,123, 39, 93,121,218,141,160,185,
- 91, 89, 43, 90, 87,118, 75, 26, 89, 94,246,102, 5, 69,181, 12, 96,157,110,136,254, 0, 0, 72,181, 46, 53, 21,213,182,131, 89,
-231,117, 68,249,128,134, 61,116, 61,186, 63,151, 14, 32,119,149, 79,254,104,198,250,199, 7,149,189,151,182,118,120, 6,124,232,
-181, 36, 97,173, 98, 96, 89,108,176, 13,234,218,119,248,242, 94,149, 54, 57, 32, 42, 47,116,103,188,115,194,245, 27,147, 10, 62,
-228,223,237,247,193, 80, 24, 67,194, 22,130,136,178,152,117, 39,148,218,183, 32, 38, 85, 79,202, 65,229, 13,112,246, 22,158, 19,
-210, 58,195, 32,193, 25, 70, 56,216,177,169,237,118,162,218,127, 82,220, 96, 84,144, 98,152, 17,147, 8,243,140, 38,190, 25,203,
- 82,225,106,129, 99,141,248,232,157,213,253,159,106, 37,182, 16, 81, 88, 68, 74, 32,219,233, 31,228,117,167, 82, 64, 57, 97,139,
- 27, 70, 63, 72, 94, 59, 11,249, 40,166,130,144,107, 21, 45, 35,190,150,122,215,132,219, 34, 78,162, 6,166, 1, 50,239,239, 97,
-233, 70,237,229, 16,219, 43,251, 92,232,131,141,178,144,192,192, 93,198,189,158, 80,172,194,199, 82,100, 31, 85, 64, 72,148,219,
- 3,216, 50, 35,105,204,108,105,124,241,186,246,225, 27,177, 91,214, 7, 72,190,233,198, 75,235,108,143, 32,153,210, 14,135,114,
- 99,189,235,195, 83,234,254,122,175,172,251, 17,188,126, 79,125, 64,247,179, 3,238,214, 72,212, 7,214,244,182,180,238,134, 49,
- 58, 6, 62, 80, 16,113, 92, 61, 29,245, 44,183,147, 0, 52,194,193,190,146,147,255, 61, 17, 99,205, 0,101,131,255,253,255,254,
-183,248,147, 63,254, 35,252,224,205, 43, 17, 1,141, 5,143,215, 43,112,255, 6,239,191,126,135,225,238, 45,190,250,250, 29, 94,
-255,224, 51,124,243,248, 14,247,175, 94,227,241,233, 17,167,215, 19,134,209, 35,219, 51,222, 60,156, 49, 58,143,201,201,195,229,
-213,235,123, 60, 60,156, 49,240,134,120,253, 22, 38, 39, 56, 91,112,221,102, 92,158,158,176,166, 25, 27, 17,126,112, 63,202,102,
-145, 25, 22, 5,121, 11,176,100, 96,137,196,156, 85,160,233,103,104,196, 49, 2,176,169, 45,138,141,131,141, 9,110,178,216,162,
-164,200,157, 78, 3, 74,204, 50,242,213, 34,122, 58, 77,130,205,141, 81,104, 75, 20, 52, 54, 90, 58,217,172,133,109,206, 9, 97,
- 93, 26,219,129, 45, 55,124,105, 67, 94,107, 35,228,189, 7, 51, 99, 24, 68, 69, 29,181,179,111,147,154,178,199, 82, 87,231, 11,
-179,142, 95,229,148,192,178,172, 48,172,214, 44,176,178, 21,117, 42,216,133, 0,213,195,156,154, 43, 71, 4,133, 98, 43,243,186,
- 19, 39,108, 33,194, 88, 43,241,174,181,139, 95, 55,229, 9, 88,172,235,214, 18, 14, 98, 22,126,126, 85, 97,145,230,155, 99, 13,
-112,222,180,137,196, 60,207, 2,218, 49,220,198,234, 41, 22, 16, 91, 17, 44,170,122, 27,128,218,246, 10,242,182, 10,108, 40,233,
-115,161, 24,137, 34,213,202, 57,107, 36, 45, 27, 57,196, 41, 71,140, 94,116, 70, 98,109,100,197, 69,171, 62,130,141, 62,191,118,
-129,116,202,123, 51,201,100, 48, 47,194,250,183,214, 98,242, 39, 60, 61, 61, 33,103,153,124, 48,237,209,220,165, 8, 88,106, 94,
- 55, 88, 43,211,210,146, 99,155,150, 24,114, 48,198,234, 22, 60, 54,164,117, 86, 81, 57,215,137, 97, 44,130, 8, 47, 9,198, 27,
-172, 49,226,105,158,117, 71, 94,116, 79,175, 83, 68,222, 93, 35, 92,199,230,122, 28,149,214,137, 31,157, 98,165, 16,146,178, 14,
-146, 62,139,229, 61,201, 93,224, 22,181,201,121,203, 83,175,123,201,221,166, 86, 94,192,103, 82, 39, 50,163,238,235,203,119,166,
- 85,125, 12, 73, 66, 7,208,200,190,251, 67,215,181, 83, 57, 76,201,219,135,114,224,153,213,191,163, 91, 63,116,105, 99,160,125,
-149,208,219,244,112,192,215,210, 77,145,193,194,157, 84, 81,208, 94, 60,228,110,223,108,138, 28,122, 49, 39,101,246, 8,121,106,
-242, 6,182, 4,108, 90,154, 82,138,109,228,151, 58, 78,121,101,201,231,162, 1, 19,138,164,205,106, 3,226, 2,245,192, 2,140,
- 4, 36, 9, 31,176,196, 24,188,199,105,112,112, 44,217,206,169, 16,182, 24, 1,199, 64,146,223, 51,170,237,163,168, 0,142,148,
- 19,156, 11, 97, 11, 1,222,138,226,179,170,254,115, 6,182,148, 52, 48,161, 52,175, 1,149, 44,169,112,148, 65,228,212,223, 89,
- 14, 42,133,134, 22,238,233,250, 29,198,119, 87,166,235, 67,134,180, 0,211,189,119,211,124, 18, 55,226,210,158,211, 66, 59,228,
- 40,115, 19, 28,202,205,166, 56, 78,170,215, 8, 20, 87,210, 69,176,242,126, 51, 43,173,168,161,228,247,235, 96,135,204,220, 10,
- 80, 24,188, 95,159, 45,239, 64, 95, 63,189,188,124,218,179,206,115, 3,236,176,174, 42,154, 24,240, 35, 73,109,253,208, 43,149,
-143,237,247,209,133,107,116, 57,242,180, 91, 74,161,197, 64,170,132,200, 44, 88,215,126,213, 21, 75, 65, 38,135,207, 99,193,191,
-250,243,191,198,255,240,223,254, 17,158, 46, 22,127,251, 1,248,213, 54,128, 7,143,111,105,192,143,206,247,240, 33,193, 76, 35,
- 78,230, 30, 15,111,238,113,126, 24, 96, 13,240,123,191,247, 51, 92,174, 79,120,247,205,183,120,251,201, 91,156, 79,119,248,197,
- 47,126,129, 31,253,232, 7,120,251,246, 13, 60, 7,124,253,171,191,195,229,221, 7,204,243,130, 53, 22,124,120,188,128, 54,128,
- 39,143, 56, 26,140,222,232,117, 38, 55,253,224,156,238,106, 11,172,101, 21, 53,137,109,110, 24, 60,222, 95,174, 8, 69, 44, 96,
- 50, 94, 37, 56, 99, 53,175, 90, 40,111,185, 22,123,134, 97,189, 64,109,252,232,145, 34, 33, 45, 11, 6, 47, 15,238, 45, 36, 36,
- 83,164,120, 87,235, 41, 91, 41, 4,196, 61,146,116, 82, 39,227,127,195,131, 8, 93,157, 76,157, 66,221,187,226,104,223,221, 66,
-128,179,131,216, 2, 73,167,141,134, 91,194, 25,177, 65, 41,178, 90, 73, 33,202,254, 90, 5,184,133,208, 10,135,250,161, 87,113,
- 49,105, 49, 90, 84, 93, 63, 47, 51,188,115,226,225, 46, 2,249,113,206, 41, 83, 66, 32, 89,150,101,244,110,173,197,211,211,147,
- 78,255, 60, 66,140, 32,235,116,133,166,247,133, 97, 73,151, 76, 22,126,112,216,182,173,137,230, 66, 16, 62,187, 31,134,134,202,
- 45, 40,141,229, 31,131,176, 5,114, 17, 33, 39, 43,243,190, 62, 59,193,251,189, 68,144,135,147, 33, 6,229,132,211, 52, 73,106,
-163,119,184, 92, 46,178,190, 41, 82, 56, 36,229, 81, 20,136,120, 77,172,122,128,245, 30,166, 64, 53, 21, 5,211, 52, 97, 11, 43,
-230,101,110,150, 69,201,174,224, 86,144, 53,246, 58,139,235, 39, 4, 17, 88,102,109, 20, 88, 5,129, 81, 15,121,249,220,228,235,
- 69, 8,153,145, 26,180, 74,246,236, 33, 23, 12,198,225,243, 95,253, 26, 75,200, 72,133, 53,195,161,131, 85,117,198,159,172,236,
-249, 94, 80,190,167, 87, 84,250, 41,119,116, 26,238,162,169, 75,123,198,236,107, 63,157,219,149,178, 31,234,245,128,145,206,229,
- 22,250,121, 11,151,121,222,157,124,231,193, 94, 58, 4,223, 11, 42,224,250,247, 77, 13,223, 44, 64,164, 15, 69,125, 99,168, 42,
-223,123, 30,247,158,247, 78,120, 65, 17, 88,142, 10,236,190, 6,105, 85,155,206, 99,234, 97,148, 75,129, 53,146,117, 35,251,184,
-170, 45,160, 54, 37,224, 34, 24,203,234,231,132,218,193, 70,239,132, 15, 28, 55,148, 45, 72, 38,117,140, 2,217, 80, 18,157, 99,
- 43, 94,222, 28,213,242, 84,224,157, 19,182,182, 97,101, 7, 73, 81,225,140,140, 93, 5,230, 31, 97,217,193, 58,143,243,105,194,
-121,240,224, 44,202,208, 45,110,226,155, 55, 98,143,217,230, 85, 59, 10, 69,234,114, 69,235,138,224, 14, 89,118,147,163,119,123,
- 94, 56, 51,162, 10,243,108, 17,251, 19,195,128,114, 22,226, 92,169, 24,222,220, 68,194,234,108,147,117,192,174,246, 58, 48,216,
- 27, 45,189,200, 43, 43, 90, 94, 87, 48, 8,116,252, 37,221,191,170, 66,107, 4,106,229,194, 55, 33, 98,214,107, 53,117,197,231,
-205, 68,169,187, 94,235,190,125,199,219,212,124,119, 28,172,109, 56,104, 56,142, 41,132, 77, 39,211, 9,220,110,161,133,229,249,
- 95,236,158,250, 78,133, 95, 57, 16,181,211,111, 22, 55,186, 77, 79,168, 37,118,222,247,244,189, 75,160,174, 23, 8, 93, 40, 6,
-218, 68,166,223,209,237,244, 90,106,164,175, 61,210,150, 81,156,195,167,191,255,199,248,112,126,139,255,237,207,255, 18,159,188,
-122,131,175, 30, 19,166, 79, 63, 5, 13, 30, 63, 26, 45, 94,221, 89,220,191,254, 12, 48,132,207,166,123,164, 20,240,201,195, 91,
-252,253,223,254, 45, 78,222,226,225,244, 22,127,247,139,191,194,235,215,119, 0,143,120,255,248, 53,166,179,131,117,192,178,204,
- 88,183, 5,151,121,193,229, 26,112, 89,102,132, 45,131, 67,193,130, 77,198,226,136, 48,186, 19, 36, 18, 62,120, 82,219,149, 88,
-199,100, 85, 65, 53,190, 56, 4, 20, 54, 48,131, 81, 37,242, 0,235, 28, 82,145, 8,216,182,175,208, 9,219,116,154, 84, 92,198,
-216, 86,106,215,147,115,140,156, 87, 68, 83, 64, 49,180,148,196,138, 70, 53,214,162,196, 12,239, 69,244, 38,107, 54, 77, 95,171,
-172,121, 8,173, 46, 43, 77, 45,103, 17,169,213,107,199, 24, 3,235, 29,158,174,139,128,116,156, 23, 64, 85, 44,216,194,134,204,
-132,117,139, 66,121,204, 73,236, 75,165, 52, 69, 52, 90, 50, 33,183, 9, 90,214,152, 77, 54,178,134, 11, 33,224,245,235,215,120,
-255,254, 67,115, 40, 48, 51,158,158,158,196,161,227,173,116,162, 41,201,129,175, 9,127,235, 42,152, 97,103,237, 78, 59,211,103,
-114, 76, 9, 88,143,107,163, 45, 70,213,138,200, 10, 42, 69, 89, 57,132,152,176,173,162, 93,144, 52,206, 44,129, 38, 84, 17, 85,
-194, 58, 97, 34,137, 51, 53, 70,226, 86, 75,150,228,199,148,176,205,215,166, 91,114,222, 98, 89, 23,100, 16,230,121,214,213, 30,
-235,193, 75,160,148, 16, 99,193, 26,100, 92,110,172, 19,220,112, 12,162,100,143, 9,169,253,174, 59,225,180, 61,203, 27,251,129,
-117,106, 16, 59,151,141,232,141,136, 8,166,136,253, 57,101, 32,229,112,160,160,102,125, 64, 21, 18, 53, 63,233, 51, 55, 65,200,
-120, 65, 61,243, 92,118, 23, 75,190,213,132,181,162, 77,159,163, 10,104, 75,237,220, 68,203, 97,193,161, 89, 82,247,153, 2,107,
-184,123,102, 88,168,159,184,226, 99,218, 3,144,190,187, 3,167,254,219, 16,190, 83, 5, 44,248, 81,115, 80, 30, 87, 37, 51,158,
- 5,176,224, 32, 50,162, 67, 58,214, 81, 60,215,143,119, 27, 2,176, 99,115,115, 83, 11,247,138, 38,211, 69,149,106,167, 84,118,
-197, 49,105,190,158,115, 86,144,171, 41, 52,159,183,169,221, 78, 45, 62, 12, 33, 71,165,188,129, 48, 16, 97,100,134, 35,160,196,
-128, 20, 69,217, 74, 58,122,166, 44, 52, 35, 99, 69, 52, 87,171, 70,171,222, 76,203, 69, 15, 82, 37,163,177,116,247, 4, 66,138,
- 5,156, 25,222, 58, 5, 51,220,193, 91,131,176, 38, 77, 99,147, 11,104,240, 14, 84, 0,179, 5, 24, 85,225,182, 93,186, 90,213,
- 10, 68, 5, 63,175,162,178,205, 26, 95,201,138,111,140, 65, 20,192, 18,215, 91,246, 89,134,238,147,178, 34,118, 83,173, 54,117,
-132, 75, 53,155, 24,249, 70,197, 94, 63, 67,214, 76,250,164,104, 87,177,144,136, 70,147,193, 9,160, 98,218,100, 4,117,252,168,
- 25,195, 57,229, 22,169, 89,199,238,160, 10, 21,226,246, 57,102,202,234,237, 39,200,237,193,106,153, 41, 59,126,241, 38, 5,176,
-116,132,167,114, 76, 78,144,130,138,122,141,101, 63, 97, 58,254,255,182,255, 44,187,142,158, 75,238,108,116,164,217, 8,185,179,
- 88,222,130,100,169,243,250,211, 33,202,181,177,221,137, 0,200,132,166,238,224, 43, 66,185,238,224, 72,133, 85, 81, 91,121, 63,
- 56, 25,215,174,107,243,241, 26,107, 97, 6,143,159,253,225, 63, 5,149,132,100,129,233,135,159,226,247,254,171, 31, 35,108, 17,
-231,211, 8, 71,192, 23, 95,125,129, 55,159,126,130, 47,191,252, 7,252,248,244, 35,252,221, 23,191, 4,197, 79,241,203,191,255,
- 37,214,101,197,171,135, 55,248,155,191,249, 59, 60, 93, 87,140,227,132,191,254,155,191,195, 23, 95,254, 26,247,119,103, 60,190,
-251, 22,191,252,252,215,152, 47, 27,114,150,123,200,129,193, 70,162, 76,207,198,226,206, 88,193,178, 34, 99,176, 22,201, 36,153,
- 60, 1, 56,121,135,147,183, 24,198, 65, 86, 64, 49, 99, 28, 6,100,170,176,152,162,254,109, 29,207,107, 18, 88,213,193,156,198,
- 81, 82,185,114,193,224,207,200, 57, 99, 36, 96, 93, 55,196,148, 33, 43,201, 44,171, 71, 18,200, 16,147,160,149,151,117,131, 31,
- 38, 9, 48, 33, 32, 39,130, 49, 64, 78, 65,227, 68,141,128, 84,114,106, 74,230, 2,161,153,165, 20,145, 67,210, 92, 8,153,226,
- 45, 91,128,177, 30, 9, 25, 75,140,216,130,236,221, 99,202,200,170,124,168,235, 31,106,209,213,162,116, 39, 29, 1,135,176,105,
- 24, 9,201, 1, 29, 19,182, 20, 36,245,206,122,241,163, 35,194, 89, 43, 8,106, 37, 77,142,131, 19,120,141,177, 58,198,149,124,
-139,235,101,193,224, 19, 70,167, 58, 18,213, 92,164, 28,219,243, 35,231,172,144, 45,233, 6, 99,148, 84, 71, 9, 63, 73,152,198,
- 17,180,172, 50, 34, 38,129, 70, 73,188,173, 69, 44, 81, 10,114,181, 12,147,142,224,207,131,151, 32,153,176, 85, 15,151,188,254,
- 84,212,109, 84, 35, 75,101,171, 22,115, 2,140,124, 54,214,141, 40, 70, 86,151,107,136, 96,197, 21, 91,107, 17,214, 40, 57, 4,
-117,146, 86, 58,177, 76,129, 2,100,146,230,174, 37,216,250,126, 20, 93, 99,166,164,207, 93, 52,177, 34,161,128,187,243,166,205,
- 41, 43, 53, 9, 5, 91,204, 96, 99, 17,144, 53, 55, 29, 66,147, 3,129,171,253,111,255,166,205,166,221,196,186, 93,131,177, 3,
-175,212, 5,193,125,226, 37,239, 1, 87, 73, 27, 31,214, 64,179,146,171,250,189,236, 1, 44,184,149,226,210, 71,161, 92,183,157,
-251,119,167,173, 85,107, 85,122,145,194,245,236,225, 10, 17, 5, 85,139, 79, 37, 77,209, 13,242,147,122,155, 29, 58,254,119, 5,
-124, 80, 1,155,125,244,154,149,237, 75, 29,115,119,207,127,175,176, 35,131,146, 9, 33,110,205,130,192,170,196,102,221,239, 59,
- 43,203,253, 98,132,252,198, 25, 56, 57,198,228, 25,148, 3,194,182, 42,163,187,136, 93,165,112,163, 91,213,221,113, 86,111,170,
- 33, 2,114,132, 97, 35, 23,125, 73,218, 89,235, 7,150, 37,195,197, 26,131,193, 89, 29,187, 19,226,182, 96,139, 27, 98, 10, 26,
-175,233,192,206, 2,133,224,109,132, 0,157,170,200, 67, 84,247, 41,203, 56,157,107, 66,218, 22, 96,188, 3,172, 69,214, 4,163,
-172, 93,135, 28,254,202, 35,214,142, 7, 89,160, 8,169, 36, 36,136, 80,173,173,155,169, 60, 75, 43,107,197, 25,147, 80,232, 20,
-170, 32,162, 76, 77,195, 2, 80, 88, 58, 19,168,163,162,212, 28,243,154, 58,151, 21, 61,154,179, 6,233, 40,255,187,163, 20,150,
-238, 38,102,170,182, 55,210, 7,246,115,204,240, 51,174,188,238,249,110,209,175,251, 65,255,252,159,156,159,203,214,219,247,239,
-131,134, 14, 73,113,185, 89, 2, 62,230, 29, 57, 80, 22,251,149, 64, 37, 71,213,174,189, 84,188,100,135,115, 86,133, 52,154, 64,
- 50,227,247,255,224, 15,240,147,223,253, 9,190,248,135,207,241,205,175,127,141,146, 34,136, 0, 63, 56,176, 55,240, 35,225,205,
- 39,111, 65,229, 53,194,186,224,238,238,132,191,248,247,255, 30,206, 91,120,231,241,151,127,245,215,120,245,171,175,241,238,221,
-215,248,229, 47,127,133,247, 31,222,225, 63,252,167,191,198, 50,111,248,213, 87, 31, 64,185,224,233,241, 29,190,253,250, 29,140,
-117,202, 83, 7, 78,163,199, 58, 47, 8,171, 88,158,188,181, 24, 89, 34, 40,211, 22,240,230,225, 14,119,163,195,153, 53, 55,130,
- 1,111, 25, 33, 18, 76, 32,112, 49, 56,123,135,243, 48,192,141, 14, 41,203, 67,107, 28, 70,108, 73, 68, 54,134, 5, 19, 28, 82,
-130,243, 14,131, 17, 33, 90,138, 81, 59, 86, 66, 82,206, 68, 78, 9,195, 56,129, 13, 48,157, 38, 92,231, 5, 88, 54,120,199, 32,
-246,216, 98, 70, 6, 33,198,140,113,114, 8, 23,129,242,220, 13, 19,156,157,176, 45,151,246, 16,222,182,128,113,114, 13,183, 44,
-202,245,164,247, 17,171, 37, 83,212,221,194, 81, 23,129, 88,140, 25,203, 22, 49,175, 2,205,201, 57, 55,125, 73,125,166,182,253,
-111,125, 22,178, 80,237,130, 50,245, 73, 69,159,243,188, 52, 40,209,187,119,143,234,137, 79,250,181, 65, 82,202,140, 67, 73, 1,
-203, 42,147,136,160, 33, 59, 18, 90, 35,145,182, 57, 39, 44,155,164,173, 13,222, 3, 70, 10,233, 24, 99,155,112,228,117,131,243,
- 2,213, 41,101, 47, 56,157,115,152,198, 9, 12,146,226,164,138, 22,115, 6,114,128,233,179, 30,244, 94,141, 97,195, 28, 3, 70,
-239,133, 92,152, 11,176, 69,120,239, 97,116, 98, 80, 89,232, 69,217, 30, 33, 69,164, 45,170,240, 77, 94, 3, 27, 3,235, 8,219,
-186, 42, 56,167,128,139,172, 15,170,168, 13, 93, 10, 39,186,232,111, 33,221,137, 0,175, 80,222, 39,191, 89, 44,203, 37,239, 90,
-136,166, 81,209,154,122,239,216,119,144, 84,206,132, 88,148, 34, 87, 15,238,194, 40, 44,112, 31,129,157,209, 30,185,212, 89,113,
-119,107, 46,237,141,146,158,228, 57, 23, 40,175,173,149, 19,185,241,136, 88,138, 63, 45,166, 12,153,163,165,237,152, 73,253,155,
-254,249,126, 95,245, 82, 93, 80,109, 12,253,129,222,143,230,203,205,249,208,212,153, 47,248,247, 14,158,247, 92, 14,194,129,227,
-215,118, 93, 17,161,115, 8,239,234,195,140, 93,113,154, 33,226,138,254, 37, 24,125,127, 68,164,198, 26, 49, 40, 69,131, 97, 96,
- 26, 44,188,147, 20,171,186,143,201,170, 8,181, 70,178,115,136, 73,134, 5,137,224, 13, 3,185,192, 25,130,103, 35, 99, 41,150,
-174, 92, 42, 71, 70,200, 82,142, 17,146,100,159,187, 12,162, 13,203,178, 97,221, 36, 43, 59,235, 41,230,188,131, 29, 61, 56,201,
- 88,113, 75, 59,194, 36, 70, 73,214,202,200,251,248,135, 13, 66,145,215,206, 70,242,171,201, 74,181, 92,191,175, 20, 75, 2,227,
- 33, 5,199, 64,132,254, 13,153,200,245, 32,214, 67,182,137, 23,187,137, 75,221, 39,151, 86,168,238,169, 68,213, 66, 72,213, 57,
-202, 59, 61,174, 41, 71,139,218, 6, 83,208, 88, 76,181, 77,182,148,213, 78,104,194,149, 64,215, 31,224,121, 47,220, 74,126,153,
- 0,119,224, 37,244,194,185,242,140, 76,247, 12, 97,124, 19,217,122,252,199,116,254,124,209, 69, 20, 28,105,102,253,216,190, 60,
- 75,133, 45,109,100,222,252,234, 93,230,108,205,130, 39,133,148,212,239, 91,239,102,102,194, 79,127,250, 59,226,129, 14, 27,182,
-109,193,122,189,138,165,203, 59,144,181,248,171,191,252,255,240,246,241, 83,228, 24,240,229,231, 95, 96,156, 78,248,252,215, 95,
- 1,148,193, 57, 99,125, 90, 48,159, 63, 32,196, 13,171,198,159,162, 72, 36,235,246,248, 1,227, 48,224, 68, 64,156,103, 88,159,
- 49,164,140, 82, 4, 91, 58,121, 15,119,119,135,101, 94,225,172, 48,214,195, 22,144, 12, 99,153, 47, 56,157,126,130,123,206, 56,
- 15, 3, 82, 22,223,249,101, 93, 96, 17,145,214, 13,159,220,159,113,119,158, 16, 29, 16, 11,195, 17, 99,100,131,240,180, 32, 23,
- 1,150, 20, 20,196,121,129, 37,134,243, 30,203, 50, 99, 24, 61,156,183,210,113,170,157, 43,165,164, 93,183,193,178, 68,177,117,
- 89, 35, 4,197, 40, 41,132,203, 58, 35,165,132,203,229, 9,195,224, 81, 72, 66, 65, 38,239, 68,249,158, 9, 65,189,245,178,139,
- 85,210, 95, 74, 45,219, 34,132, 0,235,100,175,191,109, 43, 80, 24,107, 8, 88,150,128,144, 54,204, 91,108,255,110,233,237,185,
-234,205, 46,101,119, 11,229, 44,233, 96, 45, 78, 89, 15,171, 24,147, 80, 45,181,216,155,198, 65, 21,240,132,109, 91, 68, 60,102,
- 68,169, 62, 76, 3, 82,148, 32, 22,102, 35, 40, 91,189, 50,173,177, 96,182, 88,182, 89,224, 53,196,234, 65,103,144,181,210, 49,
- 87,204,105,148,157,255, 96,141,222,219, 34,246,173,191,167, 20,233, 85, 43,179,107, 75,168, 53, 92,178,131,206, 90,144, 93,150,
- 5,150, 8,198, 16, 66, 46,200,235,186, 99,142,149,220, 6,133,243, 24, 88,121,206, 40,245, 13, 69, 18,216,172, 49,216,180,113,
-204, 73, 44,159,131, 31, 16,147, 60,131,209, 16,189,187, 85,187, 78, 94, 74, 21, 72,107,146, 94, 59, 32,116, 68, 81,106, 71, 92,
-244,121,216, 1,193,154,128,145,164,224, 74, 69,243, 64,148,142,202, 34,140, 64, 33,153, 6, 87,209, 99,133,255,160, 28, 1,155,
-237,222,110,204,143, 26,228,210, 69,173,148, 35,207, 35,183,181,177, 20, 62,165,238,212,191, 79, 12,234,119, 31,238,244,253,206,
-118,218,201,115,183,153,230, 71,117, 47,218,195,191, 77, 79,158,165,197,149, 22,101, 87,167, 12,172,163,228, 74, 80, 99,236, 29,
- 82, 81,202,210,254, 46,150, 93, 93,212,133,120,168, 82, 66, 71, 79,249, 8,222,209,138,217,177,228, 18, 35, 39,129,184,168,213,
-200, 73,126,169,140,230, 98,148,221, 53,108,219,157,212,124,118,160,192,148,172,147, 8, 96,176, 86,236, 59, 64, 27,241,100,181,
-106,212,168, 91, 99, 8,214, 1,108, 18,182, 32, 15,157,152, 11,162, 30,150,214, 48,220, 96,229, 33,157, 36, 23,121, 75, 34,234,
-200, 40,200, 53, 18, 82,233,119,165, 10,173,148,221, 45, 63, 93,197, 23, 44, 93,100, 76, 73,169,113,212, 84,249,162,120,207,141,
-191, 78,189,110,162, 11, 60,233, 16, 46,187,151,178, 23,100, 22, 58,164,147,245,213,115,179,156,244, 37,102, 17,220, 98,214,212,
-162,146,178, 10,247,168, 1, 63,160, 99,119,148,110,212,222, 21,146,251,205,152,111,166, 69,207,243,213,235,215,244,144,155,151,
-226,100,233, 70,160,185,187, 68,118, 21, 12,181,137,193,158,121,222,227,106, 63, 86, 3,247,128,158,220,125,125,125, 32,212,195,
-187,116, 68,197, 92,175,119,222,137,144, 72, 1,255,230, 95,255, 31, 48,222,201, 1,147,178, 98, 72,165, 80, 50, 46,225, 47,255,
-195, 95,226,155, 47,191,193, 22, 87, 17, 90, 89,139,147, 55,248,227,159,255, 12,247,134,240,248,205,183,184, 92,102,224,126, 66,
- 97, 66, 76, 64, 90, 3, 82,216,176, 33, 23,165, 82, 0, 0, 32, 0, 73, 68, 65, 84,209,138,180,205, 72,153,144, 9,216,174, 23,
-148,117,133,177,140,247,143,239,241,230,213,107,220,121,139,178,206, 64, 8, 66,184,171,180, 66, 21, 37,221,157, 6,188, 57, 15,
- 98,109,179, 6, 15,247, 30, 95,165, 5,228, 12, 62, 57,121,220,221,159,241,148, 55,108, 84,112, 9, 66, 26, 99, 35, 15,117,217,
-143, 39,140,222, 99, 13, 2, 96, 25, 71,197,121,230,140,109,219,192, 68,152,166, 73, 87, 53, 34, 8,117,214, 98, 94, 54,237,244,
-229, 29,172, 22,184, 98,101,167,107,136, 48,158, 78,200, 41,136,130,218, 88, 16, 41, 60,101,139, 40,133, 53, 44,165,174,166, 10,
-150,117, 17,219,151,178,228, 69,209,110,176, 44, 43,214, 32, 93,122, 42, 69, 58, 58, 62, 72,117, 91,115, 82, 87,147,222,123,220,
- 79, 35, 0, 40, 36, 70, 40,116,235,186,201, 72,220,122,164,156,144,227, 14,157, 97, 77,101,156,151, 43, 82, 92,224,221,128, 16,
- 86,140,131,199,120,154,176,174, 43,166,113,130, 99, 3, 42,192, 60,207, 58, 53,148, 2, 40,101, 32,132, 13, 86,195,106,160, 17,
-159, 57, 10, 38,155,141,132,210,180,235, 91,247,222, 65,167, 33, 86,137,126, 41,103, 25,238,229, 61,223, 33, 35, 99, 24, 39,196,
- 40,147, 20,195, 44, 43,133, 44,133,107, 98,218, 19, 32,244,123, 88,118,200, 41, 55, 41, 72, 41,164,106,117,224,122,185, 2, 0,
-134, 97,148,192, 32, 45,220,122,145,116,239,247, 38, 52,181, 25, 98, 22,102,130, 49, 98,107,203, 58,109,233,155,132,186, 82,172,
- 92,145,218,205,139,227,168,104,234, 38,181,160,171,220, 5,152,138,236,129,218,231, 41, 88, 24,109, 46,242,126, 64, 23,220,164,
-182, 85,237, 4,122,222,132,184, 50, 74,161,103, 20,205,138,111,174,108,126,115, 30,167, 63,171, 36,180,186,203,185, 37, 97,244,
- 54,138,231, 9,107,249, 5, 78,245,243,177,250,158,129, 85,158,121,213,111,191,246,152, 98,213,123,218,203,206,166, 63,236,213,
-203,222, 73, 42, 47,157,111, 34, 93, 75,169,190,116,110, 49,128,205,248, 84,164, 30,226, 2, 88,203,176, 86,128, 10, 57,237,171,
- 2,203,210, 33, 56,102, 56, 35,152,205,146,178,112,216,153,224, 24, 56,121, 11,203,140, 24, 54,132, 58,142,211, 93,175, 97, 65,
-199, 26, 38, 85,249,102, 56, 61,208, 71,103,155,174,199,114,229,200,103,185,241,145,192, 92,224, 29,193, 90,169,116,162, 62,144,
- 11, 17,178, 37,176, 37,248,193,226, 52,141,114, 67,105, 62,244, 62,254,215, 7,126, 81,150,112, 75,163,147,139,133, 75,145, 27,
-156, 88, 68,113,149, 41,173, 85,124, 33, 70,246, 3,162, 49, 72, 32,212,108,154, 12,217,233,136, 0,238,134, 59,208, 29, 54,117,
-143,156, 91,135, 91, 29,214, 93,160,137, 98, 48,209, 51, 6,104, 87,129,215, 93,186, 92,216,249, 8,118,121, 9,188, 66,212,186,
-214, 91,208,204, 75, 76,248,151, 83, 3,159, 11, 45,203,205,207,237,209,178, 77, 4,167,255,153, 21,135,204,116,107,121,123,254,
-187,191, 84, 56, 60, 43, 36,154,107,131,143,146,217, 23,180, 45, 68,221,154,170, 20,228, 36, 29, 85, 73, 98,193, 33, 40, 14,152,
-164,243, 76, 33, 99,125,154,225,220,128,203, 60, 35,133, 21,110,158,241,179,113,194,159,252,228,135,112,235, 5,233,250, 1, 3,
-103,216, 28,129,176,194,198,136, 18, 86, 32, 6,108,235,130,184,109,237,105, 22,195, 6,107, 8, 84, 18, 6,231, 52, 50, 56, 75,
-247, 84, 10,114, 45,238, 99,128,203, 5, 63,251,225,167,184,183,132,183,231, 17,167,209,193,178, 80,186, 94,141, 30,247,227,136,
- 79,222, 60, 0, 92, 36,137,112, 11,136,169, 96,152, 70,248,113,196,186,174,216,182, 13,227, 52, 54,223,160, 81,124,243, 48,140,
- 42,124,149, 48, 19, 0,216,182, 85,148,223, 65, 34, 91,217, 24,156, 78, 39, 13,166, 41, 42,130,147,221,113,170,160, 36, 35,124,
-132,211,233,164, 15,119, 97,244, 69, 37,211, 13,211,136,109,219,212,191, 92,176, 5,249,154, 58,150,127,186,172,146,160,184, 37,
- 17, 65, 49,183, 29, 96, 70, 57, 8, 75,169,177,232, 45,222,190,125,139,233, 52, 33,165,140, 16, 54, 68, 61,184,234,158,187,138,
-243, 4, 45, 43, 7,198, 60, 95,101,229,144,162,166, 73,138, 8,108,209,236,244,246,123,150,130,109,221, 58,252,169,140,163,235,
-247,103,210,244, 52, 37,229, 89, 54,242, 61,137,116,202,208, 11,172,185, 81, 55, 99,202,123, 81, 95, 11,245,150, 19, 42, 83,166,
-233,116,198,214,242, 4,208, 1,155,106, 7,138,198, 75,167, 94,167,162, 54,198,156, 74, 99,180,199,152,176,109, 65,201,158,114,
- 24,199, 36,182, 62,195,220,233,101,106,128, 10,246, 96,151,238, 30,206,116,100, 60,150,162,128, 60,230,253, 94, 34,163,188,120,
-153,144, 85,162,104,245,161,214,247,177,197, 0, 55,231, 78,103, 63, 85,134,126,181,172,181,179, 44,203,127,175,160, 28,210,239,
- 83,186, 46,130, 94,192, 99,247,235,103,244,152,216, 82,142,170,221, 99,227,178,127, 32,223,119, 4,127, 60,208,143, 76,248,219,
- 95,230,197,232,202,190, 12,168,221,107,237,182, 95,136,177,172,180, 46,166,174, 35, 2,186,100,175,218,241, 43, 93, 75,119,235,
-245,233,183,219,161,234,135,115, 51,122,103, 21, 75,212,223,171, 64, 59,107,121, 19,189, 49, 90,249, 10,162, 48, 39,141,203, 51,
- 55, 59,126,245,193, 90, 46,194,109,182, 6, 76, 89,240,142, 18, 47,164, 63,187, 0,136, 0,229, 22,251,152,115,130, 20,200, 18,
-102, 66,204, 48,150,225, 44,195,123, 43,225, 51, 86, 68,123,121,178,216,130,211,247, 41, 41, 65, 73,196, 60,142,149, 98, 36,136,
- 21,112,142,242,218, 52,125,168, 30, 78,166, 89,193,248, 72, 93, 99, 85, 81,167,170,193,224,254,153,180, 79, 82,218,174,187,171,
-146, 11,117, 29, 46,221, 48,217,161,137,114,249,160, 1,215,153,140,236,208,187,177,253, 94,205,238,236,232,223,224,195,248,200,
-168, 29,207,174,199, 92, 11,199,151,168,113,183, 41,127, 84,186,157, 88,222, 19,147,128, 23,139,136,239,251,123,201,131, 70,255,
-174,243, 98,222,206,198, 42, 40, 50,119,233,133,185, 83,213,115,222,189,234,165, 80,187,198,251, 8, 99,134,236, 57, 63,188,123,
- 7,107, 13, 16, 35,158,230, 43,254,221,159,255, 5,134,176,225, 15,126,254, 83, 92,174, 23,204, 49,160,164, 8, 19, 18,214, 53,
- 98,139, 25,133,164,123, 45,180,169, 77,113,143,115, 78, 41, 74, 42, 26, 11,133, 44,228, 4,144,132,210, 76,195,136,112,137,248,
-197, 23, 95,227, 95,252,252,103,248,157,215,175,112, 30, 45,140, 1,238,201, 99, 76, 17,148, 10,188,117,248,228,254,132,252, 24,
- 49,175, 11,166,193, 33, 22,192,140, 3, 96, 12,182,205,162, 20, 25,135,155, 76,130, 78, 53, 6, 31, 30,159,244, 94, 20, 65,167,
-243, 85,213, 30,192,217,106,188,102, 58, 76,255,172,101,196, 53,138, 77, 52,197,118,232,203, 65,146, 48, 47, 11, 82, 46, 56,159,
-239,241,248,248, 8, 63, 12,120,247,254, 3,202,147,116,183,117, 70,104, 28,171,112,151,177,108, 1,243, 26,176,134,172,193, 29,
-165, 37, 39,150,155,117, 97,189, 57, 74, 41, 56,223,157, 37,168, 37, 69,108,155,236,144,151,121,195,182, 73, 64,204, 48, 12,130,
-108, 77, 17,107,140, 96, 50, 56,159, 78,112,206,234, 20,171,198,113,202,180,209, 24,139,117, 89, 69,220,166, 5, 65,203, 14, 87,
-170,163,181, 78, 29,162,117,175,173,171,175, 16,117,100, 45,215, 78,236, 86,157,165,100,192,200, 20,163,100, 2, 74,148,181,163,
-174,204,196,166,187, 23,244, 91,136,224,117,197,195,171,215,120,255,238, 27,113, 12, 89,215,174, 23,102,106,212, 68, 3, 22, 97,
-108, 86,207,119, 74,210, 97, 27, 9,246, 73, 41, 73,182, 61,147,134,183,200,231,105,140, 65, 12,186,127, 87, 15,125,213,158,212,
- 41,109,145, 39,163, 10,212,234, 65, 79, 45, 36,169,182,125,169, 86, 26, 36,211,129, 88, 74, 59, 31, 10,237,137,145,213, 45, 87,
- 61,231,164,118,194,106, 55, 51,120,158, 51,209,175, 7, 73,133,204, 13, 32, 93,202,206,152,208, 52,183, 35, 29, 19, 59,218,184,
-155, 32,216, 23, 78,227,227, 97,169,248, 88, 84,107,194,141, 5,167, 20,188,120, 40,127, 4,174,189, 63,136,152, 95, 12,189,200,
-157,221,166,190,168,221, 95,184, 31,234,109,228,122,224, 95, 83,167,102,239,236,114,148, 59, 91,207,238, 95,110, 21, 84,253, 96,
-116, 95, 5, 37, 11, 53,229,189, 34, 99,185, 31,175,230, 90,137, 9, 6,112,176, 66,170, 74, 73,196, 56, 53, 80,160, 10, 4,171,
-140,175,114,146, 37,230,181,192, 89, 9,142,145,191, 35, 61,188,138,170, 74,163,142,222, 5,130,144,179,240,140,193, 4, 50, 6,
-108, 13,140, 37,120,111,225, 44,193, 17, 96, 89,189,160,236, 16,162, 19,175, 58,138,112,186,115, 61, 48,179,112,219,181, 11,102,
-157, 95, 48, 19, 40,203,205,104,184,203,250,214, 17,147,174,136,118,250,224, 65,127,177,239,154, 75,243, 76,239,108,104,168, 38,
-161, 38, 47,202, 95,229, 27, 29,199,115,238,250,158,119, 94, 14, 2,178, 26,167,104,218,245,154, 59,179,227,127,198, 18,169,191,
-193,212,126, 83,178, 92, 75,135, 46,189, 94,115,124, 68,204,114,239, 29,239,188, 33,245, 58,191,157, 8,188, 52, 37,120, 73, 39,
- 82,219,124, 42,132, 91, 66,125, 29,219,230,151, 10,220,125, 9,167,235, 8, 29,247, 53, 43,226,254,159,101,221, 20, 80, 56, 35,
-199, 4,155,173,168,106,221,132,119, 92,240,111,254,227,223,224,130,130,127,242, 59,159,129,223,125,139,114,185, 96, 77, 25, 41,
-233, 94,152,140,240, 3,212,166, 40,221,105, 66, 41,182,229, 38,192,176,166,118, 73, 28, 98, 1, 36,162,216, 56, 60, 46, 9,255,
-238, 63,253, 45,126,254,227,255, 30,100, 12, 78,158, 48, 56, 7,159, 51, 6,239, 80,216,226,225,237, 43,172,105,197, 28, 86,108,
-108, 36,253,202, 18, 18, 1,211,201,195, 24,185, 70, 29, 57,217,101,147,148, 46,215,235, 21, 49,170,232, 83,213,244, 0,176, 44,
-139,236,168,115, 70,204, 89,125,236, 98,227, 50, 70,177,199,144,131,125, 93, 23, 24, 67, 24,188,197,182,109, 8, 49, 99,152,146,
-118,165, 17,126, 28, 48, 95,175,152,134, 17,151,167, 39, 93,225, 89,108, 91,196,178, 6, 60, 62, 93, 17,117, 53,209, 62,198, 66,
-207,100,198,189, 8,152,152,225,199, 17, 69,125,240,143,143,143, 40, 89,116, 1,198, 24,253,157, 24,167,243, 9, 79,215, 11, 40,
- 67,201,148, 43,238,238, 78, 88,230, 11,206,231, 19,182,109, 19,239,120,139,153, 53,200, 17, 10,182,145,194,189,118,175, 76, 4,
-235, 6,132,176,232,192, 69, 14,229,122, 57,110, 41,130, 24,176, 89,119,227,117, 82, 96, 52,121, 45,103, 16, 59, 12,227, 73, 66,
-128,132,138,129,117,139,226, 19, 87,193,151, 33,225,127, 96, 20, 23, 67, 12,155, 92,119,150, 49, 12, 67, 83,129,215,223,217, 15,
- 3,182,117, 69, 81, 1, 47, 25,131, 45,108,160, 40, 89, 1,206, 89,141, 8,238, 68,165,196, 34,162, 51, 70,108,120,186, 18,203,
- 45, 71, 66,207,233, 92,154,157, 77, 30,119, 74,159, 43, 59,225, 77,206,164, 74,123, 68,155,136, 52,196, 53,139, 85, 57,150,216,
-165, 74,238,160,169, 94, 84, 91,167,137,194, 92,168, 66,112,170,112,212,102,245, 45, 29,229, 16,154,180,217, 63,111,142, 28,251,
-238,236, 36,192,156,134,241,207,170,218,110,159,239, 31,153,213, 68,166,117,107,245,160, 34,254,120, 26,213, 45,148, 94,186, 96,
-115,168, 50,110, 15,245, 54, 2,145,229, 78,103,203,233,114,211,241, 66, 84,230, 97, 60,127,204,146,166,162, 57,240,221,207,224,
-195,152,118, 87,204, 87, 28,159,181, 12,211,128, 18, 85,157,206,112,218, 81, 83,243,219,139,159,219, 25,192, 25, 17,142,120, 67,
-200, 41, 34,133,136, 12, 77, 66, 83, 94,189, 33, 13,105, 81, 97,139, 49,132,193, 9,162, 49,134, 85, 81,169, 66, 80,138,165,130,
- 99, 68,141,234,141, 83, 30,180,238, 74,173, 5, 28,195, 56,131,193, 25,140,206,194, 59,249,249,206, 74, 22,180,245,246,128,207,
-132,238,118, 82,218,171,115, 46,250,126,144,236, 18,141,250, 75,137, 68, 72, 66, 70, 70,226,217, 88, 36,231,176, 17, 33,232, 36,
-162,158,111, 89,149,151,141,247, 79,125,150,250,109, 4,106,217, 11, 42,218, 67, 71,250,243,103, 79,111,235,199, 86,212, 37,150,
-150,131,208,141,251, 84,183, 14,151,250,210,248,253, 99,215,232,179, 78, 93,119,136, 69,175,159, 74,127,106,215, 98,243,130,151,
-238, 53,161,161, 93, 91,145,100,204,139, 63,231,176, 58,186, 57,216,111,241,201,141, 14,223,117,242,199,255,187, 73,182, 59,172,
- 4, 42,102,185, 67,114, 98,103,229, 31, 32, 65,221,238,143, 89,124,191,137, 9, 27, 1, 79,219,134, 95,125,249, 5, 74, 74,248,
-236,205, 39, 40,219,134, 82, 18,230,184, 98, 43, 66,213,202, 33, 73,224, 16, 65, 70,253, 33, 54,166,125, 86,142, 57, 21, 66,137,
- 98,195, 51, 70, 70,185, 49,137,205,244,233,241, 3, 94,157, 6,252,244,135,175,112,127,242, 56, 91,135,209, 90,248,105,132, 63,
-143, 48,119, 19,182,235, 5,215,121,198, 37, 8, 38, 52, 1, 18,234,162,187, 43,239, 61,182, 16,176,133, 0, 50, 6,243,117, 22,
- 92,168, 66, 80,166,233, 4,102,113,181, 16, 49, 66, 16, 93,138,168,199, 43,165, 80, 31,176, 57, 99,219, 86,152,150, 63, 78, 42,
- 86,147, 40,218,117, 19,103,140, 80,228,234,207, 16,168, 83, 76,162, 33,153,151,128,199,167,165, 81, 26, 97,234,253, 88,142,251,
-221, 22, 61,188, 79, 51,115, 41,136,185,224,186,206,248,240,238, 3,150,121, 69,206, 89,199,205,162,149, 25, 70, 65, 88,223, 63,
- 60, 8,232, 10,114,176, 23,100,141,154, 21,152,143,243, 78,147,246,138,166,206, 97, 23,144,245,130, 47, 35,215,121, 76, 81,207,
- 1,238,114,224,117,170,192,162,222,207, 74,122,148,120,210,130,243,221, 29, 46,215, 11, 10, 1,119, 15,247,136, 37, 34,198,128,
-113, 26, 17, 53,113,142,106,115,198,122,176,111, 27,206,147,236,248,185, 3,114,229,148, 52, 53, 46,180, 32,148, 10,202,201, 58,
-201,168,135, 96,108, 92,247,234,154, 82,129, 51,147,210, 64, 35,198,211, 40, 59,111, 80,211, 89,196,172,235,177,138,201,165,170,
- 99,146, 25, 49,105, 33,156, 75,110, 51, 99,249,220,140,250,194,185, 9,218, 36,127, 93, 86, 49,165,151,105,117, 41,160,220,199,
-130,215, 88,213,206, 66,158,177,115, 40, 74, 71,164,169, 76,247,227,212,144, 15,175,185, 54,193, 90,214,192,156,134, 73,216,239,
- 31, 57,212,113,139,195,160, 58, 18,200,207,193, 46,253,225, 89, 25,214,220, 30,113,135,228,172,190,131,169, 96,151,125,172,186,
- 87, 83,212,201,173,114, 3,142,124,100,204,175,222,238,126,252, 94,167,150, 7,194, 92, 15,169,193, 78,105, 34, 2,172,209, 46,
- 75, 71, 83,222,136,186,210, 25, 6,178, 48,199,141, 97,189, 16, 68,185,238, 12,193, 91, 3,107, 8, 49,110, 8, 49, 2, 21, 49,
-168,213, 97,141,193,148, 20, 37, 96,112, 6,131, 23, 47,235, 86, 19,158,140,149, 36,181, 84, 16,146, 20, 16,206, 57, 48, 91,164,
- 40,163, 59,227,157, 88,208,140,236,254, 39,239, 48, 56,217,203, 59, 35, 44,120,231,165,122,173, 72,199,164, 22,155,152,178, 42,
-104,247, 53,130,209,245,158,179, 6,214,236, 83, 5, 82, 11, 77, 33,131,204, 14,197, 41,251,189,237,105, 43,157, 14,251,197,202,
-244,209, 98, 13, 53,153,145,246,160,209, 22,220, 82,122,161,156, 57,144,216,235, 97, 94,121,251, 69, 31, 90,232,128, 57,125, 36,
-107, 99,196, 19, 55,245,240,111,123,168, 31, 46, 32,213, 92, 84, 96,197, 30,229,186, 67, 57,106, 68,172,196, 77,154,189, 40,225,
-227,193, 45,215, 66,205, 84, 67, 75,245,195, 11,160,164, 61,244,102,183,114, 82, 55, 89,169,120,227,106, 55,108,116, 57,122, 78,
-165,235,116,137,221,255,144,245, 81,162, 61, 69,102, 88,114, 50, 45,114, 22, 75,218, 64,134,154,203, 35,230,140,175,191,121, 7,
- 3,194,253,249, 30, 49, 37, 44,113, 67,208,225, 74,218, 4,154, 34, 69, 35, 35,133, 8,228, 2, 75, 86,148,203, 44,156,191,176,
-109,146,200,165,137, 85,169, 16, 82, 97,228, 24,241,245, 87, 95,224,167, 63,122,131,159,124,242, 10,167,105, 2, 91, 43, 33, 43,
-105,131,123, 56, 99,187, 94,133, 72, 87, 72, 70,218, 33,128, 12,195, 88, 7,239, 61,230, 69,212,240,203,186,194, 58,135,109, 13,
-109, 28,235,156,111,238,152, 24, 36,255, 61, 68, 97, 31, 12,227, 8,167, 33, 37, 41,139, 87, 61, 5,177, 80,202, 52,204, 33,164,
- 4,239,164,128,168, 41,111, 53, 48,101,217, 54, 24,150,221,110, 46, 18, 0, 50,175, 1,151,121, 69,200,149,157,166,154,150,166,
-117,168,130, 56, 52, 18, 88,191,162,100, 35,135,207, 60, 95,145, 99,214, 41, 71,110,108,122, 38,241,171,131,128, 16, 35,238,238,
-239,113,189,206, 50,134, 78,169, 37,176, 21,133, 59,213,169, 76,206, 89,116, 1, 49, 98, 24, 7, 61,164,163,138,255, 98,243,135,
- 19, 51,146, 78,228, 10,246, 46,146,170,104, 65, 97, 52,117, 98,231,189, 19, 88, 87,216,224,188,195,253,171, 7,204,203, 21,172,
- 22,185, 24, 36,134, 54,107,135,154,115, 22, 91, 99, 74,135,103, 60,119,205, 93,205, 28, 15, 81, 18, 49,173,115,106,181,221, 27,
- 10, 62,172,204,116, 45,106,141, 22,167,242, 60, 11, 41, 97, 24, 70, 24,107,165,240,139, 81,227,100,115,243,129,231, 44, 35,122,
-225,192,115,167, 82,231,221, 63, 94,167, 19,169, 52,151, 74, 77, 70,204,186, 26,104,161, 11,125,180,217, 13, 56,234,184,102, 46,
-109,101,211,132,188, 85,135, 64,250,254,116,143, 35,174,191,211,173,238,135,118,160,141, 57,249,187, 63, 3,212,119,220,184,188,
-183,103,250, 77, 88, 69,151,147,125,171, 92,239, 31,234,164, 73, 63, 90,163,180,152,205,221,206, 38,170,213,218,101, 8, 45, 44,
-105, 39,189,107,163,107,120,135, 72,175, 59,175,238, 77,199,127, 72,164,237,159,130,232,248,226,165, 66,118,118,112, 24,179,170,
-211, 53,199,153, 74, 65, 14,226,229,246, 76,152, 28,195,147,154,197, 89,160, 44, 34,228, 1,152, 11,140, 33,140,214,194, 22, 17,
-200, 68, 0,100, 37, 84, 35,197, 40,239,143,145,200, 86, 46, 25,174, 20,140,134,192, 86,136, 72,194,233,183, 0, 91, 36, 64, 42,
-253, 66,128,229, 14,214,111, 96,156,129, 29, 28, 42,253,223,123,139,201, 90,140,214, 98,176, 22,131, 55, 24, 29,195, 26, 96,244,
- 14,131,181, 10,138,216, 90,117,186,133,140, 20,179, 6,101, 8,179,216,177,193,201, 26, 56, 22, 78,113,234, 18,207, 50, 24,197,
- 14,200,214, 35,234,197, 95, 49,114,185, 16, 40, 21, 56,216,238,189,174,198, 21, 69, 73,148,220,182, 83, 89, 72,230,181,149,222,
- 71,141, 7,145,208, 81, 73, 78, 85,245,153, 51, 80,162,142, 68, 83, 39,122,131,218,120,228, 98,175,197, 74,173,194, 95, 10, 16,
-250,216,248,251,120,211,241,190, 39,103,193,230,202,189,148,119, 79, 62,239, 33, 71,166, 42, 84, 53,160, 39,117, 30,250, 99,126,
-250,158,184, 83,218,177,186, 43,218,111, 5,164, 5,123, 86,117,193, 65,111,180,199,217, 18, 62, 90,236, 42, 97, 82,245, 34, 59,
-214,102,143,106,228,198,236,175,132, 59, 42,178, 7,117, 78,188,206, 33, 38, 24, 55, 34, 91,143,175, 31, 31,113, 89, 22, 60,156,
-239,224, 51,129,131,176, 3,230,176, 34, 27,131, 88, 42,223,154, 96,141,111, 35,255,164,204,131,168,252, 3,174, 86, 60, 85, 69,
-111, 57,226,154, 10,190,252,252, 75,252,225, 15,127,132, 31,188, 57, 35,143, 44,220, 5,202,160, 31,190, 70, 92, 55,164,235, 21,
- 33, 17,150, 45,106,158,186,109,123,204,140,130, 57,110, 32, 43, 46,144, 22,159,154,229,240,141, 41, 98,221, 68,108, 70,106,147,
-154, 78, 39, 64, 59,108,231,189,128, 75,212, 75,158,138,164,140,149, 34,116, 59,235, 7,172, 49,194,141,131, 22, 0,178,203, 92,
-183,128,176, 73,248,130,243, 35,214, 80,240,225,178, 32,232,206, 54,215,195, 67,175,211, 26,175, 67,198,168, 32, 76,224, 53, 70,
-195,138,136,234, 7, 93,224,156,132,175, 72, 2, 28,183, 61,110,208,224,145,164,217,229,219, 53,224, 60,157, 16,214, 13, 6,132,
-117,217,240,201,235, 87, 58,145, 88, 49,157,166, 93,212, 5,134,119, 22, 57, 11,144,198, 57, 39, 36, 54, 5, 54, 9,255, 33,119,
- 2,172,210,174,183,162,207, 6, 38,200, 33, 91,178,164,233, 5, 57, 56,195, 26,129, 2,188,125,251, 22,235,178,128, 80,148,173,
-238,176, 46, 65,187,124,125,118,144,129,101,219,154, 40,153,102, 90, 68,146, 41,140, 64, 91, 44,136,133,169,158,136, 96,134, 1,
-110, 26, 49,157,207, 98, 23, 12,177,137,162,115,145, 96, 25,176, 1, 49, 48, 14, 67,139,216,149, 48,151,128, 97, 28,240,233,167,
-159,224,233,233, 34,122,144, 34, 52,192,162,187,145,214, 12,114, 39, 50, 85,212,114, 19, 52,178, 76,242, 64,132,162, 7,122,204,
-165,193,207,218,215,213,144, 21, 50,250,117,114, 58, 23, 42, 90,144,236, 34,242, 82,117, 12, 69, 2,191,138, 22, 47, 92,160,185,
-244,164, 98,111,179, 23, 49,154,202, 87, 5,117, 85,122,108, 78,227,248,103, 85, 10,255,125,136,175,223,109, 87,187,245,135,247,
- 9,109,154,108,117,171,110,167,231, 42,120,121,208,176,210,122,202, 33, 80,134,200,236,193, 24,116, 68,112, 10,133,237,246,247,
-224,170,177,110, 99,144,195,238,178,183,192, 49,193, 26,146, 32,142, 44, 97, 42,147,179, 56,121, 39, 43,193,156,181, 27,149,139,
-191,118,185,198, 48, 60, 19, 12,196, 30,150, 32,162, 17, 20, 32, 70,181, 51,177, 80,196, 12, 21,140,198,192,123, 70,166,140,101,
- 11,210,237,176,145,157,155, 90,125,178,142, 4,157,179, 48,206,128, 44,193, 13, 30,211,105,130,113,226, 27,247,158,225, 7,134,
-247, 6,126,180, 24, 6, 3,127,178,240,163,129, 27, 44,140,229, 86,137,135,152, 16, 82,145,155, 74,171, 99,210,169,131, 33,130,
-183,128, 99, 70, 82,171, 6, 74, 18,223,163,177,136,108,145,172, 65, 32, 32, 21,106,251,157,220,186, 13,179, 39,178,180,216, 84,
- 28,162, 88,123, 54,157,124, 46, 25,187, 20,130, 14,135,248,237, 5,184, 99,140,243,193, 98,198,140,150,112,214,175,122,234,154,
-232, 88, 96,210,111, 20,207,181,136, 94,106,203,158,206, 26,217, 43, 80,209, 37,209,221, 8, 65, 95, 80,203,223,142,195,219,235,
- 57,168, 18,232, 0,153,249,174, 98,228,165, 21,215,111,226, 68, 52,106, 98,231, 78, 56,132,205, 40,110,210,232,225, 46, 15,140,
- 26,229,171,220,134,154, 74, 21, 54, 92, 46, 23, 76,211, 36,200,211,156,113, 93,102, 25,101,103,104, 36,168,140,195, 11, 21, 24,
-125,248, 23, 21, 50,213,189, 99, 85,242,198,156, 17,115,130,245, 30,243,188,225,171, 47,190,198, 63,251,189,159, 97, 60, 1,238,
-100, 16,201,192,156,239,225,137, 16,222, 61, 33,100, 96,205, 25,151, 32, 7,109, 80, 64, 74, 42, 25, 31,158,158, 48,157,207,112,
-222,239,228, 71, 5, 39,173,155,248,180,137,118, 17,155,245, 35,214, 16,112,186, 63,131,140,116,221, 79,151,185,117,211,167,211,
- 25,243,188,128,141,213, 28,114, 39, 29,121, 46,202,137, 39, 44,243, 38,100,182,235,130, 24, 51,222, 63, 62, 33, 22, 32,182, 73,
- 83,133,158, 80, 19,116, 86,187, 44, 17, 97, 28, 71, 12,227,128,211,121,194,178,174,187,112,139,128,148,164, 99, 60,159, 79, 48,
-198,194,251,177,137,227,100,244, 12,132, 45, 96,240,131,144, 39,147, 56, 68,188,151,152,215,243,249,132,156, 51,174,215, 25,222,
- 15,112,118,196, 60,207,184,191,191,195,229,114,129,115, 86, 39,133,117,236, 91,158,137,160,251,156,143,186, 22,101,102,140,211,
-136,235, 44,194, 65,107, 44, 78,227,168, 46,129,140,105, 26,154, 19,231,116,158, 84,207, 32, 46, 12,210,169, 86, 78, 25, 41,198,
-157, 97,161,247,158,117,130,218, 53,234, 59,175, 89, 24,165, 20, 44,203, 34,104, 93, 72, 26,157,215, 9, 75, 84,127,124,209, 0,
- 21,209, 77, 4,248,113,130,177, 14, 91,216,244,243,223, 48,142, 39, 76,227, 73, 34, 86, 99, 84,187,157, 84, 5, 82,160,239, 72,
-214, 26,203,251, 76,216, 93,233,165, 47,104,200,159,137,112,203,254,140,146,103, 47, 29, 34,163, 27,228,166,123, 15, 82, 93,243,
-214,168,239,156, 95,182,207,190,208,100,183,241,251, 63,246, 80,127,249,128,223,247,162, 53, 25,235,121,164,235, 30, 53, 73, 10,
-192,101,226, 67, 62, 11,181,139,141,219, 40,212, 28,186,176, 46, 48,228, 54,246,181, 10,155,180, 10, 43, 57, 31,228, 93,172,163,
-255,234, 50, 17, 47,118, 6,178,216,213, 6, 67, 56, 15, 22,172, 83,132,154, 34,198,144, 96, 21, 33, 61, 1, 86,173, 97, 49, 69,
-148, 74,185,202,208, 52, 54,106, 81,163,166,136, 56,206,121,139,136,140, 53, 37,100, 13,143,129, 70, 66,130, 36,111,218, 89,134,
-243, 22,214, 59,192, 50,134, 73,110,124, 34, 1, 74,142,206, 98,114, 6,167,193,227,228, 61,166,209,201,127, 30, 60, 38, 47,161,
- 19,134,185, 85,171,185,136, 21, 69,172, 31, 69,215, 10, 6, 12,134,211,110, 46, 54, 15,187,146,245,216, 32,177, 69,114, 22,129,
-180,218,204,208,209,156,138, 63,176,239, 1,155,142,178, 93,129, 59, 54,114,143,125,201,173,234, 63,206, 93,122,239, 87, 63,130,
-207, 71,100,107,167,174,166,255, 66,135,250,237,212,169, 95,217, 84, 49,158,140,218,107, 88,202, 14, 69, 66,185,245,194,227,163,
- 63,183,239,220,137,247, 84,153,222, 37,210, 71,176,126,172, 96,126,233,240,127,233,181,236,239, 75,217,187, 16, 58,170,107,235,
-244,175,114, 20,234, 96, 62,163,118, 4, 73,246,162,134,224,199, 17, 91,140, 45,104,195,120, 81,190, 95,175, 87,241,189,235,142,
-179,142,111,141,181, 50,102, 15,241, 96, 69,108,192, 28, 99,177,197, 32, 1, 42,222, 99, 43,192,117, 43,248,213,231,255,128,127,
-241, 95,255, 12,211,235, 19,200, 79,224,243,189, 76,236, 30,103, 92,174, 11,222, 95,174,224, 97,196,154,147,220, 67, 84,148, 63,
-190,105, 16, 11, 16, 66,148,110, 79,243,192, 55, 85, 67,167, 44,215,110, 72, 25,126, 60, 33,149, 44, 48, 22,195, 88,214,165,221,
-227,203,178,106,112,136, 6, 47,105, 87, 92,106, 92,107,202,152,231, 5, 68, 6,243, 18, 16, 83,198,135,199, 11, 50, 17,100, 98,
-190,227, 62,169, 91, 55, 2,123, 44,175,113,146,101, 62,120,135,187,187, 59,177,147,169,247, 39,233,125, 20,226,134, 45, 6, 17,
-225, 2,184,187, 59, 99, 26, 6,196, 45,226,124, 58,225,254,124,198,186,174,200, 57, 97,154,166,134,113,246,222, 97,154, 70,228,
-146,176,204, 1,219, 26, 64,196,184,187,187, 19, 59,219,182,234,253, 99, 16, 67,198, 56,142,240,126,208,233, 88,105, 93, 96, 91,
- 5,169, 23,191, 6, 28, 89, 63, 32, 70, 89, 89, 16, 10,150,121, 65,138, 17,119,167, 9, 33, 6, 76,211,136,111,223,189,131, 49,
-140,207, 62,251, 20,160,234,137, 47, 48,206,163,164, 44,218, 21, 69,116, 85,107, 94,140, 9,167,113,146, 3, 47,229,102, 87, 46,
-250,186,114, 18,207,248, 26, 36, 55,224,116, 62,107,132,170, 64,180,140,151,152, 93,227, 60, 46,215, 69, 82,206,200, 40,201, 18,
-152, 47, 51, 6, 63,226,114,125, 58, 70,157,162,111, 16,187, 32,231, 93,120,210,156, 63,187,113,196,180,226,180, 41,252,193, 96,
- 50, 7,135, 73,157, 42,239, 16, 15,157,244,245, 19, 57,162,102,181,171, 80,155,166,140,175,239, 65,165,102, 86,187, 22,117,217,
- 20,234,166,120,126,168, 83,249,237,104,113,120,169,211, 62, 62,152,233,102,207,126,216,125, 86,146, 92,214,240,144, 94,148,208,
-139,128,244, 66,175, 57,212,242,239,162,177,221,153,123,236, 43,218,206,177, 29,232,117,188,219, 91,124, 25, 77,209, 88,147,143,
-140, 33, 97, 19, 43, 32,230,236, 45, 78,206,128,114, 66, 78, 89, 31, 88, 4, 74, 25, 86,167, 15,204,128, 51,226,117, 79, 73,148,
-190,242, 48,212,176, 25,173, 56, 12,137, 40,205, 25,134,243, 6, 33, 71, 36, 48,200,122, 8,203, 86,107, 77,150,157,214,224, 61,
-134,105,132, 25, 44,216, 18,238, 30,206,184, 59, 13, 32, 74,112,134,112, 30, 29,238, 38, 57,200,207,211,160,127, 60,198,209, 99,
-112, 78,132,121,196,216, 66,194,178,109, 8,185, 96,222,130,132, 77,232, 77,106, 20,246, 96, 72, 58,130,102,255,208,106, 41,179,
- 65,241, 30,217, 58, 68, 34,185,253, 52, 62,176,237,181,154,169, 10, 7, 34, 91, 41, 56,232, 35,118,219, 64,183,213, 81, 83,106,
-169, 75,247,103, 90,142,253, 32, 47,109,167, 94, 26, 5,240,191,196,161,222,135, 9,213,132,172, 67,224,144, 94,131,220,237,172,
-169,167, 28, 22,124,175,157,253,179, 81,127, 39,170,185,181,126,190,212,137,223, 42,227,191,171, 91,127, 46, 86,165,103, 78,213,
- 42,134, 98, 34,100, 42,141, 79,144, 75,233,192, 90, 89,119,174, 4, 63, 12, 58, 94, 4,236, 48, 98,217, 54,204,243,130, 97,244,
- 96, 98,196,173,242,207, 5, 40,146, 74,110,150,178,156,114,235,108,114,150,235, 59,107,183,147,178,132, 12,165, 82, 0,246,152,
-238,223, 96,205, 9, 95,126,254, 75,252,225,207,127,142,225,124, 2, 89,128, 70,143,248,238, 17, 31,222,125, 64, 72,210,169,155,
-105, 4, 57,139, 53, 8, 28, 38,132,168, 2, 52, 70, 8, 26, 96, 50, 12, 66, 84, 68,129,247,131,210,222, 60,150,117, 67,108, 93,
-111,128,113, 6,185,100,132, 24, 36, 48, 6, 56, 76,134, 8,132,117, 93, 81, 98,145,188,245, 24, 17, 66, 68, 72, 5,203,150,112,
-157, 87, 68, 21,100,101,146, 63,189,194,157, 25,237,185,117, 58,143,210, 69,151,140,101,221,192, 36,112,153,211,233,132,235,245,
-138, 92,168,229,187,215,113,109,221,171,111,203,130, 87,175, 94,225,124,154,224,189, 69, 8, 1, 94, 15,216, 92, 34,198,105, 80,
- 59, 89,196,221,221, 89, 26,136,148, 16, 99, 66, 8,162,225,121,120,184, 71, 41, 73,125,239, 3, 66,136, 66, 28,236, 28, 2,125,
- 70, 71, 21,136,161, 59, 43,114, 41, 56,157,197,223, 95,114,238,183,157, 34,114,203, 9,195,224, 37,182, 21,192,233,116,194, 56,
- 78,184, 94,101, 18, 50, 12, 35,114,138, 26,122,195,141,150,151,146, 20,145,131, 31,112,154,100,255, 95,138, 28,216,245,240, 43,
- 76,205, 97, 19, 82, 68, 33,192,143, 3,252, 48,192, 57,135, 45, 68,204,235,138,187,251, 7, 88, 39, 4,196,148, 69,239,129, 82,
- 16, 66,132,119, 78, 99,179,105, 95,245,154, 10,123,202,173, 40, 59,232, 98, 42,225,173, 67, 60,191,196,186,232,255,142,123, 12,
-122, 55, 21,167,142,108, 90, 71,246,226,124,160,142,170, 89,208,199,139, 86,161, 96, 81,103, 76,233, 34, 48,179,114,234,219,161,
-158,170,111,145,202, 63,170, 67,191, 69,187,114,247,112,189, 61,204, 15, 15,220,130, 23,199,242,187,162,184,238,164,118,255,250,
- 94, 59,148,166,198, 63,168,246,129, 99,216,133, 76,185,219, 7,213, 14, 3,173,128,170,207,157, 33,251,244,129, 9,103,239,112,
-114,140,146, 98, 35, 6,201, 4, 32, 43, 74, 81,236, 95,222, 48, 76, 19,195,136, 5, 41,101, 96,203,234, 77,213,149,129,213,194,
-193, 24,131,121, 13,200, 36,123, 72,182, 14,198,186,134,250,100, 54,152,166, 81, 14,117,199, 24, 38,135, 79, 62,121,192,195,221,
- 4,207,192,253, 56,224, 52,122, 16,139, 90, 62,233,222, 39, 22, 9, 36,189, 44, 27, 46, 75,192,101, 13,248,112, 93,112, 93, 3,
-182, 84, 16, 99,145,142, 5, 34,142, 19, 27, 27, 96, 32, 54,187, 84, 84,112, 66,106,141,179, 30,217, 14, 8,108, 16,137,144,116,
-228,158, 43, 96,162, 0,166,176,238,152,240, 29,135,204,203, 56, 85,234,119,233,116, 28, 21,213, 93,241,126,147, 72,255, 88, 21,
- 49,183,157,122, 93,161, 84,129, 75,157, 2,125, 12, 24,115,184, 17, 1,192,240,139, 62,114,166,126, 85,115,163,227, 40,191,217,
- 42,247, 49,251,218,126,168,151,166,112,191,157,102,189,164,104,127,233, 63,223,190,198,103, 30,252, 91,201, 43, 85,143,237,254,
-190,113, 29,211, 19, 61,227, 13,140,227,208, 60,188, 49, 73, 7, 46, 16,164, 8, 6, 97,112,190, 43,220,116,106,195, 59, 76,168,
-130, 73,138, 38,154, 73,254,156, 60,144,147, 10,179, 10, 50,238,238, 30,176,109, 43,150, 28,241,238,155, 39,124,251,229, 59,252,
-241,127,243, 79,225,207, 6,197, 18, 56,100,204, 31,158, 16, 0, 44, 41,227, 26, 3, 54,245, 2, 59,235,192, 16,133,185, 29,188,
-112,215,201,128,141, 81, 85,122,108,234,113, 54,166,145,232,234,252,117,158, 47,173,249,145,177,108, 18,235,148, 66, 88,228,186,
- 79, 24,134, 1,206, 90, 44,235,138, 66,140,121,141,184,180, 3, 93,197,164, 58,242, 23,108,106,214, 85,154,195,233, 60,226,238,
-254,132,233, 52,224,124,158, 0,146, 40, 89,107, 68,132,229,189,151,117, 89, 8, 8, 49,168,173,137, 26, 86,185, 54, 31,219,186,
- 98, 89,103, 92, 47,151, 22,217,234,188,149,207,169,100,140,227, 32,180, 49,203,152,166, 17, 4,194,245,186,136, 35, 3,128,117,
- 12,107, 45,174,215, 43,166,113,194,229,114,213, 78, 83, 15,141, 10,198, 41, 89,216, 6,181, 59,173,194,103,102,132, 40, 66, 61,
- 99,141, 76,104,180, 37,147,244, 59,135,203,117, 6,105, 94,252,117, 94,154,174, 32, 6,241,221, 27,231, 48,157, 70, 41,232,114,
-108,104, 99,107,101, 58,185,172,139,240,235, 13, 55,161, 97, 5,218,164,140,182, 6, 33,125,158,174,155,136,148,207,231, 51,252,
-224, 1, 2, 46, 79, 87, 16, 73, 74, 95, 41, 25, 49, 4,137,229, 77, 82,204,149, 2,148,148, 58, 87, 87, 31,200, 68,186, 7,231,
-131, 83, 97, 79,117,228,110,226,181,219,176,203, 11,162,113,116, 2,227, 46,180,100, 95,233, 85, 71,149,130,110,110, 11,251, 93,
-123, 81,147,229, 88, 5,125,245, 62,150,135,137, 49, 6,102,242,227,159, 85,148,158,102,226,128,126,203,241,123, 61, 32,123, 75,
-208, 78,145,123, 89, 17,221,146,102, 58,149,243, 81, 33, 72, 7, 79, 57, 83,205,237, 62,194, 63, 62, 54,118,111,197, 3, 58, 64,
- 72,205, 89,168, 49, 46,109,172,122,204, 81, 55, 5,176, 36, 34,185,179, 53, 24,184,198,132,106,148,169,170, 17,173,126, 16,198,
- 8, 81,206,212,209, 9,145, 40,128, 11, 16,138,136, 62, 90, 82, 27, 21, 88,245,212,206, 33, 98, 14, 25, 79,203,134,216,217,255,
- 13, 11,181,200, 88, 85,178,123,131,251,251, 19,126,240,233,107,188,190,155,112, 63, 58,188, 57, 79,152, 6,135,172,157,213, 26,
- 19,174, 91,196,251,203, 5,239,158,102, 60, 94, 87, 60,205, 1,151, 37, 97, 73,132, 37, 1, 33, 1,107, 16,222,244, 56,142,152,
-166, 65,208,136, 49,195, 40,140, 38,233, 5,212, 42, 98,235,145,157,208,228,130,238,219, 75,202,141,135, 92,189,220, 7, 65, 34,
- 29, 15,242, 62,207, 30, 55,126,244,190, 75, 61,136,198, 64, 55, 85,111,106, 55, 69,237, 24,136,159,119,234,220,169,212,129,239,
-215,201, 54,187,206, 11, 48, 36,211,171,222,219,181,114,115, 88,190,212,149,211, 17, 1,251, 82,177, 80,139,201,190,155,238,239,
-165,219, 63, 31, 27,179,255,166,105, 68,253,222,124, 67,117, 46, 29,148,206,152,202, 45,168, 19, 45, 77,169, 82, 97,148, 97,171,
-121,218,177, 37,152,165,154, 35,160,118, 28,195, 86, 80,161,186, 63, 39,210,201, 71, 46, 42,144,211, 2,162, 18,185, 64,176,206,
-203,126, 26,178,191,150, 29, 89, 64,138, 5, 79, 51,240,247, 95,252, 10,156,174,248,131, 63,248, 25,220,155, 7, 20, 34,108,239,
- 31,241, 52, 47,216, 10,240,180, 44,226, 52, 97,134,115, 30, 40,114,168,179, 53, 13,124,148,181,105, 97,102,196,144, 26,245, 45,
-132, 77, 34, 71,153, 16,131, 4, 35,129,128,117, 89, 52,163, 93, 94, 91,202,177,221,155, 81, 59,173,117, 93, 69,167, 18, 11,222,
- 63,206, 72, 69, 30,178,185,106,127, 12,239,108, 10, 61, 4,152, 9,198,114,235, 74,235,184,156, 0, 12,227, 0,107, 24,215,203,
- 19, 94,189,122, 85, 75, 35, 76,231, 9,227,224, 97,140, 16,221,106,227, 49, 77,131,174,200,118, 91, 84, 8, 17,235,186, 97,154,
- 38,164, 20, 48,140, 14,147,118,237,211, 40,158,245,101, 89,112, 58,143, 13,238,178, 44, 11,134, 97, 84,218, 28,169, 40, 84,138,
- 24, 98,130,183, 78, 1, 39, 53,175,131, 20,146,165,162,125,181,144,237,150,227, 58,206,151,130, 36,108, 81, 17,172, 5,235, 26,
- 96,140,197,124,157,145,147, 76, 68,188,151,226, 38,167,208,232,113,137, 4,186,228, 7, 47,130, 83, 8,196,139,173, 20,104,213,
- 42, 90, 84, 67, 16, 66,212,160, 27,209, 45, 60, 61, 93,241,240,112,143,109, 91, 97,173,195,245, 58, 35,132, 13,167,211, 73,172,
-186, 68,106,241, 83, 77, 80,221,119,215, 40,214,166,174, 63, 78,225,122,119,214,115, 21, 59,186, 64, 52, 58, 62, 8,107, 17,208,
-221, 79,253, 68, 25, 55, 58,151,151, 32, 90,153, 68, 52, 93, 35,121,187, 81,243, 94, 4,232,191,104,143, 7, 32,253,103,139,228,
-142,150,156,231, 72,248, 99, 64,203,199, 70,150,183,107,125,218, 83,212, 72,210,203, 8, 71,222,118,191,255,168,130,160,174,129,
-111,158,226, 3, 55,251, 5, 28,232,193, 75, 93,196, 87,207,200, 48, 92,127, 95, 21,182,168,141,195, 40, 19, 94,148,173,117,212,
-190,119,143,181,139, 5,147, 90, 32,128,162,227, 52,176,193,154, 10,214, 76,184,134, 94, 29,114, 55, 0, 0, 32, 0, 73, 68, 65,
- 84,132, 53, 17, 98,200,136, 37, 98,100,160, 88,192, 21, 2,167, 36, 0, 14, 54,120, 56,143,120,251,112,198,253,224, 96,203,128,
-145, 45, 98,220, 48, 94, 9,151, 37,226,113,222,240,120, 89,176,172, 17,243,178,180,164,159, 76, 35, 66, 54,152,215, 21,243,186,
-233,232,211,224,254,254, 30,222, 25, 44,243,162,133,129,238,255,181,242, 33, 48, 50,239,228,186,157, 42,215,237,132,154, 14, 46,
-239,233,126,157,159,188, 21,107,135, 81,222,203,172,117,165,212,116, 25,166, 29, 18,176,113,251,243,179,137,206,179,177, 52,253,
-118,215,106, 79,253,120,214,209, 87,239,249, 13,104,166, 95, 44,145, 42,224, 43, 52,232, 31,243,207,111,196,196,126,207, 41,217,
-173,168,135,202,158,142,213,143,222,119,107, 76, 55,217,170,130,189, 12,201,148,206, 66, 52, 4, 72,131, 73,178, 64, 77, 82,144,
-162,207, 59,192, 57,204, 49, 34,164, 8,182, 22,105,222, 96,172,228,156,199,146, 5,169,170, 83,182,156,116, 60,206,140,193, 13,
- 88,182,160, 86, 51,130,179, 30, 79, 79, 31,224, 45,161,132,130,187,183,111,113,157, 25,255,234,255,252,127,240,230,179,183,248,
- 31,255,231,255, 9,230, 53,193,156, 60,172, 51, 72,215, 89, 83,251,132, 50, 70,196,152,175, 87,185, 26,131,166,178, 17, 99,213,
- 49,188,181,174,249,159, 73, 31,238,243,188, 52, 11, 84, 74, 5, 41, 5,132, 77, 69,162, 36,197, 14, 17, 35,198,154,153, 46,135,
-182,232, 84, 10, 62, 60,205,162, 59, 73,242,126,181,162,143, 5,189,219, 51, 57,196, 94, 42,162,181,233, 52,226,233,233, 61, 62,
-249,196, 10, 97,210, 48,198,193, 43,248,106,195,143,126,248, 41,230,101,197, 22, 34,166,211,132,111,191,249, 22,254, 60,160, 6,
- 22, 49, 19,156, 21, 42,222,229,233,210,196, 86,131,134,237,156,207, 39,188,255,240, 45,156, 51, 56,157, 38,248,193,226,205, 39,
- 15,184,206, 23, 45, 46,228, 51, 22, 43, 90,129, 97,146,252,111,236,136,218,162,188,115,102, 22, 86, 6, 32, 25,235,216,233,110,
-168,187,238, 78,171, 17, 98,128, 51,166,221, 83, 37,100,113, 1,100,224,253,187,247,152,198, 17, 49,206,136, 49,227,241,233, 9,
-126,120,141,243,221, 61, 46, 31, 62, 32, 69, 89,211, 76,131,135,117, 22,227, 52,226,233,233, 73, 44,110, 81, 24, 1,214, 90,209,
- 10, 92,103, 48, 59, 24,231, 16, 66,192, 50, 7, 57,199,140,129, 97,113, 69, 92,231, 43,172,149,233,204,135, 15,143,152,166, 81,
- 66, 96, 92,110,209,185,185,164,125,229,132, 42, 88,227, 93,191,115,195, 70, 57,100, 74,148, 35, 20, 43,223, 30,250,186,107, 55,
-149, 89, 81,181, 58,180,135, 47,245,150, 94,113,127,153,125,255, 94,241,177,117, 84,223,101,163, 84, 40, 77, 29,199,203,179, 93,
-137,114, 71,149,242,111, 31,216,242, 18,240,162,239, 98,184, 27,133,191,208,168,189, 60,138,108, 49,146,232, 70, 12,249,176, 55,
-173, 6,190,230,131, 46,180,211,228, 90,100, 30, 14, 65, 27,123,103,212, 31,232,251, 72,184, 31, 10,139,247,152,155, 23,178, 9,
- 94, 84,237,201,165, 75, 26,171, 40,218, 92, 3, 61,118,113, 71,209, 27,177, 42,138, 11, 17, 98, 1,230, 84,176, 21, 66, 98, 35,
- 30,116, 50, 8, 37,129, 83, 22, 68, 35,103,176, 99,156,239, 60,238,166, 17,175, 78, 35,238, 71, 7,147, 3, 56, 69,124,216, 34,
-174,115,194, 63,124,249, 14, 95,124,245, 30, 95,127,184, 98, 73, 66, 92, 26,199, 19,134, 97,130, 27,206,200, 84,144,153, 16,178,
-216, 63,136, 19, 10, 65, 30,122, 57, 54,240, 72,243, 71,214,113,122,179,159,113, 43,174,246, 61,114,217, 11,167,210, 28,255, 55,
- 31,235, 81,205,126, 24, 19,119, 6,234,102, 65, 44,157,229,170,221, 28, 61,119,160,252,198,131,238,187,148,226, 47,217,217,234,
-165,120,219,165,183,238,191, 19,186,244, 1, 46,212,173,151,116,222, 35,170,241, 94, 8,247, 29, 10,248,103,135,246, 71,232,114,
-191,105, 79,255,162,207,254,102,236, 95,241, 89,212,117, 21,212,197,226,102, 20,184, 98, 52, 12,103,175,202,119, 64, 6,169,103,
-184,224, 52,141, 40, 41,193, 25, 3,114, 12, 54,132, 85, 39, 12,103, 67,130, 33,133,230,210,149,253, 94, 78,144,209, 53,103, 77,
- 53, 52, 14,219, 22, 16,182, 32, 63,223, 59,172,203,138,148, 51, 46,215,132,113,152,176,241,134,149, 11,182,243,167,248, 95,254,
-215,255, 11,191,247,207,255, 57,254,232, 95,254, 62,238, 63,253, 4,159,127,241,107,196, 16,112, 26, 6, 60, 70,177,170, 17, 25,
-181,110, 38,177,163,142, 35, 46,243, 2,103, 77,123, 63,230,121, 70, 12, 1, 84,196, 42, 85, 16,229,208,215,251,212,217, 1,155,
- 17,127,176, 32,110,245, 97, 73, 50,194,207, 5,216, 86,233, 42,183,144,196,234, 84, 0,235, 61, 10, 0,107, 61, 98, 12,178, 31,
- 38,128,217,182,157,112, 78,165,121,231,199,113,130,181, 35,190,249,230, 91, 32, 23,220,223,159, 53,152,196, 75, 60,106, 88,241,
-238,253,215,136, 81,168,122, 40,192, 55, 95,127,141,251,251,123,228, 82,176, 69, 97,182,223,223,223,225,213,235, 87,120,124,255,
-136, 16, 36, 72,234,124,150,137,135,115, 22, 49, 6,108,155,140,246, 31, 30, 30,192,252,187,248,234,171, 95,131,200,192,143, 30,
-243,188,182,195,166,141,137, 33,133,207, 52, 77, 34, 48, 92, 55,201,235, 54, 6,167,243, 25,243,229, 34,207,178,218,164,232,181,
- 66,204,109, 23,188,165, 0,199, 22,198, 24,201, 84, 87, 97, 91, 81,177,156,104, 94,228, 82,187,206, 87,188,126,117, 47,130,198,
- 44, 79,225,101, 89, 91, 52,236,253,221, 93,179, 86,178,106,143,214, 69, 2,106,182,152,177,174,155, 36,209, 13, 30,204,210,168,
-124,243,245,183,248,244,179,183,136,225, 43, 89, 59,176,193,182, 45,141,211,254,112,255,128,199,248, 36, 97, 86,134,165,177,201,
- 25, 80,117, 58,202, 13, 37,243,197, 64, 39,153, 40,212, 61,248,158,151,246,124,239,149,251,231,200,174,251,110, 16,168,250, 96,
- 49,178, 31, 86,170, 92,105,207,133, 98,185,129,120,170, 40,151,250,103, 71, 93, 15,178,233,132,114,109,183,132,151,187,168,239,
-248,135, 85, 1, 88, 15,129, 10,224,104, 15, 61,221, 49,247,138,248,219,239,169,233,195,135,255,149,186,180, 43, 34, 1,248, 21,
- 58,118,195,253,239, 72, 68, 48,253,136,254, 38,224,162, 89,123,106,240,252, 45,172,163,166,173,145,193,192,132,129, 11,238,189,
- 64,101,146, 34, 90,147,254,166,214, 8, 64, 35,231, 0, 71,192,104, 13, 44,201,200, 29, 96,245,158, 27,172,186,123, 22,101,167,
-168,190,201, 90, 68, 54,184,196,132,144, 11,130, 38, 18,181,130,197, 84,165,166, 96, 98,239,207, 19, 62,123,115,143,207, 30, 38,
-220, 15, 4, 46, 25,215,203,130, 47,191,157,241,247,223,110,248,171,191,255, 6,159,127,125,197,251,149, 16,202, 0,114,119, 32,
-123, 70,230, 9, 69,189,239,243,188, 96, 94, 22,196,180,193,218,130,209, 25,132,101,197,122, 89,132, 56,134,172, 15,185,218, 49,
- 23, 36, 50,200,205,163, 78, 50, 86, 77,185, 93,112, 57,151, 99,200, 24,209,115,252, 46,237,220,190,151,188, 86,185,195, 42, 10,
-216, 8, 13,236, 80,244, 64, 47,205,206, 86, 90,218,222, 46, 92,163, 54,206,226, 67,152, 15,181,201, 74,191,154,217, 57,203,221,
-225, 95, 74, 99, 28, 16,237,215,198,161,232, 67, 7, 66, 82,184, 77,221, 69,247,175,191,174, 45,110,125,231, 47, 22, 35,189,148,
-164, 28, 17,202,253,239,219,107, 6, 94, 26,191,127, 31,197,125,211, 39, 52, 12,238, 62,149,227,238, 97, 66,135,162, 87,169,128,
-138, 11,101, 35, 1, 63,206, 89,176, 97,204,203, 34,145,163, 57,195, 15, 35, 88, 15, 69, 98, 86,200, 12, 55,107, 86, 29,193, 54,
- 80,143, 49,216,182, 13,198, 24, 56, 47, 94,105,231, 61, 46,139,236, 64, 79,231, 19,166,179,135, 51, 30, 33, 49,214,101,195, 23,
-191,248, 37,254,244, 95,254, 41,206, 22,136,203,138,203,227, 19, 2, 10,214, 20,129,194,240,254,132, 68,192, 22, 2,140,119, 32,
- 54,141, 56,199,198, 98,158, 23, 77, 40, 44,202, 53,207, 13,211, 73, 68, 88,215, 32,221,122, 72,154,217, 77, 72,169,128,201, 98,
-219,130, 82, 29, 5, 14,181,198,132,235,178,194, 79, 35,216, 57,141,229, 20, 27,106, 77,122,107,249,222,108, 96, 21,239, 90,173,
-140,206,123,249,153,203, 10,102,177,181,165, 28,165, 59, 29,134,182, 18,100,150, 36,178, 31,252,224, 51, 12,163,199,195,171, 7,
- 92,174,210,125, 58,231,164,251, 28, 79,178,187, 94, 37, 97,207, 90,177,169,189,122,245, 10, 49, 5,196, 44,220,120, 2,112, 58,
- 77, 32,146,213,131, 53, 22,231,187, 51,174,215,185, 9, 9,147,218,186, 10,213,216, 83,134,179, 2,201,202, 58,181,217,214, 21,
-214,116,156,242,220, 89, 37, 11,186,189,178, 90, 95,213,207, 63, 77, 39,161, 90,150,125,178,231,189, 19,222,190,170,229,183,117,
-211,161,157,234,118, 82,106, 83, 82,235, 36, 79, 62, 70, 89, 25, 18,177,118,233, 17, 49,236, 34, 64,239, 7, 13,245, 97,121,221,
-186,215,151,123, 73, 84,242, 49, 36, 88,107,155,189,112, 31,100,117,247, 16,181,248,175,174, 43, 63,176,198,247,251,155,246,200,
-232,231, 77, 6,119, 19, 72,180, 53, 70,123,102, 40, 56,167,234,177, 82, 11,158,209,159, 87, 93, 8, 57, 31, 92, 20,181,251,223,
-169,173,210,132,182,157,122,229,121,223,250,200, 95, 58,208,111, 59, 17,195, 86, 9, 94, 53,117,107,207,116,110,228,176,178,123,
-214, 43,103,184, 79, 73,163,146, 97,114,253,239,162, 49,100,157, 3,178,152, 8, 85,225,222,143,220, 75,227,182,183,152,138,155,
-177, 42, 53, 70,125,110,105,171,245, 97, 85,197, 17,253, 26,132,137,224,137, 49, 26,134, 47, 1,119,222,194, 41,153, 77,246,227,
- 4, 99,228,245,150,146, 96, 74,198, 64,132, 81, 69,103, 41, 73,254,120, 68, 70, 84,159, 35, 49,161,144, 20, 36, 49, 39, 36, 16,
- 34, 49,182,146,187, 93,122, 31,158, 34,135,131,161, 2, 99, 9, 15,119,119,120,251,250,140, 55,103,139,129, 18,194,178,225,221,
-227,130,175, 62, 44,248,252,221,140, 47,190,121,143,199,101, 67, 4, 16, 75, 86, 90, 86, 0, 49,193,120,169, 96,115,142, 40,105,
-197, 56, 16,222,190,185,195,221, 52, 98,189, 44,136,215,208,244, 10, 89, 61,202,172, 11,179,200, 6,217, 15, 72,214,137,231, 54,
-103, 85,111,238, 15,198,234, 75,168, 3, 18,234, 68, 86,165,244,249,245,165, 29,132,186,173,214, 27,105,159, 2, 48,145,160,125,
- 75,217, 73, 41,245, 32, 87,107,162,188,123, 50, 30, 48,109,135, 94, 69, 38,187,176,178,125,248,173, 11,161, 54, 70,219,131, 96,
-168,203, 45, 46,173,179,228, 61,226,172,237,150,247,201,195, 94,168,238,246,176,125, 4, 87,225, 20,232,236,148, 31, 27,173,151,
-155,131,157,110,114, 17, 62, 38,146,251,152, 66,254,163,193, 49, 42,244,171, 89,223,224,227, 62,189,218,121, 42,243,190,199, 91,
- 86,207, 52, 24,112, 78, 19, 0,153,112,185, 94,193, 4,156,166, 73,252,189,205,127, 47, 10,115, 67, 6,172,225, 29, 49, 38,189,
- 94,242,174, 19, 34, 18,155, 28, 19, 98,206, 96,235,224, 6,143,101, 91,129,146, 48,120,131,117,222,224,252,132,152,129,167,167,
- 43,190,252,234,107,132,199, 43,254,244,191,251, 35,240, 22, 16,182, 13, 95,125,251, 13,230, 88,176, 38, 5, 6,145,140,145,253,
- 48, 32,149,220,246,204, 85, 76,150, 84,140,182,110, 27, 66,136,176,214,106,198,188, 8,226,150,121, 17,149,251,182,105,144,139,
-195,186,108, 96,146, 17,110, 42, 69, 45,116,144,177,123, 41,240,163,135,181, 70, 40,110, 58,110, 90,215, 25,195,224, 17, 21,153,
-107,172,136, 95,157,115, 24,167, 17,198,114, 83,216,135, 20, 80, 80, 48,142, 99, 11, 19, 98,195,136, 65,242,222,147, 42,210,115,
- 78,184,187,191,195, 22, 54,148,146,177,109, 81, 38, 26, 91,208,239, 41, 93,241,186, 6,204,203,138,233,116, 2, 91, 9,125, 34,
- 20,133,196,108,120,243,250, 21,190,253,246, 91,237,198, 79,237, 48, 44,250,115, 67, 42, 32, 99,229,208, 52, 70,169,150,132, 82,
- 36, 33, 78,200,118,165,241, 68,184, 93,163,212,178, 15,118,178,163, 92,101,213,238,232,189,135,113, 22, 91, 16,108,109,136, 1,
-164,113,178, 91, 12,130,235, 77, 9, 92, 20,153, 29,196,199, 94,109,149,117,106, 82, 10, 75,252,172,170,232, 91,230, 64,202,186,
- 99, 15, 24,207, 39,188,123,247, 14,167,105,194, 48,122,133, 86,201,132,106, 11, 81, 25, 12, 90,188, 60,155, 49,238, 91,192,250,
- 44, 75,154,214,135, 67, 18,229,203, 61,111, 15,213,170,105,110,149, 78, 71,157,200,174, 38,210,165,220,169,216, 85, 80, 40,207,
- 18,211, 14,173, 61,102, 58, 31,154,133,198,215, 40,141,253, 62, 41,124, 38,189, 40, 2,248, 62,123, 60,102,115,232, 74,158, 61,
-104, 74,111,225, 57,202,252,119, 6,172, 62, 88,233,165, 7,150, 40,232,249, 70, 16,135,158,141, 13, 1,194,244, 81,173,172,123,
-224, 10, 55,160, 78,188,112, 91, 85,213,239,207, 0, 60, 52, 78,181, 36,156,188,131,211,253, 76, 74, 64, 46,172,156,116,128,114,
-212,216,213, 2,239, 68, 85,154,114, 22,128, 11, 51,182, 44, 74,116,241,160, 43, 25, 77,229,136, 89,143,146,182,203, 45, 2,246,
-168,160, 19, 46, 66,173,243,206,226,213,253,132, 79, 94, 77,184, 27, 12,184, 68, 60, 93,174,248,245, 55,239,241,213,183, 79,248,
-250,253, 5, 79,215, 25, 41, 3,131,247,184, 59,157,112,127,119,194,235, 87,247,248,193,103,159,226,213,195, 25,167,209,194, 34,
- 98,114,132, 55, 15, 19,206,147, 71,137, 1, 31,190,121,143, 18,119, 49, 98,175,237,200, 96, 36, 99, 1, 55, 32, 25, 39,177,132,
- 85,129,174,130,193,150,147, 76,251, 14,189,127,143,143, 90,137,189,176,171,127,184,235,162,251, 83,141, 84,153, 93, 1, 48,149,
-106,149,245,231,239, 33, 42,116,176,135,181,216, 93,236,200,196, 58,141,225,103, 12,250, 62,169,172, 28,244, 32,212, 49,227,251,
- 13, 86,189, 33,249, 70,156,246,108, 63, 79,187,100,245,187, 82,225,202, 17, 61,115, 19, 51, 76,207, 98, 99,191, 11, 74,115,251,
-117,189,103,190,253, 4,253,187,182, 7, 44,181,160,214, 7,148,114, 90, 10,237,211,147,210,145, 25,139, 30, 12,235, 38,185,222,
-175, 94,189, 82, 96,147,209,110, 46, 9, 72,197,187,102, 99, 43, 40,237, 64, 37,237, 80, 72, 31,140,133,196,166,180, 41,178,148,
-141, 17, 91,215, 52, 33,134, 21,126,240, 8,185, 96,217,130, 28,208, 57,224, 87, 95,252, 3,126,120, 26,241,211, 31,255, 24, 79,
-239,223, 99, 94, 3, 2, 15,184, 70, 18,108,108,145,132, 53,176, 1,169, 34, 58,165,210,198,242, 79, 79, 87, 20,144, 32, 98, 65,
- 88,183,128,235,178, 52,210, 90, 74, 5, 81,189,209,168,150,188, 34,225, 51,243,182, 97,217, 54,181,225, 73, 22, 3,192,112,222,
-227,195,135, 71,204,203,138, 82,128,243,233,132,101, 94, 69,180,118, 18,248,203, 22,130,122,153, 69,144,204,204, 88,215, 5,231,
-251,179,120,208,163,216,207, 88,213,249,243,188,192,235, 56,121, 24,189, 68, 66,123, 39,116, 60, 99,112,189,138,223, 59,132,136,
-105,244, 56,157, 6, 17,131, 77, 3,230,101,129,115, 34,112, 27,252, 32,107,148,172,217, 22, 70, 40,129, 15, 15, 15, 66,215, 75,
- 25,211,233,140, 53, 6,153,180,120, 39,225, 40,170, 77,178, 70, 82,229, 30,238,238, 0, 0,222,251,110,252,171,204,244,156, 27,
-121,177,145, 30,121, 23,128,177,234, 23, 82, 78, 2, 35,178, 6,134, 89, 15,108, 86, 22, 64, 66, 74, 1,206, 59,105, 16,141,107,
- 94,239,148,146,250,217, 69, 8, 23, 99,105,177,175,155,234, 37,140,181,250, 51,164,224, 40, 84, 48,207, 11,156,247, 88, 23, 41,
-234, 6, 63,202, 24, 63, 37,133,199, 8, 44, 76,154,174, 23, 26,215,210, 65, 97,106,135,221, 5,140, 20,148,239, 12,134,186, 29,
-120, 87,246, 61,221, 76,228,234,193,124, 59,145, 43, 31, 9,121,234,197,180,135,245,183,190,215,221,248,253,165, 78,253,123, 30,
-234,100, 62, 10,195,216, 3, 48,246, 39, 23, 83,147,161,247,250, 62, 97,183,223,206, 34, 91,231, 15,101,187,211, 77, 80, 76, 7,
- 13, 40,251, 46,100, 15,221, 56,238, 65,111,137,119,245,125,108, 0,154, 66,240, 16,139,154,103, 96,100,134, 55, 6, 40,172, 33,
- 6, 18,204, 98, 20,122,234, 88,211,214,212, 11, 19,115, 70, 2, 35, 50, 99, 75, 25, 91,214,189, 75, 29,238,232, 1, 79, 70,217,
-196,245,213,150,157,120, 87, 95,151, 53,192, 52, 58,220,223, 13,120,125, 30,113,114,132,146, 54, 60, 62, 94,240,237,251, 39,188,
-127,188,226,178, 4,160,200,248,238,213,195, 3, 62,121,253, 10,159,188,190,195,253,221, 25, 15,119, 39, 56,206,112,136,120,125,
-242, 56,217,130,187,129,225,168,224,242,254, 17,151, 15,115,211, 32, 84, 16, 74,229, 16,103, 50, 72,198,162,184, 1,137, 77, 27,
- 7,229,230, 2,232, 96, 11, 29, 15,189,183,169, 29,162, 85,113, 11, 35,210, 34, 65,255,189, 61,247, 93, 29,163, 53, 75,184, 75,
- 34,170,224, 32,194,243, 67,189,178,231,219, 88, 94, 43, 64, 38,122, 94, 55, 80,133,159,116, 9,128,109,236,108,244, 79,239, 29,
- 47, 7,110, 2,127,164,139,110, 7,117, 21,215,252, 38,187, 91, 31,250,208, 93,199,125,167,222,239,198, 63,230,125,127,233, 96,
-127, 17,129, 91, 58,219, 77,169,152,140,174, 16, 99,128,120,199,130,214,224,157,210, 74,209, 93,231,112, 58,159,225,156, 1, 74,
-193,224, 61, 12, 27,120,231,132,240,181,109, 88,215, 21,222,249, 54,110, 14, 49,202,123,174,247,153,117,182, 81,224, 10, 8,126,
-240, 45, 32,229,254,238, 14,219,186,224,116,154,176,134,132,167,121, 70, 2, 48,156, 78, 72,165,224,255,253,139,255,136,223,253,
-244, 7,248,193,171, 7, 60, 93,159,240,180, 5,193, 51,111, 98,143,219,114,134,115, 3, 54,245,174,175, 33, 54,216, 81,214, 63,
- 75,144,131, 43,196,132, 24,146,242,200,119, 13, 15,147,172, 29, 50, 8, 91,202,120,156, 23, 57,252, 91,162, 48,171,199, 95,216,
- 14, 18, 98,147, 14,153,216,117, 44,107,221,222,237, 18, 23, 65,194,106,186,162, 31, 7, 25, 23, 67,146,227,128,130, 97, 24, 26,
- 33,142, 85,124,119, 58, 79, 96,102,124,248,240, 1, 70, 5,127,117, 77, 20,182, 5,222, 51,222,188,190, 71,138, 81,118,222, 73,
-156, 41, 41, 38, 76,227, 4,102, 96,158,175,184,187,187,199,178, 44,210, 49, 27,139,235,188,200,148,196,201,148,132,212, 18, 88,
-227, 67,139,166,176,161,100,153, 18,108, 91, 99,174,115, 29,209,163,210, 21,185,101,130, 52,200,142, 62,231,152, 89,128, 90,222,
- 1,144,131, 87,114,197, 51,206,231, 59, 13,217, 1,144,162,238,230,141,106, 15, 70,164,146,181, 48,204, 8, 73, 32, 67,213, 82,
- 89,157, 91, 49, 70,253,249,212,148, 89,149,195,191,133,128,117, 13, 88, 55, 1, 4, 53, 32,150, 90,200, 26,223,164, 30,212,229,
- 56, 73,107,207, 24,238, 18,195, 10,186, 21,100, 57,228,189,239, 58,180, 93,153,202, 68, 74, 57,127,158,171,114,123,223,126,108,
- 10,183, 91,233,142, 54,222, 29, 7, 45, 83,211,221,167, 94,242,111,223,169, 55,254,186,249, 78, 15, 58,223,120,239,234, 27, 73,
- 93, 54, 58,183, 32,169,190,123, 54,237,123,203, 11,202, 47,190,216,134,128,173, 94,219, 3, 36,228,166,202,225,170, 88,222,211,
-218,168,223,193,162,192,162,192, 27,192, 19,193, 81,129,183,182, 29, 48,138,225,134, 33,241,156, 51, 21,185,232, 85,196, 23,115,
- 65, 34,194, 70,132, 37,102, 36, 13,220, 0, 75, 72, 3,171,156,126, 7,243,239,227,153, 82,217,192, 42,168,179, 6,152, 6,135,
-187,147,199,171,179,195,228, 24, 57,108,120,122,154,241,116, 93,176, 6,185, 64,173,117, 2,170,241, 14,167,193, 98, 48,128,161,
- 8, 46, 17,166, 4,140, 20,113,231, 9,119, 3, 99,114, 70,195, 51,190, 65,152, 53,195,157,143,123, 25,144, 30,234,108,145,173,
- 71,130,224, 99,143,193, 36,186,147,212,206, 22,207,122,206, 42, 38,229,131,197,108,215, 85, 40,242,181, 19, 50,182,234,244,153,
-200,171,194, 46,242,238, 9,237,144,167,181,227,127,222,225,222, 80,226, 42, 87,155,202,255, 79,217,155,245, 72,150,101, 87,122,
-235,204,119, 50, 51,247,136,200,204,202,202,172,145, 53,144, 34, 27,205,174,150,186,159, 4,189, 72,128,160, 7,253, 38,254,176,
- 6, 4,234, 69, 16, 32,136, 84,163,155, 68,149, 56, 38,139, 85, 57,196,224,238,102,118,167, 51,233, 97,239,123,238, 53,115,243,
-204, 18,129,200,172, 42, 70,120,152,155, 95, 59,103, 15,107,125,235, 6,107, 30, 5,178, 33,138, 55,125,131,174,229,130, 87,137,
-151, 71,227, 41, 93,170,243,197,183, 40,212,151, 67, 34,151,124,131, 63, 28,148,243,146,136,238,165,241,187,228, 48,149, 11, 21,
- 47, 54,147,174,165,107,150, 27, 72, 85,198, 69,112,196, 50,141,161,253,175, 99,141, 8,117,114,130, 59, 64,165, 20,144, 19,198,
-113,160,255,204, 73, 89, 2,130,172,100, 44,166,218,239,247,152, 35,121,197, 73,144, 22,161,149,198, 56,141,144, 90,241, 69,176,
-248,219, 61,230, 16, 96,157,131,212, 26, 62, 9, 60,156, 61,254,241,239,254, 17,159,125,250, 49,218, 93,133,121,238,137,248, 24,
- 51, 2, 4,116, 85,145, 8,207,123, 18, 95,177,255,152, 2,138, 40, 87,124, 24,231,245,226,230,152,229, 16,232, 66,241, 62,112,
- 18,161,128,143, 25,199,126,194, 83, 63, 17,250, 53, 45, 1, 44,178,164,152, 77,211,140,188, 4,130,112, 72,201,130,196,157,253,
-140,186,166,140,243,148, 34,154,166,130, 49, 10,117,229, 80, 85,142,237,132,180, 11, 29,134,177,252,236, 98,138,148, 4,199, 97,
- 41, 25, 9, 33,120,140,195,200,147, 16, 98,132, 11, 8, 88,107, 32, 4, 37,184, 53, 77, 13,109, 12, 92,229,214,164,179,228,113,
-216,239, 49,244, 61, 92,181,218,217,230,217,163,110, 26,188,123,255, 30,117, 83, 51,194, 55, 23,114,230,114,113, 73, 41, 8,214,
-226, 12, 7,229, 76,188,187, 54,156, 44,185,156, 5,226,170, 87,203, 5,135,171,141, 97,193,156,135, 49,154, 1, 51, 17, 2, 10,
- 50, 3, 93, 75,200, 87,185, 36,217, 33,163,109, 91, 60, 29,143,168,234,138, 70,229, 90, 65,105,210, 55,164,148,104, 26,193,221,
-249,114, 62, 40,165,203,133,156,248, 25,142,137,198,217,137,139, 90,181,140,176,197, 85, 33,140, 75,210,227,114, 87,137, 13,111,
-129,206, 17,185, 49,229, 92,222, 65,212,165,200,178,216,186, 44,170,151,144,152, 21, 73,189,109,134,151,233,218, 50, 98, 95,138,
-161, 11, 50,228, 85, 55, 95,254,220,194,153, 71,222,140,223, 11,169,235, 15,163,111,137,140, 77,199, 34,159,141, 4,190, 77,184,
-179,253, 26,200,219, 17, 98,222,140,130,197,133,114,157, 69,216,151,190,222,114,160, 46,121,224,178,136,253,150, 24, 65, 33,174,
- 70,151,114,129,136, 60,207,115,151, 82,150,177,183,145, 2, 90, 0, 74, 36, 24,173, 75, 0,135, 96, 49,157,214,170,176,144,151,
-203, 73, 74,133, 8,129, 8,137, 33, 3, 99,202,136,160, 48, 22,185, 36,187, 45, 23, 58,143,114,114, 94, 51,198,151,127,210,135,
- 53,163,178, 10, 77,165,113,104, 45,246,141, 65,109, 21,210, 28, 48,142, 51, 38, 31,145,147, 40, 59, 45,165, 24,245, 26, 39, 68,
- 63, 64,166, 9, 50,121, 84, 42,225,174, 53,232,156, 68,235, 52,172,148,120,255,238, 61,222,190,125, 0,178, 42,105, 31, 82,174,
- 34,195, 44, 36,162, 82,240, 82, 83,152,139, 84,148,167,158,211,218,173,103, 20,157,194,234, 45,191,230,254, 95, 91, 29,150,159,
-215,166, 56,219, 20, 86,249, 89, 39,188,170,228, 87,178,215, 58,190, 82, 91,146, 28,127, 16, 87,216,209,101,236,235, 54,201, 45,
- 97,209, 87,200, 77,133,156,202,179, 76, 16,150,181, 42,222, 10,228,144,241,108, 44,126, 19, 42,147,243,133, 77,238,165,223, 87,
- 58, 1, 92, 18,229,110,250,233,255,192,162,251,122, 44, 47,165,188, 88, 77,229,226, 25,103, 15, 58,139, 62, 37, 71,248,208,113,
-164,202,143, 78, 73,234,212, 82,166,131, 52,179, 42, 57,204, 51,180, 86,200, 49, 65,107, 13, 41, 4,198,121,132, 86, 26,138, 15,
-220,113,154,161,181,193, 52,205, 16, 82,161,170,107, 72,109,202,207,117,177, 0,105, 77, 9,133, 89, 8,204,243,140,110,215,145,
-205,202, 19,218,180,169, 26, 72,161, 73, 68,164, 12,166, 12,124,241,251,223,195, 88,139, 79, 62,122, 13,129, 4, 31, 3, 32, 21,
-164, 50,172,134,151, 28,154, 66, 29,149,103,177, 87, 96,156,108, 78,177,228, 32, 40, 73, 34,172,152, 8,148, 19, 98, 70, 76, 2,
- 31,158,122, 28, 7,143,193, 83,162, 28, 61,148, 10, 2, 52,222, 39, 5,120,222,136,173,114,233, 24,181, 49,112,206, 48,139,221,
- 48,103,125, 66, 85, 59,180, 77, 13, 32, 65, 27,197,208, 16, 9,107, 12,140,117,120,124, 60, 98,183,219, 51, 1,206, 67, 74,160,
-107, 91,162,173, 5, 10, 78,169,170,138, 46,102,239, 49,244, 35,156,115,204,125, 95,167,105,119,247, 7, 72,153,203, 46, 92, 73,
-133,190,239,185, 8, 16,197,178,150, 51, 9,231,170,218, 65,105, 18, 37,230, 12,104,165,153, 77, 78, 8,217, 97, 26,209,180, 13,
- 34,191,174,152, 40,225, 78, 72,193,235,133,188, 10, 99,151, 53,150, 92,247,200,214, 89, 28,246, 59,204,211,132,182,109,169, 16,
-138, 1, 57, 69, 76,211,184,122,184, 69, 70,215,181,112,174,194,233,116, 36, 17, 93, 83,193, 58,139,166,169,153, 96, 71,223,251,
- 50, 22,215,252,188,165, 68,100,194, 84,160, 36,107, 74, 94, 6,161,177,149,166,117,209,210,101,175,185,230,184,185,186, 42,145,
-224, 0, 5,191, 92,140,218,193, 97, 43, 98, 51,253,187, 20,131, 11,185,134, 92,101,228,111,213,195,220,162, 96, 94,135,166,221,
-130, 79, 45,218, 24,228,188, 10,229, 18,210, 31,220, 37, 20,158,250,166, 83,202,249,101,241,206, 69, 23,191, 80,145,178, 90, 21,
-232, 5,161,168, 54,227,103,238, 46, 22,219, 26, 95,234,207,246,137, 41,111,224, 26, 98,213, 41,149, 68, 45,113, 17,216,113,169,
-107, 72,197, 83, 47,121,153,184, 0,253,149,148, 48,188, 99,175,140, 89,109, 73, 88, 18,215,104,244, 20, 89,143, 64,240,125, 26,
-202,251, 36,112,142, 25, 83, 76,236,245, 22, 69,160, 37, 23, 53,228,102, 68,180, 48,226,203,254,151,117, 0, 86, 75,236, 26,139,
- 67, 99,176,175, 53,106,171, 32, 50,224,185,235, 89,242,120,165,148, 48,138,242,212,173,204,112, 50,161, 50, 2,187,202,224,117,
- 87,225,174, 54, 56, 52, 14,181, 53, 56, 30,123,252,243, 23, 95, 98, 26, 19,219,176,168,203,213, 66, 97,233,183, 3, 4,130,148,
- 8,202, 34, 73,131, 40, 8,233, 25, 83, 68,202,116, 96, 96,147,199, 76,239, 75, 42,138,234,140,203,117,203,234,106,203,183,193,
- 70,155,226,236, 2,172,201,112,155, 5,174,177, 20, 4,151,122,141,124, 53,126,191, 13,159,145, 34, 95,252,251, 50,171,125,237,
-212, 23, 17,167,146,185,224,149,203,229,126, 37, 4,188,222,163,149,149, 2,195, 84,114,202,223, 53,234, 42,129, 66,229, 25,222,
- 22, 42, 87,227,247,239,178,184, 93, 84,244,219, 75,125,165,240,147,118, 99,243,215, 75,158, 62, 44,252, 8,181,208, 27,179, 4,
-199, 16,144, 80,137,121,229, 57,163, 92, 10,222,207,112,188,187, 85, 16,176, 70,193,106, 3,169, 21,193,102,248, 48, 84,218, 96,
-158, 3, 89,218, 88, 25,175, 22,144,200, 18,223, 89,146,182, 34, 94,189,190, 47,233, 89,211, 56,193,106,131,202, 85,212,237,230,
-136, 8,202, 97, 31,147,194, 95,253,250, 31, 48,132,136,239,125,242, 9,106,231, 40,108,166, 31,144, 57,106,120,185,124,230,105,
-166, 73, 15,199,153,250,217,211,184,127,242, 36,200, 10, 20,241,153, 32, 48,135,140,144,128,167,126, 66, 63, 69,196,172, 48, 5,
-226, 75, 8, 8,164,200,248,220, 20,144,114,196,174,219,209,196, 33, 69,134,125,113,214,131, 82,229,189, 34,129, 89, 96,213, 50,
-169,178,115,166,238, 58,134, 64,113,176, 51,225, 86,235,134, 70,237, 77, 83,149, 75, 38,132,136,166,105,137,219,158,104, 10,144,
- 82,194,110,215, 18, 89, 45,210,255, 70, 42,242, 26, 15, 15, 31,144, 18, 5,186,104,173, 73,253,157, 41,154,121, 24,122, 56,103,
-137, 55, 48,205,216,117, 29, 98,138,208, 90,161, 63,157,177,219,237,145,216,250, 69,205, 26,141,194,169, 81,162,245,128, 96, 20,
-108,206, 20,229,154,115,130,143,137, 38, 78,139, 40,122, 35,250, 93, 84,230, 90, 75,220,223,221, 97,154,102,236,246, 29,137, 37,
- 5,120,103, 14,102,201, 7, 12,227,132,174,219,163,235,118,220, 52, 37,190,188, 53,199,171,106,134, 79,145,120, 77,107, 67, 98,
-111,108,195,114,104,106,162,148,226, 73,129, 33,119,147,214,208, 90,150,181, 81, 96,189,195,114,198, 8, 62,179,159, 89, 67,147,
-216,120,199, 83, 57,179,190,219,242,189, 74,105, 69, 94, 57,240,215, 35,244, 91,235,188,103,255,219,149,150,166,124,141, 13, 33,
-117,189,212,243,255,143, 75,189,100,160,203, 77,167,126,251, 82, 95,254, 34,153,232,135,189,134, 99,174, 3, 10,201,139,246,226,
-151, 92, 54,176,114,221,121,243,221,243,124, 87,191,100, 78,111,139, 7, 41,202, 14, 30,101, 23, 72,163,213,148, 54,120, 81,254,
-149, 18, 61,140,146,173,120, 82,105, 88,109,225,172,131, 22,146,236, 27,124,137,198, 76,221,119,228,202, 63,196,192, 21,160, 6,
-132, 70,130,196, 28,129, 33, 37,248,188,170, 23,165, 16,208, 60,122,161,127,200,210,165,199, 13, 24, 4,200, 75, 64, 41,156, 85,
-104,173,194,161, 54,232,156,130, 83, 18, 90, 82, 49,177,208,142,100, 94,178,188, 41,215,189, 50, 18,141, 1, 14,117,133, 87,187,
- 14, 31,237, 26,124,114,183, 67, 91, 87,152,231, 25,255,244,197,239,241,229, 87, 15,240, 81, 1,153, 44, 54, 66,241,212,133, 15,
-252, 0,129,168, 20,162, 52,200,124,169,231, 34,136,225,157,122,140, 69, 36, 39,165, 66, 66, 34, 49,157,192, 70, 23,177,201,183,
-221, 4,220,139,237,186, 73, 92,174,115,150, 93,148,100,177, 32,242, 18,250,144, 47, 24,240,203, 72,249, 98,252, 46,183, 2, 73,
-121, 81,249, 74,177, 6, 3,229,141, 0, 51,231, 75, 63,189, 96, 22,186,100,154, 28,164,216,248,231,175,212,253,219, 14,122,179,
- 74,219,238,199,183,175,225, 54, 38,150, 15,146, 44, 94,180,168,221,154,122,109, 87, 33, 23, 56,201, 77,250,215,229,122,106,205,
-170,222, 10,244,150, 75, 61,139,205, 74,160,208, 44,215,175,145, 56,226, 5, 0, 66,240,171, 95, 54, 6,236,219,174, 76,201,180,
-214, 24,198, 17,144, 2,211, 60, 65, 73,133,211,233, 12,163, 13,114, 76, 72, 62,150, 49,237,146,129,110, 43,199,192, 19,194, 36,
- 87,206, 34, 38,224,120, 58, 35,114,226,151,144,132, 35, 61,245, 39, 12,211, 0, 3,133,156, 13, 30, 67,196,239,222, 63,225,139,
- 47,190,132,146, 26,245,126,135,144, 83, 25,191,135, 20,185,243,142,165, 83,143, 33, 2, 66, 81, 49,157,232,179, 28, 82,198,232,
- 19, 70, 31,241,112,234, 17, 32,209,251,128, 40, 36, 66,196, 70,103,177, 21,115, 38,152,138,162,144,181, 49,252,203,150,226,215,
- 88, 77,250, 1,182,178, 57,103,105,109,193,249, 95,222,207, 48, 70,211,200,124,211,245,147, 62,193, 34, 49,147, 62, 38,192,104,
-141, 97, 24, 48, 14, 61,170,170, 34, 49, 30,119,183,198, 24, 8, 41, 17,194,204, 9,105,245, 26, 25, 27,233,191, 63, 60, 29, 17,
- 83, 66,215,181, 16, 12,142, 89, 38, 36,109,219,210,115,176,232, 28, 98, 66,140, 25,206, 85,124,190, 17,203,160,170, 42,204,211,
-132,110,215,150,116,194, 16, 2,180, 86,112,117,131,113,156, 86,174, 67,230, 73,217,226,247, 6,177,232,199,137,172,101, 77, 93,
- 65,107,137,221,190,197, 56,244,212,177,103,148,236,128,148, 50,166, 97, 6, 98,198,221,221, 1,206, 82, 17,210,117, 29,249,214,
- 57, 56,200,213, 22,149,171, 8,224, 99, 45, 92, 85, 81, 55,206,185, 22, 25,180,143, 95,200,134,139,188, 43,250, 25, 70, 25, 42,
- 66,133,100,110,254,138,162, 93,124,224,165, 65, 72,151, 11, 53,154,146,138,103, 9,109, 43, 2,123, 61,251,178, 88,163,125,178,
- 88, 34, 86,215,140,215,197,189, 67,150, 65,117, 49, 57, 94,198,235,223,117, 46,108, 27, 87, 85, 25,247, 23,165, 11,248, 3,238,
-115, 81,246, 44,106,163, 20,150, 55, 23,252,101,148,112,113,166,175,152,213,213, 19, 44, 75, 59,183, 12, 76,228,154,248,193,226,
-157,151,217, 56,226, 42, 97,103,201, 99,191,232,208,203, 56,246,226, 15,150,241,139,209,244,112, 28,238,238,241,234,245, 71,184,
-219, 29,176,171, 27,242, 41,198, 88,194, 20, 22,191,186, 79,153, 19,205,200, 47, 40,149,162,189, 77, 2,121, 88, 83, 66, 20,128,
-144,186, 40,235,151,213,194, 22,179,179,248, 19, 87,254, 79,134, 18, 20,176, 82, 59,141,214,105,116,149, 68,231,168, 83, 55,218,
-172,191, 63, 3, 74, 40, 6,228, 72, 84, 70,163,177, 10,251,166,198,171, 67,135,251,125,139,215,187, 6,187,198, 65, 72,141, 47,
-126,251, 37,126,243,247, 95,160,159, 51, 50, 52, 40, 44,150,188,186, 52, 98,165, 3, 61, 74,133,164, 12,146,178,200, 82,151,203,
-154,198,123,169,188,103, 75, 33, 87, 50,191, 11, 44,114,107, 1, 91, 61,210, 37,156,135,127,222, 11, 13,169, 48, 14,182, 29,100,
-209,163, 44, 23, 80,122, 38, 26,187,181, 83,151,155,157,247, 5,177, 17, 40, 43,148, 82, 92,148,240,160, 37,210,117, 83,132, 46,
-132,167,171,238, 55,165,116,161,152, 95,104, 90,242, 5, 62,194,119, 17,226, 50, 86,113, 77, 78,249, 91, 59,242, 91,193, 73,223,
-138,134, 45, 66,214,213,162,150, 83, 42,174, 2,177,245,220,243,216, 83, 44,136,204, 50, 73, 88,121,216,105,233, 68, 5, 39,160,
-165,136,186,170, 54, 63, 7,134,182, 44, 17,197,138,172, 75,211, 98,175, 90, 28, 1,156,200,101,173,225,189, 49, 97,139,141,177,
- 80,146,138, 6,138,203,164,241,170,171, 29,164,162,209,254,200,144, 25,163, 12,127,127,228, 50, 25, 67,194,111,191,252, 6, 95,
-191,127, 79,246,180,156,201,123,157, 51, 60, 63,183,212,205,210, 69, 55,135,132, 24,129, 57, 68,140, 83,192,105,152,240,240,116,
-198,105, 10, 72, 82,195,214, 13,166, 20, 49,251, 84,214,103,244, 51,143, 37,165, 79,112,138,162, 18,180, 3, 29,199, 17, 85,237,
-160, 13,121,227, 23, 69,246, 18,210, 82, 85,174, 48,221,105,172, 46, 49,141, 3,234,170, 70, 12, 9,193,135,178,243, 30,134,158,
- 33, 54, 36, 50, 28,134,145,227,150, 13,166,105,162, 12,116,182,221,213,117,197,182, 85, 26,179,211, 94, 63,227,241,241, 4, 1,
-129,186,233, 32,164,198,249,212, 35,197,128,195,221,190,116,218, 66,208,251, 93,213, 53,198, 97,128, 81,154,193,142,146,129, 45,
-243,186,178,148, 18, 57,145, 46,165,174,171,178,254,162,221,124, 75, 81,211,140,107,189, 40,114,229,229,121, 61,142, 51,164, 2,
-218,174,161,117, 68, 85, 33, 69,176, 87,158,121, 9, 73, 32,249, 4, 63,123,156, 78, 39,156, 78, 39, 28,143, 39,122, 54,148, 70,
-202, 18, 31, 62,188,163, 84,183, 72,127,167,177, 6,231,190, 71,202,137,158, 75, 94,113, 6, 62,191, 51,114, 9,225,145, 57,211,
-180, 38,131, 34, 98, 57,141, 47,229, 84,246,214,235,246, 79, 92, 76, 37, 23, 96,204, 66,146, 92, 57, 28, 9,215,145,168, 91, 49,
- 44,174,224, 93, 37, 5, 15,249, 98,226,184,109, 92,174,207,141,107, 69,252,246, 60, 88,192, 87, 26,101,232, 42,110,192,103,150,
-151,161,174,188,223,137, 68, 34, 5, 32,178, 17,229,108, 72,112, 34,174, 24, 77,185,233, 68, 69,206, 27, 94,123, 44,111, 26,141,
- 10,175,201,111,185,236, 90, 22,149,125,225,223,230,117,255, 46,151,216, 22,129, 50,117, 88, 20,170,197,131,156,105,231, 68, 94,
-195,197, 82,172,209,181, 7,220,239,239,113,191,191, 67,211,118,244,117, 67,128,159,122, 66, 93,198, 4, 21, 19,114,204,136,136,
-164,104, 7, 71,253, 9, 89,118,129, 89, 0, 30, 9, 62, 39,100,169, 11, 20,101,233, 72, 83, 94,216, 99,114,181,182,101,148,196,
- 31,178,180,173,177,123, 42, 75, 24, 33,161, 51,237,247, 37, 50,148,204,176,198, 32, 70,210, 36,100,153, 25, 81,155, 80, 89,137,
-198, 57,180,174,197,126, 95, 99,223, 25,220, 53, 2, 74, 25,252,195, 87, 61,126,253, 15, 95,225,233,228, 1,101,139,157, 14, 9,
- 80,138,118,200, 73, 72,138,129,213, 22, 66, 57, 14,208, 73,208,165,168, 90,184,254,138,137,115, 96, 76, 46,231, 44,151,240,149,
-133,229, 79, 69,195, 66,118,200, 34,110, 84,161, 91,245,255,178, 66, 73,235,120,107,147, 88,135,173, 0,237, 10,209, 40,213,198,
-231,158,101,169, 60, 87,236, 98,134,144,137,158,185,188,142,124,158,107,226,151, 15, 84, 90, 6, 41,165,170,190, 84,183,174,148,
-181,188,176,207,151,108,229,165, 86, 92,198,239,226,182, 63,253,242, 66,222,216,229,228,183,119,225, 47,209,227,110,142,223,183,
- 89,233,229,243,199,186,151, 76,137,135, 5,170,129,117,210, 32, 32, 33,216, 90, 89, 58,173,226,114,208, 12, 69,162,207,168,171,
- 42,120, 31, 33,242,140,182, 85, 8,145,190, 90,101, 12,132,146, 24,189,199, 20, 60,116,237,160,173, 70,109, 15, 56,227, 1, 49,
-120, 68,254, 18, 92, 0, 0, 32, 0, 73, 68, 65, 84, 66, 48, 51,134, 53,139, 12,104, 81,208,179,198,210, 84, 73,128, 18, 13, 53,
- 11,187,194, 28, 33, 50, 80,155, 10, 41, 37,188,249,232, 13,222,190,123, 7,127,156, 16,165,193,172, 45,254,229,193,227,183,111,
-127,135,157, 85,104,154, 10, 90,128,226,139, 53,141,250,125,140,240, 33,225,228, 51,250,113,130, 20, 10, 77,211,225, 20,103,228,
-170,166, 14,207, 26,156,134, 17,211,236,161,141, 70, 76, 64,229, 28,121,185, 19, 93,110, 33, 4, 42,244, 35,125,118,149,162,174,
-209,213,182,120,248, 21,243,216,133, 32, 18,223, 60,122, 82,182, 59,135,190, 63, 67, 9, 13, 31, 3,250,126,196, 60,123,104,109,
- 48, 78, 3, 42, 87,161,237,106,244,125, 79, 90,153,170, 33, 97,170, 15, 80, 82, 99,232,143, 72, 29,117,224,203,132,201,251, 64,
- 33, 82, 49, 66, 10,178, 27,126,249,245, 59, 64, 74, 28, 79, 39,104, 99,208,237, 90,156,207, 71,244,195, 72, 19,145,202,225,124,
- 58,113,183,222, 1, 73,176, 47,190,167,244, 70,165, 80, 85, 6, 62, 16,124,168, 63,159,113,183,223, 99, 24, 38,212, 85,133,166,
-105,248, 9,154, 48,246, 3,118,109,135, 56, 79,240,222, 83,138,200, 50,161, 74,121, 21,211,242,243,252,248,212,195,186, 26,126,
-158,104,186,208,214,168,155, 6, 31, 62, 60, 32,248,196, 77, 20,173, 62, 41, 63, 30,200, 62, 34, 99,194,211,233, 27,188,122,245,
- 10,109,119,192,211,211, 83, 25,177,183, 66, 65, 65, 66, 27, 5,169,232, 94,170, 42, 71, 69,156,143, 8, 37, 26,149,206,186, 24,
- 51,226,228, 9,199,237, 88, 92, 56,164,162,247,202, 12,198,194,133,170,157, 66,175,214,169,223,102,114,119,115,124,206,217, 3,
- 25,208, 82,179,195,139, 68,223, 5,164,181, 85,192,167, 77,193,112, 35, 59, 98,105,102, 22,152,205, 34,168,219,158, 9,122, 81,
-236, 45,249,198,207, 15, 18,113, 33,102, 91,143, 64,249,140,216, 86,252,194,155,142,120,213, 5,230, 2, 34,200, 92,241, 62, 75,
-102,147, 43,133,108, 57,252, 47,196, 2, 41, 95,238, 20,202,168, 99,147, 43,203,163, 94,177, 1, 8, 16,215,217, 67, 73,194, 83,
-230,156,105,244,211,237,240,234,238, 21,238, 15,175,209,214, 29,140, 34, 58,214,196,140,244, 8,129,164, 13,162,210, 16, 82, 35,
- 75, 79,224, 24, 30, 19,105,165,129,196, 44,228, 44,200,187, 13,129,196, 9, 58, 98,243, 61,164,146, 21,176, 38, 46,229,205, 29,
- 37, 56,180, 64,228, 85, 81,175,148,128, 89,114,213,181,128,179, 10, 86, 47,126,122,135,160, 3, 82, 92,166, 29, 64,237, 20,106,
-103,113,104, 26,220,117, 21,186, 90,160,173, 37,190,122,154,240,215,191,249, 7,252,211,215, 15, 0, 28, 20, 12, 63,148,236, 25,
-102,232, 72, 6,144,132, 66, 18, 26, 89, 82, 72, 70, 81,130,230, 76,162, 27,102,220, 47,237,116, 73, 89,203, 52, 46, 79, 27,144,
-201,114,185, 62,183, 68, 45, 74,207,197, 20,191,226, 96,243,162,131,120, 14, 92,228, 46, 50,223, 12, 11, 16,183, 12,239, 92, 20,
- 94, 60, 39, 23,228,227,124,165,200, 95, 45, 91,105, 83,223, 62,191,100,243,205, 48,151,242, 33,204,249,217,222,253, 37,133,186,
-184,170,192,183,106,215, 63,180,219,191, 41, 72,205,219, 85, 25,158, 57, 1,138, 95, 65, 94,254,153,109, 32,211, 51,239,221, 38,
- 91, 90, 73, 34,176, 73,100,116, 77, 67, 83, 28,145,177,107, 26, 40, 33, 49, 7,143,148, 51,180, 54, 16, 16,232,118, 59,136,144,
- 16,166, 10,201, 75, 74, 63, 75, 25, 70, 41,140,209, 67, 43, 26, 57,143,243, 12, 87,213,152, 38, 18,225, 85, 85,117, 1, 51,105,
-234, 26,231,211, 80,128, 56,174,114,136,137, 82,191,162,212, 24,115,134,171,118,152, 92,141,119, 79, 79, 16, 41, 98,158,158, 80,
- 87,150, 97, 52,158,186, 65, 73,185,221, 57, 3, 31,169, 26, 15,167, 1,187,195, 1,167,254, 4,203, 86,167,143,222,124,132,199,
-199, 71, 8, 65,161, 77,149,179, 24,199,177, 76,107,172, 49,144, 25,136,222, 67, 8,130, 60, 77,211, 72,138,240, 24,160,164,129,
-207, 17, 90, 74,184,174,197,251,247, 31,144, 17,209,117, 29,218,166, 69,223,159, 49, 14, 51,159, 79, 9,211, 72,177,169,222, 7,
-218,201, 75, 26,185,183, 59, 11, 35, 21,225,164, 51,193,125,168, 8,144, 56, 30, 79,184,187,187,131, 86, 10,206,209, 36,192, 24,
-139, 24, 3,222,188,190,195,249,220, 99,156, 6,196,254,140,221,110,135,195,221, 1,179,247,168,172, 65, 76, 17, 77,219,224,241,
-225, 17,167,211, 9,187,221, 30,199,167, 39,236,186, 22, 79,167, 19, 98,152, 81, 85, 22, 38,145,142,103, 26, 38,138, 58,157, 41,
-219, 61, 42,129,182,171,161,148,196,135,135, 71, 52,181,195,235, 55,247,120,122,124, 66, 96,235, 25,216, 37,163, 89,152, 38, 57,
-105, 76,164,132,111,190,122, 7, 87, 17, 16,231,124,238,225, 92,133,187,187,123,244,253,128,105, 28, 33, 18,107,189, 4, 21, 8,
- 41,102, 42, 72,132,192,239,166, 47,241,217,103,159,225,241,241, 9, 66,104, 10,110, 25, 70,238,206, 37, 19,236, 42, 8, 72,204,
- 35,145, 2, 67,138,101, 90,155, 98, 4, 88,120, 25,125, 64, 72,129,131,118,214,194, 93,109,181, 62,130, 18,208, 66, 76,197,135,
-127,113,134, 45,154, 29, 78,193,139,156,234,185, 6,198,208,189, 33,243,186, 2, 72,200,197, 77,179,101,101, 72, 33,159,157, 31,
-219,253,123,105,162, 10,243, 61, 93,172,187,245, 82,171, 3,107,146,204, 31,242,127,139, 71, 56,149, 46,235,114,151,120,121,248,
-164,165, 31,227, 23,159,110,140, 24,183,140,240,203,113,237,242,123, 35, 82, 17,208, 45,164,221,141,255,134, 42,254,156,150, 92,
- 17, 62,160, 36,139, 83, 44, 32, 36,148,116,232,186, 22,159,126,242, 6,111,238,239,208,214, 13,180, 52, 44, 62, 35, 79, 99,200,
-177, 16,138,178, 16,196, 5,230,181,138,135, 32, 90, 92,230,157, 43, 36, 87,114, 18, 57, 83,156,100,222,192, 0,176, 73,221, 33,
-242, 90,102,176, 71, 42,128,135,188, 89,218, 82, 37,151,120, 7,159,161, 53, 96,173,132,213, 18, 86, 43,180,149, 35,254,244, 28,
- 48, 7,129,152, 4,180,208, 48,202,160,173, 12,106, 39,112,215, 25,188,234, 52,106,165,240, 56, 78,248,155,127,250, 29,254,250,
-239,254, 9, 71, 40, 84,210, 66,102, 5,176,219, 97,249, 22, 18, 36,162, 32,104, 78,148, 2, 65, 10, 68, 41,217,251,184,170,197,
-133,204, 64,204, 60,198,221,178,203,169, 3, 84, 5,170,194, 36, 56,206, 64, 7,103,119, 39,134, 12, 9,200,194, 36, 95,187,213,
-244, 7,171,187,159, 67, 92,182,224, 33,108, 52, 30, 40, 58,138,114,113,149, 76,119,121,177,255, 23, 69,101, 47, 46,120,240, 91,
-245,235,181,146,126,153, 54,164, 18, 58,115,107,199,118, 27, 32,113,253,253,172,163,125, 60, 91, 99,125, 87,167, 46,110, 8,123,
-150,162, 33, 67,220,102, 53,240, 39,243, 15, 81,216, 11, 78,202, 91,166, 9,137, 97, 38,164,194, 38, 12,113,187,111, 72, 64, 23,
-124,201,169,182,138, 60,208, 41,101, 36,239,161,148,130, 83, 21, 82,140,152,199, 9,109, 83, 35, 14, 25,253,241,132,174,221, 33,
- 71,178,196, 85, 85,133,105,154,138,170,251,226,125,202, 11,226,147, 4, 84,117, 83,177,199,158,148,173,170,170, 49, 75,139, 73,
-104, 40,109,144,133, 66, 98, 17, 93, 72,134,168,114, 18, 8, 41,194, 85, 21,166, 24, 81, 53, 13,193, 59,164,194,253,225, 30, 49,
- 68,244,231,115, 57,160,207,231, 19,239,170, 41, 52, 70,179, 35,166,114, 14, 97,158,145, 66,128,177, 26, 66,211,161,110,117,131,
- 20, 19,186,182,129,200, 25,253,233,132, 20, 2, 38,239, 81, 89, 74, 88,203, 49, 97,191,235, 96, 93,197,176,154, 9, 49,100,124,
-120,122, 64,211, 82,170, 90,211, 52,116,241,131,242,200, 67,240, 23, 63,167,148, 18, 30, 30, 31,208,181, 59,140, 19, 21, 28,174,
-114,120,122,124,192,253,221, 29,154,218, 33,196,136,119,239, 31, 49,142, 35, 50, 18,246,187, 22, 33, 4, 56,199, 90, 6,235,240,
-254,195, 3, 62,251,172,227, 44,246,204, 59,251, 25,167,115, 15, 8,202,146, 80,175,239,145, 56,173,109,158, 61,219, 62, 21,234,
-214, 66,233, 61,198,113,128,214, 13,108,229,144,167, 25,218,104,132, 16, 81,213, 21,162, 15,152,166,137,253,228,170, 80, 62,251,
-126,228,103, 51, 33,132, 30, 49, 36,236,186, 29,105, 55, 60,105, 33,132, 16,176,150,244, 8,167,211,169, 60,147,239,223,191,199,
-126,191,199,185, 31,161,180,129, 4, 21, 61,195, 56,226,120,242,168,157,195,253,221, 29,172,213, 24,231, 25,134,167,122, 57, 69,
- 32,210,228,176,144, 47, 3,115, 55,202, 52, 79,172, 49,219,124,209, 10, 41, 81,105,162, 17, 26,109, 24, 32, 52, 33,166,120, 1,
-147,108,154, 6,211, 56,144,232, 47, 46, 94,120, 73,121, 84, 49,173,147,104, 6,120, 81,115,180,218,255,178,196,119, 10, 98, 95,
-226, 83, 0,128, 46, 18,215,151,228,185, 89,124,235,161, 42,144, 87,214,118, 94,199,229,164, 0, 38,197, 55,141,251, 82,185, 96,
-111,119, 34,171,173,232,178,250, 17,151, 9, 92, 75,215,184,177, 24,209,232, 99,237, 12,137, 87,189, 76, 19, 52,132,178,184,127,
-245, 17,222,124,252, 41, 42,215,160,171, 44,246,141, 67,173, 8, 79, 59,207, 30, 72,180,111, 73, 41, 81,215, 17, 61, 66, 32,161,
- 77, 76,203,248, 88, 34, 36, 65, 17,164,130,176,129, 74,202,181, 96, 17, 2, 73, 10,100,149,203,228, 67,172, 11,221,226,157,132,
-164,223, 47, 5, 85, 11, 66, 0, 72, 1, 82,228,178, 75,150, 82,192, 24, 1,163, 5,172, 86,208,138, 46,117,163, 5,180, 50, 20,
-140,145, 51,146, 82,176, 90,163,182, 14,251,186,194,161,145,104,235,140,166,210, 24, 39,129,255,250,197,123,252,229, 95,255, 61,
-190, 60, 37,104, 83,193, 41,205,106,123,137,196,200, 85, 37, 20, 19,227, 36, 29,128,146,254,123, 92, 46,185,141,208,109, 29,211,
-230,117,123,190,161,201,109, 25,105,203, 52,103,177, 83,197,226,243,220,248, 51,243,170, 50,200,215,241,125,207,198,222, 47, 92,
- 60,203,123, 44,197,102, 58,179, 22,136,249,134,208, 19, 76,157,218,238,185,182,188,118,154, 38,228, 13,111,254,165,130, 98, 3,
-156,217,210,211,175,254,220,183, 41,215,111,117,218,207,252,239,215, 58,149, 27, 23,251,229,133,254, 18, 3,254, 59,148,186,155,
-116,168,103, 83,134,133,128,184,140, 33, 3,117, 99,185, 31,161,148, 64, 93, 57, 82, 77, 67,192,185, 10,195, 56,163,169, 43, 86,
- 82, 75, 40,109, 48,132, 35,164, 86,176,214,162, 31, 6,232, 24, 97,164,194, 28,105,199,108,180,193, 48,142,232,218, 22,187,221,
-110,221, 61, 79, 83,241,239, 58,107, 88, 84, 22,113, 60, 29,137,163,174, 4,156,115, 80, 86, 33,198, 0,228,132,186, 98, 71, 71,
- 50,152, 39, 10,114, 81,202,176, 96, 16, 48,174, 42,197, 91,215,117, 56,157,123,238,188, 3,158, 30, 31,225, 39, 34,156,249,201,
-195, 58,131,202, 90,228, 24,161,165, 96, 0, 21, 16,230,169,144, 40, 21, 67,118,180, 49,200,137, 16,168,218, 24,248,121, 34, 17,
-161,100,236, 42,115,219,165, 32,225, 45,249,174, 35, 77, 62,164,129, 20, 6, 67, 63, 51, 67,159, 10,169,190,239, 49, 14, 19,238,
- 14,123,186, 0,189,199,227,227, 7,188,126,243,138,186,216,144,120,212, 28,153, 19, 0, 24, 45,209,182, 7,244,231, 1, 90, 91,
- 60, 29, 79,232,186, 22,143,143,143,184,219,239,225,125, 64,211, 52,216,239, 53,132, 56,226,155,111,190,194,231,159,125, 31,125,
- 63,192, 24,137,105,206,216,239, 90, 12,211,140,156, 87, 61, 77,219,182, 56,247, 71, 0, 21,140,105, 48,244,103,184,202, 65,204,
-228,144,144, 10, 69,229, 47, 68, 44,248,217,251,251, 59, 60, 60, 60,174, 69,225,178, 10, 90,166,176, 73, 96, 26,166, 50,201,115,
-206, 1,115, 96, 40, 15, 61,251,119,119,119, 56,157,206,228, 60, 72, 9,167,211, 9,227, 28, 24,255,107,160,148, 70, 37, 37,246,
- 31,127, 12, 37, 5,134, 19,129,120,154,166,194,185, 31, 72,139, 48,209,248, 27,155,213, 95, 74,180, 94, 45,235,100,198, 74,107,
-126,230, 98, 14, 16, 81,192, 89, 9,103, 29,198,113,160,216,222, 2, 87,203,108,103, 4,156,213,232,154,123, 12,253, 25,199,211,
-185, 52,121,129,207,201,229,242, 78, 66,148, 80,176, 91,141,192, 75,197,246,197, 25,112, 99,146,167,106,183,170,223,243,133,229,
- 72, 20,202,153,192,115,223,156, 84,162,140,246,228, 70, 88,176, 0, 38,197,166,139, 66, 78, 23,251,210,231, 35,210,203, 17,126,
- 81,174, 95, 77, 0,115, 17, 67,109,132, 73, 27,143,114,102, 86,110, 74, 18, 82, 54,112,213, 1, 31,127,242, 99,252,233,191,249,
- 15,248,243, 95,253,247,248,252,135,127,140,195,225, 21,180, 50, 80, 66, 66,166,132,232, 35, 89, 74,152,151, 30, 34, 71, 54,206,
-148,175,236,163, 71, 12,158,211,123,136,173, 62,230,128,196,197,140,102,155,156, 84, 2, 89, 74, 68, 41, 49, 49, 35, 62, 95,160,
- 70,175,178,226,133, 96, 69,237,134,130, 39,105,111,110,132, 64,101, 52,246,149,197,161,117,104,172, 64, 99, 20, 26,103,161, 57,
-227,152,186, 98, 9,103, 12,154,198,226,208, 85,120,211,213,184,115, 18, 77,109,112,138, 10,255,245, 95, 30,241,151,127,251,123,
-252,237,151, 39,204,217,194, 10, 13,195,197,131,103, 53, 3, 36,125, 15, 16,146, 32, 51, 66, 33, 40,131, 36,117,153,175, 72,185,
-128, 85,200,126,151,211,218,185,138,141,102, 32, 95,128, 93, 4,115,221, 21,225,124, 88, 13, 75, 34,156, 27,164,185,188,250,210,
-183,246,176,109,234,217,210, 49,223,178, 74, 46,190,255, 45,148,166, 92,122, 57,179, 88, 76,172, 57, 0, 55, 56,142,151, 89,233,
-114, 93,141,108, 58,243,111,227,173,131,247,212,133, 44,117, 33,178,123, 62,134, 47,164, 45, 41,111,119,199,226,187, 9,115,226,
-102,128,196,154,173,188,242,183,111, 81, 30, 55, 89,206,216, 36, 42,190,116,241,243, 23, 85, 90,195, 48, 76, 68, 74,130,127,236,
-247, 29,156,213, 68, 75,227, 92,115,173, 12,170,170,134, 20, 18,206, 57, 28, 79, 39,132, 28, 48,251,153,249,232, 19, 92, 93,195,
-231, 8, 99, 45,192,144,146,115,191,236,121, 27, 86,112, 7,140,227, 64, 40, 89, 41,209,214, 45,238,238,238, 49, 14, 35,124,140,
- 80, 74,147,240,206, 57,140,195,136, 24, 3,140, 86,232,154, 26, 49, 70, 74, 5, 99,174,129,226, 29,125,240,129, 14,101, 80, 50,
-154,117, 6,200, 9,175, 95,221, 67,230,140,121, 36, 6,252,110,191,195, 60,141, 48,138,131, 86,216,231,127,216,237,160, 36, 69,
-201, 26, 77, 16, 29,145, 65,214, 48, 73, 20, 56,103, 12,221, 13,145,180, 23,137,115,220,231,121,198, 52,207, 20,140,162, 53,137,
-207, 64,130, 58,239, 41,101, 45,103, 96,215,237, 48,207, 30,243, 52,243,101, 68, 54, 60,103, 41,240,133,236,181,116, 33,146,229,
-207, 32,198,136,190,239,241,225,195, 3,172, 37,242, 92, 93,215,168,170, 10, 31, 62, 60, 64, 8, 80,186,217, 68, 98, 61,173, 53,
- 79,179, 72, 4, 9,182, 44, 46,151, 71,136,212, 97,187,202, 17,225,111,158,160,148,194, 52, 17,175, 30,137,232,130, 31, 62, 60,
-162,174, 27,212, 77, 77,221,184, 82,120,124,122, 34,155, 31, 4,234,170, 66,140,153,197,121,171,126, 5, 28,244, 35, 75, 17, 46,
-138,163,104,158, 3, 14,135, 61, 71,223, 18,207,221, 90,131,195, 97,143,211,249,180,102,199, 51, 91,160,170,200,203, 14, 1,124,
-253,245, 87,168, 44, 65,185,132, 16,232,207, 3,164,214, 48, 90,226,238,238, 30,135,195, 30,198,145,101,208,251, 64,133, 7,127,
- 22, 67, 76,229,179,159,175,206,155,133,186, 42,121, 34, 37,132,128,230,247,217,114,236,237, 52,141,184,187, 59,160,170, 28, 77,
-164,102,198, 32, 11, 73, 5,231, 38,162,123,171, 31, 75, 91, 29,204, 11,110,151,103,104,232,171,232,214, 98,105, 35,148, 99,186,
-216, 97,111, 3, 88,174,129, 27,148,205,190,249, 6,153,108,180, 8,224,196,118,159,183,246, 61, 23,168,208, 69,105,188,205,147,
-151,203, 78,125,195,128,223,142,251, 5,199,160,138,188, 46,204, 23, 92,225, 34, 90,203, 80,248,244,211,159,226,143,255,228, 87,
-248,147, 63,253,239,240,179, 95,254, 91,124,250,217, 31, 65,219, 3,134, 9, 56,159, 78,152,230, 17,126, 26,145,252,140,196,136,
- 65, 31, 72,149, 58,251,153,246, 33, 33,148, 16,129, 24, 60, 4,167,173,249,148, 16, 56, 45, 78, 73, 58, 32,150,254, 52, 9,129,
- 40, 5, 60,239,214,179, 88, 45, 82, 75, 82, 79,209, 13,108,139,146,204,244, 60, 65,248, 89, 45,128, 90,107,236,107, 71,234,119,
-107,208, 57,131,218, 25, 88,165,139, 32,209, 25,139, 93,211,160,107, 12,186, 70,163,179, 18,181,209,232, 61,240,159,191,248,128,
-255,253, 55, 95,226, 95, 39, 11,209,188, 65,156, 5,108, 10,176, 34, 32, 32, 97, 2, 16, 50,129,113,140, 32, 4,110,148,100, 99,
-139,210, 20,224,204,178,118, 93,104,105, 57,130,146,174,174, 30, 50, 18, 2,198, 18, 92,160, 4,233, 16,132,176, 48,166,129,115,
- 77, 65, 83, 46,112,140,103, 59,102,185, 66,102, 74, 71,143,181,128, 88, 94,131,220,122,210,175,124,221,242,150, 45, 83,228, 34,
-242,195,173, 93,189, 96, 26, 97,217,103, 47, 98,191,231, 43,162, 91, 19,130,148, 50,112,253,191, 99, 11, 81,146, 47, 42,217,111,
-117,218, 47, 23, 13,183, 71,237, 55,161, 51,121,197,220,110,119,210,184,242,200,230,235, 16,153,111,217,229, 47, 88, 77, 41, 36,
-124,240,197,226,216, 52, 53,148,209,133,230,104, 12,229,126, 59,235, 16, 67,196,221,221, 61,142,231, 19,230,228, 89,216,153,160,
-165, 34,187, 90, 83, 35,114, 74,225, 56,207,128,162, 12,131, 69,252, 84, 85, 14, 33,120,236,246, 59,212, 77,141,121,158, 16, 66,
-194,187,119,239,105,132, 92, 85,152, 61,117,196, 74,107,138,210,228, 48,153,113,246,132, 60,102,218, 91, 18,148,188, 54, 79, 51,
-140, 82,208,114,137,255,204,120,243,234, 30,231,227, 17,109, 93,227,248,116,132, 20, 2,109,215, 97, 28, 7,248,121,230,103, 87,
-209,186,206, 16,148,197, 57, 7,173, 36,206,231, 51, 20,239,154,157,181,100, 89, 10, 1, 90, 40, 68, 63, 35,248, 8,164,204,208,
- 27,138, 94,157,167, 25,109,219, 98,154,105, 2,209,247, 3,219,240,200,163,221,247, 67,177,157,157,207, 61, 34,239,114,105,122,
-148,202, 37, 94, 87, 13, 20,231,111, 47,159,169,186,166, 61,119, 8,164, 10,159,231, 25, 16,244,243,168,156,133,209, 6, 15, 15,
-143,168,170, 10,138, 49,174,228,101, 31, 16, 67, 36,219,155, 64, 81,210, 39, 6,212,144,135,156, 62,139, 85, 85, 97, 28, 72, 56,
- 88, 87, 13, 82, 4,180,162,130,172,235, 58,248,224, 1, 1,140, 35,217, 26, 83,202,168,107, 98,175,151, 8,209, 98,141, 94,218,
- 64,254, 12,107, 85, 8,117,125, 63,160,105, 26, 24, 77,207,196, 60, 79, 80,154,114,214,199,113,196, 52,205,104,154, 22,211, 28,
- 48,140, 35,101, 7,180, 13, 94,191,122, 69, 77,152,159,145,114,132,171, 44, 5,215,176,251, 96,222,116,247,117, 93,193, 90, 90,
- 17,209,251, 76, 22, 79,107,233,189,202,200, 43,181, 46,165,226, 6, 16, 82, 20, 52,235,221,253, 61,132, 16,152,103,114, 20, 76,
-195,136,174,109,168,136,145, 2,243, 28, 56,169, 79, 82,215,191, 61, 75,132, 88, 45,157, 27,152,204,246,140, 88,126,182, 37,151,
- 29, 47,103,173,172,150, 54,220, 78,104,147, 16, 20,205,121,113, 40, 60, 7,203,139,141,178,253,150,249, 94, 93,154,149, 54,161,
- 25,107,190,118, 73,168,219,236, 43,159, 35, 97,177,250,134, 47,178,173,105,116,248,250,254, 83,252,183,255,254,127,192, 47,255,
-248, 87,112,245, 43, 68,105, 49,204, 1,143,143, 39, 28, 79, 61, 98,244,152,231, 1,211,120, 70,140, 51, 98,152, 8,238, 16, 3,
-119,230, 20, 16,144,249, 66,247,209, 35, 49,245, 40,231,140, 57, 39, 68,222,225, 75,161, 86,187,220, 50, 37,144, 10,203,214, 24,
- 28, 5,187, 22, 47,220, 41,110,183, 9,188, 46, 88, 26, 77, 9, 34,218,213,206,161,171, 12,246, 13,253,251,110, 87,227,126,223,
- 65, 49, 53,201,104,141,166,118,216, 53, 14,187,206,162,118, 10,214, 40, 76, 73,225,111,254,229, 61,254,242,191,252, 51,126,253,
-246,132,115, 54, 48,166,129, 85, 26, 26,145,226,107,165,132, 23, 10, 1,160,195, 13,130,176,176, 66,194, 67,193, 11,137, 36, 53,
-143,160, 56, 21, 45, 3, 57,201,210,165,167,148, 47, 40,120,139, 64,196, 89,135,202, 90,220, 29, 14,104,155, 14, 77,219, 97,215,
- 29,112, 56, 28,176,235, 90,180,109, 13,235, 40,115,154,130, 26, 54,227,115,145, 55,200,214,181,203, 78, 27, 1,154,200,151,184,
-225, 91,157,170,188, 64,210, 46, 81, 75,121, 51, 21,184,125, 25,138, 11, 97,140,188,250,109,226,217,165,190,166, 44,173,194,199,
-242, 51,190, 82,234, 63,203, 98, 23,223,238, 75,127,105,151,190,173,200,175,199,233, 23,164,169, 77, 97, 36,197,183, 20, 4,242,
-234, 53,228, 23, 88, 21,235, 64,137,244, 20,203,212,140,230,219,196, 39,175,107, 8,173, 89, 49, 76, 11,251,218,145,245,233,253,
-135, 15,152,194,140, 44, 51,118, 93, 75,222,237, 24, 97,156, 69, 22, 11,162, 85,241,225, 70, 57,220, 33,132,146, 18,118, 58,159,
-161,141,230,215,205,217,210,124, 25,229, 76, 66, 44,197, 69, 63,144,145, 66, 44, 69,247,241,248,196, 28,244, 0,107, 52, 21,196,
-214, 80,177, 46,232,178,121,243,250, 53,188,247, 56, 30,143, 56,159,123,116,109,135,227,211, 19,198, 97, 36,203, 42, 23,221, 49,
- 6, 4,239,113, 62,157, 33,244,234,102, 81, 76,224, 75, 41, 83,124, 40,107, 14,132, 92, 38, 91,228, 13, 87,108,123, 93,114,193,
- 1,224,124, 30, 40,100,102, 14,152,103,154, 60, 80, 54,186, 47, 10,243,192,140,250,170,170, 49,142, 19,206,231, 30,231,243, 25,
- 33, 4,212, 85, 93,118,235,198, 24, 52, 77, 67, 49,179, 44,228, 34,199,143, 40, 23,106,211, 52,133, 43, 96,173, 69,127, 62, 67,
-105,133,182,107, 33, 0, 60, 60, 60, 96,183,219, 1, 16, 60,141, 97,159, 61,235, 28,170,170,198, 48, 76,232,218, 14,179,167, 73,
-194,126,191,199,219,183,239,176,235,106, 46,240,201,219, 63, 77,212, 97, 23,106,158,179,155, 80,166, 75,244,234,242,134,164,196,
- 12, 12,169, 10,139,127,154, 39, 74,215,155,102,132, 24, 80,215, 13,142,199, 19,217, 43, 3,217,236, 34,107, 45,230,217,227,116,
-234, 17, 98, 64,215, 53, 80, 74, 32,165,128,170,169, 96, 93, 69,140, 17, 31,145, 64,133,138, 54,244, 44, 34,131, 87, 32,148, 73,
-176,236, 75, 9,144,196,230, 53, 14, 77,137,153, 98,180,181, 50,240,222, 99,154, 70, 72, 37,177,235, 90, 14, 2,138,144, 66, 96,
-191,223, 97,156, 38,196, 16, 41,106,152,167, 55, 82,210,251, 33,164, 42,119,230,194,146, 47,194,223,188, 54,128,219, 38,119,235,
- 91, 23, 55, 86,111,124,169,199, 27,137, 51,107,167, 46,178, 40,172,104,136, 21,189,122,209, 25,240,254,252, 26, 1,190,118, 11,
-185,160,102, 22,158,123,145,143, 45, 23,218, 21,231,246,154,144, 69,204,222, 92,172, 98,153,233,111, 82,208,174,229, 71,159,255,
- 24, 63,248,236,103, 56, 28,190, 15,101, 14, 56, 15, 17, 15,199, 39,140, 83, 79,221,249, 60, 34,248, 25, 49,121,204,211, 25,243,
-220,211,174, 40, 71,196,180,142,222, 99, 78, 72, 41, 32,164,132, 57,123,142, 28,205, 28,191,154,216,154,166, 86, 86,120,217,233,
- 42,238, 6,228,230,189, 18, 23, 66,194, 5, 11, 92,104,101,121,237,146, 20,135,199, 88, 41, 81, 59,135,125, 99,113,191,175,241,
-241,171, 3, 94,223,237,224,140, 68, 74, 20,227,216, 52, 21,218,174, 66,215, 89,116,149,131, 85,228,215,253,155,127,253, 10,255,
-219,127,254,123,252,191,111,207, 56, 71, 96,158, 38,132,121, 42,227, 16,231, 28,148,169, 33,149, 99,240, 1,193,123, 18, 4,130,
- 16,240,172,178, 77, 74,241,222,137,135,240, 73, 80, 98, 85,202, 72,129,199, 83, 87, 69,160, 18, 18, 77,229,240,241,155, 55,104,
-170, 10, 90, 81,247,166, 88,201, 47,144, 96,140, 70,219,214,152,253,136, 97, 60,175, 52,177,197,203,126,117, 65,229,205,165,190,
-160, 87,203, 74, 67, 94,142,166, 87,177,202,117,119,188, 93,174,139,103,129, 65, 91,164,237,114,169,175,200,199,252, 98,167, 94,
-148,253,207, 18, 10,229,230,159,215,163,116,113, 49,114, 23, 87, 1, 13,183,168,112,223,166,118,127, 9,197, 44, 55,252,125, 1,
-241, 98, 33,145,175, 69,123,249,133,221,123,198,133,102,128,188,235,228,235,117,214, 96,127,216, 65, 49, 30, 53,196, 4,173, 12,
-250, 83,143,125,183,195,219,119,111, 49,135, 9, 80,128,182,228,175, 78,222,243,229,234, 48,135,128,105,158,161,150,220,113,173,
-139,146,187,174,107, 12,195, 0, 41, 5, 38,102,142, 67, 8,124,255,251,223,227, 81, 46, 57, 69, 22,192,139,159, 39,132,105, 38,
- 11,218, 68, 93, 98,142, 9,200,196, 74,175, 42, 11,196,136, 48,123, 52,109,131,251,215,247,164, 90,247, 30,179, 15,240,115,132,
-177, 14,199,227,137,149,203,244,126, 89, 99, 56, 89,204, 35,204,180,231,119, 77, 69,118,169,113, 42, 68, 74, 2,219, 8,182,151,
-133, 18,237, 41,165, 46, 0, 20,242, 66, 83, 87,215, 52, 59, 76, 19,185, 88,164, 36,247, 77, 85,213, 8,145, 46, 40, 26, 47,211,
-212, 34,248, 0, 99, 12,134,158,217,250,108,233,213, 82, 81,148, 43,119,250,117, 77, 43,143,105,158,139,229,201,104,137,166,118,
- 92,132, 16, 85, 45,240, 74,209, 57,135,121, 30,161,151, 61,127,164, 21,128,247, 51, 9,243, 50, 61,159,227, 52,161, 31, 38, 52,
-236,118,200,153, 86, 23,231,211, 17,135, 67,139,105, 30, 32,181, 68, 85, 87, 28,142,147, 97,140,197, 48, 80,170,223, 60,123,222,
-179,131,137,132,161,216,138, 47,116, 41, 98,117, 89,128, 1, 58,200, 96, 81, 38,239,246, 65,107,133,113, 28, 1,161, 96,152, 13,
-144, 82,130, 84, 10,221,174,133,179,102, 5,144, 9,224, 60, 12,152, 67,160, 34,128, 65, 98, 57,101, 12, 67, 15,100,160,109,107,
- 34,102,230, 68,212, 80,166, 89, 46,161, 68,130,173,208, 89,100,216,202, 65, 42, 18, 12, 46, 69,155, 15, 1,198, 16,173,110, 41,
- 90,157, 99,244,238, 28,160,132,100, 81, 29,193,137,150,179, 76,105, 13,163, 77, 9,199, 81, 66,109, 56, 32,242, 98,101,120, 73,
-113,205,151,147,193,109,167,190,152,238, 47,185,221, 98,123,173,111,198,197,249, 57, 96, 38, 95, 38, 90,149, 68,181,109, 45, 33,
-214, 14,125,129,195,108, 3, 85, 10,244,131, 97, 23, 23,126,188,197,243,184,162,192, 8, 54,160, 13,238,238,238,241,147, 31,254,
- 4, 63,255,233,207,240,163,207,126,140,251,187,143, 49, 79,192, 48, 5, 68, 0,195,120,198, 60,245, 8, 97, 68,240, 35,124,152,
-224,249,130, 31,167, 1, 41,122,210,240,115,244, 95,140, 52, 30, 75, 49, 34,228,136,152, 99,241, 90,103,246, 35, 47,170,200, 37,
- 67, 30, 66, 34,243,129,150,174,178,188, 69, 17, 16,202, 11,146,157,224, 64,155,237,250, 66, 73,218,165,215, 70, 98,215, 56,124,
-116, 87,227,147, 55,148,186,230,180, 64,206, 30, 74, 10,116,109,141,174,171,177,107, 45,186, 70,192,217, 26, 33, 74,252,230,119,
- 95,225, 63,253,223,127,139, 95,127,125,194, 57, 25,242,101, 70,170,148,179, 0,148, 81,208, 82,195, 89,135,186,106,208, 54, 13,
-140, 18,252,128, 19,116, 38, 72,141,164, 53, 37,214, 72,122,128,229,162, 45,227,192,138, 5, 33,121,225, 62,200, 25,149,177,120,
-115,255, 10,181,179,200, 41,192, 90, 10,152,216,237, 26,180,141, 67,229, 12,140,150,176, 86, 97,154, 7, 60, 29,159, 54,112, 25,
-129, 91,195,223,173, 72, 46, 3, 23, 10,247,229,146, 20,151,209,233,235,235,202,249, 50, 63,224, 38,210,113,139,179, 68, 97, 68,
-151, 78,159,109,136, 89, 60, 23,220, 45,191, 51,231, 53,150, 49,109, 46, 64, 81, 72,134,184, 0,225,220,180,166,229, 77,138,223,
-141,162,246,187, 4,118,207, 70,241, 88,127, 62,219, 29,251,133,215, 95,108, 83,167,242,139, 23,255,242,249, 93, 56, 11, 88,132,
-169,228,245, 64,195, 89,222,209, 71,120, 31, 33,161,225,135,128,251,221, 1,211, 52, 32,102,202,209,150, 74, 98, 24, 79, 56,116,
- 59,120, 86,118, 47, 22,165, 20,137, 76, 22, 35,253, 94,193,197, 32,241,230, 53, 59, 47,248, 34, 64,198, 52, 79, 48, 70,179,154,
-154, 29, 15, 41, 82, 42, 89,221, 32, 39, 64, 41, 77,246,174, 68,176, 27,109, 52,134,129, 60,225,198, 26,236,247,123, 98,133,167,
- 4,101, 52,142,167, 19,148, 50, 56, 62,157,169,235, 7,137,189, 36,125,113,130,188, 44, 81,166, 57,195, 88, 75,133, 69,166, 61,
-251, 50, 62, 93,222,211,162,102,206,224,221,181, 44,187,211,229, 49, 49,166,194, 60, 71,194,156, 50,169,101,154,102, 26,179,130,
-206, 24,234,244,136,119,190,192,142,144, 19,172,177,164,255,225, 46, 61,241,197,167,148,102, 22, 7,217,199,102,239, 73, 36, 40,
- 73,228,101,172,197, 56,141,168, 42,242,222, 43, 45, 75,218,217,174,219,225,124,238, 33,165, 66,221,212,240,115, 96, 24,206, 64,
- 58, 34,169, 48,142, 51, 4,232,103, 85, 55, 14,117,109, 33, 36, 8,107,203,246,188,182,233,240,238,253, 7, 56,231, 80,213, 53,
- 17,223,148,198, 56,142,240,193, 83,152, 13,143,177,169,224, 95,132,231,236, 86, 50,154, 67,130,116,105, 34,115, 78,208, 11,176,
- 40,103, 66,230,178, 56, 49,196, 64,182, 72,231, 48, 77, 51,206,167, 51,114, 78, 28, 95,187,120,215, 21,133,187,112,193,174,148,
- 66, 93,215,212,172,112, 58, 92, 74, 1, 49,103,212, 77, 67, 88, 89,165,233,110,148,121, 45, 28,248,189, 18,155,224, 21,122, 70,
-129,121, 34,113,232,174,109,169,144,241, 51, 77,187, 21,133, 26, 81,126,150, 88,215,209,156, 25,144, 22,209,245,146,228,150,113,
-161, 61, 16, 82,188, 44,174,189,250,172,242, 78, 61,150,253,248,179,157, 95, 89,162, 47,144, 25,193,224,138,213,244,190, 36,196,
-136,107, 58, 40, 54,144, 25, 78, 53,226,192, 50, 6, 97,172,216,206,173, 8, 78, 20, 63,159, 92, 77,253, 82, 34, 39,234, 6,181,
-208,184,223,223,225,167, 63,248, 17,126,249,211,159,227, 39, 63,248, 9,222,220,191, 65,101, 42, 72, 0, 62,206, 24,167, 30, 89,
- 68,196, 24, 48,244,103,218,143,251, 9, 49, 12, 8,243, 80, 66, 9,188, 15, 96, 67, 33,114,242, 72,193,115,194, 18, 41, 30, 99,
-140,200, 16,136, 72, 69,180, 69,227,163,188, 70,124, 10, 65,221,185,148, 69,133, 15,169,152,101, 47,203,135,115,157, 52,139,178,
- 67,144, 82, 48,226, 85,194, 42,129,198, 72,180, 78, 96,223, 40,220,181,100, 83,163, 72,227,128,218, 25, 28,246, 20,169,186,107,
- 29,118,181,134,179, 9, 30, 26,127,255,251, 71,252,167,255,235, 55,248,127,254,233, 27,140,170,129,135, 70,140,203,126,159,254,
-188,145,128, 83,196,148,175,140, 70,101, 29,172,164, 14, 68,104,139, 36, 53, 2,128,188,236,211,249,146, 90,196, 65,197,114,181,
- 68,139,178,182, 32, 75,130,226,116,109,141,174,169, 8, 64, 82, 59,236,118, 13,132, 0,180, 18,156, 34,149, 33, 68,194,174,163,
-241,223,215,223,188, 69, 90, 92, 10,137,198,117,151,173, 97, 90,129, 54,219, 16,160, 11,193,123, 46,228,186,117,212,206,127,110,
-153, 52,108, 98, 68,215,137,209,178, 10, 89, 43,130,180,241,235, 47,112, 29, 48,211,127,185,207, 50, 19,242, 22, 97, 96,222,114,
- 34, 51,158,177,235,175, 95,219,182, 72, 89, 14,253,197,166, 89, 58,131, 2, 88,186, 97,118, 7,190, 83,176, 39, 54,110,128, 98,
- 83, 21,155,181,213,178, 10, 16,107,149, 47,243,202,165,190,117,169, 39, 65,207,132,202, 27,244,165, 0, 20, 18,238,246,123,156,
- 79, 71,254, 51, 26,141,221, 97,111,106,252,248,243,239,227,155,135,175, 16, 36, 89, 81,179,247,164,202, 86, 26,167,126, 96, 42,
- 35, 29,206,243, 52, 22,192,148, 20, 2, 66,177, 24, 23, 25,198, 26, 42, 26, 34, 65, 80,134,115,143,148,129,186,174, 17, 2,133,
-165,104,173, 49,251,128,211,121, 64, 91,119,232,218, 22,167,243, 25,231,243, 25,198,104,156,207,103,130,162, 4,186,152,238,238,
-247,152,166, 17,243, 56,194, 79, 51,172,177,120,122, 58, 65,102,137, 48,121, 56, 99,105,130, 21, 2,156,179, 80, 82,144, 3,197,
- 88,204, 19, 77, 21,140,210,136, 33, 34,250,128,182,105, 80,215,180,223,151, 90,195, 53,212,109, 43,166,134,209, 57, 66,151,187,
- 15,177,236,144,165,210,152,226, 12, 31, 3,172, 35, 52,108,140, 17, 41, 4,136,156,225,167,137,206,159,152, 10,133, 19,130,176,
-182, 33,121, 36,100,190,164, 3,140,182,232,251, 17,187,253, 30,199,211, 35,132, 18, 48,206, 80,250, 29, 76,185,160, 93,229,240,
-225,195, 7,230,161, 43,140,126,130,171, 44, 82,160,200,218,199,167, 35,124,136, 56, 28,238, 32, 69, 70,140, 30,117, 93,177,162,
- 93,227,155,175, 63,160,235,118,208,154,248, 31,218, 16, 59,227,155,111, 62,224,254,254, 14, 18, 18,117,229, 48,246, 61, 37,191,
-241,115,223, 46, 97, 48,145,126, 85,141,163,176, 27, 77,194,101,197, 65, 64, 49,120,228, 20, 97, 52, 77, 32,180,209, 80,154, 10,
- 60,169, 21,113,230, 39,138,217, 53,214,160,237, 26, 8,201,241,190, 41, 97,223,117,152,167,137,109,202,137,200,134, 33,208,234,
-100, 14,100, 1, 54, 14, 49, 4,196, 16, 97,173, 70, 22, 68, 76, 84,134,236,205,193,211, 29,160,180,130,173, 12, 65,146, 50,191,
- 38, 37,214,207, 74,206,200, 49,195,104,138, 30, 86,156,232,104,157, 33,189,149, 72,220,253,103, 84,117,133,204,147, 45,145, 1,
-167, 45,196, 98,107, 99, 33,165, 42,193, 86, 75,177, 30, 33,182,209,176,215,193, 46, 87,232,118, 1,177,189,212, 47,125,111,219,
-221,218, 18, 52, 81, 84,186, 34,221, 76,150, 17, 87,123, 68,185,157,251,111,186, 43,145, 55,162, 60,145, 55,136, 79,177, 65,103,
-230,149, 5,207,223,149,202, 2,119,221, 30, 63,250,236,135,248,229,207,126,129,159,124,254, 67,188,185,127, 77, 42,211, 76, 34,
-169, 37, 62,113,156,103, 76, 51,135, 57,248, 17,126,158,225,195,132, 24,102,120, 63, 35, 38,250,240, 68,239,145,210, 12, 41, 18,
-114,244, 60,138, 79,108, 99, 88,162, 8, 3,143,206,150, 28,224, 92, 4, 80,101,210,176,101,206,131, 70,130,114, 73,252, 18, 75,
-244, 44,113,157,149,226,139, 30,138,118,238,130,162, 23,141, 20,168,141, 68,227, 20,156, 76,208, 50, 66, 33,162,118, 10,251,174,
-194,221,190,198,253,161,193,174,171,209, 52, 14,150,133, 44,255,250,213, 3,254,143,191,250, 53,254,203, 63,252, 14,167, 32,144,
-140, 99,122,146,100,230, 89,134,226, 8, 89,103, 52,165,104, 73, 69, 2, 27, 86,108,219,186, 65, 85, 55,208,198,113,164,100, 94,
-139, 50,254, 41,134, 68,135, 81,233, 22, 54, 30, 55, 45, 5, 14,135, 61, 37, 77, 41,137,221,174, 67, 78,192, 56,244, 56,159, 79,
-232,135, 30,227,120, 70,152, 39, 84,149,197, 28, 2,190,126,251,150,138,201, 69,140, 41,215, 7,122,173, 12, 5,103, 88,231, 21,
-207, 88, 58,116,222,105,202,149, 91, 32,128,219, 57, 4, 23,115, 35,241,204,132, 81,242,147, 55,114,186,197,199,158, 64,214,147,
-117, 62,141,146,201,190, 77,122,187,230, 45,136, 43, 43,220, 75, 80,153,173,253, 46,110, 39,102, 23,144,165,111, 79, 61,124,105,
-183,126,105, 67, 20, 23,157,228, 82,226,228,205,170,224,165, 78, 93,101, 82, 73, 70,174,135, 84,230, 95, 90, 66,114,174,122, 87,
-181,168,235, 22, 90, 43, 88, 9,212,181,196,135,227, 55,136, 34, 33,228, 4, 31, 35, 62,249,248, 99, 2,155, 48, 95, 92,106,194,
- 77, 43, 41, 8, 1,106,200, 71, 30,137,170, 84,118,235,206, 57,164, 68,156,243,211,233, 8,163, 53, 94,189,126, 77, 74,119, 14,
- 92,202, 16, 56,157,122,138, 32,173, 27,188,123,247, 14, 82, 73,132,156, 48,205, 19,237,240,173,193,235,215,175,113, 58,158, 48,
-143, 35, 89, 89, 61, 29,238, 70,107,200, 44,248,146,110, 49,249, 0,109, 45,171,175, 35,164,210, 72, 16, 24,231, 0,173, 13,172,
- 51,180, 66, 66,226,120, 84, 82,244, 75, 37,169, 9,136, 28,126,196, 48,163, 37, 10, 53,196, 64,249, 13,137,166, 18, 11,126, 57,
-120, 95, 46, 26, 37, 37, 32,152, 24,198,207,164,146, 52,229,164,203,131,170,202,182,110, 41, 83, 79,107, 40, 69, 14, 0,235, 28,
-142,167, 39,156,142, 39,120,159,208,182, 7,140,227,196,175, 39, 22,212,234,216,143,112,117, 5, 8, 74, 47, 75, 33, 65,107, 10,
- 62, 57,157,142,196,231,103, 29,131, 53,142,203,108, 42, 48, 62,124,248,192, 35,240, 10, 33,122, 88, 77, 58,128,243,208, 99,191,
- 35,161,221,225,176, 71, 63,246, 68,242, 11, 1, 82, 72,210, 93, 64,160, 31, 39, 18, 93, 66,146, 11, 64, 17, 83,192, 88, 3, 63,
-123,154, 30, 70,234,108,181, 38,176,142, 49,134, 72,131, 66,194, 57,110, 70, 36, 96,172,129,181,150,138, 47, 69, 10,243,166,169,
-139,184,111,156, 38, 88, 75, 78, 13, 74,215, 4, 35,131, 3, 54,149, 18,250,126,224, 96, 24, 96,230, 32,160, 24, 72,107, 37, 0,
- 88,103,121,237,176, 96,142, 29,233, 18,120, 66, 51,142, 35,140,214, 4, 13, 51, 26, 57, 83,160, 14, 5,243, 8,132,121, 70,211,
-212, 48, 70, 97,154,102, 42, 98,165, 90, 87, 89, 41,153,102,238, 37, 0, 0, 32, 0, 73, 68, 65, 84, 95, 76,236,148,184, 94,255,
-221,248,252,111,180, 71,171,165,237,198,165,142, 77,224,133,192,122,112,109,213,239, 55,243,211,115,162,212, 52, 92,138,115,150,
-195, 80, 94, 76,252,150,236,221, 92,130, 85,202,152,117,147, 53,189, 4, 78, 52,182,198, 15, 62,254, 12,191,252,163, 95,224, 23,
- 63,253, 35,124,242,250, 13, 42,235, 8,127,153, 88,160,199, 23,111, 6,169, 93,251,113,192, 52, 79, 8, 97,198, 56, 13, 8,193,
- 35, 69,242,132,166, 20,145, 98, 64,138, 51, 82,156, 65,174,108, 26,181, 39,222,179,231,148,232, 34,203,137,232, 70, 41,174,177,
-161, 87,107, 3, 33, 81,170,121, 99, 20,172,225,177, 82,217,255,175,194, 34, 81, 14,110, 66,216,202, 76,198, 47, 37, 18,172, 74,
-216, 55, 22,149,150, 48, 34,225,110,215,224,123,111,238,240,230,174,195,221,190,194,126, 87,161,118, 26,198, 41,132,156,241,175,
- 95, 61,226,255,252,235, 95,227, 55,255,252, 53, 30, 39,160,207, 10,210, 85,132,177,205, 43,242, 71,243,104,223,106, 77,170,223,
-141,139, 32, 11, 1, 99, 40,192,166,170, 27,212,214, 81,122, 84,138,180,143,228,253, 14, 93,234,116, 48,164, 28, 23,198, 45,114,
- 38,155,204,235, 87,247, 52,117,224,253,163, 98,129, 9,169, 84, 71,140,243,136, 20, 2,172,113, 56,245, 39,124,243,246,109, 17,
-203, 20,154,211,102,188,187,144,235,150, 74, 54,231,101, 37, 64, 10, 84, 41,214,220,109, 89, 68, 82,184, 45,160,219, 92,231,171,
- 80,103,163,184,220,254, 44,151,130,116, 41,110, 46,244, 35,203, 90,233, 50,218,245,242, 67,119, 91, 52,250,236,178, 92, 62, 12,
- 92,180, 92,115,230,165,146, 37,133,240, 90, 59,240, 93,151,250,197, 90,107,195,170,190, 24,217,111,224, 51,223,117,169, 83,199,
- 17,232, 57,206, 2, 58,211,126, 49, 34,225,174,235,112,111, 43,252,251, 95,254, 27, 84, 74,115,215,157, 48, 12, 71,204,243,128,
-170,169,224, 99,194,253,171,123,204,179,199,241,216, 99, 24, 73, 92, 21, 66,192, 56,244,168, 27, 26,209,122, 86,108, 15,227,132,
-166,109,203,243,208,117, 59,166,193,101,214,105,104,236, 15,123,204,243, 76,194,166, 24,203,133, 68, 86,181, 53,147, 33,229,132,
-126, 24, 0, 33,240,217, 15, 62,199, 55,111,223, 34,250,176, 34, 58,178, 64,240, 1, 74, 40, 72,144,197,115,154, 70,100, 65,145,
-163,222,207, 80,138,184,235,243, 60,195,105, 13,163,137,132, 38, 4, 17, 40,101, 42,122, 76,130, 86, 17,143,132, 70,223,124, 17,
- 44, 59,210, 20, 41, 45, 78,114, 22,250, 60,205,100,135,243, 36,214,162, 11,129, 1, 84, 75, 44,174, 0,170,138, 70,255, 93,219,
-162,107, 59,248,121, 70, 78, 9,218,104, 76,158, 18,224,250,115,207,214, 47,130, 2, 5, 31, 33,165, 65,240,158, 98, 94,121, 48,
-213, 53, 45, 32, 36,123,219,201,210, 21,124,132,181, 14,206, 58,164,156, 48, 77, 3, 95,148,170,104, 77,104,159,111,152,188, 57,
-193,123, 74,121,107,155, 26,117,221,224, 60,156, 97,180, 36,251,159,146,232,135,190, 88,163,167,113, 66,206,153,196,127, 2, 24,
- 39, 15,163, 12,230,113, 70, 76, 25,138, 53, 67,100,197,139, 80,154,216,243,206, 57, 12,195,128,170,114, 48,218, 16,183,126, 34,
- 28,109,215, 53, 24,198,158, 69,133,117,177, 84, 75, 1,216,202,194, 24, 74,248, 35, 93,130, 40,164,206,170,174,144,114,100,158,
-124,128,214, 22,214, 88, 42,112,149, 42,214, 51, 41, 36,172,113,208,154,210,220,192,145,211,198, 40, 72, 65,194, 96,231, 44, 82,
-142,104,234, 10, 34,211, 4, 24, 34,241,235,149, 80, 34,227,227,143, 62,194,227,195, 3, 23,116, 52, 25,167,116, 62, 79, 83,168,
- 16,200, 90, 12,172,161, 46, 12,202, 90, 86,123,215,169,148,184,113,185,231,252, 66,167, 94, 50,202,153,162,115, 41, 58,202,207,
- 98,223,196,114, 97,179, 24, 73,222,234, 36,216, 7, 44, 25, 31, 42,229,149, 63,118, 73,123, 19, 91, 21,179,132, 85, 22,175, 15,
-175,240,179,159,252, 17,254,236,231,127,140,239,125,252, 9,154,186, 38,127,120, 92,138, 8, 86,228, 34,113, 36, 30,199, 16,122,
- 95, 20,162, 62,204, 60,218, 10,165, 90, 77, 57,176,178,157, 46,123, 41, 87,104,200, 98,187,202, 49,240,202, 56, 94,250,153,197,
- 86,180, 64,151,166,211, 18,181,211,104,106,139,218, 82,181,182,128, 46,144,214,160, 25,177,120,247, 83, 4,162,135, 72, 51, 68,
-158, 97,100, 66,165, 4, 58,167,208, 85, 6,173,213,184,223,183, 56,180, 21, 26, 43, 97, 21, 96, 52, 96, 45,145,154,126,251,187,
-175,241, 87,127,251,143,248,199,223,190,195,209, 11,156,163,192,144, 0, 97, 28,192,163,255,197,162, 69,175, 79,195,240, 4,129,
-170,126,242,211, 10, 73,187, 43, 41, 20,156, 54,168,108,133,218, 57, 56,107, 75,144, 77,185,208,185,216,201, 11,229, 11, 11,190,
-179,194,221,126,199,171, 12,222,177,115,230,243, 52, 78, 28,211, 8, 62,180, 12, 98, 18,120, 60,158, 16, 83, 42, 32,158,156,183,
-225, 8,171, 96,102,221,169,231, 11,191,184,146, 43, 9, 78, 92,196,166,109, 84, 33, 98, 99,239, 90,190,150, 88,119,236, 98, 27,
-129,138, 69,133,187,238,226,159, 67, 92,196,165,106,247, 5,229,250,181, 80,238, 26,162,179,122, 84, 95, 70,192,230,148,191,179,
- 43,127,137, 78,119, 97, 45,223,190, 31,120,174,224, 23, 27, 97,221, 75, 95, 39,136,132, 44, 51, 77,196,104,159,131,136,136,218,
- 8,252,244,254, 30,255,227,159,253, 57,190,223, 29,112,124,120,192,169,239,225, 99,132,113, 21,154,170, 65, 8, 36, 34,218,237,
- 15,120,247,254, 29, 66,164, 24, 81,178,114,241, 37,100,116, 97,170, 91,206,232,150, 74, 21, 75,163, 82,138, 82,203,188,199,126,
-191, 71,211, 52,120,122,120, 98,194, 93, 46, 89,222, 82,146,186, 61, 70, 18,223,197,148, 10, 54,212, 58,135,243,249, 76, 96,156,
-243, 68,132,175, 68,187,204, 5,102,147, 98, 98,209, 93,128,214,130,161, 80,137, 70,239, 74, 33,199, 64, 80,114,126,254,149,208,
- 52,210,135,162, 11, 20, 18,209,199,197, 55,132,201,123,132,156, 49,251, 72,191, 38,207,132, 60, 81, 46,248, 20,252,102,165, 5,
-104,197,197,190,146,112,206,114,220,169,197,221,221, 61, 2,199,215,182,109,199,254,106,186, 4,230, 48,163,174,106,204,126,198,
- 48, 12, 24,250, 1,221,142, 56,237, 86, 87,200, 2,152,231,177,156, 73,203,222,190,170, 42,230, 51,144, 18, 30, 28,244,210,118,
- 29,142,199, 35, 97,120, 99,164,196, 74,109, 32,132,196,233,116,162,196,182,121, 46,103,105,219,237,160, 36,169,212, 37, 4,170,
-202, 81,236, 44, 4,190,249,230, 1,221,174, 35, 44,111, 2, 98, 10,232,118, 59,244, 3, 17,240,172, 49,208,134,172, 94,218, 18,
-156,135,186,106, 13, 41,129, 16,102, 10,195, 9, 84,192, 33,229,226, 63,143, 41,163,114, 53, 30,159,142, 52,166,103,250, 28, 88,
- 21, 63, 14, 19,164,210,168, 42,218,157, 43, 6,249,196, 24,240,250,205,171, 18,155, 61,242,107, 81, 82,160,237, 26,210,106,144,
-172,155,220, 24, 82,160,109, 42, 42,162,180, 68,244, 1,134,159, 73,107, 52,194, 60, 51,236,135, 18,236,252, 76, 34, 67,107, 8,
-221, 61,244,103,236,239, 14,155, 88,112,202, 78, 48,198, 34,199, 4,163,245,115,134,139, 72, 37, 7,228,230, 25,176,101,121,136,
- 21,231,174, 42,227,254, 98,187,239, 43, 6,246,197,123,190,116, 9,114,181,189,221,244,218,178,135, 88,224,217,222,158, 15,141,
- 92,132, 97, 23,157, 4, 46,199,238, 69, 44,151, 5,218,170,198,231,159,126, 31,127,242,243, 95,224,167, 63,248, 49,246,109,199,
-246, 18, 9,177, 80,222,144,139, 98,145, 82,174,232,131,185, 28,160,211, 52, 97,152,122,206, 45,143,108,151,136, 40, 55, 45,177,
-251,128, 28,168,139, 6,101,133,167,232,153, 44, 23, 47, 48,162,203, 43, 85,155,232, 86, 35, 65,177,167, 78, 98,215, 90, 52,149,
- 66, 91,105, 34,192, 41, 85,108,104, 57, 38, 40, 86,158, 86,214,160,170, 20, 42, 3, 88,153, 96,101,228, 44,244,140, 74,101, 84,
-154,242,208,187,218,162,177, 10, 93,173,208,213, 6,206, 26,248, 24,241,197,111,127,143, 95,255,221, 23,248,237,219, 51,198,168,
- 48, 37,131,115,200, 24, 83,130,174, 26, 72, 30,177, 19,252, 1, 48, 82,192, 25, 77, 25,241,130,222, 99, 37, 22,157,131,228, 41,
-131, 34,205, 2,231,179, 59,107, 97, 57,191, 56,196, 8, 31, 72,233, 25, 83,216,164,227,145, 16,172,170, 44,249, 50,231,153, 63,
-140,100, 55, 10, 62,176,138, 54, 18,167, 94, 72, 40,101, 32,164,198,241,120,194,236,195,198,234,184,241,144,231, 85,123, 64, 72,
-221,116, 9,109,184, 88,239,136,139,240, 18,228, 75,171,227,245,127,134,192, 5,185, 80, 44,251,236,139, 16,133,124, 85, 0,200,
-239, 28,129, 95, 99,100,113, 69,194,123,214, 5,111,226, 78,183, 23,238, 75, 64,153, 91,150,180,151,104,116, 36,237,200,101,234,
- 32, 55,159,231,139, 67, 97,241,173,191,240,119, 44,107,137, 40,104,244,170, 22, 2, 34, 34, 42, 5,252,226,205,107,252, 47,255,
-238, 87,248, 65,211,161,127,124,143,132,140,119,231, 30,193, 86, 72,182,198, 52,147, 2,186,109, 91,134, 59, 69,234, 68,145, 56,
-116,131, 14, 85,173, 40,162,216,199,128,170,174, 96,172, 37, 75,169,247,228, 17,151,178,116,183, 77, 91,227,124,238, 73, 15, 3,
-178,107, 45,233,127,103, 30,191,123, 63, 67, 51, 75, 62,248,136,113,156, 81, 85, 36,252, 18, 66,178, 34,123,101, 33,208,103,157,
-108, 74, 11, 21, 47, 33, 35, 36, 74,118, 91, 96, 68, 49, 82, 58, 35, 32,225, 35,101,136,103, 8,234,148,133,128,143, 25,211, 28,
-248,151,135, 79, 9,222,167,146, 60, 70,133,180,162,169,128,148, 64, 78, 48,122,229,129, 40, 41,160, 52, 37,175,165, 20,209,214,
- 21, 2,139,183, 40,188,136,248,231, 77,221, 64,105, 77,161, 47, 70,109,194, 83, 80, 10, 33,193, 9,106,222, 71,180, 93,139,105,
- 28,232,236, 82, 36,240,154,103,234,138,173, 35, 97,162, 99,232, 76, 74, 96, 13,131, 47, 35,237,229,189, 42,206, 39, 0,146,153,
- 25, 66,208,251,125,216,239,232,156, 96, 88, 78,140, 9, 93,183,131,210, 10,111,223, 61, 82,148,171,159,161,141,130,210,138,173,
-119, 61,139,197, 18,180, 81, 48, 86, 65, 25, 18,188, 9,145, 97,157,197, 60,211,206, 95, 41,192, 57,202, 77, 31,134, 17,135, 3,
-113,236,233, 89, 38, 32,142,171,106, 60, 60, 30,225,170,138,237,133, 30,195, 48,195,251, 0,205,208, 36,201, 13,141,117, 22, 90,
- 41,104,165,105, 13,146,200,187, 30, 35,121,203, 23,242,179, 53, 26, 82, 72,244,253,153,166, 12, 28, 7,188,116,213,203, 88,127,
-158,105,204, 79, 60,124,129, 48,123, 46,238, 73,171,112,238,123,156, 78,103,244,195,128,113,156,224,125,128, 53, 22, 85, 69,174,
-132, 24,226,198,198,154,110,126,182, 47,197,194,130, 19, 17,101, 65,212, 2, 2,250, 91,128,145, 23,130,165, 91, 4,171,109, 56,
-196,198, 15,179, 42,231,243,213, 82,239,154, 76,119,145,188, 37, 10, 46, 80, 73,129,125,183,199, 79,127,244, 19,252,232,179, 31,
-224,213,254, 64,172, 93,193,204,224,180, 96, 88, 57,229, 89,172,137, 88,145,185,228, 18,128, 85, 64, 99, 5, 78,125,192, 20, 82,
- 73,220, 41, 66, 42,126,152,114,138, 64, 74,136, 50, 67, 40, 64,164, 72, 40,218,204, 40,209,156, 11, 63, 59, 47,227,222, 13,173,
- 75,137,140,202, 72,116,149,198,174, 54,168,173,130,210, 25, 49, 0,201, 10, 52, 86,163,210, 2,143,199, 1, 33, 36, 32, 73,216,
- 74,161,118, 10,141,171, 80,201, 12,153, 35, 12, 50, 42, 37,208, 90,137,187,182,194,199,119, 29, 94,223,181,184,223, 85,184,223,
- 89,212,149,134,143, 30, 95,125,245, 30,255,242,187,175,113, 26, 2,178,208,200, 34, 33, 35,174, 97, 55,108,138,166, 14,156, 18,
-213, 12,143,221,151,159,167,224,184, 81,177,233,209, 68, 78,229,151, 4, 95,238, 85, 3, 35, 21, 43, 51, 19, 30, 78, 39,200,172,
- 72, 24,152,137,189, 45,153,212, 21,145, 17, 83,132, 49, 10,198, 88,246,197,178, 42,213,104,132,232,161,132, 70,244, 9,202, 1,
- 90, 91, 8, 49, 21,165,248,122, 81,173, 19,134,133, 75,183,144,230, 98, 94,215, 53,183,147, 78, 55,217,230, 91,115,248, 69, 75,
- 44, 46, 82,151,202, 88,158,253,177, 82,138, 77, 78,208, 18, 78,147, 54, 94,218,141,255,253,194,222, 22, 81, 68, 1, 57,111,146,
- 9,111, 23, 1,215,175,225,219, 66, 91,174,119,229,215,151,250, 5, 70, 50, 95,126,203,151, 41,137,151,159, 93, 37,100,201, 39,
-184,197,143,223,154,236,151,194, 71,138, 4,131,136, 63,253,228, 83,252,175,255,225, 63,162,139, 1, 15, 95,253, 43,101, 6, 76,
- 61,238,118, 13, 30,143, 3,166, 12,178,148,165,136, 70, 41,192, 39,228,192, 23, 49, 40, 36, 5, 0,195, 70,248,245,104, 67, 78,
- 13,165, 16,153, 21,190,213,235, 88,107, 32,165, 46,186, 10,163, 13,175,104,168, 96, 23, 32, 14,253,233,116, 66, 85,215, 56,157,
- 6,228,148,217, 14, 23,208,184, 10,231,225, 76, 90,146,197,123, 28, 98, 33,123,137,148, 32,211, 42, 16, 94,172, 71,144, 9, 66,
-248,205, 27,235,145, 69,102,253, 13,219,174, 22,158,195, 38,119, 64, 75, 10, 97, 90, 70,144,153,125,207, 82,242,122,128, 32,240,
- 28,224, 34, 56, 40, 74, 97,191,223,195,191,251, 6, 66,146,162,125, 24,103, 72,173,161,165,130,201,192, 20,136,159, 33, 20, 89,
-253,132,148, 56,159, 7,212,117, 3,248, 92,166, 32, 66,144,181,234,233,241,145,114,219, 53,237,156,253,236,105,109,160, 37, 62,
-114,175, 49,142, 19,178, 33,113,111,219,182,248,240,248, 1,119,119, 7,218,135,123, 15,169, 20, 71,149,102, 88,171, 49,140, 39,
-254,220,107, 30,223, 83, 1,100,180,195,152, 6,132, 57, 32,134,128,174,235,240,250,213, 43,252,254,203,183, 37,223,125,158, 39,
- 10,255,217,237,209,182, 13,158, 30,159,160, 37,224, 67,130,240,130, 93, 4,160,203,127,177, 33,242,211,172, 25,177,235,231,128,
-119, 31,222,227,205, 71, 31,227,233,120,198, 48, 78,168,234,154,198,207,218,224,241,233,136,182,109, 81, 53, 53,194,113,192, 56,
-142,152,231,145, 51,237, 37,180, 84, 56, 31,123, 56,103,225,156,130,148, 30, 66,212, 92, 36, 80, 32,145,176, 18, 41, 8,206, 32,
-176,216,237,118, 23,250, 23, 41, 5,180,100, 78,130,146,200, 12, 96,138,222,163,114,142, 68,112, 49, 98,158, 35,134,225, 17, 93,
-183,199,253,171, 26,253,208, 83, 81, 58, 5,140,195,128,200,223,111,211,212, 56,247,253,115,122,228,245, 25,144,210, 5,125,110,
-253,236,211, 51,164, 47, 69, 66,223, 29,158,113,203, 39, 43,176, 13,135, 95, 85,180,219,242, 66,176,183,245,166,159,118, 57,172,
-181,130, 86, 2,175,186, 3,254,228,231,191,196,231,159,126,142, 93,219,193,176,175, 93,240, 1,180,101,114, 47,202, 66, 26, 67,
- 8, 68, 14,130, 22, 57, 66, 33, 81, 71,108, 52, 70, 63, 16, 20, 38,173,129, 50, 37,112,132,199,225, 49, 9, 86, 47,242, 5,195,
-225, 48, 5,227, 90, 18,232, 36,123,204,233,114,119, 74,160,182, 10,109,165,176,171, 36, 42, 39,161,116, 70,142, 64, 8, 9,201,
- 10,180, 85, 5,171, 50,222, 63, 14,240, 49,192, 79, 9, 86, 42, 72, 35, 81, 87, 6,181,117,232,156,193,161,177, 56,212, 6,251,
-218,225,213,190,194,174, 49,216, 53, 10,149, 17,240,126,192,215,111,223,225,237,135, 19,124, 18,200,210, 64,200, 0, 32, 32,243,
- 88, 92, 20, 40,208,178,115,150,144,138,108,108, 86, 74,192,251, 50,134,206,172,204,102, 51, 30, 95,161,145, 62, 24, 89, 0, 49,
-195, 74, 9,229,170,114,153,133,144,241,212,247,240, 8, 16, 82, 32,100, 2,206, 10,238,150,230, 48, 99,246, 51,237, 10,185, 67,
-239,186, 22,109,219, 2,239, 31,168,107,225, 73,129, 49,134, 27,128,180,177,129, 45, 34,194,205,184,157,127,101, 42, 37, 46,172,
-111, 23, 10, 80,126,214,100,222,122,171,243,198,109, 32, 94,224,159,111, 34,119,196,102, 95,158,243,179, 17,249,154,230,134,203,
-206, 94,172,147,163,101,164,159,211, 37,115, 65,220, 28, 97,137,139,164,190,111, 75,103,187, 21, 10,243,109,137,110,183,138,158,
-188,121,109, 34,103,222,151, 46,141,216, 37,162,119,123,177,203,144,161, 4, 32,178, 71, 37, 19,254,252, 71, 63,194,255,252,239,
-126, 5,219,247,144, 90,224, 52,246, 8,198, 33,142, 19,238,170, 26, 95,197, 17, 73, 4, 76,115, 68, 72, 1,206,237, 17,252, 4,
- 85, 50,251, 18,130,159, 73, 68,150, 18,180,181,152,198,137, 2,131, 64,227, 97,231, 28,140,214,176,218,176, 7,157,126,191,203,
-153,198,236, 50, 21, 15,175, 82, 10,167,211, 19,250,126,134,144, 10, 83,240, 16,179,225,145,164,130,204, 1,136,192,216,143, 8,
- 49,210,254, 52,147,218, 24,156, 89,176, 56, 44, 40,161, 79, 81,131,176, 76, 3, 35, 25, 33, 22,241,108,193,156,242, 5,174,181,
- 44,217, 21, 34,139,213,201, 83, 50, 18,152,124, 73,240, 60,100,100, 24, 43, 0, 78, 89, 76,153,158, 55,178, 72,129, 82, 36,119,
- 59, 76,222,147, 64,143,215,129,139,246, 99,246, 51, 4, 95, 38, 49, 70,178,151, 57, 10,138,209, 90, 35,129,198,226, 85,101,209,
-117, 7,124,120,120,143, 73, 1, 2,134,246,232,129,190,143, 97, 24,113, 30, 6, 30,255, 46, 93, 60,217, 4, 79,167, 19,246,251,
- 29,148, 82,232,251,158,130,121, 98,128, 53, 10,206, 25,248, 8, 60, 61,145,187, 32,166,136,167,227, 19,246,251,123, 60,126,248,
- 64,144, 27, 87,211,202, 36, 38,188,126,117,192,195,195, 17,206, 89,204, 60, 61,161, 72, 85, 98, 17,244,253, 25, 18, 10,105,138,
-168, 42, 98,118,132, 16, 33, 53, 96,180,165, 29,116, 76,232, 79, 3,190,247,233,247, 32,133,194,239,191,252, 26,143,199, 39,212,
- 77,135,119, 15,143,240, 49, 99,156, 61, 62,250,232, 53,222,191,251,134,246,242, 74,162,221, 19,235, 32,166,136, 97, 26,161,189,
-132, 49,182, 8,232, 14,135, 61,140, 85,200, 32, 49,164, 16, 26, 22,132,210,141, 42, 33,106, 69, 69,129, 39, 0, 14, 17,247, 72,
-199, 49, 13, 35, 50, 50,234,154,118,235,129, 73,164,117, 93,175, 86, 80,161, 16, 82,198,215,111,223,195,186,138,255,206, 3,114,
-204, 72, 49, 97, 24,134,130,193, 93,232,123,101,253,200,122, 44, 5,113, 1,124,219,250,100,179,192, 38,152, 10, 80, 78,219,191,
- 88,119,153, 43, 0, 70, 10,249, 12, 47,121,185, 71, 23,171, 95,184,116,191,171,101,235, 86,247, 36,228, 21,214,179, 88,189, 8,
-177, 35,132,192,155,195, 61,254,236,151,255, 13,126,248,253,207,113,215,238,160, 32, 87,248, 13, 50,139, 76,152,106,198,130,131,
-229,146, 79,105,217, 2, 80, 50, 88, 94,108,104, 66, 96,152, 38,248, 64, 42, 83,170,174, 35,217,216,114,164,196,178, 68,185,199,
-106, 81,231,167,124,161,168, 22,200,252,250, 41,200, 65,243, 88,211,106,137,202, 42,212, 78,163,171, 21,218, 90,163,113, 18,214,
- 8, 24, 3, 40,145, 96,148, 64,237, 44,186,182, 3, 24, 95, 25,124,128, 72, 25, 34, 5,168,156,224,100,134, 85, 25,157, 83,216,
-213, 6,109,173,113,232,232,223,206, 0,209,247,120,120,120,135,135,227, 17, 99,200, 24,163,192,148,128,113, 14, 24,167,128, 97,
-246,232,125,192, 20, 34,164,182,208,218, 66, 73,139,140, 4,107,137,131,109,149,100,232,199,130,165, 85,188, 75,150, 43,159,124,
-227,247,150, 0, 52,255,124,148, 50,128, 80, 72, 89, 98, 14,137, 70,241,229,103, 78,226,151,186,114, 24,250,158, 98, 96,171, 26,
-167,211, 9, 74, 81,120, 71, 85, 85,136, 57, 97,158,103, 24,107,161,180, 70, 72, 1,167,254, 92, 18,206, 22,178, 84,161,185,229,
-109,160, 74,226, 17,147,220,216,178,158,143,167,228, 85,167, 42,110,178,204,197, 11,157, 51,127, 96,214,228,160,242,193, 18,133,
- 82, 39,111,118,234,107, 81,176, 78, 6,174,247,212,215, 59,117,177,161,233, 93, 59,232,111,121,212,191, 13, 62,179, 29,187, 63,
- 31,217, 95, 22, 66,139,110, 69,222,232, 6,110,193,159,150,113,160, 18, 17, 78, 36,252,199,159,253, 12,255,211,159,253, 91, 52,
-243,140,225,233, 9, 67, 10, 56, 78, 35,178,116,232,170, 6,253,135,247,216,181, 14, 82,120,104, 36,136, 20,208,180, 21,166,105,
- 64, 10, 36, 12, 2, 50, 38,239, 11,115, 66, 27,135,224,125,121,143,140,177, 69, 48,164,249,247, 75, 1, 22, 25,129, 18,221, 50,
- 48,207, 19,229, 46,112, 48, 74, 63, 76,176,174,194, 48,142,144, 66, 99,154, 60,140,182, 8,115,228,181, 30,160,132,132, 51,154,
-138, 26,182,148,146, 47, 92, 66, 75,205,174,144, 12,149, 19,172, 18,176,138, 86,105, 36, 48,205, 48,138, 45,168, 66,194, 41, 5,
- 39, 37,233, 85,216, 37,160, 1, 24, 1,104, 78, 31, 67,206, 48, 70, 17, 93, 46, 39,238,202,233,255,231,156,225,196,183,181,252,
-146, 74,161, 97,238,125, 63,210,164,193,115,150, 58,161, 82,103, 26, 27, 75,137, 48, 17, 88,138,210,204,168, 11,175,154, 10, 85,
-101,225,163, 71, 78,212, 1,142,227,136, 28,105,180, 28, 66, 64,219,118,196,169,183, 26, 16, 20,254, 2, 36, 22,149,101, 4, 22,
-138,145, 82,158,137,114,214, 81,227, 32, 73,188, 26, 67,198, 48,206, 28,175, 75,107,185,221,254,128,211,241, 9, 82,100,178,110,
- 41, 1, 99, 53, 98,206, 56, 30,143,168,170, 6,125, 63,208,232, 91,107, 76, 19, 9,237,250,126, 68, 74, 64, 8, 20,121,186,248,
-251,115, 2, 1,108,250,129, 98, 84,103,143,121,246,248,222,167, 31,227,233,244,132, 24, 19,246,135, 3, 38,239, 49,249,153,201,
-160, 1,119,135, 29,134,177, 71,213, 16,188,167, 90,192, 59,146,124,244,203,202,141,146,212, 60,172, 83, 56, 28,118, 20,136, 51,
-145, 62, 33,179,254, 71,107, 77, 28,247, 68,225, 95,195, 48,194, 90, 83, 20,246, 11, 46,153, 72,136,178,252, 29,146, 9,137,153,
-237,220, 0, 21, 7,231,115, 79, 17,190, 49,113, 2,157,227,175, 1,104, 99,138,142,105,205,222,144,151,107,196,101,213,178,209,
- 26, 73,182,210, 1, 88,136,114,105,173, 50, 55, 7,134, 90, 14, 56, 33, 55, 81,147,156,188,182,228,192,114,133, 73,191,214, 42,
-245,154,243, 94,208,155,114, 81,237,109, 59, 95, 58, 63, 95, 29,238,241,167,191,252, 19,252,224,211,207,209, 86,148,203,124, 1,
-250, 40,136, 82,218,117,151,157,247, 34,106, 75,139,199, 55,208,142,125, 19,170,225,189,135,159, 71,218,109,179,119,146,130,102,
- 56, 70, 52, 5, 72,228,226,169, 22,136,107, 22,119,185,232,200, 26,166, 4,249,178,173, 18,112, 70,160,118, 26,109,165,202, 46,
-189,182, 10,206,106,152, 37, 62, 85,102, 88, 35,209, 53, 14,119,135, 14, 90,100,204,195, 25,113,246,168,180,130, 85, 2, 90, 2,
- 86, 75,212, 86,160,113, 10,109,101,176,171, 13,156,165,108,230,243,233,140,211,121,196,232,129, 49, 8,140, 62, 97,242, 9,227,
- 20, 49, 76, 1,253, 28, 49,250, 4,159, 37,180,117, 48,214,177,208, 40,194,106,141,125, 83, 67,231,140, 48, 17,253,106, 75,233,
- 19, 25, 5,121,187,116,248, 74, 8,202,159,151,228, 5,151,203,222, 55,211, 72,114,152, 71,132, 24, 72,245, 47, 4,186,166,129,
-179, 6,231,227,145,195, 21,106,250, 64, 24, 69,138,120,107,136,186,228, 3,180,209,208, 70, 34,137,140,199,167, 35,179,211, 11,
-148,152, 45,141,145,125,230,155,139, 16,204, 44,207,155,188,128,109,130, 31, 4, 54,203,117,138,105, 23,155,238,116,137,241,221,
-120,211, 23,208, 76,206,236, 80, 40, 59,173,124,179,219,189,178,119,111, 46,194, 53,135,156,222, 95,254, 32, 47, 95,115, 83, 28,
-172, 34,190,245,245,138, 43,228,227,173,208,154, 91, 23,249, 22, 37, 43,113,201,190,191, 16,157, 94,152,249, 86, 53,124,230, 68,
-170, 92, 80, 18,139, 22, 96, 93, 61,252,127,148,189,105,143,109,219,117,158,247,204,110,181,123,239,170, 58,205,109, 72,145,186,
-164, 72,137, 38, 37, 33,254, 18,219,177, 12, 73, 22, 12,197, 65,128, 32, 65,146, 79, 49, 16, 32,200,255,240,175,115, 62, 57, 8,
- 98, 39,176,101, 73,142, 76,138,188,247,116, 85,181,187,213,204, 46, 31,198, 92,107,239, 58,205,189, 50,137,131,115,238,105,170,
-219,181,230,152, 99,140,247,125,222,172, 51, 48, 83,165,153,255,242,119,127,194,159,252,252,247,105,199, 17,237, 61,129,204,155,
-253,129, 33,102,218,190,231,225,221,189,116,145, 70,241,248,248, 64,211, 72,110,247,233,124, 46, 59, 67, 35,126, 98,165,201, 74,
-139,213,171,252, 48,218, 72, 28,106, 93, 83,215,245, 37,142, 82, 35, 30,240,217, 99,157, 93,115, 39,150,248,213,227,225, 32, 20,
- 59, 43,204,249,251,135, 71,198, 81, 24,241, 49,102,180, 50,226, 44, 40,157,155,117, 26, 83,116, 48, 26, 73,226, 90,190,243,108,
-129,206,168,156,138, 13, 84, 83, 59,141, 53, 98,233,211, 69, 79, 35, 86, 84,112, 70, 99,138, 95,223, 26, 65,106, 47,138,245,133,
-125,224, 42,209, 20,132, 24, 10,155, 66,179,217,110,200, 57,115,115,119, 87, 24, 28,107, 71, 34,222,124,231,240,193, 83, 57,193,
-144, 90,103,153,166, 9, 99,197,242, 21,188,103,211,245,140,227,185,228,111, 11, 45,210,207,158,219,219,173, 60, 55, 49, 22,175,
-125, 36, 45,217,230, 37,172,164, 45, 84, 56,165, 33,196, 80,152,245,208,212, 13,195, 48,174,121,241, 49,202,107,176,219,108,201,
- 36,198,113,164,105, 59,225,216,151,245, 90,140,242,186,182,109,195,110,187, 99, 60,159,136,193,211,246, 45,214, 89,124,144,241,
-253,227,227, 30, 87,213,196,132,196,202,246, 61,243, 56,173,207,204,188,104, 36,148,188,222, 90,233, 53,165,239,116, 58,163,140,
- 5,165, 56,156,142, 24,171,121,254,252, 5, 15,143, 7,172,115,116,125,203,227,254, 88,120,243, 30, 31, 2,125,223,113, 60,158,
-176,136,102,168,107,154, 75,189, 41, 26, 34, 93,244, 5, 49,200,228,177,237, 90,114,138,156,143,103, 89,227,106,153,194,104,163,
-112, 86,132,139,199,211, 64,140,137,182,233, 8, 81,166, 26,231, 97, 44,196,191, 74,198,245,174, 90, 45,141,179, 23, 97,100, 12,
- 34, 56, 52,250, 2,251, 25, 70, 89, 49, 69, 31, 8, 33, 17,188, 48,226,175, 9,154, 57, 21, 0, 88,121,222, 83,129, 90, 93, 84,
-242, 18,238,181,172, 95,237, 19,130,220,251, 99,117,165,100, 44,180,250,204, 63,164, 97,228,140,168, 97,211,123, 17,141, 31,116,
- 23, 23,106, 87,206, 98,234, 39, 94, 14,237,103,187,103,252,236,199, 63,225, 7, 95,126,159,174,106, 46, 7, 78, 33, 48,165,156,
-209,107, 81, 15, 23,117,122, 25, 53,171,226,119, 22,128,224, 18,115, 90,212,164, 42,211, 85,142,193,138, 16,103,217, 37,167,197,
-223,167, 46, 89,218,185, 20, 6, 93,210,143, 84, 25,209, 43,173, 74, 50,154, 8, 86,172,145,157,125,101, 21,181,147,194,237,140,
-198, 26,133,211,154, 74, 57,176,137,168, 0, 2, 74, 37,172,245,220,117, 13,207, 55, 47,121,177,177,124,253,205, 61, 42,103, 25,
-191,215,166,140,225, 43,218,170,162, 41, 74,212,121,158,137,209, 51,249, 76,200,142,152, 33, 17, 73, 73,210,133,134, 57, 50,197,
-196,156, 50,190,140, 14,215, 80, 84,157,139,175,213, 96, 53,132, 40,163,114,209, 53,202,229, 37,165,128,213,245, 21, 5,112,217,
- 99,199, 34,168, 91, 94,211, 76,107, 52,222, 89,206,117,205,182,235, 4,173,155,164, 35,105, 10,172, 35, 20,159,237,233,116,226,
- 71, 95,253, 54,183, 55, 91,130,159, 57,143, 35,231, 65, 58, 19, 87, 87, 84,181, 33,107, 9,246,240, 37,222,117, 77, 9,204,203,
- 14,251,210, 13,231, 84,246,238,165,123,126, 42,142,227,106,132,124,201, 14, 16,203,213,101, 4,175, 11, 49,110,161, 57, 93,190,
- 31,185,166,177, 92,105, 64,158, 2,147,101, 52,187,236,120,205,147, 81,245,117,135,158,159, 4, 19, 47,221,125, 94,173,116,151,
- 75, 0, 79, 58,180, 79,229,174,127, 27, 14,118,253,243,204,186,122, 89,158,215,247,179,221,223,223, 54,228,171,232,220, 44, 15,
- 26, 73,103,178,214,168,152,177,121,121,162, 2, 77,246,252,211, 63,248, 67,254,241,207,126,142,122,120,196, 40,197,155,253, 61,
-131,214, 76, 40,180,169,121,220, 63, 50, 17, 25,114,226,124, 56,241,252,249, 11,222, 28, 30,168,156, 19,104, 75,136, 76, 49,130,
-177,156,167, 9,227,156, 76,150,140,140, 28,131,247, 84,174,146,144,150,105,162,109,107,114, 2,239,103, 82,170,113,181, 16,208,
-172,202,108, 54, 66, 14,203, 57, 18, 99,194, 40,139,247, 17, 91,213,178, 99, 70,175,221,100, 52,162, 46,142, 42, 99,172,162,107,
- 42, 81, 49, 43,133, 31,207, 56, 35, 0, 16,101,220, 42,142,140, 36, 92,101,113, 78,184, 18, 49, 37,114, 10, 24,173,203,138, 79,
- 60,210,198, 80,252,196,226,192,145, 24, 88,199, 28, 35,196,136, 9,134,190,223,176,187,217,202,164,202,251,130,102,149,226,105,
-172, 92,118,141,157,201, 33,136,127,124,154,153, 39,177,225,110,182, 29, 62,122,234,186, 89, 59,103,177, 87, 5, 65,230, 22, 54,
- 7, 74,166, 25, 77, 91, 49,141, 35,211, 60,200,186, 68, 65,156,101, 58, 39, 1, 38,162, 12, 31, 75,225, 62, 30, 78,244,155, 30,
-109, 45, 41, 4, 81,232,151,221,185, 66, 52, 11, 98,229,149,230,167,235, 58,129,164, 24,131,181,154,186,113,156, 79, 35,227, 40,
-140,252, 20, 34,181,171,136, 69, 92,103,173, 37, 76,113, 37, 4,158,207,103,154,182,101,255, 56, 23, 77,147,136,249,250,190,231,
-120, 62,163, 53, 56,167,159,184,132, 98, 12,114, 9, 42,207,142,143,129, 87,175,222,240,139, 95,124,129,179,142,183,111,222,241,
-219, 95,253,144,174,173, 57,157, 7, 97,231,135,204,253,253,129,155,237,150,241,116, 66, 13,153,237,110, 67,215, 54, 84,181,229,
-120, 58, 49,143, 94, 38, 66, 90,190,119,200,154,253,227,190, 92, 42,243,234,198, 64, 65,215, 52,160,228,115,237,251, 6,239, 3,
- 15, 15, 15,236,110,101,226,161,141, 97, 24, 38,234,186,161,170, 26, 89, 41, 25, 35, 31,143,173, 75, 72, 16, 12, 49, 82,149,162,
- 45,105,135, 53,211, 48,174, 57,245,185, 88,128,157, 19,235,158,179,118, 77,200,188, 94,115,103,205,154, 47,177, 78,212,175,208,
- 90,223,178,205,187, 20,113, 93,186,244, 15,186,151, 18, 6,243, 93, 59,248, 39, 64,145,114,128, 44,251,211,109,191,229,199, 63,
-250, 17, 63,248,173,223,146,253, 89,190,236, 63,151, 49,251,226, 25,143,233, 35, 9, 97,235, 78, 61,149, 61,247,149, 80, 47,201,
- 39,221, 84, 21, 77, 85,203,104,237,186, 91, 90, 80,158,198,160, 48, 69, 12, 37,247,118,249,255,229,109, 25, 40,202,112,168,157,
-116,227,181, 51, 43,101,232, 66, 12, 75,232, 69, 36,163, 53,181,182,212, 90,211, 89, 69,163, 60,207,122,195,207,127,250, 5,255,
-224,239,255, 14,127,239,167, 95,240,253,207,123, 94,222,181,220,109,106,250,214, 21, 66,147, 34,134,192, 52,205,204,147,151, 56,
-192,133,112,166, 52, 33,101,102,159, 8, 49, 10,156,101, 97,144, 23,127,179, 50, 26,227,100,180,102,157, 89, 97, 8, 75,161, 94,
- 17,189,168, 69,110, 8, 73, 68,114, 38,231, 85, 5,111,173,112,163, 43, 39, 83,137,166, 22,235, 94, 95, 11,252, 70, 23, 18, 84,
- 85, 85,100, 50, 33, 74, 16,206,225,176,103, 26, 71,218,166,165,109, 26,230,113, 40,176, 13, 71, 83, 59, 54,125, 79,215,212, 88,
-205, 26,139,170,184,160, 93,213, 90,161,243,202,109,207,101,205,162,222, 27, 35,175,122,179,180,136, 31, 47,194, 47,115, 53,170,
- 90,210,222,242,199,138,226,199,188,159,239,141,205,175,115,205, 63,165, 66,121,106, 93,203, 79,152,238,215,121, 7, 79,178,215,
-191,229,109,253,157,246,229,233,162,180,191,126, 30,212, 39,214, 15, 31,227,186,235,114, 57, 47,155, 39,162, 2,159, 3, 58, 69,
- 54, 9,254,236,103,191,207,159,255,236, 15,232,207, 19,225, 60,112,156, 70,238,253, 76,172, 28,231, 24,240, 57,128, 81, 28,134,
- 19,119, 47,158, 97,172,140,108,141,210,236,186, 94, 52, 26, 5,215,234, 42, 87,166, 95,153,105, 30, 11,140, 41,175,130, 55,233,
-100, 22,104, 75,186,140, 25, 75, 81,106,219,174,136, 48, 19, 49, 65, 85, 75,192,200,188, 22, 58,181,230, 86, 27,163,203,249,177,
- 76,228,100, 34,208, 54, 13,206, 10,198, 88,169, 76, 93, 59,250,174,193, 26, 13, 57,210,212,142,182,177, 52,149,197, 25, 69,142,
-129,202,105,156, 85, 52,141,163,174,229,217,111,172,165,118,142,202, 89,140, 53,104,163,176,149,124,142, 77,219,138,189,201, 79,
-146,127,176,184, 12,202, 26,175,170,196, 63,190,219,116,216,242,123,214, 24, 98, 22,193,105, 86,138,172, 13,174,170, 10, 20, 37,
- 99,173, 91,207,227, 5,113,171,141, 66, 91,205,105, 56, 1, 89,240,215, 41, 16, 83, 40, 45, 78, 44, 31,155,120,246,181,214,156,
-202, 56, 59, 39,228,140,153, 61,167,243, 32, 22,177,166,149, 93,112,193, 66, 87,117, 77, 76,153,211,233,188,194, 91,154, 69,239,
-224,100, 71,111,173, 41,188, 9,153,162,244,125, 79,211,212, 12,227, 72,215,245,228, 4, 55, 55,183,162,164,207, 25,235,204,106,
- 45, 91,206,162,229,109, 56,231, 72, 41,172,141,198,233,116, 64,145,216,244, 29, 49, 6,182,155,158,105,138,188,121,243,150,155,
-221, 13,155,190,229,237,155, 55,124,241,217, 75,156, 17, 90,219, 34, 38,155,189,167,219,108, 72,100,206,195, 64,136,126, 21,238,
-118, 93, 43, 74,119,165, 10,216,198,211,182, 29,195,121,162,239, 55, 88,235,104,154, 70, 10,107,142, 76,211, 72,215, 53,220,220,
-244, 82,216,131,164,124,198, 57,112,179,149,208,170, 80,108,134,199,211, 68,202,224, 92, 45, 28,255,162, 93,145,201, 75,192,123,
-177,103,250,217,211, 52,109,105,160,243,170,153, 88, 62,166,235,179,103, 57,127,100,141,148, 63,212,217,148,103,223, 52,182,164,
-180,173,105, 57,165, 43, 71,175,194, 14,197,135, 30,246,133,105, 78, 33,143,125,204, 70,116, 25, 17,170,213,223,190,130,107, 80,
-144,160,182, 53, 95,253,240, 43,190,250,193,111,179,109, 55,235,206, 52,151, 84,163,229,199,154, 76,163, 46,170,162, 69,244,246,
-228,172,188, 58, 7,151, 27,206,242, 57,101, 40,226, 45,177, 81, 41,125, 21,115, 87, 58, 56,173,148, 60,128,106,185,129,167,117,
-127,110,181,236,158,156, 81,212,149,252, 92, 25,133, 53,106, 29, 83, 59, 3,206, 26,172, 21,209,157,252, 59,249, 97, 72, 50,138,
- 55, 80, 91,104,107,205,166,171,232,155, 10,171,197, 19,111, 84,146,191,107, 52, 42,199,149, 62,229,125,100, 10,137,209, 39, 78,
-163,231,116,246, 12,115, 96,142, 16, 51,248, 8, 83,204,132,172,112,117,131,169,108,217, 93, 42,186,182,166,177,154,241,120, 32,
-133,112, 97,140,103,228, 50, 83, 46,108, 86, 43,156,210, 56,163,169,173,166, 42, 5,221, 57,133,179,242,119,146, 82,140,179,103,
-152, 69,163,176,176,186, 55, 59, 9,128, 56, 28, 14,107, 66, 81,206,226,193, 61, 30, 14,178,211,203,148,236,107,195,102,219,145,
- 82,226, 55,191,249,102,205, 51,190, 98, 30, 94,141,221, 75, 87,187, 80, 91,243,147,217,251, 90,216,197, 50,116,177,188, 93, 23,
-232, 5, 32,115,217, 41,235,167, 22, 17,117,101,215, 33, 63, 9, 79,200,239, 61, 60,107,152,194, 85,161,126, 95, 92,246,254,152,
-124, 45,242,234,170,149,127, 47, 28,230,227,243, 45,190,179, 32, 63,177,237, 93,107, 94,158,216, 73, 65,125,171, 12,111, 25, 24,
- 20,178, 95,166,112,190, 19, 45,145, 63,253,217, 47,248,111,254,240,191, 32,221,191,195,251,153,153,196,246,197, 11,142,227, 72,
- 70, 49,140, 35, 63,250,209,143,185,191,127,195,205,237, 13, 83,144,220, 5, 25, 81, 54,236, 79,103,230, 16,232,182, 91,162,130,
-195,241, 72, 86,114, 1, 92,198,192,193,207, 98,171,180, 86,232, 95,139,101, 84, 43,130,247, 52, 69,132,196,138,216,149, 81,242,
-233,116, 38,134,132, 47,248,209,105,242, 34,194, 42,170,116,173,236,122, 78,144, 83,217,215,138, 23,220, 89, 67, 87, 87,196,224,
-233,154, 86, 10, 65,177,220, 85, 70,211, 86,110, 45,182, 75,251, 99,173,147, 68,194,130,118, 54,229,237, 40,205,250,253,104,156,
-195, 22,194,217, 56, 12,164, 40, 33, 43,222,123,250,174, 99, 26, 71,172,177, 37, 24, 6,166,225, 76,244,179, 92,226,103, 79, 68,
-161, 93,181, 38, 0, 58, 91, 49,207, 50,158,149,100, 58,233,158,231, 73, 70,215, 33, 10,187,126, 9, 78,114,206, 92, 89, 50, 11,
- 35, 10, 69, 85,215,107, 56, 73, 42, 86, 40, 87, 9, 68,167,174,157, 56, 9,202,197,220, 90, 87, 2, 82, 68, 76,217,247, 61,111,
-223,189, 17, 86,122,185,116, 8,237, 78,216, 34, 41, 73, 39,126,179,219, 48, 7,121, 45, 33,179,223,239,217,108, 37, 23, 62, 4,
-153,204,161,138, 98, 95,201,235, 45, 8,213,150,169,184, 29,118,219, 94,152,244, 90, 46,229,195, 56,150,143, 89,180, 22, 25, 9,
-146,121,245,234, 45,191,247,123,191,199,219,183,111,153,231,192,110,183,145,240,148, 81,178, 46, 66,188,160,204,251,141, 76, 24,
- 42,231, 4, 97, 59,141,162,222,215,162,166, 95, 38,105,195, 48, 18, 66, 96, 24,166,149,250, 39,174, 12, 83,104,165,170,136,224,
- 18,125,223, 49,156,135,146, 4,120, 68,107, 83, 86, 36, 18, 25, 60,205,190,100, 16, 8, 39,127,179,118,199,246, 3, 0, 0, 32,
- 0, 73, 68, 65, 84,233, 75,140,111,189, 2,147, 82, 65, 31, 47,228, 68, 85, 50, 3,188,151,104, 99, 73, 33,188,136, 86,245, 18,
-189,154, 63,174,191,201, 57, 99,106,219,252,203,204,197,138,182, 14, 27,181,190,242,206,242, 94, 44,229, 5,228,161,174,186,121,
-165,213, 7, 69,125,165,168,105,181,172, 24,139, 64,197,226,180,229,139,207,190,228, 39, 95,253,132,187,237,205,138, 62, 76,177,
-228,215,190, 39,226, 81, 92,143, 99,151, 79,180,116,102, 41,173,137,114,226, 93,191,194,138,114,217,165,134,146,159,158,214,110,
-142,146,244, 86, 48,174,229,191,109,177,234,217,133, 96,165,165,120, 59, 35, 5,174,178, 10,187, 8,235, 22, 4,108,217,181,155,
- 2, 14, 16, 62,188, 46,127, 39, 99,149, 70, 23, 34,219,162,234,139, 33, 50,142, 19,227, 56, 74,104, 66, 74,194, 59, 46,140,227,
-224, 35,115,136,140,179,103,244,137,227, 48,113, 60,143, 82,208, 67, 36,103, 65,193,134,172,240, 33,225, 83,162,170,106,170, 66,
-133,179,214,210,119, 13,206,128, 63,159, 74,103,124,137,139, 21, 40, 92, 44,126,123,189,238, 16,107,103,169,156,150,238,196,136,
-214, 64, 23, 11,210, 28, 34,135,243,200, 84,246,106,117, 83,179,221,246,156,207, 39,206,231,243, 26,159, 89, 57, 43,151,157,242,
-218, 25, 99,176,218,209,118, 13,183,119, 59,198,105,228,111,126,249, 27,124, 72,235,101,237,137,150,125,193,172,230,188, 96,224,
- 47,176,152,171, 44,227,101,146,162,242,123, 50,142,235,215,254,189, 96,244,203, 0, 64,173, 17,192,215,148,185, 39, 20,167, 53,
- 51, 94, 61,221, 74,231,111,207, 65, 79, 87, 83,165,139, 66, 62, 61, 21,235, 41,158,216, 59,243,119, 32, 97, 63, 84,208,171, 15,
- 45,126,234, 90,215,242, 52,249,238,195, 73, 64, 94,119,191, 20,125,133,201,178, 35,174,178,231,143,126,254,115,254,236,103,191,
-207,173,213,188,122,251, 27,166,228, 9, 40,148,171,184,127,124,196,218,138,195,195, 3, 63,252,254,111,225,199,129,103,207, 95,
-112, 26, 70,234,182,103,127, 60,224,170,138,215,239,222,209,223,220, 96,154,154,195, 48,112,158, 70, 41,138,117,181,174, 75,130,
-159, 75,166,117, 42,121,234, 18, 64, 66, 74, 5, 85,154, 46,175, 75,193, 86, 15,227, 12,104,137,203,180,174, 20,125, 41, 24,178,
-143,212,229,224,190,208, 6, 41,250, 33,107, 53,219,190, 43,171,152, 76, 83, 11, 92, 37,198, 64, 83, 88,239,206, 25, 92, 93,173,
- 17,166, 25, 4,101, 90,104,105, 18, 90,100,217,238, 54, 84,117, 37,226, 81,224,230,246,150,156,132, 70, 55, 20,254, 57, 57,161,
-148,124,110,227,112, 38, 69,137,123, 78, 49,200,199, 20,101,239, 29,114,190, 68, 55, 27,195, 56, 77,164,152, 25,167,105,189,158,
- 57,231,152,166,113,125, 29,171,166, 34, 36, 41, 8, 77, 43, 94,240,156, 19,117, 93,139, 75, 58,171,245,123,222,251, 80,160, 54,
-117, 17,187,102,234,186,193, 88,203,205,110,203,241,120, 90, 11,161, 40,222, 37,136, 38,149,209,187, 46, 13,135, 56, 14,116, 41,
-100, 51,135,195,145,174,235,176, 70, 9, 28,203, 79, 69, 13,238,139,117,207,112, 60,158,200, 89, 70,217, 62,132,130,222, 53,132,
- 32,137,116, 41,165, 21, 9,172, 77, 81,191,107,225,235,135,144, 10,231, 95, 94,167,148,147, 96, 93,141,161,105,218,149, 0,151,
-163,236,253,231, 16,160, 20, 78,128,105,156,104,154,122,137, 67, 96,211,111,152,198, 9,173, 5,192,211, 52,205, 90,216, 37,238,
- 87,224, 54,211, 52,202,219, 80, 2,231, 89, 48,180,117,237,152,231,137,166,170,202, 19,166,169, 42,199, 56,142,132,224,201,200,
-196, 67, 27,187,242,252,115, 89, 91, 44, 14, 5,113, 19, 45,250,174, 75,241, 95,143,188,178,211, 79, 41,173,172,137,143,113, 43,
- 46, 43,244, 66,164,171, 77,253, 47,223,183, 8, 73,156,159, 45,153,182,242, 2, 94, 19,224,180,214,130, 15, 45,221,243,117, 39,
-191,136,143,150,183,185,102,137, 95,131,103, 10,247,229,238,230,142,159,124,245, 59,188,120,246, 2, 87,242,184, 99, 76, 43, 60,
-102, 9,163, 88, 74,123,138, 97, 29, 65, 92,139,149,214,159,139,255, 56, 47,227,228, 44,133,246,130,207,150,157,108, 8, 98,179,
- 72, 11, 82, 84, 23, 5, 63, 98,243, 48, 90, 50,205, 85,142,232,156, 10,119, 89, 58,117,163, 51,214, 8, 80,192, 60,153,214, 94,
-194, 68,228, 27, 39,173, 7,182, 94,237, 8,170,120,164, 53, 41,194,236, 51,167,243,196,233, 60,113, 60, 14,204, 62,144, 81, 24,
- 39,183,215, 16, 2,147, 15, 12,163,103,152, 60,195, 52,115, 56,141,156, 7,207, 28, 18, 10,129, 78,200, 67,171,153, 99,194,135,
-132,171,235,114, 27,148, 48,132, 77, 87, 99,178, 71, 71, 79, 91, 89, 9,192, 40, 17,151,210,132,164, 18, 95,169,101,164, 88, 89,
-154, 74, 83, 87,134,218,137, 64, 68, 62,111,185,149,205, 33,177, 63,157, 57,207,158,144, 34,219,221,134,182,171,121,120,120, 96,
-154, 38,156,147, 7,101,187,217, 8, 42,209,136,223,212, 88,139,181,142,205,182,103,123,179,225,221,253, 3,191,250,213,215,132,
- 88, 10,233, 74,100,121,223, 39,253,148,121, 32, 20, 49,181, 10,208,158, 40,199, 11, 20,238,178, 99,190, 42,240,107,145, 54, 79,
- 69,104, 87, 64,135,156,179,124, 77, 47,184,164, 39,233,124,121, 41,238,239,141,186, 63,237, 69,127,154, 99,176, 88,222,244, 21,
-202, 86,125, 42,148,229, 59,212,238, 79,144,182,239,179,160, 87,231,194, 53, 71,255,170,131,215, 87,107,132, 50,245, 16,166, 76,
-196,168, 68, 71,228,143,126,250,187,252,207,255,228,143,201,251, 71,190,126,243, 27, 84,107,139, 23,186,231,120, 58,115,251,252,
- 57,167,113,100, 60,143,188,184,123,206,233,112, 96,119,123,199, 28,225,111,191,249,134,126,187,163,106,106, 78,211, 68,182,134,
-195, 48, 50,204, 19,177,136,220,198,121,194,186,170, 8,146,116, 1, 22, 57,114, 25,155, 43,181,168,210, 37,172, 67,151, 92,243,
-133,205,157,179,140,142,143,231, 97, 5,203, 24, 99, 25,199,153,174,235,105,138,130, 57,198, 88,158, 75, 85,162,142,129,152, 4,
-198,164, 21,164,200,102,219, 67,166,228,151,203,168,179,223,244, 84,117, 93, 46,174, 45, 33,102,182, 55,183,160, 20,214, 85, 43,
-243,161,109,155,117, 7,234,189,132,195,248, 81, 58,239,113, 30, 47, 96,151,156, 72, 49, 23, 32,147,151, 46,184, 52, 79,169, 76,
- 35, 19, 10,159, 51, 33,178, 70, 11,167,144,137,197,223, 62,205, 94,208,169, 69,137,190,136,165,146,202, 56,235,164,139,188,210,
-162,248,152, 49,214, 17,202, 84, 77,105,197,118,187, 43,248,218,176,142,125,251, 77,143, 45,162,177,119,239,222,177,217,108, 56,
-157, 78,236,247, 7,172, 21, 53,254,233,116, 20,129, 89, 1,211, 52,149, 0, 94,206,167, 51,227,228,177,149,163,107,106, 92,101,
- 57, 30,143,244, 93, 87,138,117, 46, 5,218,112, 60, 30,185,189,189,193,207,146,134,105,172, 91, 31, 80, 99,132,105, 96,221, 18,
- 67,170, 49,218,174,170,119, 31, 34, 41,102,110,159,221, 18,163, 20,249,199,199, 71, 94,190,124, 9, 36,198, 97, 88,117, 95, 41,
-179,174,191, 20, 18,184, 50, 79,243,149, 2, 62,178,219,109, 72, 41,113,127,255,184,198,252, 26,163, 75,162,222, 21, 22, 90,171,
-213,139, 47,107, 76, 4,150, 84,214,189,146,201,238,136, 49, 10,202, 55,103,134, 97, 94, 73,136,203, 52, 56,145, 80, 89,116, 17,
-242,182,106, 81,186,151, 38,212,185,234,234, 28, 74, 43,239, 32,167,247,178, 86,174,234,226,117, 81, 95, 48,196,250,169,207, 69,
-125,152, 49,157, 47,105, 89, 31, 30, 92,139,191,249,189,201,247,226,157, 83,234, 73,188,229, 37, 4, 94,216,192,223,251,226, 11,
-158,221,222,137, 15, 29,201,235,142,197,118,182,224, 65, 99, 94,136,113,241,195,189,230, 34,146, 43, 4,188, 69, 80,124, 73, 62,
- 45, 86, 40,196,186,226,172,166,169, 28,109,137, 0, 93, 71,107,171,221,206,148,131, 55, 21,148, 45,133, 23,188,228,182,231,226,
- 99, 47,232,212,210,245,199, 24,241, 62, 49,135,204,236, 51,211, 28,153,198,192, 56, 6,166, 41, 72,134,111,148, 64,139, 41, 38,
- 6,159, 56,207,145,227,217,115, 56,206,236,143, 51,231, 41, 49, 71, 69, 72,138, 97, 10,236, 79, 19,247,135, 51, 15,135,129,135,
-227,192,227,113,226,241, 56,114, 56, 79,140, 62,144,115, 9, 3, 16, 55,224,250,205, 40,187, 59,179,118, 40, 86, 65,165, 97, 83,
- 59,158,221,116, 60,187,233,184,217, 84,244,181,128,121,186, 90, 44,121, 77,109,112, 14,180,201, 24,155,169,107, 41,232,173, 83,
-180, 86,130,102, 26, 11,173, 83, 52, 86, 97,149,172, 27,140, 81, 66, 87,202,137,224, 39,185,236, 24, 67,215,182,212,101,239,238,
-156, 91,147,182,172, 53, 37, 90, 51,175,233,121,139,218, 90,152,255, 11, 71, 32, 94,232,113,215,185,244, 87,186, 14,149, 64,167,
-101, 52,175,214,239,187, 15,108,102, 31, 89, 77,235,124,249,241,145,127,242,193,239,229,171, 48,153,107, 29,202,199,160, 76, 31,
- 3,184,100,226,101, 15,127,229, 9,191, 78,118,187, 30,245, 47, 41,109,239, 95, 28,190,149, 98,247,254,199,176, 8,252,138, 19,
- 32, 82,126, 86,200,222,182,168, 97,178,202, 2, 9,202,242,189, 82,229,192, 63,252,233, 79,248, 23,127,250,103,124,158, 20, 15,
-239,222,146,157,229, 60,122,154,237,142,183,251, 61,253,102,203,195,187,123, 26, 87,241,163,159,254,148, 73,131,174, 26,148,109,
-248,213, 55,175, 24, 67,102,119,247,156,183,239, 30, 49,214,210,111, 68,232,100,157,163,223,108,164,227,180, 18,210,177,216, 30,
-115,241,205, 11,178,186,132, 94, 88, 75, 68,137, 90, 62, 95,194,145,150,174,254,241,241,192, 52, 78,114,153,172, 29,174,182,220,
-222,221,136,167,121, 24,100,247, 94,220, 46, 49, 73, 78, 54, 40,124, 8, 28,143, 71, 98,233,158,114,230, 73,162,152,177,154,166,
-107,203,229,215,113,123,123, 43, 49,160,203, 89,153, 97,187,217,148,221,118, 42,120, 87,131,202,112,218, 31, 32, 70,210,236, 37,
- 67, 59, 8, 82,148,156, 9,179, 68,113, 42, 9,168, 32,139, 32,166,164,130, 73,250, 90, 70, 10,109,215,246, 76,211, 76,140,153,
- 24, 18,227, 44, 35, 89,231, 36,126, 52,149, 81,163,177, 18,210, 20, 67,228,116, 56, 73,247,151, 97, 28,167,114, 86,229,117,218,
-160,148,102, 28, 71, 98, 76, 18, 75, 27, 19,195, 89, 46,102,203,100,111, 28,231, 18,105,171,137, 49, 51,142, 51, 57,101,218,182,
-229,112,216, 99,173,185, 80, 70,115, 17,205, 57,195,233, 52, 10,193, 82,201,120, 60, 37, 73,158, 91, 46,177,214,138, 7, 62, 71,
- 73, 70, 67,201, 40,123, 24,134, 21,156,178,219,237, 10,138,118, 96,154,102, 66, 76,212,109, 75,221,246, 36, 12,227, 60, 51,142,
- 51,179,247,108,119, 27, 66,200,188,122,253,170, 92, 10, 89,119,254,187,109, 79,223,117, 52,117,117,101, 45,213,156, 78, 35,231,
-243,196, 60,123,166,105,228,230,118,203,243,231,119, 76,211,200,126,191,199, 90,129,233, 44, 22, 70,185,172,137, 48,118,158,101,
-181,115, 60, 30, 49, 74,227,140, 45,194, 95,203,121, 56,130, 74,156,206, 7, 66,244,116, 93, 45, 92,131,224, 87, 55,136,224,202,
-195, 90,199, 66, 8, 40, 35,130,109,165, 53, 33, 69, 66,138, 5,234, 99,214,218,164,175,116, 65, 10, 85, 86, 79,113,157, 66,166,
-116, 65,101, 75, 67,158, 21,105, 25,125, 22, 63,248,197, 66, 36,135, 94,250,216, 33,146, 47, 66, 57,190, 51,100, 66,173,235, 68,
-173, 13, 58,195,179,219, 59, 62,123,241,114,181, 82,164,235, 14,189, 20,232, 68,126,111, 76, 40, 93,239, 37,138,179,192, 97,202,
-126,232,186, 27,201, 2,161,135, 88,152,208,133, 79, 47, 56,215,138, 97,246, 4,194,218,153,169,210,210,201, 56,182, 88, 25,148,
-198, 44,184, 77,181, 4, 5, 44,208, 27, 10, 66,163, 40,181,201,196, 36, 66, 59,149, 51, 36, 91, 68,103,145, 89, 37,178, 53, 36,
-173,209,217,144,179, 96, 86,103, 31, 57, 15, 35,211, 36, 24, 72,103, 12, 33, 41,142,167, 81,236,100, 11,205, 46,101, 98,150,155,
-233, 56,207, 34, 76,179,166,220,202, 68,165,171,117,197,209, 39,140, 55, 34,146,179, 22,109,140,236,248, 85,166,171, 52,109,211,
- 98,179,224, 33,207,154,226, 55,135, 16,202, 3,225, 52,198, 10, 61,203,152, 68,227, 12,213,178, 82, 49,197,126,164,192,153, 44,
-249,111, 9,233,202,219,154,241,124, 36,148,116,165,202, 58,218,182,145, 46,221, 85,197,215, 42,220,107,103, 37, 78, 48,172,135,
-106, 66,105,241, 12,103,226,123,163,226,107,171, 88,217,119, 47, 58,136,252,116,205,147, 21,151,152, 81,242,199, 25,232, 34,227,
-192,228,111, 1,180,228, 15,125,221,215, 59, 32,157,191, 29, 16,243, 49,148,235, 21,231,142,107,255,136,122, 47, 39, 94,103, 72,
-239,231, 36,103,190, 19, 75,251, 1, 51,126,189,140, 95, 50,228,151,168,212,245,153,186, 98, 58,231,229, 82,156, 19, 85, 8,252,
-253, 31,253, 54,255,235, 63,255,231, 60,211,154,255,243, 95,253, 31,220,126,254,146,199, 97,162,169, 28,199,121, 36, 87,150,100,
- 20,109,211,240,189,239,255,144,127,243, 23,255,158, 47,191,250, 10,234,134,255,248,155,175,177,155, 29,214,142,188,219, 31, 9,
- 9, 94,126,246, 5,239,206, 7,178, 82,104,227, 56, 15, 3, 89,137, 80, 44, 71, 17,191, 29, 14, 7,188,247,156,207, 35,119,119,
-119,146, 87, 96,237,170,169, 89,180, 12,137, 76, 76, 30,231, 58,230,121, 90, 15,197,165,211,159,125,224,213,235,215,104,229,138,
- 87, 88,254,205, 34, 6,140, 49, 98,156, 69,147,241,243,204, 60, 59,113,135, 88, 75,111, 36,105,173,174, 28,231,211,145,170,114,
- 76,227, 88,226,152, 51,214,106,230,113,146, 24,234,148,200, 24,156,210,204,195,200,120, 30, 74,161, 21, 70,134,178,134,121,217,
-139,106, 25,227, 86,198,226,227,194, 20, 95,114,185, 19, 23,173, 99,105,108,178, 88,127, 31, 30, 30,200, 49, 17,178,160,109,115,
-148, 75,199,233,116,150,175, 93, 46,234,254, 20, 37, 41,175,188,248, 41, 72,224, 82, 74,226,120, 73, 73,146, 43,171,186, 18,114,
- 92,134,148, 19,181,173,215,175,235,233,116, 98,179,105,214, 81,180, 28,195,154,174,171,201, 57, 50,140, 3, 77, 83,173,108, 3,
-173,138, 5,208,106,170,218,209,199,150,199,131,216,235, 98,200, 84,174, 42,106,238, 72,211, 86, 60,220,239,105,154,142, 23,207,
-159, 23, 6,189, 20, 75,107, 29,179, 95,112,192,150,166,105,120,216, 31,208, 78, 51,249, 25,165, 21, 77, 91, 99, 12, 50, 33,213,
- 2,186, 57,158, 7, 42,235,120,249,249, 11,246, 15,247, 52, 77,141, 49,154,121, 30,233,187,150,199,227, 9,165, 68,196,168,107,
-135, 46, 81,185,135,195, 94,242, 5, 42, 65,236,206,243,204,179,103, 47,105,219,150,105, 26, 73, 57, 80, 87, 86,194,108,154, 22,
- 77, 69, 74,153,113,156, 48, 70,201, 5, 39, 36,246,251, 3,183,183,183, 12,197,161, 0,186, 52,163, 77,113, 95,164, 2,235,145,
-231, 46,198,248, 68, 52, 27,130, 68,123,175,240, 39, 22,205,134, 93, 5,193,215, 52, 71,165, 13,196, 82,192,139,251,102, 65,116,
-167,229,250, 94,234,133,229, 63,227,127,203, 72, 92, 95,197,163, 62,153,233, 93, 31,200, 87, 81,148,178, 23, 16, 56,130,216, 62,
-106, 94,190,120, 41,252, 98,173,139,101,226,106, 20,184,140,204,214, 0,143,139, 39,249,125, 5,113,140,113,141, 92,213,250, 98,
- 29, 18,252,107,186, 98,188, 95,138,178,179, 26, 99,132,146,149,150, 61, 93,202, 43,248, 68,233,136, 50,200,216, 56,137, 62,220,
- 44,159, 82,129,221,168, 98,132, 78, 41,175,217,219, 41, 5,177, 94, 69,131, 10, 25,157,196,106,151, 18,228, 74,110,179, 90,233,
-226,159, 77, 76,147,140,213,231,144, 68, 75,224, 64, 77, 51, 86, 37, 72,113,221,243, 46, 22, 37,161, 21, 81,118, 59, 86,172,117,
-218,208,186,154, 41,107,236,105, 16, 42,159,147, 63, 83,101,101, 80,105,176, 68, 44, 17,167, 18,214, 42,116, 99,152,188, 34, 24,
-240, 86,186, 35,227, 12, 77, 93, 81, 21, 38,183,181, 53,149, 22,181, 48, 70, 75,119,167,196,190,167, 72,144, 3, 77,219, 98,140,
- 97, 24,134, 21,222,178, 48,150,171,202,225,156, 41,147, 12, 47,157, 67, 35,135,240, 52,207, 28, 78,167, 75, 32,193, 90,128, 82,
- 33,110, 45,249,226,165, 24,235,242, 50,114,217,131,155,197,102,118, 61,125, 94, 8,109,249,218,191,145, 63, 22,186,250,180,224,
- 95, 67,134, 62, 18,162,144,151,142, 57,165,167, 59,159,247,186,242,235, 7,247,186,204, 46,105,114, 79,222,105,190,138,237, 45,
- 31,162, 1,146, 86, 79,181, 36,139, 56,239, 35, 84,185, 39, 99,254,229,102,191, 50,205,121, 50,185,200, 87,142,149,203, 5, 88,
-151,130,151,209, 41,240,139, 31,252,128,255,237,191,254,111,217,248,192, 95,254,242,175,120, 51,237,209,167,150, 47, 62,255, 1,
-255,234, 95,255,107, 62,255,242, 51,134,227,129, 99, 45,201,106,255,241,151,127,195,237,246,134, 78, 59, 94,165,196,193,123, 84,
- 85, 51,237, 15,108,183, 27,110,158, 61,227,205,219,123,188, 17, 12,232,148,102,108,229, 74,226,154, 32, 80,207,231,243,218,129,
-100,165, 56,157,207,220,221,238,240,243,149, 21,118, 73,177, 11,145,190,223,176,127, 60, 50,207, 1,173, 13,119,119,119, 12,195,
-128,171,106, 94,191,126, 45,153, 7,177,156, 1, 87, 95,128, 84, 58, 11, 17,159, 89,252, 60,178, 63, 30,185,187,217, 48,142, 19,
-187,221,142,227,241, 68, 93, 89,200, 25, 63, 14, 28, 15, 7,113,183,168,140, 85, 48,205, 35,214, 85, 56,173, 25,142, 71,108, 9,
-161,154,130,140,159,125, 8,132,156,241,243, 68, 76, 98,191, 50,229,156,138, 74,210,224, 4, 45,191,104,127, 32,133,180, 78,255,
-114,217,125,199,194,185,183,214,226,231, 88,148,209,165, 49, 42, 20, 57, 41,176,229,169, 73,137,166,110, 25,142, 71,180,146, 0,
-170, 24,210,202, 2,128,200,249,124, 46,227,240, 72,221, 52,235,153,105,140, 33,248,180, 10,180, 94,190,124,190, 94,164,154, 70,
-162, 89, 99, 12,120,175,232,251, 94,148,220,235,199, 32,108,139,186,174, 80,135,147, 76, 4,230, 25, 16, 66,103,142,162, 37,216,
-237,118,188,126,243,142,190,219, 96,235,154,227,249,140, 43,156, 1, 87, 89,206,231, 19,183,183, 95,202,238, 89,101, 54,155,158,
-183,111,223,137, 63,127,158,216,238, 54,196, 20, 36,200,231,176, 95, 21,251, 33, 4,250,237,150,195,241,200,221,237, 22,239, 35,
-227, 56,210,214,149,156,175,167, 51,125,223, 83, 85,134,211,233,196,118,179, 33,167,196, 52,207,136,179, 76,243, 87,127,245, 87,
-220,222,222,138, 19, 34,149, 60,244,202, 50,156,143,244,219, 29,219,237, 6,231,100,133,113, 58,157,105,107,199,249, 60,114,115,
- 35,240,163,195,241, 92, 38, 71,145,166,169,168,107, 87, 64, 64, 9,156, 66, 71,195,249,116, 18, 0, 87, 17, 42,107, 37,226,231,
- 16, 66, 25,233, 11, 60, 73, 28, 59,151,139,125, 74,233, 74, 71,162, 46,246,182,101, 66, 84,254,238,210,185, 3,216,168, 89, 23,
-241, 11,232, 97,249, 53, 37,140, 84, 27,123,213,144,151,145,145, 74, 69,245, 30,177,201,200, 24,207,232, 82,224,196,223,173,244,
-146,132,149,200, 74, 70,172, 86, 89,158,239,158,241,108,251, 12,171,172,116,232, 69,166,191, 50,156, 11, 41,142,171, 64, 10, 99,
-204,218,197,152,245,144, 74, 5, 80, 34, 12,235,101, 12,161,115, 46,145,161, 73,222,119, 10,114,104,169, 76,206, 30,151, 61, 85,
- 78,204, 57,163,140, 37, 46,226, 8,171, 32,136,216,205,149,155, 97,237, 20, 58,229, 98,187, 50,164, 36, 46,238, 20, 3, 41,148,
-220,228,148, 72, 44,169,110,160,147, 33,153,153, 68,196,103, 75,159, 13,106,201, 70,214, 22,239,229, 5, 28,166,153,105,142,140,
-179, 60, 64,117, 18,225,132, 5,156,214, 96, 82, 81,220, 75, 40, 76, 93, 89,148,214, 52,109,141, 86,178,194, 48,214,160, 76,197,
-126,240,104, 2, 77,109,169,107,139,117,166,112,144, 53, 85, 83, 97,152,137, 83, 40,250,188,146,229,172, 29,181, 51,208,152,149,
-234,230,172,160, 34, 43,173,228,237, 53,181,232, 18, 12,132, 36,179, 9,107, 18, 49, 15, 96, 2, 55,155,158, 20, 60,167,243, 9,
-138,122,185,174, 37,220,165,107, 91, 72,145, 56,207,228, 50,133,137, 89, 20,190,251,227,153,253,126, 44,241,179,146,134, 84, 84,
- 14,228,101,187,174, 47,118,187,245,254, 24,245,186, 28,138, 87,115,242, 85,104,150, 46,158,242, 15, 16,178, 75,162,159,142, 31,
-133,196,234,178,203, 72, 92, 21,239,235,130,112,245, 92, 88,165, 63, 80,197,191,143, 87,205,165,155,129, 84,112,160, 23,207,250,
-245,197, 33,189,103,207,188,140,251,213, 19,184,204, 19,187,218, 19, 61,192,133, 53,159,175,208,185,145,242, 49, 40,233,172, 18,
-186, 64,242,162,176, 14,180, 34, 5,133, 67, 99,243,196,239,191,184,227,127,255,103,127, 66,123,124,203,215,251, 71,230,156,209,
- 85,203,243,207, 62,231, 47,254,250, 47,249,234,119,127, 76,136,145,231,141, 64, 78,106,215,225,110,122,126,243,234, 21,223,251,
-106,203,223,254,251,255, 64, 74,153,231,187,150, 47,187, 29,219,110,203,191,251, 79,111, 24,180, 98, 63,142, 68,163,152, 19,212,
- 24,170,198,202,193,159, 19, 49, 75, 56,136, 49,226, 29,143,222,163,114,166,182, 74, 58,205,178,122,211, 73,190,231,227, 44, 23,
-162,148, 21,109,219,113, 56, 30, 57,157, 71,212,121, 38,121,133, 78, 26, 85,246,144, 57, 39,148, 81, 43,136, 74,105,139,143,137,
-164, 34, 85,227, 24,194,132, 26, 78,160, 51,214, 42,198,195, 17,221,117,152, 4,135,251,135, 18,232, 4,199,135,123,136,129, 28,
- 3, 62,203,234, 77,165, 76, 86, 90,242, 34,180,248,236, 83, 92, 50, 2,100,231,106, 11,170, 25,165, 57, 79,158,144,210,154, 61,
-144,148, 41,182,177,114, 48, 39, 85,214, 33,172,206,163, 57,148,131,187, 88, 58,149,149,201, 88, 12,145, 48,123,177,179,206, 17,
-219,200, 72, 62, 22, 33,171,209, 66,142, 90,189,214, 73,244, 74, 40,201,136,152,102, 81,119,107, 37, 30,124,109, 53,227, 28,217,
-110,183, 28,246,143,107,161,142, 11, 74, 59, 69, 12, 14,171, 37, 89, 46,132, 36,147, 66,109, 11, 61, 17,158,223,238, 72, 97,190,
-116,250, 69,151,162,148,248,211,187,182, 33,196, 9,165,165,139,183,149, 52, 61, 93, 93, 23, 78,189, 98, 14, 30, 98,192, 85,150,
-231, 55, 91,188,159,201, 58, 51,207,194,231,232, 55, 29,143,135, 3,218,192, 60, 75,129,172,235,134,148, 20,223,188,122,199,110,
-183, 99,219, 24,198,113, 96,179,169, 57, 30, 2,126, 30,164, 1,169, 45, 16, 10, 16, 7,218,118,139, 15,129,221,205, 29,147,159,
- 24,222, 13,124,249,197, 23,168,130, 48,222,110, 5,139,171, 20,244,109,205, 48,207, 76,147,198,199, 72, 66,115, 60, 79,180, 77,
- 71, 78, 39,252, 56,163,140,244,134,243,228, 87,107, 94,223,247, 50, 29,105, 42, 66,136, 56, 91,173, 13,144, 49,165,193,243,146,
- 84,151, 72, 37,138,119, 42, 77, 64,177,117,166,136, 74,225, 42, 4,106,209,230,232,203,179,175, 47,103,157,253,168, 71, 86, 61,
- 29,195, 95, 44, 59,229,212,204, 23,149,242, 34,175,127, 63, 55, 99,217,117, 47, 40, 76,165,100, 74,109,180,225,249,221, 51,154,
-186, 89,111,152, 11,223,115,121,159,113, 77, 83, 19,191,180,210,250,189,176,143,244,244, 19, 76, 2, 5,185, 56,235, 18, 90,103,
- 65,191,146,208, 38,175,202,121,185,180,134,210,109, 74,177, 78, 8, 53,168, 50, 6,229,228,240, 55, 42, 99, 93,146,252,241,204,
- 37,175, 29, 35,152, 89,109, 72, 58,161,163, 18, 81, 75,202,228,164, 87, 10, 86, 52,153, 57, 6,116, 80,248, 8, 54,202, 33, 60,
-205, 51, 49, 82,196,111,194,198,246,169,188, 40,211, 68, 50,210, 21,107, 35,180,170,202, 25,218,202, 81, 87, 22,109, 53,174, 50,
- 37,175, 92, 82,212,148, 49, 36,229, 56,207,137, 24, 18,117,213, 22,162,156, 35, 6,201, 90,134, 84,190, 62,145, 28,242, 58,146,
- 51, 74, 18,136,172, 17, 12,172, 0,119, 82,209, 27, 72,232,132,179,154,202,200, 46, 59, 36, 89, 15,148,228, 89,172, 21,171,203,
-195,254, 65,184,197,198,208,214, 53,125,223,173,220,235,180,162, 24, 99, 25, 23, 6,198,113,228,221,253,129,113,144, 32, 10, 93,
- 20,252,170, 76, 64,210,149, 11, 92,189, 55, 63, 87,234, 59, 40,233,249,226, 33,127, 98, 41, 83,223, 62,194,126, 31, 21, 43,235,
-150,242, 93,158, 21, 20,164,163, 70,173, 10,147, 39,153,229,235,126,235, 34,106, 73, 31, 68, 35,229,167,252,135, 79, 88, 83, 62,
- 37,138,251,164,165, 45,243,225,215,235,201,133, 68, 72,103, 85, 42,159,138,214,228,171, 76,116, 75,226, 71,183,119,252,143,255,
-236,207,121,124,253,138, 57, 39,246,195,192,235,227,153, 57,193, 95,255,242, 87,204, 41, 96,140,163,113, 45, 95,127,253, 13,182,
-105, 56,198,196,155,135, 71,220,166,231, 47,127,245, 43,230,156,216,244, 27,246,199, 35,174,170,240, 72, 20,240,209, 7,166, 4,
- 62,122,121, 29,181, 46,254,100, 56, 31, 79,248, 16,112, 85, 93, 38, 88, 97,205,100,168,170,154,249, 28,228,252,200,170,140,178,
- 13,115, 8,226,179,214,134, 99,137, 86,142, 49, 98,148,248,174, 99,188,176,217,181,186, 26,207, 35,122,147, 16, 19, 49, 43,124,
- 0,167,107,230, 16,217,159, 70,172,182,226,139, 62, 31,214,195,114,201,190, 70,153,245,123,104,242,190,116, 70,154,168, 46,225,
- 78,185, 56, 60,252, 24,113,181,193,123,209,211,136,240, 74, 18,221, 22,162, 91, 6,113,249,228,139,107, 40,149, 11,158, 41,228,
- 52, 97,116,128,169, 45,201, 11, 4,197, 88, 17, 11,186,198,114, 10,146, 1, 31,128, 24, 34,174,173, 24,131, 88, 71,179, 86,184,
- 2,176, 82, 41,149,181,131, 89,163, 60, 23,107, 91,200, 23,162,226,249, 60,162, 94, 72,106,217, 48,158,105,218, 94,116, 57, 70,
-178, 46,102,239,105,219,237,170, 80,151,177,244, 76,229, 28,243, 60, 20, 37,125,205, 28, 60,117, 93,139,134, 65,129, 53,150,205,
-166,146,194,173,149,136,202, 80,184, 24, 56,159,207, 60,123,246,140, 99, 65,167,118,125,187,218, 24,111,110,132, 59,127, 56, 28,
-214,250,179, 63, 28,184,187,189,229,225,112,160,109, 97,158, 2,211, 40,162,180, 24, 19,175, 95,191,161,109,235, 34,210,173, 80,
- 40, 66,240,235,212,215, 57,187,162,135, 79,167, 35,125,223,151,179, 73,177,217,108,153,166,145,186, 18,127,250,227,227, 35,149,
-179,101,124, 30,128,196,102,211, 51, 77, 19, 90, 71,198,113, 96,219,223, 65, 11, 3,131,136,175,163, 68, 78,123, 47, 83,132,113,
- 28,233,186,142,121,246, 24, 83, 68,117,214,136, 85, 57,164, 43,209,106,166,239,219, 21,226,179,138,191, 75,119,190,140,239, 87,
- 55,206,251, 43,191, 43,104,214,135,227,247, 92,102,243,239, 83,181,174,186, 20,197,181,157,237, 3,101,206,147,236,102,174, 18,
-217, 36,103,183, 97,179,217,136, 8, 99, 37,194,233,245,109, 47,254,210,235, 11, 69, 44, 89,233,198,184,130,139,101, 61,116,229,
-224, 77, 37,123,186,216,200, 72, 18, 50, 98, 19,214, 44, 93,156,236,236,231, 32,118, 50,149,164,232,107,172, 68, 31, 42, 81, 57,
- 58,109,129, 74,212,226,197,123,190, 8,206, 22,239,103, 44, 10,246, 28,115, 1, 96,152,181,104,105, 16,127,186,137,197,227, 45,
- 99,240, 92,236, 99, 11,186,210,135, 36, 59,237,184, 40, 53, 19,104,129,216,212,181,165,113, 2,191,232,155,138, 77,215,178,221,
- 54,104, 3, 89, 95, 60,212,206, 90,180,173,152,163,198, 7,143,143,137,122,211, 97,171, 26,140, 65,165, 68, 93,203, 65, 37,135,
- 80, 46,214, 37,181,106, 2, 28, 98,167, 49,214,209,214, 77,233,254,228, 33,182, 78,227,156,161,178,242, 85, 54, 89, 49, 37,189,
-190,174, 77,211,160,149, 28,204, 11,253,168,174, 43, 25, 95,150, 56,203, 92,252,172, 33, 9,249, 43,229,192,225,112,226,213,171,
-215, 18, 97,169,101, 37,177, 76,139,214,113,105,202,171,176, 71, 61, 81,117,124, 58,150,116,233,122,175, 47,167, 23, 76,251,183,
-171,212, 63, 40,132, 49, 61, 13, 42, 84,121,157, 17,169, 75, 20,215, 7,244,183,235,143,115,189,124,126,132, 57,127,189, 86,121,
-127, 31,255, 93,177,174, 79, 63, 15,245, 1, 8,231,125,196, 13,101, 68,107,138, 93, 42,100,133,210, 21, 42, 5,108, 10,124,239,
-102,199,255,244, 95,253, 19, 54, 9, 14,195,196,201,123,222, 60, 60, 80,111,118,204,231, 51,159,223,222,242,248,235,175,241, 62,
-242,238,176,167,187,185, 5,107, 57,143,129,237,237, 51,190,126,251,150,144, 6,186,182,199, 26, 71,181,169, 57, 14, 3,141,173,
-249,230,237, 3,147, 6,229, 12, 62, 69,154,206,174, 41,130, 97,158,215,169,145,216,136,140, 68, 39, 7,138,194, 91, 64, 84, 90,
- 25,217, 63,150,203,147, 15,158,170,114,188,253,230, 13, 85, 45,244,174,190,235,184,127,183,151,238,197,200,186,111, 89, 89,152,
- 34,236,234,154,150,211,225, 36,164,193, 40, 33, 45,202,106, 66,132,224, 61,112,230,166,111,132,152, 86,236,181, 49,137, 90, 61,
-164, 1, 99, 45, 62,137,189, 42, 21, 33,175, 86, 74, 52, 26,106,177, 47,202,235, 39,214,166,136,210,178,182,202, 5, 30, 37,193,
- 36,185, 76,163,202,107,183, 76, 94,180,198, 46,194,208,162,208,206,203,129,110,173, 92,250,163,160,110,115,138, 34, 70, 11,144,
-202, 37,163,170,107, 76,129,155,132,144, 48, 54,209,180, 13, 67,241,100, 91,107, 11,180, 39,174,150, 94, 17,220,202, 84, 32,248,
-192,219, 55,239,120,118,119,195,187,251, 7,148,169,169,234, 74,200,112,198,144,162,127, 15,112,148, 86, 53,185,179,142, 16, 70,
- 98,146,232,217,186,145, 16,168, 24, 19, 49, 78, 52, 77, 67, 93,215,188,122,253,154, 23,159,117,164, 73, 44,140, 15,247, 39,110,
-111, 45,155,109,199,121, 56, 97,172,124,222,135,195,161,248,180,165,113, 16,168,150,101,127, 56, 64, 35,143,205, 56,206,244,157,
-112,227, 67, 12,130, 12,211,150, 24,225,113,127,100,154, 29,125,225, 32, 44, 5, 61, 4, 97, 6,200,184, 27,201,140,175,107,154,
- 70, 58,232, 20, 43,234, 74,148,236,155,190,231,237,219,183,180, 93, 71,211,182,168, 20,137,133,102,186,164,215,221,223, 63,208,
-247, 29,214, 85, 40, 45,107, 69,193,100, 55,242, 62,252,196, 60, 79,108,183, 91, 30, 31, 15,107,170,101, 87,183, 37, 81, 84, 49,
- 13, 3, 74, 11,109, 51, 4, 97,219, 63,101,188,200, 5,115, 97,240, 47,171,151, 85,208,158,159,174, 3,237,199,163, 31,129,143,
- 28,164,234,170, 37, 80, 43,141,150,167, 55,133,172, 86,161, 82,190,194,107, 46, 69,126,187,217, 80, 55,245,250,129,230,171,110,
- 93,175, 36,169,116,249,198, 41, 35,255,148,203,141,243, 74,205,172, 68, 66, 42, 15, 69, 46,248, 79,149, 10, 49,109,241,141,151,
-140,244,162,246, 21,111,185, 64, 96,156, 82, 76,126,198, 86,173,252, 59,163, 4,173,170,140, 20,241,228,201, 74,248,230, 90,151,
-104, 82, 37, 49,150, 57,107,178,201,152,168,100,108,150, 46,123, 94,103, 20,218, 68, 33, 77, 89, 93,108, 97,101,252,155, 53,211,
- 24, 86,176,134,144,231, 4, 96,209, 54,134, 93, 87,211,183, 21,155,166,102,211, 57,182, 93,203,110,187,161,235,106, 66,242,156,
-167,179,116, 4,202, 8,153, 75,107,246,239,206,188,189,127,192,216, 6, 83, 53, 24, 87, 19,115, 64,107,217, 3,170, 20, 80, 41,
-226,172, 41,168, 69, 77,133,145,110,223, 54,232, 60,211,212,134,214,137, 7, 54, 68,249, 26,214, 86, 83, 55,150,214, 42, 72, 30,
-159, 20, 54,102,146, 18, 55, 66,215,239,240,126,100, 26, 79, 88,173,168, 43, 71, 91, 87,212,149,252,168, 42,135,159,211,133,161,
- 15, 40,101, 57,159, 71,246,135, 99,217,155,151,105,229, 85,124,224,194, 26, 88, 70, 47,215, 80,164, 92, 46,115, 60, 65,190,191,
- 23,161,154,151, 93,242,199, 11,185,202,124, 68, 37,255,180,104,170, 43, 22,194,106, 19, 83, 75,194,220,199,213,241, 31, 43,202,
- 79,117,164,151,105,131, 34,127,235,229,228, 83, 23,144, 15, 69,113,249, 91,121,144,170, 8, 96, 33, 19,244,242, 60,149,139, 91,
-130,207,186,134,255,238, 31,254, 3,190,208, 6,117, 30, 72, 57,243,230,112,164,221,222, 48,199,196,151, 95,126,143,166,237,121,
-249,197,151, 76, 49,177,123,249,130,186,235, 56, 30,206,236, 31,222,113,251,252, 37, 97, 78,220,188,120,198, 97,154,152, 66,224,
-225,176,231,225,120,226,255,254,245,223,242,183, 15,143,236,158,221,225, 39,207, 56, 30,113,213, 86, 46,108,234, 34,132,147, 81,
-243, 5, 37, 26, 53, 69, 64, 89, 10,219, 85,144, 69,202, 18, 38,212,118, 66,225,242, 62, 20,175,180,167,170,106,198,211, 84,178,
-217,165, 49,113,206, 97, 43,153,108,121,239, 69,180, 25,101,103,109,180, 38,162, 81,202,144,147,226, 52, 6, 96,194,154, 44,142,
-156, 84, 60,252,202,200,212, 75,165,213,230,232, 67,148, 95,103, 89,145, 45,214,178, 24, 34, 33, 9, 1, 91, 8,139,233, 42, 1,
- 78,222,239, 42, 18, 90, 6,212, 75, 72, 71,121, 6,170,178, 15,142, 37, 86,186,107, 36, 18,116, 17, 3,230, 28,133, 72,215,181,
- 28,246, 39, 92, 93,225,207,231, 98, 39,173,240, 62,144, 0, 31, 34, 55, 77,131, 62,158, 8,133,191,174,138,234,122,153, 22, 44,
- 54,203,140,194,251,196,249, 60,242,252,217, 29,231, 97, 34,100,205,247,119, 91,252, 60, 50, 78,129,166,118,235, 36,202, 24,181,
- 94, 20,166,147, 68,154, 46, 17,176,251,211,137,186,107, 48, 74,232,114, 77,211, 16, 83,100, 44, 65, 40, 33,134,117, 68,223,182,
- 39,222,221,191,229,238,238,150,135,135, 71,230,121,194, 20,174,121, 8,161,132,207,244,156, 79, 3,109,219,210,214,181,164,187,
- 5, 25,139,239,247,143,180,109, 79, 85, 85,197, 38, 39, 23,154, 37,138,215, 90, 71, 46,151,146,105,154,104,219,150,253,254,129,
-187,103,207, 48,122, 94,139,179, 82, 34,160,134,204, 48, 12,212,149,184, 50,250, 77,207, 60,123, 65,183,214, 85, 57, 31,148,176,
-235,219,134,113,154, 9,135, 19,169,208, 18, 37, 4,198,150, 73,156, 76, 42,166,121,162,174, 52, 85,101,153, 38,185, 8,121, 63,
-161,148,193,185,154,202,245, 12,231, 65,254, 94, 35,208,161,224,227,202, 90,112,214, 97,136, 79, 38,143,105, 37,111,230,117, 18,
-190, 92, 52,109,126, 15,134, 33,197,248, 2,126, 89, 65, 83, 57, 94,118,148, 87, 16, 26, 74, 38,177,190,246,210,114, 73,158,186,
-196, 74, 10,142,117,211, 11, 53,142, 28, 65, 61,165,229, 72,113,207, 31,137,149, 76,101, 60, 27,151, 88,143,162, 12,103, 13,102,
- 17,160, 83,129,199, 24,176,203,104,180,168,214,115,177,118, 44,176, 25, 91, 44,110,231,113,194, 81,137,218,220, 92, 91,168,244,
-147,139,203, 50,170,151,102, 65,246,247,165,185, 94,131,106,180,134,170,228, 39, 59, 39, 40,194,198, 89,218, 90, 70,220, 57, 69,
-252, 28, 57,171,113,125,144, 43, 29,112,198,210, 54,150,109, 95,115,179,173,217, 52, 53,125, 91,179,233, 44,219,190,163,239, 90,
-148,209,156,198,136,196,143,139,127,211, 40,205,121,158,121, 60, 28,120, 60, 28,113,221,115, 92, 85,163,172,129, 16,113,149,163,
-115,150, 86, 69,116, 82,212, 90,163, 11, 13, 38,203,113, 70,101, 20, 93,221,178,233,219, 66,194,179,204,211, 76,202,137,202, 26,
-234,198,208,152,140,198, 48, 39,195, 33,120,102, 63,160,141,162,221,116,188,122,251,134,148, 38,106, 87,211,214, 21,109, 83, 83,
- 45,204,108, 13, 83,140,101,228, 40, 94,122,109, 13,195, 73, 60,249, 23, 42, 96, 92,245, 26, 31,100,156, 63,157, 79,175,221,141,
-226,219, 59,218, 53,225,237, 83,163,235,156, 63, 16,188,165,116,185, 76, 94,255, 67,117,165,198,127,223, 63,254,233,236,243,229,
-130,123,193,156,170, 18, 33,252,105, 40,251,119, 43,219,245,213, 42,106,233, 20,249, 86,184,140,148,240,136,112,142, 51, 25, 34,
-232, 24,185,113,142, 63,249,131, 63,228,119, 54, 27,190,172, 27,254,250, 87,191,228,241,124, 34, 25, 69,210, 26,167, 68,136,121,
-115,115,203,219,195,137,118,187,197, 40,195,253,235,119,204, 33,162,157,227,254,176,231,116, 60,242,249,231, 95, 50,218,204,111,
-222,220, 19,148, 97, 63, 5,126,249,205, 27,250,237, 29, 49, 8, 89,236,238,110, 35,152,204,224, 5, 74,164,229,172, 89, 20,191,
-151,203,141,140,201,167,201, 99,140, 20, 1, 83,236, 69,139,194,220, 7,137,183,124,251,246, 1,208, 88, 99,209, 90, 83, 53, 53,
-126,158, 36,157,208,213,212,109, 11, 10, 81,186, 79, 51,117, 85,113,154, 79,104, 43, 52, 56,227, 12, 36, 77,152, 60,100, 56, 12,
- 1,107, 50,181,147, 52, 70, 99,116,201, 85, 23,165,185, 82,194,133, 8, 37, 21,114,157, 14, 5,233,158,174, 65, 53,233,202, 38,
-164,203,120, 93,197, 18,144, 85,132, 84,170,128,160,124,241, 65,107, 99,208,214, 50,159,134, 2,124,233, 87,100,104, 76, 9,231,
-164,216, 25,171,145,141,163,140,123, 39, 47,132, 71, 84, 68, 41, 3,200,184,223,135,200,237,237, 13,175, 94,191, 38,101, 41, 60,
- 97,161, 74, 46,141, 87, 33, 36, 74, 23,111,177,182,194, 89,199,225,112,224,124,190, 65,171, 68, 91, 87,156, 78, 39,186,182,121,
- 34,224,210,229, 50, 97, 64, 75, 38, 0, 0, 32, 0, 73, 68, 65, 84,127, 56,157,233,251,142, 80, 40,104, 33, 68,162, 18, 71,143,
-247,194,118,223,239, 15,216, 98, 11, 52,133, 57,208,245, 45,191,252,229,111,184,189,189,161,109,107,177,183,105, 75, 83, 82, 30,
-119,187, 45,160, 56, 30, 79,178,222,107, 91,134,225,204,166,107, 75, 54,187,103, 24, 78, 56, 87, 11, 70,182,184,108, 4, 19, 27,
-138,125, 47,112,119,123,131, 82, 21, 49, 5,218,174,229,240,248,192,166,223,173,160,172, 16,130, 92, 40, 10,211, 62,147, 87, 79,
-189,171, 60,231, 97,196,150, 26,229, 42, 43, 26, 3,173,169,170,106,221,237, 47, 83,144, 5,208,179,124,141,189,159, 5,182,230,
- 92,193, 24,231, 98,165, 84, 76,243,200,110,179, 41,112, 34,169, 43,186,208,248,174,167,214,174,150, 41,203, 7, 41,138,133, 19,
-179,216, 61,149, 2,187, 46,228,212,251,227,244, 43,122, 91, 17,118, 72, 66, 86,254,176,131,127, 47, 56,114, 65,192,138, 56, 78,
-110,229, 70, 41, 42, 91,209,182,173,140, 89,139,184,236, 34,148, 87,107,182,249, 37,244, 98,233,210,179, 36,177, 17,113, 74,198,
-201,194,113, 81, 79, 2, 71,132,224,150,177, 74,226,251,196,164, 47, 15,217, 34,170,178, 86, 81, 59,195,228,147,216,178,114, 34,
-250,169,192, 90, 40, 0, 6, 3, 89,148,161, 42,153,226, 49,102,117,228,231, 98, 37, 96,177, 62,233, 92,186,103,181, 90, 47,156,
- 81, 52, 86,211, 88, 77, 87, 57,234, 74,196,114,222, 71,156,214, 56, 39,183,183,156, 42, 42, 91,209, 53,142, 77, 87,177,219, 84,
-116,109, 69, 87,215,180,173,161,107, 28,174, 50, 76,179,112,130,151,203, 70, 40,252,224,115, 12,236, 79, 35, 83,140,212,206,130,
- 41, 66,178, 28,105,140,163,181,154, 94, 27,180,178, 84,165, 55, 48, 78,176,135, 42,131, 85,134,190,115,220,236, 90,154, 74, 98,
- 39,135, 81,198,249,198,104,172, 73, 88,167, 36,176, 37,106,194, 97,228, 60,141, 84,109, 35,233, 68,167, 35,149, 85,180, 77,197,
-182,111,217,109, 58, 33,216,149, 8,193, 24,202,216, 61,229, 53, 56,225,112, 56,174,217,208,215,164,192,252, 94, 81,204, 87, 44,
-248,203,104,253, 90, 28,246,241, 45,242,117,238,208,229,118,123,161,187,105,174, 11,235,133, 19,127, 81,205,151,223,191,178,164,
-171, 53,230,141, 39, 94,243,139, 58,245,227, 93,191, 86, 2,106,146,189,233, 50, 61,184,110,225,243, 71, 45,112, 31, 43,238, 31,
-187, 68, 92, 39, 17,190,175,196, 95, 24,216,217,232,117,106,145, 10,179,161, 79,153, 63,250,217,207,249,197,231,159,179, 45,224,
-165,253,241, 64,179,217, 48, 14, 35, 95,253,248,199,252,197,191,251, 11,108, 85,243,246,221, 35,111,223,188,229,247, 94,124,198,
-255,243,111,254, 45,159,125,254, 37,227, 52,113,156, 70, 92,223, 83,239,182,252,250,221, 91,222, 29,143, 60, 14, 3,251, 57,240,
-102,127,192,117, 59, 76, 85,243,205, 55,191,166,235,133, 15, 62,156, 7,182,219,110,205,186,134,140, 46,154, 13, 83, 46,209,125,
-215,149,241,232, 44, 29,240, 2,227, 32, 51,249, 25,180,230, 52, 12,226, 42, 73,229,172, 50, 50, 66,215, 90, 68,162,218, 90,186,
-190,199,185,154,119,247,247,204,243,204,118,187,229, 88, 96, 42,153, 32,228,197, 90, 84,205, 62,148,253,183,214, 50,117, 75, 69,
-228, 24, 67, 33,168, 41, 82,152, 37,103, 61, 95,246,226, 57, 39,113, 97, 80,176,210, 70,175,138,125,141, 70, 59, 41, 16,190,168,
-147, 77,165,241, 62,136, 46,167, 8, 50,141, 46, 99,254,148,104,156, 35,148, 63, 91, 92, 34, 97, 8,236,118, 59,137, 48,141,129,
-166,173,153,166,179, 92,102, 74, 64,139, 82,138,152,163,196,217,162,133,243, 30,197, 35, 45,121,225, 50,150,223,237,182,178, 59,
-191, 70, 30,103,161,165, 77, 41, 48,122,207, 52,207,244,253,150,211, 48,113,127,191,231,251, 95,190, 36,103,225,234,135, 40, 99,
-255,211,241,192,102,179,145,110,209, 40,156,147, 75, 85, 14, 34,174,157,231,153,190,107, 37,187, 61, 6,142,199, 3,159,125,246,
-146, 55,111,222,202,186, 45, 68, 66,246,108,251, 30, 99, 52,227,112,102,211,247, 12,231, 83, 57,167,133,100,231,125, 20, 62,128,
- 18,219,221,221,221, 45,206, 89, 78,143, 66,176,163, 56, 25,134, 97,228,225,225,158,205,166,163,105,156,236,189, 17, 50,156, 53,
-134, 16,102,170,186, 34,132, 25,163, 52,205,102,203,249,124,162,105, 58,198, 34, 76,235,251, 94,166, 24,229, 16,169,170,138,199,
-199, 71,218,182, 43,107,147,184, 78,151, 42,103, 87,203,228, 18, 41, 62, 14,146, 99,224,189, 47,107, 4, 79, 85, 85, 34,142,158,
- 3, 96,232,186,158,148,202,159, 7,209, 79,104,173,202,228, 65, 23,187, 91, 40,126,127,105,192, 82,138,120, 47, 17,173,195, 48,
- 60,201, 96,121,186, 22, 47,238,163, 11,105,227, 99,221, 67,126,210,212, 92,135,105, 92,139,228,158,230, 80, 46,214,179, 75, 98,
-214,114, 32, 59, 87,173,164, 51, 57, 96,227, 85, 39,191,248,207, 47,114,125, 74, 81, 94, 66, 93,180, 46,106, 59, 45, 42,112,137,
-140,204, 43,104,198,148, 12, 99, 81,251, 74,116,226,147,128,141,114,142, 90, 91,210,212,172,194, 57, 69,240, 51,138, 10,141,100,
-224,230, 84,118, 65,106,193,129,234,117, 34,176,140, 56,174,169,118,166,252, 61,173,192,154,140,213, 50, 41,176,106, 73,110,211,
- 84,133,203, 92, 25,233,128,234,202,210,123, 15, 89,124,221, 77,229,104, 27, 67,215, 90,218,202,209,212,150,202,128,213, 2, 86,
-246,243, 2,132, 48,164,132, 60,236, 57, 51, 97, 9,217,128,173,208,214,149,238, 55, 64,140,212,166,166,214,224, 52,130,124, 85,
-170,176,151, 19,182, 82, 52,214,209, 86, 45,117,173,169, 43, 69,109,193,232, 68,119,211,173, 7, 75, 78, 1, 87, 25,154,182,197,
-143,153, 97, 10,204, 49, 81, 53, 45,251,211, 81,110,145,214,210,182, 21, 55, 55, 27,110,110, 54, 5, 79,169,214,180, 39, 9, 47,
-136,104,171, 56,157,199,226, 83,190,158,133,151, 21, 9,122, 13,250,200, 87,236,234,245,210,169, 46, 34,206,111, 13, 56,249,192,
-200,118,197, 74, 80,215,187,238,197, 86,198, 26, 53,122,133, 1,188,242,174,191, 7,156, 89, 22, 80,234,211,185,236,215,112,154,
-245, 93,101,117, 85,212, 63,238,167,255, 88, 97,255,246,177,252,135, 65, 46,235,174,183, 8,107, 98,113, 15,216, 44,121, 2, 46,
- 78,252,241, 31,252, 33,127,252,179,223,227, 38, 39,172,201,124,253,248,128,106, 90, 30, 14,103,190,248,173, 31,240,245,235,215,
-220,188,120,193, 55, 15,143,156, 39,143,113, 29,175,190,126, 69,187,187,225,205,241,200, 48,207, 96, 43,178,182,124,179,127,195,
-152, 4,101, 60,132,196,227,228, 57,121, 65,122,190,125,243,150,218, 25,140, 74,228,232,177,181, 93,191,118, 70,107, 25,205, 22,
-255,181,181, 34, 2,157,134, 81,138, 90,200,107,182,182,177,174,124, 13, 19,202, 84,196, 56, 51, 12,211,122, 16, 46,144,153, 24,
- 35,117,219,208,182, 21,198, 58, 78,167, 3,177,136,213, 98, 20, 44,105,140, 1,107,228,227, 48,214,144,114,196,212,138,182,239,
- 57,159,206,132,152,113,181, 46, 7,244,180,102,156, 95,248, 20,194,109, 16, 60,239, 37, 96, 5, 37, 69,218,186, 74, 60,234,229,
-220, 19, 44,181,124, 71, 90,103, 8, 25,198, 73,232,119, 49, 37,178, 54,216,166, 97, 62,159, 37,101,110, 22,226,165, 66,139, 90,
-190,136,212,154,166,102,127, 24,216,108,110, 24, 39,177,167,205, 62, 20,114, 94,162,105, 91,102, 31, 68,179, 83, 86, 13,211, 52,
- 51, 12, 3,207,110,239,248,230,213,107,234,170,194, 89, 67, 76, 23,220,246,114,225,173,235,154, 20,133, 31,209,117, 61,153, 55,
- 88, 43,156,251, 20,229,153,220, 31, 14,188,172, 95, 20, 64,142, 52, 92,117, 93,227,125, 44,196,204, 76,101, 29,179,159, 48,229,
- 34,235,253, 92, 88, 23,138,113, 26, 69,139,163,165,159, 52, 70,113,187,235, 72, 49,136,158,168,170, 57, 28, 79,220,220,220,209,
-182,173, 92, 36, 66,164,239,123,134,225, 36,196,190,170, 98,183,237, 25,134,129,182,235,152,166,137,155,221, 6, 31, 2,167,147,
- 20,189,126, 35,180,184,227,225,200,205, 77,143,171, 28,206,218,130,250,150,206,124,211,111, 10,151,160, 98,156, 38,230,121,150,
-200, 91, 63,227,181,162,109,218, 53,234,181,105,219,146,255, 46,204,250,186,170,152,230, 89, 10,175,207,101,189, 81, 86,170, 90,
-151,122,181,216,254,132,170, 55, 77,179,136,228,194, 36,235, 39,103,139,173,219,150,144,151,101,197, 34, 1, 92,214, 56, 98,193,
-233,138,221, 48,148,144,151,244,100,170,184, 64,155, 40, 53,212,242, 45, 41, 81,223, 73,176,186,238,140,212,211, 99, 47, 95,135,
- 86,148, 49,100, 93,213,162, 80,205,151, 67,123, 85, 38,231,139,114, 57,175, 93,153, 20,210, 92, 18,106, 76,241, 91,162, 18,202,
- 22,210, 79, 41,244,186, 20,215, 5,218,162, 85, 42,194, 57,177, 98, 45,248,240, 84, 80,177,170, 80,216, 76,177,119,248,105,164,
-178, 53, 58, 27, 73,169, 42,246, 45,101, 45, 57,249,210,164,169, 21, 62, 34,170,227, 11,109, 79, 43, 25,197, 11,185, 52, 23,218,
-155, 36,152,153,178, 11, 51, 86,161, 83,193,249,105,168,156, 34, 39, 41,180,181, 19,238,186, 81, 11, 68, 32,162,112,228, 36,129,
- 25,199,227, 25,159, 34,166,170, 65,101, 82,142,132, 0,231, 16, 57, 13,158,172, 12,182,170,100, 15,233, 39, 42, 5, 78,129, 70,
-190, 22,149,213, 52,218,208, 84, 53, 77,235,168,106, 69, 95,215, 56,227, 68,249,239, 68,164, 35,147,196, 72, 85, 11, 1,238,116,
- 62,225,172, 67,105,203,228, 39, 30,246, 39, 18, 22,101, 43, 14,111,223,145, 19, 52, 93, 75,219,212,116,157,140,222,181,134, 16,
- 22,218,158,168, 82, 67,140,196,224,121,220,239,203, 78,175, 64,127,212, 69,112,179, 20,226,172,174,129, 67, 79, 77,231,234,239,
- 48,182,126, 26,197, 42,251,252,244, 9,127,247,229, 66,121, 37,234,252,224,239, 61,221,128,103,117, 21, 87,250,169, 93,119, 78,
-176, 6, 34, 93, 44, 85,121,205, 76, 16,103,199,119, 21,244,191,203,239,169, 43, 11,221,106,117, 75,249,226, 2,184, 2,231,180,
- 1,254,241,223,251, 3,254,251,127,244,143,208,199, 61,141, 49,188,122,247,150,250,230,150,183,127,243,107,190,255,195, 31,115,
- 60, 14,244, 55, 91,206,222, 51,105,205, 92, 53, 28, 30, 30,241, 86, 51, 5,207,225, 52,112,247,252, 37,131, 15, 60,156, 71,246,
-231, 1, 83,215,196,164, 10,119, 33,163,176,248, 41,224,135,137,221, 93, 7,106, 38, 5, 79, 48,151, 93,127,244,129,166,111,120,
-120,124,192, 58,183, 14, 47,172,115, 68,239, 25,134,145, 86,119,104, 35,107,163, 20, 99, 65,116, 58,252,124, 32,196, 88,138,137,
- 76,233,150,110,177,239, 27,198,105, 36,207,179,216,137, 82,166,237, 26, 78,167,211,170, 30, 94,226, 49,155,166,102, 14, 19,155,
-109,207, 48,156, 65, 71,234,170, 17,110,120, 17,150,250, 84,166,122,139, 55,219,232, 53, 16,105, 73,131, 75,139,112, 76, 21,138,
- 88,240, 88,231, 8, 94, 66,102,116,129, 55,101, 5, 49, 10, 68,197, 47,112,156, 34,230, 83, 90,177,217,110,121,247,238, 30, 99,
-109,161,144,230,114,198, 81,178,187, 37,221,236,197,139,231,156,134,145,227,249, 72,204, 2,240, 73,100,249, 58,114,241,181,199,
- 20,100,135,237,106,250,174,227,176, 63,240,242,197, 11, 94,189,126, 3,234,138,141, 62, 77,236,118, 27,180,170,216,239, 15, 60,
-123,246,188,240,235,107,198,113,192, 25,137, 10, 29,167,169, 36, 63,186, 53,129,109,137, 13,141, 81, 50,216, 83,140,168,146, 48,
- 22, 99, 16,209,162, 49,196, 28,217,238,182,101,210,232,139, 51, 71,138,170, 82,154,121, 28,185,189,189, 97,152,102,142,167,147,
- 20,221,178, 50, 16, 28,172,128,107,150, 9, 79, 83, 87, 24,149,169,107, 91, 46,231,134,246,197, 45,227, 56, 49,205, 19,125,223,
-113,107,183,236,247,143, 40,181,161,109,106,201,129, 47, 2, 77,149, 65, 91,137,214,109,219,150,113,154,228, 82, 88, 87,132, 24,
-228, 2, 82,213, 43,108,104,113, 89,180, 77,187,174,194,198, 89, 46, 91, 41, 37,230,201, 23,220,175,172, 64, 86,135,152,177,244,
-253,134,227, 81, 8,154,206, 57, 80, 2, 1, 27,199,145,218, 53,180,133,192, 41,239,191, 94,131,116, 84, 22,125,201,253,195, 97,
- 13,124,201,139,197,243,138, 5,191,136, 29, 83,138,133, 60, 81, 74,105, 86,241, 73,140,234,199, 37,181, 34,100, 90, 14,190,164,
-196, 50,115,153, 76,230, 21,179,186, 36,178,105,173, 36, 13,167,114,171, 85, 99, 9, 93, 89,126,142, 69,213, 23, 74, 36, 93, 8,
-242,195, 7,177, 6,164, 24,203,152, 44, 50, 39,207, 28,133, 93, 28, 83, 40,194,186,132, 82, 81, 4,114,186, 8,228, 84, 94, 85,
-169,210,237, 39, 82, 12,228, 20, 5,173,186,168,218, 83,100, 30, 39,130,151,183,191,124, 60, 33, 37, 98, 22,159,190,214, 6, 99,
- 92,129,190, 44,255,189,124,110, 11,146,213,148,184, 86,158,112,239,245, 50, 15,206,203, 78, 95,198,243,149, 53, 52,206,148, 4,
- 52, 41, 4,105, 77,166,147,155,217,121,154, 57, 14, 19,227, 28, 36, 66,214, 26,106,103,176,194,116,101,156,102, 78,103,241,126,
- 46,197, 68, 84,163,154,174, 50,244,149,102,215, 86,108,219,150,190,171,105,187,138,231,207,110,248,193,247, 62,227,203, 47,238,
-120,118, 83,177,235, 12,155,109, 75,221, 56, 66,244, 28, 79, 39,134,113, 36,248,128,209, 6,227, 28,167, 57,240,234,241,192,215,
-247, 7,134,144, 57, 30, 79,156,143, 7,156, 49, 52,117, 43, 56, 88,107,174,172,108,129,113, 28,240,126,150,207, 39, 37,142,231,
-129,113,156, 73, 42,163,172,190,162, 17,231,171,206,249,146, 53,174,174, 40,135,107,148,174,186,124,191, 62, 73,114, 81,233,201,
-143, 37,208,111, 65, 39,234,171,144,147, 39, 23,131,245,151,105, 77,242, 34,167,171,113,251,149, 17, 94,229,171, 81, 60, 79, 28,
- 27, 31, 67,185,234,114,113,201, 11,203,247, 58, 31,225, 35, 29,250, 71,187,116,190,203,214,246, 84, 39,160,150,224,224,114, 97,
-200, 90, 17, 75, 30,129,203,145, 95,124,241, 5,255,203,159,252, 83,238, 80,196,224, 73, 85,197,187,211,192,235,251, 61,187,187,
-151,140, 83, 96,119,251,140,211,232,121,179, 63,240,246,112,100,127, 60,178,185,189,161,221,238, 56,157, 69, 88,234,209,252,237,
-219, 55,188, 57, 60,178,185, 17,150,247,224, 3, 65, 41,142,195,153,110,211,146,137, 52, 93, 77,221, 84,235,254, 53, 35, 92,119,
- 95,186,215,241, 44,137,101, 41,196,149,176,103,202, 94, 57,150,152,208, 16,101,210,179, 8,145, 98,217,167,215,117,181,158, 87,
- 41, 75, 55,125,115,123,195,233,116,102,179,217, 49, 14, 19, 41, 10, 86, 53, 20, 49,148, 60,151, 98,237,114,149, 35,102, 25,103,
-143,243,136,209,150,221,238,150,217,207,235,248,155, 18,203, 28, 35,160, 12,174,170, 49,214,149,238, 56, 51,206, 19,211, 28,240,
- 33, 49,204,129,243, 28, 56, 79,158,105,138, 12, 99,224, 60, 70,230, 8,131,151,132,197,113, 10,196,164,152, 87,177,154,252, 90,
-124,250,150, 97, 56,243,236,217,141,172, 5,114, 36,144, 37, 27, 1,197, 48,140,108,250,158,121, 22,123,225, 60,138,181,108, 56,
-157,113,149, 67, 41,216,109, 55, 8,150, 60, 96, 16,231, 78,240,129,211,120,230,246,217,173, 56, 7,234,186, 20,142,244, 36, 48,
- 97, 24, 38, 54,155, 13,199,211, 17, 99,117,177, 86,137,238, 40, 2, 85, 85,147, 11,199,189, 42,171,128,156,162,116,243,165, 56,
-203, 88, 58, 10,203,164, 4, 86,237,118, 91,172,214, 4, 31,169, 92,181,118,177, 41, 70,252, 60,113,123,123, 67,136, 94, 38,102,
- 49,177,219,108,208, 42, 19,227, 76,191,145,120,212,221,110,195,195,195, 61,219,157,140,252, 99,105, 24, 82, 18,235, 99,221, 84,
-184, 74,236,187, 77,227,216,109, 27,252,124,102,211,183,108,183,194,177,127, 60, 28,112,182, 18,210, 91,185,244,143,227,136,247,
- 51, 90, 43,218,166,190,154,195, 21,155,223, 48, 22, 55, 65, 36, 37, 89, 9,249, 73, 2,184,154,166,198,106, 45, 92, 5, 96,211,
-183,226,216, 40, 34, 76,103, 29, 57, 73, 94,188,247,129,170,114,107,190, 65, 93,183,116,173, 4,209,132, 56,175,239,183,114, 21,
- 49,200,215,237,176, 63,112, 60, 30,153,231,137,231,207,239,168, 42,183,190, 94, 43, 83,126, 45,232,105,157, 64,106,181,132,174,
- 83, 0, 42, 57, 93,117,221,234,130,227,188,106,156, 84,190, 48,183,151,244,170,180, 22,244,184, 64,185,229,231, 28,158,132,185,
- 80, 2, 4, 98,217,239,197, 53, 11, 61,175,196,174,156, 36,134, 52,133, 64, 10, 81, 94,192,178,155,141, 89,236, 81, 62,151,188,
-224, 24, 32, 5, 20, 30,173,147,116,232, 58,163,244,146,207,156,196,134, 16,203,219,137,130, 80,148,152, 84, 69,237,108,121, 97,
-228,193,244, 81,108, 11,145, 68, 82,153,116,181,123, 50, 37,208, 69, 68, 62,194,134,119, 90,227, 74, 65,151,162, 46, 32, 28, 83,
- 68, 11,228, 40, 93,119,206,232, 84, 14,250, 34,236,179, 74,172, 99, 40,129,178,196, 28,241, 49,224,189, 16,216,230,121,150, 91,
-235, 48, 49,249,136,202,224,200,232, 36,194, 51, 31, 51,195, 48,113, 30,102,148,169, 10, 83, 90,188,233,149,211,108, 91,195,203,
-222,242,249,174,227,217,174,227,197,221,150,187, 93,205,174,183,180, 93,133, 49,137,156, 71, 82, 24, 57, 31, 30,121,245,230, 13,
-223,188,125,199,105,242, 76,115, 96, 28,103, 72,112, 30, 38, 14,227,196, 49, 40, 38,237,200,198, 73, 70, 52,129,202, 10,238,211,
- 24, 35, 64,158, 24, 72, 41,160, 85, 38,132,249,194,222,206,153,113,246,132,245, 50, 71, 81,178,231,213,107,189,228, 12, 25, 52,
- 90,153, 75,196,239,117,113, 95,217,254,185,224,124, 47, 63,148, 14,160,228,146,247, 62,240,125, 45,242,232,167,187,248, 92, 38,
- 50,139,152, 51,101, 72,145,148,194, 10, 61, 89,133,158,197,121,161, 22,139,249, 26, 3,250,137,139,112,185, 96,101, 20, 49, 75,
- 68,238,133, 0, 95,194,126, 83,250, 36, 94,118, 21,157,230,143, 43,236,151,139, 71, 78, 69,143,146,196,158,184, 62, 79, 11,164,
- 66, 43, 28,137,223,222,118,252,139, 63,255,167,108,226,196,233,221, 59, 30, 15, 39,116,183, 97,192,240,249,247,126,200, 20, 18,
-155,155, 27,190,121,251,142,175,223, 61, 96,155,158,113, 42,105,105, 49,114,222, 31,233,250, 27, 30, 79, 19, 95,191,187, 39,148,
-130,180, 63,236,185,127,184, 39, 34, 64,141, 20,188,104, 82, 84,228,230,118,203, 28,230, 85, 20,230, 42, 75,204, 17,101, 12, 89,
- 41, 30,246, 71,156,169, 10, 3, 61,173, 23, 54,235, 44, 93,223, 74, 6,131, 82,248, 89,198,237,214, 86,156, 79,103, 82, 9,207,
- 80,122,161, 91, 66,191,217, 20,156,105,203,105, 63,160, 17, 49,214,133, 60,169, 86,175,186,113,154,170,117,248, 50, 10, 37, 65,
-223,237,120,124, 56,161,144,113,130, 36,159,105, 20,150,156, 52,243,228,169, 43, 1,239,100, 52,198, 57, 66,202,132,164, 72, 88,
-162, 50,132, 44,249, 13, 40,135,213, 13, 73, 91, 18,150, 16, 53, 25, 75,202,197, 78,154, 10,107, 94, 84, 99,132,148,168,234,154,
-211,233, 64,221, 8,127, 34, 38, 1,243,164,172, 36, 47,126, 22,205,192, 60, 69,156,169, 57, 31, 7,156,118, 12,195, 88,190,175,
- 51,109, 83,177,219,116,152,210, 36, 84,174, 34,120, 9,114, 57,141, 39,238, 94, 60,231,254,113,207,221,179, 91,121, 38, 52,229,
-236, 21,152,203, 48,142,180,125,135,182,138,155,219, 27, 41,108,167,145,170,233,196,174,151, 20,113, 14,168, 4,125,211,150,213,
-101,166,235, 26,140, 17,120,214, 56, 78,171,213, 42, 23,187,161,236,219, 35,211, 56,173, 54,184, 37,114, 57,248,145,187,187,173,
- 8, 13, 99,160,109, 43, 32, 16,227, 92,236,198,145,166,117,180, 93,197, 52,141,107,208,142, 54,182,116,245, 66,249, 91,130,102,
-156, 83,232, 28,217,116, 45,190,104, 41,154,182, 99, 24, 38, 14,231, 1,109, 37, 26,119,246,178,243,118,206,173,129, 86,109, 93,
-161,114,166,111,133,163,162,141,140,193,181, 50, 43,240, 75, 40,112,142,121, 18, 5,188,179, 6, 98, 64,229,196,221,237, 13, 93,
- 83, 19, 11, 67,192, 25,187, 78,146, 98, 20, 93,194, 56, 78,204,147, 88,215, 50,137,113, 28, 48, 70, 62,247, 97, 24, 25,206, 35,
- 49, 36,180, 18, 81,228,117,242,229, 69, 84,188,136, 13,175,187,117, 57, 31, 53,159,116, 0, 95, 41,127, 11, 55,217,228, 75,173,
-150,230,168, 28,130,159,136,158, 92,118,162,226,142,189, 14,117, 73, 79, 14,179,165,152, 47, 94,239,101,156,149, 96, 45,250, 75,
-200,135,196, 82, 68,114,156, 73,113,186, 36,169,229, 92,118,226, 25,173,115, 73, 90, 10,132, 40,221,254,228,103,102, 63,227,131,
- 47,251,122,217,173, 87,149,163, 46,225, 16,193, 11,112,127, 81,162,174, 65, 8,165,168, 91, 45,100, 55,163, 86,242,238, 26,137,
-167,175, 33, 60,234, 82, 68, 46, 77,104,225, 79,163, 49,202,172,161, 43,139, 26, 58, 39,137, 89, 93, 16,178, 62, 70, 25, 47,206,
-158,217,123, 34, 34,182, 74, 57,147, 98, 98,154, 61,135,195,192,227,195,137,217, 39, 52,134, 24, 34, 42, 69,172, 78,108, 58,199,
-203,103, 29,159, 63,111,120,118, 99,233, 58,205,205,109,205,203,231, 45,109,157,200, 97,228,254,225,200, 95,255,237, 61,255,246,
- 63,189,225,255,250, 15,191,226,255,253,255,126,205,175,223, 61, 74, 1, 31, 70, 78,195,192,105, 24,184, 63,156, 56,205,153,179,
- 79,156, 39,143,182, 22,235, 28, 77,219,210,245,221,130,234, 39,248, 64, 10,137, 28, 50, 26,141,202,162,252, 92, 70, 72,222,135,
- 15,196,231,151,238,245, 19,195, 33,117,125, 33, 92,138,185, 92,168, 62,174, 79, 83,159,236,112, 63, 9,112,201, 79,135,236, 23,
- 45,200,127,254, 90,234, 99,221,247,178, 2,200, 43,184,233, 19, 16,153, 79, 69,163,126,228,227, 80, 75, 38,193, 50, 21, 91,130,
- 57,149, 92, 32,178,181,164,178, 46,170, 83,226,101,229,248, 31,254,244,207,216, 88,203, 56, 13,156,253,196, 15,126,240, 67, 84,
- 86,124,254,197,151, 4, 5, 94,101,134, 20, 24, 83,194,182, 45,135,211,192,233, 60, 80,183, 45,191,250,230, 27,206,100, 94, 31,
- 31,121, 28,207, 12,193, 19,114,226,116, 58,201, 8,177,170,215,164, 49,173, 20, 77,211,174,250, 19,239, 61, 77, 91, 23, 90,165,
- 38,167,139, 10,123,201, 21,208,214, 74,161, 47,221,199, 2, 51,186,142,228,156,231, 89, 18,210,172,227,241,241,145,205,102, 83,
- 68, 84, 10, 87,153, 85,113, 60, 77, 51, 99,201,224, 22,216,137, 93,227,101,181,213,100, 36,150, 84,101,240,147, 80,224,118,187,
- 27,246,251, 67, 25, 21,107, 33,173, 69,153,212,229,162,177,168,107, 17, 42,133, 20, 49,214, 72,162, 98, 73,145,147,149,146, 90,
-125,233, 74,169, 50,230, 13, 69, 47, 96, 47,209,213, 43,105,205,202,200,186,170, 57,159,103,154,182, 67, 41,195, 56,206,171,126,
- 36,167, 37,238, 88,196,117, 18, 34,149, 56, 28,142,124,254,249,231, 76,255, 63,107,111,214,100, 87,150,158,231, 61,107,218,211,
- 25, 50, 19, 9,160,166,174,234, 46,118, 53, 73,113, 38,109, 7,109, 93, 73,214,133,111,245,147,244,183,124,225,144,239, 44,135,
- 34, 44, 89, 38, 21,146,217,236,177,170, 26, 83, 78,103,216,227, 26,124,241,173,189,207,201, 4,208, 44, 69,184, 43, 50, 80, 3,
- 26, 64,102,238,189,214, 55,188,239,243,246, 29,198,104,246,199, 30,109,172,136,237,154,154,122,213, 8, 92, 38, 36,172, 43,240,
- 97, 90,206,196,148, 60,218, 40,182, 23,235,101,117, 40,207,144,206,224, 30, 41,127,174,159, 93,209,181,109, 38,101, 38,166,113,
-194,230,196,183,132, 34, 7,117,230, 32, 41,179,116,125, 74, 33, 10,113,192,216, 76,147,107, 26,134,126, 16,224, 88,134,250,184,
-162,192, 90,151,153,255, 45,117, 45,220,139,162,112,121,127,221, 51,140,195, 18, 4, 5,208,117, 29,239,222,221,176,217,110,176,
- 86,225,172, 89,194, 88,140, 49,148,101, 73,223,143, 24,155,185,239, 11,200,102,139, 82,208,181,199,133, 99, 63, 71,157,206,163,
-236,162, 40, 40,179,173,205,123,159, 35, 99, 85,158,242,200,121, 83, 21,229,226,115, 47,138, 34,131,120,138,197,157, 48,140, 61,
-155,237, 70, 34,112,243,154, 49,165,176,100,163,207, 9,112,195, 48,101,159, 58,217,205,225,241,115, 52,107, 94,201,204,246,198,
- 25,190,214,247,253, 71, 29, 55,243,125,170,148,250, 16,251,253, 76,245,126,150,104,165,158, 68, 85,235,147,214,231,163,110,217,
-101,238,159, 78, 23, 93, 8,129,160,195, 35,145,145, 28,122,143,237, 76, 41, 65, 72, 2, 95,152, 75, 91,163,158, 56,227, 83, 86,
-227, 39, 45,127,198, 28, 59, 39,242,186, 64, 76,158, 41,140, 57,187, 87,212,165,129, 68, 76,106,129, 68, 24,163, 49,214,192, 36,
-192, 11, 12,121,140, 44, 76,250,209, 79,120,151, 61,165, 89, 31, 48,171,237,245,185,104, 75,205, 36, 59,181, 68,227, 45, 7,237,
-147, 9,243,204,241, 93, 8,100,103,187,185,164, 51, 81, 45,201,225, 60,197, 68,136,185, 18,155,225, 3, 73,124,176,109, 63,114,
-232, 60,163, 7, 27, 34,227, 56,162,147,166,136,208, 20, 21, 23, 43,199,170,138,172, 43,233, 20,154,218,225,156,102,234, 70,190,
-253,246, 53,255,254,239,127,201,175,127,119,207,164, 36, 59,122,211,148, 92,109,215,244,193,176, 26, 35, 77, 93,202, 3,109, 11,
-118,195,192,175,223,236,121, 56,180,148,235,107,108, 81,136, 32,169, 17,168, 68, 97, 13, 70,153, 60, 82,155, 80,218, 48,141,158,
- 48, 9,108,163,109,251, 28, 94,145,137, 72,243, 14,248,145,212, 93, 45, 79,146,226, 20,153,123, 26, 77,207,147, 32,181, 88, 42,
- 83, 58,223, 49,235, 39, 86, 76,181, 48,206,159,190, 7,122,201, 23,124, 74,174,251, 39,175,234, 31,108, 71,211,217, 42,244, 84,
-193,174,206,242, 17, 62, 70,141, 91,222,141, 89, 40,255, 1,220,237,233,113, 18, 98,156, 81,138,100, 12,104,133, 79, 96, 81,216,
- 24,185,114,154,127,249,231,127,206, 31, 62,127, 65, 49, 13, 68,149,184,184,126,134, 54, 6,107, 29,117, 89,243,234,237, 91,190,
-248,250,107, 94,223,220,242,208,247,220,238,118,172, 54, 91,162, 54,124,255,230, 45, 94, 43,190,191,187, 97,152, 18,186, 46, 73,
-214,210,247, 45, 67,182,217,148, 69,205,224,167,172,230, 21,255,173,214,150,190, 23,223,184,181,162,228,213,202, 96,109, 65,223,
- 75,247,177, 90, 55, 76,126, 90,234,187,217,119,174,242,190,119,238, 70,180, 49,180,125, 71,189, 94, 51,236, 14,114,105,207,244,
- 63, 29,104,154,102,177, 20,137,224,200,136,159,125, 85, 51,140,189, 88, 56,157, 88,216, 98,144,175,222,126,119,192, 88,184,184,
-184, 32, 38,197,161, 61, 8,233, 50,167,216,197, 20,137, 83,194,213, 25,192, 82, 56, 66,128, 66,201, 65, 43,233,100, 2, 12, 9,
- 62,162,139, 76,157, 59, 35, 14, 90, 99, 69,228, 86, 23,180,199,142,209, 79, 50,250, 21, 47, 44,198,104,134,110,144,157,120,136,
-146, 23,158, 5,116, 50,198,117, 75, 38,134, 66,136,148,115,178,217,229,229, 37,206, 57,209, 13,168, 72,140,150,195, 97,207,213,
-213, 5, 87, 87,219,165,168, 0,208, 86, 49,142,131,164,193, 5,225,163, 75, 68,114, 65,215,143,226,152,143,105, 17,151,125,242,
-220,211,212, 21,101,225, 80, 72,196,233,186,174,185,187,185,229,234,234,146,190, 31, 9, 94,138,181,121, 15, 28,188, 71,107, 69,
-213,148,132, 20,114, 22,187,162,109, 91, 94, 60,127,193,209,118,236,247, 71,202,170,166,235,123,201,113, 55, 10, 91, 20,164, 97,
- 56, 1,117, 98,162,105,154,133, 69,191,223,239,185,184,184,200,233,142, 98,111,123,253,250, 21,159,125,246, 41,183, 55,247,108,
- 86, 53,211, 52,177,123,216, 97,172, 97,181, 90,211,181, 71,234,178, 98,229, 28,109,223, 19,166,145,151,215,207,121,216,223,211,
-247, 45,113, 26,185,186,186, 98, 24,134, 5,128,164,148,228,106,104,163,179,211, 40,187,190,148,216,201,134,110, 92,132,157, 50,
- 1, 22, 86,255, 20, 2, 49,235, 12, 4, 31, 28, 40, 42,241,205,247,253,152, 57,250, 35,214, 22, 89,103,112,178,208,196,140,239,
-157,178,163, 66, 92, 18,249,217,207,169,155, 33, 37,246,251,125, 78,223, 19, 65,233,178,254,206,238,155,115,124,180,229, 3,146,
- 32, 69,122,143, 82,181, 36, 84,229, 51, 45, 60, 69,120,158,129,105,210, 98, 67,122,212,170,230, 79,104, 34,230,135,246, 81, 71,
-127,242,136,136, 34,147,147,207,120,249, 51,133,176, 32,242,100, 12,126,202,102, 87, 24, 25,219,230,160,149, 20,101,127, 78, 12,
-185, 96,200,187, 86,201,121,203, 74, 86,121,253,140, 22, 56,193,228, 61, 54, 56,148,201,194,148, 24,137,227,192,218, 25,162,229,
- 44, 47, 93, 47,160,153, 83,238,149, 90,252,168, 42,171,223, 77,222, 35,170,243,245,111,134,205,204,171, 1,173,165,218, 77,137,
-188,195, 82,203,133,174, 80,248, 40,126, 83, 99,178, 63, 54,138,128, 39, 68, 24, 99,162,157, 2, 99, 12, 52, 54,211,182,198, 73,
- 34, 29,189,199,146,176, 74, 83,104, 67,153, 63,199,113, 76,252,215, 95,189,229,223,254, 31,127,199,223,253,234, 45,237,100, 72,
- 86, 81, 87,150,109, 83,113,181,243,108,154,150, 85, 45,251, 34,239, 39,140, 43,241,170, 96,194,177,189,184, 98,253,236, 57, 1,
-197,221,195, 61, 93,223, 73,164,162,145, 75,114, 10, 18,150,224,167, 72,215, 15,248,148,232,253, 68, 55,244,115,235, 45,223, 10,
-157,139,178, 57,100, 67,197, 71, 45,252, 92, 16,129, 90, 2, 91,210, 12,119,103, 94,227,228,108,245,200, 50, 5, 58, 69,157,158,
-136,116, 75, 62, 59,115,241,120,190,175, 78,239, 67,224,207, 89,242,249, 57,148, 41,110, 90, 2, 81,126, 72, 15, 31,127,143, 69,
- 77,125, 96,114,240, 52,172,229, 67,225, 45, 42, 61, 14, 72, 94,236, 23, 97, 22,225, 65,152,159,107,160, 81,154,127,245,215,127,
-197,255,248,135,127, 8,199, 61, 87,215,207,232,195,132, 93,173,248,197,175,127,203,197,197, 53, 97,152, 80, 73,243, 95,255,223,
-159,243,110,183,167,155, 38,108, 89, 17,208,132,236,163, 78, 10,238, 31,246,188,252,244,115,238,118, 7, 30, 30,222,162, 52,184,
-178, 36,250,147, 61,107,202,251, 69, 65,113,202, 46,187,110,106,146,150,145,165, 51,178,103,236,186, 65, 88, 14, 85,157, 51,189,
-167,124,145,157,112,152, 90, 75, 76,168,202,251, 87, 63,201,251,219,182,189,128, 84,148,164, 4, 66,202,240,147,145,174,235,243,
-136, 60,176, 90, 53,140,126,202,108,115,187,112,208,139,162, 96,191,219, 49, 77, 35, 87,235, 43,137, 55,157,197,171,117, 73,223,
-245,216,252, 62,218,194, 9, 73,206,251,101,194, 88,175, 26,180,177, 12, 97, 98,202, 9,145,218,230,142,187,107,115, 65, 18, 41,
- 11,161, 64,134,156, 68, 7,176, 63,118, 25,211,154, 50,210, 54, 98, 50,195, 66,172, 93,178, 14,216,110,214,244,237, 64, 76,137,
- 49, 39,185, 37, 37,214,184,117,211, 64,138,188,126,253,154,151, 47, 95,114, 56,182,196, 8,125,223, 49, 78,138,151, 47,159, 17,
-163,103,187, 93,113,127,191,231,242,162, 33, 50, 49,180,178, 63,190,126,246, 44, 79, 73, 36,167,189,170,106, 64,146,228,116,126,
-238, 14,199, 3, 69,105,115, 74,155, 4,163, 92, 95, 92, 73,209,225,196,239,125, 60, 30, 72, 57, 79, 62,165,124, 30,171,236,155,
- 31,134,156, 27, 46,168,235,113,236,169, 43,199,241, 40, 58,143,110, 28,113,174, 88,236,204,226, 99, 63,112,113,113,137,143,137,
-205,102,179, 20,198, 51,245,109,142,231,125,246,236,138,227,241, 64,215,181,252,248, 39, 95,242,171, 95,254, 82,232,152,182,204,
- 74,248,130,242,210,113,119,115,195,139, 23, 47,168, 11, 97,203,147, 2,207,175,174,104,219, 22,239, 61,183,183,183, 98,139, 35,
- 49, 12, 82, 88, 37, 4, 85,172,180,202,148,188,120, 70,129, 84,203,179, 57,249, 41,195, 98,170,101,146, 52,255,156, 37, 40,199,
- 26,138,210, 50,249, 97,233,180,199,209,103, 69,188,201, 1, 47,146,216,198,252, 76,164,176,232,120,130, 79,132,100,196,138, 55,
-250,220, 8,126, 36,218,249,108, 53,103, 67,182, 51, 24,117,150, 83,117,238,123, 61,139,171, 92, 82,212,180, 38,233, 60,242,139,
- 31, 83,207,171, 71,243,126,137,136, 19,193, 84,204,187,198,112,118,160,205, 23, 94,204, 23,186,236, 34,197, 71,174,114, 48,139,
- 85,224,116,162, 48, 9,171, 2,133,145,127,214, 42,123,250,146, 33, 37, 3, 73,118, 59,130, 37, 21,132,163,210,114,200, 73,132,
- 33, 11,215,217,135,184,236,237,114, 38, 33, 49, 38, 98, 16,193, 94, 28, 6, 54, 85,193,182,114, 34,252, 35,200,195,155, 1,181,
-106,217, 96, 36,180,210,146, 0,167, 78, 60,231,185,151,215,203,232,248,236,235,178, 80,203, 78,200, 81, 53,199, 75,166, 68,152,
- 34,131, 15, 18, 64,145,192,135,136, 53,150,148,180,216,217,124,160, 29, 71,146, 49,172, 54,107,234,186,100,154, 38, 44, 30,131,
- 70,133, 72,138,178,223,215, 86,252,210,191,252,246,134,255,245,255,252,207,252,199, 95,188,163, 79, 21, 30,141,138,138,190,131,
- 93,215,243,246, 97,164, 46, 45, 77, 41,162,151,162, 44,216,108, 43, 46,182, 13,206, 22,216,216,227, 71,121, 97,199,105,192, 25,
- 77,215,247,242, 96, 59, 1, 20, 77,163,167,235, 69, 15, 48,133,200,113, 24,241,103,143,136, 49, 38, 79, 35,210,147, 78,155,179,
-148,189, 39,194,177,133,119,172, 30,101, 17, 44, 62,241, 39,232, 84,158,178, 19, 84, 6,135,132,244, 65, 78,252,153,172,253, 20,
-150,154,167, 76,105,241,125,103, 21,125,142, 7,126, 44, 84, 73, 31, 28,169,127, 80,181,126, 70,173, 91, 8,118, 79, 2, 93, 30,
-133,196,168, 83,108,241,194,115,152, 65, 76, 90,101, 69, 64,182,130,166,132, 78, 18, 10,212, 36,248,235,111,190,225, 47,191,252,
-138, 75,107, 57, 30,142,132, 8,211, 20,249,213, 47,127,141,110, 86,252,238,221,141,132, 24,217,146,227, 94,132,140,159,254,232,
- 71,188,122,251,142, 99,219,209, 15, 35,201,104,234,186,228,147,231, 47, 37, 42,115, 28,169,138,130,245,197,134,221,110,151, 41,
-111,158,203,203, 75,222,222, 63, 16, 83,228,112, 60, 48,140,131,228, 82, 23,197,242,253,242, 49, 18,198,145,105,156,184,188,220,
-230,177,176,128,104,180, 53, 20,115,247, 97,204, 2, 23,177,206,190,151,185, 94, 55,117,126,143, 34, 69, 37, 99,214, 16, 38,234,
-186,100,236, 61, 69, 89, 18, 73,140,126,164,168,202,147,213,111, 57,148,125,134,214, 20,185,112, 16,109,200,106, 85, 51, 14, 3,
-227, 52,161, 84,100,189, 89,179,219, 29, 50,234, 56,130, 86, 98,201,204, 84, 49,148,216,206,156,117,121,100, 42, 10,121,239, 3,
-101,153, 69,125, 85,201,241,120,160,174,155, 92,196,207,128,150,184,156, 59,218, 36,124, 28, 49,133, 37, 41, 89, 53, 22,165, 97,
-154, 2, 42,164,229,153,153, 11, 11,178,143, 95, 34, 75, 29,227, 36,176,149,232, 3, 55, 55,247, 92, 95, 95,226,125,100,181,138,
-180, 93,203,229,213, 22, 63,121, 52,145,187, 91, 81,146,107, 99,184,127, 56, 72,238,121, 81,178,217,172,232,250,142,171, 43, 25,
- 85, 63, 60,220,114,121,121,137, 82,210, 41,222,221,223,242,252,249,245,162, 97,152,133,132, 49, 68,146,159, 71,199,130,139,246,
-126,202, 22,174, 18,107,101,239,111,148,161,112, 14,109, 69,111,180, 59, 30, 88,215, 13,174,176,140,121, 79,189, 63, 28,242,254,
-187,163,201,136,215,178, 44,217,239,247,146, 16,151,139,179,148,207,111, 66,224,199, 95,126,197,183,223,126, 71,219, 30,105, 86,
-107,246,251, 61,207,175,159,113,121,121, 73,219,182,108, 54, 27, 25,189,119, 93, 22,197,105, 46, 47,179, 74,126, 24, 78,133,164,
-158,177,172,115,106,218, 64, 89,214,103,156, 11,205,126,191,227,242,242, 10,159,117, 66,211, 36,147, 19,107,141,104, 27,242, 59,
-127, 2,209,136, 96,110,118,105, 8,226, 87,236,173,109, 43, 17,180,195,228,115,208,147,172, 50,130, 23,166,193,204,143, 7, 40,
-140, 93,180, 59,231,103,205, 57,140,106,233,220,159,166,165,235,244,129,225,226,251, 14,159, 69,237,158, 22, 75, 82, 92,236, 93,
-143,227, 81,103, 35,153,140,125, 38, 47, 73, 69,115, 78,242,188, 11,152,213,166, 11,205, 75,202, 88,201, 36, 87,145,210, 42, 74,
- 27, 41,180,167, 80, 19,181,243,148, 54, 80, 23,145,186, 76, 20, 38, 0, 19, 41,139,205,124, 8, 12, 83, 96,152,252,242, 5,213,
- 89,129,124, 14, 36, 9, 62, 64, 2,103, 11, 52, 50,118,153,134,137,161,159,152, 38,177, 37,133, 40, 99,112,159, 32, 42, 9, 31,
- 89,246,230,249,195, 24, 35,140,105,165,196,155,110,197,151,110,140,206, 74,124, 50,164,128, 69,160, 50, 23, 47, 79, 69, 15,126,
- 10,140,163,103,202, 23,186,207,187,180,144, 25,234, 62, 37, 17,201, 13, 3, 65, 37,154,205,138,102,211,176, 90,213,108,214, 13,
-171,170,102,211,212,108, 86,226,215, 77, 42,128, 78,188,189,123,224,223,254,251,255,155,255,248,203, 87, 28,116, 77,139, 34, 89,
-141,199,224,113, 76,148,244,177,160,245,142, 99, 40,104, 83,197, 64,195,161, 75,220,239, 91,218,174, 99,179, 90,209, 84, 37, 85,
- 85, 82, 22, 57,109,201, 24, 92,233, 40,235, 42,219,212, 20,211, 40,156, 47,195, 13, 0, 0, 32, 0, 73, 68, 65, 84, 47,117,136,
-114,224,207, 89,232, 42, 79, 50, 84,246, 28,207,207,135,202, 35,151, 57,203, 92,127, 96, 43, 62, 7,106, 60, 46, 22,207,224, 11,
-203,247,246,164,234,148,119, 37, 46, 10,247,247, 4,116, 89, 47,162,211,123,255,233,212,173,159,143,244, 19, 63, 72,181,254,209,
- 29,123, 60,165, 15,170, 15, 90,225, 30, 19, 22, 23,136,140,210,153, 23,158, 63,148, 89,138, 13, 61,227, 76,115,125, 89, 38, 40,
-135,137, 63,253,209,231,252,171,191,249, 43,190,184,184,160, 41, 43,202,139, 13,177, 44, 24,162,226,221,221,129, 55, 55,247,152,
-178,166, 29, 35,119,119, 59, 54,151, 87, 84,171, 53,111,239,238,105,187,158,139,139,173,136,143,162,236,190,159, 93, 93,113,247,
-238, 29,171,170,160, 42, 28, 70, 65, 89, 58,172, 49,124,241,249, 23,140,227, 72,138,137,170, 42,105,143,123,188, 31,169,155,154,
-178,172,240, 65,188,217,109, 55,240,176,219, 83, 84, 98, 27,115,206, 73, 90, 91,240, 89,131,225,151, 92,131,243,226, 45,132, 64,
- 85, 85,188,123,247,142,237,118, 75,204,251,203,178, 46,101,108, 31, 4,216,161,243, 88,187,170,107,142,237,145, 85,211, 44, 74,
-225,105, 18,213,248,126,127, 36, 69,121,231, 83,132,105,244, 12,195,192,170,169,232,142, 71,166, 81,132,125,214, 74,178,214, 52,
- 78,139,231, 88, 8,101,217, 22, 69,162, 89,173,228,157,205, 7,120, 34,219,211, 20,139, 5,106,204, 41,133,117, 93, 81, 88, 33,
- 77, 46,156,251,232,137, 41,102, 12,172,146,216, 78, 29, 25,199, 78, 44,102, 90, 99, 51,175,194, 25,139, 31, 60, 67, 39, 22, 87,
-173, 13, 55, 55,119,108, 86,107,225, 82, 88,139, 85,134,238,112,164,114, 21,165,117, 92,110, 86, 84,133,193, 89, 75, 85, 53,172,
- 86, 27,180,182, 60, 60,236,177,198,240,226,197, 11,180, 22,133,123,159,125,218,135,195,145,126, 28,104,154, 21,119,119, 55, 84,
- 85,193,231,159,127,142, 82, 98, 75,155,166, 9, 87, 88, 92, 81,228,104,214,220,161,142,163, 76, 70,227, 76,124,148,172,240,113,
- 58,165,150, 53,171, 6,231, 44,171,213, 74, 26, 16,107, 57, 30,164,115, 46,235, 44,198, 51,102, 1, 15, 25, 99,114, 55,205,114,
- 95,180,173,196,169,238,247,123,190,253,246, 91, 72,145, 47,127,244,185,100,162,143,114, 73,223,223,223, 83, 85,245, 18,119, 90,
- 22,197,130,158,157, 98,224,216,119, 2, 10,178,134,213,122, 35,112, 31, 91, 80,215,141, 52, 90, 49,178,106, 42,130, 31, 37, 76,
- 43,211, 70,103,162,157,206,191, 86, 8, 97,233,252,157,179, 56,103, 41,138, 98,217,157,119, 93, 39, 43,216,148,112,198, 82, 24,
- 71,229, 74, 9,136,138, 18,187,107,116, 33,226,204,164,113,182, 60, 27,165,235, 60,197,157,131,192, 30,223,153, 39, 10,235,227,
- 38, 64,127, 80, 48,148, 62,178, 53, 76, 31,243, 4,167,143,118, 39,143,144,154, 49,226,195,136,247,227,123,127,184,115,239,122,
-204,222,116, 9,225, 12,194,105,215,137,202, 6,106,231,169,138, 64, 93, 66, 83, 65, 93, 26, 10, 43,180, 54, 31, 35,173, 15,236,
-251,145,187, 99,199,253,177, 99,223, 14,180,227,196,224, 35, 99,144, 32, 7,137, 16, 61,237,182,141,177, 25, 51,105,240, 62,102,
-111, 43,184,178, 98,181,185, 32,105, 67, 63,121,198,204, 84, 94,168, 51,234,148, 23, 47,214,182,211,143, 38,123,107, 77,166,101,
-205, 63, 71,101, 2,209, 41,103,155,211, 14, 94, 25, 64, 19, 82,100,156, 70, 70,239,241,121,167, 62,133, 72,200, 49,141, 73, 18,
- 31,152,124, 66, 69, 40,172,101,234, 91,218,118,143, 78,145,186, 80,212, 78,177, 93, 59,154,181,195, 84,142,195, 16,248,119,255,
-233, 31,248,127,126,254, 61, 93, 44, 24,163, 38, 97, 22, 11,159,143, 17,143, 34,106, 71,208, 78, 20,188, 72,206,188,115, 5,117,
-179, 98,187,221, 74, 62,252, 52,176,170, 43,154, 74,128, 12, 85, 85,177, 94,173,104,154, 74,224, 22, 69,177,116,224,147,247,146,
- 33,172,222,139, 25,201, 23,183,122,124, 33,159, 63,123, 31,124, 14,213,146, 42,245,248,209, 60, 83,112,158,117,233,231,100,194,
-167, 44, 25,217, 26,157,172,107, 39, 78, 58,232,116,234,160,197, 22, 25, 31, 65,135, 62, 28,174,242,131, 21,116,121, 2, 32,223,
-199,148, 11,197,164, 78,255,156,148, 38,207,252, 79, 85,116, 22, 88,165,217,113, 50,107, 11,114,192,235,188,100,176, 33,242,213,
-213, 21,255,203,223,254, 15,188,168, 10, 76,140,180, 93,143,118, 5,175, 30,118,180, 40, 76, 81, 51, 13,145,155,187, 61,177, 44,
-137,165,227,174,109,185,239, 59,246, 93, 75, 81,150,220,222,220, 82, 89,203,139,171, 43, 46, 47, 54,124,255,250,123,202,170, 16,
-213,118,140, 12, 93,203,231,159,188,164, 42, 28,199,221, 3,199,195, 1,235, 44, 33, 76, 76,190,199,149,134,110,232, 8, 41,209,
-182, 3,253, 48, 17, 35, 98, 11, 51, 70, 98,134,179,120,168, 40,138,197,254, 56,219, 50,141,145, 9,147, 50, 58,231, 89,123,233,
-190, 71,217,135,206,194,161,166,169, 25,199,129,170,170, 25,199,137,245,118,205,126,255, 64,211, 52,184, 92,120,198, 24, 41,140,
-163,111,123, 8, 9,165, 13, 38,147,200,108, 81,230,177,125,129,159, 70, 10,235, 8,147,160, 69,199,113,200, 65, 67, 50,161,113,
- 86,194, 62,186,126,200, 64,154,140, 89, 77,208, 30, 91, 9,129, 9, 81, 70,203,200, 69, 60,141, 35,206, 25,156, 53, 20,133,149,
- 51, 65, 33,162,172,164,176,153,161, 30, 66,228,112, 56, 96,140,197, 21,142,237,246, 2, 98, 98,221, 52,212,165,131, 24,168,171,
-138,113,244,164,152, 24, 7,207, 56, 76,248, 16, 49, 86, 45, 0,153,170,106,248,249,207,127,201,197,197, 5,214, 9, 11,226,205,
-155, 55,172,215, 13,117, 83,242,252,249, 21,253, 48,240,238,230, 29,205,170, 98,123,181, 69,233,136,177,134,209, 7,124,128,105,
- 74, 57,144,198,208,118, 61,195, 48,177,189,216,208,182, 50,150, 79,217, 19,239,115, 90,221, 60, 65,216,172, 86,226, 40, 9, 17,
-107,140,104, 44,148, 69, 41,203,110,119,160, 61, 30, 41,157,101, 26,122,154,170,162,159, 70,108, 89,112,104,123,124, 76,172,183,
- 27,142,199,227,130, 84, 85, 74,229,207,169,226,120,108,151,226, 74, 68,113, 21,187,221,158,227,241,200,106,181,162, 44, 10, 66,
- 16,132,174,113,150, 87,175,223, 8,206, 91, 9,100,168,105, 42,154, 92,228,141,147,167, 61,118, 76, 99,224, 97,183,163,237, 58,
-142,199, 35, 36,104,234, 26,231, 10, 66, 72,203,202,166,174,196,242,235,156, 35, 32,176,153,170, 42,113, 70, 50, 2,116,130,210,
-186,211,234, 83, 41,116, 74, 52,101, 69,140, 57,200,203,203,228,169, 44,203, 60,133,144,166,178, 42,203,229,252, 59, 30,143, 57,
- 30,251,100, 93, 83,153,142,122,178, 73, 63, 62,119,100, 50,116, 74,194, 52,206,152,127, 51, 19,145,150,191,212,227,196, 10, 53,
- 43,223,231,161,179, 62,177,221,245, 76,251,210,106,145, 16,205,254,236,243, 99, 88, 43,189,236, 69,140, 22, 28,233, 83, 65, 16,
-249, 11, 33, 15,136,140,138,204, 98, 61,131,210,142,148, 69,162, 42,228, 50, 47,173, 4,161, 56, 43,123,191,193, 39,238,246, 29,
- 55,247,123,110,238, 15,236,143, 61,253, 20,241,249, 82,244, 25,130, 50,249,144, 47,119,137, 93,149,210, 65,225, 67,146,138, 27,
-197,106,221,176,222,174, 89,175,106, 12, 9, 21, 39,170, 66, 94, 74,149, 47, 99,147, 47,116,163, 69,121,107,140,116,233,206,168,
- 76,199,178, 88, 35, 35,121,107, 52, 54,131, 14, 78,170,247, 51,200,238,108,247,203, 95, 11, 31, 68, 97, 26,209,248,236, 48,168,
-115, 87, 52, 69, 56, 12, 19,111,110,118,236,143, 3,245,122,131,210,112,220,223, 67,240, 52,133,230,243,103, 21, 95,189,104, 40,
-108,196, 71,197,127,254,199, 87,252,111,255,238,191,240,253,109,192,211,144,148, 67, 37,233,178, 83,182,152, 24, 43, 15,109, 97,
-173,116, 20, 6, 44, 1,149, 2,195, 48,112,220,239, 56, 28,118, 88,235, 88,111, 47, 24, 70, 15, 49,113,121,177,101,181,146, 11,
- 62,133,196, 52, 76,210, 13, 41, 37,153,241,211,116,118,207, 42,206,128,107, 11,104,102,185,104,151,121,247, 28, 86,240, 88,153,
-161,158,116,199,239,217,192,102,167,246, 57, 17,137,147, 24, 36,157,161,102,207,152, 54,239,219,223,150,191, 17,181,180, 58, 75,
- 31, 84,185,154, 75,191,103,247,253,209,203, 92,157,222, 49,149,139,188,223, 87, 16,159,160,184, 58,143,232,212, 73, 31,160, 82,
-118,165,204, 57,220, 10,157, 34, 23,198,241,175,255,229,191,224,235,103,151,216,177,199,143, 35,171,139, 11,238,118, 7,188, 45,
-248,254,221, 45,171,102,203,212,203, 36,104, 48,138, 95,126,251, 61,155, 23,215,188,221,221, 99,139, 66, 32, 72, 49,241,236,242,
- 2,165, 21,251,246,200, 20, 60,125, 86, 35,239,246, 15,160, 18,187,251, 7,246,187, 29,133, 43,216,183, 61,117,211, 72,192, 72,
-244, 76,126, 68, 27,205,241,112, 16, 60,114, 81, 96,172,202,158, 98,185,164,186,174,149,247, 34,175, 58, 66,144, 93,111, 93, 55,
-103,130, 55,217, 81,142,121, 28, 57,228,108,130,178, 44,115,114,149, 40,236,155,186, 17, 63,187,115,132, 24, 40,202, 2,109,140,
-232, 62, 50,213,107, 26,252, 50,182, 95,109, 54, 36,230,245, 81,192,185,172,158,238,164, 99,189,122,118,201,187,183,239, 68,120,
- 27,163,160,167,141,202,208, 22,143,118,194, 40, 31,250,129, 24,230, 51, 48,101, 70,187,120,146,171,162,160,235,123,156, 53,172,
- 55,141,216,112, 99, 90,128, 44, 85, 41,222,111, 57, 63, 12,222,139, 26,127,191, 63, 74,241,161, 68, 3, 52, 83,241, 98,136,143,
- 46, 1,242,126,119,166,115,134, 32, 74,251,178, 44,232,186,150,205,102, 69, 74,129,195,225,184,116,154, 85, 41, 5,212,177,149,
-113,244,122,179,102,189,222, 48, 77, 81,132, 91, 83,192, 79, 19, 69, 85,176, 94, 53,220,221, 61,176, 89, 11,155,189,239,142, 50,
-165,171, 10,110,111,111, 36,113,172,105,168,171, 98,137,203,174,202,154,224, 35,222, 7,234,186,146,232,211, 36, 28,120, 97, 22,
-200, 25,208,181, 3,202,104,218,182, 91, 24,247,199,182, 99,181,106,150, 17,246,220,137,214,117,205,225,112,148, 64,152, 76,214,
-148, 40,103,185, 92,171,170,226,246,238, 86,116, 54, 74,177,106,214,248, 16,216,239,143,108,183,235, 69,227, 98,173,149, 21,149,
- 49, 11,253,180,170,100,173, 19, 67, 32,134,144, 93, 21,230,209,185, 49, 39,253, 25, 99, 51,106, 89,196,212,214, 88,166,105, 92,
- 28, 0,243, 62,125,142, 95,205,176,136,252,245,200,133, 18, 51,154,183,100,202,194,206,201,135, 37,236, 73,127, 32,220, 41,197,
-240,104, 77,119,190,174, 59,223,249, 43,165, 48,206,184,127,115, 26,119,170,133,169,206, 83,181,251,252,139,104,136,231,151,122,
-206,131,125,250,243,230,206,104, 62, 12,173, 54, 20,174,164,176, 37,214,184,133,143,172,208, 39, 21,116,182,252, 68,239, 69,144,
-102,192,153, 68, 97, 19,133,133,210, 69,170, 18,234,210, 82, 59, 67,229, 52, 70, 71,146, 74,244,163,226,219,183,123,254,225,183,
-111,248,238,221,142,219,195, 68, 59,105,250, 73, 17,130, 40, 20,167,224, 25,130, 92,242, 62,137, 37, 35, 36,185,216, 67,138,130,
-153,140, 19,218, 70, 46, 47,214, 92,108, 86, 40, 13,227,208, 67,244,172,202,130, 50, 39,191,153,156,176,102,102, 5,189,209, 88,
- 45, 1, 41,165,179, 20,198, 96,181,150,203, 49, 91, 50,140,145,189, 13, 90,157, 93, 28,144,244,201, 83, 28,179,254,123,166, 79,
-161, 5,242, 31, 1,235,196, 63, 27,147,226,208,245,188,187,187,231, 56,193,243,207, 62,229,226,242, 18,167, 13, 86,121,182,101,
-226,143,191,124,206, 39, 87, 53, 58, 77,220, 61,244,252,239,255,215, 47,248, 15, 63,127,203,168, 75, 66,222,207,206,249,224, 38,
-251,235,109,214, 9,104,228, 33, 82,209,163, 8,148, 70,243,108,187,225,139,175, 62,229,235,175,191,228,250,242,138,117,189, 33,
- 38,232,186, 35, 47,158, 93, 80,150, 37,206, 20,248,193,211,119, 61, 93, 63, 50,250,192,254,216,137,162, 83,155, 71,221,245,121,
- 44,105, 74,167,110, 19,222, 79, 57,123,146,187,114,218, 39,161, 30, 37,166,205,246,115, 53, 59, 16, 30,217, 14,212,105,188,175,
-206,126,189,108,223, 81, 79,158,249, 83,230,121,134,225,204,239,133,154, 59,102,254,201,168,212,144,102,145,231, 9,177,172,243,
-175, 49,119,229,234,108, 23,246,244,243, 83,249,247, 58, 37, 31,166,156,234,149, 5,155,233,177,245, 79,167,196, 10,248, 23,127,
-243, 55,252,201,151, 63,130, 97,144,213,151, 41, 24,163,226,102,127,224, 63,252,221,223, 83,111, 47,121,115,123,207,148, 18,175,
-111,110,217, 62,123,198,195,177,101,119, 60,112,108, 15,108, 55,107, 41, 14,182, 27, 54,151, 27, 30, 14, 59,146,145, 41,193,177,
-237, 24,166,145,132, 98,189,222,202,197,224, 61, 49, 37,234, 74, 84,200,227, 48, 44, 40,214,186,174, 50,122, 57,162, 85,162, 89,
- 23,184,210,224, 39, 17,109,197, 24, 68, 20,149, 20,193,135,197, 87, 63, 39,172,197,152, 24,250, 33, 75,101,229,107,114, 60, 28,
-113,214, 98,172,140,149,125, 30,227, 26,101, 56,236,247,108, 47,182, 18, 20, 83,184, 60,142, 77, 40,101, 24,250,158,148,228,125,
- 45, 42,139,113,142,194, 57, 14,251,157,140, 90,131, 23, 76,233,254,200,245,245, 11,246,251, 3, 99, 14,122, 1, 48,121,183,175,
-180,162,112, 22,173,116,238,226,227, 82,156,133, 16, 73, 33, 46, 98,184,102, 45,164, 58, 25, 87, 91,214,171, 85,246,113,107,250,
- 97,164,174,106,194, 52, 82, 86,114,185,207, 92,130,105,148,220,237,170, 42, 24,179,202, 60, 38,225,116,172,215, 43,124,240,226,
- 26, 72,121, 82,168,172,196,163,198,200, 56,140,172, 86, 21, 90,195,232,199, 37,119,160,235, 36,227, 98, 24, 58, 94, 62,191,100,
-183, 59, 16,124,100,232, 71, 46,182,235, 12, 7, 74, 76,121,146, 58,121,207,122,213, 80, 56,203,216,119, 92,110, 86,168,108,247,
- 42,138, 18, 63, 5,186,182,229,217,213, 21,211, 56, 96, 92,198, 18,251, 0, 74, 51, 78, 35, 40, 40, 11,183,172,216,148,150,238,
-115, 28, 39, 41,220, 6,201,180, 40,203,154,162,112, 12, 67, 79, 93,150,164, 40,254,237, 38,199,174,250,105, 98,189,110,114, 66,
-102,202, 8,224,158,162, 44, 25,167,137,245,102,195,246,242, 66,104,155, 49,230, 16, 32,131,177,138,113,154, 40,235, 42,139,163,
- 69,247, 99,114,206, 71, 85, 56, 74,231,100, 52,238, 36, 93, 50,229,247,201, 58,113,109,196, 36,250,172,185, 91, 54,243,243,140,
-146, 96, 32,107, 25,166,145, 16, 3, 85, 93, 19, 98,160,237,122, 76,118, 62, 20,149,160,209,167, 48,201,228, 72, 41,161, 3,230,
- 53,147,143,225, 17,109, 93,171, 39,197,254,188,110,204,171,165,249, 93, 56,111,108,230, 70,241,164,126, 79, 79,248,210,234,108,
-119,120, 18,165,147,102,119,154, 18, 59,210,210,233, 36,149,187,153,211, 62,243,164,128, 63, 29,185,146, 5, 43,233, 70, 33, 6,
-116,152,187, 84, 75,202,145,150,230, 12, 47,171, 85, 18,106,155,202,152,198,156,154,100,141,201,138,117,149,137,116,138, 93,215,
-241,219,223,189,227,245, 93,203,148, 20,104, 75,145, 96,140, 17, 31, 71,220, 36,169,108,202,198,156,145,158, 48,198, 45, 54,170,
- 16, 78, 89,241,179,234,181,237, 59,118, 15, 15,196,113,224,114,149, 41, 68,232,252,255, 7,157, 98,238,216,101,228,238,140,206,
- 49,140,250, 81,135, 62, 83,231,102, 49, 70, 58,247, 32,235, 25,242, 35, 25,222,243,222,216, 24, 67, 76, 62, 35, 45, 69, 72, 50,
- 78,147, 28,116,103,241,123,155,139, 45,207, 94, 92,227,180, 97,229, 12,133,105,248,242,178,228,229,229, 86,162, 15,167,196,119,
-175,110,249,251,159,127,199,160, 10,166, 56,143,109, 37,152, 38,229,139,199,204,211,133,194, 80, 22,142,170, 44, 88, 21,150,235,
-237,138,207,159, 95,243,197,103,207,217, 92,173, 32, 6,218,125,143, 87,138,207, 62,123,193,221,195, 91,156,147,172,234, 16,225,
-198,203, 30,125,189, 89,115, 24,238,152,188, 71,105,155,125,185,167,207, 91,163,136, 42, 61,138, 38, 61,165,250,165,243,120,192,
-217,175,176, 40, 52,244,217,168,254, 49,237,240,177,211, 98,190,162,165, 51,155, 69,121,241, 52, 1, 56, 71, 29,115,162, 50,157,
- 34, 96,231, 44,130,244, 8, 23,155,126,160,173,109, 1,235,156, 21,172,167,252,244, 83, 18,250,211,228,183, 71,255,124,158,151,
-158,226, 82, 0,159, 2,111, 36,206,211, 42, 40, 82,226,155, 31,125,201, 95,253,236,143,152,142,173,248,143,157, 97, 28, 6,186,
-187, 3,175,111,222,177,222, 94, 18,129, 33, 76,236,187,142,168, 18,251,221,142, 55,175, 95,241,197, 87, 95,210,172, 42,142,135,
- 29, 77, 93,211,212, 21, 55,183,183,130, 13,110, 26, 30,178, 96, 76,105,195,122,189, 34, 69, 89, 25,205, 98,162,105,232,100, 44,
-107,128, 62,208, 13, 61,211, 56, 96,157,163, 61,236, 89,173, 43,148, 46, 73, 73, 14,108,173,117,246, 5,171,197,253,145,136,184,
-236, 83, 22,146, 87,206, 59,200,249,246, 38, 91,246, 66,138,194, 52,127,246, 76,246,175,218,114,115,115,131, 54,210,121, 13, 83,
-159, 15, 99,233,112,251,126, 88,146,217,172, 53, 96,210, 98,183,138, 33, 81,184, 18, 31, 70,238, 31,118,146,107,238, 28, 55,183,
-239,228,247, 77, 73, 38, 90,185,208,118,214,161, 85,196,251,136,213,134, 62, 3,111,124,110, 70,202,178, 88, 2,176,130,140, 67,
-179,190, 49, 46,177,156,210,145,105,186,174,197, 24, 77, 89, 72,158,119, 93, 85,146, 84,150, 18,214, 58,142,199, 22, 87, 73,119,
- 90,213, 37, 62, 4, 14,199, 3,155,245, 70,212,234, 70,229,188,115, 73, 70,147,128, 21, 56, 30, 91, 94,188,188,166, 31,123,124,
-136,140,222,163,180, 97,232, 7, 92,161,136, 42,114,113,177,102,191,239,137, 62,242,112,127,207,246, 98,139,209,138, 20, 2, 93,
-219, 17, 67,228,254,254,129,207, 62,125,142, 74, 50, 65, 25,199,145,122,213, 44,246,175,253,254, 64,123,108,105, 42,151,145,179,
-242,190,213,141,156,159,105,214,133,104,149,223,129, 89,136, 28, 81, 58,100,198,135, 40,220,235,230, 57,219,237,134,190,109,185,
-216, 94,112,127,127,159, 85,245,154,118,232,217,172,215,196,132, 76, 42,180,101,247,176,227,199, 63,254,138, 55,111,222,242,238,
-246,142,151, 47,159,139, 77,114, 85,115, 56,180,164,152,208, 89,200,219,254, 78, 4,115, 77, 83, 83, 20,154,182, 61, 46,228,203,
- 20,163,112,248,131,103,154, 70, 86,235, 21,126,156, 64, 37, 54,235, 53, 54,137, 62,194,229,103, 82, 25, 13,206,201,196,200, 7,
-177,247, 82, 48,142, 19,195, 48,200,247, 98,106,241,105,202,129, 68, 9, 91, 24,234, 88, 73,129,153,196,213, 65,158, 96, 27,163,
- 23,225,157, 60, 99,234,125,150,197,217,100,112, 70,148,159,219, 99,103,109,145, 4, 86,253,240, 69,224,201,175,158,206, 24,232,
-168, 15,116, 23, 31, 23, 10,205, 33,239, 62,155,237,125, 14, 97, 8, 25,227, 26,242,177,169,243,168,203,206, 23,163, 74, 88,171,
- 79,248,203,172, 6, 15, 82, 3,114,236,122,118,199, 30, 31, 53, 81, 89, 60, 48, 4,207,224, 61,131,143, 12, 83,162, 27, 35,195,
- 8, 62,104, 66, 48,120, 47,187,163,224, 65, 37,141, 74,154, 20, 53, 49, 57,246, 15, 61,119,183,123,186,182, 71, 41, 77, 85,175,
-112,101, 5,198,229,130,131,133, 66,100,173, 94,246,232,214,154,236,203, 21,154,144, 20, 32,153,253,158,227, 6,103,193, 94,124,
-132, 24,125,108,203,210, 90,227, 76,177,236,225, 10,171,229,161,139, 33, 79, 25, 52, 90, 23,124,242,201, 39, 92, 63,187,162,174,
- 28, 23,235,154, 23,215,151,188,184,190,100, 85, 57, 72,129, 99,239,249, 47,191,126,197,187,125,135, 79,134,168, 28, 9, 33, 95,
-197, 60,153,137,134,133, 44,100, 76,182, 11, 18,176, 68,240, 3,253,241,129,187,155,215,220,125,247, 91,250,119,175,209,195, 30,
-167, 71,154, 90, 70,169,199, 99, 75, 85, 87, 52, 77, 45, 7,178, 19,228,229,177,149, 17,188, 84,154,234,241,216, 60, 95,150, 74,
-101,128, 10, 49, 63,168,137,199,162,119,245,113,197,166, 58,173,109, 78,151,161,154,207,142,101, 88, 46,191,183,122,100,148,123,
- 42,116, 59, 7, 34,189,167,123,155, 41, 96,103,106,253, 68,226,108, 29,255, 97,139, 91, 74, 79,130,145,226, 34, 20,152,167, 8,
-143,104,141,203,190, 61,101, 54, 3,143,220, 35, 11,251, 49,157,168,124, 32, 22, 73, 19, 18,151, 85,205,255,252, 63,253,115, 76,
-136, 84,182, 4,101,153,162,166,157, 18, 15,237, 72,179,189,100,244,137,239,190,251,158,205,102,131,207,157,114,223,117,124,243,
- 7, 63,225,249,245, 21, 54, 37,214,117,195,151, 95,124,193,237,237, 29, 26, 77, 83,175,184,191,125,160,169, 87, 92, 63,123,206,
-245,245,115,172,117,188,121,243, 86, 10, 96,147,249, 4,211,136, 31, 71, 82,240, 40, 34,235,166, 34, 76, 35, 67,119,164,112,134,
-166, 46,177,130, 58,195, 89, 17, 89,109, 54, 91, 98,228, 36,126,204,249,214, 67,230,112,135, 16, 22,118,255,172,120,158,131, 62,
-108, 22,164, 25, 99,164, 73, 48,154,231,207,159,139,240,235,120, 36,120,159,147,185, 38, 25,175, 23,133,196,106,230, 3,209, 57,
- 71,219,117,146,218,150, 16,230,123,102,136,207, 30,233, 5, 67, 27,188, 96, 81,103,234, 93,190,108, 72, 49,199,145,138,127,216,
- 58,121, 79, 77, 86,211, 79,163,100,120, 23,133, 69, 27,177,136,206,161, 82,242,255,113,203, 51,238,156,193, 57,131,210,179,248,
- 88,209,182,157, 88, 1,157,164, 83, 22,133,101,242, 35,101, 89, 44, 4,177, 89,156,108,172,202, 83, 9, 69, 89,214, 12,253, 36,
-171, 4, 91, 80, 20, 18,162,114, 56, 28,209, 90,156, 5, 9,242,206, 89, 2,162,118,247,247,148,133,216, 16, 69, 0, 39,233,113,
- 51, 32,200,135,192,243, 23,207,151, 78, 91,224, 43,129,182,237, 51, 58,182,100,200,190,236, 24, 66, 86,157,159, 86, 97,214, 22,
- 57,154, 54, 91,213, 14,123,154,166, 17, 64, 76, 16, 0,141,192,104, 36, 6,117,179, 94,101,151,146,151,134, 39,196,229,235,170,
-141,226,242,106, 75,219,182,172, 87,141, 56,149, 66,128,220, 65, 87,133, 8,121,195,228,177, 90,214,130, 15,119,247,220,221,222,
-179,187, 63,176,174, 55, 34,220,107, 26,202,170,148,233, 77,233, 40,243, 26,193, 57,139,159, 60,251,221,145,174,237,101,138, 50,
-167, 5,138,125,138,170,146, 4, 56,173, 88, 72,162, 68, 89,149,212, 85,181,232,200,134, 65,120,245, 23, 23, 91,177,255,197, 64,
- 89, 58, 98, 12, 57,141,141,197, 39,111,172,121, 36,146, 93, 88, 38, 79,198,238, 11, 15,229,172, 9,248,160, 80,238,247,121,106,
- 23, 65,220,172,220, 77, 79, 77, 67, 31,191,208, 83,222,247,205, 22, 36,225,186,135,133,246, 54,121,225,184,203, 5,239, 51,170,
- 54, 98,180, 36,158, 21, 86, 83, 58,123, 26, 95, 47,112, 26, 25,159,246, 62,208, 15, 19, 33, 41,124,202,162,163,217,142,167,192,
- 39, 25,183, 15, 94, 49,122, 24,189,168,199, 99,210,104,109, 69,144,148, 71,192,218, 56,188, 23, 64,128, 53,142,117,179, 98,187,
-221,240,236,250,138,170,169,115, 32,140, 90, 70,191, 86,131,155,187,116,163, 40,156,193, 25,179, 92,246,250, 92, 36,167, 78, 83,
-136,185,178, 18,193,224,201, 2, 56, 31,224, 70,159, 40,118,133, 21,206,252, 56, 77,116,163,199, 39,205,190,155,112, 85, 35,135,
-152, 74,148, 78, 98, 90, 55, 77,201,213,102,133,115,226,237,125,117,123,224, 31,191,187,161, 15,146,228,134, 50, 40,107, 37,183,
-217,200, 33,226, 10, 75, 93, 21, 52,149, 21,129, 93,105,120,190, 46,120,185, 45,249,100, 91,241,197,117,195, 79, 62,185,224,143,
-190,124,193, 31,254,232, 57, 63,251,209, 53, 21, 45,253,221, 43,174, 54, 13,183,119,247,220,220,220,144, 72,172,154, 21, 85, 93,
-179,111,143, 34, 38,202,156,237, 15, 61,116,179,141, 81, 58, 97, 41,207, 72,115,102, 0,203,216,112, 62, 20,116,250,192, 51,166,
-206,158,189,229, 33,215, 39, 65, 93,190,228,103,161,217,233, 98, 63, 89, 17,231,164, 63,173, 79, 23,232,163,232, 85,212,114,215,
-158, 32, 57,138, 71,188, 55,245, 49,114,221, 73,100, 39, 23,242,153,232,238,236, 50,127,132,117, 72, 79,139,130,211,148, 64,160,
- 40, 39, 81,156,209, 74, 4, 84,198,242,183,127,241,151,188,220, 92, 80,104, 77,215, 15,236,219, 17, 83,109,120,187, 59, 96,234,
- 6, 83, 86, 84,117, 67, 81,148,188,123,247,142,203,203, 75,174,159, 93,243,233, 39, 47, 49, 70,243,221,183,191,229,120,216, 99,
-180,230,112,108,217, 31,143,148, 77, 67, 63, 76,248, 32,123,238,245,122,195, 97,127,228,254,238,129,186,170,105,170, 70, 20,228,
-147,167, 44, 69, 48, 89,151,181,164,150,132,200,186,169,105,170,138,194,185,220,201,140, 11,175,187,170,234, 60, 98,143,185,203,
-148, 67, 83,246,153, 39, 33,162,206,137,104,227, 56,114, 56, 28,208,198,176, 94,175,151, 47, 86,140,242,236,136, 48, 78, 72,100,
- 48,239, 33, 69, 89, 63,191,127,222, 79, 11,121,108, 24,250, 60,114,134,139,171,103,140, 83,160, 27,228, 66,187,185,185,201, 99,
- 80, 89, 12,105,163, 50,201, 80,103,110,121,204, 23,137,151,194,219, 57, 17,192, 33, 68,203,178, 20, 37,116, 8, 35, 90,167,236,
-217,142,121,252, 44,207, 94, 81, 56,182,155,117,134,138, 68,138,210,138,230,160,116,121,122, 40, 80,157,217, 37,226, 10, 39,225,
- 33, 33,100,198,121,153, 45, 79, 9, 31, 38,202,114,166,164,201,207,223,239,247, 20,101, 77,219, 74,132,170, 49, 22,180,102,242,
-129, 20,161,109,123, 54,219, 45,147, 23, 86,185, 92,198,113, 17, 22,162,160, 31, 7,118,135, 3, 49, 41,222,222,188,195, 7, 9,
- 36, 17,177,223, 28, 79,186,199,185, 18,133, 89,112, 35,174, 40,168,202,146,113, 28,114, 81, 36, 49,163, 83, 38, 3, 78,126, 90,
-152,229,235,245,122,121, 39,140,209, 84, 85,153,255,253, 42, 79,106, 5, 8, 6,113, 89, 99, 66,162,174, 43,166,113, 96,187, 89,
- 17,166,137,190,237,184,220, 94, 48,116, 61, 85, 89,209,212, 21, 77, 93, 19, 67,192, 26, 75, 89,148,132,201, 51,244, 61,195, 48,
-162,141, 4, 86,105,163,169,234,114,217,163,123, 47,104,228,186,170, 49,198, 48, 12,227,146, 56, 41,171,178, 64,211, 84,185, 8,
-179, 98, 25, 86, 96,141,121, 4,167,169,170, 12,230,114,142,238,120, 92,144,186,106, 17, 76, 75,161,132, 82, 57,185, 78, 63,194,
-192, 46,246,197,167, 96,170, 15, 8,212,207,155, 65,251,223,162,220, 85,103,135,106, 58, 27, 11,136,149, 35, 62,198,116, 46,135,
-227,105,119, 60,143, 95, 5,222, 47,236,238,148, 4,237,154,146,176,160, 83, 78, 21, 51, 90, 68, 34,210,225, 74, 21,107,180,146,
-139, 62, 7, 8,144,196,103, 62, 77,129,126, 10, 57,248, 32,231, 25,107,185, 20,230,144,148,168, 12,218, 26, 98, 86, 13,167,217,
-255,155,245, 0,218,106,148,151,130, 37,248,137,186,190, 96,187, 42,129,137, 85, 83,178, 89,215, 52, 78,113, 8, 45,105,154,150,
-132, 49,157,215, 4,214, 74, 64,139,179, 6,103, 20,206, 40, 25,105,107,157,171,242,179,205,238, 34,120,200,106,230, 36,171,135,
-217,218,150,116,142,147, 77,154,152, 34, 42, 73,117,106,139,146, 99, 63, 49, 30,119, 60, 28,123,158,191,248,132,213,170,194,135,
-137,194, 36, 10,163, 88,213, 37,235,117,131, 66, 88,246,111,119, 45,191,187, 63, 18,181,203,197, 67, 58,185, 28, 84, 64, 39,176,
- 24, 74,109,184, 94, 87, 60,219,148, 92,173,107,158,173, 43,158,173, 75, 94,108, 27,158, 95,173,185,184,168, 41, 10,131,115,194,
-201, 31, 70,184,187,109,169,147,163,174, 27,126,253,155,223, 50, 76,145,186, 94, 17,147,230,246,238, 1,148, 89,180, 1, 49, 43,
-202, 85,174,106,163,146,184, 85, 57,232, 4, 57,124,222,126,159,210, 78,243, 62, 57,239,149,181,122, 28,109,250,254, 3,175,151,
- 46,253, 67, 40, 57,153,134,196, 39,161,172,143,145,174,139,149, 42,103, 98,203,165,175, 79,129, 70, 74,157, 73,104,206, 52,112,
- 31, 44,104,115, 17,172, 37, 52,227,247,145,233,206, 43,238,211,190,236, 9, 82, 55,205,164, 70,149,109,129, 2, 24,250,228,234,
- 25,255,253,159,255, 37,161, 31,208, 49,209,249,192,230,226, 25,191,125,245, 22,229, 42, 14,253,192,223,253,221,127,226,249,179,
- 43,126,246,205, 55, 24,171, 41, 43, 73,166, 58,142, 35,223,189,250, 29,198, 73,177, 23, 83,226, 23,191,254, 53, 47, 62,255,140,
-135, 99,203,205,221, 61,171,205, 6,165, 12,175, 94,189,161,159, 70,174, 46,175,152,188, 23,167, 72,182,132,150,101,201,225,120,
- 96, 10, 19,165, 45, 8, 41,230,164, 66,141, 73,145, 49,140,144,164, 67, 86, 73, 70,222, 18,118, 49, 73, 86,130, 62,185, 33,140,
- 49, 76,147,167,105, 26,186,126, 0,242, 46,212,216,236,253,181,140,163,168,160,157,147,209,179,104,159, 18, 33,202,161,218, 52,
- 13,247,247, 15,185, 51,118,121, 23,107, 88,175, 27,250, 73, 60,202, 33, 6, 25,157,135,192,177,237, 72, 9,246,199, 35, 41, 6,
-154,170, 18, 74,163,213,144, 2,198,234, 37,209,172,176, 70,240,183,198,100, 56, 77, 88,246,251, 90,105, 89, 47,152, 9,101,212,
- 89, 72, 83,200, 41,114, 13, 15, 15,123,140,209,217,186, 37,244,202,210, 22, 89,197, 95, 98,244,129, 97,144, 20,180,113,236, 41,
- 74,139,202,133, 64, 81, 88,198,113,228,197,139,231, 28, 14,191,206, 30,125, 17, 92,213,181,164,209, 73,161, 64, 38,197, 73,134,
- 71,215,117, 56, 39, 35,243,103, 87, 23, 57, 50, 85, 48,167, 74, 65,229, 12,125,215,113,117,121, 73,219,118,116,131,156,195,211,
- 52,137,130,220, 57,250, 97,144,175,119,240,108,214, 23,108,214, 91,190,251,237,247,178,138,200,205, 66, 72, 2, 99,169,235,122,
- 89,113, 92, 94, 94,210,118,109,166,200,105,218, 99, 71, 85, 85, 75, 94,249,179, 12,196, 57, 28, 14, 24, 45,152,224,102,181,162,
-237, 90,225, 19, 84,130,242,118,206,113,119,119, 79,189, 90,211,212, 53,237,254, 64,219, 30,151, 88,212,194, 57,174,174,174, 56,
- 30,219,188,174,209, 92, 93, 93,226,189,207,140,117,141,247,129,174,235,105, 86,149,144, 10,143,146,205,190, 94,175,217,239,119,
- 40, 69,142, 88,213, 24, 83,100,209,230, 40,171,135,186,162,235,123, 80,121, 63, 63, 11, 87, 99, 36,120, 73, 93, 91,231,216, 87,
- 65, 29,107,156,171, 8,147, 95,194,162,202,186,164,187,223,161,141,100, 42, 72, 30, 73,202,246, 78,114,206, 73,202, 36, 58,181,
-112, 56, 78,115,198,244,222,133,126,158,173,174,127,176,114,151,167, 66,162,247,173,108, 79,193, 25,143,157,112,167,238,212,103,
-191,250,228,229,133,158,166, 81,188,161,211, 68,240, 94, 66, 41, 98,128, 40, 63,198,124, 8, 27,235, 80, 90,216,184, 70,155, 44,
-190,146, 79, 53,166, 19,193, 75,205, 99,222,108, 53,144,241,157,252, 90, 41,206, 97, 23, 73,208,138,130,122, 17, 46,156,150,124,
- 95,107, 20, 85,161,185,188,104,120,118,181, 97,181, 42, 73,113, 34, 38, 47, 73, 64, 38,239,165,103, 38,188,149,206,220,100, 69,
-188,157,195, 95,230,245, 65, 78,113, 59, 87, 53, 10,100,103,230,225,179,192, 28,206, 69, 15, 73,197,156,150, 36,170, 75, 87, 53,
-140, 65,241,234,230,142,178, 89,241,197, 87, 95,178,202,225, 13, 86, 43,170,178,144,220,223,178,198, 43,199, 97,132,239,222,237,
-217, 15,129,164, 29,164, 12,224, 73, 34,184, 50,100, 80, 73, 72, 84, 40, 54,206,114, 85, 58, 94,172, 44, 47,214,134, 79,215,154,
- 79,183,154,231,171, 68,227, 70, 92, 49,129, 27,177,149,231,249, 69,193,231,235,130, 50,140, 92, 95, 94,128, 54,188,121,243,150,
-253,177,229, 97,127,224,208,118,114,113, 47,147,135,179,113,243,211, 61, 50,103, 76,119, 53,203, 5, 63,188, 47, 87,233, 35, 76,
-244,165, 75,231, 9,116,230, 67,127,175,150,174,251,156,169,160,158,162,139,159, 20, 3,167, 81,226,188,134, 74,203,184,252,247,
- 37,188,171,179, 80,160,211, 52, 70, 63,250,253,230,241,243,121, 81,177, 96,112, 79,124,188,229,175,232, 69,141,173, 66,196, 42,
-197,159,255,241, 63,163,113, 37,126,242,116, 33, 18, 10,199,205,241,128,171, 87,244,227,196,161,237,216,108,182,124,246,217,231,
- 60,127,126,141,181, 98,205,217,181, 45,175,222,189,131,194, 17,180,226,242,250,154,183,119,119,108,158, 93, 49,132,200,187,251,
-123,182, 87, 87, 40,109,184,189,191,163, 31, 71, 46, 47, 46,217,237, 15,220,222,222,101,160,135,128, 54,238,238,239,233,199, 9,
-146,216,144,156,117,148, 69, 41,145,203,182, 0,116,206, 54,144, 46, 81, 68,112, 99,238,144, 98,134,127,156,198,227,114, 97, 75,
-250,216,152,197,112,101, 89, 16,147,116,170,206, 73,222,180,188, 91,178,222,176,121,124,185, 94,175, 25, 51, 88, 68,118,244, 6,
-173, 21,235,237,134,174, 23, 95,113,204,151,255,102,179,230,176, 23,133,190,224, 63,131, 32, 97,103,191,181,214, 20,101,185,252,
-185, 66,214, 6,205, 29,107,221, 8,124,100,134,152, 44,191, 95,102,120, 24,163, 40, 74,183,112,236,171,178, 92,108,150,214,138,
- 93, 79,105, 73, 97,155, 61,206,117,211, 96,172, 94,196,132,162,218,150,177,175,117,150,253, 65, 40,107,171, 85, 13, 89, 19, 20,
- 99, 88, 32, 61, 51, 33,205,135,176, 0, 91,102,231, 64,225,100,127, 47, 90,131, 46,119,151,158, 42, 7,145,116,109,139, 54, 54,
-123,187,237,162, 55,218,110, 47, 50,180, 71,190, 79,227, 56,178,221,172,120,241,242,138, 99,123,200, 22, 68,147,173,104,162, 94,
- 55, 26,154, 70,244, 6,214,136, 3, 97,182,153,121,239,243,168,125,196,100,199,212, 60,110,182, 86, 38, 29, 41, 39,158,173, 50,
-249, 13,160,172, 74, 72,145,105, 28, 50, 75, 65, 2,165, 30, 30, 30, 56,182, 45, 33, 38, 92, 33, 95,175,113,234,137,209,163, 20,
- 98,123, 43, 75,214,235, 85,102,224,203,247,203, 58, 81,176, 79,211,200,118,187,205, 92, 3, 57,163,103, 77, 71, 93,215,139, 38,
-170,105,170,229,251,202, 89,132,120, 85,149, 34,224,204, 76,249,249,189,152, 87, 61,178,179, 31, 24,199,129,166,169,168,234,234,
- 44,219, 64, 24, 8,195, 48,200,164,195,137,213,243, 60, 3, 66,101, 61,144,250, 39, 4,186,250,135,109,211,255,255,251, 95,156,
- 5,115,222,203, 24, 62,248, 37,102, 53,120, 79,244, 19,193, 79,132, 12,147,152, 71, 66, 49, 36,249,200,102,124,109, 44,214,138,
-197,235,220,199,135,138, 11,237,110, 49,231,199, 83,134, 92, 82,103,251,253,148,233,118,139, 76, 95,102,176,214,137, 79,180,172,
- 74, 82, 10, 28,143, 7,110,238,238,217, 31, 90,116, 81, 97,138,154,128, 70, 91, 39,136,200, 44,222,115, 86,231, 46, 29,108,134,
- 76,204,251,246, 57, 52,129,165,200, 56,223,223,102,241, 72, 82,156,255, 81,208,121,252,103, 52, 74, 25,166, 0,247,251, 22, 76,
-193,231, 95,125,201,213,245, 21,133,211, 56,171, 40, 11, 67, 89,149, 40,227, 80, 69, 67,112, 13, 55, 93,228,237,126, 32, 32,204,
-106,155,243,121,151, 68,180,236,169,111, 10,203,166,114,172, 10,195,186, 52,108, 10,195,182,212,108,107,195,182,210,148, 46,161,
-109, 66,217,132, 42, 21,212,154,122,107,249,236,197,134,149,139,164,225,200,102,189, 33, 41,195,183,191,123,205,247,175, 94, 51,
- 78, 97, 17,193,233,115, 39,197,233, 30, 60, 27,131,171, 71, 17, 44, 74,241, 36, 13,231, 44,177, 76,125,128,212,182,172,120, 88,
-132,109, 90, 63,185,156,213, 19,114,220,227,122,224,227, 20, 56, 37,207,219,163, 24,214,101,136,175,150, 15,245, 17, 54,195,226,
- 33, 87,167,137, 69,122,164, 3, 76, 31,236,214, 79,250,131,184,160,136, 83,154,125,252, 10,147,144, 11, 29,197,245,122,195,215,
- 95,124,201,238,110,199,221,195,158,253, 48,241,250,225,129,251,227,145,195,241, 64,138, 17,103, 52,127,252,205,207,248,250,171,
-175, 68,149,190,106,232,134,145,100, 44,183,135, 3, 83,130,155,187, 7, 30, 14, 71,154,205,150,119,183,119,124,247,234, 53,101,
-211,208,172,215, 28,142, 71,218, 78,144,173,251,195, 81, 46,186,162,200, 33, 24, 37, 93,223,102, 23, 73,194,229, 92,232,152, 47,
-217,152,164,144, 87,218,146,146,201,188,235,108, 21,202, 86, 46, 25, 75,171,133,196,184, 92,160,185,187, 85,103, 30,221,162,144,
-174,187, 46, 43,250,238,152,133,171,162,111,153,166,145,245,122, 37, 10,242, 73, 84,218, 46, 31,142,101, 89, 50,142,194,127, 16,
-203,212,192,122, 45, 23,242,177,109,179,125, 81,180, 60,101, 85, 16, 65,118,201, 94,236,103, 51, 64,219, 24,139,182,162, 27, 73,
-217, 22,149,178, 77, 74,212,254,114,137,235,101, 28,175,115,241,111,151, 80, 26,165,101,140,107, 44, 84,149,203,163,106, 15, 24,
-186,110, 96,187,221,144, 82,160, 44, 69,159, 51,123,249, 67, 8, 18,167,234, 5,152,179,217,108,242,250,129, 71, 32,171,148,210,
-130,106, 45, 10,183,232, 90,166, 65,210, 31,157,115, 18,191,154, 27, 40, 17,116, 9,223, 62, 1,251,253,195, 89, 96, 73,201,208,
- 15, 57, 75, 93, 49,228,145,186, 82,224,195, 68,211, 8,116, 74, 66,178, 76,246,220, 75,202,218,213,213, 37, 83,246, 7,236, 28,
- 24, 0, 0, 32, 0, 73, 68, 65, 84,155, 91,107, 25,135, 17,173, 68, 61, 62,179, 8,228,249,233,100,138,187,100,134, 39, 65, 12,
-215, 37,126, 18, 23,135,179,150, 24, 3,133,115,160,146,104, 52,178,117,216,100,150,193, 48,142,236, 15, 7, 89, 85,205, 57,247,
- 74, 62, 38,239, 49,214, 18, 83, 20,173, 69,110,240, 92, 33, 44,255, 97, 24, 56, 30,143,121,207,175,115,188,182, 17,123,117, 46,
- 54,187,174, 91,130,134,206,209,176,114,105, 11,187,126, 28,199,108, 73,150,223,179,235,132,115, 47,159,159,192,136, 68,251, 35,
-107, 40,249,112,143,104,116, 98, 51, 62,219,163,159, 37, 66, 62, 10, 66,251, 80,228,243, 63,121,161,191, 79,220,124,255,191,255,
-128, 30, 95, 47,187,206,211,165, 42, 35, 41,185,192,163,159, 8, 97,202, 73, 86, 39, 81,140,207, 31,131,159,178, 26, 54,230,170,
- 52, 46,232, 76,147,119,207, 74, 37, 81, 84,231,161,167, 36, 28, 25,162, 50,143,214, 5,234, 28,137,123,246, 99, 72,154,164, 12,
-205,122,133,173, 74,238,119, 59,246,135,150,182, 27,232,199, 64, 55, 65, 80, 5,174, 90,163,141,147,236,185,101,247,173,150, 61,
-186,181,162,124,215,249, 50, 95,240,131,231, 37,210,217,229,150,146, 58, 83, 69,207, 32,158,184, 20, 33, 17, 69,215,143,220,220,
- 62, 48,248,200,151, 95,255,132,151,159,125,130, 54,114,232,203, 46, 95,198,243,182,172,136,166,192,109,174, 73,197, 26,183,186,
-228,242,197,103, 96, 12,167,248,100, 5,218,160,180, 69,103,159,127, 85, 58,170,194, 80,149,150,170,116,212,101, 65, 85, 22,114,
- 32, 26, 3,198,145,116, 65,114, 37,169, 48,168, 70,179,125,222,112,181,118, 60,188,249,142, 20, 2,235,237, 37,247, 15,123, 30,
-118, 7, 89, 80,167, 51, 53,251,163,192,158,133,104, 32,172,254,217,135,157,212,227, 77,181, 58, 71,196, 62,206, 65,255,125,250,
- 13, 84, 58, 41,217, 31,161,226,226, 25,132, 70,189,215,229,127,248, 98, 85, 31,129, 32,191,255,241,126,242,234, 44,190, 83, 75,
-229,127, 18,241,229,127, 62,231,213,127,224, 37, 77,138, 71,207, 6, 57, 43,221,100, 93, 71, 83, 20,252,245, 63,251, 83, 54,101,
-141, 31, 60, 9, 67,208,134, 67, 63,210, 15, 35,187,251, 7,234,194,113,177,217,240,226,249, 53,135,221,142, 87,175,126,199,205,
-205, 45,191,250,205,111,120,125,123, 71, 31, 19, 73, 27,124,130,135,251, 29,199, 99,203, 56, 5,214,155, 13, 85, 85,113,216, 31,
- 48,198,176, 90,175, 41,138,130,113, 26,152,252,136,143, 30,180,236,186, 83, 30, 43,110, 47, 55,140,211,144,191, 7, 30,148,144,
-223,180,145, 11, 96,154, 60, 68,141,179,197, 35,241,172, 49, 74, 58,167,179, 73,213, 44,168,149, 78,246, 36,164, 19, 1, 82,202,
- 99,252,115,109,134, 98,204, 29,170,160, 54,133,223, 45,225, 50, 50,237, 26,134, 33, 95,238,242,227,197,197,150,253,126,151,187,
-170,152, 33, 37,141,164,173,229,169, 98, 89, 85, 28,187, 78,242,180,115,210, 96, 89, 86, 98,115, 50, 46, 79, 16, 21,174,112,104,
- 43,103,205, 12, 2, 57, 79, 1, 59,145,237, 36,194,213, 24, 81, 97, 23,165, 69,105,201, 35, 87,104,186, 86,132, 85, 69, 97, 41,
- 43,217,163,207,200,208, 34,147,209,166,113,134,119,201, 25, 40,187,102, 73, 44,235,251,126,233,164,143,199,227,137, 3, 16,229,
-162,136, 33, 46,201,151,117, 93,139, 39, 61,219,255,154,166,206,136, 92,185, 88, 11,231, 24,135, 65,118,238, 62, 82, 20,242,121,
-247,125,135,177, 10,165,162, 96, 94,167,129, 41,140, 89, 63,148,117, 50, 49,224,172, 68, 50,203,222,223, 83,213, 85,190,224, 93,
-118, 63,148,203,243,174,181, 94,220, 1,211, 36, 83,150,170, 42, 49, 54,175, 39,242,154, 32,132,128, 81, 48,141, 35, 69,233,132,
- 53, 63, 14,242,181,207,205, 80,219, 15,244,131, 23,205,213, 48, 49,102,213,250, 48,141, 40, 99,151,226, 90, 44,113, 82,184, 72,
-122,218,192,195,195,142,178,172,242,197, 46,221,248, 56,246, 39,196,117,126,175,103, 77,200, 60, 9,217, 29, 14, 68,230, 9,142,
- 89, 28, 75,125,223, 11,216, 6,177,105,166,236,151, 63,182,173, 92,224, 89, 71, 34, 83, 41, 41,116,103,251,221, 76,210, 83, 31,
- 40,248, 63,184, 50,252,160,250,253, 3,184,204,199,147,206,243, 67, 46,125, 16,251,245,126,220,197,185, 98,239,244, 2, 46,140,
-247, 28,226,178,112,215, 57,101,172, 79, 49,228,140,243,132, 79, 66,131,155,124,202, 0, 25,201, 24,151,172, 91,117, 22,157,153,
- 63,249,185,229,205,149,137,202, 99,112,163, 77,174,188, 13, 49,106, 98, 50, 68,164, 27,118, 69,201,106,179, 37,248,200,237,221,
- 3,109, 55,226, 3,248,168, 24,167,196, 56, 65, 50, 5,182,106, 64, 91, 17,158, 41, 17, 61,232,249,215, 55, 57, 90,245,236,243,
- 94, 48,176,143,140,213,105,137, 88,140,103, 95, 55,129, 72,136,197,109, 24, 38,238, 30, 14,124,255,246,150,135, 67,199, 23, 95,
-126,205,143,127,242, 7,148,249, 65, 86, 68,234,178, 92,196, 72,226,101, 52,152,106,205,103, 63,253, 35,254,230,111,255, 57,159,
-124,246,153,216,130,146,164,192,165, 51, 46,189,209, 6,109,245,162,188,117, 78, 2, 24,202,194, 81, 88,135,182,150,100, 29,201,
- 58, 84, 81,162,138, 18,170,130, 84, 23,216, 77,193, 39,159, 92, 16, 71, 73, 77,186,185,189,231,120,108, 23, 95,250,172,106, 84,
-191,119,220,163, 79, 10,245, 71,183,227,227, 78, 61, 61, 42, 8,210,239,153, 39,157, 43,218,210, 89, 23, 30,255,137,202,243,241,
-165,190,252, 10,191, 47,148, 37,157, 62,206,203,132,152, 5,154, 74,157,208,191,179, 16,243, 60, 11, 93, 41,253,145, 81,191,250,
- 96,178,219, 66,148, 74,162,229,168,141,229,191,251,179, 63,227,143,127,250, 53, 26,185, 44,180,113,188,125,251,142,103, 87,215,
- 20,206,242,197,231,159, 82,151, 5,171,170,224,251,239,127,203,221,253, 29,227, 56,241,221,171, 87, 68,165, 88,109,215, 66, 0,
- 68,241,252,250, 57, 62, 38,108, 81, 9,198, 85, 41,238,238,238,184,187,187, 37,166,196,126,191, 19,127,109,126,150,173,181,116,
-125,199, 20,132,127, 61,211,230, 70, 63,160, 76, 66,105, 57,200,125,158,186,137, 45,168, 16,108,112, 98, 25,143,235,243,201, 74,
-254,156, 79,216,228,132,205, 46,146, 20,211,233,114, 82,138, 20,252, 34,196,180,198, 44,171,170, 25,116,165,206, 14, 81, 17,127,
- 9,106,118,222, 99,111, 54, 27,166,105,162,239,250, 76,176,148,139, 85, 68,116,131, 20, 14,214, 49,100, 56,136,143, 49,135,219,
-200,251,174,140,166, 40, 5, 92,226,172,205,211, 2, 75,225, 28, 85, 85,231, 14,172,144, 98, 65,219,101,141,115, 78, 74,155, 67,
-174,172, 49, 2, 35,241, 1,157,199,212,206, 57, 18,113, 73, 39, 75, 73, 84,234, 85, 93,163, 52, 11,178,214, 57,137, 12,157,199,
-235, 51,113,141,108, 1, 30, 51, 28,101, 86,238,143,163,240,207, 31, 30,238, 69, 32,102,205, 82, 48, 79,211,196,106, 45,223, 75,
-149,157, 21,115,100,178,202, 86,212,170,170, 25,251,129,105, 24,151, 36, 54,242,212,105, 24, 6,170,170,194,231,207, 49,197,112,
- 10,109,138,178, 70,245, 62, 44,162,191,148,247,239,115, 17,183, 90,205,233,108,210, 29, 79,227, 68,233, 10,170,162, 92, 84,245,
- 42, 87,113,137, 72,244, 98, 19,108,154,102,105, 6,231,203,121,213,172, 49, 90,214, 62, 49,230, 21, 69, 72,244, 93,207, 56,100,
-116,173, 41, 40, 93, 33, 86, 63, 39, 22,231,105,242,180, 25,204,147, 50,228,104,190,124,103,174,255,140,243,158,215,106,198, 26,
- 73,125,235,123, 98,138, 11,120,104,118,180, 72, 33, 0,198,216,133, 18, 87, 87,242,156,197,224,153, 6,137,165, 53,153, 93,225,
- 39,177,218,169, 60,133,122,234, 71,255,152,187, 76,126, 78, 86, 21,167,108, 25, 80, 79, 66,171, 84, 74,168, 40,153,229,179, 26,
- 84,250,195, 32, 88,206, 89,181, 60, 39, 80,171, 51,184, 72, 2,163,236,242, 47,181,150,112, 17,171, 53,202,136,124,223,204,150,
- 47, 99, 23,115, 61, 74, 19,146, 34,228,205,111, 68,147,180, 33, 68,205,228, 21, 83, 80,120,159, 59, 49, 36,200, 37,198,180, 92,
- 10, 82, 92,201,159, 45, 18, 73, 90, 14, 88,163, 11, 10, 91,160,141, 67,153, 18,116, 73,210, 13, 73,215, 36, 10,140, 21, 69,174,
-138,138,195,174, 99,232, 35,253, 24, 25,199, 64,244, 66,155,235, 71,207,113,242,164,178,130,178, 38, 26, 71, 68, 84,244, 38, 43,
-202,103, 30,186, 49,106,217,247,201,206, 48,157,216,239, 51,132, 4, 73, 95,155,115,231, 39, 47,130,191, 24, 12,227, 0,247,247,
- 3,191,249,221, 3,239,246,158,235, 47,126,194, 87,127,240, 13, 46, 31, 58, 67,223,163, 82,164,180,150,202, 90,234,194, 97,173,
- 34,229,108,231,205,167,159,243,197, 79,127,140,138, 19, 58,142,104,147,136, 38,130, 78,216,148, 48, 49, 98,146,194, 26,151, 65,
- 57,154,210, 41,106,151,168, 85,160, 52,137,100, 21,201, 42, 40, 52, 84, 10,138, 0,133, 34,214, 37,106, 85,112,113, 85, 81,149,
-134,215,175,126,199, 63,254,227, 47,216, 29, 15, 96,100,202, 96,180, 91, 96, 54, 26, 37,122,136, 71,112,162,120, 6, 41,146,239,
-181,143, 42,247,237,130,120,209, 42, 46,126,111,209,202,169,179, 34, 81, 47,163,250,167, 9,109, 42,119, 11,143, 98, 89,159,168,
-222, 31,187, 51, 36, 61,106,233,140,207,104,111,239, 93,236, 42, 61, 81,211,255,158, 91,255, 9,151,249,188, 72,153, 1, 60, 31,
-179,131, 62, 77,111, 59, 23,156, 58,165,249,211,159,126,195, 95,252,244, 27,202, 4,109,123, 32,106,197,232, 61,127,244,245,207,
-184, 40, 43, 94, 94, 61,227,208,237,177, 86,113, 56, 60,208,142, 3,161,112,252,195,111,127, 67,212,154,102,189, 18,177,105,127,
- 68, 5, 79, 34,210,251,145, 87, 55,111, 9, 73, 44,166, 41, 38, 46,175,174,168,155,154, 16,229,130,118, 69, 65,210,134,110, 20,
- 1, 85, 89,150,148,149,112,211,135,238, 72, 74,146,114,165,108, 65, 55, 76,178, 75, 31, 61,165,171,136, 62, 17, 39, 57,152, 67,
- 24,113, 78,137,192, 45,197,101,114,193, 25,195, 95, 10,226,217, 62,106, 33,202,193,183,221,110, 57,180, 29,202, 88, 70, 31,233,
- 71,143, 82, 18, 37, 59,243,245,157,115,178,171, 77, 1,103, 20, 42, 5,140, 81,196,232, 89,111, 86,148,182,224,184,235,208,201,
-160, 34,148, 86,179, 94,173, 24,186,145,228,229,249, 51,198, 50, 76,129,148,223,115,208, 66,216,212,185,189,137, 30,103, 64,235,
-148, 51,186,101, 93, 38,221,187, 93,116, 4,202, 56, 38, 47,148,187,152,228,253,112,206,209,212,181,140,164,243,185, 17, 82,206,
-106, 79, 98,133,138, 33, 80,216, 2,103, 75,140,118, 28,246, 7, 89,125, 84, 5,129,136,143, 94,152, 1,128, 79, 57,255, 61, 23,
- 30,174, 40,112,198, 18, 70,161,237,105,163, 37, 44, 70, 43,166,168,232, 70,207, 48,141,140,211, 72, 76, 98,131,243,222,179,110,
- 42, 74, 39, 74,236,126, 28,169,154,154, 46,135, 56,169, 24, 41,180,101, 85,173,196, 98,150,245, 16, 72, 80, 32, 90, 41, 10,107,
-169,235, 58, 79, 96, 12,117, 85,229,130,204, 44, 60, 14,163,181,140,181, 13, 76,209, 11,170, 59,163,114,235, 85,141, 45,132,220,
-118, 60,182,196,164,228,115,201, 19,208,178, 48, 4, 21, 40,234,134, 99,219,209,182, 29,117, 85, 80, 87, 37, 4,143, 31, 6, 10,
-227,136,126,194, 25, 69,229, 74,156,182, 16,160,176,142, 85,221,160, 81,132, 97,160,107, 15,217,185, 96,233,186,145,186, 94, 1,
-154,113,156,242,206, 95,244, 1, 77,211,200, 26, 70, 89,134, 94, 82, 40,103,151, 64,140, 30,173,160, 46,157,216,240, 98,192,144,
- 40,109, 65,229, 74, 86,171,149, 36, 14,118, 3, 49, 40, 42, 87, 97, 16,199,212,102, 85, 82, 21, 22,167,228,207, 99, 85,166, 86,
-133, 8, 62,162, 83, 66,167,199, 56,245,217, 53,117,142,141, 61,255,159,253, 96, 20,228,147, 94, 72,125,228,223, 63, 78,187, 58,
-237, 76, 23,105,220,114, 88,105,156, 19, 1,136, 83, 54,119,172,210,225,107, 76,190,232,237,114, 1,206,202,248, 57, 58, 83,144,
-124,230,212,225,103,172,168,248,189, 5,249,184, 4,173, 44, 27, 72,185,104,149, 41, 80,166, 64,219, 10,227,106,180,115, 24,227,
- 36,108, 32, 95, 52,204,219, 50, 37, 40,217,221,254, 72, 24, 71,140,133, 36, 12, 2,156, 53,248, 28, 43,234,138,154, 41, 25,172,
- 45, 1, 67, 80, 19, 33,223,214,115,128, 11, 90,161,149,193,156,209,203,164, 27,136,121, 30, 31,137,103,173,158, 28,104,179, 61,
- 89,209,247, 3, 55,199,142,119,247, 59,162, 46,248,209, 31,252,148,175,191,249, 6,165, 21, 15,119,239, 8,126, 20, 32,143,147,
- 17,185,120, 55,201,144,140,148,149,153,146,131,252,246,205,155,247, 84,146,179, 14, 65, 33,107,131, 98,166,224, 25, 65,239, 22,
-214,138,216,199,106, 40, 12,170,116, 80, 89, 40,228, 80, 32, 42,168, 52,205,197,154,205,118, 69,138,119, 76,113, 34,101,106, 20,
-225, 44,156,132,152,175,117,253,232,217, 72,105, 6,187,164,101,106,241, 62, 34,254, 49, 97, 70,205,113,187,255, 68,167,125,206,
-162, 21,241,232,185,255,252,195, 33, 44,106, 78, 64,123,178, 38,120,175, 50, 78,234, 17,193,238,233,159, 84,167,143,115, 26,222,
- 83,172,126,160, 40,120, 36, 64,157,119,204, 49, 45, 0, 19, 69,226,179,231, 47,249,147,159,126,195,186,172, 80,147,196,237, 22,
-174,164, 40, 43,140,179, 28,218,150,113,236,233,251, 3,101, 97,121,115,115,195,143,126,242, 19,126,247,230, 45, 30,201,126,238,
-135,158,187,183, 15,148,101,193,171, 55,175,217,108, 46,153,124,224,197,203,151, 12,195,200,205,205, 13, 87, 87, 87, 56,231,120,
-119,115,195, 56, 77,108,235,102, 9,232,216,110,215,104,165,216, 63,220,179,222,172, 24,253, 68, 89,174, 24, 38, 67, 64,172,104,
- 83, 55,202,104, 63,239,109,167,105, 98, 28, 61, 85,178,212,171,117,246,141,203,138, 66,246,146,137,201, 79, 75, 17, 51,227, 86,
- 85, 38, 19, 21, 69,185,192,128,230,105, 65, 68, 98, 45,231, 52,183, 25,137, 90,228, 46,125,177,250, 88, 67, 24, 6, 54,219, 85,
-238, 96,167,101, 5,102,157,165,105,106, 72, 73,212,205,200,136,116,244,147, 8,151,230, 78,119, 9,134,177, 25, 70, 50,177,217,
-172,177,214, 48, 12, 19, 70, 91, 18,211,130, 14,141,209, 46,235, 9,239, 35,219,237,134,195,113,143, 43,156,160,101,179, 70,160,
-109,143,148,101,195,205,253, 61, 77, 83, 47, 35, 93,107,100, 28, 93, 88, 75, 23,134, 44, 44,158,100,231, 30,131,128,164,141, 76,
- 13,172,113, 76, 81,138,168,174, 27,184,188,220,160,213,105,215, 94, 87, 21,109,215,162,173,101,200,221,122,200, 88, 83, 97, 3,
- 8,143,126,242, 35, 77,179, 34,198, 68,219,118,236,246, 71, 62,255,252, 5, 4,207,177,109, 89,173, 87,184,178, 64,145,112,218,
-112, 8,129, 85,221, 8,103, 36, 91,214,230,119,102,254,123, 17,236, 57,148, 53,144, 60, 73, 37,241,241, 79,129, 24,167,156,138,
- 54, 82,215, 37,164,176,228,169,199,188,199, 22, 86,126, 73,140,129,209,143, 18, 38,133,163,200,208, 30,103,215, 2,196, 41, 11,
-140,113,164, 40, 83, 3,173,221, 41, 99, 35, 7,238,104, 13,235, 77, 67,244,114,113,119, 93,183, 76,114,198,113,226,242,242, 50,
-115, 18,124, 46,174, 38,234,186, 22,242,165,210,121, 5,144, 56, 28, 14,249,207, 36,130,199,213,106,181,172,217,166, 32,176,154,
-152, 34,109,219, 99,243,189,115,123,123,143,115, 69,102,199, 87, 56, 87, 82, 58, 69, 10,173,172,163,125, 88, 68,213,231, 13,192,
-121,102,250,204, 52,153,119,236, 79,155,134,255, 6,248,204,249,233, 23,159,140, 85,159,140, 74,211, 41,243, 36,165,136, 65,229,
-189,143,197, 90,249,162, 91, 83, 8, 84,193, 90, 73, 72,179, 89,124,146,109, 17,198, 22,121, 95, 46,150,145,217,222, 38,240, 22,
- 9, 95, 81, 90,236, 55, 49,219,196,150,191,230,104, 76,109, 49,174,166,168,182,216,114,139,182, 13,145, 18, 31, 53,163, 79,244,
-163,151,209, 90, 10, 76,105,162, 31, 91, 14,135,221,146, 3, 62,250,204,139,143,146, 59,156, 25,164,248,144,232,199,200,144, 52,
-163,113, 4, 91, 49,105,203,148, 83,235,180, 57, 19, 56,204,251,165,121,154,145, 87,203, 81,130,104, 9, 41,102, 81,135,162,159,
- 34,251,206,243,246,225,200,111,222,222,243,237,125,199, 84,110,248,241, 31,255, 9, 95,255,244,103, 40,173,216, 61,220,113,216,
-221, 19,167, 17,151,253,187, 58, 91, 55,156,179,178,203,119, 26,109, 21, 49,120,238,111,239, 56,118, 61, 9,157,163, 59,207, 90,
- 83,228, 1,181,138,172, 9, 0,155,167, 11,198,106,148,213, 40,103, 80,133, 5,103,193, 26,112, 6, 85, 90,116, 97,160,208,216,
-166,164,110,202, 92,132,165,101,125, 46, 15,221,217,165, 13, 79, 68,110, 89, 0,166, 30,203, 40, 5, 70,115, 46,150, 59, 75, 95,
-225,195, 54,142,243,212,179, 71, 53,128, 74,103,233,111,231,158,241,143,232, 62,222, 27,125,115,102,143,211,143,132,125,231,208,
-153,244, 3,197,164,231, 10,119,165, 62, 62,126,127,111,175, 30, 79, 90, 1,157, 18,165,210,252,205,159,253, 41, 54, 6, 24, 39,
-136,137,178, 40,120,249,201, 75, 17, 2, 17,233,134, 30, 79,100,125,121,197,183,175, 95,211,135,192,253,241,200, 67,123,228,229,
-103,159,114,191,223, 81, 86, 21,174,112,248, 40, 73,134,104,197,197,229,197, 2,126,249,228,147, 79, 24,199,145,251,124,209,108,
- 55,155, 44, 8, 21, 21,250,118,187,149,177,124,123, 92, 92, 45,194, 62, 40, 8, 94, 70,157, 9,217, 77,219,162,160,168, 74, 48,
- 90, 0, 83,106,126,206,220,242,117,152,199,146,230, 44, 74, 23, 18,211, 56, 97,141, 93, 46, 64, 87, 88,180,134,170, 46, 64, 69,
-166,124, 65, 9, 84, 69,124,198, 40,150, 48,151,186,172,150,221,228, 52, 73,160,134,247,158, 99,215,201,133,168,193, 22,142,106,
-213,112,191,127,200,175,185,206,162,176, 17,235,236,162,200,158,245, 60, 49,158,132, 75,195, 56,101, 93,140,196,123, 54,117,147,
-149,203, 2,204,138, 25,173, 26, 99,164,110,234, 5, 5, 58, 14,125, 70,193,214, 34, 20, 14, 98, 47,243,211, 72,223,119,108,183,
-219,101,244, 11,145,170,176, 20,214,226,199,145,117,211, 16,131,164,210,237, 15, 7,202,162,202,251, 88, 39, 84, 74,163, 24,199,
- 9,109, 13, 62, 73,113,223, 52, 13,101, 89, 81,184,130,169, 31,240, 99, 88,120, 9,235,213, 26,239, 39, 14,135,163,196,221,230,
- 51,119,181,106, 40,139,130,190,159,176,182,164, 27,196, 10,104,157, 99,244,226,177,158, 11,144, 89,204,120, 30,214, 53,199, 73,
- 75, 88,143, 7,212,226, 82, 50, 90, 83, 20,178, 19, 95,158,247,152, 50, 54, 86, 86, 19,101, 85, 18,147,140,206, 39, 31, 48,198,
-178, 94,109, 25,251, 1,165, 18,151, 23, 23, 66,156,235, 90,121,150, 67, 96,204,133,207,156, 11,178,106,202, 12, 62, 18,171,177,
- 66,210, 63,203,186, 18,151, 67,146,244,203, 72, 98, 10, 35, 15,251,123,148, 81,148,101,181,236,185,103, 21,251,252, 12,205,239,
-179,247, 62, 23, 36,158,155,155,219, 12, 10,146, 9,229, 48,244,226,117,183,194, 14,152, 5,118,242,220,192,126,215, 74, 26,168,
-151,239,131,117,197, 2,185,250, 80, 19,112,114,132,216, 69, 68,247,116, 44,175,181,254, 33,151,250,249,152,113, 38,127,125, 64,
- 40,148,206,108, 71,231,135,109,134,137,232,188,203, 22,171,130,168,214,173, 41,176,249,139, 32,182, 4,139,177, 14, 84, 38,175,
- 41,185,192,141, 54,185,147,211,203, 69,175,179, 7, 58, 68, 73, 47,243, 57,115, 92,165,179,131, 55, 9, 99,119,138,158,193, 79,
- 28,135,142, 99,223,114,232, 90,218,161, 99,152, 6,250,161,163,239, 90,250,174, 99, 26,199, 60, 26, 19, 21, 44,218, 16,114,154,
-123, 0, 66, 76,167,145, 75,138,140, 62,210, 77,145, 46,105,186,100,232,177,116,104,198,148, 73,250,234,188, 19,147,219, 78,198,
-140,226, 67,140, 73,198, 96,253, 24,217,183, 19,119,251,129,215,247, 71,126,245,230,142,183,237, 68,115,253,146,111,254,228, 47,
-120,254,233,103,116, 67,207,237,205,141, 96,107, 39,159, 95, 8, 1, 27, 56,103,176,206,136,176,205, 24,193, 82,150, 34,112, 27,
-134,145,161, 31,243, 78,215,160, 49, 39,224,201, 98,179,146, 37,135,205,190,122, 99, 20,198, 25,140,179, 96, 52,209,104,146,157,
- 19,108,242,135,213,130,218, 44, 21,117,105,177,250, 68,111, 63,239,186,213,226,237,214,185,103,143,143,186,245, 83, 48,197,217,
-173,156,211,214,212, 19,101,250,227, 86,254,247,167, 3,159, 4, 34,241,204, 2,247,254,114,255, 28,230,240,168,211,215,122,169,
-202,207,105,120,115,165, 44,203,157,180,124,196, 31,112,173, 63, 21,197,241, 3, 98, 91,117, 6,122,204, 95, 34,147, 18, 95,125,
-254, 57,219,170,162,113, 5,165,115,212,205,138,178,174,121,119,251,142,164, 19,175, 94,191,166,237,123,124,140,188,187,189,195,
- 86, 53,151, 47, 94,240,155,239,191, 39, 26,197, 47,126,243, 43,186,105, 96, 12,130, 33,222,239,143, 84,205, 10,107, 29,125, 55,
-176,123, 16,225,216,219,155,119,130, 99,237,123,186, 94,200,104,251,195, 30,109, 36,196,163,235, 58,218,246,192,229,229, 5, 81,
-193,118,189, 65, 39, 77, 12, 48,244, 99,198, 65, 71,172, 43,100,165,150,197, 82,206, 89,172, 43,240, 17,198,113, 90,222,171, 16,
- 2,201, 7,194, 56, 17, 38, 79, 97,100,138, 55, 3,138,170,178, 32, 70, 47,226,218,232,177, 86, 58,204,224,195,162,108,159,233,
-148,214,101, 11, 88, 38,189,137, 94,103, 6,157,136,254, 64, 41, 41,174,147, 98, 17,204,157, 3, 63, 66, 12,152,194,102,225, 82,
- 34,248,144,197,186,242,163,182, 5,221, 32,106,246,182,237,168,202,154,152,146,176,198,203,114,201, 87, 72, 9,134, 97,204, 92,
-244, 60, 46, 79,129, 58,171,183,101, 95,171, 8, 81,254,221, 60,138,154,213,238,126,156,240,163, 4,189, 92, 94,110, 23, 65,113,
- 89, 8,179, 60,228, 75,172,170,170,211,133,105, 36, 38,117,158,238,132,140,124,189,216,110,169,202, 82, 10, 33, 5,227, 48, 81,
-231,162,162, 44, 27,172, 53,236,118,187, 37, 68,229,120,236,152,166,128,159,100,215,111, 93, 33, 57, 26, 94,200,126,253,208,179,
-170,106,166, 97,196, 40, 77, 83,175,169,170,250,145,125,211, 89, 39, 93, 44,167,247,122,222, 77, 23,133,156, 89,201,123,156, 22,
- 17, 90, 89, 22, 75, 44,235,255, 71,219,155,246, 88,118,165, 87,122,107,143,103,186, 67, 68,206, 36,171, 52,203,144,208,176,253,
-179, 13, 27,253, 73,112,255,130, 6, 12, 72,238, 6, 4,184, 33,187, 27, 82,151,170, 74, 85, 69,102, 70, 70,220,233,140,123,242,
-135,247,221,251,158, 27,140, 44,146, 82, 53,129, 68, 50,201,204,140,136, 27,231,238,253, 14,107, 61,139,254, 46,197, 76,129,136,
- 97,162, 66,108,187,217, 98,236, 7, 72, 9,188,122,117,207,211,134,133, 58,103,208,180, 39,198,196,224,152, 5,214, 90,180,109,
- 77, 69,161,209,180,138,140,145,191, 79,215,162, 18, 0,119,239, 3, 66,244,104,219,166, 4,188,228,149, 80, 78, 12,204,224,164,
-245,165,250,249,243, 35, 82, 74,104,219,174,216, 28,201,175,159,144, 16,176,221,110, 86,170,118,186,171, 22,231, 48, 47,203,141,
-215, 60,198,116, 83, 24,173,199,236, 47, 49,223,215,211, 79,141, 31,219, 97,176,183,240,234,199,185,149,205,221,166, 98,137,188,
-144, 47,113,163, 69, 60, 38,115,199,173, 33, 84, 14, 20,209,188, 11,207,214,180, 76,248, 98, 17, 85,186, 6,166,232,178,235,100,
- 86, 46,200, 55, 26,179,218, 61,177,138, 58, 81,151,140, 20,225,221,136, 0,199,159, 7, 5, 49,228, 93,130,228,170, 54,165, 8,
-173, 64,185,182,200,116, 50,185,130, 11,128,131, 86,136,226,101,181, 64, 12, 14, 83,140, 36,150,147, 26, 34, 42,192,211,248, 89,
-203,116, 77,188,131, 64, 44, 73,113, 36,244,155,151,132, 97,138,152,166,136, 83, 63,227, 60, 76, 56, 79, 19, 46,139, 67,181,219,
-227,253, 87, 63,195,155,183,239,176,219,110, 48,244, 3,220, 60, 64,196, 8,196, 4,109, 13,180,182,168,235, 6, 77, 99,208, 86,
- 6,214, 40,212, 21, 33, 90,117, 93, 65, 84, 21,146,214,232,251, 17, 62,144,192, 39,196,120,163,254, 95, 37,200,210,222, 58, 81,
-199,174,152, 85,159, 47,111,161, 69,185,208,147, 22,100, 25, 12, 9,208,128, 48, 18, 93, 93, 65,130, 53, 23, 49, 71, 81,230,195,
- 49,178, 21, 77,114,178,152, 40,143, 81,222,147,139,213, 51,147,255, 95, 90,105,222,174,191,255,246,150,207,135,175, 44, 94,255,
-116,195, 75,160, 49,187,224,221,250,181, 67, 79,207, 59,254,248,236,178,149,215,157,110,124,102,239,184,174, 20,158, 37, 25, 10,
-241,131,237,122, 62, 0,158,239,185,214, 40,200,117, 71,127,219,213, 83,110,186, 17, 2,127,245,167,127, 14,145,157, 32, 49, 96,
-113,180, 22,114, 62,224,241,233, 4,109, 13,148,214, 72, 62, 33,184,128, 79,231, 51,118,119,123, 12,222,161, 69,133, 36, 21,162,
-144, 24,198, 9,167, 75,143,144, 4,218,174, 5, 36, 93,188, 77,211, 64,105,139,243,101,128,119, 20, 82,225, 22,186, 72,172, 33,
-245,245,249,124,198,211,211, 19, 54,155, 22,109,215,112, 68,169,194,227,225, 51, 92, 12, 48,166, 34, 8,185,160,120,223,102,211,
-240,133,110,208,180, 21,172,145,124, 1,201, 27, 33,224, 85, 72,152, 99,111,169, 32,179,134,220, 38,139, 91,200,194,102, 77, 1,
-186,212,141,101,145,214, 84, 84,213,154, 71,227,130,195, 51,132, 4,172,162, 6,194,197, 64, 30,127, 69,239,203,122,211, 96,152,
- 6, 76,203, 72,246, 59, 31,209,116, 29,173, 1, 98,196,180, 44,168,140, 33,141, 1, 18,146,143, 32, 36, 60,117,119, 77,215,226,
-112, 58,114, 58,155,166, 64, 42,198, 73,143,211,132,182,109, 48, 12, 35,172,189,199, 52,205,228,247, 94, 28, 60,171,174,201, 10,
-101,224,220, 2, 83,213, 80, 74, 23,252,109,127, 89,138, 95,218, 88,226,139,231,130,170,107, 59,164,152,240,116, 56,162,239,123,
-220,221,223, 67, 42, 98,185,211,115, 67, 56,215,170,105,208, 95, 38, 56,231,240,240,240,128, 15, 95,125,192, 52,141,116,121, 77,
- 51, 22, 94,119, 52, 77,205,144, 31,224,124, 57,227,221,219, 15,168,235, 6,151,203, 25, 66, 36, 84,181, 69,109, 45, 82, 12,100,
-237,234,218, 82, 88, 89, 67, 90, 6, 93,145,248, 77,152, 28, 34, 51,114, 17,181,160,170,106, 8, 33, 49,197, 8, 91, 91,204,203,
-196,150, 57,131,203,153, 68,140,209,123,152,186, 45,182,185,174,219, 80,160, 79, 4, 18,175, 40,199,113,160,201, 13,128,190,239,
- 81,215, 53,154,182, 70,223, 95,208,118, 53,102,231, 10,110,150,168,123, 20,167,221, 52, 21, 23,234,100, 45, 75,194, 67, 41, 18,
-236,245,253,192,201,105,182, 92,238,206,205,152, 89,236,105,173,165,144, 32, 67, 66, 76,169,192,128,157,154,232,116,124,175,213,
-181,198,211,211, 83,225, 51, 64, 74, 44,227,200,221,117,132, 86,153,160, 72,197, 97,140,190, 88,224,192, 77,107, 74,223,143,169,
-142, 43,188,238, 45,199,226, 5,170,220,143,195,196, 62, 7,207, 68, 50,194,167, 76,201, 34, 31,224,247,253, 62,164,234,166,144,
- 20, 13,165, 12,141,225,133, 46, 57,202,138,205,250, 42,143,145,121,191, 46,215,254,101, 65, 10,247,220,253,226,153,148, 63, 38,
-142, 42, 77,130, 77, 82,153, 66, 70, 48, 19,186,112, 60,148,240,144,112,128,240, 0, 60, 32, 2,139,172,200, 92, 37,161,137,255,
-206, 10,122, 41, 20, 91,136, 52,100, 86, 45, 2,132,132, 21, 36,164,137,222, 99, 90, 60, 46,139,199,105,137, 56, 57,129,227,162,
-112, 92,128,227, 18,113, 92, 2,206, 75,196,105, 14, 56, 76, 1, 15,253,130,239, 14, 3,126,247,249,130,127,249,238,140,127,254,
-237, 35,126,249,237, 35,126,251,212,227,236, 5,182,111,222,227,235, 63,249,115,220,189,121, 3,129,136,254,124,192,112, 57,193,
- 45, 51, 41,102,173, 37,127,190, 49, 48,214,160,107, 26,116, 13, 85,160, 85, 69,202, 93,211, 84, 16, 21, 29,130,167,243, 5, 62,
- 68,164,103,249, 99, 55,214, 50, 46,160,100,193,223, 94, 81,169, 81, 68, 64, 70, 8, 25,145, 84, 66, 82,162,248,231,161, 37,160,
-129,166,178,208, 28,216, 32, 86, 57,230,105, 53,152, 22,105, 5,126,225,130, 41, 62,235,145,111,213,239, 55, 25,129,183,132,182,
-159,146, 93,190, 94,201,220,168,237, 81,198,125, 47, 67,147,210, 45, 93, 65,252,128,125,243, 71,204,223,159,243,155, 95, 4, 53,
- 61, 3, 58,229,194, 57,133, 0,149, 18,222,238,239, 80, 75,137,133,121,212,211,188, 96, 92, 28,164, 49,120, 58,159, 16,101, 68,
-183,221, 96,187,221,192,133,136,211,249,130,105,118, 56, 13, 3, 46,227,136,167,227, 1, 31,190,249, 6,218, 24,156,250, 30, 62,
- 1,155,221, 14,218, 84, 56,247, 67,129, 34, 81,183,209,162,235, 54,104,219,142,179, 8, 12,172,169, 48,141, 19,162,247,188, 19,
- 52, 24,199,145,132,155,222,193,212, 21,218,174,131, 54,116,168, 10, 78,235, 74, 44,158,149, 74, 16, 84, 4,185,243,117, 55, 56,
- 62, 31, 3, 61, 31, 74, 33, 34, 21,247, 72,211,146,240, 74, 48,115, 93,172, 58, 82,165, 20, 98, 32,154,154, 16, 2,218, 40, 42,
-232, 5, 1, 65, 4, 68, 57,111,178,213, 75, 73, 98,214, 91,163, 89, 73, 62,148,105,154, 53, 26,117, 93,149,157,112,197,126,109,
- 91, 87, 52,118,151, 18,167,126,192,226, 29,199, 21, 91,142,134, 93, 56,135, 59,178,170, 31, 24, 71, 34,140, 81, 68,167, 43,151,
- 82,182,103,121,239, 48, 78,212, 73, 42,173,184, 59,172,153, 8,119, 61,188,167,105,130,177,134, 41,101, 26,227, 56, 23, 20, 41,
-125,218,129, 72,152, 12,182,137, 49, 66, 74, 82,114, 79,227,140,166,235, 0, 65, 23,209,233,120,130, 49, 22,239,222,189,131, 82,
- 10,211, 52, 97, 28, 71,124,254,252, 25, 91,182, 49, 14,195,128,113,236,241,238,221, 27,104, 77,145,162,195, 48, 92, 1, 95, 82,
-150, 60,123,161,136, 6, 26,216,129, 97,217,174,151,197, 92,121, 68, 63, 12, 3, 49, 61, 52,173, 87,172, 49,244,223, 56,170, 52,
-134,171,133, 75, 10, 89,156, 14,132, 21,182,236,138,208,112, 46, 64,107,133,237,110,139,148, 18,134, 97, 64,101, 45, 23,163,146,
-187,105,130,215,208,235, 32, 25,238,178,176,251,192, 35, 49,221,145, 60,227,169, 76, 77, 50,192, 39,187, 47,180,209,252,125,162,
- 84,181,113, 28, 32, 36,174, 86,236, 24,112,127,191,103,221, 78,100, 55,130,193,249,114,193,233,116, 46,216,221,124,241,135,232,
- 33,100,194,102,211,161,170, 40, 34, 88,107, 13, 1,137,224,195,138,249, 30, 11,172, 44,242, 58,227,247,157, 41,235, 6, 64,227,
- 39,253,147,158, 9,230,196, 23,176,151,215,223,145, 16, 1,137,242,134,146, 82,173,138, 4,113, 83, 48,144, 74,250,153,144, 75,
- 48,121, 77,146, 39, 82, 66,114,132,223,117,196, 79,113,131, 51, 11,232,242, 37,125, 37,114, 69,128,139, 6,121, 69,135, 62, 39,
-132, 49,124, 1,171, 20, 46,165, 52,188, 99,159,233,250,247,114,194,151,144, 84,237, 39,208,222,125,246,233,154,151, 46, 53, 68,
-112,240,203,140,101, 30, 49, 79, 51,230,217, 97,152, 22,140,227,140, 97,116, 88, 60, 16,160, 0,213,160,217,119,184,123,125,135,
-186,107, 16, 83, 68,127, 57, 67, 35,113, 82, 29,211,232,180,228,136, 73,192, 26, 82,171,215, 21, 37,170, 37, 17, 8,228, 80, 87,
-136,117, 5, 88,139,120,161, 81,106, 96, 63, 43,141,123,174,185,189,133,113,158,114,252,233, 77,236,121,217,171, 36, 73, 77, 23,
- 20, 32,180, 88, 89, 5, 19,132, 6, 1, 55, 50,175, 62, 73,132, 20,215,132,215,149,215, 92,174,194,101,197, 53,227,124, 93,112,
-136,107, 42, 89,137, 30, 93, 9,197,158, 91,211,196,247,188,227,162, 92, 32, 47, 14,233,211, 42, 45,110,245, 35,189,232,125, 79,
-215,144,152,231,151, 61,179,177,197,218,130,247, 3,197,198,243,202,250, 37,161,220,243, 17,155, 82,128,247, 1, 90, 8,232, 4,
-252,252,253, 87,168,181,129, 8, 2,210, 88, 4, 33,160,180,198,249,124,193,165, 63,227,235,111,126,134,167,227, 1, 49, 8,124,
-122,252,140,105,154,209,237, 55,240, 41,160,221,116,104, 55, 27,124,251,241, 59,156, 14, 71,132,152, 80, 55, 45,180, 5,134,158,
-128, 29,145,115,176, 83, 34,107,210,226, 29,142,159, 62, 66, 10,160,107, 91,204, 57,108, 37, 70,236,239,239, 32, 68,194,124,158,
- 48, 12, 3,234,138, 4,103,211, 60, 99, 94, 28, 98,162, 29,100, 93,213,101,223,106, 45,237, 3,231,105, 70, 93,105, 40,105,224,
-157,135, 81, 38,231, 78,242,235, 77,150, 86,197, 5, 96,240,142,138,233,166, 65, 76, 1,222,121,248, 68,151,218, 52, 77, 12,176,
- 33, 95,177, 54, 6,199,243,133,194, 51,124,160, 39, 34, 69, 40,101,138,157,139,138, 2,114,168,156,135,254, 42, 66,148, 2,109,
-219,194,205, 20, 78, 83, 25,139,105,156, 24, 53,171,233, 44,208,138, 34, 53,153,254,150, 57,237, 82, 74, 72,158,250,197, 24,139,
-162,221,179,191,251,116, 60, 99,183,219, 32,133,200,241,170, 20, 63, 74,209,164, 40,175,119,126, 3,122, 79,175,221, 60, 59, 76,
-243, 25, 41, 9, 52, 77,203,132,183,132,126, 24, 80,215, 13, 94,189,190,195,229, 50, 34,177,101,111,228,179, 48,239,253,231,121,
-129,181, 21,170,186,193, 60,142, 8, 33,225,120, 60,226,195,135,247,168,234, 26, 19,219,169, 98, 76,212,217, 87, 53,180, 38, 27,
-162, 21, 9, 31, 62,188,199,241,120,192, 60, 77,152,172, 65,101, 73,208,104, 42,131,167,167, 39,188,121,243, 6, 46, 46,152,134,
- 17,122, 67, 33, 43, 74,211,247, 94,107, 77, 19, 66, 45, 16,199, 1, 11, 91,222,134,137,208,174, 82, 72,120,231,208,181, 45,250,
-126,128,224, 95,103,196,236,178, 44,216,111,119, 24,134,190,176, 62, 50, 40, 39,173, 70,225,211, 56,150,192,175,202, 90,136, 36,
- 16, 35,223, 33,146,166,121, 33, 6, 40, 40,104, 99,152,194, 71, 23,117, 6,130,109, 55, 29,169,237,131, 71,246,224,184,197,163,
-174,218,162,228, 71,154,113, 58,246,133,193,175, 21, 77,147,104,172, 79,249, 6, 66, 4,102, 34, 44,144,114, 66, 20, 9,243,236,
- 48,207, 14,109,219, 80, 2, 94, 20, 69, 81, 63,141,243, 53, 11, 93,105, 72,153,184, 32,138,120, 73, 0, 36, 87, 22,183,117,115,
-155,255,251,191, 66, 40,151,110, 15,209,244,188, 39,186, 78,223,243,225, 44,149, 98,161,139,188,249,132,174, 9,111, 88,117,214,
- 40,217,238,215,139, 52,149, 14, 61,135,200, 43,246,132, 19,110,144, 12,254,241, 89,114, 86, 54,197,167, 36,232,128,137, 18, 49,
- 74,226,204,231,221,187, 80, 20,232, 34, 37,237,205,197, 21, 55, 75,224,136, 60,246, 16, 72, 44,146, 89, 66,132, 11, 52,242, 47,
-150, 60,222,185, 59, 31, 49, 44, 17,167,168, 49,200, 13,122,217,224,130, 26,231, 84,225,148, 42, 28, 67,133, 81,109, 33, 54,175,
-177,121,247, 21, 94,253,236,231,184,255,230, 27,108,222,190,133,100,117,234,229,124,192,116, 57,193,185,153,198,211, 82, 65, 26,
- 67, 65, 44, 90,193,104, 1, 37, 35,140, 2,172,165,177,187,181,134,148,231, 90, 19,233,206, 90, 44,206,227,120, 60,149,157,240,
-250, 1, 17, 55,183, 46, 71,155,166, 43,202, 85, 0,197,214, 37, 40, 64, 30, 66,145,120, 78, 26, 5,104,222,179, 27,133,186,109,
-216, 70,152,158,137,209,211, 85,236,150,110, 53, 26, 73,200, 18,253,154, 94,240, 90, 18,195,253,150, 52,119,155, 90, 38,174,193,
- 66,107, 84, 66,206,199, 92, 23,150, 69,249,190,170,104,159, 93,168, 55,201, 72, 55, 31, 44,125,185, 21,191,154,217,127,112, 55,
-254, 82, 39,254, 67,191, 39,191, 89,137, 4,152,208, 84, 21,190,126,247, 1,141,174, 81, 87, 53, 66, 2,206,151, 1, 41, 68,252,
-226,191,255, 19,241,208,221,130,126,236,177, 68, 15,143, 8,221,212,104,186, 22, 79,143,143,132,248, 20,192,101,232, 97,235, 10,
-221,102,131,170,110,224, 67,194,238,238, 30, 66, 72, 56, 46, 98, 73,201, 75, 74,111,178, 94,181,144, 74,193,241,110,119,187, 33,
- 97,213,211,225,137, 70,165,242, 74,237,202, 33, 21, 49,210,228,134,246,209,190, 4,230,120, 79,113,168,109,211,150,221,182,214,
-154,147,222, 28,141,131,149, 42,151, 18,216,254, 87,215, 85, 17, 91,105, 77, 19,171,188,123,206, 14,150,170,182, 36,110,211,122,
- 21,117,203, 74,246,101,230,139,132,248, 12,214,104, 76,227, 8,201,126,110, 41, 37,118,187, 45,154,182, 97, 69, 53, 21, 28, 4,
-105,161,160,142,146,174,200,171, 56, 41, 37,156,247,168,234,171, 24, 47,119,121, 25,178,130, 4, 2,160, 44,174,164,193,101, 10,
- 25, 41,250, 77,225,183, 3, 64, 93,209,228,173,239,123, 10, 97, 97,110,194,195,195,103, 24, 99,153,138, 70,211,207, 97, 24,209,
-182, 29, 20,195,174,134,113,196,166,107,137,188,102, 43,214, 0, 37, 12,227,132,166,161, 20,197,121,153,136,210, 25,249, 44,213,
-138, 39,157, 52, 46,175,171, 26,167, 19,165,220,133,224, 97,140, 66,211, 86, 20, 91,106, 44,250, 75, 15,239, 60,117,208,188,195,
- 38,193,224,140,105, 36,239,124,215,110,158, 21,172,244, 76, 17,163, 32, 22,126, 64, 83,215, 69, 19, 97,173, 33, 31, 58, 4,230,
-105, 34, 1, 29, 99,117,115,203,161, 88,215,176,254, 0, 0, 32, 0, 73, 68, 65, 84, 74,161,116,253,123,242,247,110, 94,102,110,
-222, 88, 80,105,100,153,218, 72, 69, 41,118,203, 50,195, 86,164,229,178,198, 64,128,166,159, 41,102, 65,166,226, 92,129,153,195,
- 93, 18,188, 7, 82,146, 24,134, 5, 85,213,194,152, 10, 90, 87,180,222,112, 11, 82, 74,148, 72,201,214, 51, 89,104,139, 21,113,
- 3,124,130,119, 17,211, 56, 35, 69, 74,124, 28,199, 9, 79, 79, 71, 44,139, 47,193, 56,198,216, 21,176, 40,174, 52, 56,233,230,
-140,122,169, 75, 95, 55, 36, 82, 94,147,217, 11, 24, 37, 61, 67,131,228,195, 45,137, 91,172, 76, 66,226,140,117,174, 20, 86, 80,
-149, 24, 67, 57,211,181, 80,208, 66, 93,199,226, 44, 66,202, 7,237,117, 50, 42,202, 40,127,205,233, 22,156,238, 6,182, 75, 73,
- 5,246,174, 38, 32, 5, 4, 79, 17,171, 20,212, 34,203,155, 32,174, 34, 27, 75,178, 22,163, 32,215,167,114,209, 3, 8,201, 29,
-171,224, 74,217, 23, 65,131, 18,100,121, 72,156,123, 27, 67,198, 3, 90,174,108,137, 34, 20, 1,204,206,225, 50,206,184,204, 11,
- 28, 52,116,123,135,106,255, 26,221,253, 91,108, 95,191,193,254,237, 59,236,222,190,129,217,180, 16,214, 64,104, 1,231, 22,244,
- 61,101, 19, 7, 23,201, 14, 39,105,220,153, 81,151, 90, 82, 18, 28,137, 54, 20,185, 5, 88, 61,218, 88, 11,105, 13,146, 82, 16,
-214, 0,149, 65,112, 30,253,113, 96,101,110, 68, 76,190, 60, 36, 41, 43,193,113,133,246, 64, 16, 15, 94, 51, 1, 15, 74, 66, 88,
- 5,161, 21,146, 17, 72, 6,180, 91, 87, 18, 48, 52, 57,128, 53,176,149,134, 22, 57,185, 44, 3,103,120,255,152,196, 77,176,137,
- 44,185, 36, 89,142,152,174,222, 48, 22,142,164,231,184,220,140,126, 21, 47, 88,195, 50, 40, 38,231, 13,139,239,247,238, 72,234,
- 42,244, 20, 28,241,202, 76,117, 72,218, 32,173,159,227,226,107, 23,217,134, 39,110, 62, 30,110, 70, 94,184,121,142,111, 21,243,
- 47,195, 33,214,149, 79,252,158,253, 83, 20, 2,163, 22,146, 41,116, 9, 42, 38,124,120,253, 14,247,247,175,112,158, 38,244,222,
-225,227,211, 19, 92,138,248,197,175,126,133,118,179, 65,221,180, 5,115,249,219,223,253, 6,178,178, 8, 10,248,246,227, 39, 8,
-161, 81,219, 6,253,105,128,155, 60,154,186,131,213, 21,172, 50,112,211, 12, 37, 19,198,177, 39, 46,117,215,160,110, 8,110, 68,
-177,165, 17, 33, 69, 76,243, 4,165, 37, 62,124,245, 30,117, 75, 56,212,190,239, 97,171, 10,218, 84,104,154, 22,219,253, 14,139,
-119,100, 45,226,149, 76, 70,198,210,100, 45,194, 47, 11,186,118,131,133, 49,174,243,226,177,120, 10,181,200, 20,177, 24,232,192,
-118, 46, 64, 43, 3,107, 91, 44,236,139,207,120, 81, 41, 36,243, 53, 18,106, 91,163,107, 41, 29,142,178, 27, 72,129, 76,212, 55,
- 85,168,133, 49, 68, 32, 82, 42,214,226,102, 72, 77, 36, 56,163, 12,148,164, 66,195, 47,180, 18,144, 66, 81,124,171,181,212,189,
- 59, 26,147,167,152, 74,122, 23, 0, 12,253,128, 29,219,218, 74, 50,100,244,156,147,174, 17,162,131,173, 13,180, 53,172,175,137,
- 56,158,206, 72, 66, 96,156, 23,220,191,186,227,209, 61, 13, 78,149, 86, 92,168,128,105,124,116,152, 79,243, 12, 91, 53, 72, 32,
-113,157,177, 22,167,243, 5,227, 52,225,213,253,107,184,197,193,112, 68,243,166,107, 41,166,213,185, 82, 12,157, 78,103, 52,109,
- 87,112,169,227, 48,160,174, 42, 72, 0,141,181,240,193,227,120, 62, 67, 72, 74, 27, 59, 28,143,132, 92, 21, 2,214,214, 28,172,
- 35,208,182, 29, 66,200,200, 84, 70,240, 90, 82,213, 63, 30,143, 8,137,180, 30,182,178,236, 26,160,175,155, 98, 87,175,235,176,
- 24, 34,137,123,141, 68,138,158,249,252,146, 39,139,137,186,111,163, 33, 36,141,199, 37,159, 89,149,181, 72, 33, 80, 74, 94,116,
-101,159, 77,130,106,186,111, 66,233,182,169, 1,164, 14,159,180, 38,243, 60,179,149,151,210,245,202,235, 32, 4,217, 26,145,208,
-180,117, 73, 84, 92,150,153,199,255,177,208,221, 82, 76,196,240, 79, 2, 79,159,159, 96,117, 5, 64,162,170, 26,108, 54, 91,104,
- 94,215, 54, 77, 5, 41,128,237,118, 11,165, 52,150,197, 67, 43, 91, 66, 90,230,105,134,115,158,189,231,190, 68,176,174, 83, 39,
- 37,175, 3,214, 83,188,236, 85,207,196,194,219, 88,214,107,118, 37, 93,134, 66,124, 81, 69,252, 61, 52,152, 72,108,202, 21, 37,
- 28, 99,141,249,204,217,235, 70,106, 24,169, 41, 23, 93, 82, 54, 47,214, 68,173, 28,252, 33, 37, 2,167,168, 65,102, 17,221, 85,
-180, 68,211,115, 10, 57,209,146, 47,142,232, 48,187, 5,179, 75, 4,169, 89,229,104, 95, 83,229,210,205, 15,178, 77,173, 79, 96,
-198,111,178,144, 79, 9, 93,126, 45,132,162, 80,131,213,139,136, 72,127, 70, 41, 13, 99,236,234, 98,215, 84,176, 24, 9, 5, 32,
- 58, 10, 44, 24,198, 17,227, 56,225, 50,244,152,150, 9, 46,204, 36, 18,137,228,209,156,167, 17,203, 60, 34,250, 0,163, 43,212,
-117, 7,169, 45, 89,247, 4, 49,173,141, 82, 52,126,148,138,161, 61,154, 97, 46, 10,218,104, 84, 77, 3,101, 13,132, 53, 32, 58,
-174, 66,127, 62,227,116,186,176,101, 59,191,126,204,223, 79,177,144,251,232,235, 15,180,222, 16,128, 22,130,252,233, 70,130,125,
-110,128, 81,128,145, 72, 82,210,100, 67,145,144, 78, 40, 5, 91,105,216,124, 91, 11,201, 82, 67,246, 85,151, 24, 84,178, 99, 61,
- 11, 44,189,221,112, 39,121, 21, 42, 22, 26, 92, 40,176,142,194,206,127,166,134, 79,215,201,250,106,250,144,138,192,241, 22, 58,
- 19, 75, 57, 23, 17,233,181,226,130, 54,221,184,231,196, 21,239,138,171, 2,254,185, 56,174,164,237,229, 80,158, 76, 69,140,233,
-135,119, 96, 32,224, 13,196,237,234, 33,166, 68, 83, 33, 31,232, 61,226, 35, 42,105,240,103, 63,255, 99,132, 24, 49,199,136, 67,
-223, 3, 90,145, 31, 61, 80, 81, 75, 24,215, 10,191,254,245,191, 64, 40,122, 46,102,239, 17, 18, 80, 87, 45,230,209,225,243,227,
- 1,117,221, 97, 28, 23,124,247,241, 19, 98,136,120,255,246, 29,220, 60, 67, 43,137,186, 38, 1,218,195,195, 39,246, 99, 43,116,
- 93,135,221,110,199,144, 18, 58,176, 31, 62, 63,224,233,233, 9,219,221, 14, 2, 18,219,237, 30,227, 56,226,225,225, 51,117, 73,
-154,240,153, 90, 41, 74, 46, 83,154,190, 46,182,134, 17,255,156, 0, 54, 82, 42, 58,200,133, 64,211, 52, 64, 4,130, 11,228,227,
-230, 34, 47, 37,178,149,230,195, 85,107,206, 49,224, 67, 91, 43,133, 20, 18,140,162, 40,204,192, 86, 35,239, 29, 18, 4, 22,231,
- 97,140,197, 50,123,220,237,246,232,199,161, 64,138, 2, 71, 62,223,223,221,195, 45, 30,211, 48,162,169, 42,120, 71,140,116,242,
- 40,211,247,215,123,135,166,174,232, 92, 74, 52, 77,236, 47,103, 66,177,106, 69,244,203, 20, 33,165,130,177, 6, 77, 91,179,248,
- 55,150, 9, 32,117,115, 10,117,219, 65, 25,133,105,158, 0,166,144,245, 61,117,193,164,124,247,144, 90,160,109, 43,108, 54, 13,
-234,166,197,199, 79,159,161,149, 65,221,116,184,244, 3,180, 85,152,151, 25,195, 48, 96,191,223, 99,153, 40,192,164,235, 90,182,
-197,109, 74,198, 67, 74,145, 85,229, 22, 62, 68, 28,143, 39,108, 54, 27,154, 50, 6, 18,237, 41,169,209, 15, 35,170,186,134,210,
- 6, 82, 41, 28,158, 14,172,230,182,248,248,240,176,138, 10,213, 24,121,175,190,204, 11,220, 52,227,238,254, 30,199,211, 25,227,
- 52,160,105,106, 52, 13, 17,252, 34,127,205,218, 80,188, 44, 18, 96, 52,117,217, 90, 1,222, 83, 58,157,173,106, 36, 33, 33, 53,
-197,180, 82, 81,232,168,137,211,170, 0,137, 36,128,166,174,224,252,130,121, 25, 32,181,130, 53, 21,175, 58, 44, 78,199, 19, 3,
-199, 36, 41,243, 89,124,232, 25,145, 59, 14, 99,241,234,103,214,123,224, 28,146,221,126,139,170,174,202,247, 52, 68,143,113, 26,
- 96,173, 97,166,125,128, 91,102,254,217, 83, 10,158,144, 56,157, 46, 24,199, 9,142,189,238, 41, 69,156, 47,103,132,232, 32,100,
- 66, 85,181,228,122, 98,213,125,182, 13,102,218, 30, 77, 10, 35, 7, 13,133, 50, 53,204,107,226, 92,188,172,161, 51,107,151,193,
- 79, 18,202,253,216,161,252,245, 71, 42,157,139,144, 18,218,152,226, 7, 21,171,124,113, 89, 20,239, 44,207,207,221,124, 90,197,
-181, 38, 38, 59, 9, 64,164,200,255, 78,104,201,252,145,198,105, 46,233, 65,207, 18,224,139,202,250, 58,206,140, 72, 43, 40,254,
-173,112,233,122,177,231, 84, 46,197, 80,255, 16, 72, 77, 10,200,178,163, 86,138,118,104,148,210,166,138,170,158,176,129,186,248,
-100,137, 76,228,110,162,244,140, 49,208,130,232, 84,185, 98,172,170, 10,166,178, 69, 60, 40, 57,102, 86,114,124, 43,137, 63, 8,
-225,106,140, 46,107, 8,161, 13, 68,101,168, 88,178, 10,194, 40, 36, 23,240,248,240, 25,167,203,133, 63,239,188,138, 64, 9, 5,
- 17,171,139,235, 42, 74,188,166,207, 9,201, 33,227,188,175, 20, 89, 32,199, 69, 87,190,216,173, 53,132,154, 92, 21, 72,224,172,
-123,177,194, 4,255, 40,203,215,139, 75, 30,220,196,158,254, 62,254,123,186, 98,144, 86,221,115,252, 30,114, 54, 23, 0, 95, 26,
-135,199,130,118, 92, 79,123,240,130,253, 13,171, 2, 36,221,238,216, 95,216,133,173,223,124,235,212,185,148, 18, 49, 11,178, 86,
-131, 3, 50, 16, 41,141,237,245,253, 61, 54,155,142, 4, 53, 49, 97,179,217, 97, 89,104,237, 4, 8,236,118,119,232,251, 1, 15,
-159, 31,209,118, 91,188,123,247, 30,206,121,116, 93, 7, 83, 85, 72, 74,226,216, 95,240,246,253,123,248, 24,176,120,135,237,126,
- 7,161, 21, 78,253, 5,191,251,246, 59,236,118,123, 74,111, 11,129, 57,232, 26,219,221, 14, 82, 74,156,207,103,116,221, 6,219,
-237, 14, 33,208,222,125,183,223,195, 24,139,237,150,125,195, 16,104,170, 10,187,205,142,236, 62,129,230, 51, 74,106, 76,195, 8,
-191,120,184,197,209,184,215, 59, 62,188, 8, 59,155,223,167,130,167, 19, 42,171,215, 37, 32, 36,113,228,105,149,154, 74,160, 75,
-206, 72,207,136,217, 60,112,179,214, 96, 89,230,114, 81, 1,100,147, 90,220,130,253,126,135,190,239, 25, 44,146, 74,140,107,215,
-117,172,242, 22, 55,171,163,182,105, 56, 51,252,192,186, 32,194, 66, 47,243, 66, 41,110, 82,149, 21, 23,157, 65, 52,114,207,207,
- 76,101, 43, 44,203,132,101, 89, 80,215, 85,249, 92, 51,216,164,109, 91,154, 72,240, 84, 48, 70,130,246, 12,195,128,186,166, 49,
-125,221, 52,216,237,118, 72, 41,225,116, 60,151,125,254,211,211,129,119,176, 10,195,208,163,235, 90,128,189,212,199,227, 19,246,
-251, 29,249,245,141,198,118,187,129, 82,146,195, 69,200,254,167,181,198,233,120,194,253,253,171, 82,180,214,117,195,236,120,226,
-200,207,243,140, 77,215, 98,153, 38,188,123,251, 6, 41, 70, 60, 61, 61, 22, 75,151, 53, 22,167,211,153,252,211,108,193,171,234,
- 10,211, 52,227,114,185,176,194, 59, 66, 10, 82,201,167, 72,202,243,121, 89,120,218, 49, 83,129, 83,215,133,235,190,182,105,101,
- 95,119, 78,138,203,172,128,108,131,110, 26,162,224,101,145,157, 49, 26,125,127,193,253,253, 61, 46,151, 51, 82,140,252, 60, 76,
- 68,250, 99,123,162, 49, 26, 66, 10,248, 24, 11,235, 94,107,133,101,158,113, 56, 28, 8, 23, 92, 91,104,163,209,180, 13, 18, 0,
-231, 29, 66, 12,112,193, 33,138, 4,161, 4, 54,155, 14,214, 86, 56,159, 47,136, 49,226,233,233, 9,195, 56,224,116, 58,225,237,
-219,183,216,237,182,156,192, 55,150,179, 33,211,234, 72,187, 18,191,200,171, 88, 55, 6, 47, 37, 72,190, 68,160,252,131, 93,234,
-233, 25,110, 51,166, 84, 58, 40, 33, 73,152, 32,164, 92,141, 71, 83, 73,239,146, 0,193,105,196, 58, 88, 50,127,146,169, 4, 60,
- 72, 14, 76, 49, 74, 80,100, 40,247, 79, 49, 1,227,188,240, 55, 93,124,241,179, 75,153,179,254, 12,185,119, 67, 43, 19, 87,200,
- 72,126,161,165, 82,101, 15,114, 29,209, 99, 5, 52,225,189,148,144, 12, 59,160, 49,188,210,178, 16,174,242, 30, 72,101,143,190,
-214,168, 12, 41,215,219,166,129, 49,186,136,110,136,182,199,197,143,202, 9, 77, 68,195,178,214, 80,128, 65, 85,161,170, 12,180,
-150,176, 90, 67, 24,141,100, 52, 96, 12, 96,233,231, 56, 46,248,237,111,191,197,101,156, 41,141, 8, 2, 33, 93,167, 34,229,162,
- 73, 2, 49,208,142, 48,173,118,214,185,235, 46,137, 52, 98, 37,144, 83,178,136,210,147, 4,116,101, 74, 12, 33, 86,252,250,235,
-119, 51,253, 43,202,195,231,164,183,151,163,125, 95,170, 21,200,166,151,187,126,249,236, 57, 16, 37,109,107,237, 63,127, 89,140,
- 34, 56, 30, 87, 60, 39,191, 22,168, 13,189, 41,113,243, 67,202,235, 69,243,146, 79,189,124,188, 18,222,179, 26, 73, 50, 69, 43,
-242,231,167, 33, 97,165,198,207,191,254, 6, 86,155,146,215,252,233,225,129, 82,194,248, 43,107,218, 6, 79,199, 51,148,177,168,
-235, 22,135,195, 9, 31, 31, 30,136,200, 53, 79,120, 60, 60, 33, 9,224,233,233, 9,227, 52,209, 46, 52, 37,252,250, 55,255,130,
-199,195, 1,175, 95,191,193,102,187, 67,219,118, 16, 66,161,109, 59,116, 93,199,190, 93, 18,254,188,123,247, 30,117,221,160,109,
- 91,220,221,221,195,154, 10, 90,105, 92, 46, 61, 98, 4,255,153, 13,148, 84,148, 91,176, 56,206, 92, 80,176,166,166, 1, 56,179,
-196,179, 8,170,170,106, 72,173,139,109,241,234,237, 94,143, 20,105, 39,106, 43, 3, 99,105, 71, 74,130,183,235,247, 38, 71, 85,
- 70,238,186,109,101,177,221,110, 96,173, 46,177,151,214, 82,186, 87,136, 30,214, 16,220, 10,145, 14,248, 44,182,115,110,166,180,
- 56,145,208, 52, 22,109, 87, 97, 28,122,116, 93,199,127,135,197,194, 57,236,244,190, 32,210,100,136,192,225,120,161, 17,181,148,
- 88,120,109,145,231, 60,235,189,121, 74, 17,247,175,238,160, 53,165,186, 57,231,176,217,108,112, 56, 92, 10,195, 61,147,244,242,
-142, 85,107,131,154,147,190, 30, 30, 30,176,221,110, 17, 66,228, 31, 1,154, 51,206, 77,165, 81, 85, 84,244,159, 79, 71, 24, 67,
-157,102, 74, 1,117,109,209, 52,150, 5, 88,116,185, 12,195, 4, 1,137,253,110, 15,169, 40, 54,213,251, 0, 37, 21, 54,221, 6,
-243, 56,225,116,120,194, 56, 92, 48,141, 3,222,189,127, 11, 33, 40,239,156, 50,203,101, 57, 19,133, 32,149,119, 2,104, 90,161,
-232,204, 90,167, 25,130, 53, 34, 82,136,194, 80, 15, 33,114,200,141,133,100, 31,123,246,221,103, 17, 98,142,224, 37,245,191,226,
- 41, 92, 66, 91, 55,104,155, 22,137,109, 98, 74, 73,118, 11,140,120,245,234,142,154, 13,214, 80,196, 16, 8,216, 37,105,221, 25,
-248,189,225,131,135, 91,133,229,164, 16,209, 95, 46, 68,243, 75, 9,193, 59,196, 64, 92, 4, 74, 83, 35, 1,248, 60, 79, 20,110,
-179, 44,104,218, 14,139,163, 12,249, 97, 24,224,188, 67, 63,246,148,156,201,103,216,249,124, 38, 24, 82,125,229,139, 72,214,132,
-121,239, 11,222, 56, 91, 50,115, 16,207,115, 20,236,139,205,204, 90, 48,247, 7,235,211,159,227, 50, 69, 30, 27, 40, 34,198, 61,
- 51,207,139,152, 86, 62,247,184,202,165, 78, 55, 70, 38, 41,105,199,171, 21, 80, 25, 5,171, 5,172, 18, 80,124,186,186,144, 48,
-206, 11, 92, 76, 55, 42,234,151,173, 77,177, 4, 70, 60, 23, 35,221, 84, 72,129,177,173,252,181,248, 64, 21,102, 90, 81,175,214,
-234,104, 98, 61, 83,199,218, 84, 22, 86, 17,182, 53, 39, 39,229,136, 74,107, 76,249, 57, 91, 46,140, 81,168,140, 38,102,180, 36,
-239,107, 74,145, 66, 86,172,230, 67,137, 46,253,156, 72, 84,213, 22, 77, 93,243,229, 94, 17,237,205, 90, 8,109,144,180,132, 48,
- 26,227,227, 9,255,240, 15,255, 13,147, 11, 76,220, 3,239,180, 86,187,223,130,166, 77,136, 81, 60,211, 75,228,113,118,190,192,
-229,234, 7,239,214, 5, 0, 45,160, 43, 2,116, 96,197, 51,191,237,178, 25,188,243,251,124, 96,207,109, 94,235,190, 88,188, 92,
-149,102,119,195,151,186,245,244,162, 7, 77, 60, 79, 94,189, 10,236,110,126,185, 10,153,121, 86, 49,188,196,114,255,146, 69,237,
-165, 55,222,139,140,119, 94, 63,209,132, 68, 94, 47,179,152,240,106,183,199, 31,125,243, 51, 52, 85,141,221,118,139,167,167, 39,
-116,219, 13,193,119,141,193,238,110,143,203, 48, 98,241, 30,151,126,192,231,167, 39,204,110,225,206, 41, 98,113, 11, 94,189,126,
- 13, 0,184,191,191, 47,251,218,188, 54,218,108,182, 8, 49,226,215,191,254, 53, 90, 30,225,231, 3, 85, 8,137,221,110,143, 63,
-253,211, 63,195, 60,207,152,166, 9,191,249,151,223, 20, 27,155,146,138,208,150,138, 46,242,101,156,145, 66,194,216, 83, 78,183,
-228,124,243,124,153,143,243, 84, 32, 49,229,107,228,201, 4, 9,197,200,105, 18, 87, 76, 5,185,122, 61,180,210,229,215,116,105,
-134,242, 30,145, 82,194, 26,139, 24, 34, 91, 63, 21, 23, 11,161, 4, 22, 81,218,214,213, 78, 71, 0,145, 0,169, 4,154,182,134,
-119, 11,218,166, 70,219,214,216,109, 59,156, 78, 7,104, 77, 7,111,142, 78,245,206, 83,241,174, 53, 66, 34,184,142,247,129,222,
- 99, 33,209, 72,150,217,243, 90, 43, 36, 36,180, 29,169,246, 19,104,125,145, 5,130, 57,188,134, 10, 28,189,122, 93, 4,123,219,
- 45, 43,170,169,147,172,106, 18,147, 37,134,113,101,210, 26, 37,148,229, 41, 70,228,179, 71, 64,177,253,202, 88,242, 71, 91,107,
- 81,215, 21, 9,200, 56, 27,254,227,199, 79, 80, 70, 99,154, 39,154, 64, 74,250, 58,165,144,216,239,182,204, 46, 39,145, 89, 94,
- 71,228,156,139,156, 72, 23, 19,104, 92, 47,201,254, 22, 60,173,205,148,214,164, 54, 79,188,131, 38,100, 26,234, 28,207, 27, 81,
- 72,105, 82, 10,180, 77, 3, 1,186,248, 73, 59,161,203, 37,151,131,109, 28,127,110,118,197,249, 23, 72,197, 70,183,221,110, 96,
- 43, 67, 72, 92, 41,208,118,204,198,247,129,119,217,180,203,151,146, 69,114,172,217,210,122, 5,147, 17,178,104, 43,144,128,224,
- 61,148, 84,232,218, 22, 93,211,192, 40, 13,239, 28,250, 97, 40,182,206,186,174, 73,175,160,200, 74, 71, 30,125,106, 48,172, 49,
-120,117,119, 15,196,136,121,162,212,187,202, 90,158,188,210,157, 64,227,248, 21, 12, 43, 95,212, 49,222, 64,145,114,209,155,201,
-125,121,175, 94, 62,247, 31,171,218,253, 65, 64, 77, 25,101, 70,218,223,176, 5, 41,143,101,214,244, 27, 33,196, 53, 79,252, 5,
- 14,119, 70,171,230, 8, 63, 33, 35,148, 76,208, 90,208,154, 87, 94, 59,180,197, 71,244,147, 67, 18, 57, 21,236,165,139,253, 26,
-197,185, 86, 80,223,136, 14,120,103,151,177,179,185, 74,150, 82,192,199, 0, 81, 4,106,162,140,161,229,179,100, 54,202,150,182,
-133, 82, 68,170, 94,170,238, 26,238,202,155,170, 66, 93, 85,229,162,207,163,248, 28,215,151, 56,129, 75, 51, 14,208, 90,186,192,
- 43,107, 56,142,145,247, 80, 90,209,254, 80, 73, 70,226, 42, 36,169, 0,109,128, 40,240,171,127,252, 5,254,241, 31,127, 73, 33,
- 20, 66, 20,208, 71, 74, 98, 53, 98,164, 61,219,149,228, 38,138, 18, 30, 18,136,249,130, 38, 36, 96, 65,103,102, 6, 65, 82, 2,
- 66, 11, 8, 35, 57,243,253,217, 85, 30,227,109, 55,205, 59,233,252, 44, 32,221,134,149,172,145,178, 98, 5, 96, 33, 22,130,248,
-222, 24,191,252,187,184, 85,217, 10,188, 36, 88,139, 87, 75, 27,110,199, 88,249,243, 76,156,176, 22,112,181,184,125,121,109, 32,
- 94, 36, 58,253, 84,159,250, 77,113,153, 13,127, 49, 21,177,156, 18, 18,127,252,179,159,163,174, 42, 12,125, 79, 29,186,214,152,
-150, 5, 62,134,162,245, 88,156,135,177, 21, 92,136, 24,198, 17, 1, 2,111,222,188, 37, 13, 69,136,232,251, 30, 41, 37,124,251,
-237,183,184,191,191,199,253,253, 43,180,109,135, 87,175, 95,227,213,171, 87, 16, 66, 97,127,247,138, 64, 38,227,136,115, 79,184,
- 80,107, 13,182,219, 14,199,227, 1,159, 62,125,194, 48, 12,216,237,119,216,110,183, 28, 65, 90, 97,191,219,225,110,183,167,116,
-172,105,194, 50, 78,216,111,119,204,218,150,208,182, 34,101,177,160,200,208,190,239,203,133, 10, 16,206, 52,198, 4,231, 2,241,
- 34, 86, 44,138,236, 87, 15, 49, 32,122, 18,197, 26, 77,239,159, 24, 61,180, 81,220,189,115,172,104, 76, 55,168, 89, 89,242, 34,
- 88,176,199,157,124,140, 17, 93,219, 66, 41,197,130, 88,122, 2,170,138,138,103,218, 73, 19,177,172,109, 27,216,202,112,135,234,
-161,185,128,168,172,197, 60, 47, 52,178,158, 23, 52, 77,139,166,109,203,179,147, 85,208,249, 44,104,154, 26,227, 48, 32,248,128,
-134,197,107, 57, 82,149, 8,110, 53,191, 30, 75,185,128,215, 66, 40,231, 73,244,150,187,215,251,251, 61,134, 97,162, 75,135,157,
- 57,217, 89,144,199,216, 25, 22,228,157, 67, 93, 25, 44,243,136,186, 34, 18, 97, 68,128, 84, 64, 18,244,218, 88, 91,193,185,229,
-166,177, 89,102, 7,231,169, 3,237, 54, 29, 42, 78,165, 27,199,145, 20,227,206,113, 10, 26,169,233,181,210, 8, 62,176, 80,174,
-194, 48,142,148,135,161, 20,154,170, 46, 17,220,148, 68,201,170,247,202,150, 41, 11,100,130, 46,130, 65, 89,114, 26,188,119, 5,
-115, 77,171, 10, 94,147, 38,194,205,230, 66,206,123, 15,201, 25,237,198,144, 40,206, 57,143,205,102,139,101, 89, 48,241,154,104,
- 94, 22, 14,145, 2, 7,232,208,107,218, 52, 13, 93,176,146,186,104,153,128,202, 24,212,182,194, 52,142,156, 18, 39,208,212, 84,
- 96,135, 16,112, 62,159, 41, 75,129,133,132,158,223,143,243,180,192, 45, 30,175, 94,191,134, 49,182, 92,242, 49, 6, 92, 46,180,
- 2,202,119,200,151, 80,209,241,217,133,190,134,209,228, 98,121,125, 6,133, 16,254, 0,157,122,194,179,228, 45, 20,172, 35, 98,
- 66,101, 44,148,212, 4,114,137,162,192, 62, 4,110,111,128,178,199,226,174, 78, 32, 66,138, 4,173, 18, 89,184, 20,239,224,101,
-130, 18,164,156,142, 41, 97,152, 23, 92,198,153,112,174,233,251,187,135,132,240,204, 42,148, 85,244,215,233, 66, 66,174,134,242,
-248,147,246, 38, 36,162,241, 5,100, 33, 57,161, 14, 9,101,231,153, 99, 85,181,214, 37,182,209, 90, 93,170,174,156, 17,108,173,
- 41, 35,118,205, 59,243,188,159,206,196,189,140,208,181,133,137, 79,191, 55, 87,113,154,255, 27,141,244,137,207, 30, 37,200, 94,
-150, 0, 88, 13, 81, 85, 24, 30, 14,248,219,255,235, 63,225,243,231, 51,184,144,189,122,242, 89,121, 14,166,117,229, 34,230,102,
- 71, 44,104,108, 40,175,196, 93,118, 14,100, 81,153,188,170,224, 37, 8,165,201,111, 64,113, 67, 27, 20, 63, 26,204,242,147,162,
- 7,158, 93,136,184, 73,246,186,245,164, 63, 47,240, 18, 91,208, 72,171,129, 2,120,184,126,237,180,102,200,241,169, 47,108,219,
- 11,199,255, 15,253,143,128,128,224, 11, 61,250, 0, 17,129,215,251, 59,252,241, 55, 63, 35, 84, 40,143, 8, 61,139,202,146,144,
-216,238,118, 8, 49, 96,154, 7,120,239,240,120,120,194,219,247, 31,224,189,199,249,114,193, 48,244,104,218, 22, 77,219,224,237,
-219,183,120,243,230, 13,154,166,197,249,124,193, 52,207, 24,167, 9,255,252,235, 95, 98,152,136,166,182,217,108, 96, 12, 61, 95,
- 31, 62,188,199,219,183,111, 17, 35, 21, 5,116,176,202,114,217,196, 16,248,191,123,156, 78, 39,204, 51,217,128,148, 16,168, 88,
- 27, 34,181, 42, 99,242, 80,252,217,190,236,206,151,101,161,144,146,197,115, 60,112, 34,197,183, 20,204, 4,143,101, 68,155, 47,
-173,121,154, 48, 14, 3,140,214,168, 45,117,127,209,211,231,131,148,232, 64,102, 45, 75,224, 68,176,252,188,208,193, 93, 51,100,
-133,246,177, 34, 81,228, 42, 82,132,209,170,100,153,167,148,208,118,100,187,171,109,133,190,239,241,246,205, 43,108,183,155,194,
-139,191, 12, 3,139, 97,137, 72, 70,251,104, 42,202,231,121, 44,171, 55, 18, 98, 69,158, 48,144,127, 59,119,142,199,227, 17, 21,
- 71,139,210,197,158,185, 30,130,129, 53,148, 16,153, 11, 8,107,171,114,121, 75, 33, 48,207, 11,195, 93, 38, 0, 18,166,100,158,
-207,240,222,163,173,169,251,205, 77, 82,140, 1,202,208,106, 47,231,151, 15, 67,143, 77,219,150,157,111, 63,140,232,251, 17, 33,
- 81,184,212,239,126,247, 29,101, 86,132,136,215,175, 95, 23,216,206,178, 44,232,199, 17,144, 10,138, 59,103, 37, 37,154,154, 96,
- 65,195, 56, 98, 24, 71, 76, 19,209,227,242, 5, 70,248,106,135,121,113,152,231,165,228,137,123,231,233,252,179, 6, 51,255, 25,
-130,194,120,246,131,219, 50,201,201,217,230,119,187, 61,106,107,225,157,131, 86, 2,193, 47,180,174, 52, 21,220, 18, 48,143, 51,
- 41,237,235,166,172, 43,168, 40,140, 5, 64,181, 38,181, 69,166, 74,206,243,140,161,239,225, 23, 71,223, 83,173,121, 55, 78,255,
- 47, 1,184,191,191,131, 16, 2,231,211,165, 76,114,242,156, 89, 8,133,105,154, 57,203,196, 80, 99,164, 36,148, 49,144, 90, 98,
-241, 30,211, 60, 99,113,142,116, 90,223, 19,255,178,165,152,239,135,245, 61,246,252, 50, 95, 23, 5,127,152,241, 59,207, 51,139,
- 24,158, 15, 38, 36,192,154,138, 46,244,180,254,144, 87, 53,114,182, 21,199,213,222, 91,148,203, 18,229,135,214, 76,156,227,241,
- 73, 66, 66,136, 17,227,226, 48, 45,129,232,100, 66,188, 40, 34, 88, 99, 67,145, 40,206, 46,183,114,107,111,114,102, 36,167, 20,
-105, 15, 21, 35,188, 95,174,251, 83, 65,189, 20,173,219, 73, 65,174, 20,121, 33,141, 38,209,136,201, 57,208,207,147,115,248, 27,
-179,222,149, 37,238, 72,213,234,194,110,170, 10, 77, 85,195,106, 82, 16, 91,107,217,210, 32, 57, 87,154, 88,248,165,227,227, 78,
- 29, 41, 65, 86, 21,194,236,240, 95,254,239,191,199,223,254,221,127,198,236,249,154, 37,198,226,205,208, 59,219,253, 2, 66,177,
- 44,145,197, 45, 94, 87, 36,217,230,120, 35,154,227, 61,123, 1,210, 72, 8,173,202,107,114, 27, 95, 38,126, 18,113,237,167, 92,
-234,235,239,115,202, 23,226,247,236,108, 18,207, 36,237, 55, 26,139, 23,151, 1, 2,191, 7, 34, 19,241, 63,226,159,117,118,123,
-182, 86, 27,161,160,133,192,159,253,201,159, 66, 73,133,101,154, 75,126,121,221, 54,152,157,195,183, 31, 63,178, 10,253, 17, 93,
-215,225,116,185,160,110, 26,124,250,252,128,158, 1, 32,247,247,119,104,183, 45,126,247,241, 35, 54,187, 45,102,183,224,243,211,
- 35, 22,239,224,130, 67,146, 18, 66, 41,116,155, 13,154,166,193, 56,246,101,122, 20, 99,196,195,195, 3,126,243,155,127,129,181,
- 26,155, 77,135,182, 37,208,208,120, 57, 99,211, 54, 20, 52, 82,219,114, 97,108,186, 14, 77, 91, 99,113,174, 28,142,224, 75, 53,
-240,136,186,105, 90, 56,231,145, 4, 93,214, 82, 42,184, 16,209,117, 91, 30, 51, 19,105,146,200, 98, 10,151,115,207, 23,179,224,
-110,208,176, 10, 94, 20, 53,240,181,120, 85,180,167,103,138,152,181,213,149,180,197,145,160,217, 43, 31, 60,217,158,148,186,190,
-127,173,181,140,254, 36, 32, 75,165,201,221, 50,207,115,209,195, 0, 17,243, 50, 18, 85,140, 87, 15, 70, 81,172,179, 95, 34, 54,
- 45,197,146, 78,172, 93,104,154, 6,227, 48,209,234,128,147,234, 46,253,128,105,162,142,124,191,223, 83, 44,106,226,224,151, 16,
- 49, 12, 67,233,242,105,223, 79, 34,175,105, 26, 81,215, 21, 46,151, 30, 41,145,213, 44,231, 72, 44, 46, 64, 72,141,113,156,176,
-223,223, 33,132,136,113,156,217,127,191,131,214, 26,155,205, 22,211, 52,194, 24,137,221,126, 3,169,128,170, 54, 16,130,186,238,
- 92,180, 85, 21,101,187, 95,250, 1, 85,211, 1, 74,225, 50,244,184,244, 23,108,186, 14,117, 93,243,250,129,186,246,105,154, 88,
- 23, 5, 10, 29, 50, 6, 67, 63,148,231,219,167,136, 37,120,104, 99, 80, 91, 91,248,240, 84,216,232,146,148,214,214,213, 53,125,
- 47,198, 82, 72,102, 95,251, 60,207, 44,180,244, 37, 76, 37, 49, 53,206,114, 3,148, 93, 74,134,201,128,203,226, 40,139, 32,128,
- 59,120,130, 16,181,220,149,135, 24,202, 30, 63,165, 84, 66,116, 98, 74,152,189,195,101, 28, 32,164, 68,219,117,128, 16,232,167,
- 17,144, 18, 62, 82,195,120,255,106,143,186,161,105,116, 93,215,168, 42,242,167,159, 47, 3,134, 97,196,111,127,251, 59,124,251,
-237, 39,134,228,204, 88,230, 5,222,199,226,176,137, 49,221,160,161,159,115,221,215,231,221,243,117,241,173, 8, 60,253,148, 75,
- 61,221, 30,122,207, 89,114,207, 46,210, 4, 18,188,208,232,221,112,142, 46,131, 88, 5,253, 16,185, 27, 90,155,156,210, 85,120,
-164,181,228, 24, 83,138, 50,205,254,108,178,210, 19, 96,212,199,132,211,101, 96,143, 43, 94,228,224, 94, 71, 24,225,122,175, 39,
- 42, 8,202,133, 30, 83,177, 42, 36, 14,107, 73, 41,194,249, 5, 46, 44, 8,209,149, 49,117,174,182,115,247,107,120, 63,110, 43,
-205, 85,175,184,218,159, 20, 93,134, 89, 44,183, 22,195,105, 30,183, 87,121,223, 94,118,237,164,130,175, 56,170,182, 48,218,179,
-244, 75,169,171, 58, 94, 73,206, 24, 79, 80,166,130,144, 10,255,244, 15,255, 21,255,225,111,254, 3, 62, 63,158,224, 67, 30, 93,
-223,234, 10,114,183,126,251,160,196,103, 78, 49,238,196, 21, 11, 26, 86,147,133, 27,130,218, 51, 5,121,222, 5,137,127,243,101,
- 46, 94,228,197,125,233,153, 19, 55,123,119,241,162,240,174,144,243,152, 56, 40,211, 85,248, 86, 46,213, 31,194,193,254,193,187,
-243, 23,226,147, 18, 21, 98, 31,222,190,199,215,239, 63, 96,102,219,208, 60,207,168,155, 26,135,195, 1,159, 30, 62, 65, 72,137,
-227,249,140,118,179,193, 48,140,197, 82,153,132,192,235,183,111,176,217,108, 48, 78, 19,158,142, 71,188,253,240, 14,199,203, 25,
-223,126,250, 4, 83,215,216,221,223,193, 50,193,108,127,127,135,186,109, 32, 52, 93, 44,155,205, 6, 95,127,253, 53, 41,200, 35,
-141,155,115,146,214,249,124,198,175,126,245, 43,178,158, 1, 16, 49,225,240,249, 17,143, 15,159, 75,180,170, 82, 10,110, 33,223,
-245,200,140,113, 82, 24,211, 25,160, 88, 92, 55, 12, 35,237,131, 37, 93,196,243,188,148, 93,116,166,145,205,243, 76, 0,143, 0,
- 26,207, 75,205, 99, 97, 95, 28, 42,249, 89, 8, 62, 18, 84, 70, 91,200, 36, 41, 83,155,187,177,124,137,208, 8,158,248,246, 11,
- 7, 56,101, 68,178,229,244,171,140, 23,181,188,151,167,189,246,130,166, 38, 0, 11,141,168, 51,197, 11,215,207,217,147, 32, 77,
-242, 68,140, 98, 96, 47,120,245,234, 85,249, 60,180,162,215, 82,107,141, 77,215,224,116, 58,161,170, 42,156, 78,103,246,125,171,
-155, 51, 99, 89, 28,124, 72,120,120,120, 68, 93,213,104,219,134, 41,122,115,153,188,117,155, 13, 62,127,126, 98,161,161,196, 60,
-123, 44, 46,176,173, 42,225,116,186, 96, 89, 72,120,230,253,130,166,161, 63, 31, 66, 64,215,117, 68,249, 83, 2,221,166, 45, 34,
-184,148,136,112, 87,215, 53, 46,151, 30,117,211,224,112, 56, 34,248,128,199,167, 39,188,125,247,142,178, 51,164,198,166,221,226,
-116,188,160,239, 39, 84,198, 66,128,206,197,105,154, 8, 28,195,160,157,121,158,203, 52, 44, 99,173,179,226, 61,143,148,149,162,
-112, 42, 41, 36, 23,110, 28,141,203,194,177, 28,198,227, 98, 96,110,124,197,177,174, 26,167,211,105,149, 7, 33,216,137,160,177,
-219,109,153,254,166, 40,152, 70,106,198,210, 70,248,197,145, 14,131,239, 3,210, 25, 4,216,186,162,228,190,166,129,144, 18,143,
-199, 3,206,253, 5,117, 71, 74,248,203, 56,208,186,150,201,129,148,128,103,209, 52, 45,172,169,176,219,238, 80,217, 10,211,188,
-224,124,190,176, 38,193, 97, 28,167,178,130, 12,252,241,110,117, 90,120,177, 11,207,107,152,231, 22,182, 92,220,196,149,163, 75,
- 70,241, 12,156,181, 82,249,170,148,169,141, 9, 81, 8, 68,153, 16, 50,171, 38, 1, 34, 31,130,217,200, 36,174,248, 87, 4, 10,
-106, 49,138, 70, 68, 34,195, 34, 82, 40,227, 75,210, 39, 11,136, 40, 24,129, 34,120,124, 7,168, 20, 97,101, 68,165, 19,197,120,
-203, 4, 37, 19, 68,242,144,140,142, 93,124, 66, 63, 56,120,159, 10,161, 46, 36,226, 71,251,228, 17, 57,161,139, 72,115, 4, 70,
-185, 25,171,174,246,109, 41,120,202,249, 77, 30,136, 14, 18, 1, 33, 82,151, 78, 2, 23,162,107,105,109, 33,160,175, 30,117, 91,
- 81, 52,172, 18,136, 8,215, 44,119, 33,138, 95,155, 46, 28, 82,209, 39, 8, 68, 65, 95, 99,165, 13,239,107, 44,154,170,134,209,
-228, 19,213, 90, 67, 25, 66,208, 74, 45,145,164,128, 80,154,169,110,140, 72,148, 18,145,127,208,165, 11,124,251, 79,191,194,223,
-252,239,127,131,255,239,191,254, 10,206,107, 72, 65,212,163, 43,197, 69, 20,194, 87, 76, 52,121,136, 32,117,103,128, 71,132, 71,
- 72,129, 69,189,226,170, 86, 84, 9, 73,103,238,123, 30,207, 7,234,254, 35,217,159,124, 10, 72,130, 2,101, 75,215,158, 86, 29,
-174,224,152,213, 68, 23, 65, 74, 9, 73, 10,242,105,231, 66,128, 89,253,215,184, 84,172,118,219,248, 94,184, 65, 17, 90, 9, 81,
- 2, 93,168,219,141, 16, 34, 64, 72,207, 15,182, 4, 18, 23, 72, 34, 33,202,132, 40,185,239,142, 20, 1,160, 34, 89, 11,233,113,
- 95,237,246, 25, 85,172,144,160, 94, 76, 63,255, 55,232, 80,178,125, 99, 21, 68,163, 32,160, 98, 66,171, 43,252, 47,127,253,239,
-208, 24, 11,132,132, 97, 28,240,120, 58, 96,156, 71,124,122,248, 22, 70, 43,244,227, 8, 99, 27,116,205,150,242,200,173,101,244,
-107,131,186,109, 16, 19,112,120, 60, 96,215,237,240,246,205, 59,156,207, 61,190,254,234, 27,116, 13,165,106,105,169,208,213, 53,
- 54,117,139,233, 50, 33, 44, 1,117,213, 96,211,118, 24,134, 11, 30, 15,143,232,167, 30,170, 82, 56,143, 23,244,211,128,207, 79,
-143,184,123,253, 26,119,175,223,192, 54, 45,160, 52,102,231,209,108, 54, 88, 98, 64, 20, 64,223,143,144, 9,120,179,191, 71,171,
- 45,144, 0, 31,232,253, 87, 91,141,176,204, 80, 66, 98,236, 71, 30,145,123, 32, 6, 44,115,102,207, 43,120,198,213,198, 24,209,
-182, 29,231,110, 3,243,226, 17, 24,100, 83, 25,131,200,236,120, 31, 2,117,142,206,195, 59, 79,193, 71,138,188,236,214, 90, 24,
-173,232,217, 74,192,253,126, 95, 20,204, 70, 19, 89,206,154,204,209, 72, 72,240, 48, 86,243, 65, 9, 84, 70, 66,201,136,202,200,
- 98,165,205, 2, 46, 82, 63,123,204,139,227, 12, 11,192,242, 78, 88,155, 10,139, 15,148,187,109, 20, 42,173,208, 54, 53,180,182,
-152,134, 25,136, 64,215, 52,136,136,112, 33, 0, 66,163,178, 21, 18,127,221,206, 69,120,167,177,120,141, 99, 63,193,115,234,220,
-241,120,162, 34,104, 9,128, 82, 24,166, 11, 82, 92, 16,252,130,170,182, 80, 58,225,241,233, 1, 77,215, 66, 41, 1,239, 23,140,
-243, 0, 31, 29,217,179, 18,104,220,239, 34,206,167, 11,140,174,225, 93,194,120, 25,177,219,110, 97,173,134,210, 9,202, 10,232,
-138,128, 58,116,246,105, 40, 69,156,252,121, 30,177,223,111,161, 68, 66, 83, 25, 52,117, 13, 31, 60, 38,239,208,110, 55,152, 70,
-135,228,129,105,152,161, 57,220, 38, 38,202, 25, 23,146, 76, 58,214, 8, 84, 21,233, 33,206, 67, 79,157,110, 85,177, 6,151, 89,
- 4,172,105,242, 49,209,101,108, 12, 11,168, 85,233,254,125,138,144, 70, 67, 87,150,210, 4,235,150,158,163,228, 33, 84,194,226,
- 39,212,109, 5,201,178,171,203,212,163, 95, 38, 44,110, 97,187, 50,145, 2, 29, 91,237, 4,103,171,251,224, 89,252,167, 97,148,
-133, 95, 2,230, 97,129,134, 65,152, 34,220,228,233,162,238, 73, 95,224,157,131,155, 39,156, 79, 7, 72, 68,108,218, 10, 93, 91,
-115,134, 72,164,181,172,145,204,227,144, 76, 76,197,247, 92, 61,235,253,121,161,200,241, 68, 52,111, 20,215,116,185, 53,193, 16,
-140,203,250,193, 78, 34,119,232, 81,136,223,219,120, 93,119,156,116,200,210,110,216,148, 3, 57,138, 21,215, 93,174, 88,227,226,
- 42,130,186,170, 92,217, 34,166, 36,180, 22,156,243,125,221,123,146, 85,199,225,233,120,102,232,140, 40, 80, 58,113,211,169,135,
-162,108,206, 47,194,245,255,209,254, 60,139,246,168,138,207, 99,247, 0, 36,129,224, 19,144, 36,121,110,121, 61,160, 20, 80, 85,
- 36,126,203, 42,219, 44, 82,112,206,193, 5, 18,222,249, 72, 56,217,197, 69, 44,206, 23, 97,147,128, 40, 23, 90, 82,146,216,234,
- 90, 33, 73, 1,105, 12,176,170,212, 37, 87,114, 16,128,145, 10,136,177,236,173, 52, 43, 75, 19, 36,190,253,197,239,240,239,255,
-183,191,193,223,253,237,127,193,228, 21,146,182,116,121, 33,222, 8,198, 74, 32, 3,114,122, 92, 42,107,135,152,109,127,121,148,
-157,147,218,212,213,191,126,149,206, 11,144, 23, 46, 2, 33, 82,130, 85,202, 80,151,151,144,197,233,167, 58,217,190,220,206,222,
-136, 69,190, 36,244, 72,207,246,223,226, 75, 91,163,239,205, 3,190,112,253,254, 15, 25,187, 23,154, 97, 18, 20, 27, 28,233,231,
- 63,250,230,143,240,230,254, 53,230,113, 98,111, 44, 65, 77,126,249,235, 95,193, 86, 67, 42, 5,208, 0, 0, 32, 0, 73, 68, 65,
- 84, 21,132, 36,154, 33,164,196,231,195, 1,237,102, 3,239, 35,218,174,131, 53,196,228, 62,159,122,236,247,247, 0, 4,198, 97,
-196,119,223,125,135,221,126,135,205,102, 75,254, 93, 99,208, 53, 45,144, 18,166,121,160, 72, 76, 79,123,242,105,154, 96,181, 41,
-120,231, 97, 24, 9, 25,107, 45,118, 59, 82,224,207, 51, 99, 87,121, 61, 52,142, 3, 46,151, 11, 37,122, 85,134,121,235,196,122,
-160, 98,148, 56,232,198, 84, 36, 26, 2,237,212, 19, 18,166,105,224, 20, 71,218, 53,135, 64, 52, 56,205,121,235,203,226, 49,114,
- 32, 71, 74,137, 24,235,220, 93, 57,142,202, 76, 41, 64,241,132,143,192, 55,215,224,168,124, 88,110,183, 29,180, 98,150, 60, 79,
-203,242, 58,204, 23,235, 20,237,227, 41, 46,149,222,215,214, 24, 22,237,138,226,109, 15,156,103,158, 65, 33,222,123,108,183,155,
-219,245, 95, 78,168,100,117,119,126,110,115,172,232, 48, 12, 8, 46,192,106, 3,183, 44,164,140,182, 6,202, 24, 26,169,123,143,
-143,159, 62,211, 68, 67, 73,194,215, 26,130,247, 76, 51, 37,175, 73,173,201,110, 42, 5,166,113,134,146, 20,117, 26,188,199,110,
-183,131,228,175,125,230, 8,210,121,158,208,117, 45,141,166,103,178,176, 85,117,141, 97, 24,233,251, 39, 81,148,243, 74, 0,155,
-174, 35, 22,194,102,135,254, 66,161, 44,100,233, 3,180,164,238, 89,107, 89, 38,173, 49, 37, 24,166,231,121,231,139, 16, 85, 43,
-197,140, 3, 22, 42,118,180,235, 55,214, 34,197,136,243,229, 2, 33, 37, 44,235, 26,138,170,155, 99, 90, 83,162, 9, 75,182,149,
- 45,203, 82,166, 58,121,189, 73,185, 4,137,241,190, 96, 76,110, 96,194,105, 36,123,176, 33,189,196, 50, 47, 24,199, 17,222,135,
-226, 29,167,176, 24,154, 50, 16,204,198,151,239, 89, 8,161,136, 24,145, 18,166, 97,130,247, 36,122,187, 92, 46, 8,254,250,121,
-140,211, 8,169, 72, 91, 98,141, 45, 22,233, 12,152,202, 69,124, 6,206,188,116,177,175, 99, 93,149,224,188, 2, 38, 76,222, 58,
-128,114,147,150,161,109,207, 7,156,226,167, 31, 77,235,106, 99,253,243,250, 13,243,195,170,224, 91, 37, 61, 61, 84, 60,130, 23,
-138,109, 6,215, 55,139,143,192,121, 24,209, 79, 11, 34, 36, 4, 43, 35,139,150, 11,130, 38, 9, 41, 19,228,192, 85,118, 44, 63,
- 82, 10, 5,128, 65,217,203,148,142,157,147,125,178, 17, 91, 66, 35, 70,208, 42, 65, 11,216, 90,163,169, 13, 42,171, 75,176, 76,
- 76,100, 45,153, 22, 79, 2,139,105, 65, 63,204,232,199, 9,227, 60, 99, 90,150,146, 67,236, 67,132, 7, 48, 35, 96, 73, 30, 14,
- 17, 75,244,152,131, 47,163, 55,138,225,163,139, 84,177,178, 60,239,221,172,177,216,116, 91,116,109,139,224, 35,254,233,255,249,
-111,248,247,255,199,255,137,255,248, 31,255, 30,203,108,145,208,192, 65,192,203, 76,141,123,193, 35,189,254, 94,241, 78, 50,239,
- 37,203,131,144,247,161,236, 87, 23,101,125, 65,127, 32,133,196,244, 47,143, 16, 86,208, 23, 6,207,224, 70, 40, 39,126,218,180,
-253,247, 5, 10,137, 31,130,217,136, 31, 40, 38,196, 23,234,137,223,239,255,252, 67, 57, 69,110, 68,123, 66,150,234,130,245,152,
-216, 52, 45,254,226,207,255,188, 0,124,165, 86,232,199, 1,253, 48, 82,135,194,170,233,105, 30,241,240,244, 25,194, 90, 36,169,
- 80, 53, 13,217,107,166, 25, 90, 91, 40,166, 11,126,126,122,196, 47,126,241, 11,188,127,255,158,210,184, 30, 63,151,221, 97, 8,
-129, 20,237,187, 29, 94,221,223,161,109, 41, 32,101, 26,102,116, 93, 7,173, 52,218,186,229,221,177,198,155, 55,111, 75, 7,125,
- 62,159,113, 60, 62, 97,187,237,224,150, 5, 90, 74,218,185, 43, 58, 86, 62,125,250,200, 5,118,164,137,157, 50,112, 81,192, 39,
-208,197,165, 53,230,121,226,117, 13,197,180,134, 16, 17,124, 38,242, 17,197, 98, 89,232,235,149, 66, 51,114, 52, 93,199,182, 44,
- 62,106,186, 22, 82, 43, 40,163, 89, 23,114, 27, 79,153, 47, 0, 33, 5, 66,164, 78,188,156, 79,172,168,166, 88,211, 13, 21,187,
- 60, 18,166, 75,225, 42,202,210,138, 64, 41,214, 26, 46,140, 40,106, 85, 74, 58,192,137,101,238, 89, 24, 24, 80, 49,183, 34,143,
-152,179,152,110,154, 38, 12,227,136,126, 24,224, 29,217,165,148, 20,104,155,182,116,181,195, 56, 82, 62, 55, 8,160,146,133,102,
- 89, 27, 20,188, 99, 24,143, 69,211,109,176,184,192,176, 41,138,161, 30,135, 17, 74, 72,178,164, 9, 32,134,128,121,158,112,183,
-223, 34,120, 71, 64, 22, 73, 19, 11,231, 23, 52, 93,131,197, 17,208, 40, 37,242,118,247,125, 79,226, 92, 65,233,118,109,219, 17,
-235,129, 77, 51,185, 72,200,194,190,101,153,233,220, 74,169, 20, 87, 62,120, 30,171,107,246,144,207, 37,225,205, 90,139,224, 61,
-182,219, 45, 57, 3, 88,196,102,180,226, 51,156, 67,154,184,153,161,124,242, 26, 70,170, 66, 12,205, 14,130,138, 93, 69,125,223,
-195, 48,160, 40,132,192,193, 41,180, 94, 93,143,188, 37,195,126,168, 96, 0,206,231, 30, 33, 68, 28, 15, 39,104, 93,241, 90,150,
-190,111, 57,201,142,210,175, 73,143, 36,100,134, 5, 41,244,253,128,203,101,128,115, 17,134, 89, 17,211,188,240,189, 65,168,239,
-235,121,152, 74, 97,243,252, 28,123,110,183,198,202, 73,148,158, 69, 68,223,238,211,179, 0, 26,208, 41,165,231, 18,244, 31, 39,
-140, 43, 60,239,116,147, 99,157, 85,214, 66,210, 56, 80,200,219, 36,153, 40,210, 45, 26,180,140,134, 19,123, 84, 51,219, 36,225,
-170,211, 34, 15,183, 34,131, 22, 66, 76, 88, 66,196,225, 52, 98,114, 17, 81,152,107,231,243,236,142, 16, 0, 82,160,174, 91, 40,
-138, 26, 75, 69, 65, 40, 86,127, 42, 34, 70, 89, 38, 1,130,248,161, 48, 74, 33,196,128, 74,106,182,167, 41, 52,141, 65,221,214,
- 48,214, 20, 10,212, 60, 59, 76,227,194,187,170, 72,235, 10,182,207,208, 5, 77,133,200, 60,207,136,209, 67, 25, 5,176,198, 77,
- 43, 69, 35,170, 36, 75, 96,132,139, 1, 22,134,112,174, 41,193, 26, 13, 83, 87,208, 66,160,110,106, 36, 0, 31, 63,126,198, 47,
-126,245,107,252,167,191,255, 7,252,221,127,254,127, 49, 78, 9, 16, 21, 2, 18, 60,104,244, 44,217,105,112,179,131, 78,226,198,
-143, 77, 13, 55, 67, 79,210, 51,193,216,106,116,143,117, 78, 74, 14, 56, 23, 18,222, 5, 4,255, 18, 39, 64,148, 78, 55,221,110,
-245,191,215, 85, 63, 7, 1,253, 88, 5,252,143,101, 39,124,249, 47, 74,215,156,247,155,143, 47,190, 52,179,250,131,119,234,153,
- 62, 43, 25, 54,243, 87,127,249, 87,120,247,230, 29,146,243,240,129, 2, 82, 2,103, 31, 72, 41, 41,241,111,153,201, 78, 36,129,
- 57, 6,232,224, 81, 53, 45,164,247,120, 58,158, 48, 44, 51, 90, 78,190,170, 42,242,157,191,122,245, 10,199, 35,101,111,127,243,
-213,215, 56, 28, 14,165,147,253,240,254, 29,206,167, 19, 31, 92, 17, 85, 67, 65, 27,222, 5, 76,105,194,118,179, 69,221, 52,136,
- 49,225,241,241,145,194, 65,140, 65,215,209,110,122, 94,102,188,123,247, 22,138,187,179,211,249,132, 97, 28, 97,154, 14,154, 11,
- 67, 31, 34, 32, 13,134,121,193,253,253, 22,227,116, 66,219, 53, 68, 23, 19,146, 25,237,156,236,184, 58,208,134, 97, 96,125, 14,
- 81,206, 22, 63, 65, 1, 72, 90,195, 50,171, 33,242, 97, 41, 1,222,183, 11,196, 20, 72,127,147, 18,106, 91,209,112, 41,239, 30,
-133, 64,215,181,184, 92, 46, 64, 4, 57, 10,184,195,116,195, 66,170,241,182,225,169, 33,217,177,188,247,240,110, 1, 18,101, 64,
-248,144, 80, 85, 53,172,214,184,156, 78,184,219,239,160, 13,117,139, 21,235,103, 32, 18,166,121,164,169,163,161,110,221, 90,131,
-105, 14, 48,150, 58,248,121, 89, 10,243,190,170, 44, 46,135, 1,109,211,226,112,248, 12, 33, 64,133,146, 20, 28,162, 66, 23, 27,
-249,204, 19,148, 36,180,238,227, 52, 97,154,103,138,129,213, 26,195,229, 2, 41, 18,166,105,196,219,215,175,240,240,244,136, 97,
- 28,161,165, 68,183,223, 35,248, 19,148, 4,234,198, 34, 38, 15,200, 4, 23, 28,108,109, 17, 99,192, 48,142,184,219,111, 41,116,
-103,158, 97,180, 66,138, 1,203,180,144, 5,172,161,181,164,181, 26, 93,215, 22, 98,158,227,188, 0,176,189, 44,167,218, 53, 90,
- 67, 70, 73,160, 21,231,209, 54, 13,230,121, 65,101,107,248, 56,150,174,124,158, 38, 88,187,129,209, 26,209, 82, 1, 20,125, 40,
-196, 78,169, 8,251,154,197,139, 90, 73, 90,119,240, 74,198, 90,131,197,121, 44,243, 82,224, 95,212, 40,145, 40, 79,115,120,141,
- 16, 10, 81, 0, 73, 36, 44,110,225,156,115,176, 53,212, 96, 28, 39,214, 46, 25, 40, 41,177,217,236,112,185,156,139,237, 45,132,
- 64,217, 8,145, 18,248,186, 13, 77,115, 47,253,192,103, 44,221, 49,222, 5, 44,252, 58,144, 8,251,138, 84,255, 33,186,230,186,
- 33, 94,223,151, 47,137,193,179, 96, 56,165, 4,157, 63,129,223, 59, 82, 23,171,234, 32, 51,219, 83,188, 54,101,207,192, 27, 49,
- 70, 24,197,163,119,200, 27, 99,124, 90,141,199,111, 4, 79, 92, 32,136,148,253,185, 2, 90,230,125, 65,198,115,243,200, 92, 72,
-140,139,199,105,152, 49, 57,202, 55,142, 47,116,101,197,194,197, 42,246, 24, 37,164,178,132, 86, 21,130, 5,225, 98,117,192,114,
-215, 45, 19, 82, 80,144,194, 0,130, 60,225,109, 91,163,174, 13,186,109,141,186,109,174, 96,143,101,193, 50, 77,184,244, 61,250,
-203, 64, 7,153,169, 96,235, 26, 82,209,133, 15, 17,225,221,130,203,185,199,227,227, 35,148, 0,238,246, 27, 52, 77, 5, 32, 64,
- 41, 1,107, 27,212,117,131,228, 3,144, 2,108,101,200,198,226, 28,133,159,168, 10,151, 97,132, 76, 17,143,135, 39,156,143, 39,
- 60, 62, 29,240,187,135, 3,126,249,235,239, 48,204, 14, 1, 9, 72,196,186,150,130, 87, 7, 47,161, 4,139, 98, 80,176,231, 53,
-242, 24, 62, 19, 1, 25,173,154,194, 85, 57, 95, 46,121, 94,175, 72,197,119,189, 44, 15,236,181, 96,138, 69,160, 39,120,159, 84,
- 2,124, 50, 69, 54, 82,183, 69, 59,212,103, 36, 58, 33,111,208,174,185,240,204, 19,145,151,124,234,233,197,135,152,125,241,248,
- 2, 14,118,253, 53,241,106,226,185,126,244, 90, 17,139,103,140,154,244, 19, 10,140, 47, 21, 38, 40, 49,180, 34,210,133,244,205,
- 87, 31,240, 23,127,242,103,208,202,224,241,241,128, 16, 61,206,253,137,246,149, 51, 93,230, 74,107, 40,173, 40, 43, 92, 27,244,
-243, 8,239, 28, 94,223,191,193,211,225,128,152, 18,246,251, 59,204,206,193,197,136,251,205, 14,155, 77, 87, 60,217, 95,125,245,
- 21, 14,167, 35,230,113,194,215, 95,127, 13,107, 12,166,113,196,127,255,231, 95, 96,191, 35,196,235,221,221, 29,217,144, 78, 1,
- 41, 38,108,119, 59, 28,142, 71,108,183,219, 34, 34, 3, 18,190,251,248, 29, 0,178,126,229,212,171,105, 89,224, 98,128,177, 26,
- 66, 36,108,187, 22,167,126,130, 47, 88, 32, 89,118,224, 74, 83,193, 55,140, 19,150,217, 99,183,107,177, 44, 35,251,148,175,194,
- 40,218,173, 55, 24,134, 30,202, 82, 2,219, 52, 45, 80,218, 96,114, 30, 49, 17, 79,219, 71, 79,226, 62,101,216, 74,167, 74,225,
-125,253, 59,232,146,205,108, 5,109,136, 41, 30, 4,241,197, 51,234, 52, 7,109,180,117, 75, 96,157,101,193, 6,192,221,118,135,
-143, 15,159,224, 22, 2,141, 40, 9,204,211,136,205, 55, 95, 33,196,128,121,158,177, 44, 11,236, 42, 51, 93, 8, 20, 43,234,250,
-215,117,221, 20,214,187, 97, 37,246, 50, 59,104,229, 32,165,134,214, 9, 77,109,153,234,167,120, 21, 50, 65, 91, 42,168, 98,240,
- 84, 84,205,142, 2,104,184, 8, 52,172,228,159,166,137,212,234,214, 98, 24, 7, 38,164,121, 84,149,129, 15, 14,186, 34, 68,173,
-159, 2,198,105,194,110,183, 3, 0,140,125,143,121, 94, 72,127,177, 44,204,142,151,220,164, 92, 47,157,188,130,201, 72,219,106,
-211,178, 48,177, 94,165,169,145,192,114,179,221,160,170,106,156,143, 39, 68,203,205, 32,239,247,199,105, 68,219,182,152,230, 25,
- 93, 36,126, 64, 85, 9,122,221,103,130,181, 4,239,161,249, 92, 52, 70, 48,221,111, 66,219,212, 8,140,162,205, 81,175,203,226,
- 48,141,148, 65, 95,215,121,162, 74,231,142, 20, 2,218, 88, 4, 65,147, 15,183,120, 68, 73,235, 23,130,231, 4, 78,140,139,236,
- 61,167,152,220,152, 0,231, 3, 52, 39,212,229,243,108, 28,168, 0, 72,145,224, 67,203, 66, 86,194,156, 52, 26, 10,158,252,122,
- 78,228,201,207,247, 59,238,244, 61,215, 84, 78,216, 20,207,214,223,235,223,155,196,245,156,212, 63,220, 77, 92, 79, 98,241,133,
-166, 93,172, 84,229,249,178,200, 76,226,239,143, 49,129, 64, 3,243,103, 99,224, 4, 41,215,209,170,121, 2,204,168, 88,228, 49,
- 55,224,163,192,121, 90,240,120, 26, 16,160, 24,113,154,243,198,174, 61, 97,140,171, 41,112, 81,188, 39,164, 66,165,122, 54,210,
-205,246,152, 20,233,122, 18, 2, 74, 89,212,149, 70, 93,147,202,221,121,143,195,241,140,167,199, 39, 12,125,143,203,153, 84,171,
-211, 56, 97,154, 23, 72,169,177,191,187, 67,203, 20, 38, 33, 37, 34,143,118, 62,125,247, 17,167,227, 17,247,119,123, 88,165, 33,
- 3,121,193,147,150, 16, 30,240, 51,137,126,108,109,161,140,196,209, 26, 24,173, 72, 52,162, 20,132,136, 37,216, 69, 64,194, 71,
-133,195,197,227,183, 31, 31, 49, 46, 4,224, 17,201, 19,120, 55, 82,202, 87, 38,185,149,139,135, 95,158,192,253,115, 2,117, 41,
- 49, 37,122,248,214,223,220,144,138, 24, 46,197, 8, 81,210,206, 88, 76,198,247,174,243, 1, 33, 94,115,216,138, 24, 82,144,250,
-159, 30,230,156,192,247,108, 64, 35,226, 74,125, 47,190,172,233,248,177,172,226, 23,198, 88,171, 80,247,162, 39, 40, 95,169,100,
-118, 66, 38, 56, 9,249,189,207, 35, 71,136,190, 12, 70,198,247,222,136, 63,229,159, 24, 3, 52, 20, 84, 74,232,234, 22,255,235,
-191,251,159,113,183,223, 99, 25, 38, 76,227,136,113,185, 16,146,114,153,139,157, 39,132,128,205,102,131, 20, 19, 78,151, 51,148,
- 49,216,236, 91,156, 78, 39, 92, 46, 23,216,182, 70, 63,244, 8, 49,162,169,107,216,202,226,112,120, 66,215,181,104,219,134,157,
- 30, 30,218,106,132, 20,112, 60, 13,240,203, 76, 73, 82, 90, 99,179,219,225,120, 62,225,225,211, 3,172, 49,216,110,183,228,143,
-247, 14,143,143,143,204, 29,127,130, 15, 30,253, 64,169,112,247,247,247,136,142,152,242, 79,199, 3,132, 0,222,191,123,139,223,
-126,251,145,130, 53,120, 2, 55, 79,148, 55, 29,131, 69,136, 17, 94, 0,182,169, 33, 68,196,226, 3,134,113,130, 82,228,149,142,
-105, 34,165,246,236, 80,215, 36,100, 50, 21, 29,224,199,211, 9,187,205, 6, 9, 18,159, 63, 31,176,221,111, 81, 65, 34, 4,183,
-154,252,241,235,171, 52,130,136, 48, 82,115,115, 1,196,152, 47, 63,205, 7, 52,117,189,222, 57,182, 69,145,170, 88, 49, 95, 62,
-197, 8,173, 52,134,190,199,118,187,197,221,126,143,223,124,251, 17,206, 59, 64, 73,180,109,195,187,102, 95,242,212,243, 51, 65,
-205, 13,138,250,222,121,143,170,178,101, 71, 91, 91,138, 68,165,137,135,131,214, 6,227,200,222,104, 75, 89, 15, 20, 13, 74,123,
-245, 24, 35,134,161,199,235,215,175,113, 58,158, 32, 5,185,132,178, 94,166,109, 91, 76, 61,185, 11,218,166,194,226, 28, 18,211,
-231,172,173,112,185,156,177,221,110,177,221,108, 48,177,215,188,109,106,204,211,204, 73,136,130,115,202, 29, 22,199, 34, 66, 41,
-225,184,152, 91,150, 9,231,243, 25,219,109, 87,214, 19,132, 19,246,104, 27,178,240, 65, 8,230,238,147,109,119,156,105,124, 93,
-177,162,126, 89, 28,218,166,161,181,138, 97,148,175, 15,112,126,161,139,189,109, 48,142, 51, 77, 49, 91,154, 4, 44,129,166, 27,
- 77,219, 32, 56, 15,173, 36,147, 62,105,149, 52, 12, 35,229,117, 40,242,118, 71,166, 6, 54, 77,205, 23, 98, 68,240,129,232,133,
-222, 67, 10, 58,226, 20, 67,122, 0, 96,153,201,181,225,150,165, 12, 35,115,210,223,167,239, 62, 65, 41,137,237,102,135,166,173,
- 17, 34,112, 57,159, 1,154, 27,149,160, 30,234,129,228,141,134,233, 57, 60, 43,143,245, 95,212,164, 61,179,237,230,139,253, 86,
- 32, 44,174, 41,164,160,179, 88,112, 88,215, 15, 94,234,226,102, 37, 42, 94, 94,126,166,239,119, 44, 25,119,153,138,149, 40,219,
-203,168,179, 22,223, 27,165,230, 47, 64,144,152, 59,243, 77, 68, 86,224,115, 39,149,136, 34,119,238,103, 28, 47, 3, 2,232,210,
-132, 72, 16,130, 50,206,229, 74, 20,166,147,188, 2,103,104, 57, 65, 59,244,120,187,203, 23, 2, 8, 17, 69, 8, 19, 34, 89, 73,
-220, 2, 92,206, 14,126,233,241,244, 8, 56,191, 32,120, 7,239,151, 18, 31,152, 85,211, 49, 1,214,106,124,126, 58,226,225,233,
- 68,133,138,162, 0,142,105,114,152,135, 9, 82, 86,240, 1,120,248,252,132,222,144, 26,184,237,106, 84, 76,221,139, 49, 98, 26,
- 21, 18,184,242,228,177,227,221,126, 75, 89,207,117, 5,163, 13,130,143, 56, 31,123,124,252,120,192,185,119,164,205, 22,170,140,
-214,197, 13, 95,141,225, 49,105, 5,135,201,177,227,140,141,141,121, 13,147,167,236,249, 27,231, 3, 82,136,164, 88,143,145, 96,
- 8,145, 46,252,228, 3,132, 19,112,227,140,232,175,224,161,196, 68,193,117, 70,123,190,208,175,124,249,231, 69, 99,250,130,141,
-237,217,115,242,111,158,128,191,208,213,179, 0, 48,177,113, 48,189,192, 56,184, 29,121,137, 50,213,249, 82,184,194,143, 29,192,
- 43, 65,149,181,145, 10,127,253, 23,127,137,159,125,248,138, 38, 63,231, 51,139,183,124, 97, 67,103,116,171,155, 38,182,140, 25,
-124,120,251, 22, 82, 91, 24,165, 49,187,153,198,191,188, 23,221,237,118,232,218, 14, 33, 44, 72,137, 0, 50, 66, 8, 28, 14, 79,
-208, 90,227,221,187,119,116,121, 69,178,156,109,119, 59,196,148,240,116, 60, 64, 41,133,182,235,240,225,253,123,244,151, 11, 30,
- 62,125, 42, 84,175,166,233, 48, 12, 3, 32, 5,246,251, 59,238,110, 35, 62, 61, 60,160,105, 27,212, 77,131,174,107,208,247,103,
- 32, 56,204,227,128, 8,137,170,170, 17,162,134, 54, 21,134,126, 68, 76, 14,213,221, 22,211,228, 32,164,130, 18, 10,144, 36, 14,
-243,145,220, 55,227,236,208, 15, 19, 32, 36,238, 95,147,176,235,116,190,176, 24, 87,225,112,188,192,214, 45,170,170,197, 52,205,
-136,129, 46,150,105, 36, 37,119, 85, 17,102,213, 26,195,176,170,137, 73,102, 52,105, 75, 70, 97, 26,103, 52, 13, 89,175,130,247,
-136,193,163,107, 91, 58,179, 2,176,112,228,234,208, 79,176, 70, 96, 26, 71, 84,117,197, 93,183, 7, 18, 80,217, 22,145,237,162,
- 90, 43, 56, 79,112, 29,164, 84,172,170,217,235, 78, 29,233, 4,109, 12, 42, 83,151, 14,126, 24, 71, 84,182, 65,223,143,104,155,
- 14,243,178,224,245,155, 59,140,227, 64,227,226, 8, 44,203,204, 72, 93, 90, 5,236,182,244,250, 73,238,252,171,186,194,229,124,
-134,150,180, 3, 79, 41, 97,179,221, 64, 27,139,105,114,164, 14,175,168, 64,147, 66,194, 72,133,218, 90, 56, 31,176,233, 90,164,
- 72, 46,131,170,170,208,247, 23,180,117, 67, 62,240,156, 61, 97, 44,148, 18, 88,220, 66,177,187,150, 26,164,236, 91,207, 22,189,
-190,191, 92,189,229,110, 41, 19, 11, 29, 52,154,174,197,120,238,203,229,150,152,141,191,196,132,168, 53, 46,125,143,221,110, 91,
-108,179,153, 37,176,184, 25, 49, 37, 74,116,144,215, 75,114,156, 39, 52,204,153, 15,188,243,214,154, 10, 72,136, 88,194,107,134,
-254, 2,109, 42,206, 30, 80, 69, 40, 72,162, 60,135,187,253,190, 8, 17,221,226,176,184, 5, 66, 42, 4, 31,209,181, 27,108, 55,
- 59,156,207, 61,158,158, 78, 16, 74,195,249, 0,107,235,210,205,123, 23,160, 20,217, 42,165,210, 76,219,123,174, 1,190, 69,140,
-175, 3,158,214,133,224, 13,135, 35,165, 50,193, 44, 92, 45, 92, 69,201,249, 60, 74, 12,176,209, 63,106, 70,248,130,162,105,157,
-195,157, 86, 42,246,117, 40, 72, 25,123,138,116, 19,248,158,253,192,226, 38,215,156,179, 66, 4,195,255,139, 48, 14,183, 24,205,
- 4, 44,222,227,112,186, 96,246,137,243,209,193,217,220,162,200,224,178, 74, 54,164, 88,178,179,165,188, 34, 99,197,106,236, 42,
- 56,150, 16,137,197, 98,158, 84, 75, 62, 69,244,126,198, 60, 73,104, 38, 10, 9, 8, 64, 94,191,150, 24, 19,124,204, 93, 65,194,
-236,103, 86, 71, 82, 8,133,144,156,225, 30,129, 36, 52, 53,134, 81, 96, 90, 60, 82,162, 29,145, 13, 17,202, 57,104, 41, 41,131,
-218, 57,202,109, 23, 26, 65, 70,104, 8, 36, 23,145, 92,132,131,199,176,140, 88, 22,135,199, 99,143,195,231, 39,132, 57, 2,202,
- 0,146, 2, 62, 68, 2,146, 8, 44, 16, 20,101,124,115, 51,182, 89,125,227, 18,152, 77,195,204, 99,153, 31,158, 72, 93,186, 8,
- 17, 8, 1, 34, 23,151, 4,146, 7, 66, 64, 92,128, 48,249,155,209,122,174,138, 19,219,218, 18,178, 58, 83,254,168, 75,247,182,
-178,205, 75,254,244,163,246,237,162,164,243,229,103, 42,173, 42, 24,241,114,239, 47,202, 44,124, 21, 26,252,220,199,143,155,160,
- 17, 82,172,226, 95,221,161,103,241,139,224,159,223,190,253,128, 63,250,250,107, 12,231, 11,150,105,134, 53, 85, 25, 61,167, 20,
- 9,136,178, 44, 24,199, 9,155,110, 3,173, 37,234,170,194,249,124,198, 52, 46,192,187,247, 20, 4, 82, 91,156,143, 39,212, 29,
-165,127, 33, 6, 60,126,126, 36,145,167, 82, 24,134, 1,175, 94,189, 66, 8,228,243, 61, 28, 14,168,235, 26,253, 48,161,217,108,
- 49,140, 35,188,119, 4,154,233, 90, 28, 14, 7, 24,173,113, 56, 62, 97,179,219, 66, 73,133,113,236,169, 8,140, 9,222,147, 66,
-221,123,143,101, 38, 37,246,228, 39,156,250, 19, 68, 32,129,153, 72, 36,230,154, 83, 32,149,116,140, 84,148,158,123,236,183,148,
- 36, 54, 46, 35,137,205,234, 14, 33, 56, 76,147, 71, 74, 10, 49, 58,104, 67,133,240, 60,147,208,116,158, 22,236,119,119,152,102,
- 7,109, 45, 98,138, 60,190,159, 72,117,207,221,154,181,150,163, 70,105,207, 29, 19, 10, 96, 69, 73, 74,100, 28,199,249, 26, 15,
- 26,105,213,164, 36,141,200,173, 49,112,137, 70,173,121,159, 93,158,239, 24,209,117, 27,244,227,200,214,208, 88, 18,194,148,209,
-208, 33,192,185, 5,155,174, 33, 68,174,214,240,222,227,114,185,160,110, 27,138,115,101,129, 30,248,140, 84,156,230,149,189,199,
- 53, 83,217, 98, 76,104,219, 26,199,241, 66,172,130,186,194,188, 56, 98, 2, 72,195, 88, 92, 98,195,199, 64,182,172,168, 52,180,
- 37,174,189,115, 30,155,221, 14,198, 26,156, 47,103, 84,246,158, 40,121, 85,133,138,215,136,193, 5,116, 13,141,191,199,121,132,
- 49,166,124,252,217, 19, 27,127,215,109,112, 60, 28,177,217,110, 86,103, 58,157,123,231,203, 5,247,175, 94, 65, 36,102,234, 43,
-162,171, 93,211,214,136, 93, 32,149, 66,101,175, 0,152,188, 10,245,142,138, 86,114, 51, 80,183, 94,213, 21,166,113,130,150,154,
-206, 73, 73,123,244,166,105, 41, 82,117,113, 80, 70,195,104,195,235,142,170,248,192,149, 84,156, 70, 71,104, 87,205,148,187,217,
-185,114,239, 12,195,192,226,190, 80,132,126,251,253,158,119,231, 36, 94,156,231, 25,227,228, 33,132,198,253,253, 43, 76,147,199,
-188,204, 56,158, 46,232,186, 22, 62, 57,108,186, 13,124,240,152, 49, 23, 17, 92, 62, 27, 40,111, 67,222,136, 99,115, 26,161,148,
-226, 69,152,204,243, 64,163,245,250,145, 6,168,177, 52,203, 57,200, 77,176, 37, 24, 0,180, 76,183, 99,244,239,229, 99, 37,222,
- 49,198, 72,227,228,155,197,168,224, 96,150, 84, 22,248, 41,239,196,165, 42, 34,185,152,200,151,157, 45, 97,105,213, 21,230,143,
-147,119,230,178, 8,228, 68,129, 66,208, 72,136, 14,192,144,128, 97,241,120, 60, 93, 48,135,136,112, 19, 1,195, 99, 97,145,120,
-252, 65,133,128, 92,101,178, 95, 63,236,181,184,144, 43,225, 88, 30,190, 42,102,186,107, 73,133, 6,196, 85, 25, 78,150, 2,193,
- 17,172,196,250,165,106, 91, 23,102,187, 20,146,242,186, 99,162, 9,128, 22,136, 50, 64,196,192,190, 88, 10, 92, 0, 63,212, 70,
-107,104, 41,160, 4,141, 12, 3, 18, 68,164,143, 45, 66,196,120,238, 17,150, 5, 49,177,121, 92, 40,124,122,120, 34,176,129,146,
-112,145,253,218, 55,187,226,196,223,191,231,221,251, 42, 81,143,215, 13,217,138, 18, 18, 21, 51, 49, 70, 8, 31, 32, 92, 34, 75,
-186, 79, 16,129,255, 36,197,186,209, 19,229,242,216, 94,177, 45,139, 8, 4, 73,144,150, 32,242, 8, 35, 9, 89,160, 52,105,181,
-155,206,223, 39, 33, 82,177,196,137,213,234, 39,173,171,213, 31, 49,123, 79,107,218, 48, 23,122, 55,192, 28, 60,203,100, 47,246,
-146,181,214,227, 86,156, 66,206, 11,241,226,152,172, 92,254,171, 34,181,216, 43,229,122, 71,149, 86,226,210,108,191, 84,144, 49,
-160,171, 27,252,245, 95,254, 79,184,219,239,225,103, 15, 31, 22,156, 46, 7,156,206,103, 64, 36,140, 19, 17,187, 8,228, 68,175,
-227,110,187,195,225,240,132,227,211, 1,119,247,175,105,132,218,117, 56,156, 79, 80, 90, 66,178, 21,232,243,225, 0, 99, 52,170,
-186,198, 50,207,104,234, 6, 34, 1,187,237,142, 49,178, 35,148,210,248,230,231,223,208,126,112, 28, 49,207, 11,238,238,238,224,
-131,199,241,120, 68,140,100,101, 67, 4, 22, 79, 22,168,124,192,236,247,123, 24,182,208, 9, 45,113, 25, 46,104,187, 6,195,255,
- 95,219,123,245, 72,150,101, 89,122,235,200,171,204,204, 85,100, 70, 86, 85,139,170,174,233,230,176,197,160, 89, 51, 32, 7, 4,
-136,121,224, 31,171,255, 70,240,129, 36, 8, 18,131, 1,134, 28, 73,150, 72, 25,225,238, 38,174, 58,146, 15,123,159, 99,215, 60,
-162, 68, 79,131, 72, 56,144, 25,233,225,194,236,222,187,207,222,123,173,111, 57, 71, 15,111,101,224, 98,194,176, 31,112,254,238,
- 59,100,165,145, 5,152, 90,214,194,249,132, 24, 9,114,211,118,150,238,151, 40, 32,165,193,229, 76,241,163,198, 52, 88,215,133,
-149,226,132,225,164,248, 77,139,203,101,132,210, 10, 58,179, 99, 68, 72,196, 64,226,165,242, 96,156,151,153,198,174,172,202, 39,
-130,156,198,234, 29,233, 89,140, 70,138, 1,166,109,185,155,214, 88, 47, 23,180,253, 0,100, 73,171, 0, 0,166,209, 12, 96, 34,
-145,173, 53, 26,139,147, 72,209,211,154, 43,209, 33,191,109,104,151, 45,100,177, 66,177,192,141, 73,152, 25,148, 37, 62, 77,180,
-227,166,152, 89, 18,212, 46, 43, 65,132, 74, 40,203,178,144,178, 92, 21,239, 52,191,246, 90,155,250,251, 27, 99, 33, 20, 37,195,
- 41, 69, 84,181,224, 3,250,190, 65, 78,132, 42,109, 58, 7,219, 24,164, 64,226,214,152, 50,219,228,136,119, 79,214, 94, 58, 88,
- 12,125,203,182,183, 1,110, 89, 48,244, 29,188, 91,113, 74, 39,220, 63,220,241,129,160,133,243, 43, 91,250, 18,164,210,152,167,
- 9,187,190, 71, 74,180,214, 88,152, 52, 55,236,119,112,222, 97, 89, 9, 7,236, 87,135, 97, 24, 48,142, 35, 86,190,174,181,209,
-149, 5,159, 82, 64,224,131,129,214,196,146,151,138,228,213, 49,208,228, 74, 25, 11,169, 8,196,162, 5,224,188,135,140,148, 46,
- 87,240,187,133, 35, 16, 19,139,115,165, 36,187, 90,112, 80, 41,213,240, 25,128,192, 70, 33,174, 48, 38,160, 31,122,198, 17,175,
- 72, 73, 98, 89, 60,188, 59, 33,236,129,251,251,123,188, 30,143, 20,110, 36, 22, 36,166, 30,106, 77,169,118,151,203, 5, 74,209,
- 84,136,108,127,226,118,121,189,157, 92,102,124, 70,187,115,187, 58, 44, 63,159, 20,106,195,225,192,173,182, 72,242,131,156,191,
-135, 22,249, 42,134, 78, 27,240,140,168,163, 81, 9,153, 36, 32, 18, 37,163,229, 34,117, 81, 87, 47,148,188, 29,110, 10,228,234,
-201,204,226, 74, 88,163, 4, 50,121,197,168, 22,235,155,144, 27, 72, 11,179,221, 69,190,102,179, 11,208,104, 61, 5,248,152,113,
- 26,103,188,142, 11,124, 77,220, 42,187,220, 92,225, 16, 98, 99,181,203,155,177,173, 40,106,231, 58,182,184, 42, 12,165,144, 4,
- 54, 96, 1, 71,230, 56,215, 36,202,215, 74, 85,241, 95, 60,210,214, 18,171,217, 52,133,215,174,160,149, 4, 68,134, 91, 51,141,
- 18, 61,249,225,115, 34, 5,128, 81, 9, 70,117,176,182,229,155,149, 59,217,124,109, 28,181,208, 16, 28, 35,152, 98,196,186, 68,
-204,243, 10,161, 53, 76,211, 35,228,128,231,227, 5,179,247, 68,183, 23, 2, 89, 68, 26,125,151,195, 77,206, 92, 96,100,229,246,
-109, 15, 86,145,127,223,148, 50,124,202, 88, 99,196,226,201,150,231,157,135, 88, 21,212, 28,144,155,136,108, 50, 96,248,112,148,
- 37, 67,100, 36, 68,144,144,194, 32, 11, 67,224, 20, 0, 49, 43,134,253, 4,250,158,124,209,137,156,144, 33,107,130, 31,237,170,
- 21,131,136, 74,144, 74, 70,190, 25,204, 51,181,174, 28,170,242,239,219, 17,149,115,155,172, 35,117, 42,216,183,199,213, 44,182,
-192,151,171,167, 79, 8, 74,212,146, 72,181, 48,127, 78, 73,178, 21,206,213, 33, 88, 61, 43, 72,206,168,231, 4, 63, 72, 62, 81,
- 71,100, 73,163, 14, 37, 20, 16,121, 34,149, 51,254,242,167,255, 4,127,254,227, 63,197,114, 33,172,230,101,186, 32,164,128,211,
-244, 66,157,140,164, 93,173,159,124,189, 94,231,121,193,186, 56,220, 63, 60,160,105, 27, 76,227,132,251,199, 7,232, 89, 35,172,
- 1,141, 53, 88,215, 25,182, 33, 43,217,241,116, 65,138, 17,187,182,131,150, 26,211,121,194,241,120, 68,215,245,248,242,203,247,
- 72,193,227,187,239,190,133,210, 22, 63,249,209, 79,208,116, 13,190,253,246,107,140,203, 8,169, 36, 58,165, 48,141, 51, 89,178,
-152,108, 23, 98,128, 91, 86, 60,127,248,136,195,221, 30,115, 48,128,207,184,156, 79, 56, 12,123,104,105,176,172, 4,101,249,248,
-195,119, 16, 57, 64,100,129, 12,133, 36, 37,238,238,239, 33,181,198,188, 78,208, 10,136,222,195,173, 26,171,163,128,149,144, 2,
-164, 38, 52,170, 84, 18,151,113, 68, 10, 52,197, 58,198, 35, 30,159,190, 64, 18, 10,110, 13, 80,193, 67,138,132,156, 2, 36,128,
-195,195, 3,143,170,105, 28, 43, 53, 41,240,141,166,123, 42,178,221,169,181, 13,148,148,232,153,242, 22,130,163,113,114,211, 82,
-195, 34, 0, 23, 35,132, 86,104,100, 11, 81,216, 15,156,197, 29,131,199,110,104, 97, 52, 61, 15,101,190,138,242,246,251, 1, 57,
- 71,196,224, 73, 79,176,174,196,161,224, 78, 13, 9,184,187,219,115,199,168,160,149, 69, 76, 68,149, 75, 57, 65,101,129, 20, 34,
-164,213,240,193, 49,127,156,114,201,239,239, 31,136, 51, 46, 36, 98,162,164,184,148, 29,164, 84,136,222,147, 39,220,147,149,172,
-181, 6, 2, 9, 79, 15,247,248,238,155,239, 17,124, 36, 63,179, 1, 16, 3,238,246, 59,164,236,225,214,128,190,181,112,145,196,
-126,228,229,167,125,186, 84,134,199,223, 17, 77, 75,122, 0, 3, 74,141,244,222,211, 36,132,133,113, 69,171,148, 82, 68, 22,164,
- 40, 23,210,192, 90, 18,246,249,213, 97,134,224,221, 58, 29,232, 16, 50, 12,239,224,181, 82, 8,206, 67, 55,116,128,141,153,188,
-227,101,202, 34, 33,224, 99, 64,195,161, 56,165,139, 37, 41, 15, 55, 33, 41, 0, 72,244, 57, 41, 67, 72, 18,101,166,236,107,162,
- 36, 33,113, 91,228,164,224, 99, 64, 88, 87,226,217,123,135,221,110,143,182,215,240, 1,200,233,130,144, 34,206,231, 11, 0, 42,
-236, 31,157,163,120,225,213, 3, 57, 84,141,214, 48, 12, 56,158,206,117,181,153, 54,104, 77,145,105,157,252, 54,148,229,115,129,
- 80,114,147, 87,144, 56, 93, 51,150,198,186,172,175, 55,141,116,226,116,195, 79,169, 26,226,247, 88,136,243,231, 60,191, 91, 85,
-112,174, 29,120, 17,110,148,121, 67,133,192,108, 69, 76, 55,191, 80,174,118, 20, 37,175,157,155,100,227,110,230,200,194,144, 3,
- 92, 8, 56,141, 11, 46,243, 74, 29, 97, 22,155, 84,174, 79, 13, 83,111,247,161,159, 4,205,191,113, 64,145, 42, 85,144,136,172,
-162,100,169,240,133, 72,158, 70,239, 35,156,139,240, 62, 97,156,103,204,206, 97,154, 87,246, 50, 46, 12,113, 24, 49, 49, 34,179,
-156,180,180, 54, 12,234, 32,229,109,204,128,103,108,101,226, 55, 41,150, 14, 83, 73, 40, 35, 33, 20,144,101, 70, 4,241,217, 93,
-140, 24,215, 5,231,121,194,184, 44,220, 37, 83,225,139,197,174,147,242,141, 48,241,106,239,186,254,146,133,181,159, 50, 16,133,
-198,228,128,243,148,112, 28, 3, 94, 79, 43,206,175, 11,252,197, 35, 79, 30, 98,244,144, 83,130, 88, 2,178, 11, 52,170, 79, 2,
-240, 25,112, 25, 93,214,144, 50, 33, 33, 32,139, 68, 97, 57, 55,193, 42,138,222,171,183, 81,166,242,170,230,188,158, 90,197,239,
-214,110,252,209,254,239,252, 95, 0,144, 17,248, 47,199,197, 9,220, 68,218,110,198,146,249, 38, 93, 86,222,184, 72,100, 18,120,
-119,247,132, 95,252,221,127,131,232, 72,196,227,220, 10,173, 21,156,119,244, 96,141, 17,243, 60, 51,247,157, 64, 52,101,116, 88,
- 80,195,207,207,207, 72, 41,225,251,239,191,199,120,190, 64, 74,137,211,233, 68,221, 41, 31,214,181,209,184,191,187,195,253,211,
- 35, 81,200,220,130,144, 18,132, 82,120, 61,159,112, 60, 29, 33,164,196,176, 31, 96,172,198,243,199,143, 16, 66,224,225,238, 30,
-247,251, 3,114,206, 56, 94,206,128,146,184,123,184,195,195,227, 3,134, 93,143,132, 8,101, 37,180, 53,112,171, 35, 78, 57,167,
-164,245, 61,229, 92,207,211, 8,183, 46,104,173,165,131, 93, 8,144, 25, 53, 62,179,239,118,104,108,143,105,114,152,166, 21,227,
- 56, 98,158, 23, 8,161,177,174, 1, 41, 9,120,151,176, 78, 30,206, 37, 44, 43,221,123, 68,152,115,112, 97,197, 52, 79, 88,150,
-153, 14,206, 74,194, 88,131, 16, 3, 98,138, 28,103, 74, 99,127,163,245,245,192, 37, 73,212, 73, 9,106, 29,230,121,162,103, 23,
-167, 33, 74, 41, 17,124,224,188,114,197,168,233,235,254,115, 93,102, 14, 69, 49,252,222,230, 10,165, 41,251,228,243,249,140,221,
-110, 7,239, 61,137,228,120,204,223, 48, 62,181, 96,117,141,214, 12, 37, 41, 89,241,242, 77,174,122,162,136,103,165, 43,254,116,
- 94,104, 76,158,145, 43,126, 90,176, 39, 95,177,128,173,216,139, 99, 34, 69,255,221,221, 1,231,243,185,186,152,230,121,169, 41,
-108,206, 17, 97,109,232,123, 2,194,228,140,198,104,182,208, 81, 54,133,115, 14,151, 11, 93, 99,196, 56, 95, 43, 2,123, 97, 91,
- 29,253,190,196,221,167, 36, 62, 90, 49, 21,244,175,170,177,170,170, 34,115,233,185,149,106, 2, 90,201,158, 47,159, 23, 99,228,
-233,169,170,255, 77, 69, 94, 85,174, 72, 96,160, 16, 5,192,208,123, 77,254,255,114,216,160, 6,201, 26,203,239, 97,196,229,114,
-134,177,154, 50,217, 51, 96,152, 89,191, 46, 43,230,105, 70,215,118, 24,134, 93,133, 11,173, 43, 9, 11,133,162,198,165,136,193,
-139, 94,140, 2, 92,228,141,168,237, 45, 29,238,115,245,232, 45, 30,118,139,134,205, 57, 83,195, 35,192,205,210, 85,105, 44, 74,
-243,178, 89,123,255,255,132,202,218, 68, 82,138, 63,210,107, 92, 35, 57,197,213,222, 86,201,240, 4,138,137, 57, 97,241, 30, 47,
-167, 17,139,163,174, 31, 60, 49,160, 29,110,250, 52,198,245,205, 11,151, 19,117,154,169,230,136,223, 70,192, 22,241,136, 42, 22,
- 58, 6, 16,196, 72, 40, 71, 23,136, 16, 71, 35,102, 73,194, 12,254, 28, 23, 18, 66,140,240,145, 96,253,106,147, 3, 92, 62, 10,
-159,219,121,143,211,120, 34,142, 52, 63,132,148, 86, 76,147,147,180,143, 39, 94, 46, 32,169,248,175, 49, 96, 90, 87,156,167, 25,
-199,113,194,236, 92, 21, 15,214,105, 75,101,215,111,121,250,121, 35,176,200, 20, 76, 83, 70,239, 66,192, 67, 99,116, 2,207,151,
-136,111, 62,174,248,245,119, 51,126,245,205, 5,223,124,125,194,135,223,156, 48,125,253,138,248,221, 11,242,135, 11,240, 50, 66,
-156, 29,176, 36, 50,222, 39,143,108, 18,132, 1,146, 8, 72,155,126, 91,108,130,123, 40,155, 92, 92, 73,110,226, 77,220,232, 70,
-212,247, 15, 46,232,249,247,231,151,255,177,123,252,252,143,197,213,127, 2, 83,202,155,216,196,107, 94, 0,135,217,195, 40,141,
-191,255,235,127,134,199,187, 7, 40, 8,228, 64, 64,151,121,154,225,189, 71,223,247, 21,150,177,174, 43, 21, 26, 69,254,107,239,
- 87, 28, 14, 7, 56,239,209,216, 22, 63,250,209,143, 24, 40, 67,227,234,148, 50, 82, 8, 72, 49,227,120, 58, 33,129, 58,161,148,
- 51,190,251,225,123,116,125, 79, 66,186,253, 14, 25, 25, 31,158,159,113,184,191,131, 98,129, 79, 8, 1,231,227, 9,110,117,164,
- 6,231,177,111,136, 1, 66, 74,156,206, 71, 28, 79, 71,188,156, 94, 97, 26,139,175,191,253, 26,203, 50,163,239,122,104, 99,145,
- 1,188,188, 60,195,185,133, 52, 44,124,172,211, 18, 72, 97,133,202,145, 58,174,213, 67, 43, 11,165, 26, 40,221, 66, 8,141,198,
-246,200, 73, 64, 73,139, 20,129, 24,128, 24, 50, 4, 52,114, 82, 80,170,133, 84, 22,227, 60, 99,154, 71,164,228,161, 20,112,119,
-127,144,119, 90,210, 0, 0, 32, 0, 73, 68, 65, 84,192, 48, 12, 36,128,242,142,197,179,130, 25,226, 87,110,118, 14, 17,193,211,
-190, 87,105,234,130, 51, 34,156,119,213, 62, 87,120,220, 20,231, 26,217,195,174, 33, 65, 95, 47,197, 8,193,255, 94,190,135,100,
-183,135,224,110,211, 24, 83,185,241,198, 24,236,119, 59, 28, 14, 7,180,109,139,121,158, 25,120, 67, 63,199,194, 92,116,242,178,
- 83, 6,186,181,186, 78, 23,181, 54, 0, 23, 29, 33, 0, 31,168,227,244,193,193,218,134,146,215, 56,233, 81, 41, 5,207, 7, 2,
-130, 20,209, 65,113, 93, 22,236, 15, 59,104, 37, 17,188,167,249, 93,206, 88, 23, 7, 41, 52,250,158, 70,226, 16, 2, 15,247, 7,
-210,163,240,132,108,154,103,116,125,207, 26, 5,141,151,151,151, 10, 24,243,222,227,225,225,129,192, 71,211,196,154, 0,207,137,
-117,180, 59, 86,156,214,151, 57,105,143, 44,145,168,212,183, 90,184, 11, 46,121, 43, 52,227,251,184, 28, 92,242,155,113,245, 53,
-245, 18, 53, 4,166,229,174, 95, 41,130, 59,103,230,188, 55,182,169,247,104,202, 17, 82, 10,166,232, 9, 60, 61, 61, 66, 10,178,
- 25,206,243, 66, 25, 5,227,136,199,199, 7, 40,171, 17, 50,173,112, 46,243,116,155,242,182,121,222,172, 43, 37,194,137,223, 67,
- 95,253, 28,204,170,116,230,111,179,210,171,134,135,169,106, 89, 20,141, 82,174,193, 53,111, 71,247, 85, 40,151, 54,245, 55,139,
- 63,158,221,241,201,130, 63,149, 61,168,172,200, 81,148, 40,214, 55, 2,188, 43,209,108, 99,155, 43,235,118,121,165,213, 21,101,
- 95, 72, 9,227,178,226,245, 60,193, 39,137,156, 37, 79, 94,153, 37, 47,197,239,180, 7, 92, 59,164, 92,199,238, 34, 23, 72, 0,
-217, 92,132,102,169, 29,191, 89,133, 42, 37,148,164, 93, 54,143,114, 83,206,236,113,207,196, 90,102,210, 27,157, 70,175,137, 59,
-101,159,155,145,169, 67,225, 67,132,181, 22,125,219,194,187, 5, 90,137, 58,178,111,140,130, 64,134,174, 66, 10, 82, 98, 79,211,
- 12,231, 23, 36,161, 16,147,192, 18, 2,166,197, 81, 42,147,210,228, 17, 47, 23,216,141,224, 11,245,112, 68, 57,234, 87, 97, 28,
- 21, 89,137, 40, 36, 2, 36,230, 0,124,127, 92,225,215,136,215,227,130,223,124, 47,209, 91,137,174,215,120,184, 27,240,238,113,
-192,195,151, 7, 28, 30, 15, 24,238,118,208,131,130, 52, 2,240, 18, 16, 26,218, 54,128,140, 55,222,255,106, 31,123, 35,212, 67,
- 77,130,139,219, 19, 29,240,123, 11,240, 31,103,110,219,238,172, 63, 95,252,243,239, 59, 7,224, 31,134,192,121, 59, 29, 16,245,
-215, 16,228,155,170,158, 94,210,159, 16, 41, 81, 32, 35,249,128,159,255,229, 95,225,231,127,246, 83,132,197, 17,144, 73, 10,216,
-166,193,225,254,128,127,255,159,254, 61, 46,151, 11,118,187, 61, 94, 95,143, 84,152,144,161,141,193,229, 50,226, 47,126,246, 83,
-156,207,103, 52,141,197,253,221, 19, 46,151, 11,145,195,164,198,180, 46,216,113,224, 74, 8, 52,142,110, 53, 21,162, 15, 47, 47,
- 20,134,228, 61,250,161,199,180, 44, 24, 47, 23, 44, 75,137,199, 76,184, 92, 46,240,222, 99,232, 90, 32, 38,188,124,120,198,135,
-231,103,252,217,159,255, 20,222, 59, 52, 70,227,227, 15,223, 67, 25, 69,226,169,151,143, 36,124,146,148,118,214,237, 6,180,166,
-193,235,235, 9,113,156, 32,149,128, 54,138, 56,223, 62, 99, 69,132, 18, 9, 41,172,124, 40, 54,116,232,208, 13,188, 95, 25,108,
- 99,161,148,198, 60,205, 64, 34,250, 87,140, 25, 93,191,199,226, 87,154,216,253,240,129, 82, 28, 53, 77,193,188, 91,209, 49,195,
-125, 27,185,220, 52, 77,165,202,229,156,209,180,180,183, 85,165, 64, 8,242,214,199,156, 97,148,166, 53,146, 84,176, 67,139, 35,
- 79, 62,114,206,208,138,108, 99, 82, 72, 90, 25, 24, 69,118, 57,239,209, 12, 29, 89,166,248, 0, 64,208, 43,234,200,151,121,102,
- 97, 98, 68,204, 30,119, 93, 7,151, 60, 2,139, 32,201, 79,159, 97,109, 3, 53,205,140, 92,229,206, 77,129, 15,116,116,109,164,
-152, 72,139,131,140,253,126,135,215,215, 35,101,191,175,158, 8,111, 77, 91, 19,207,230,121, 65,223,119, 88,150, 5,235,106,241,
-238,241, 9,223,126,253, 13,158,158, 30,112, 60,157, 49,205, 35,118,195,142, 2,115,186,140,253,126, 79,175,211, 60,195, 52,212,
-213,143,231, 11, 55, 39, 10,211, 52, 98, 24, 6, 42,222,188, 47,223,239,247, 8,193,225,124, 62,226,203, 47,191,192,215,191,253,
- 53,148, 82, 53,112, 38,103,186,214,140,229, 46,148, 11,216,150, 0, 23, 34,219,234,250,190, 62, 59,181, 82, 8,245, 80, 69,207,
-205,101, 89, 48,116, 61, 9,223, 88,120,184, 45,134, 69,192, 74, 9,115, 1, 41, 69, 90,169,106,178, 34,151, 34,223, 88, 11,183,
-174,144, 90, 84, 77,205, 52,141,144,146, 38, 7,199,227,145,118,239,171, 67, 22,192,101, 30,241,254,253,123,124,248,240,145, 39,
- 19, 18, 41, 39,210,104, 36, 84,221,152,172,209,214,252,228,147,183, 28,119, 41, 37,100,198, 39,135,129,162,217, 73,165, 43,127,
- 67, 51, 20,146,190,214,117,141,125, 61, 16, 40,165, 72,112, 43,174, 8, 98,213, 74,253,203, 13,132,253,147,193,186,172, 98,185,
- 18, 57, 90,254, 84,214, 5,188,144,229, 68,161,104,219, 46, 52,134, 97, 95, 35, 16,101, 77,205,201,181, 88,145, 24,142,199, 74,
- 60,242, 86, 34,193,106,192,168,140,198, 72, 24, 69,208,127, 37, 34, 82, 12, 88, 92,196, 15,167, 25,255,225,215, 31,112,113, 2,
-144,150,119,243, 36,196,163,127, 87,252,179,137,155, 9,192,141, 48,170, 20,145, 98,223,146,160,145,157, 38,193,131, 20,215, 4,
- 55, 72, 42,228,185,236,225, 82, 38,171, 30,243,167,173,213,204,229,165,155,173, 4,128,212,253, 6,199,197,106,173, 72,112,151,
-136, 79,109,140,132,165,140, 22, 24, 5,244,157,133,173,251,248, 2,107,163, 78,119,245, 17, 19,103, 15, 47, 62, 97, 94, 3, 78,
-231, 17,243,178, 34,161,252, 60,229,226,144, 27,134, 62, 71, 33, 10,201,157,121,233,210,175,225, 46,130, 5, 24, 9, 25, 33, 75,
- 44, 1, 56,175, 25, 47,115,198,215, 47, 11,126,243, 97,198,175,126,152,240,171,239,103,124,251,205, 5, 31,191, 91,112,121, 77,
-240,103, 1,229, 13,116,234,176, 56,141,127,251,255,124,143,111, 63,156,144,133, 69,228,224,154,194, 93, 46,123,124, 8, 18,208,
- 85, 17, 8, 59, 19,182,157,114,126, 43, 28, 41,152,200,223,105, 49,147, 55, 34, 58, 33, 4, 29,214, 54, 32,155,235,120,255,202,
-227,174,208,151,141,210,148,126, 72,201,221,244, 63,108,244, 94,243,234,235,100, 76,178, 96, 83,212, 12,119, 37, 37, 82, 12,208,
- 89,226,253,227, 23,248, 31,255,135,127,133,199,253, 61,220,186, 96,188,156,177,186, 5,199,243, 17, 31, 62,126, 64, 63,244, 56,
-157,206, 68, 39,107, 26, 64,146, 32,211, 90, 11,193,145,149,151,243, 5,251,253, 30,167, 51,113,167,127,248,240,140,110, 55,144,
-133,199, 90,104,163, 57,170,179,197,126, 63, 96, 93,102,234,214,246, 3, 98,138,120,121,126,198,229,124,134, 82, 2, 95,125,245,
- 21,246,135, 61, 78,199, 35,150,101,198,227,227, 3, 4,227, 49,115,206,248,234,253,151,184, 59,236, 97,181,198,119,223,124,131,
- 16, 61, 30, 31, 31,177,223, 15,152,198, 17,227,249,130,174,223,225,225,241, 1,200,192,175,126,245,107, 26,133, 26,141,182,107,
- 33, 68,134,115, 51,188, 91,121, 60,174, 48,141, 23,196, 20, 17,130,195, 50,207,149, 17, 30,153,210, 5,208,120, 58,113,150,184,
-148, 18,199,215, 19, 46,211,136, 24, 3, 39, 39, 82, 80, 70,203, 48, 28,163, 53,134,161,131, 15, 30,227, 56, 66, 10, 74,230,242,
- 46,208,179, 73,211, 53,233,156,195,110,183,171,184,210, 16, 2, 89,147, 50,141,226,155,166,193,233,124,198, 60,175,132, 2,213,
-170, 82,203,180, 34,116,109,219,180, 72, 57,193, 26,133,221,110, 7, 33, 36, 11,219, 56,167,156, 39, 5,203,188,192, 24, 67,113,
-168, 41, 97, 89, 23,196,152, 24,220, 66, 86, 44,183, 58, 52,109, 11,169, 21,188,119, 92,188, 37,134,190, 39,148, 46, 31, 52,200,
-135, 45, 48, 94,206,120,184,191,167,245, 64,138, 48,250,154,130,214,182, 13, 89,116, 67,160, 4, 73,107, 16, 35,101,141,239,247,
-123,156,207,164,147,200,165, 8, 8, 98,139, 43,173,224,156, 99,127, 62,145,219,186,182,165, 14,154, 89,245,231,241, 2, 8,160,
-239,187,106,209, 75, 41,214,215,112,183,219, 83, 58,223, 76, 44,127,165,105,106, 96,109, 83, 69,139, 74,211, 14, 27,188,110,157,
-151,137, 86, 53,236,246, 40,196, 54,112,199, 62,207, 51,139, 9, 57, 26,214, 88, 44, 51, 69,227, 26, 22, 17, 74,113, 61, 48, 44,
-203,194,211,153, 4,231,214,122,159, 26, 99,224,248,126, 10,129,128, 69, 49,101, 24,211, 0,137,210,249,104,252, 79, 81,185, 33,
- 16,203, 32,231,204,211, 21, 82,203,247,195, 14,151,113,170,100,194,188, 33,108,166,162, 90,199, 45,152,141,166,196, 87, 45,207,
- 54,133,109, 43,141, 47,190,118,169, 20,178, 32,252,121, 6,213,158,244,153,134,101, 27,217, 90,190,223, 63,174,168,139, 43,230,
-179,122,232, 50, 96,148,193, 48,236, 96,109, 83,133, 13, 85,205, 46, 21,125,212,140,245, 84, 21,238, 90, 1, 86, 11, 24,149, 96,
- 13,160,117,134,150,212,105,134, 16,176, 4,224,255,253,246, 5,191,254,254,140, 53, 41,100,169,168,203,206,165, 39,189,142,118,
- 83,174, 4,232,155,143,235,100,151,148,252,148, 48, 74, 55,170,214, 4,189, 41, 78,126,194, 86, 82,183,156,217, 5, 80, 0,252,
- 90, 9,104, 41, 48,116, 29,246, 67,135,190,111, 48, 12,228,207,221, 13, 61, 26, 78,126,106,172, 65,215, 90,236,134, 30,125,223,
- 66,107,137,213,173,216,245, 13,246,125,135,198, 42, 12, 93,139,182,161,236,228,196,251,147,144, 50,124,204,240, 33,193,249,136,
-121,117, 88, 92,196,101,114, 24,231, 5,227,180, 34,196,196,158,128,207,139,185,202,238,246,138, 95,103, 43,162,144, 84,204,121,
- 34, 32,232, 42, 66, 76,128,203, 2, 46, 75, 44, 73, 97,142, 26, 43, 44, 22, 52, 88, 34, 48,173, 17,175,147,195,135,243,130,143,
-227,130,211, 56,193,103,160, 59, 60,226, 39,127,241, 87,200,210,224,183,191,253, 30, 46, 36,102,241,243,148,160, 92,140, 55, 52,
-182, 50, 93, 16,159, 20,117,113,187,100, 71,222,152, 39, 63,183, 94,185, 85,198,139,218,145,231,188,157,210,108,190,100, 81,164,
-110, 28, 31,185,226,115,197, 39,183,206,118,188,245, 15,131,192,110,130,115, 5, 93,111, 50,103,236,219, 30,255,221, 47,254, 5,
-190,122,250, 2,211,229,132, 20, 3,142,167, 87,184,224, 16,145,112, 58,159,112,190, 92, 24, 43,153,153,174,213,146,203, 66, 74,
-216,198,194,173, 14, 67,223,195,114,188,227,188,204,213,103, 94,199,128,172,190,181,198,224,244,250,138,101,154,113,199,185,218,
-211, 60, 81,145, 60, 30,145, 98, 66,219,181,248,205,111,126, 67,185,209, 93,143,182,109,241,252,242,130,203,120, 65,215,247,212,
-145, 38,143, 31,126,248, 30, 82, 74, 60, 62, 61, 98,117, 14,211, 52,211, 3,211, 90,236,246, 7,204,243,140,121, 89, 16,120, 28,
- 12, 8,156,207, 39,178, 43,229,136,182,239,200,119,239, 40,190,212,187,181, 98, 80, 95, 79, 47,152,152,139, 78,133, 40,192, 45,
- 11,214,117,134,115, 11,137,170, 98, 64,211,104, 88,173,161,140, 36,120, 76,240, 4,142, 9, 1, 95,190,123,130, 84,154, 10,127,
- 18,208,166,161,215,206,123, 46, 60, 84, 24,186,166,165,123, 95,107, 44,171,195,234, 61,220,234,168,160,132,136,174,109,113,153,
- 70, 4,190,150,125, 8, 24, 24, 27,155, 56,195,161,109, 26,228,148,208,182, 77,141,107, 13,158, 70,188, 41,209,104,119, 94,215,
- 26,245,219,182, 61,125, 78, 36,203, 83, 12, 84,184,154,198, 82,166,183,224,135, 57,119,239, 57, 39, 30, 5,143,172,126, 22,117,
- 26,169, 88,140, 59,244, 61,142,175,175, 80, 90, 85, 80, 74, 25,101, 75, 37,161,153,191,158,249,192,131, 68,147, 10,165, 85, 21,
- 43, 75,214, 65, 17,191,222, 32, 36, 74, 82,107,172, 69,136,129, 99, 84,215, 26, 74, 35, 4,208,112, 20,111, 99,105,196,111,173,
- 5, 68,194,186,208, 78, 61,243,206, 59,115,129,210, 90,211,202,128, 3,112, 74, 94,186,228,108,139,210, 68,149, 98,103,217, 38,
- 25, 99,168, 43, 40,128, 14, 42,109,211,213, 32,157, 45,197,148, 70,214,164,159,144, 74, 85,221, 80,253,135, 65, 51,100, 77, 20,
-208, 70,227,249,249, 21,222, 71,180, 13, 9,254,202, 52,167,235,218,202,223, 39, 93, 64, 70,223,119,120,121, 57,242,225,138, 51,
- 72, 66,228,168, 11, 82,218, 23, 45,217,103, 39,129, 5, 7, 93, 32,103,111,137,114,117,160, 40,106,150, 73,185,159,139,253, 85,
-124,166,152, 23,171,101,230,106,160,183,223, 60,255,142, 24,214,223, 15,175,222, 62, 92,217,164, 36,137, 38,119,237, 22,197,205,
- 23,173,158,223, 42,106,203,245,217,158,216,131,151, 82, 66,138, 2, 33, 82,193,143, 73, 96,154, 19, 94,142, 19,214,144, 16,178,
-132,100,132, 41,125, 29,141, 66,149,223,118,101,197, 19, 72,197, 32,109, 60,245,220, 61, 50,175, 94, 41, 81,199, 96, 9, 68,188,
-201, 73, 32, 51,180, 38,179, 55,181, 76, 25, 4, 18,186,182,195,195,221, 30,187,161, 67,129,231, 53,141, 37,223,174,247,240,171,
-171,184,203,190,239, 97,140,198, 52, 77,248,246, 91,242,154, 30,238, 40, 45, 75, 2,136, 89, 32,184,194,138,167,145,147,224,184,
-216,105,113,120, 29,103, 76,139, 71, 76, 18, 62, 2,158,249,242,185,160,132, 68,177,147,241,107,154,229, 6, 60,179,169,167,204,
-107,207,140,113,205, 82, 85,177,157,224,232,207,200,165,200,104, 13,169, 13,172, 54,104, 76, 70,219, 72,216,174, 1,154, 14, 94,
- 24,140,139,199,243,203, 9,187,251, 71,252,237, 47,254, 6, 95,254,236,103,184,204, 14,255,243,255,242,127, 32,179, 40,229,186,
- 14, 16,159, 92, 51,127,116, 35,204, 43,157,219,122, 46,254, 96,247,252,118, 52,254,199, 92,206,111,132,242,255,136, 16, 23,222,
-163, 51, 86,183,192,124,140, 84,248,217,159,252, 57,246, 77,135, 31,190,253,134, 70,186, 49,225,120,166,221,116, 55,116,216,199,
- 61,190,254,250, 91, 52,214, 34, 69, 26,221, 47,139,131,146,148, 67,254,248,244, 72, 69, 33, 38,188,190,190, 34, 68, 74,186, 58,
-157, 47,240, 49, 84, 17, 83,136, 30,251,253, 30,145, 19,174, 86,239,160,173,193,215,223,126, 3, 33, 37,198,113,196,225,254,174,
- 10,185,200,206,182,226,253,251,247,248,238,135,239, 17, 83, 68,191,223, 97,119, 56, 96,153, 39,124,120,253, 64, 33, 47, 90, 99,
- 94, 87,104,109,112, 58, 95,208,180, 13, 30,238,238,145,165,192,233,124,194,178,210, 8,189,239, 7,156, 79,103,132, 72, 2, 34,
-109, 45,156,139,128, 80,200, 41,192, 42,133,172, 4,199,218, 38,104,214, 87,196,156,240,225,195,119,232, 88, 68,165,141,132,177,
- 45,114, 78, 80, 90,163,107, 91,248, 64,216, 92, 9, 9, 72, 3,239, 19,238, 14, 3, 76,211, 96,113, 14,206, 69, 40,105,240,250,
-114, 66,215, 53,176, 90,145,141,106, 58, 19,194,148, 81,181,231,243,165,114,223,133,148,104,154,142,227, 91,201, 30,101,173,133,
- 80, 26,238,124,162, 98,233, 29,167,199,105, 94, 9, 68, 52,205,174,142, 77,135, 97, 64,240,129, 59, 74,131,211,121,132,200, 25,
-139, 15,216,239, 35,188, 99,106,164,177, 88, 72, 9, 92, 87,114,108, 86, 66,215,117,104,219,140,203,101,164,226,218, 52, 88, 23,
- 66,187,122, 31, 88, 1, 77,107,195,166,181,148, 63, 46, 11,174, 57,212,231, 46,137,240, 4,194,186,224,176,223, 97, 89, 86,100,
- 75,119,226,254,112,192,183,223,127, 15,219, 80,212,171,247, 30, 41, 71, 60, 60,220, 65, 47, 26, 82,100,138, 9, 21, 6, 41,102,
-216,182, 1,132,128,209, 4,174, 89,215, 21,182,105,120, 31, 46, 49,205,180,254, 73, 57,225,116, 58, 97,104, 59,140,227,136,214,
-104, 4, 38,231, 41,165, 16,146,227,194, 78, 34, 77,194,186, 82, 49,143, 12,186,242, 41,192,116,150, 18,251,188,135,224, 40, 94,
- 74,199, 83, 53, 95,189,248,249, 53, 11,248,154,166, 33,150, 63, 64,113,222, 92,184,147,247,144, 9,252,218, 73,116,109,139,249,
-124,134,182, 6,143,143, 79,248,240,195, 51, 86,231,208, 54, 22, 96,222,128, 16,244,254, 53,214, 98,158,151,170,157,120,122,186,
- 71, 8, 5,228, 36, 97,140,197,226, 28, 29,216, 21, 3,135,196,231,181, 99, 66,138,107,236,244,134, 22, 39, 54, 90, 35,228, 77,
-163,177,125,146, 8,241, 25, 96,219,109,126, 74,249, 12,213, 40,253,203, 27, 0,199, 39,250,227,178,231, 78,236,187,101,159,116,
- 22, 85,165, 94,198, 76,229,129,218,152, 6,187,221,174, 42, 55,149, 20,236, 21, 87, 87,227, 61, 68, 29,189, 75,201,221,178, 22,
- 52,114,231, 14, 93, 43, 9, 37,168, 79, 11, 33,224,135,215, 9,255,241, 55,223,227,236, 18,178,182,117,188, 93,205, 71, 82,177,
- 26,254, 26,111,119, 59, 22, 21,204, 49,207,215, 16, 13, 30,167, 25,163,104,161,144,169,168, 39, 62, 24,164,148,170, 48,129, 26,
- 90, 42,234, 70, 73, 60, 62,222, 99,232, 91, 12,157, 37,159,185, 18,104,223,220,100, 90, 43, 30,235,203, 58, 10,243,222, 35,120,
- 87, 99, 11, 67,138, 88, 61,217,245,200, 80, 37,169,200,167,140,217, 5, 92,150, 21,151,121,197,234, 3,132,182,240,145, 34, 93,
-107, 33,202,105,227,185,190,218,248,110, 46,132, 26,206, 34,175,162,180,204, 7, 30,144,162, 86,129,118,190, 90, 9, 72,126,200,
-138, 72, 9,118, 49, 71, 72, 36,216,198,162, 31, 6,220, 13,123, 60,237,118, 56,180, 29,164,144,104, 15, 45, 30,126,242, 35, 32,
- 68,252,239,255,231,191,230, 68,214,196,227,169,173, 96,142, 68, 98, 87,159, 37,143,203,111, 66,130,176,129, 2,136, 55, 26,140,
-219, 2, 93,225, 12, 69,139,177,253, 90,249,246,186,196, 77,167,158,111,227,100,203, 21, 95, 87, 19, 87, 65,203,246, 84,252, 15,
-233,212, 19,175, 56,144,137,183, 32,114,198, 79,222,191,199, 63,251,175,255, 26, 22, 10, 47, 31, 62, 64, 42,129,211,233,136,140,
-140,217, 81,135,251,195,135, 15,124, 40, 86, 56, 28,238,177,174,164,132, 55,214, 50,122, 83, 84, 80,199,101, 28,161,173,197,226,
- 86, 76,243,140, 97, 24,208, 51, 86,147,186, 55,129,151,151,103, 52, 45,141,138, 35, 72, 56, 71,164,177, 61,118,251, 61, 78,231,
- 51, 62,124,160,130, 45,132,192,241,120,132,115, 14,211, 52,113,218, 88,194,241,244,138,197,209,110,120,245, 14, 47,175,175,220,
-145, 39,216,134,120,234,211, 60,225,124, 57, 87, 53,248, 52, 47, 88, 87,242,149, 91,107,209, 48,252, 35,134, 72, 93,113,107, 57,
- 46,115,169,105, 93,166,163,142,169,168,216,231,121,130, 15, 43, 39,108,121,196, 24,208,183, 29, 41,176, 5,217,187,186,182, 67,
- 78,180,154,184,191, 59,224,116, 58,225,124, 26, 33, 4,221,135, 41, 82,178,151,247,132, 0, 53, 70, 35,248,200,202,121, 62, 68,
-199,140, 97, 24,160, 36, 41,209,189,243,240,161,128,111, 18,127,159, 6, 57, 17, 31,188,236,183, 83,138,216,237, 6, 8,145, 49,
- 47, 19, 19,252,168, 75, 54, 90, 97,245, 1,109,211,112, 71, 74,202,248,107,200, 21, 16,248,103,210, 60,166,214,154, 16,165,146,
- 87,106, 69,104, 87,166,107, 84,188, 44,197,136, 26,205,182, 44,139,105,154, 96,140, 37,104, 74,197, 96,211, 51, 58,132,128,174,
-107, 33,153,135, 49, 79, 19,164, 82, 24,134, 30,207,207, 47,216,239,118, 12,238, 74,156, 62, 71, 62,111,205, 17,162, 74,105,242,
-176, 27, 93,121, 38, 41,197, 58,250, 46,190,250,148, 18,186,150,200,126,187,161,167,189,120, 12, 12,183,162,221,176,226,103, 94,
- 81,109,103,230,241, 95,199,237,244, 12, 47,136,217,146,172,150,185,201, 16, 60, 70,151, 82,178,168,177,196,229, 94, 59,118, 33,
-105, 12, 46, 57, 44,167, 80, 66,137,204, 24, 33, 57, 3, 65,155, 6, 41, 18,218,117, 93, 72,136, 58,207, 35, 5,136, 9,226, 19,
- 0,140,148,149, 2,211, 60, 19, 74, 89, 17, 87, 32,248, 72,177,183,165,147,254, 3, 32,170, 50, 21,217, 22,243,237, 46, 60,111,
-176,178,165,151, 40, 82,113,185,197,153,227,202,212,184, 89, 31,242, 36, 83,181, 90,254, 18, 34,111, 16, 46, 36,234, 18, 27,127,
- 56, 68,102,152,136,184, 42,218,249,207, 11,116, 67,224,186,215,237,154, 22, 67, 63, 16, 82, 80,104, 30,237,148, 15,190,224,144,
- 42,100, 70, 41, 1,173, 1,171,128, 70, 75, 40, 69,163,119,171, 51, 52,251,202,167, 16,241,219, 31, 78,248,230,195, 17,107,146,
-200,210, 16, 58,145,125,201,229,240, 33,184,139, 46, 5, 59,191, 97,115,211,239, 39, 25,182,127, 21, 41,148, 7,124,213,220,215,
-148, 28,238,239,121,239,174,148,128, 17, 2,173, 53,184,219, 15,104,141, 70, 99, 45, 71,197, 10, 74,103,146,101,132,182,225,203,
-243,215, 83, 74,163,107, 90, 52, 77, 3,169, 21,180,177, 48,198,194,216, 6,109, 63,192,182, 29,160, 52, 0, 5, 31, 19, 22,231,
- 49,205,174, 90,123, 32,232,130,242, 62,112, 29, 75,184,113, 84,111,118,195,159, 96, 86, 63, 9,223,185, 10,250, 4,239,192,181,
- 50, 80,252, 48, 84,124,128, 65, 38,100, 45, 88, 8, 41,114,198, 48, 52,184,127,216,227,171,175,222, 97,223, 55, 8,110, 65,163,
- 0,155, 51,254,221,255,245, 31,241,253,135, 19,144, 21,141,143, 68,201,229, 35,191,254,239,178,154,101,108, 80,173,184,254, 14,
- 73,224,166,160, 23,141,198, 91,122,220,237, 88,226, 26, 20,147,197,245,144,246,230,156,112, 21,159, 36,108, 94, 11, 84,127,105,
-126,243,186,225, 6,191,123,179,237,223,172, 59,168,144, 11,246,147,145,213, 8,184, 27,118,248,251,191,254, 91, 28,218, 30, 8,
-161, 74, 60,231,121,193,101, 26,241,122, 58, 97,117, 43,241,248, 3,101,120, 7,208,161, 79, 42,197,163, 61,193,176, 12,135,151,
-151, 23,236,239,238, 32,148, 38,240,145, 38, 78,123, 66,134,181,212,229, 36,239,137, 44,198, 19, 35,183, 58,196, 24,241,248,240,
-128,253,110,135,227,241,200,156,235,140,126,183,195,196,221,186, 98,107, 86,223,117, 56,241,207, 37,164, 68, 66,198,233, 76,255,
- 29, 51,249,183,143,231, 35, 66,240, 56,189,158, 32, 65,105, 85,235, 76, 66, 41, 74,187, 34, 69,241,234, 29, 94, 95,159,235, 40,
-148, 70,179, 26,145, 11,130, 20,244,192, 6,195,144, 72,109, 31,145,133, 98, 88, 74, 38,178,220, 50,115,131, 64, 1, 66,109,219,
-210,158,119,232, 32,164,160,195,132,243,208,198, 48,220, 69, 85, 98,155,101,165,116,102, 17,225,186, 44,149,106,182,235,123, 42,
- 78,200, 24,231, 25, 41,147,117,108, 89, 22,228, 20,208,183, 45, 11, 78,233,153,177,250, 21,109, 71, 94,233,142, 61,215,187,221,
- 0,207,145,168,137, 51,235, 51,255, 12, 82,210, 78,223, 90, 11,193,150, 42,129, 12, 99, 20,131,153, 4,140,210, 4,171, 9, 17,
- 86, 91,122,178,213, 41,161, 66,102,171,175,210,178,250,188,133, 80, 28,230,146,234, 61, 97,141, 33,188, 51, 63,227,154,134,112,
-180, 49, 69,216,198, 98,158, 39,236,119, 3, 69, 40, 35,163,237, 58, 8, 13,216,214, 86, 60,170, 82, 26, 62,198,186, 74,209, 74,
- 33,103, 2,196,140, 23, 82,185,239,119,123, 88,163,225,189, 35, 75,178,178,172, 98,151,176, 13, 5, 15,101,118,228,164,148,249,
- 25, 74,133,221,104, 77,194,194,148, 97, 56,227, 60,229, 4,211,152,138,242, 93, 22,186, 31, 34,143,236,233,115, 9,238,226, 67,
- 64, 22, 25, 74,203,171, 77, 56,209,189, 28, 57, 90,248,124, 58,195,104, 11,173, 12,214,101,173,235, 71,239, 61,230,105, 65,215,
-210,129,194,232,235, 56,127, 93, 61,186,190,163,140,117,118, 66, 56,231,200,177,116, 58, 35,198, 76,169,133,109,207,147,131,140,
- 20, 3,215, 32, 81, 54,210,155,124,147,124,141,145, 45, 46,140, 77,214, 72,206,249,186, 30,102,120,213,205,242,145,153,242, 66,
- 8,126, 92,230, 26, 72,150, 19,115, 56, 18, 55, 39, 25, 80,189, 86,191, 44, 17,167, 90, 16,209, 76,178,138,183, 60, 60, 41, 57,
-145,126, 8, 89,197, 87,162, 10,179,228,102,204,174, 36,137, 59,250,174,131,209,134, 61,235,138,233, 63,186, 6,190,215,239,169,
- 37,172, 86,176, 90,192,106,129, 70, 73,104,157, 97, 52, 96,100,130, 22,212, 37,159,150, 21,255,233,183, 31,240, 50, 46,200,202,
- 64, 8,141,204,224,150, 92, 85,221,215, 49, 68,253,119, 41, 63, 73,145, 19,178,196,223,201,122,106,162,113,154, 98,175,120, 38,
-116, 29,119,252, 74,147,224,195, 26, 34,198,181,172, 94,239,218,150,232,112,214,112,118,176,226, 61, 98,174, 57,232,219,228, 29,
-242, 76,210,205, 98,140,102,161,157,133,109, 26, 66, 91,106,141,148,233,162,242, 33,193,185,128,105, 92, 48, 78, 51,188, 35,153,
- 68, 74, 25, 62, 6,184, 64,227, 50, 81,124,250,226,141,234, 92,108,137,128,121,115, 24,147, 69, 41,113,243,186, 72, 37,161,165,
-169,171,147,242,218,101, 41, 32,181, 70,219,117,176,198,242,137,215, 65,138,128,198, 72,252,228,253, 59,188,255,234, 11, 24,161,
-225,231, 11, 58, 99,176, 44, 17,255,230,223,253,103,114,188,137,132,164,174,105,127, 25,121,163,228,188,145,227,111, 70, 78,114,
-211,157,127,126,151,126,229,251,227,138,171,225,139, 90,148,118, 66, 94,111,169,156, 55,154,145, 27,241,228,166,211,175,234,117,
-113,195, 87, 22,159,141, 74, 20, 5, 53,115, 45,236,114,163, 55,201,215, 41,128,200,128, 17, 18,127,243, 87,255, 20, 63,254,226,
- 75, 68,231,224,230,133,121,252, 2,243,178,192, 39,194,138, 26,206,223, 78,137, 44, 60,171,247,128, 20, 28,107,233, 48,244, 67,
-141, 71,237,251, 30,198, 54,228, 98, 8,212, 57,181,109,139,121, 93, 48,141, 23,242, 82,207,212,109, 55,109,195,142,142,132,187,
-195, 29,158, 30,159,112, 62,157,112,100,226, 28,152, 21,238,156, 67, 99, 45, 30,238,239,241,238,233, 9,200, 64,207,163,116,109,
- 57, 28, 36,101, 8,165, 32, 88, 0,186,174, 43,197, 89,110,237, 58, 2,152,151, 5,198,106,228,148,224,157,195,233,124, 70,200,
-100,195,209,138,224, 74, 62, 6,196, 76,150, 45,205, 5,205,104, 77,118,190, 24, 41,178,149, 81,155, 84,188, 36,239, 88,175,197,
-193, 7, 7,205, 59,101, 32, 99, 93, 29,117,151, 41,145,166,165,107, 25, 43,186, 98,232, 7, 26,191, 46,107,141,116,213, 90, 3,
- 57,163,103,129,150,247,164, 21,216,237, 14, 20,175, 25, 60, 26, 75,169,111, 53, 87, 93,107,228, 76, 9,139, 57, 69,242,236,243,
- 24, 61, 4, 7,107, 44,230,121,198, 48,244,100, 91, 45,246, 42,246,203,151, 41,101,228,130, 89, 58,197, 2,165,201,153, 14, 4,
-235,186,160,109, 91, 4, 79,162, 45,169,104, 69,216,117,109, 21,216, 5, 23,234,142,187, 20,140,226,147, 7,119,251,222,123, 38,
-199,145, 6, 64, 74, 26, 77,151,195, 4, 69,101,107, 52,182,129,115,158, 70,220,138,176,179,158, 67,110,148,146, 60, 81, 37,202,
- 91,185, 73,250,129, 20,233, 33,120, 36,182,242,118,172,186,111, 26, 74, 0,148, 82,242,129, 13,245,245, 43,185,230,193,121,116,
- 61, 77,146,180,214,172, 97, 74, 87,254, 8,223,135, 82, 82, 20,182,228,233, 17, 0, 44,203,204,175, 27,119,180, 66, 18,219,157,
-245, 73,229,177,145,153,220, 55,142, 51,135,191, 76, 88,150, 21,195, 48,212,134,129,210,243,100,213,223, 72,165, 41, 7,157,191,
- 54, 89, 29,105,236,127, 62, 95, 16, 83,224,104,220, 30, 67, 63,144,243, 43, 38,164, 16, 57, 3, 62,215, 70, 75,150,169,252,150,
- 78,185,137, 43,167, 3,219,198, 9,244,217, 6, 44, 87, 91,114,237, 78,120,103, 88,219, 81, 1,168, 59,107,126, 89,213,143, 12,
-141, 80, 82,194, 40,122, 1, 21,143,207,149,228,255,207,197,138, 16,170,252,231,138,189,136, 82,194, 40,141,221,176, 67,215, 13,
-208, 60, 6,162, 46,131,138,133, 82,234,166,168, 91, 30, 79, 91, 35,208,104, 1,171, 72,253,174, 53, 96, 24,155, 26, 82,194,135,
-227, 9,255,249,187, 87,204, 62, 65,152,134,242,202, 51,141,191,136, 58, 71,232,212,250, 2, 8,177, 17,243,189,177, 43,109, 98,
-237, 20, 7, 1, 20, 96, 64,241,164,163,210,111, 69,221,163,151,159,189, 49, 6, 77, 67, 30, 84, 58,121,107,226, 13, 43,186,112,
- 19,174,152,219, 2,128, 40,223,171,188, 97,137,163, 69,149,210,200, 89,212, 4, 57, 31, 2,229, 1, 59,135,101, 94, 49,142, 51,
-150,197,209,174,134, 73, 74,129,197, 35,249, 77,175,184,213, 55,136, 77, 70,125,141,248,172,194,184, 66,224, 99,235, 33, 63,216,
-196,246, 53,205,101,143, 45,144,149,130, 52,188, 91,111, 27, 52, 93,131,135,195, 14, 77, 78,208, 57, 96, 55, 12, 24,158, 30,160,
-122, 11,169, 20,172,233,240,111,254,239,255,128,215,203, 25, 96,104, 78,174, 7,140,173,248, 76, 94,199,112, 57,223, 76,200,111,
- 71,230,249, 54,224,224, 77,130, 96,218,132, 14, 93,245, 20,226, 26, 66,180,249,243, 58,118,191, 21,157,110, 8,131, 87,184,131,
- 16,226, 6,234,240,251, 44,118, 37, 92, 33,111,186,253,204,233,122, 6, 2,127,254,227, 63,193, 63,253,139,191,132, 76, 64,116,
- 30,235,178,214, 46,112, 94, 38, 74,251, 2,141, 12,205,102,228,234,188, 39,225, 78,219,193, 40,141,187,187,187,170,240, 37,126,
-246, 90, 11,109,223,247, 56,159,207,120, 57,190,226,231, 63,255, 57, 46,103, 2,208, 20, 85,236,233,120,194,126, 24,208,117,148,
- 35,126, 58,157, 0, 0,195,126, 7,173, 20,142,199, 35,223,207,116,223, 75, 8, 56,231, 8, 5,107, 13,132,164,132,172,182,109,
- 49,244, 59, 12,125,143, 20, 41,200,194, 40, 3,219,183,220, 9, 72,204,203,140,142, 51,217, 75, 92,103, 76, 9,146, 71,243,141,
-181, 88,157, 7,196, 53,229,143, 0, 79,158,152,222,146,180, 6,195,208,115, 92,102, 70,142, 1, 74, 0, 66, 93, 51, 38,148, 82,
- 8,209,179, 82,188, 69,211, 24,140,151, 11,237,141,119, 59, 40, 41, 96,148,194, 52,142, 80, 74,226,233,233, 9,227, 52,113,225,
- 87, 55, 32,154,190,239,107, 58, 23,120,199, 78, 34,179, 84, 11,135,115,174,198,206,230,156,106,110,196,126, 55, 96,225,221,171,
- 98,145,104,226,244,195,194, 57,151, 82,113,113, 37,102,127,199,182, 67,101, 52, 86,183,162, 31, 6, 38,196,209,100,166,105,169,
-248, 52, 77, 91, 89, 5,138, 29, 58,186,116,192,252,172, 50,214,144, 34, 33,165, 26, 89, 75,227,121,142, 43,206,168,211, 2,183,
-174, 20,199,202,226,176,242,140, 66, 6,235,103, 44,220,178,192, 26,178,126, 81,114,157, 37,239,183, 40,207, 44,226,225,211,250,
-148, 96, 61, 36,206, 20,232,186, 22, 77,219, 96,158, 73, 68,169,140,161,164,179,194,121,231, 56, 86,195, 56, 91,193,147,167,174,
-235,234,186,147,166,185,130, 86, 10, 41,209, 65, 14,130, 14,131,140,133, 37, 65, 96,168,216, 92, 74,218, 83,204,143, 15, 85,216,
- 71,196,206, 92,213,245,197,189,244,250,122,172,235, 11, 18,239,113,142,186,162,189,253, 52, 78,220,217,211, 33,201,242,228,167,
-109, 44,180, 38, 48,209,178, 44, 24,167, 17,235,178,226,241,241,137,166, 39,171,171, 66, 73,193,206,163,183, 25,143,185,118,232,
- 87, 8, 87, 25,193,191,229,171,200, 55,150,236, 26,129,142,109,214, 10, 45,110,133, 0,212,189, 53,191, 84,146,138,117, 81,161,
-151, 29,184, 4,167,164,201,107, 90, 90,121, 19,181,226,191,195,133, 87, 49, 52, 69,107, 75,136,189,182,133, 54,134,132, 46, 74,
- 87, 18, 80,161, 2,105, 45,107,192,189, 53, 10,141,145,104,141,130,149, 2, 70, 75,104, 67,197, 94, 9, 10, 63,249,238,249, 5,
-191,121, 30, 17,133, 38,213,187, 0,219, 90, 50,191,112, 36,110,168, 97, 36, 37,247,125, 83,232,202,133, 34, 4,161, 55,133,100,
- 53, 39, 68, 29,253,208,233, 74,113, 33,167, 78, 68, 42, 81, 79, 88, 82, 72, 52, 70,195, 88, 98,183, 75, 37, 56,234,175, 64, 16,
-216,203, 42,213, 77,238,112,129, 38, 4,246, 32,198, 68,160,154,178,223,117,222, 35,196,196, 5,221, 99, 26, 39, 76, 19,161, 64,
- 19, 39, 15,197, 76,153,191,180,167,202, 85, 16,119,131,197,251, 68,224,117, 5,175, 82, 17,149,181, 88,146, 23, 86,177,202,159,
-126,255,196,177,169,213,107,203, 83,139,228, 35,114, 12, 48, 70,226,126,215,225,253,227, 29,238, 15, 29,132, 34, 91, 81,119, 24,
-208,252,244,199,144,109, 3,119, 26,241,171, 95,127,141, 95,253,246, 27, 42,138, 9, 53,106,239,106, 29, 19,117,180,253, 22,142,
-115, 45,152,226,150,175,190, 9, 24,202,111,167,237, 55, 10, 83,113,163,132,207,216,230,180,231, 55,148,167, 55,161,172,219, 80,
-162,237, 87, 18,226,179,121,111, 55, 34,211,122,224,184, 38, 5,138,148,241,180, 63,224,159,255,221,223,163, 21, 10, 8, 17,129,
-195, 56, 98, 8, 88, 87,178,235,208,184,153,174, 17, 23,104,116, 76,133,219, 82,128, 6,231, 96, 23, 91,143,247, 30, 79, 79,143,
- 88, 87,135,182,109, 41,147,250, 50, 34, 1,248,233, 79,127,138,105,158, 48, 77,211,109,148,100,164,145,254,249,124,130, 15,158,
-108, 71,156,203,126, 62,159,233,160,174, 40, 40,198,106,234, 18,187,174, 5,144,113, 25, 71,188,188,188, 16, 79,193, 90,244, 93,
-143, 47,158,222,225,245,229, 21,239,191,124, 15,163, 45, 98, 78,240,129,246,222, 20, 32,163, 25,190, 19,153,153, 46,144,138,106,
- 56, 70,250, 72,169,218,117, 50,163,153,115, 78,149, 22, 70,172,123,154, 34,106, 41, 73,204, 36,101,125,240, 38,100,134,171,200,
-186, 47, 95,215, 21, 70, 73,154, 48, 2, 48, 70,227,112,216, 51, 75,125,133,181, 77,157, 74,208,131, 95,214, 14,220, 90,203, 60,
-242, 6,227, 52, 49, 16, 70,163,237,232,239,100,100,104, 46,106,130,131, 74, 4, 8, 15,186, 46, 11,233, 75,154,134,178,191,149,
-162,130,196, 76,115,173,205, 13, 85,173,132,144,152,198,194, 7, 34,215,245, 67, 15,231,121,242, 32, 69,229,172, 23,134,124,230,
-223,167, 76, 1, 5,235,124, 32,233, 89, 28, 83,160,255,135,180, 65,141, 94, 11,165,214, 10, 57, 68,182, 54,238, 43,185,109, 93,
- 87,180, 13,189,215, 52,214,119, 88, 87,135,253,129, 48,182, 70,107, 6,103,137, 27, 58,154,109, 72, 11, 97,139,123,135,211, 25,
-193,225, 57, 11, 7,176,104,182,164, 85, 30,255, 60, 67, 8,210,134, 32,101,206, 59,167,206, 29,146,106,207,202,130,203,121, 89,
-217,147, 78,122,159,138, 42,151,146,240,203, 12,166, 73,188,162, 0,255, 93,202,179, 23,181, 9, 42, 77, 75,211,118,228,166,154,
-215,106,159, 43,226, 71, 2, 47, 69, 62,124,181,240, 62, 96,158, 38,164,250, 30,170,106, 93,238,187,134, 26, 22, 22,173,158,207,
-103,238,218,123, 90,163,229,223, 29, 91, 94,237,112,165, 33,133,248,108,128, 90,190,125, 64,109,158,245,242, 83,176, 6,163,213,
-181,146,183,227,218,107,119, 87, 68,102,249,211,232,203, 26,135, 42,110, 71,189, 28, 21,170,181,174, 56, 84,205,185,234,154,247,
-180,146,223, 12,195, 7, 5,163, 5,172,150,176, 54,195, 42, 64,230, 4,101, 5,164, 74, 16, 42, 34, 5, 15, 31, 5,198, 37, 32,
- 68, 64, 40, 77, 93,102, 10, 16, 41, 67,129,224, 39,129,189,228,185,142, 47,242,213,186,198, 84,163,235,200, 84, 94, 33, 36, 28,
- 18, 35,114, 98, 0,136,134, 16, 10, 90, 10, 10,152,209,146,118,135,108,147, 83,197, 54,199,136, 87,157,104, 28,168, 64, 29,111,
-100,165,119, 65,182, 86,189, 87,181, 38,208,247,117,222,179,199, 95, 34, 68, 48, 96,129, 48,180,203,188, 98, 89, 28,188, 11,136,
-145, 58,209,152,249, 32,144, 98,205, 63,191,102,164,139, 26, 45,187,141,237,123,203, 42,223,230,150,147, 74,147,201,235, 28, 32,
- 35, 11, 9,141,125,218,215,113,118,130,204, 9, 73, 39,136, 20, 48, 8, 96, 48, 18,247,143, 59,188,127,127,143,187,161,135,247,
- 43,194,178, 64, 53, 29, 18, 18,250,222,242, 1,193,114, 82,221,149,179,158,182,156,153,124,165, 86,165,155, 36,212, 91, 13,104,
-185,198,210, 70, 30,122, 83,208, 63, 35,162,171, 83,245, 58, 86,207,127, 16, 55, 83,239,161, 92,206, 30,226, 77,120, 11, 54, 88,
-159,107,152, 17, 54,167,230, 34,184, 20, 57,163, 55, 13,254,219, 95,252,115,188,187,187, 67, 90, 61,141,147,151,133,237, 58,148,
-153,237,130, 7, 32, 48, 47, 43,141,218,187, 14, 46,120, 8,102,128,159,207,103, 72,144,160,179, 76,147,136, 54,151, 49,236,118,
-156,201,109,145, 66,196,238,254, 14,235,178,226,114,161, 36,181,210,157,121,183,226,254,241,158,166, 68,107,132, 85,154, 10,182,
- 20,184,156, 79, 88,230, 9, 90,209, 42, 9, 57, 97, 89,103,210,164,228,136,243,121, 4,164,132,148, 9,214,104, 4,239,144, 83,
-192, 60,157, 97, 52,179,197,115,134,209, 10, 13, 19,198,148,214,184,140, 23,218, 95,134, 8,169, 13, 18, 72,244, 36,121,159,173,
-181,174, 7, 91, 18,144,129,167,125, 4,254, 16,144, 8,129, 14,218, 33, 20, 27, 84,134,150, 10,107,240, 85,123, 65,221, 95,100,
-136,200, 12,203,214,173, 28, 34,118,135, 3,246,251, 29,166,105,164,238, 92, 27, 72,229,171,248, 85,137, 43, 12,165,216, 7,219,
-182,197,137, 99,106, 73, 27, 67,227,113,163,245, 53,195,164, 23,236, 0, 0, 17,119, 73, 68, 65, 84,172,100, 89,120,244, 94,198,
-192, 11,218,166,229,238, 57,242, 24, 62, 32, 7, 18,174,209, 56,127,207, 49,159,129,167,116,212,105, 74,126,143,168,184, 4, 88,
-107,170,117,182, 8,141, 27,107, 73, 75,195,192,149,200, 48, 21,173, 53,214,213,179, 29,205, 34, 70, 26, 33,211,235,139,218,101,
-134, 16,232,138,101, 44,181, 82, 18,227, 56, 17, 37,143,139,128, 15, 68, 49,235,122,192, 54, 13,156,191, 32, 35,163,235,123, 64,
- 0, 33, 6,138,145,101,177,111,209, 13, 68,239,145, 82,199,197,137, 14, 15, 33, 70, 24,107, 49, 29, 39, 60, 63,191,224,225,225,
-190,174, 84, 78,167, 19,186,174,140,231,155, 10,217,241,222, 87,251, 88, 89,231, 22,113,227,178,174, 88,221,138,174, 49,108,147,
-138,245,126, 36, 52,111,170, 7,179,156,105,178,226,220,202, 56, 94, 2, 93,197,136,122,128,110, 26,139, 97,216,177, 62,197, 87,
- 12,236,253,253, 61,190,249,230, 91, 0, 18, 33, 78,216,237,246, 85,101, 95,112,205,153,211, 6,189,247,184,191, 59, 96,156, 22,
- 92, 46, 19,124, 10,120,125,125,193, 97,191,199,187,119,143,120,126,126,102,183,195,166, 25,169, 90,173,107,125, 42, 40,114, 8,
-241, 89, 10,102,126,243,172,207,137, 87,153,169, 8,190, 5,242,198,250,171,149,150, 55, 34,170,124,157, 85,210, 73,119, 27,134,
-130, 98,165,184,182,252,219,206, 75,128, 60,177,214, 88, 24,109, 96,120, 79, 38,133,132,150, 12, 9,216,236,212,149, 96,239,187,
- 32, 32,132,231, 37,105, 0, 32,100, 66,144, 25, 58, 11,248, 40,177,122,226,167, 71,238,188, 82,200, 76,148, 99, 81, 18,179,164,
-111,206, 68,101, 60, 38,128,196,189,147,200,180,211,149, 66, 86,254, 47,193, 98, 88,184,192, 54,136,146, 24,167,180, 64,228, 40,
- 86, 33, 4,211,229,184,115,142, 9,177, 8,233, 32,233,225,195,228,184,124,131,249,147, 53,166, 85,112,222,109,241, 74,122, 31,
-249,130,242, 8, 62, 50, 4,195,115,160, 2,248,123,209, 71, 8,145, 88,241, 27,174,187,216, 56, 15, 18, 47,131,228, 27,198,253,
-214, 1, 16, 83,102,193, 26, 21, 9, 72,193,193, 53,212,244, 67, 74,228, 36,106, 36,168, 84,138,196,146, 50,163, 49, 10,187, 78,
- 97,223, 43,220,183, 10,247, 70,226,177, 49,216,189,187, 67, 82, 18,113, 93,160,108,131, 57, 56,204,211,136, 4,129,144, 37,178,
-148,136,252, 14,188,221,115,221,174,168,243, 31,166, 22,230,202,121,216,122,222, 88, 84,159,175,224,153, 82,160,171,126, 66, 84,
-151,192, 86, 53,154,243, 22,253, 46,234,154, 99,219,153, 95,255,238,213, 5,241,214, 84,151, 55,130,195,114,157, 89,161,240,139,
-191,251, 59,252,197,159,254, 41,226,188, 66, 52,192,154, 2, 66, 88,208,247, 22, 49,145, 86, 99,252,225, 7,184, 16,233,250,147,
- 18,243,186, 34,112,244, 35, 37, 73, 81,196,164, 20,146,168, 95,220,137,156,206,167, 58,182, 27, 47, 35,250, 97, 7,183,174,248,
-248,250,130, 53,120,124,249,238, 29, 94, 95,158,177,172, 11, 21, 87,102,143, 55,109, 87,167, 92,116,205,121,246, 90,211, 62,127,
- 28, 71,164,148,176,219,237,176,186,149, 70,231,193,163,111, 91, 60, 61, 61,224,227,135,143, 64,206, 56,190,190,226,112, 56,224,
-248,250, 2, 64,224,244,122,134,177, 6,251,253, 14, 66,210,110,211, 5,143, 97,183,103,177, 83, 34,125, 45,175,249,180,210,240,
-236,217,214, 90, 83,120,137,228,131, 49,191,254,116,248,165,240, 20,201,239, 41,197, 98,106,172, 43, 89,244, 40, 82, 53, 32, 4,
- 10,157,114,193, 99,104, 91, 88,219,194,218, 6,227, 56, 50, 64,197, 16, 33,108,154, 32, 4, 17,193, 40,148,133, 58,179,253,126,
- 95,223,239, 24, 2,148,214, 0,174, 44,117,197,234,235, 34,226, 19,124,232, 49,198,220,168,145, 11, 98, 54,114,106,152, 16,146,
-118,179, 72,245, 80, 45, 57,250,213,249, 80,247,218,101,116,108, 13,117,152,151,203,185, 62,131,181,102,155, 98,240,212,204,112,
- 66, 89,138, 36, 0, 4, 18, 82, 36,165,253, 82, 14, 32, 49, 85,174,186,110, 26,214, 93,152, 26, 35, 75,197, 63,214,145,183,243,
-142, 41,123, 20,149,171,141,129,243,142,214, 0,243, 4, 25, 1,221,182,200,145,214, 74,129, 39, 59, 57, 10,162,189, 13, 3,243,
- 0,174, 58, 37,165, 40,239,226,116, 58,227,225,225, 1, 41, 70,178, 89,114,178,229, 52,142,104,109, 67,186, 34, 48, 77,109,131,
-150, 45, 7,173,235,243,139,189,216, 70, 49,152, 40, 35, 73,186, 38, 96, 24,253,170, 36, 21,221,121, 69,100, 76,108,138,137,234,
- 76, 76,144,146, 56, 0,125,223, 85,140,243, 56,142, 24,134, 29,124, 8,216, 31,238,240,241,227, 75, 69,200, 22,190,202, 60, 47,
-144,146,214, 11, 5,227,186,174, 43,134, 97, 7, 41, 21, 94,158,143, 53, 94,183,239,123, 60, 60, 60,112, 18,157, 35, 39, 80,190,
- 54,119, 69, 23, 82, 38,200, 33, 38, 62, 68,223, 78, 18,197,134, 47,178,125,210,164,156, 55, 77,205, 53,107,130, 82,218, 68,190,
-229, 85,151, 24,201,250,223,168, 10,204,183, 17,235,117,238, 47,175, 15, 53,107, 27, 88, 67,106, 67,173, 12, 76,233,212,249, 34,
- 46, 44, 94,228,107, 10,155,139,137,132, 97, 5, 72, 34, 51, 32, 3,140,136,176, 2,136, 89,163,105, 15, 80, 98, 68, 72,145,226,
- 65,147, 64, 98, 47,162,132,224,131,130,124,115,194,145, 87, 68,103, 1,128, 8,108,138, 92,162, 3, 1,147,141, 8,140, 67,187,
-113,193, 66, 22, 33, 50,140,166,131,129, 81, 4,189,160,145, 27,105, 9,104,164, 75, 47,114, 8,137,199,136, 36,152, 40, 97, 46,
-165,153,203,213,178,145, 57, 96,128, 4, 78,196, 43, 38, 47,167,247, 1,222, 69, 6,143, 92,209,187, 33, 70,248, 68,187,199, 43,
-130, 23, 55, 54,176, 44, 54, 29,106,161,184,161,120,210,115,189, 56,232,193,194, 0,132, 34,182, 19, 10, 66,106, 72, 69,163, 65,
- 35, 37, 68,142,208, 82, 32,193, 65, 26, 96,232, 12,118,157,134,177, 25, 8, 35, 90,111, 32,166, 51,176, 52, 80, 95, 60, 64, 12,
- 22, 98,215,194, 30,122,188, 30, 95,161,165, 70,136, 10, 42, 73, 68,145, 89,212,118, 59, 77,200,159,233,154, 63, 91,244,111, 22,
- 82,249, 70, 76,146,147,164, 3, 92,150,159, 57, 22,136, 63,232, 53, 47, 59,170,207, 89,230,174,159,147,110,161, 18,249, 54,194,
-149,183, 93,100, 14,204, 2, 6, 18, 63,251,201,159,226,239,255,230,111, 17,151, 21,110,158, 32,145, 16,194, 2, 30, 54,193,187,
-132,243,249, 66, 34,185,232,145, 89,160,184, 46, 43,169,145,185, 64, 20, 23, 5, 69,109, 94,176, 58, 71, 2, 51, 86, 87, 91,107,
-113,184,191,195,249,114, 70, 98,161,231, 87, 95,125,133,233, 66,187, 62,199, 29,208, 56,205,252,146, 16, 66, 51,198, 12,239,137,
-195, 61, 12, 29, 21,176,149,174,193,135,135, 7, 30,159, 46,120,122,124,130,247, 52,230, 63, 29, 95, 49,142, 23,104,173,208,182,
-228,250, 56, 79, 19,114, 34,178,219, 48, 12, 80, 90,227,229,245,149, 68, 89, 77,131,166,109,113,124,125,133,110, 59,100,145,224,
-150, 21,186, 33,219, 93,219,112,226,151,214, 88,124,184,233,102, 18,135, 88,164,156, 32,181, 98,237,161, 64,112, 68, 91,203, 66,
- 64, 42, 90,187, 41, 41,113, 62,143,120,122,184,131, 18, 18, 9, 2,218, 88,124,248,248,140,199,199,187,186,190,114,108,177,235,
-186,166,146,229,202,189,154, 82, 98,208,202, 66,251, 83,169, 72, 19, 18, 2,175, 35,214,235,154,142, 71,167,229,253, 9, 33,208,
- 46,154,237,104,214, 26,204,203, 68, 15,111,206,147,167,212,220,124,115,168,140, 33, 64, 52, 45, 23,227,133, 85,211, 60, 98,103,
-161,234, 21,202,130, 58, 2, 47,133, 51,114, 80,137,148, 2,193,123, 90, 3,204,107,221,227, 35,229, 58,225, 81,155,176,144,226,
-236,161,223,119,166,164, 52, 41, 97, 53, 17,220,238, 14, 7,152,117, 33, 44,176, 53,176, 86,211,225,159, 11, 82,219, 52,112,235,
-138,196, 83,163, 98,187,148, 18,104, 27,139,105, 94,152, 85,208, 99,158,103, 24,173, 49,141, 35,134,190,175, 44,133,242,255,138,
-246,136,166, 24, 52, 21, 21, 9, 60, 97,160,204, 15, 41, 73,187, 17,124, 32,183,145,144,112, 21,180,147,170,134, 97,113, 43,118,
-251, 29,173, 74,249,231, 83, 44,238, 38, 97,155,168,200, 89, 36, 85, 17,194,165,123, 22,130, 38, 24,214, 26,126,118, 36, 10,105,
- 17, 10, 90,211,170,129,206, 29, 4, 92,154, 23,143,188,172,104,154, 22,247,247, 2,231,211, 25,222,123, 28,143, 71, 52, 77, 75,
- 19,129, 93,207,182, 53, 96, 93, 86, 98,218, 11, 65,165,174,120,219,111, 88, 49, 98,147,152,129,171, 34, 62, 95, 39,154,185,130,
-105,210, 13,234, 10,220, 52,126,158,151, 14,241, 71, 69,107, 20,176, 71, 98, 54,114,217,165, 25,109, 96,148,169, 98, 59,193, 88,
-216,171, 29, 40, 95,139, 77, 78,200, 89, 34,112,250, 87, 66, 0, 68,198,154, 2, 12,200,178,208,245,119, 24,250, 87, 44,167, 17,
- 62, 0, 33, 43, 8,150,249,231,140, 79, 10,250,118,236,172,132,102,209, 66, 81,233,167,107, 82,150, 84,164, 33,224,255, 95,148,
-176, 20,202, 64, 55,143,209, 6, 16,180, 75,179,197,123, 95,196,101, 16,136, 33, 33, 32, 80,158,242, 38,177, 39,134,192,220,247,
-130,141,189, 38, 60,133, 16, 40,119, 55,209,200, 45, 4,218, 35,122, 23,121,175, 40,234,216, 62, 68, 26,187, 69, 30,183, 92, 45,
-122, 28, 35,250, 38,255,251,118,148, 44,174, 59,245, 55,211,228, 34,136,147,176,208,170,129,182, 29,180,105,232,176,146, 34,114,
- 88,144, 69,130,130,128,230, 88, 91,129, 8, 35, 50,172, 4,180,204, 80, 26, 72,126,130, 8,134,176,189, 6,216,189,127,130, 79,
-132,229, 20, 74, 3, 41, 65,214,208,218, 63,156, 33,144, 55,177,168, 91,129,220,246, 20, 80,186,236,171,114, 93, 66,178, 83, 34,
-191, 21,193,101, 81,201, 82, 55, 20,186,173, 8, 79,252, 97, 64, 77,186,225, 61,228, 55, 66, 21, 81,109, 44, 50, 39, 60, 28,238,
-241,175,254,229,127, 15, 3,137,209,173,120,125,249,128,174,179,112,235, 2, 41, 51, 86,183, 16, 33,206,104,216,174,225, 20, 38,
-133,101,117,220, 33,210, 3,124,158,103, 70, 84,142,232,251, 30,199,243, 9,195, 48,160, 83, 18, 11, 99, 58,219,190, 33,202,128,
-164,180, 52,165, 20,190,254,250,107,156,143, 39, 52,198,162, 29, 58, 40,173, 16, 67,192, 52, 78, 53, 46, 51,112, 68,167,146,138,
-174, 97, 78,161,186,191,123, 64, 78,192,101,156,234,116, 71, 8,133,156, 50,150,197,177,106,184,199,110,183,195, 60,207,156,162,
- 8,180,187, 30, 75,116, 16, 46, 96, 90, 70,244,195,128,161,239,240,252,241, 35,117,118,129,118,237,237,126, 7,164, 12,163, 20,
- 34, 40,186,217,175, 43, 90, 75, 12,248,182,107,112, 25, 71, 86,188,231,202,104,175, 36, 48, 69,135,207,180, 58, 86, 69,147,126,
-101,157, 87,200, 39,133,215,227,153,118,236,156,205, 61, 47,107,189,151,214,149, 30,208,125,223,214, 46, 77, 73, 81,199,176, 0,
-224, 89,164, 40,149,130,247, 17,141,177, 55,196, 51,163, 27, 56, 63,177, 51, 70,215, 93,172,212, 10,113, 38,129, 84, 6,169,204,
-231,117,172, 74,116,173,205, 39,227,212,174,235,106,122, 92,212,154,184,252,193, 99,183,235,177, 27,122,222, 61,243,131, 94, 16,
-202, 52,101, 34,167, 53,182,193, 18, 22, 66,176, 42,130, 61,153,205,243, 41,132, 8,163, 45,167,148,249, 42,112, 43,207, 69,250,
- 26, 61, 70, 81, 31, 8, 16, 25, 8,171,199, 58,207,232,172,133, 95,103, 74, 63,227, 67, 84, 78,169, 10, 91, 75, 7, 77,163,120,
- 9, 37, 84,213,125, 12,253, 0,239, 2,118,195,129,166, 40,206, 65,101,212,107,160, 8,244,202,207, 91,238,201,174, 35,235,227,
- 53, 38,250,106,183,133, 16, 52,130,111,201,158,167,148,130, 95, 28,180, 33, 4,109, 98, 1,178,247, 30,141,177,104,140,197, 56,
-141,232,122, 6, 38,157,207,104,251,190, 34,172,231,121,173,171,172,113,154, 48, 78, 19, 98,202, 56, 28, 14,248,237,111,190,161,
-157,188, 18,100, 51, 6, 77, 6,178, 84, 72,160,194,223,117, 77, 85,195,143,227, 68, 48,178,135, 7,172, 51, 57, 43,214,197,193,
-173, 43,251,228, 9, 29,220,182, 45,172,181, 24,231, 5,142,147,251, 74, 32, 80,105, 12, 69,153,234,110,104,153, 41, 3, 49,225,
-134,158,153,111,160, 94,185,174,202,213, 99,107,126, 41, 54,162,160,237,135, 20,146,189,117, 37,156,228,119, 61,136,233,115,181,
- 50, 24,134, 61,186,118,128, 49, 77, 29,189,151,177, 61,237, 3, 82,197,181,222, 32, 62,217,115,142,140,122, 34, 47,138,122, 72,
-130,242, 11, 9, 28,199, 9,107,200,200, 82, 67, 72,195, 86,128,171,117,173,124,148, 11,133, 78,210,234, 42, 10, 19,183,161, 27,
-114,227, 73, 47,150, 21,129, 4, 37,169,168, 55,214, 64, 40,130, 54, 88, 62,164,208,196,129,227,101,243,213, 46, 22, 67, 68, 98,
- 88, 2, 54, 39, 43,200,114, 51,144,133, 41, 4,234,196, 83,202,112, 43,141,221, 99, 76,240, 28,243,152, 34,174, 60,246, 24,217,
- 43,154,106,193, 18,159,141, 11,205,213,147,122, 77, 71,147, 87,101, 56, 54,250,135,124,181,149,145, 99,192, 66,155, 22, 74,119,
-144,138, 79,199, 33, 32,121, 15, 32,226,208, 26,188,127, 56,224, 71, 95,189,195,251,119,247,248,179, 47,223,225,221,195, 30,135,
-135, 29,204,190,133,106, 13,132, 17, 16, 74, 67,180, 45, 36, 52,254,183,255,233,127,197,175,126,251, 1, 43, 52,162,224, 72,220,
- 98, 23, 17, 21,113,240,230,148,121,251, 81,166, 13, 69,189,143, 92,148,160,226, 54,209, 45,179, 48,173, 96, 94, 75, 98, 93,254,
-252, 36,224, 58,117,202,117, 55, 47,110,246, 87,216,184, 7,176,113, 43,108,195,135, 80,157, 4,153,175, 55,228, 12,145, 50,118,
- 77,135,127,249,139,127,129, 31, 63,190,195,124, 57,227,229,249, 35,140, 81, 24,167, 17,211, 60, 50,222,212,192,167,136, 44, 4,
- 66, 76,128, 32, 80,201,234, 28,180,214,245, 97, 95,214, 98, 77, 67,150,165,195,221,158,186,206,148, 96,155, 6, 33, 6,122, 24,
-197,132,213, 81, 23, 42, 20,225, 95,165,148,248,226,139, 47,144,145,177,122,122,184, 4, 31,216, 34,229,107,242, 90,121, 29,215,
-149, 45, 61, 16,112, 62, 18, 46,181,235,209,182, 61,130,247, 56,159, 78,117,183,173,141,134,143,212,201,167,156,176,219,239,224,
- 82,196,188, 46,152,215,133,186, 37, 37,177,172, 11,142,199, 87,104, 41,235, 61, 31,188,231,180, 47,133,213,205,176,134,136, 96,
- 5, 2, 37,144, 9,120,196,197, 78,148, 45, 74,142,124,201, 83, 54,250,178,146,208, 44, 35, 35,167, 88, 11,226,178,174,144, 82,
-225,238,110,127, 85,130,107,141,121,166,232, 90, 89,129, 41, 60, 43, 76,153, 0, 53,125, 71,157, 46, 71,222,114,107, 13,195, 16,
- 31, 33, 9, 29,157, 65,241,168,164, 66,215,213, 73, 83,120,226, 69, 60,214,245, 61,214, 98, 15,211,154, 50,210,185, 51,163,130,
- 70,191,119,215,209,174, 57,179,174,165,140,247, 1, 48,201,236,218,205, 85,165, 58, 50,145,245,120,103,107,180,102,145, 30, 29,
-216,148,148,112,139,171,201,144,137, 85,241, 21, 89,204, 13, 76,215,181, 8, 33,144,227, 64, 40,158,218,209,149,110, 25,150, 19,
- 24,160,163,164,130, 91, 87, 42,202,193, 19, 74,149, 19, 42,131,167,209,190,210, 10,203, 60,195, 88, 11,173,136,160,105,173,198,
-229,114,225,230, 73,162,105, 73,116, 88, 18,198, 80, 66,118,184,192,229,146, 17,194, 19,201,204, 16, 26,193,252,116,195, 2,236,
-101, 93,107,129,166,189,188,132,243,174, 30,214,140,210,200,153,226,121,155,166, 67,224,213,165,226,137, 88,240,177,238,245,207,
-231, 11, 82,206,152,231, 5, 67,191, 71,223, 15, 85, 96, 55,142,172,199, 16, 18,109,219, 1, 60,105,157,166,137,213,248,244,122,
-142, 35, 9,234,138, 37,211, 90,131,204,135,197,192, 66, 72,210, 13, 88, 52,109,139,149,215, 58,197, 82, 28, 82, 98,141,134,216,
-216,196,137,151, 86, 86,190, 37, 46,187, 88,121,183, 83,115, 5,176, 22,172,140,208, 83, 9,113,231,157,247,198,130,180,141,202,
-124,171, 2, 22,130, 71,223, 41, 67,102, 64, 11, 69,254, 71,149, 17,101, 66, 20, 17, 73,144,192,203, 39,207,227,233, 72,208,131,
- 68, 35, 83,145, 20,141,208,217, 59,105,180, 70, 99, 12,172,105, 96,218, 6,182,213, 24, 58,131,119, 79, 15,120,188,219, 67,203,
- 4, 45, 2, 4, 60,241,215,114,134, 72,180,115, 47, 80,138, 50, 94,174,187, 47, 73, 16,147,200,177,163,108,194, 7, 74,232,188,
- 40, 49,125, 44,118,210, 18,210, 40, 72,163, 33,165,134,210, 22, 82,107, 64,169,234,217,143, 57, 19,242, 82, 40,164,204,249,232,
- 41, 87, 65, 91,228, 66, 32,179, 0,146, 68,138,132,158,141, 81, 32, 37, 9,183, 4,172, 46,194, 39,129,144, 4, 34, 20, 34,138,
- 6,128,196,107, 73,210,206, 62,229,171, 34,253,102, 74,146,232,107, 3,148, 36,151,178, 64, 68, 70, 20,244,218,103,145, 64, 47,
- 7, 3,132, 50, 29, 88, 84,193,231, 18, 85, 7, 89, 88, 36, 24,190,193,103,196,117,134, 76, 1,143,125,139,175,190,120,192,211,
-227, 29, 84,142, 88,214, 25, 31,221,140,179, 86,152, 97,144, 85, 11,217,239, 33,146, 70,158, 86,164,121,132,105, 12,254,236, 79,
-254, 4, 26, 30, 90, 80,122,148,204,134,126,247,242, 61, 33,160, 75,176,174, 84,200,194, 80,140, 46,120,157,145, 18,151,208,128,
- 4,135, 44, 19,146, 76, 52,198, 71, 68, 74,225,170,172,231,196,185,196,193, 7,101, 52, 46,106,104, 93,186, 73,237,170, 54, 38,
-102, 44, 40,113,245,121, 42,153, 33, 69, 2,178, 71, 78, 1, 25, 1, 33,251, 13,124, 73,114, 49,167,157, 83,226,175, 77, 19, 15,
- 5, 35, 52,254,250,159,252, 37,254,171,159,253, 20,110,190, 32,186, 21, 50, 1,211, 56, 99,154,102,248,156,176, 6,250, 72, 41,
-227,114,185,208, 94, 48,210,184,145, 30, 6,182, 30, 74,250,190,131, 0,101, 13,164,224, 17,125,192,235,203, 11,166,121,198,101,
- 36, 96,141,177, 13, 46,211,136,253,221, 1,243, 74,177,144,198, 24, 60, 62, 61, 2,146,246,195, 41, 68,204,211,140,182, 37, 94,
-121, 10,129, 40,138, 26,184,123, 60,224,114,161,238,182,235, 26,184,117, 1, 88, 28, 42, 36, 16,130,131,243, 43, 66, 10, 8, 57,
- 2, 90, 98,114, 51,198,101, 70, 18, 2,237, 48, 96, 13, 1,211,116, 70, 12, 30,214, 42, 40,171,240,114, 58,226, 52,158,161, 27,
- 13,105, 21,148, 81,152,166,153, 14, 65, 90, 19,165, 80,102,172,110, 66,206,180,130,176, 70, 99, 93,103, 88,171,209, 53, 6,119,
- 93,135, 94, 73,116,146, 24, 22, 86, 11,208, 51, 57,161,233, 44,144, 35,180, 68,157,134, 93,198, 5,128,134,115,180,207,151,138,
- 58,118, 31, 51,230,197,195,135, 8,109, 13,197,195,102, 9,153, 37,214,133, 2,112,164, 49,152,220, 2,159, 60,164, 85,240,209,
- 65, 42,114,202, 16,226,148,214, 0,228,139,151,168,167, 13, 65,197, 55, 33, 35, 75, 81, 15,224,193,123,244,173, 5, 16, 97, 12,
-233, 39,200,117, 67,207,157,152, 57, 40, 70,210, 53, 45, 9, 18, 2,205,157,108,103, 27, 68,231,209, 54,154, 52, 0,252,220, 81,
-202,208, 20, 35, 11, 88,169,208,106,139, 28,129,198, 16,254,182,181, 13, 36, 8,115, 90,108,127,133, 20,103,141, 65,103, 27, 40,
-242, 24, 2, 41, 65, 11, 3, 45, 45,173, 15, 83, 70, 74, 2,211,228,224,214,128,174,221, 33, 39,129,224, 51,148, 52,136, 1, 80,
-176, 8, 46, 67, 9, 42,226,182,209,208,141,130, 79, 1,182,109, 17, 65,236, 5, 72, 64,106,129,197,173,184,123,188,131,207, 1,
- 33, 5,100,102,113,148, 28,244,105, 93,176,186,192, 1, 62, 1,128,134, 98, 60,109, 78,168, 90, 44, 8, 1,101,168, 51,118,158,
-106, 73,146, 9, 73,102,248,228,153,234, 70,214,230,243, 56, 97,241, 17, 80, 26, 66,107,172,193, 67,107, 11, 64, 65,106, 3, 41,
- 8, 79, 11, 33, 49,205, 43,229,107,204,116, 24, 36,162,163, 36, 26,157, 0, 30,239, 30,112, 55,236,145, 99,194,249,120, 68,219,
-118, 48,218, 2, 17,152,206, 23,248,121, 5,144, 41, 27, 0, 25,243,124,193, 52,157, 0,153, 48, 28,122,220, 31, 14,232,154,166,
-106,201,166,113,132, 72, 17,119,187, 1,217,123, 8, 14, 53, 66, 12, 92,131, 55,154,168,196,200,240, 44,160,202, 63, 82, 65, 75,
- 69, 58, 53, 81, 62, 72, 80, 41,132,192,255, 7, 3,238,150, 17, 62,123,156,230, 0, 0, 0, 0, 73, 69, 78, 68,174, 66, 96,130,
+137, 80, 78, 71, 13, 10, 26, 10, 0, 0, 0, 13, 73, 72, 68, 82, 0, 0, 1,245, 0, 0, 1, 26, 8, 6, 0,
+ 0, 0, 8, 90,206, 70, 0, 0, 0, 9,112, 72, 89,115, 0, 0, 11, 19, 0, 0, 11, 19, 1, 0,154,156, 24, 0, 0, 10, 79,105,
+ 67, 67, 80, 80,104,111,116,111,115,104,111,112, 32, 73, 67, 67, 32,112,114,111,102,105,108,101, 0, 0,120,218,157, 83,103, 84,
+ 83,233, 22, 61,247,222,244, 66, 75,136,128,148, 75,111, 82, 21, 8, 32, 82, 66,139,128, 20,145, 38, 42, 33, 9, 16, 74,136, 33,
+161,217, 21, 81,193, 17, 69, 69, 4, 27,200,160,136, 3,142,142,128,140, 21, 81, 44, 12,138, 10,216, 7,228, 33,162,142,131,163,
+136,138,202,251,225,123,163,107,214,188,247,230,205,254,181,215, 62,231,172,243,157,179,207, 7,192, 8, 12,150, 72, 51, 81, 53,
+128, 12,169, 66, 30, 17,224,131,199,196,198,225,228, 46, 64,129, 10, 36,112, 0, 16, 8,179,100, 33,115,253, 35, 1, 0,248,126,
+ 60, 60, 43, 34,192, 7,190, 0, 1,120,211, 11, 8, 0,192, 77,155,192, 48, 28,135,255, 15,234, 66,153, 92, 1,128,132, 1,192,
+116,145, 56, 75, 8,128, 20, 0, 64,122,142, 66,166, 0, 64, 70, 1,128,157,152, 38, 83, 0,160, 4, 0, 96,203, 99, 98,227, 0,
+ 80, 45, 0, 96, 39,127,230,211, 0,128,157,248,153,123, 1, 0, 91,148, 33, 21, 1,160,145, 0, 32, 19,101,136, 68, 0,104, 59,
+ 0,172,207, 86,138, 69, 0, 88, 48, 0, 20,102, 75,196, 57, 0,216, 45, 0, 48, 73, 87,102, 72, 0,176,183, 0,192,206, 16, 11,
+178, 0, 8, 12, 0, 48, 81,136,133, 41, 0, 4,123, 0, 96,200, 35, 35,120, 0,132,153, 0, 20, 70,242, 87, 60,241, 43,174, 16,
+231, 42, 0, 0,120,153,178, 60,185, 36, 57, 69,129, 91, 8, 45,113, 7, 87, 87, 46, 30, 40,206, 73, 23, 43, 20, 54, 97, 2, 97,
+154, 64, 46,194,121,153, 25, 50,129, 52, 15,224,243,204, 0, 0,160,145, 21, 17,224,131,243,253,120,206, 14,174,206,206, 54,142,
+182, 14, 95, 45,234,191, 6,255, 34, 98, 98,227,254,229,207,171,112, 64, 0, 0,225,116,126,209,254, 44, 47,179, 26,128, 59, 6,
+128,109,254,162, 37,238, 4,104, 94, 11,160,117,247,139,102,178, 15, 64,181, 0,160,233,218, 87,243,112,248,126, 60, 60, 69,161,
+144,185,217,217,229,228,228,216, 74,196, 66, 91, 97,202, 87,125,254,103,194, 95,192, 87,253,108,249,126, 60,252,247,245,224,190,
+226, 36,129, 50, 93,129, 71, 4,248,224,194,204,244, 76,165, 28,207,146, 9,132, 98,220,230,143, 71,252,183, 11,255,252, 29,211,
+ 34,196, 73, 98,185, 88, 42, 20,227, 81, 18,113,142, 68,154,140,243, 50,165, 34,137, 66,146, 41,197, 37,210,255,100,226,223, 44,
+251, 3, 62,223, 53, 0,176,106, 62, 1,123,145, 45,168, 93, 99, 3,246, 75, 39, 16, 88,116,192,226,247, 0, 0,242,187,111,193,
+212, 40, 8, 3,128,104,131,225,207,119,255,239, 63,253, 71,160, 37, 0,128,102, 73,146,113, 0, 0, 94, 68, 36, 46, 84,202,179,
+ 63,199, 8, 0, 0, 68,160,129, 42,176, 65, 27,244,193, 24, 44,192, 6, 28,193, 5,220,193, 11,252, 96, 54,132, 66, 36,196,194,
+ 66, 16, 66, 10,100,128, 28,114, 96, 41,172,130, 66, 40,134,205,176, 29, 42, 96, 47,212, 64, 29, 52,192, 81,104,134,147,112, 14,
+ 46,194, 85,184, 14, 61,112, 15,250, 97, 8,158,193, 40,188,129, 9, 4, 65,200, 8, 19, 97, 33,218,136, 1, 98,138, 88, 35,142,
+ 8, 23,153,133,248, 33,193, 72, 4, 18,139, 36, 32,201,136, 20, 81, 34, 75,145, 53, 72, 49, 82,138, 84, 32, 85, 72, 29,242, 61,
+114, 2, 57,135, 92, 70,186,145, 59,200, 0, 50,130,252,134,188, 71, 49,148,129,178, 81, 61,212, 12,181, 67,185,168, 55, 26,132,
+ 70,162, 11,208,100,116, 49,154,143, 22,160,155,208,114,180, 26, 61,140, 54,161,231,208,171,104, 15,218,143, 62, 67,199, 48,192,
+232, 24, 7, 51,196,108, 48, 46,198,195, 66,177, 56, 44, 9,147, 99,203,177, 34,172, 12,171,198, 26,176, 86,172, 3,187,137,245,
+ 99,207,177,119, 4, 18,129, 69,192, 9, 54, 4,119, 66, 32, 97, 30, 65, 72, 88, 76, 88, 78,216, 72,168, 32, 28, 36, 52, 17,218,
+ 9, 55, 9, 3,132, 81,194, 39, 34,147,168, 75,180, 38,186, 17,249,196, 24, 98, 50, 49,135, 88, 72, 44, 35,214, 18,143, 19, 47,
+ 16,123,136, 67,196, 55, 36, 18,137, 67, 50, 39,185,144, 2, 73,177,164, 84,210, 18,210, 70,210,110, 82, 35,233, 44,169,155, 52,
+ 72, 26, 35,147,201,218,100,107,178, 7, 57,148, 44, 32, 43,200,133,228,157,228,195,228, 51,228, 27,228, 33,242, 91, 10,157, 98,
+ 64,113,164,248, 83,226, 40, 82,202,106, 74, 25,229, 16,229, 52,229, 6,101,152, 50, 65, 85,163,154, 82,221,168,161, 84, 17, 53,
+143, 90, 66,173,161,182, 82,175, 81,135,168, 19, 52,117,154, 57,205,131, 22, 73, 75,165,173,162,149,211, 26,104, 23,104,247,105,
+175,232,116,186, 17,221,149, 30, 78,151,208, 87,210,203,233, 71,232,151,232, 3,244,119, 12, 13,134, 21,131,199,136,103, 40, 25,
+155, 24, 7, 24,103, 25,119, 24,175,152, 76,166, 25,211,139, 25,199, 84, 48, 55, 49,235,152,231,153, 15,153,111, 85, 88, 42,182,
+ 42,124, 21,145,202, 10,149, 74,149, 38,149, 27, 42, 47, 84,169,170,166,170,222,170, 11, 85,243, 85,203, 84,143,169, 94, 83,125,
+174, 70, 85, 51, 83,227,169, 9,212,150,171, 85,170,157, 80,235, 83, 27, 83,103,169, 59,168,135,170,103,168,111, 84, 63,164,126,
+ 89,253,137, 6, 89,195, 76,195, 79, 67,164, 81,160,177, 95,227,188,198, 32, 11, 99, 25,179,120, 44, 33,107, 13,171,134,117,129,
+ 53,196, 38,177,205,217,124,118, 42,187,152,253, 29,187,139, 61,170,169,161, 57, 67, 51, 74, 51, 87,179, 82,243,148,102, 63, 7,
+227,152,113,248,156,116, 78, 9,231, 40,167,151,243,126,138,222, 20,239, 41,226, 41, 27,166, 52, 76,185, 49,101, 92,107,170,150,
+151,150, 88,171, 72,171, 81,171, 71,235,189, 54,174,237,167,157,166,189, 69,187, 89,251,129, 14, 65,199, 74, 39, 92, 39, 71,103,
+143,206, 5,157,231, 83,217, 83,221,167, 10,167, 22, 77, 61, 58,245,174, 46,170,107,165, 27,161,187, 68,119,191,110,167,238,152,
+158,190, 94,128,158, 76,111,167,222,121,189,231,250, 28,125, 47,253, 84,253,109,250,167,245, 71, 12, 88, 6,179, 12, 36, 6,219,
+ 12,206, 24, 60,197, 53,113,111, 60, 29, 47,199,219,241, 81, 67, 93,195, 64, 67,165, 97,149, 97,151,225,132,145,185,209, 60,163,
+213, 70,141, 70, 15,140,105,198, 92,227, 36,227,109,198,109,198,163, 38, 6, 38, 33, 38, 75, 77,234, 77,238,154, 82, 77,185,166,
+ 41,166, 59, 76, 59, 76,199,205,204,205,162,205,214,153, 53,155, 61, 49,215, 50,231,155,231,155,215,155,223,183, 96, 90,120, 90,
+ 44,182,168,182,184,101, 73,178,228, 90,166, 89,238,182,188,110,133, 90, 57, 89,165, 88, 85, 90, 93,179, 70,173,157,173, 37,214,
+187,173,187,167, 17,167,185, 78,147, 78,171,158,214,103,195,176,241,182,201,182,169,183, 25,176,229,216, 6,219,174,182,109,182,
+125, 97,103, 98, 23,103,183,197,174,195,238,147,189,147,125,186,125,141,253, 61, 7, 13,135,217, 14,171, 29, 90, 29,126,115,180,
+114, 20, 58, 86, 58,222,154,206,156,238, 63,125,197,244,150,233, 47,103, 88,207, 16,207,216, 51,227,182, 19,203, 41,196,105,157,
+ 83,155,211, 71,103, 23,103,185,115,131,243,136,139,137, 75,130,203, 46,151, 62, 46,155, 27,198,221,200,189,228, 74,116,245,113,
+ 93,225,122,210,245,157,155,179,155,194,237,168,219,175,238, 54,238,105,238,135,220,159,204, 52,159, 41,158, 89, 51,115,208,195,
+200, 67,224, 81,229,209, 63, 11,159,149, 48,107,223,172,126, 79, 67, 79,129,103,181,231, 35, 47, 99, 47,145, 87,173,215,176,183,
+165,119,170,247, 97,239, 23, 62,246, 62,114,159,227, 62,227, 60, 55,222, 50,222, 89, 95,204, 55,192,183,200,183,203, 79,195,111,
+158, 95,133,223, 67,127, 35,255,100,255,122,255,209, 0,167,128, 37, 1,103, 3,137,129, 65,129, 91, 2,251,248,122,124, 33,191,
+142, 63, 58,219,101,246,178,217,237, 65,140,160,185, 65, 21, 65,143,130,173,130,229,193,173, 33,104,200,236,144,173, 33,247,231,
+152,206,145,206,105, 14,133, 80,126,232,214,208, 7, 97,230, 97,139,195,126, 12, 39,133,135,133, 87,134, 63,142,112,136, 88, 26,
+209, 49,151, 53,119,209,220, 67,115,223, 68,250, 68,150, 68,222,155,103, 49, 79, 57,175, 45, 74, 53, 42, 62,170, 46,106, 60,218,
+ 55,186, 52,186, 63,198, 46,102, 89,204,213, 88,157, 88, 73,108, 75, 28, 57, 46, 42,174, 54,110,108,190,223,252,237,243,135,226,
+157,226, 11,227,123, 23,152, 47,200, 93,112,121,161,206,194,244,133,167, 22,169, 46, 18, 44, 58,150, 64, 76,136, 78, 56,148,240,
+ 65, 16, 42,168, 22,140, 37,242, 19,119, 37,142, 10,121,194, 29,194,103, 34, 47,209, 54,209,136,216, 67, 92, 42, 30, 78,242, 72,
+ 42, 77,122,146,236,145,188, 53,121, 36,197, 51,165, 44,229,185,132, 39,169,144,188, 76, 13, 76,221,155, 58,158, 22,154,118, 32,
+109, 50, 61, 58,189, 49,131,146,145,144,113, 66,170, 33, 77,147,182,103,234,103,230,102,118,203,172,101,133,178,254,197,110,139,
+183, 47, 30,149, 7,201,107,179,144,172, 5, 89, 45, 10,182, 66,166,232, 84, 90, 40,215, 42, 7,178,103,101, 87,102,191,205,137,
+202, 57,150,171,158, 43,205,237,204,179,202,219,144, 55,156,239,159,255,237, 18,194, 18,225,146,182,165,134, 75, 87, 45, 29, 88,
+230,189,172,106, 57,178, 60,113,121,219, 10,227, 21, 5, 43,134, 86, 6,172, 60,184,138,182, 42,109,213, 79,171,237, 87,151,174,
+126,189, 38,122, 77,107,129, 94,193,202,130,193,181, 1,107,235, 11, 85, 10,229,133,125,235,220,215,237, 93, 79, 88, 47, 89,223,
+181, 97,250,134,157, 27, 62, 21,137,138,174, 20,219, 23,151, 21,127,216, 40,220,120,229, 27,135,111,202,191,153,220,148,180,169,
+171,196,185,100,207,102,210,102,233,230,222, 45,158, 91, 14,150,170,151,230,151, 14,110, 13,217,218,180, 13,223, 86,180,237,245,
+246, 69,219, 47,151,205, 40,219,187,131,182, 67,185,163,191, 60,184,188,101,167,201,206,205, 59, 63, 84,164, 84,244, 84,250, 84,
+ 54,238,210,221,181, 97,215,248,110,209,238, 27,123,188,246, 52,236,213,219, 91,188,247,253, 62,201,190,219, 85, 1, 85, 77,213,
+102,213,101,251, 73,251,179,247, 63,174,137,170,233,248,150,251,109, 93,173, 78,109,113,237,199, 3,210, 3,253, 7, 35, 14,182,
+215,185,212,213, 29,210, 61, 84, 82,143,214, 43,235, 71, 14,199, 31,190,254,157,239,119, 45, 13, 54, 13, 85,141,156,198,226, 35,
+112, 68,121,228,233,247, 9,223,247, 30, 13, 58,218,118,140,123,172,225, 7,211, 31,118, 29,103, 29, 47,106, 66,154,242,154, 70,
+155, 83,154,251, 91, 98, 91,186, 79,204, 62,209,214,234,222,122,252, 71,219, 31, 15,156, 52, 60, 89,121, 74,243, 84,201,105,218,
+233,130,211,147,103,242,207,140,157,149,157,125,126, 46,249,220, 96,219,162,182,123,231, 99,206,223,106, 15,111,239,186, 16,116,
+225,210, 69,255,139,231, 59,188, 59,206, 92,242,184,116,242,178,219,229, 19, 87,184, 87,154,175, 58, 95,109,234,116,234, 60,254,
+147,211, 79,199,187,156,187,154,174,185, 92,107,185,238,122,189,181,123,102,247,233, 27,158, 55,206,221,244,189,121,241, 22,255,
+214,213,158, 57, 61,221,189,243,122,111,247,197,247,245,223, 22,221,126,114, 39,253,206,203,187,217,119, 39,238,173,188, 79,188,
+ 95,244, 64,237, 65,217, 67,221,135,213, 63, 91,254,220,216,239,220,127,106,192,119,160,243,209,220, 71,247, 6,133,131,207,254,
+145,245,143, 15, 67, 5,143,153,143,203,134, 13,134,235,158, 56, 62, 57, 57,226, 63,114,253,233,252,167, 67,207,100,207, 38,158,
+ 23,254,162,254,203,174, 23, 22, 47,126,248,213,235,215,206,209,152,209,161,151,242,151,147,191,109,124,165,253,234,192,235, 25,
+175,219,198,194,198, 30,190,201,120, 51, 49, 94,244, 86,251,237,193,119,220,119, 29,239,163,223, 15, 79,228,124, 32,127, 40,255,
+104,249,177,245, 83,208,167,251,147, 25,147,147,255, 4, 3,152,243,252, 99, 51, 45,219, 0, 0, 0, 32, 99, 72, 82, 77, 0, 0,
+122, 37, 0, 0,128,131, 0, 0,249,255, 0, 0,128,233, 0, 0,117, 48, 0, 0,234, 96, 0, 0, 58,152, 0, 0, 23,111,146, 95,
+197, 70, 0, 3, 72,230, 73, 68, 65, 84,120,218,236,253,121,152,109,217, 89,222, 9,254,214, 90,123, 56,251, 76, 49, 71,220, 49,
+103, 73, 41, 52, 66, 74,128,177,193,137,157, 52, 5, 24, 99, 99,167,120,112,151,241,227, 1,169,202,213, 3,174,110, 36,185,203,
+213,118, 85, 25,131,178,236,198,116,217, 84,145, 6,187, 41,219,101,140,192,216,198, 54, 96, 37, 34, 65, 18,160, 33, 65,179,114,
+188,202,241,222, 27,115,196, 25,247,176,134,254, 99,173,125,134,184,113,111, 14,202, 76, 33,113,190,124, 78,198,141,136, 19,231,
+236,125,246,218,235,253,134,247,123, 63,225,156, 99, 97, 11, 91,216,194, 22,182,176,133,125,229,155, 92,124, 4, 11, 91,216,194,
+ 22,182,176,133, 45, 64,125, 97, 11, 91,216,194, 22,182,176,133, 45, 64,125, 97, 11, 91,216,194, 22,182,176,133, 45, 64,125, 97,
+ 11, 91,216,194, 22,182,176,133, 45, 64,125, 97, 11, 91,216,194, 22,182,176, 5,168, 47,108, 97, 11, 91,216,194, 22,182,176, 63,
+240, 22, 93,239, 23, 66,136, 87,226,253,234, 23, 77,129,155,164, 68, 90,203,211,192, 40,252,238,101,235,175, 91,180,234, 45,108,
+ 97, 11, 91,216,194, 22,160,254,202,153, 0,132,148,226,182,191,249,231,222,252,119,239,253,134, 91,255, 68, 20, 9,245,239, 63,
+241,212,135,255,206,207,125,242,127, 44,181,125,232,229, 6,246,133, 45,108, 97, 11, 91,216,194,254, 48,153,184, 94, 68,251, 10,
+ 68,234, 2, 72,254,155,239,124,221,255,242,143,190,255,141, 63,232, 14,135,208, 89, 66,108,172,242, 27,159,124,234,210, 15,254,
+227, 15,253,205, 39,174,244,127, 9,208,117,176,189,136,212, 23,182,176,133, 45,108, 97, 11,123,225,246,106,214,212, 5,144,102,
+213,176,195,149, 39, 25, 95,121,134,209,227, 95, 96,244,232, 99,124,235, 27, 46,220,246, 91, 63,250, 61, 63,251, 93,111,191,248,
+183,128,149, 0,232, 98,113,121, 22,182,176,133, 45,108, 97, 11,251,131, 9,234, 0,226,199,127,253,217,159,254,199, 31,223,251,
+100,115,165, 65,164, 4,118,247, 10,163,135, 63,199,217, 44,110,252,251,255,254, 79,253,191,255,187,239,123,235, 63, 17,130,215,
+ 44,128,125, 97, 11, 91,216,194, 22,182,176, 23, 9,178,175,114,250,189, 1, 44, 3,111,248,175,254,216,230, 15,253,131,239,188,
+240, 93,169,134,113, 81, 33,211, 6,209,205,119,144,108,110,240, 75, 31,126,248, 51,127,253, 39, 63,244,158,171,135,227,255, 12,
+ 88, 94, 66, 42,126,145,126, 95,216,194, 22,182,176,133, 45, 64,253,149, 3,245, 89, 96, 95, 2, 46,252,177, 59, 58,127,233, 95,
+124,255,109,127,237,230, 44,106,140, 70, 21, 40,133, 60,119, 11,141,139, 23,121,226,242,126,239, 93,255,232,193, 31,253,245, 79,
+ 62,247,147, 64,191,198,234,151, 3,212, 95,161,115,195, 57,119, 23,190,124, 0,112, 73, 8,113,233,171,121,241,252, 97, 59,223,
+133,125,213,172,219,197,135,176,176, 5,168,191,204, 38,129, 46,176,117,166, 27,253,233,127,253,151,110,255,111,255,216,153,214,
+153,124,108, 0,139,216,186, 64,118,211,173,148,206,242,255,252,103, 31,249,223,255,151,127,247,153,191, 5, 60,195,139, 96,199,
+ 63,207,141,123, 91,120,188, 16, 59, 20, 66, 60,244, 2,223,243, 3,192, 61,225,219,247, 10, 33,222,247, 85,190, 57,126, 85,156,
+111,112, 78,238, 9, 14,202, 93, 51,191,122, 8,184, 4,188, 95, 8,113,248, 50,188,207,201,215,231,229, 94,131,215,188,231,125,
+119,191,184,181,254,238, 7, 31,226,171,220, 22,160,190,176,175,102,123,169, 45,109, 18,159, 22,239,172,181,227, 55,173,181,162,
+ 53,235,166, 94,128, 8,255, 19, 66, 8, 87,255, 68,212, 63,159,252, 54, 2,154,149,113,227,191,241,159,118,126,245, 31,254,153,
+139,127,230,155, 54, 91,203,101,229,224,112,159,188,217, 38, 94,219,226,255,251,174,187,127,224,174, 59,182, 94,247, 67, 63,245,
+ 91, 63,124, 52, 40, 63,204,203,211,246,118, 47,240, 99, 47,114, 19,120, 63,240,128, 16,226,254,197,178,249,170,201, 50,220, 27,
+ 30,215, 3,189,218, 97,249, 41,231,220,253,193,113,249, 82,192,253, 46,224, 3, 47,225,239, 30, 0,190,237, 85, 89,235,247,221,
+ 61, 93,235,239,126,240, 85, 91,235,238,190,187,231,179, 62,239,126,112,145,245, 89,216,194, 94, 37, 80, 23,128,104,165,234,174,
+191,251, 29, 55,255,189,239,127,203,230,221, 75, 89,156, 88, 33, 61, 96, 75,233, 31, 66, 32, 34, 53,247, 61, 82, 34,148,154,126,
+ 47,252,239, 44,194, 85, 78, 88, 29, 69,200,153,215,209,166,194,142, 5,127,233,219,222,248, 13, 95,123,199,198, 47,254,213, 31,
+127,224,111,127,226,209,221,127, 6, 20,188,250,253,236,247, 2,247, 58,231,238, 5,222,241,114, 68,110, 11,251,178,218, 39, 94,
+228,243,223, 9,220,227,156,123,199, 75,141,154,191,130,204,175,245,251,238,246,107,253,221, 15,190, 26,107,253,199,102,156,168,
+247, 2,239, 91, 44,209,133, 45,236,213,139,212, 55,238,251,238, 91,127,252,175,127,211,249,111, 46, 71, 22,103, 5, 74, 10, 31,
+192, 59,225, 31, 72,132, 21, 30,122, 29, 32,133,143,237,173, 3, 21,210,251,210,255, 78, 9, 33, 34, 41,212, 36, 45, 38,234,191,
+115, 88, 33, 40, 70, 37,111,190,121,115,227, 3,127,239,123,255,209, 95,255,201,223,120,205,191,250,224,163, 63, 10,236,242,242,
+137,213, 60,112,131,223,221,115,202,247, 31,112,206,125,219, 2,216,191,106,236,161, 16,157, 62, 36,132,120, 32, 68,242, 43,225,
+ 90,191,115,102, 13,220, 6,252,188,115,238,109, 47,211,181,191, 31,159,222,127, 62,123, 57,215,217,139, 95,235,247,221,253,109,
+175, 18,176, 47,108, 97, 11,251,114, 68,234,105, 44,111,251, 83,175, 95,121,187, 27, 86, 84,121, 1,214,122,144,158,100,214,235,
+120, 94, 76,113, 87, 73,228,218,102, 0,119,139,144,128, 13, 89,124, 1, 19,132,151,214, 3,191,148, 96, 0,229, 95,162, 44, 42,
+150,146, 68,254, 31,239,254,206,191,241,246,215,157,121,211,223,252,233,143,188,187,168,204, 39, 95, 14, 96, 23, 66,220, 48,181,
+ 25,162,243, 31, 99,154,166,189, 43,108,246,139,104,226, 43,219,238, 7,238, 63, 45,242, 14,160,253,126,224,253,206,185,159, 10,
+215,187, 6,246,151,235,218,191,191,118, 34, 94, 45, 19,239,126,240,198,107,221, 71,231,139,181,190,176,133,125,133,218, 75,233,
+ 83, 87,101,101,247,127,238,211,187, 31, 21,178,160,149, 24, 90, 25, 52, 27, 46, 60,236,244,223,169,165, 33, 75, 48, 21, 34,109,
+122,144,183, 22,172, 61, 65, 86, 41,193,230, 96,199,224,114,160,240,223,187, 50, 60,223,225,156,165, 50, 22, 93, 24,254,198,159,
+123,251, 61, 31,184,239,207,253,219, 91,182,186,223, 27, 96,255, 21,237,183, 23, 66,188, 31, 95,211,156,141, 86,238, 93, 44,159,
+175,104,251, 54, 33,196,187, 94, 72, 42, 93, 8,241,174, 19, 17,245,123,190, 90, 63, 20,241,238, 7, 23,107,125, 97, 11,251, 67,
+ 22,169,227, 96,255, 61,255,238,201,191,253,159, 62,187,247,189,175, 63,147,221, 44, 64, 90,231,108,216, 22,176,206, 67,246,168,
+180,242,107,111,234,124,205, 15,126,203, 29,183, 53,162,134,180,214,130, 82, 62,182,182, 22, 87, 14, 16, 74, 32, 47,190, 5,185,
+113, 7,162,123, 6,209,232,130, 46,176,195, 93, 92,255, 10,118,247, 81,208, 99, 16, 25, 14,131,113, 96, 7, 37,223,252,198,155,
+110,250,181,251,254,220,207,252, 23,239,253, 55,234,139, 87,142,127,145, 41,121,239,149, 2,246, 75,206,185,247,207, 68,108,119,
+189, 28,175,123, 10, 35,250,161,151,137,105, 61,203,122,126, 73,237,102, 47,199,107,188, 26,231,123,226, 56, 95,208,235,189,132,
+ 8,249,126,166,132,179, 21,231,220, 93, 95,173,181,117,241,238, 7, 47,185,251,238,126, 73,107,221,221,119,247,181,215,247, 85,
+ 72,221,159, 32,218,189,106,239,187,176,133,125, 53,128,186, 1,134,192, 23,126,243,137,193,143,255,230, 19,131, 44, 68,203, 39,
+109,237, 59,222,188,249, 87,191,247,109,183,158,109,202, 68,106,235,124,234, 61,207,113,197, 16,204, 16,245,218,111, 38,122,219,
+ 95, 64,221,250,141,215, 77, 33,184,131, 39,209, 79,252, 58,230,169,143, 32, 84, 2,206,225, 4,148,163,146,215,158, 91, 91,250,
+183,255,195,247,252,227, 63,249,195, 63,127,176,119,156,127,144, 87,126, 32,204,203,194,200, 13,192,246,206, 16, 1,221,117,202,
+239, 47, 49, 77, 13, 31, 94,231, 53,126,108,230,111,223, 47,132,184,127,230,117,223,201, 9, 70,119,120,205,247,189, 16,246,190,
+115,238,157, 33, 26,189,237,197, 30,215, 43,113,190, 55, 56,215,247,132,215,157,221,204,191, 20,166,248,141,236, 36,128,175,124,
+149,239, 13, 47,120,173, 7, 32,191,254,245,189,239,238,233,245, 61, 1,180,238,190,187, 63,112,138,227,240, 78,119,223,221,247,
+ 92,231,237,222, 27,142,237,158,240,184,235,122, 78,199,141,222,119, 97, 11, 91,128,250,212, 44,144,227, 7,175,244,153, 84,189,
+ 39,146,174, 78, 8,190,230,125,127,254,181,127,231,135,239,190,229,110, 83, 66,105, 12,174, 42,112,249, 8,116, 1,145, 35,253,
+206,191, 73,244,182,239,127,254,168, 97,245, 22,226,213,191,138, 60,243,102,244,199,127, 26,164,241,144, 47, 4,229,168,226,205,
+175, 57,187,254,227,255,245,221,247,253,197, 31,251,213,239, 5,158,126,133, 65,125,118, 35,127, 73,155,132,115,238, 30,224,231,
+159, 7, 20,110, 11, 81,225, 59,111,192,182,174,123,171, 1, 30, 8, 45, 90, 63,117,131,168,234, 54,124,107,214, 93, 33,157,124,
+ 61,240,253, 41,174,159,110,173,143,235, 94,231,220,183,189,138,231,123,218,185,126,224, 15, 1,176,126, 57,237, 5,173,245, 0,
+190, 47,252,250,222,119,247, 59, 78,244,194,223,115,157,231,223,118,131,227,122, 39, 47,172, 77,175,126,223,247, 4,178,223, 67,
+139,203,186,176, 5,168, 95,231, 94, 6,170,240, 96, 6,208,213,205,235,141,239,254,169,239,191,243,125,223,254,218,245,215, 20,
+ 99,139, 49, 21, 20, 99,208, 21, 8,135,136, 33,253,179, 63,138,122,227,119, 77, 94,172, 55, 46,248,181, 79, 62,201,175,125,234,
+ 73, 14, 6, 99, 98, 37,120,253,185, 85,254,244,219,238,224,235,110, 63,235, 95,248,226,219, 17, 73,135,234,195,255, 0,146,200,
+ 31,130, 20,232, 65,193,127,249, 39,223,248,181,255,226,215, 31,254,171,191,246,241, 39,127,132, 87,168,221, 45, 0,222,189, 39,
+ 34,194, 23,251, 26,247,134, 13,240,100, 4,248,192,204,198, 57, 27,237,220,198,148,105,255,208,243,108,192, 63, 63,179, 17,190,
+127, 38,178,188,235,196,113,191,211, 57,119,233, 58, 66, 49, 63,118, 10,160,207,190,214,189, 51,145,209,207,127,153,206,119,229,
+ 4,160, 31,206, 28,223,109,175,224,189,114,207,243, 68,238, 95,202,186,122,217,203, 47, 95,210, 49,249,200,251,121,215,122, 32,
+213,189,248,235, 59, 15,176, 15,204,172,211,149,153, 44,193,245, 50, 5,135,167,100, 20, 46,157, 56,198,219,194,245,186,109,118,
+205,184,251,238,126,219,162,255,125, 97, 11, 80,127,126,171, 83,222, 75,223,241,198,213,191,113,255, 59, 94,247,238, 11,237, 44,
+ 27, 15, 13,206, 20, 80, 21,225,157, 20, 66, 15,137,255,232, 95,155, 3,244,223,125,236, 10, 63,252, 47, 63,196,165,189, 62,141,
+ 52, 38,142, 36,210,193,167,158, 57,224, 23,126,231, 97,190,251,109,183,243,223,223,251,205, 52,211, 24,185,117, 39,209, 27,223,
+129,254,253,127, 6,157, 45,192,249, 34,186, 19,252, 15, 63,240, 77,127,237, 63,127,226,201, 95,112,142,207,226, 75, 4, 47, 55,
+160,255,212, 9,208,184,255, 69,190,198,109,225, 53,102, 55,163,119,157, 82,219,125,223,137,232,182,126,239,183,221,224,229,223,
+ 51, 3,192,239, 58, 9, 10,225,189,127,126,102,115,125,143,115,110, 46,213, 29, 82,238,239, 60,177, 57,191,227, 68, 29,125,246,
+216,238,249, 50,157,239,123,102, 94,239,189,129,196,120,242, 90,189, 18,118,239, 43, 0,188,167, 70,184,161, 28,241,126,124, 57,
+226, 85, 5,161, 0,232,207,187,214,131, 82,221,181,215,247,221, 15, 94,123,125,231,163,249,185,235, 91,179,241, 67, 26,190, 94,
+ 83,247,139,119, 63,248,190,231,201, 14,188, 15,120,255,141,162,111,119,223,221,117, 68, 63,251,190,223,198,194, 22,182, 0,245,
+231, 5,244, 91,127,232, 79,156,255,159,126,236, 59,110,249, 63, 71, 54, 98, 84, 84, 96, 74, 48,218,215,209, 5,224, 12, 98,253,
+ 34,209,215,255,192,228,143, 31,187,122,200, 15,252,227, 95, 99,103,172,105,182, 50, 42,165,136, 99, 69,162, 4,202, 37, 8,163,
+249,197,143, 62,142,146,146,191,251, 23,238,246, 17,251, 29,223,138,121,228, 87,193, 12, 32,202, 64,128, 46, 43,190,246,246,205,
+ 51, 95,255,250, 51,223,254,209,207, 95,253, 2, 47,114, 8,140,115,238, 61,207, 19,161,157, 4,176,119,189, 4,162,213, 79,157,
+136, 46,175,219,235, 44,132,120, 32,164,183,235,136,244, 46,231,220, 59,159,167, 30,254,128, 16,226, 29,215,121,189, 75,206,185,
+247, 50, 85, 51,171,123,176,223,127, 10, 88,214, 27,244,169,125,248, 51,199,246,137, 47,227,249, 94,186,222,235,189, 18, 81,110,
+ 88, 31, 47,217,161,123,158, 12,203,105,118, 91,184, 30,239,113,206,189,172,242,187,238,190,187, 95,252, 90,191, 22,168, 79,191,
+190,215,169, 91,139,119, 63,248,128,187,239,238,249,235,123,223,221,239,124,169,138,117, 55, 2,252, 19,207,187, 63,212,213,235,
+117,127, 79,112, 70, 22,209,250,194, 22,160,126, 29, 64, 23,171,173,232, 79,254,228,189,183,255,253,239,123,243,250, 91,138, 28,
+ 10, 81,129,245,169,118, 98, 57,121,166,171, 74,162,215,126, 11,162,189, 62,121,129,247,254,203,143,240,216,179,199,176,212,230,
+120,160, 65, 24,148,128,166, 18,172,183, 34, 86,178,136,165,165, 54,255,246, 99,143,113,247, 27,110,230,158,183,220, 10, 42, 66,
+221,246, 45,232, 79,254, 44, 98,227, 22,112, 22, 43, 4, 73,150,240,125,119,191,238,158,143,126,254,234, 63, 5, 14,120,113, 41,
+248, 23, 42,163,121, 63, 47,161,183,120, 70, 91,124,114,234,207, 7, 62, 66,136,135,130, 52,233,123,102, 54,220, 27,109,130,239,
+122,158,215,123,192, 57,247, 16,243,169,208,250,248, 78, 74,165,190,239, 70,199, 55,115,108,239,252, 50,157,239,251, 94,173, 20,
+117, 56,151, 31, 59, 17,165,191, 28,160, 94,235,202,207, 70,154,179, 26,244,147,181,233,156,187,237,122, 60,136,151, 96, 47,110,
+173,159, 2,232,129,105, 62,127,125,159,135,136, 38,222,253,224, 67,238,190,187, 95,204,122,126, 89, 44, 56, 20,179,235,254, 94,
+ 22, 61,247, 11,251, 42,182,151,210,223, 93,147,226,218,223,124,123,231,191,253,200,127,243,134, 95,248,190,215,175,190,101, 52,
+ 50, 24,140, 7,116, 9, 40,129, 80, 2, 17, 9,132,146,136, 72, 32,207,189,113,242, 34, 95,220, 62,226, 87, 62,249, 52, 52, 51,
+223,230, 38, 37, 40,133, 65,210, 47, 12, 95,220, 29,113,105,103, 68,229, 4, 86, 41,126,253, 51, 79, 77, 15, 96,253, 14,220,184,
+ 7,232,112, 52, 14,180,229,206, 11,171,183, 3,103,121,229,230,176,223, 27,162,200, 23,155,226,157,221, 0, 15, 95, 4, 40, 60,
+112,226,189,175, 11, 16, 47, 48, 77,123, 61,130,210, 61, 39, 0,246,133, 28,223,251,191, 76,231,123,233,213,210,223, 15, 37,132,
+ 89,173,246,195,231,115,158,158,199, 14,241,236,237,219,133, 16,111, 19, 66,188, 67, 8,241,190,153,199, 59,132, 16,171,225, 57,
+179, 32,249,206,224,120,189,154,118,111,136,168, 87,158,247,250,190,240,136,251,133,174,231,151,219,222,255, 2,178, 35, 11, 91,
+216, 31,202, 72,189, 78,183,159,251, 43,223,184,241,119,126,242,187,111,254,193,216, 42, 70,165, 5,229,192, 89,132, 3, 97, 5,
+ 78,137,144,122,247,127, 34,162, 4,185,114,211,228,133,158,220,237, 49, 30, 85,208, 77,167,126, 66, 29, 91, 75, 9,206,113, 52,
+168,168, 74,205,133,165,136,126, 94, 77, 15,162,179, 5, 40, 40, 70,136,172,131,195,129,214,220,186,213,217, 76, 19,117,166, 40,
+205, 23, 94,228,121,189,247, 6,191,155, 37,221,172, 48,195,254,126, 17,209,226, 61,215, 1, 86, 94, 64,116, 61, 23, 53, 94,135,
+ 64,246, 66, 51, 7,151,110,112,142, 47,234,181, 78, 30,219,171,120,190,175, 10,131, 57, 56,110, 39,107,222,239,253, 82,122,211,
+195,223,190, 16,177,155,247, 57,231, 30, 96,190,196,241, 99,207,227, 72,189,114,107,253, 90,153,216,151,118,125,125,212, 60, 23,
+241,191, 28,140,244,144, 57,184, 17, 99,254,158, 19,217,144,133, 45,108, 1,234,117,244,219,105,168,111,250,159,191,235,194,125,
+239,186,107,227,143,150, 37,228,177,151,124,117,198, 33, 42, 75,146, 72,142,141,177, 25, 82, 18,169, 73, 7,187, 0,112,122,242,
+ 98,155, 75, 77, 84, 18, 99, 44, 65, 47,222, 5, 80, 15, 95,157, 0, 37, 25,142, 42,158,202,115,210,183,204, 28,170, 51,224, 42,
+208, 57,200, 46,194, 89,156,181,172,182,226,230, 82, 51, 89,217, 41,199, 47, 42, 3,241, 66,106,150,161,174,250, 30,166,227, 57,
+ 63,192,141,201,107, 92,103, 35,185, 45,140, 44,125, 41,182,114,131, 8,240, 75,177,151,180, 73,135,231,222,245, 42,159,239, 43,
+ 14,234, 1,208, 63,112,226, 60,222,245,106, 78,232, 11,229,136,247, 50, 77,151,223,230,156,187,247, 36, 49,240, 69,191,238, 11,
+168, 71,135,186,251,141,214,250,252,245,157,246,154,191, 92,235,249,133, 0,121,221,218,246,158, 69,244,189,176,133,189, 56, 80,
+175, 83,217,241,157, 91,141,191,240, 47,191,239,214,247,125,221,102,115,115, 92, 90, 72, 35, 15,232,149, 37,170, 44, 73,166,248,
+239,126,253,185, 79,221,188,156, 44,255,224, 93, 27, 55,231, 14, 68, 29,173, 87, 21,118,239,113,228,197,183, 3,240,250,243,107,
+124,195,107, 54,249,237, 47,236, 66, 20,121, 16,151, 1,208,107, 93, 56,235,255, 54, 63, 24,242,154, 51,211,251,214,245, 46, 67,
+209,195, 21,203,136, 48, 49,198,217,218, 41, 64,242, 10,164,223, 67,244,196,204, 38,251, 66,200,107,167,109, 94, 47,102,190,245,
+151,195, 14, 95,134,231,126, 37,157,239, 11, 1,244,247,126,153, 70,238,206,170,216,241,106,125,142,226,221, 15,190, 47, 68,212,
+211,181, 62, 79,108,251,178, 94,223, 16,153, 47,116, 10, 22,182,176,151, 0,234,117,186,125,243, 29,111, 93,253,225,159,248,206,
+ 11,255,183, 51,141, 56, 25, 89,129,104,250, 16,220,149,150,134,117,228, 9,252, 95,127,249,169, 95,190,255, 35, 59,191,244, 51,
+239,184,229,221,194,133,204,187, 10,236,247, 72,226,182, 63, 59,121, 97, 41, 5,127,235,207,190,141,239,252,252,127,128,188,130,
+ 52, 9,211,221, 2,168, 91,192, 89, 24,140,248,218,175, 57,207, 95,252,227,111,152,252,173,221,249, 2,206, 85, 8, 83,250, 39,
+ 58,135, 20,142,131, 65, 62,238,141,202,254, 43, 24, 61,189, 47,168,155,213,118, 47, 47,158,236,115,163, 30,220,151, 19,112,255,
+160,216, 87,218,249,158, 4,244,251, 95, 78,246,249,139, 92,111,135, 39,200,141,117, 43,215,171, 5,236, 47,100,173,191,170,215,
+ 55, 68,232, 39,117, 10,238, 15, 25,156, 75,167,165,243, 67,230,225,199, 88,216,194,254,144,131,186, 0, 68,164,196,107,127,228,
+191, 56,247, 19, 63,252, 71,206,124,187,214, 48,138, 36, 34,149, 56,235,112, 99, 67, 43, 18, 60, 89,232,252, 47,255,139, 47,254,
+244,131,143,246,254, 37, 96,159, 62,174,182, 17,238, 78, 55,137,212,129, 70, 19,243,228,135,137, 14,159, 68,172,220, 2,192,119,
+124,237, 45,220,255, 95,127, 43, 63,244, 51, 31, 98,116, 84, 64, 35, 5,229,235,233,148, 21,140,198,124,221,157, 91,252,194, 15,
+127, 23,173, 70,236,143,170, 26, 99, 62,255,139,136, 36, 5, 97,192, 89,156, 53, 32, 37, 79, 92, 61,218,205, 75,179,203, 43, 71,
+148, 3, 95,115,190,103,102,147,125,209,209,215,151, 11, 36,190, 76,246, 21,115,190, 97, 26,219, 73, 64,127,215,151,249,176,190,
+156,142,220, 11, 89,235,247,191,208, 22,179,151,201,222,121, 2,208, 23, 74,113, 11, 91,216,140,201,231, 1,245,205, 31,251,206,
+243,255,248,221,127,244,204,183,231, 26,170,102,132,200, 20,206, 2, 35, 67,171,161,248,141,203,195,237,187,127,242,225,191,253,
+224,163,189,255, 21,120, 18,120,238,145,189,252, 17,164, 0, 19, 72, 79, 74,250, 20,187, 30, 80,125,248,199,231,222,228, 7,255,
+228, 27,248,157, 31,253,243,252,208,159,122, 19,183,174,166, 52, 92, 69, 91, 26,190,233, 53,235,252,163,191,254, 39,248,173, 31,
+185,151, 91,183,150, 38,207,215, 31,255,105,220,209,147, 16,167,184, 64,194, 67, 27,144,130, 71,158, 61,124, 10, 63,103,221,254,
+ 1,251,156,159, 79, 22,243, 43,245,248,238,249, 10, 61,223,235, 1,250, 59,255,128, 1,250, 31, 84,251,114, 94,223, 89,214,252,
+251, 94, 32,160,223,182,184,100, 11, 91, 68,234,192,197,149,228,238,191,252,166,213, 63, 89,230, 22,218, 49, 34, 17,184,210,161,
+114, 77,218, 82,252,243, 79,237, 63,252,127,249,133, 39,255,231,222,216,124, 8,216,199, 15,122,105,252,214, 19,253,143, 93,233,
+ 87,127,101,189, 25, 71,198,185,105, 19, 92,214,196, 62,253, 91,232,143,252, 67,162, 63,250, 67,147,247,121,243,205,235,252,248,
+ 95,249, 22,126,244, 47,106,174, 30, 12, 73,226,136,115,171,173,107,142,199,124,254,223,161, 63,253,207,161,209,244, 94,135, 84,
+ 56, 99, 17,198, 82,229, 5,191,248,161, 39, 62,130,215,163,127, 37, 65,253,165,108, 16,115, 41, 84,231,220,202,151, 91, 10,244,
+132, 93,154, 57,190, 23,196, 14, 14,253,219, 95,169,231,251,149, 4,232, 47,149,196,248, 74,174,245,249,235,123,223,221, 43,175,
+226,192,148,187, 94,194,231,241, 21,225, 88, 46,108, 97,175,116,164, 30,221,178,154,190,102, 37, 85,104,235,217,237,110,100, 72,
+ 74,131, 72, 5, 63,252,107,207, 60,240, 3,255,252,137,255, 71,111,108,126, 29,216, 6,142,129, 18,168, 46, 31,149, 31,251,197,
+ 47, 28,126, 50,142,192,229, 6,112, 8,137,239, 87,111,118, 48,159,254,223,169, 30,248, 91,184,209,222,220, 27, 54,226,136, 91,
+182,150,174, 5,244,106,140,249,232, 79,162, 63,244, 35,136, 52, 65, 40,229,235,245,113, 10,149, 38,150,240,187,143, 92,185,250,
+219,159,223,126, 0,175,253,254,138,128,250,137, 17,159, 47,102, 83, 57,217, 38,246,206, 63, 96,235, 96,246,248, 86,130,108,235,
+151,178, 81,254, 65, 63,223,175, 8, 64, 15,210,189, 39,157,175, 87,231,189,189,242,218,245,214,250, 87,206,245,245,146,178,139,
+ 72,125, 97, 11, 80, 7,212,231,183,199,143, 62, 91, 26,221,108, 42,154,149,161,169, 96,160,172,251, 47,127,254,210,191,250,251,
+ 31,184,242,119,128, 79, 1,123, 33, 66,247,232,237,135,188,108,255,196,111,110,191,255,184, 50, 68,149,129,202,122,214, 92, 16,
+165,161,213,193, 62,241, 43,148,191,248, 3,152,207,253, 34,174,247,220,233, 55,228,112, 23,251,196, 3,148,191,244, 87,208,191,
+255, 79,160,209, 0, 21,121,177, 25, 33, 16, 50, 70,228, 21, 40,199,223,253,185,223,255, 37,224,241,240,254, 47, 59,168,207,244,
+ 45,207,218, 11,106, 47, 10,109, 72,179, 27,242,123,158, 39,210,125,181,237,253,204,215,110,223,243, 2, 62,139,247,124, 5,159,
+239,245, 0,253, 33,110,220,199,253,188, 78,159,115,238, 61, 51,143,123, 78,124,102, 47,118,189,205,146,187, 14,121,121,250,212,
+ 95, 8, 16,222,112,173,139,119, 63,120,237,245,245,140,244, 47, 53, 91,196, 11,200, 22, 29,190,208, 8, 60,156,199,130, 32,183,
+176, 63, 84,118,195,244,251,254, 64,127,252,251,254,213, 23,223,247, 67,223,178,117,239, 90, 51, 90,250,194, 94,254,236,255,246,
+225,157, 95,254,220,229,209,191, 7,174, 0, 71, 33, 58,159, 5, 81, 3,140, 31,223,205,127,229, 71, 62,120,245,158,251,190,235,
+226,183,233,129,134, 72, 34, 82, 53,165,176, 53,187,160,143,169, 62,252,247, 16, 73, 27,177,118, 39,114,245,118,136, 26, 96, 43,
+236,209,211,184,221,207, 65,126, 4,113, 12,173,165,153,187, 21,176, 18, 87, 8,146,182,228,103, 31,120,228,243,255,249,247,158,
+251, 87,248,212,123,245, 10, 68,231,247,112,237,124,241,154,117,251, 66,237, 93,204,107,175,127, 32,140, 25,125,224, 5,188,255,
+189, 1, 44, 95, 17, 66, 82, 96, 89,191,111,102, 3,188,199, 57,247, 83,167, 69,172, 51, 45, 95, 43, 95,169,231,123, 3, 64,255,
+182, 47,177, 76,112,219, 9, 16,121,239, 76, 84,123, 87,208, 58,184,255,249,122,205,103,198,232,206,126,198,175,184, 52,110,136,
+206, 95,232, 90,191,246,250,250,177,170, 15,188,128,247,184, 55, 56, 7,239,187, 14,168,223,123, 3, 97,154,247,207, 92,183,119,
+186,251,238,126,255,117, 24,239,167,181, 38, 46,108, 97,127,168, 65,189, 2, 14,126,231, 82,255,159,254,206,165,254, 7,128, 14,
+190,110,126, 21,159,106, 31,132,231,156,148, 21,171,231,173, 95,253, 7,191,126,229,199,191,246, 98,243,214,239,127,203,218, 29,
+227, 94,137,232, 38,144, 74,175, 52,135,131, 56, 70,196,177,103,176,239,127, 10,189,243,208,228,229,132,140, 32, 74,160,213, 62,
+113,183, 2,165,193,217,140, 70,154,240,208, 99,219,135,255,247,127,242,209,251, 66,148, 62,230, 37, 76,104,115, 55,144, 70,187,
+ 17,104,189,152, 77, 54,168,165,189,139,233,100,171, 26,232, 30, 8, 27,255, 67, 39,192,161,222, 96,239,154, 1,136, 87,210,238,
+103,126, 76,230, 59, 67,164,121,255,204,177,221,195,148,125,124, 41,108,246,119,125,165,157,111, 56,175,211, 82,198, 63,255, 34,
+150,194,251, 95, 66,239,250, 61,193, 97,170, 71,133,158,166,253,126,114, 84, 46,120, 25,224,151,197,193,113,247,221,253,210,214,
+250,137,154,121, 80,135,187,246,250,222,119,247, 75,189,190,181, 46,124,237,200,124, 34, 12, 99, 57, 89,114,152, 43, 21,133,231,
+221,207,116,220,107, 45,152, 51,203,146,127, 63,175,174, 44,237,194, 22,246, 7, 18,212, 77, 0,110, 29, 64, 92,134,159, 21,225,
+ 97,184,254,208, 20, 13, 12,172,115,159,249,175,126,238,139,127,119,173, 21,253,200,255,233,142,165,243,249,113, 9,157, 24,209,
+ 80,211,254,117,143,224,144, 52,110,220,135,230, 0,235,160, 48,216, 94, 73,118,118,139, 47, 92, 57, 28,188,227,125,191,249,190,
+227, 97,245,161, 25, 39,227,149,182,135, 2,160,191,104,210,146, 16,226,254, 25, 1,155,149,217,141,254,203,189, 16, 66,180,254,
+142, 16,221,220,118,157,200,115, 54,114,123, 7,207,147,218,252,131,124,190,167,216,139,141,232, 30,248, 18,222,235, 54, 94,120,
+ 29,250,254, 87,193,161,187,241, 90,191, 14,195, 60, 76, 65,123, 89,174,175,120,247,131,135,238,190,187,223,203,252, 56,215,211,
+132,109,222, 23,178, 4,179,207,123,231, 13, 62,207,119,133, 99, 91,128,250,194,254, 80,152,124, 30, 24,213,248,122,249, 33,126,
+242,217, 17, 48, 10, 63,119,207,243,183, 5,112,220, 27,155, 7,255,236,253,143,254,191,254,249,239,239, 63,220, 72, 36,113,175,
+194, 30, 87,144,219,201,171, 8, 4, 66,156,242, 8,255, 97,128,210,226,122, 26,113, 88,144,173, 44,243,224,165,227,171,223,254,
+183, 31,248,219,151,182, 7,255, 38, 28,219,136, 87,142,245,254, 64,216, 92,223, 17, 6,113,124, 41,250,223,247,227, 37, 55,239,
+231,133,245, 32,191, 63,108, 76,175,252, 68, 43, 63, 20,230,109,207,243, 94, 15,224,199,158, 62,244,149,126,190, 95, 6,128,124,
+ 47, 47,156, 92,249,126,124, 57,224, 93,175,114,231,192,116,173,191,251,193,183, 61, 95,203, 88, 80,153,123, 89,174,111,120,173,
+219, 79,100,135,174,247,158,239,224,198,196, 65,191, 78, 95,226,120,215,133, 45,236, 43,213,196,245,210,141, 66,188, 44,250, 45,
+ 10,104, 6, 79,249, 13,127,249,155, 54,255,218,255,244, 29,231,255,244,249,165, 36,210,133, 67, 71, 2, 26, 10, 17, 73, 31,185,
+203,153,247,116, 14, 12, 56,109, 33, 55,168,202, 18,199,130,158,129,191,247,161,131,223,248,255,252,242, 19, 63, 85, 25,251,113,
+166,173,116,122,206,171,184, 65, 26,245,101, 58,183,151,197, 66, 42,248,100,148,120, 9, 63,221,236,129, 47,227,113,213,233,210,
+ 89,161,143, 7, 94,224, 52,184,175,184,243,253, 50, 93,247,219,184,150,155,240, 16, 62,221,126,248, 21,121, 94,158,109,126,250,
+245,125,158,122,251,203,244,126,151,128,135,196,187, 31,188,116,131,207,126,177,243, 47,108, 1,234, 95, 34,176, 55,128, 37,224,
+204, 77,171,233,159,120,231, 55,111,254,153,191,116,215,250,215, 95,232,196, 49, 78,224,156,195, 10,129,157,121, 75,233, 64, 58,
+231, 91,215, 4,236,231,198,254,235, 79, 29,124,230,167, 62,178,243,203,159,126,102,248,159,128,103, 67,230, 96,124, 18,208, 23,
+ 55,238,194, 22,182,176,133, 45,108, 1,234,175, 92, 52, 43,128, 4,104, 1, 93,224,204,106, 59,122,235,215,223,210,254,250, 63,
+255,150,213,183,191,229,124,243,236, 74,170, 90,173, 72, 36,145, 20, 82, 91,220,200,216,242,184,180,163,199,118,198,187,239,255,
+228,193,239,253,246,165,193,199, 46, 31,149, 15, 1,207, 1, 61,124, 13,253,186, 61,233, 11, 80, 95,216,194, 22,182,176,133, 45,
+ 64,253,149, 1,245, 26,216, 37,144,226, 83,242, 77, 60,163,126, 21,216,106,166,114,173, 17,201,110,172, 68,162,173,211,185,118,
+253, 81, 97,246,157, 99, 7,159, 98,239,225,235,230, 67,158,159,168,183, 0,245,133, 45,108, 97, 11, 91,216, 2,212, 95, 65, 80,
+ 63, 9,238,113,136,222,235, 71,196,100,250, 58,132, 8,188, 10,143, 50, 0,185,126, 62, 48, 95,128,250,194, 22,182,176,133, 45,
+108, 1,234,175, 30,168,159, 4,248, 26,228,235,175,179,160,238,102,190,190, 40,148, 94,128,250,194, 22,182,176,133, 45,236, 15,
+155, 69, 95,230,247,119, 51,192, 93,131,252,236,239, 22,182,176,133, 45,108, 97, 11, 91,216,151, 26,169, 47,108, 97, 11, 91,216,
+194, 22,182,176,175, 44,147,139,143, 96, 97, 11, 91,216,194, 22,182,176, 5,168, 47,108, 97, 11, 91,216,194, 22,182,176, 5,168,
+ 47,108, 97, 11, 91,216,194, 22,182,176, 5,168, 47,108, 97, 11, 91,216,194, 22,182,176, 5,168, 47,108, 97, 11, 91,216,194, 22,
+182, 0,245,133, 45,108, 97, 11, 91,216,194, 22,182, 0,245,133, 45,108, 97, 11, 91,216,194, 22,246,234, 88,244,189,127,252, 46,
+ 39,133,244, 10,108, 66,120,245,151,240, 63,175, 4, 35,252,164,180,201,215,249,159, 93,207,124,255,187,155, 40,211, 57,231, 38,
+ 42,111,254,223, 98,230,121, 39, 21,224,228,220,207,102,213,237,174,215, 87,127,218,115,103,191, 23, 66,160,132, 37, 86, 18, 37,
+ 98, 34, 37, 16,202, 33,227, 24, 41, 51, 86, 55,110,230, 13,111,251, 22,214, 54, 55,185,227,117,183,241, 31,254,211,127,224, 39,
+255,215,159,228,169,167,158, 34,138, 34, 90,205, 22, 89, 26, 19, 69,130,181,213,117,182, 54,206,242, 23,127,224, 7,248,238,239,
+249,118,112,134,159,248,135,255, 27,255,224, 39,126,130,102,187, 77,140,160, 29,199, 68,177,100,101,125,153,170,200, 89, 95, 91,
+195,152,146, 72, 66,154, 54,144, 66,208, 72, 50, 4,130, 52,142, 81, 73,202, 19, 79, 62,201,239,124,244,163,108,116,187,156,219,
+220,224,150, 11,231,248,212, 35,143,112,215, 91,223,202,241,209, 49, 31,254,216,199,105,116,218,228,121, 14,165,230,204,198, 38,
+171,171,203, 52,155, 25, 27, 27, 27,156, 59,127,145, 55,188,249,173,172,174,159,101, 56, 46, 56,218,223,101,255,240,152,227, 94,
+ 15, 41, 21,121, 81, 80, 86,134,162,172,104,118, 58, 52,154, 93,140,145, 24, 43, 24, 15,118,185,185,107, 57, 39,143,105,187, 17,
+149, 5, 99, 29,198,128,214, 22,173, 29,149,177,104,109,208, 90, 99,172, 65, 91,139,117, 14,109, 29,214,185,160, 32, 36, 48, 86,
+224,194,181,119,128, 19,128, 16,126,125,137, 20,135,195, 90,141,181, 22, 99, 1,149,210,200,150,104,181,151,104,100,109,178, 86,
+135, 36,109, 18,197, 9, 82, 66, 36, 64, 10,135, 16, 18,164, 36,138, 34,162, 40, 38,142,147,201, 35, 74, 26, 68, 73, 70,210, 72,
+ 73,146,132, 40,137,137,211,148, 40,142,144,145,194, 41, 57,183, 54,234,127, 91,107,131, 4,146,195, 89,235, 39, 6, 26,131, 51,
+ 22, 93,105,172,209, 56,163, 49,218, 96,140,193, 88,227,159, 99,173,127, 62, 6,235, 76,248,222,191,134, 53, 6, 29, 94,131,176,
+238,157,115, 88,103,177,198, 98,234,191,117,118,242,179,250,189, 9, 15,107, 29, 22,139, 51,254,245,140,213, 96,131, 78,147,115,
+254,125,173,245,239, 91,255, 93,248,252, 29, 2, 68,132,144,138, 56,110,144, 54, 90,164,105,147,164,209, 36, 73, 82,162,212,127,
+ 62, 42,138,137,227,136, 88, 41, 98, 9, 73, 44,105,196,130, 36,141, 81, 73,132, 76, 36, 50, 18, 72, 9, 50,232, 68,137,233, 14,
+128, 16, 10, 34,127, 77, 80, 10, 68,236, 47, 51, 14,225,252,215,250,217, 0,198, 89, 28,154,157, 71, 63,205, 7,255,233, 79,114,
+248,200,103,217,217,219,103,187,159,179,177,188, 74, 35,141, 40,139, 49,199,199, 71,180,178, 38,227, 81, 65,179,217,161,223,207,
+113, 88,138, 60,199,148,154,102, 42,217,218, 92, 70, 23, 35,150,151, 58, 44,183,218, 72, 32,203,154,108,157, 57,199,246,222, 30,
+170,209, 0,165,136, 4,108,108,174, 83, 86, 37,253,225,144,189,131, 3, 68, 20,177,127,120,196,202,218, 26,113,146,176,177,182,
+ 78,146, 36, 28, 30, 28, 34, 35,133,144,138,237,221, 29,127,253, 4,180,150,150, 56, 26, 12, 72,155,109, 16, 17, 69,161, 89,106,
+119,217,189,122, 25,129, 33, 75, 21,131,222, 49,194, 90,186,157, 46,177,140, 17, 86, 83,233, 10,237, 44, 81,146,128,131, 98,156,
+ 19, 73,137,144, 18,227, 12,157,118, 27, 93,105,156,117, 88,173,145, 82, 82, 85, 21, 8,139,181,134, 78,171, 69, 35, 77,200,243,
+ 49,121,158,227,128,213,149, 21, 28, 10,149,102, 12,242,146, 50, 31,147,197,138,225,209, 62, 43,237, 6,111,122,205, 45, 36, 81,
+196,225,225, 49,253,254, 0,128, 86,171,205, 51,207, 60, 75,123,121, 25,149,196,140, 43,205,110,127,192,200, 41,218,155,103, 73,
+187, 43,228, 56,172,148,224, 64, 88, 17,214, 83,173, 11,102,195,186,114,215, 72,130, 73, 89,239,175, 4,252,240,216, 80, 47, 71,
+ 33, 64, 34, 16, 98,250,144, 82,206,125,173,239,199,147,223, 35,252,123, 58, 28,198,186,176, 95, 56,140, 11,235,222,223, 10,216,
+153,251,203, 57,255,123, 23,246, 36,103, 29,198,218,240,152,254,219, 26,135, 53,150, 82, 87,104,235,208,214, 80,105,127,223,234,
+ 74,227, 12,225,254, 12,175, 61,139, 97, 66,133,123,240, 26, 16,194,137,235,171,166, 77,238,141,240, 57,248,207,111,230,179,144,
+ 32,195,191, 39, 95,235,127, 11, 17,182,208,217,207,146,185,251, 75, 8,129, 49,134, 72, 73,133,148,242, 26,176, 60,109, 3,188,
+209,191, 79, 57,133,107, 64,119, 22,192,173,157,190,134,115,243,224,239,127,198,220,207,102,223,243, 36,200,207,254,253,201, 99,
+154,253,157,113, 2, 97, 5, 22,139,113,194,143,118,197,160,148,165,213,238,160,203,146,131,221, 93,236, 29, 55,243,185,207, 62,
+204,219,223,254,141,244,122, 3,122,189, 30,149,214, 72, 1,198, 56,148,146,220,122,243, 77,216,124,204,149, 47, 94, 98,105,185,
+195,159,248,227,223,194, 63,249,103, 63, 3, 82, 33, 17, 84,198, 48,202,135, 36,205, 20, 97, 13,131,126, 31, 21, 9,146,102, 3,
+ 99, 52,113,218, 96,156,143, 17, 14,202, 92,210,234,192, 99,143, 63, 78, 85, 20, 56,224,230,155,111, 34,137, 21,183,220,116, 1,
+ 99, 12,218,106,138,170, 98,255,234, 14, 82, 10, 98, 4,151,183,175,162, 34, 73,179,149, 97,157,191,225, 70,195, 33,103,207, 69,
+ 28,247,122,104,237, 39,210, 38, 73, 2, 8, 50, 41,169,244, 16,107, 44,189,222, 49,121, 89,161, 84,131, 36,109,146,165, 77,140,
+ 43, 25, 22, 14,171, 43, 42,231, 2,168, 91, 42,109,209,149, 69,155,176,240,173,197,134, 27,196, 34,176, 4, 80,119,224,156,191,
+118, 82,248,205, 75, 42,137, 16, 97,113, 74,133,146, 17, 66, 10,156, 83, 24,227,175, 73,156,117,104,117,214,104,181, 87,201,218,
+ 75,180,187, 75, 52,178, 22,113,156, 32,165, 64, 56,131,213, 26,167, 43,127,158, 56,164,148, 40,165,194, 6,226,127,175, 41,113,
+214, 98,180, 38,170, 98,180,214, 19,128,151,113,132, 84, 10, 21, 69,147, 13, 3, 1, 66, 73,175, 85,108,167,107,201,249,157,130,
+ 56,181, 56,107,112, 86,227,156, 7, 94, 59,243, 28,255,240, 27, 73, 13,202, 19, 96,175, 65,126,238, 57,225,115, 10,160,110,172,
+241,155,140,214,216, 0,222,214,214, 95,131, 19, 97, 12, 46,124,239,172, 63, 30,107, 29,214, 85,254,123, 51,243,254,225,186, 88,
+ 52,198,150, 56, 35, 40,109,137, 49, 99,202, 50, 37, 26, 39,196,113,138,140, 26, 68,113,140,138, 34,162, 40, 34,150,130, 88, 65,
+150,198,180,179,152, 86, 51, 37,201, 82,162, 42, 66, 68, 2, 39,241, 91,171, 11, 87,219, 9,132,144, 8, 21,121, 48, 87, 49, 66,
+ 41,132,148, 19,231,205, 9, 57,183, 15, 56, 43, 17,182,226,232,185,207,241,203,255,228,239,115,245,145, 47, 48,222,239,113,124,
+ 52,162,213,234,144, 70,160,139, 17,199,135, 71,100,141, 6,229,184,196, 84,142,203,207,238,146,164, 41, 8,129,213, 2,103, 29,
+ 75, 75,109,156,179, 52,178, 6, 43,203,203,228,195, 17,157,118,155, 70,179,201, 81,175, 71, 94,150, 40, 4, 81,154,208, 89,234,
+114,120,116, 68,101, 44,189,193, 0, 17, 55, 56, 30, 12,136,179, 22, 82,197,180,154, 25,227,241, 16,171, 43,142,143, 14, 57,119,
+225, 2,251,135, 7, 36,113, 76, 37, 53,163,113,129, 27,107,180,137, 72, 93,130,117,150, 36,137,120,238,153, 47,210, 74, 34,172,
+169,232, 29, 30,209,206, 50, 34, 41, 25,245,143,201,210,140,210,104,172,117, 68,113,140, 67, 16, 39, 41, 73,146,145,168, 24, 25,
+ 9,170, 42,167,170, 42,172, 53,164, 73, 76,214,109,162,164,223,188,149,242,155,187,181,142,162, 40,105, 52, 26,140,199, 57,237,
+ 86, 27,173, 53, 14, 75,127,156,147, 53,219,180,150,151, 72, 36, 8, 91,113,176,191,195,206,206, 30,237, 86,147, 91,111,189,141,
+253,221, 29,246,118,119,177, 85,193,109, 55,157,167, 55,206,201,203,130, 72, 42,150,154, 25, 54, 47, 25, 29,237,147, 54, 26,108,
+109,110,146, 59, 15,148,224,193,221, 5, 64,119,206, 33, 17,211,123, 99, 6,208,230, 64,102, 22,189, 38, 0,232,239, 45, 78,252,
+ 94, 4,160,226, 84,176,242,206, 65, 45, 28,238,156,195, 88,131,117,210,239, 59,206,175,243,217,123,202,225,252,239,235,251, 43,
+ 96,140, 49, 53,152,251,123,203, 24,137, 17, 22, 43, 44, 70, 8,164, 0,109, 44,218, 10, 34, 33, 49, 74, 97,164,194,134,253,160,
+126,237,201,191,157, 99,226,174,214,120, 22,254,231,159, 89,255,216,205,161,249,244,220,221,228,124, 65, 32,164, 64, 5,240, 22,
+194, 59, 73, 82, 42,164, 20, 40, 33,231, 64,126,178,109, 9, 57,247, 26,254,221,124, 80,110,141, 36,154, 5,201,107,190,226, 23,
+215,181, 7, 86, 71,244, 55,136,212,153,223, 36, 79,130,182,148,226,154,232,122,250, 60, 49, 1,251,231,119, 30, 78, 7,127, 78,
+ 89,116,206,129,177,222,239,244,128,110,193, 25,178, 88,209,235, 15,216,189,242, 28, 34,142, 57,216,187,157, 44,107,113,101,103,
+135,111,248,134,111,228, 35, 31,249, 16,206, 9, 84,156, 96, 77, 65, 49, 30,147, 40, 5,186,100,176,191,203,232,112,151, 91, 47,
+190,134, 55,188,254,117,124,230,225, 71,192, 73,108, 85, 81, 85, 21, 59,123,123,156,219,216, 0, 4, 74,197, 56,235, 64,134, 8,
+ 17,208, 70,227,144,148,101,193,234,114,135,222, 97,202, 29,183,221, 76,171,153,129,179,108,109,108,144,143,114,158,121,230, 25,
+110,185,229, 38, 46, 93,185, 74,175, 63, 4, 37, 24, 85, 21, 81,164, 40,138, 2, 1,140, 70, 67, 6,189, 30,186,204,105, 36, 17,
+107,107,107,200, 40, 33, 29,141, 24,142,198,184,178,162,209,104, 80, 85,134, 92,151,244,123, 71, 44, 45,175, 33,164, 99,121,117,
+131,182, 40,233, 95,185, 74, 94,150,104,107,176,206, 97,140,243,139, 94,123, 15, 87, 27,135,182, 22,227,240, 32, 18,226,183, 58,
+211, 3, 32,133, 2, 33, 81,202, 3,169,140, 34, 15, 32, 74, 17,201, 24,169,188,119, 93, 25, 71,170, 82, 26,237, 53,218, 75, 27,
+ 52, 59,107, 52,187,171,116,151,150,201,154, 25, 73,146,160,148, 4,103, 49,101,137, 30,143,168,170, 10,173, 75,176, 6, 33, 65,
+ 40,127,243, 59,204,228,122,234,210,133,232,186, 66, 23, 57, 81, 28, 19, 37,254, 17, 39,137,143,198,148, 66, 40,233,211, 8,181,
+119, 45,220,116,245, 42, 23,214,168, 68, 16,207,175, 47,231, 38,235,219,175,189, 0,230, 64,240,108,230,129, 63, 68, 56,147,173,
+208,185,233, 90,180,206, 3,119, 0,115, 99, 60,200, 99, 45,214,106,116,216,248,107,160,183, 38, 56, 0, 86,251,231,107, 51,117,
+ 6,180,193, 24,141,181, 21,218, 84,126,195,179,214,191,175, 41,169, 76,129,209, 57, 66,230, 40, 21,161,164, 34,138, 36,177,148,
+ 52, 98, 73,100, 82,140,139,177, 34, 67, 8, 13, 78,129,241, 27,143, 63,190, 50, 56, 57, 32,164, 66, 70, 9, 68,145, 7,245, 72,
+249, 1, 14, 66,130, 84, 56,233, 35,248,250, 19, 85, 8, 6, 59,207,242,171, 63,243,143,216,255,252,167, 25,236, 30, 51, 44, 28,
+ 42,137, 72,163, 10,103,198,236,108, 31,178,178,210,161,204, 13,182,130,222, 81, 78, 51, 75,208,214,175,151,124, 92,178,212,109,
+144,101, 41,174, 42,105,119,218, 24, 99, 72,211, 20,127, 55, 11, 70,227, 49,214, 65,172, 20,105,218,192, 88, 75,169, 53, 71, 61,
+ 15,228, 71,189, 62,165,241,107,119,163,217,162,209,136,209, 69,197,104, 52,228,204,214, 38,101, 81,248,135,209,236,247,142,233,
+ 46,175,163, 13, 44, 45,111, 82,148,222,145,186,114,229, 73,218,141, 24, 87,121, 71,179,149,196,148,227, 17,173,165, 46,235,231,
+207,130,133, 60, 56,185,227,113,137,181,254,254, 41,243, 18, 65, 78, 35,139,137, 99,193,242,114, 23,156,165,217, 72,145,206, 82,
+149, 57,227, 81,159,238,114,151,202, 24,172, 80, 12,181,166, 40, 74,210, 36,163,219, 93,198, 97, 73,146,132,210, 88,226, 52, 67,
+ 8,193,120,112,204, 82,183, 75, 51,146,148,218, 34,162,132,199, 30,127,130,215,222,113, 27,105,146,176,187,125,213,191, 79,154,
+ 98,140,102, 92,142,105, 54, 50, 10, 45,144,206,112,124,245, 57,186,157, 38,155,155,155,148,218, 7, 60,224,131,159, 58, 43, 52,
+235,244, 90, 55, 93,227, 19,199, 77,204,160,219, 36,112,115,156,132,137, 9, 24,213,192, 77, 13,100,181,243,239,127, 39, 67,150,
+ 15,225,157, 73, 37, 21,214,133,251,197, 74,140,116,254, 30,145, 76,157,102, 8,193,133,119,168,141, 1, 45, 12,210, 88, 36, 2,
+131, 65, 98, 81, 66,224,164,192, 74,133,150, 18,171, 44,198, 42,159, 13,112, 22, 99,108,184,141,235, 96, 37,100,217,236,244,125,
+166,160, 62,123,238,117,162,109,234,244, 76, 48, 44,252,207,103, 48,175, 5,117,165, 20, 4, 80, 87, 74,162,164, 66,224,113, 82,
+138, 41,168,203, 25, 60,155,126,244, 2, 51, 1,117,227, 65,253, 26,143,107,226, 73,213, 62,201,233,169,247,235, 97,109, 8,116,
+ 48,115,233,118, 55, 23,197,207, 30,216,181,224,125,253, 72,253, 26, 82, 64,200, 50, 60, 95, 90,190, 6, 29,231, 19, 68, 56, 81,
+ 71,100, 22, 17,202, 15,227,254, 62,253,113, 73, 49,206,209,218,176,185,185,197,127,248,229,127,235,211,129,205, 14, 90,171,201,
+245,211, 85, 73, 22, 71, 84,195, 33,105, 26,147,198,138,111,250,198,111,224,119, 63,241,113,218,173, 14, 69,233,111,102,161, 45,
+ 79, 60,113,137,115,103,182, 56,115,118, 19, 99, 28,113, 34,113, 56,198,227, 33,206, 58, 98, 21,147, 57,203,157,175,185,157, 51,
+235, 43,172,116,151, 16,194, 71,201,207, 93,185,204,198,218, 58, 55,223,124, 11,131,162,228,145,103,158,197, 74,208,206, 17, 11,
+ 65,179,217,164,209,240,209,255,120, 52,164, 44,114,242,241,136,172,209,196,152, 34,128,160, 79,237, 1,116, 58, 29,148,138,201,
+171,138,188, 24, 83, 22, 67,132,140, 24,136,132,173, 51,235, 28,148, 32,198, 37,198,249,205,219,123,198, 76, 0,222, 24,139,161,
+ 78,121, 77,197,251,165,240,145,154,148,146, 72, 37, 40,165, 60,136,199, 49, 81,164, 60,136, 40, 69,162, 34,164,130,202, 56,132,
+ 21,164,217, 18, 89,119,157, 86,119,141,102,119,157, 86,119,149,230, 82,135, 70,214, 32,109,164,196, 81,132, 4, 76, 89, 97,203,
+ 49,101,145, 83, 22, 57, 90, 23, 24, 93, 98,173,241, 11, 91,168,233,226, 11,215,214, 26,131,113, 62,205,166,171,138,168,140,168,
+146,210, 71,169, 73,140,138, 35,239, 21,215,107, 81,156,178, 86,133, 63,215, 73,116, 31,126, 56,235,236, 34,102,252, 1,230,255,
+237,194, 77, 87,223,251,179,158,189,113, 34,164, 16,103, 35,125,139, 49, 6, 38, 81,121, 29,129,107,156,177,193, 1, 48, 1,212,
+ 45,166,210,147,136,222,104,237, 35, 57,173,209,166,242,231, 29,126, 94, 71,254,214,134,148,164,209, 96,181, 7,109, 37,176, 50,
+ 66, 90, 9, 22,172,145, 24, 13, 82, 69, 56,132,191,143,141,241,160,110,124,186, 88, 8,133,141, 98, 68, 20, 35,226, 8,169, 34,
+ 31, 85, 9,137,144, 49, 78,250,235, 33,164,255,219,241,232,136,255,248, 47,238,231,139, 15,125,156,193,229, 61,138, 42, 70, 75,
+ 69,154,105, 98, 85,176,115,117, 64,183,213,164,202, 75,138, 81,197,160,175, 73,227, 8, 37, 37,149,118,140,243,146,102, 83,113,
+246,236, 42,184,146, 36,141,104, 54,155, 84,121, 65,154, 68,168, 72, 49, 42, 10, 6,249,152,172,213,166,212,154,150, 84, 88, 96,
+123,119,151,180,213, 97,231,224,144,164,213,230,232,224,128,219,111,191,131,241,120, 68, 51,105, 19,197, 49,121,175,199,210,210,
+ 50,151, 30,123, 28, 99, 13,253,209,136, 82, 64,211, 66,183,187, 68,127, 48, 2, 28,189,195, 93, 26, 73, 76, 51,137,177,227, 17,
+ 70,151,180,178, 46, 91, 27,155, 88,237,203, 52, 82, 74,156, 80, 32, 4, 75,203, 25, 69, 94,160,164, 34, 75, 83,226, 36,102, 52,
+232,211,110, 54,201,210,132, 98, 60,194,150, 57, 73, 26,177,117,110,139, 52, 58,203,104,112, 76,127,152, 83, 26, 65, 20,199, 52,
+178, 54,214, 88, 70,227, 28, 41, 44, 90,151, 24, 7,186,170,168,180, 65, 9, 71,169, 53, 89,146,160,157,193, 2,113,163,193, 51,
+151,175,114,211,197, 11,244, 7, 62,219,152,196, 9,171, 43, 75,140,139,146,203, 59, 59,180,155,109, 92,101, 72, 34,197,238, 51,
+ 79,210,237,180, 89,238, 46, 49,174, 44, 90,128, 67,250, 12,145,153, 70,160,206, 90, 36,206,239,159,118,230, 94,113,204,148,127,
+220, 76, 26,222,157, 90,165, 21,167,196,132, 39, 35,118, 41, 4,126,183, 17, 8, 7,114, 18,185,251,123,204, 9,137, 18,117,118,
+208, 97,112,200, 16,161, 91,233,166,211,194,156, 47,223, 73, 43,188, 19, 44, 28, 2,137,117,190, 28,107, 39, 41,123, 31,108,217,
+153,168,220, 90,235, 51, 3,115,101,180, 16, 27,187, 19, 25,235,218,177,176,179,251,136,131,217,232, 93,158, 8, 54,235, 20,123,
+112,108,164,146,147,180,251, 92,164, 78, 56,127,102,157,162,169,153,240, 4, 99, 36,145,156, 73,148,203,107,106, 30, 83,224, 62,
+153, 38,247,207,151, 51,145,185,155, 7,210,176,225, 27,227,107,144,245,215, 41,152, 79,107, 9, 53,224,204, 58, 5, 32,230, 54,
+215, 27, 1,187, 16,194, 3,168, 16,215,164,249, 79, 47, 27,132,207, 86, 8, 92,248,249,197,243,103,233,102, 41,191,243,208,167,
+216,190,122,153,172,153,113,233,243, 95,100, 56, 26, 33, 68,184,184,198, 96,109,197, 48,207,249,252,195,143,240, 45,111,255,122,
+246,182,247,105,102, 49, 42,125,130,111,122,219,219,248,135,120, 16, 81, 82, 33,140, 99,169,213,101,167, 63, 96,111,111,143, 78,
+183,141,106,103, 97,243, 54, 8, 33,136,226,136, 98,156,211,239, 91,148, 18, 36,113, 68, 94,140, 73,162,136, 34, 47, 24,229, 99,
+ 74, 93,146,101, 41,133,115,100,141,148,209,184, 0,160,187,212,101,117,109,157,162, 24,161,181,166,170, 10, 70,163, 1, 79, 94,
+186,196,214,217,115,200,168,193,217,179,103, 41,203,138, 43, 87,175, 82,148,165, 79,165, 73, 73, 36, 99,210,216, 80,148, 35, 70,
+163, 1, 85,169, 24,173,172, 82,184, 8, 93,250,141,187,190, 6, 46, 56, 89,214,129,149,179,252,139,233,162, 83, 50,154,164,182,
+149, 18, 1,220, 35,146, 56,246, 41, 94,165, 2,208,199,126,115, 16,150, 72,165,164,205, 14, 89,107,153,102,123,149,102,103,133,
+102,103,153,172,221, 34,105,196,164,105, 76,164,188,199, 26,197, 9, 52, 18, 26,182,229, 55,181,170, 68,235, 18, 93, 22, 24,163,
+113,198,129,157,174,221,185, 18,141,181,152,144, 66, 51,198, 80, 21, 37, 82, 41,162, 52, 33,142, 35,159, 81,168,215,161, 60, 81,
+198,145,211, 90, 24,115,217,163,240, 28,121, 58,152,139,144,193, 16,242,250,235, 28,161,166, 30,189, 15, 67,230, 75, 0,147,180,
+186,131, 80,127,175,211,236, 30,216,235,116,125, 29,229, 79, 35,119,163,125, 93,214,104, 31,249, 27,163,253, 87,109,176,166,162,
+170,124,164, 47,112,164,145,160, 17, 11, 26,141,132, 40,149,200,196, 19, 25,156, 4, 43, 8, 5, 22,227,211,139,194,133,124,170,
+197, 25, 3,174, 66, 88,133,141,164,231, 45, 72,137, 19, 17, 66, 40,148, 0,116,137,176, 21,191,249,111,127,142, 75,191,255,219,
+ 28,111,239, 83,244, 45, 70,129, 72, 44, 89, 26,115,116, 48,166,221,202,144, 66, 48, 24, 20, 12, 6,150, 40, 86, 24,231, 24, 23,
+ 21,163, 66,211,105, 39,172,175,182,193,149, 40, 89,215,247, 5, 74, 70, 72, 25,129, 80,140,243, 28,164,162,172, 52,205,102, 19,
+231, 28,207, 60,123, 25,149,164,244, 6, 99,210,172,197,209,241, 49, 43, 43, 75,100,169, 98,117,249, 12,101,145,115,120,116,196,
+202,218, 6, 79, 63,123, 25, 21, 69,140, 6, 5,198, 10, 26,237, 14,113,218,100, 92,228, 36, 73, 68, 62, 28,208,109,183, 16,174,
+194,153, 2,131, 99,235,236,121,148, 80,140,242, 10, 28, 88,171,105, 52, 82, 84,154,226, 28, 12,135, 35, 26,113, 68,179,145,176,
+180,188, 68,163,217,160,219,186,157,222,225, 1,253,222, 49, 55, 95, 56,207,214,250, 10,197,104,200, 51, 79, 61,137,169, 74,202,
+106, 76, 94, 89,140, 76, 17, 42, 99,123,255,144,193,113,143, 52,137, 89, 89,238,208, 78,155,232,162, 96, 48, 28,225,128,102,179,
+137,138, 34,140,115, 84,101, 73,127, 92,144, 53, 26,196,141, 6, 99, 99, 89,218, 58,135,141, 27, 84,195, 1,214, 64,183,221, 65,
+ 27,195,206,193, 17, 89,218, 96, 88,140,137,226, 6,143,127,246,243,124,237, 55,124, 3,141, 88, 49,170, 52,218, 5,110,132,148,
+152,186,140,228,175,252,196, 97,245, 32,230, 2,113,102,126, 15,159,163,122, 92, 3,222, 76, 56, 87, 66, 76,131, 3, 55,243,123,
+ 33,166,206,132, 13,120, 98, 77,248,254,132, 35,125, 50,211, 44,132,240,206,135, 19,128,242, 72, 43, 44, 2, 21, 2,108,131,115,
+114,230,126, 83, 83, 7,123, 38,195,102,103,178, 19,117, 26,222, 57, 57,117,207,221, 52,106,247,153,130, 19, 37, 58,235, 38,216,
+ 88,167,200,103,203, 21, 98,166,110, 46,164, 8,145,186,242, 17, 60,245,207,165,255, 93,240, 82,164,144, 33,144,153, 9,140,133,
+192, 9,143,183, 81,189,201,159, 44,218, 43,165,106,202,205, 53,155,228,105,233,240,217,159,121,242,145,247,100,106,176,173,127,
+ 62,253,222,191, 71,253,254,243,155,158,120,193,160, 94,127,120, 39,121, 1,179,209,255,244,216,166,155, 65,189,112,100, 36,113,
+ 86,211,106,166, 60,240, 43,255, 1,210, 22,189,163, 67, 86,151, 87,124,122, 92, 23,128,165, 44,115,138,178,160,217, 76,168,180,
+225,173, 95,247, 54, 90,221,101, 14, 47, 63,133,176, 45,142,119,246, 88,218, 88, 39, 18, 48,236,245,104, 40, 31,101, 38,113,194,
+242,242, 10, 56,239,193, 91, 99, 41,203, 2, 41, 5,121, 62, 66, 10, 69, 26,135,180,216,112, 68,150,166,140,134, 57,135,123,251,
+ 36, 73,202,198,198, 26,253,126, 31,139, 96,191,215,167, 24, 23,126, 24,189,144,116, 91,109, 14, 15, 15,105, 54,253,223,215,105,
+154,245,245, 53,150,150,186, 12,199,158,140,214,110,183, 88, 91, 91, 99, 52, 30, 51,206,139,224, 80, 73, 4,138,141,141,117,118,
+118,123, 24,227, 24,140, 74, 68,154,144, 91, 67,228,212,164, 46, 94,187,125, 74, 8, 63,214, 79,212,159, 99,120, 29, 33,144,210,
+ 71,226, 82, 73,164,242, 41, 35, 37, 37,113, 72,187,251,133, 43, 39,112, 39, 85, 20,136,109, 45, 26,205, 14,141,246, 18,173,246,
+ 10,205,118,135, 44, 75,137, 26,138, 40,246,192, 32,156,196,213,127,239, 18, 18,151,134,122,178,193,232, 10,163, 43,108, 85,249,
+239,237,148,116, 54,113, 66,221,204,109,101,125,164,235,140,198,234, 18, 29,136,119, 34, 82, 68,161, 76, 32, 84, 13,240, 18,233,
+252,205,118,178, 76, 53,189,153, 66,157,108, 6,156,231, 86,155,112,193, 57,246,219,225,228,111,133,207, 22, 77, 51, 78, 30,228,
+ 61,201,172, 94,255,245,177, 91,239, 84,212,117,206,153, 58,253,164,182,104,102,136,115,147,186,188,243,209,189,118, 88,227, 48,
+ 85,229,129,191,170, 2,200, 87, 56,163,137,165, 35,139, 5, 89, 18,145, 52, 36,113, 26,121,130,156, 18,224, 44,206,106, 80, 18,
+108, 4,206,151, 10,132, 53,147, 40, 68, 40,135,147, 6,132, 13, 27,158, 5, 39,144,214, 66, 57,226,119, 31,252, 32,159,254,173,
+ 7, 57,124,106,155, 97,191,242,159,171, 42,232,180, 82, 70,189,146, 70,220, 4,231, 24, 12, 11, 6, 35, 71,146, 38, 56, 4, 69,
+ 89,162,141,165,221,142,105,119, 98, 90,237, 4, 73, 69, 85, 22,156, 93,223,244,196,179, 40, 38, 73, 82,140,181,244, 7, 67,154,
+221, 14, 73, 35,197,226, 56, 58, 62,162,210, 26, 27, 69, 88, 4,123, 7,135, 84,186,228,226,185,155,169,198, 3, 6,210,208,108,
+ 47,131,244, 14, 68, 20,167, 24, 4,134, 49, 43,107, 27,104, 25, 19, 69, 9,206, 25,156,201,137,148, 33, 17, 18, 97, 99, 74, 93,
+177,182,190,201, 56,175,104, 54, 27,104,107, 41,138,156, 52,141, 25,230, 37,173,198, 18, 43,221, 14,141,141, 77,132,213, 40,233,
+ 73,130,203,221,140,149,229, 46,205, 88,176,181,182, 76,162, 36,229,104, 72, 57, 26,177,181,182,206,112, 56,160,212, 41, 29,145,
+ 80,136,152,227, 97,193,234,218, 58, 23,111,186,137,118, 51,195, 85, 57,237, 44, 35,207,199,244,135, 67,178,102, 19, 21, 37, 40,
+ 21, 51, 30, 15, 89, 95,105,145,231, 5,221,110,151,126,191, 15,141, 22,206, 90, 84,101, 16,206, 81,141,135, 84,101, 69,167,221,
+ 97, 92,106,198,101, 69, 22,199,158, 67,163, 53,159,252,248, 39,120,203,215,127,131,223, 79, 43, 61,225,151, 88, 27,106,212,182,
+ 38,161,205,112, 70,102,234,203,215,236,205,156, 66, 40,171, 1,109, 82, 83,247, 0, 44,157, 69,216,249,108,241,228, 62, 10,165,
+190, 41, 96, 6,127, 58, 68,232, 46,160,255,148,215, 51, 3,204,194, 77, 50,102, 82,133, 96,206,186,153,104,123, 38, 5, 96,231,
+ 3, 66, 79,144, 11, 64,125,130,228, 61, 11,234,179,239, 55, 91,127,247,100,218,153,140,241, 41,251, 72,141,125,158, 7, 60,253,
+ 94, 49, 19,100, 75, 1,115,193,182,156,255,156,164, 15, 80,141, 49,126,143,174, 65,177,206,217, 79,210, 1,147, 52,136, 12, 76,
+102, 55, 97,190,214,185,252,147,192, 62, 33,186, 5,210, 78,164,252,135,101,165,196,104, 61,185, 56,158,128, 97, 61,121, 42,128,
+ 59, 76,107, 43,243,142,194,137, 15,242,100,170,223,147, 84, 39,243, 91,235, 69, 54, 95,203,241, 27,171, 68, 18, 73,159,182,145,
+ 82, 96,133, 96,109,109,131, 94,111, 68,111,208,103, 41,107,179,191,191, 71,111, 84,113,229,202, 21,159,102,196,161, 77, 5, 8,
+250, 3,205,230,230, 25,198,163, 49, 42,242, 17,222,241,241, 17, 14, 80,237, 22, 27, 43,107, 60,122,233,105,218,235, 29,156,177,
+196,113,194,198,198, 38, 82,216, 64,128,240, 17,133, 53,154,170, 40,105,100, 25, 73, 35,193, 25,141, 36,243, 44, 95,173,185,186,
+179,203,112,148,179,188,220,225,226,133, 11, 36,113, 66, 99,156,227,140, 65, 1,177,148, 44, 45,117, 88, 93, 89, 38,142, 21,113,
+ 20,211,202, 50,146,200,131,107, 28, 69, 36, 13,197,112, 84,144, 23, 5,205,102,147,213,149, 85,158,187,178,237, 63, 87,235,136,
+100,228, 29,139, 72,121,114,146, 46,200, 90, 45, 70,113,131,216, 5, 71, 75,169,105,221, 8, 25, 60,197,154,113, 45,103,202, 52,
+ 51,145,238, 76,237,135, 57,110,133, 13,233,114, 95,111,143,162,132, 52,109,145,100, 45,178,102,155,172,213, 36,107,101, 36,205,
+152, 56, 81, 40, 37,112,194, 34,172, 7,118,159, 30,183, 8, 23, 60, 88, 55, 45,161, 56, 83, 65, 93,123, 14,117,105, 95,203,244,
+233,233,105, 45,219, 71, 31, 19, 47,218, 25, 42,107,161,114, 84,194,159,111,148,120,112,143,227, 24, 23,121, 22,185, 16, 34,144,
+254,106, 18, 79, 29, 97,204, 78, 14,158, 43, 43,250,223,203,122, 3,115, 51,222,117,104,240, 16, 51, 4, 79, 23,206, 13,129, 20,
+243, 53,185,192, 41,246, 78,129,231, 18, 99,157,103,237,203,217, 58,191,157,166,252,172,213, 33, 93,234,192,248, 77,217,232,192,
+166, 47, 13, 90,123,112,116,182, 34,141, 4,205, 68,145,165, 49,113, 38,145,137,242,124, 5,225,176,206,224,116,133,211, 62, 93,
+111,173, 70, 88, 27,178, 10,102, 26,117,137, 58, 39, 42,113, 50, 6,103,137,116,201,227,159,252, 44,191,243,193, 7,184,250,197,
+231,168, 14, 75,140, 16,136,200,209,106, 71,148, 69, 73, 68, 66, 81,248,200,169, 55,208, 68, 42,194, 24, 71, 81, 85, 56,103,105,
+ 54, 35, 90,205,132, 78, 59,195,154, 10,135, 38,141, 99,202,178, 10,155,180, 39,236, 29, 29, 30,160,226,136, 40,142, 41,170,138,
+102,179,201,209,254, 1,105,171,205, 81,127,128,136, 99,138,124,204,217,115,103,136,149,100,121,101, 21,235, 96,239,224,144,229,
+229, 85, 70,195, 33,165, 54, 24, 11,155, 91,103, 41,141, 1, 98,156, 19, 52,179, 6,197,240, 24,165,192, 84, 37, 10, 69,154, 52,
+ 40, 10, 77,171,221,101, 52, 42, 60,233,174,211, 0, 12,157,118, 43,240,111, 42, 76,169,105, 53, 18,182, 54,214, 25,151, 62, 93,
+ 63, 30, 14, 72,227,152, 36,203,232, 29, 31, 33,173,231,110, 12,250,125,210, 52,163,179,180,194,179, 87,118,104,116, 91, 92,221,
+ 59,228,232,120,192,213,171,154, 44,137,232, 54, 19,202,110, 23,231, 4, 7,123,251,140,138, 43, 40, 37, 89, 95, 91,167,153, 37,
+228,121,132, 49,150, 65,127,196,104, 92, 18,167, 13,116, 89,176,113,211, 69,158,248,253, 93,186, 89,155, 60, 31,145, 32, 89, 91,
+ 94, 97,123,111,207,175, 45, 43,208,214,160,171,146, 47,124,238,115,220,249,230,183, 34, 69, 68,105,170, 73,198, 7, 12, 56,129,
+195,206,144,211, 44,117,134,221,221, 16,212,103,156,235,122,221,123, 18,138,191,183,172,155,212,211,231, 82,240, 33,194,157,173,
+113,123, 44,112,152, 26, 87,231, 0,183, 6, 86,166,105,115, 59,173,145, 79, 66,198,144,145,147, 51,169, 54,231, 60,176,206,166,
+ 24, 92,248,185,229, 90,231,197,157, 60,215,154,180,231,184,134, 80, 59, 9,120,103,238,121,230, 64, 61,212,215, 5,212,228,245,
+ 58, 16,242,191,147,160,152,225, 30,120,160,175, 51,129, 1,188,125, 77,221, 90, 27,218, 18,108,128,107,231,235, 15,194,249,200,
+107,174,205, 96,190, 45,232,100,202,101,194, 50, 55,161,206,233, 44, 6, 9,210,120, 6,173,242,155,163, 54, 51,109, 65,174,118,
+ 42,148, 39,163, 41,144,210, 77, 60,150,250,125,167,224, 48,243,182, 62,223,129, 10,193,129, 4,180,144, 8,107, 67,132,233,194,
+249, 4,172,145, 18, 37, 20, 17, 2, 37,189, 39, 80, 9,201, 96,172,217,188,112, 27,231,110,190,157,188,178,180, 90, 93,154, 43,
+ 77,190,235, 59,191,155, 11, 23,207,243,193, 95,255, 85,180,243, 41,111,165, 18,214,150, 54, 57,123,230, 28,130,138,172, 41, 17,
+ 86,225,132, 7,146,181,149, 53,226,100,135,194,129,146,130,210,104,226, 36, 69, 87, 26,147, 23, 52, 26, 41, 81,220, 32,175, 6,
+ 36,141,148, 86,187, 9,194, 16, 73, 73, 81, 89,118,143,142,232, 13,135, 28,143,114,132,113,172, 46,175, 50, 26,230,172,173,181,
+104, 68, 17,221, 36, 98,104, 12, 81, 36,232,180, 83, 90,205, 4, 25, 37, 72, 39, 48, 85,129, 41,199,232,178,164,187,188,134, 44,
+ 42,242,106,207,183, 97, 89,193,202,234, 58,189,254,136,131,131, 67,226, 56,193, 58,201,104, 8,205,172,141,182, 5, 68, 49,194,
+198, 36,201, 18,137, 40, 61, 97, 35, 92,179,185,245, 60,185,185,236, 52, 95,198,148, 4,226, 9,102,118,146, 23,177, 51,233,181,
+ 8,129,144, 49, 82, 38, 68,113,134,138, 27, 36, 73,147, 40,201,136, 26, 9, 50,133, 56,141,124, 43,154,100,194,190,245,209, 95,
+132,196,206, 0, 97, 32,157, 32,144, 54, 70, 98, 67, 10,212,160,181,103,141, 87,149, 70,235, 10,140,158, 16,210,132,155, 73,119,
+ 91,231,249, 3,206,131,148,117, 21,165, 22,168, 72, 65,146,160,146, 24, 73, 74, 20,199, 30,232, 66, 4, 47,100, 93, 75,247, 25,
+143,153,140,122,136,108,172,143, 14,228,180,181,211, 9,112,178, 6,119,144,225,239,234,122,254,220,189,228,252,249, 5, 34,242,
+180, 36, 21, 62,103, 89,239, 59, 97,131,171, 9,127,245,247, 74, 38,225, 58, 89, 80,190,174, 45,132,175, 53,226,252, 17, 91,235,
+143,161,217,140,201,178,132, 52,141,136, 26, 17, 68, 10,159, 59,247,209,147, 51, 62,179,129,213, 56, 91,249, 63,180, 33,131, 48,
+195,125,145,148, 96, 35,140, 74,209, 20, 28, 60,254, 5,126,255,193,223,228,242, 35, 79,145,143, 12,214,231,242,233,100, 13, 48,
+126,127,168, 42,223, 85,210, 31, 21,225,115, 20,148,165,111,253,140, 83, 69,150, 42, 90,153,194, 86, 5, 73,171, 73, 62, 46,233,
+116, 59,228, 69, 73,171,217, 36,205, 26, 84, 14,122,131, 17, 75, 43,203,222, 1, 3,122,195, 17, 46, 74, 24,148, 22,153,182, 56,
+ 58,220, 99,117,165, 75,167,153, 32,149,100, 84, 24,226, 56,166,217,200,136,163, 8,107, 29, 42,142,176, 66, 5, 98,158, 36,106,
+ 54, 89, 94, 89,166,191,119, 5,105, 12,249,120,128,179,142,230,210, 10,227, 81, 65,167,213, 33, 47, 42,156,132,172,149, 1,208,
+206,154, 20,227, 17, 73,148,179,181,186,198,250,242, 42,249,104,196,115,207, 62,141,138, 34,154,237, 22,221,141, 37,202,188, 96,
+255,168,135,174, 12,166,212,140,243,138,181,173, 11,244,122,125,158,123,106, 27, 37, 12,163,227, 67,154, 74, 80, 36, 10, 99, 4,
+177,176,196,194,208, 80,142, 36,202,104,156, 57,207,147,207, 61,135,146,142,245, 86,131,102, 35, 97, 92,105,191, 38, 29,200, 74,
+208, 59,234,209, 89,237, 82, 86, 57, 75,155, 91,152,193,144,102, 20,145,247,250, 44,117,218,228,205, 49,135,131, 62,145,138,104,
+197, 9,189,209,152,252,248,144,203, 79, 94,226,142, 55,188,129, 81, 89, 82,216, 10,165,125,135,137,213, 6, 93,213,109,150,150,
+ 50,148,132,132,113,147,246, 51,107,237,196,213,117,206, 33, 13,115, 96, 75,112,118,103,161, 81,214,164, 48, 57,195,236,150, 34,
+236,224,211,250,245, 28, 80,138,217,123,131, 19, 29, 41, 2, 99,231, 9,123,211,192,115,210, 4,118, 77, 97,223,137, 58,136,116,
+115,220, 49, 21,222,204,205, 61, 95, 76,156, 25,231,124,105, 42,240,100,167,164, 58, 55, 79,182,113,194,206,180,122, 79, 83,238,
+190, 51, 40,252, 59,148,177,148,244,153, 79, 31, 4, 73, 16, 46,100, 66,163,153,125,104, 82, 31, 12,159, 65, 84, 71,234,243,233,
+234,185, 30,185, 9,221,254,148, 20,252, 53,160, 30, 72, 83, 82, 32,109,125,113, 66, 43,129,180, 40,229, 38,181, 4, 51,249,176,
+ 93,168, 85,219,240,136, 2,152,204,151, 4, 38, 23,228, 68,195,156,147,210,111, 48,194,255,125,228, 57,208, 19, 32,168, 23, 75,
+237,204, 40,225,124,187,139, 16, 56,233,189,189, 60,212,179,210, 70,134, 70, 99,156,229, 96,111,151, 15,126,240, 1,190,240,240,
+103,168,116, 17,178, 10, 49,157,206, 18, 23, 46, 92, 64, 74, 65,146,196,180, 55,215,209,229, 24, 67,131, 86,167,203,153,115,231,
+136, 31,125,130,170, 42,105,180, 91, 68,113, 68, 89,122,214,112, 26,197,181,115,234, 9,214, 74,209,204,154,148,227, 28,227, 4,
+ 7,189, 1,159,250,252,163, 24, 28,155,203, 75,188,245,141,119, 18, 75,129,144, 48, 30, 14,104, 52,252,141,107,180,102,235,204,
+ 38,221, 78, 11, 37, 5, 90, 27,226, 36,193, 90, 75, 62, 30, 51, 28, 14,112,206,210,233,180,209, 70,115,120,112, 76, 81,150,168,
+ 56, 33, 73, 18, 90,173, 22,198, 88,202,188, 32, 82,190,174, 27,199,138,170, 44,161,172, 72, 27, 25,169, 80,147,218,248,201,242,
+137,179,128,177, 88,231, 35,198, 73,198, 38,172, 9,103,197,228, 14,113,225,123, 33,195,239,234, 90,152, 16, 72, 21, 17,199, 9,
+ 73,154,146,166, 9,113, 18, 17,199,145, 79,187, 43, 57,195, 75,179,158, 63,237, 0, 33, 39,183,146, 96, 74,228,148,248, 20, 30,
+ 66, 16, 57, 71, 20, 0, 59, 14,145,186, 11, 53,101,223,131,106, 38,237, 96,214, 24,164,147, 56,103, 38, 17,125, 77,178,171,202,
+ 50,212,168,124,186, 89,186, 4, 71, 52, 77,127, 41,233,183,163, 9,176,214,184,234, 2,123, 55, 84, 31,197,233,192, 61,155,237,
+154,237,246, 8,132, 21,102,182, 30,159,149,152,253,195, 25, 7, 75,212,239,107,167, 41,191, 73, 25,172, 62,207,176, 33,155,170,
+194, 20,154,170,244, 68,195, 52, 81, 40,149, 18,165, 17,178,145, 32, 18, 21,218,212,196, 36, 51, 34,173, 5,155,224,155,119,245,
+ 28,243, 89,204,221,141,190, 78,169,132,160,218, 57,228,227, 15,254, 38, 31,251,216, 39, 24,246,199, 20,185, 33,141, 4, 73,146,
+146,196, 49,189,222,104,226,176, 15,199, 85,136,184, 44, 69, 89,161,148, 32,107, 68, 40, 5,205, 44, 69,224,104,181, 50, 70,163,
+ 1,105,210,160,172, 52, 74, 68, 12, 71, 5,157,238, 10, 7,135,199, 32, 37,105, 35,101, 52, 30, 17,167, 41,253,193,128, 86,123,
+153,241,200,167,169, 27,105,226,217,210,198,128,243, 90, 17, 90,107, 54, 55,183,120,238,242,101,180, 5,169, 18,116,149, 83,149,
+ 37,103,206,158, 67,196, 9,227,193, 49,173, 44,229,224,234, 30, 24, 75,156, 54,232,247, 7,180,187,203, 12,242,156,113, 62,102,
+101,109, 21,131, 33,141, 35,180,201,217, 58,179,206,230,106,135, 42, 31, 51, 26, 13, 25,133, 52,121,171,221,102,101,125,149, 94,
+175, 79, 85, 20,180, 90, 45,122, 71,199, 24,107,200,178, 6, 87,175, 94,197, 90, 75,101, 13,253,241, 0, 33,161, 48, 14, 25,167,
+236, 31,238,162,199, 3,226,141, 46, 35,171, 17,141, 22,141,172,205,215,189,241,117, 60,125,229, 10,165, 19,228,163,156, 40, 75,
+105,100, 41,101,161,137,155, 41,187,219, 59,108,172,173, 81, 13, 70,108,172,109,240,228,193, 33, 75, 89, 70,171,221,166, 63,232,
+179,181,117, 6, 13, 28,244,135,164,157, 6, 73,101, 24, 27,203,238,213,171,116, 86,150,185,233,142,219, 25,228, 99, 74,231,124,
+ 39, 70,101, 48,229,180,221, 82, 25, 51,233,248,240, 36,179, 41, 67,220,132,182, 77,135,153,107, 61,115,179, 44,241,128, 33, 86,
+248,123, 24,107,103, 72,100, 33, 32, 56, 65, 76,155, 77,155,207, 70,207,215,166,188,197, 84,199,225,154,186,123,184,103,102,210,
+ 12,117,234,124,178,162, 29,115, 61,247,167,150,159,197, 76,231,143,171,157,241,105,247,214,108,249,217,123, 90,114,190, 3, 64,
+136, 73,240, 44, 3, 19,190, 46,255, 73,165,144, 33,168, 82, 74,249, 72, 61,128,122, 13,232, 66,200,185,222,120,231,156,175,169,
+135,112, 43,156,196,148,145,167, 66,191,156, 12,233,199,105,195,187, 56,149,252, 48,249,185,146,126, 99,149, 18,173,124, 45, 89,
+ 86,138, 82, 86, 24, 99,253,107,215,139,192,186,169, 83,225,172, 23,251,112, 2, 99,252,137, 68, 33,197, 61, 57,241,186, 95,175,
+246,241,130, 32,135,169,185,142,110, 74,194,112,212, 41,247, 64,170, 17, 14, 37,156,143,212,133, 3, 37,112, 72, 68, 44,120,238,
+153, 39,125, 47, 38,112,238,220, 57, 14, 30,125,130,178,202, 25,141,142, 65, 24,164,138,144, 50, 97,235,204, 89,206,157, 59,203,
+185,179, 91,140,135, 3,180, 29,177,182,186, 66,186,180,137, 72,155,188,230,117,119,242, 75,191,242,107,180, 59, 29,178,102, 19,
+109, 13, 10, 65,171,221, 33, 82,161, 85,196, 58, 84,168, 5, 58, 11, 89,163,137, 53,112, 56, 24,144, 91,131, 18,130,209, 40,167,
+ 17, 37,232,106,204,234,234,186, 23, 80, 17,146,115, 7,103, 41,202,146, 51, 91,103,104,196,177,111, 31, 11,139, 81, 69,178,166,
+168,134, 13,221,177,188,188,140, 49, 14,231,250, 84,218,208,108, 54,189,128, 76,168,237, 39,137,160,116, 62, 29,101,156, 69,231,
+ 5, 75,141, 38,137, 95,127,147,108,137, 49,230,121, 91, 11, 79,227, 58,184, 19, 29, 16,214,185, 41, 16, 75, 69, 20, 39,196, 65,
+168, 39,138, 36, 81, 92, 47,240, 25, 65,139, 80,139,159,118,113,136, 73,204, 42,102, 87,163,152,222,140,190, 34,229, 80, 54,154,
+128,155, 13,194, 18,147,182,176, 64, 28,115,161,182,172,148,154,128,161, 79,123,227, 1,177,168,208,198,247,160, 41, 27,135,207,
+ 58, 10, 45, 92,222,123,151,136, 57,172, 13,121,195,201,207,167,108,213,217, 58,226, 60, 41,111,150,120,106,197, 60,249,116, 34,
+236, 81,111,112, 97,183, 17,110, 74, 84,173,137,116,132, 99,117, 53,243, 93, 87,232,178, 66,235, 10, 83,148,216,178,164, 42,115,
+156, 51,168,180,141,138, 64, 68, 2, 17, 73,156, 82,160, 60,175,192, 10, 91,187, 74,129, 70, 81,103, 76,152,219,248,166,169, 74,
+233, 51, 1,195, 35, 30,251,232,199,248,157, 15,124,144,253,195, 35, 48,144, 8, 73,179, 25,145, 36, 49,251,251, 3,226, 88, 97,
+141, 67,107,131, 20, 2, 19,128, 33,137, 5,113, 34,145,210,146,166, 9, 73, 12,221,165, 54, 85, 85,250,171,238,240, 90, 9,206,
+178,188,188, 66, 94, 26, 70,121, 65,218, 72, 41,181, 38,138, 99, 70,227, 28, 33, 35,142,142,142,200,141,193, 84, 5, 50,105,210,
+233,180, 81, 74,145,101, 25,205,166, 23,183, 25,246,135,180,154, 29,134,227,156, 60,207,145,113,194,202, 74,139,172,149,145, 15,
+ 7, 36,174, 98,239,234,101,176,134, 72, 69, 56, 7,141,172,197,112, 56,166, 44, 11, 54, 54,214,200,203,156,173,141,117,148, 20,
+172, 47, 47, 35, 29,129, 19, 19,163,171, 10,109, 12,141, 70,202,185,155, 46,114,120,116, 68, 81,149, 88,173, 57, 58, 58, 98,103,
+123,155, 88, 69,108,135,175,121, 89, 32,226,152,188, 42, 57,238, 29,179,123, 52, 0,213, 64,151, 21,235,221, 54,157,165, 21,110,
+191,233, 28,221,212, 59, 59, 54,141,217,223, 19,228,101,238,249, 7,177,228,169, 39,175,178,185,117,150, 51,103,206,178,187,189,
+ 67, 62, 28, 35,181, 23,191, 73,179,140,202,104,116,145, 19, 39, 41, 71,199,199,156, 57,123,142,194, 60,199,113,127,192, 82,119,
+153,170,215, 71, 41,197,147,151, 46,177,186,185, 78,119,109,133,161,246, 89, 21, 83, 25, 76, 84,133,246, 73,131,210,158,112, 57,
+213,100,112,147,108,146,169, 3, 53, 51, 21,110,154,136,191,212,189,228,206, 7, 7,206,217,153, 30,236,192, 99,177,146, 90,210,
+234, 52, 78, 85,184, 67, 39,160,235,219,132,221, 4, 83,166, 68,223,186, 43,198,151,236, 8,130, 56,238, 68,119,212,108,164, 63,
+219,134, 54,193,197, 25,199, 92,156,214,131,206,180,158, 63,185,213,229,124,185, 14,105,167, 89,232, 19,193,179, 82, 83,246,187,
+ 8,160, 94,147,230,164, 82, 56, 53, 45, 55,213,156,159,169, 64,207, 52, 48,136,230,210,170, 39, 90, 10,148,148, 19,146,211,105,
+253,236,215,245, 94,194, 71,110,165, 36,114, 62,149, 26,107, 67, 18,122,183, 43,173,209,122,190,197,102,182, 13,192,217,169,130,
+143,181,150, 40,138,230,179, 8,245,113, 58,231, 25,186,110,170,120,197,132,157,233, 38,164, 35, 85,115, 5,132, 35, 22, 46,124,
+ 31,180,146,116,137,181, 99, 42,237, 23, 80,220,236,178,182,177, 73,119,123,151,178, 44,124,141,133, 58,171, 96,121,250,233,167,
+248,236,103, 62,205, 31,255,250,187,216,221,121,142,118, 2,113, 18,179,185,118, 30, 11,188,249, 45,111,241, 17,115, 81,128, 32,
+168,173, 89, 42, 99,137,226,120,114,158, 8, 73, 28, 39,147,158, 95,165, 36, 85,169, 39,192,149, 37, 49, 78,107,150,186,109,202,
+ 50,103,117,105,147,223,251,212,103,217,217,221,231,246, 91,111,166,217, 72,112,198, 80, 22, 5, 50,106,248, 62,248,224,237,225,
+ 44, 69, 62,166,211,234, 32,149, 98,117,117, 21,107,161, 44, 53, 66, 40,242,188,192, 85, 21,113, 18,227,170, 18, 97, 12,121, 49,
+196, 40,137,168, 12, 50,139,161, 10,139,209,213, 92,138,144, 46,226,198, 55,218, 11, 1,251,208,235,132, 84,158,121,174, 98,133,
+138, 37, 50,150, 19,162,157,175, 23,157, 80, 95,154,112, 45,166,137,232,233,205, 87, 31,167,155,130, 13, 65, 96,200,121,132, 85,
+ 54, 66,165,177, 7, 60,235, 60,192,107,141,171, 74, 79,182,155,244,121,187,192, 12, 15,206,181,117, 8, 99, 48,149,191,225,141,
+214, 68, 73,130, 50, 17, 50,138,144, 74,226,130, 3, 44,230,116,212,196,233, 98, 76,142, 57,103, 68,156,162,181, 48,219, 66, 39,
+194, 61, 90,215, 23,235,141, 67, 76,196,110, 12, 86,155, 73,219,155,173, 52, 78, 91, 76, 85, 98,170, 10,171, 43,223, 45, 80,149,
+152,178,196,149, 5,186, 42,137, 19,127,127, 42, 50,148,244,217, 46, 33, 3,184, 7,130,164, 19, 39,210,140,245,106,112, 39, 4,
+158, 16, 88,167,176, 46,231,202, 99,143,242,192, 47,254, 27, 46, 63,254, 69,144,130, 40, 82,180, 82, 69,156, 8,142,143,135,196,
+145,240,107, 29,129, 20,202,139, 4,197, 18,107, 45,113, 44,137, 34, 72, 98,104,183, 99,186,221, 22,198,104, 6,253, 62,157,118,
+ 23,109, 28,141, 52,165,200, 75,146, 70,139,163,163, 35,132,148,164,141, 12, 25, 69,148, 85, 69, 89, 85,196,105, 70, 53,202, 25,
+143,134, 68,137,162,221,206, 72, 98,197,250,218, 26, 82, 70, 28, 29,245, 16, 82,209,136, 61,207,165,168, 52, 89,171,133,113,222,
+153,232, 29, 31,161,170, 49,123,219, 87,168,202,130,172,145,225,149, 55, 65,107,205,120, 56,100,109,121,137,225,241, 49,183,221,
+118, 43, 70, 87, 52,162,152,241,113, 31, 41, 32, 74, 98,198,165,102,255,224,144,243, 23,206,179,177,185,193,195,143, 93,226,240,
+232,128,141,149, 21,168, 52,135, 7, 7, 12,135, 67,172,241,153, 54, 99, 53,105,150, 50,172, 52, 69, 85,162,226,148,102, 91, 34,
+147, 22,107,203,203,116,211, 8, 18,197,213,195, 49,201,170, 34,139, 44,221, 36,229,117, 55,159,225,112, 48,166,223, 27,251, 54,
+215,245, 53,246, 14,247,232, 53, 27, 32, 97,239,232,144,245,213, 53,142,143, 15, 88,219,218,226,233,199, 30,165, 17, 41,148,144,
+228,101, 73, 83, 27,206,108,108,145, 63,251, 28,174,210,116,155, 77,242, 64,214,252,220,167, 63,205, 55,253,241,111, 38,203, 50,
+164,210,152, 72,163,163, 8,167, 13,166, 50, 68,129,187, 82, 3, 97,205,142,247,117,101, 15,222, 38, 0,127, 53, 17, 85,178, 33,
+210,215, 84,218,139, 91, 77,218,200,172, 13,125,164, 18, 33, 66, 29,159, 27, 72,180,205, 0,187,157, 21,123, 10, 14,224,188, 10,
+222,180,253, 78, 50,163, 39,193,137,182,210, 25, 62,214,105, 45,223,147,125, 39,252,251,121, 21, 79,107, 54,191,172, 3,102, 49,
+ 5,238, 89, 80,143,166, 0,238,193, 93, 33,163,128,191, 74, 78,212, 27,253,223,170,186,166, 60,173,186,225,247,132,232,180,254,
+192, 57, 70,222,204,247,167,157,220,245,163, 55, 95, 23,143,128, 72, 69,232,200,215,176,170,178,162,210, 30,216,171,170, 10, 23,
+216, 78,234,235,214, 56,172,152,175, 73,104,173,167, 81, 95,164,124,186,179,174,179, 7,182,175,239,183,242, 23, 74,212,125, 15,
+117, 45, 61,108, 74, 83,224,183, 56,234,243,115, 84, 69,193,184,210,164,173, 38,145,144,228, 69,193,167, 63,243, 89,134,163,161,
+143,172,141,131, 80,231,191,237,150,155,249,214,111,249,102,156, 53,148,149, 65, 54, 51,132,138, 89, 89, 94,198,169,136,165, 78,
+155,172,209, 32,105, 52, 25,141, 75,186,221, 44,244, 87, 74,132,140, 16,210,183,189, 36,113, 74, 18,165, 56,103, 73, 27, 13,198,
+163, 49,210, 24,146, 0, 10, 43,157, 78, 64, 20,223, 91,190,119,120,200,104, 52,162, 50,150,241,120, 76,150,164,164, 73, 76, 20,
+121,181,180, 40,108,158, 2,139, 49,149,103,236, 18, 34, 33, 41,137,227, 24,109, 60, 79, 34, 77, 83,138, 74,123, 30,131,209,147,
+136,174,200, 43, 50,103,209,198,215,190,107,189, 0, 2,184, 19,212,226,156,171, 5,130,100,168, 95,205,170, 27,205,168, 28, 57,
+ 78,252,108, 26,181, 34, 36, 66,120,113,154, 40, 82,168, 40,164,251,235, 71, 93,179,158,220, 92,211, 27, 77,206, 68,190, 98,234,
+ 74,207, 69,182, 53, 25, 78,204,122,173,210,161,172,244,117,239, 16,109,251,122,113,236, 1, 48,164,231,141,214,152,154,249,235,
+ 28,194, 89,207, 84, 15,153, 36,129, 69, 59,139, 53, 10, 25,197,193,163,142, 38, 94,246,172,226,134,112, 39, 19, 91,243, 9,235,
+211,148, 28, 39,100,190,153, 77,104, 2,162, 33,235, 64,232, 65,183,198,224,116, 96,242,107,141,169, 74, 92, 85, 97, 75,207,110,
+ 55, 85,137, 51, 30,216,157,174,176, 90,131,169,192, 84,190, 29,172, 82, 72,147,162, 92,138,144,241,244, 50, 9, 78, 85,134,155,
+100, 76,234,207, 87,122, 14,139,179,190,206, 63,218,221,225, 67,191,252,239,248,204, 71, 63,134,172, 28, 73, 35, 70, 70,208,200,
+ 18,122,189, 94, 96, 44, 75,226, 64,136,243,145,186,196,106, 67,146, 70,190, 84, 34, 33,203, 50, 54,214, 86,176,206,208,239,245,
+104,102,109,202,210, 32,101,196, 96, 48,164,221,238, 50,206,199,148,149, 38,109, 36, 8,169,168,180,102, 92,150, 20,186,162,114,
+ 80, 25, 67, 28, 75,226, 72, 18, 71,138,110,167, 67, 89,148,196,169, 98, 48, 28,177,177,177, 9,214,176,189,179, 71,218,106,161,
+141, 33,207,199,232, 98, 76, 36,161,183,119, 21, 87,230, 68, 97,239, 8,101, 94, 14,246,247,200,210, 20,170,130,115,155, 27,140,
+ 7,125,170,178, 98,224,124,105,175,211,238,176,125,116, 76,163,217, 98,235,226,205,244,243,156,222,211,207,144, 68, 9, 23,111,
+186,141,254,225, 33,253,163, 30,149,118, 68, 73, 3,165, 4,189,163, 35,202,170, 96, 52, 26,131, 84,140, 71, 57,237,229,101,110,
+218, 92,193,160, 80,206, 50,234, 29,177, 51, 26, 49, 94, 93, 65,148, 99,110,222,232,226,142, 15, 89,222, 88, 71,218,138,173,246,
+ 58, 85,110, 25,149, 37,194,104,196,120, 72,214,200,120,250,202, 51,164,221, 54,237,149,101,178, 52,241,193, 86,156,208,239,247,
+104,119, 58,244,123,125,206, 93,184, 64, 94, 22, 60,119,117,135,238,250, 38, 20, 21,253,178, 68,146,241,216, 23, 30,229,206,175,
+187, 11,149,197,228, 69,137, 84,145,239,199,143,172,175,181,187,121, 80,159, 21, 31,243,130, 73,190,235, 34,214, 1,212,245, 52,
+125, 95, 85,122, 42,207,106, 29,122, 2,240,204, 71,188,136, 19,169,119,230,216,230,211, 20,253, 12,169, 90, 76,245, 97,234, 54,
+235, 73, 95,119,205,114,159,193, 25, 59, 3,236, 19, 69,147, 58,107, 48,231,104,187,235,102,173, 79,118,139,157,116, 10,148,172,
+235,232,211,136,188,230, 45, 9, 41, 17,170,110, 97,243, 64, 46,164,240, 95,149,151, 98, 22, 65,153,147, 32,160, 51,201, 98, 50,
+229, 52, 68,179, 82,115,167,121, 37,190, 53,105, 26,133, 48,219, 99, 87, 23,243, 78,213,128,159,214, 57,132,112, 40, 21, 99, 34,
+ 15, 42,177,142,252,133,140,171, 64,100, 10, 23,218, 26,140,176, 84,214, 77,122,207,107,229,181,105,239,174,157,122, 43,245,230,
+ 93,247,242, 90, 55,145,244,156,144,141,106, 86, 63, 54,164,225,125,110,212, 9,233,107,194, 88,134,163, 17, 69,165, 80, 89,138,
+ 3, 58,157, 46,205,102,147,183,191,237, 27,216,221,189, 66,145, 87, 62,101, 46, 28, 10,199, 82,183, 77,191,223, 39, 47, 43, 14,
+ 7,144,117, 52,194, 89, 34, 33,216, 92, 89, 97,115,109,141,195,254,136,195,163, 1,227,194,178,190,210, 69, 41, 77, 28, 69, 24,
+103,136,165, 23,141, 1,129,140, 34,126,231, 19, 31, 39,113,130,209, 81,143, 22, 18, 17, 43, 86,150, 58, 36,169, 87, 64, 67, 69,
+236, 29, 28,210, 93, 89,163,187,188,138, 41,115,159,246,181,150,102, 35, 67,196, 9,197,104,136, 16,241,244, 51,194, 6, 45,105,
+ 77, 89,106,164, 16,158, 24,212, 20, 28, 31,247,136,227,120,146, 86,175,170,194,147,166,132, 87,205,243,146,111,207,151,106,159,
+ 1,124,230,193,123, 22,204,103,123, 85,189,159, 53,253,189,144, 42,148, 53,234,250, 61,115,252, 7, 49,243,239, 89,101, 42, 49,
+ 43, 45,233,174, 45, 51, 79,123,198,197,180,181,210,249,243,115,194, 33,172, 3,139,231,109, 72, 9,177, 66,197,202, 51, 71,141,
+ 65,151, 37,186,244, 81,188, 23,105, 17,147, 62,245,186,115,192,225, 83,137, 86, 91,132, 84, 24, 85, 77,110, 80, 41, 37, 40, 57,
+233, 26,153,166,224,174, 21, 80,150,179,106,138,215, 73, 7, 82,235,211,215, 90, 9,218,183,229,153,210,171,235,153,178, 12, 41,
+246,130,170, 44,176,149,255,222, 25, 29, 74, 11,158, 40,136,179, 56,237,201,110,194, 25,172,136,176, 57,216, 34,198,150, 41, 42,
+ 81, 16,197,224,162,192,180, 23, 97, 45,137, 57, 66,159,155,187,234,110,178, 9,186,241,128, 71, 62,244, 33, 30,252,133, 95,196,
+ 86,150, 72, 70, 40, 11,173, 78,131,225, 96,228,179, 82, 66,129, 83, 20,133,119,232,107, 39, 33, 77, 98, 76,101,137, 19,104,164,
+138,173,141, 13,148, 18,140,122,125,112,146, 36,105, 50, 30,141,124,205,185,170,104,181,219, 28, 31, 31,251,107, 30,148,235,122,
+253, 62,218, 90,210,172,201,104, 92,144,151, 37,221, 86, 74,214, 72,136, 35, 73, 18, 71,244,250, 67, 84,105, 16, 8,170,170,226,
+ 96,111, 27, 25,197,236,238,239, 98,140,229,204,153, 45, 14,118,174, 32,108, 69, 62,232,121, 1,156,200, 7, 35,113,170, 56, 58,
+ 62,242, 4,189, 36, 38,201, 18,118,246,118, 40,141, 69,197, 49,205,102,139, 98, 60,102,127, 56,230,236,205, 55,163,173,101,183,
+ 63,100,121,105,137,118,179,201,149,103,158, 97,251,234, 30,101, 62, 70,231, 99,180,246, 12,255,225,176, 79,163,145,224,156, 69,
+ 91,135, 43, 43, 90,205, 22,141,164,193,225,193, 1,163,188, 98,120,184,199,197,245, 37,108, 57, 70,209,161,215, 47, 40, 86, 59,
+ 72, 98,142,143,250, 72, 39,232,180,155, 20,137,166, 58, 28,211,141, 5,227, 50,247,179, 18,156,101, 48,232,211,220, 88,199, 58,
+199,230,217, 51, 28,110, 95,197, 90, 15, 92,173, 86,155,170,200, 57,119,102,157,209,120,196,254,225, 1,157,181, 77, 10,227,208,
+121,197,222,206, 1,135,187, 7,172,110,109,208, 72, 82,242,170,244,206,158,180,126,157, 59,119, 90, 19,186,135, 24,107, 61,159,
+165,214, 73, 48,117, 86,201,119,166,232,144, 89, 41,171, 10,173, 13,149,148, 84, 33,208,243,160, 45, 79, 48,205,197, 68, 21,197,
+205, 52, 41,215,100,186, 57, 31,217, 77,163,121,113,162,185, 78, 4, 69, 83, 39,132, 87,200,171,107,224,245,189,232, 2,190,213,
+117,242,185,125,200, 78,121, 50,215, 40,177,138,185,247,152,229, 7, 8, 57, 75,140,147,215,232,224, 83,179,255,107,102,247,204,
+247, 19, 98, 29, 98, 46,213, 63,207,195,247, 55,103, 52,187, 65,158,214, 59, 39,197,172, 54,173,152,219, 84,231, 62,234, 19,233,
+ 66, 59, 17,119, 15,100, 1, 2, 65, 32, 14,105,253,200, 98, 76,140,142,125,196, 94,150,254,171,179, 94, 2,180, 38,207,205,138,
+203, 76, 54, 56, 21,104,255, 51,169,151,201, 48,142, 16,165, 79,100,108,157,239,153, 37,212,103,156,244, 68, 58,156, 79, 97,104,
+237, 61, 69,165, 98, 26,205,140, 56, 73, 56,238,245,177,214,241,216,227, 79, 80,228,101, 40,144, 26,150,151,186,220,124,243, 77,
+156, 57,115,134,193,225,161, 23, 15, 17, 10,135,100,112,116,196,168,168, 24,150, 37,171,203,203, 60,125,121,151,164,217,197,138,
+200,147,212, 48, 8,103, 81, 18,218,161,206, 45,157,227,184,127,204,149,157,109, 94,119,225, 38,108, 81,144, 73,201,210, 82, 23,
+163, 75, 6,227, 1,113, 22,211,219, 63, 96,103,247,128,195,222,128,155, 47, 92,228,153,103, 47,179,210,237, 32,156,161,213,106,
+ 49,202, 75,242,162,160,106, 68,164,113,132, 53,154,124, 60, 98, 85, 42, 10, 91, 77,116,215,227,216,139,191,164,105, 74, 81,106,
+146, 56, 33,137, 99,156, 0,157,123, 5, 50,240,169, 76, 6,189, 19, 24, 46,107,237,184, 73, 59,226, 73,109,253,121,237,126,119,
+221,148,153,171, 19,249,117, 29, 41,242,233, 38, 15,136, 98,210,222, 49,149, 18,119,115,192, 34,102, 2,126,196,181, 45,150, 98,
+ 78, 1,195, 3,187,116,179,169, 98,199, 76,131,105, 96,169,135,190,120,227,136,162, 8,147,248,168, 93,151,165,207,124,216,105,
+ 54, 73, 4,178,163, 16,161,239, 93, 24,172, 22,161,155, 98,202, 73, 17,147, 8, 62,212,198,212,108,251, 73, 45,234, 34,166, 17,
+ 3,204,245,184, 78,136,137,166,126, 24,116, 85, 97, 42,141,173, 10,127,108, 85, 16,226,169, 10,108, 85, 97,117,137,209, 37,206,
+148,161,204, 80,129,174,112,161, 21,205, 90,141,177, 26,233, 52,202,165,152, 76, 97,242, 12,147, 15, 17, 81,132, 16,145,119,136,
+ 34, 95, 82,168, 63,100, 71,125,236,179, 60, 6,129, 51,254,115,215,101,206,213,199, 62,207, 47,253,244,253, 84,123,135,126, 51,
+140, 35,150, 90, 77,198,197,144, 92, 87, 40,231,163,138, 34, 47, 9,229, 79,223, 55, 28, 24,211, 4, 93,249,141,181, 53,112,150,
+241,168,100, 48, 24,209,110,175, 48, 26, 21, 40,233,107,206,237,118,215, 75,232,106,223,178,101,172, 97, 52,214, 24, 99, 17, 74,
+162,181,161,212,190,181, 81, 8,200, 26, 9,173,166,111, 31, 19, 42,102, 56, 28,176,182,126,134,103,159,125,150,110,183,193,168,
+ 40, 24,143, 70,156, 61,119,142,203,207, 60, 69,100, 43,170, 98, 68, 34,160,204,115,226,134, 64,169,132, 65,175, 79,150, 36, 68,
+248,249, 15,135,131, 30, 42, 73,104,173, 46, 19, 55, 50,142,142,250,172,159, 57, 75, 20, 37, 20, 14,186,203, 43, 88,103, 57, 26,
+140,120,226,210, 83, 52,148,162,127,112,236,165,169, 27,137,119,168,117, 69,163,221, 69,151, 5, 66, 72,146, 70,147, 76,197, 28,
+ 29, 29,209,239, 95, 37,183,240,236,149, 93,206,174,182, 88, 91,110,179, 92, 74, 26,162, 96,115,117,141,225,184,192, 40,201,122,
+119,149, 65,127,128, 25,140,104, 45,101, 44,199,171, 68,251,135, 52, 75,195,176,178,136, 60, 39, 63, 58, 98,144,166,196,113,196,
+202,234, 26,207, 92,122,130, 70,156, 48, 24,141,104, 55, 59, 28,247,142,185,121,245, 2,107,107, 43, 28,244,159, 99, 52, 24,210,
+110,181, 25, 85,134, 72, 37, 92,122,236, 9,150,215,214, 32,176,179,231,242, 78,147, 76,152,152,215, 97, 8,197, 80, 97, 20, 70,
+123, 73, 86,165, 13, 86,134,122,124, 80,132,243,221, 86, 80, 73,233, 37, 93,131, 52,181,159, 99, 32,102,100,150,231,137,114,238,
+ 20,254,206,220, 94, 52, 19, 57,219, 19, 76,116, 81,139, 82,213,186, 14,206, 98,141,192, 8,223,230, 92,223,143, 19,172,156, 25,
+ 86,131,148,243, 78,254, 9, 65,153,201, 0,150, 19,153,110, 21,244, 42,102, 63, 35,174, 27, 14, 79,247, 2, 17, 30, 88, 91,119,
+212, 79,196,102,166,251,233, 12, 81,238, 70,169, 3,112,161,141, 39,104,237,205, 2,250,204,201,156, 76,145,248, 22,181,144,166,
+ 8,195, 31,172,192,171,126, 5,141,191, 64,134, 70, 73,129, 83, 94,141,202, 25,129, 9,253,241, 88,135,211, 38, 16,171, 66, 90,
+ 82,121,207, 80, 24,207, 92,159, 12, 17,112, 83,253,223, 90, 34,180,246,180, 68, 24,226,226,228,164,201, 2,171, 82,172,202, 88,
+ 63,115, 11,219,143, 95, 66, 68,128, 46,208,229,152, 56,130,139, 55,157,225,241,199, 31,230,201,167,158,192,184, 18,129, 1, 41,
+232,143, 70,164,205, 46, 82,164, 52,162,148,172,211, 33,107,167,180,187, 93, 28,138,221,237,103,233, 44, 47,115,219,197,155,248,
+228,231, 31,163,170, 52, 42, 46, 16, 34,198, 10,129,136, 34, 26,105, 10, 74,121, 39,198,149,116, 91, 75,124,253,155,222,194,209,
+238, 30, 78, 88,218,173,140,179,103, 55, 61, 81,201, 57,180, 21,124,252, 19,191,207,218,218, 6,119,222,122, 43,163,113, 78,146,
+181,184,116,121,155, 52, 77,216, 56, 95, 98,139,130, 8, 24,143,115,210,172,225,153,237,253, 1,105,164, 40,149,130, 88, 49, 46,
+ 43,210, 52, 35, 31, 23, 56, 41, 88, 89, 94, 34, 31,143,136,226,148, 82, 91,148,208, 52, 26, 13,164,146,148, 78,146, 32, 16, 78,
+ 35,133,195,134, 60,135, 17, 98, 34, 60,115,163, 41,121,167,105,250, 79, 0,181, 78,109, 9,139,148,222,201,137, 20, 33, 5, 47,
+136,148, 67, 5,221,117, 33,221, 36, 17, 52, 59,107, 64,204, 42,186,213,125,175,167,100,139,220,132, 22, 26,234,207,190,138, 18,
+110,134,112, 92,118, 94, 29,177,230,107,212,195, 95,162, 56,154, 68,236, 58, 8,220,216, 32,213,234,163,231,169, 64, 70, 45, 41,
+ 59, 81,142,146, 18, 41, 3,167, 36, 73,188, 44,173, 82, 65,200, 69, 76, 68, 51,188, 24,142,241, 29, 5,225,181,117,237,216, 26,
+235, 25,235,101,221, 78,228,133,118,180, 30, 97,170, 10, 93, 21, 1,192, 13, 46,200,184, 98, 43,172,245,145,186, 13,204,127,103,
+ 76,232,131, 15,142, 49, 48,150,144,229, 21,201, 96, 76, 34,251,196, 26,168, 52, 52, 50,136,163, 48,176, 69,214, 77,245, 30,228,
+101,136, 84,144,148, 50, 1,145, 32,141,166,216,219,229, 87,127,250,103,120,238, 11,143, 32, 68, 68,156, 8,210, 52,161,168, 52,
+163, 97,133,239, 56, 86,140,243,106, 34,209,233, 73,134,254, 90,107, 12, 73, 36,104,181, 82,154, 89, 66, 85,149,244,122,125,146,
+164, 69,105, 44,227,178,164,153, 53, 49, 78,144,181,219,244, 71, 99, 92,152,180, 40,132,161,215, 31,144,100, 25, 42,142,169,180,
+ 97,127,119,159,205,205, 85,218,141, 6,205, 56,193, 86, 6, 41, 85, 96,162,183,232, 29,239, 98,117,133,165,203,246,246, 21,214,
+214, 87, 57,218,187,130, 45,134,228,225,126,234,231, 35,150,151,151,193, 57,138,145, 23,110, 90, 89,219,240,221,205,105, 66, 44,
+ 44,203, 43, 43, 20, 85,133, 76, 82, 46,220,178,206, 96,152,211,106,117, 89,107,181, 65, 73,158,188,252, 28, 90, 56, 92, 51, 35,
+215,154,229,243,103, 17, 90, 51, 56, 62, 70,139, 24, 34,133,118,150,180,153,146,143,251,236, 30, 28, 16,225,136,133,244,217, 34,
+ 1,218,228,228,227, 8,105, 97,101,125,149, 74, 23, 28,244,142, 88, 95,222, 0,171, 48, 68,100,203,203,236,236, 94,197,198,138,
+172,213, 68, 45, 47, 35,198, 57,241, 96, 76, 55, 85, 68,229,152,225,113,159,164,213,166,153, 89,178,118,155, 72, 74, 6,199, 3,
+ 63,199,193, 41,134,163,146, 86, 35,227,236,250, 42,207,108,239,209,108, 55, 49,145,164, 40, 10, 80,146,237,103,159,101,253,220,
+ 89,239, 88, 6, 57, 86,103,237,156, 38,121, 77, 0,115, 98,218, 33, 37,156,243,140,110, 87,183,126,250, 44,144, 69,214, 77,174,
+ 65, 3, 67, 35,165, 37, 82,214,183, 21, 90, 79,128,158, 37,224,205, 42, 59,217, 73,180,234,230, 2,138, 73, 38,121, 38,133,238,
+ 78,200,181,214, 25,205,186,244, 59, 87,235,159, 12, 77,154,200,197, 77, 2, 17,127,142, 97, 98,100,157, 45,228, 90, 80, 23,129,
+224, 43,103, 34,109,159,110,119,215,148,186, 39,228,216,192,145,145,130,160,134, 23,218, 90, 29, 8, 25, 50,212, 42,240, 93,130,
+ 24, 77, 13,234,118,102,234,105,116, 93,241,118, 78,100, 85, 79,148, 71,231,164,175,197,137,180,128,240,180,126, 55, 51,130,213,
+111, 88,126, 90,142, 49,198, 19,121,140,157, 68,228,174,142,176, 3,233,166, 38, 49,216, 25,121, 89,105, 45, 24, 95, 95,112,147,
+246, 56, 49, 73, 91,186, 48,124,160,238,123,244,100,115,255, 1, 72,100,208, 44,150,104, 36, 43,235,231,208, 42,163,116, 10, 39,
+ 21, 73, 26, 81,149, 37,105,234,199, 71,222,121,231,235,120,234,217, 39,233,245,119,189, 76,169,138,120,221,107, 94,203,219,223,
+246, 54,142,143,142,137,170,130, 84,217,112, 30,128, 76,232,118,186, 40, 41,120,243,155,222,200,175, 60,248, 17,100, 35, 67, 74,
+ 73,169, 53, 69, 49, 38,142, 34,207,112, 45, 42, 70,253, 30,253,222, 17, 66, 87,220,113,241, 38,246,246,246,144, 18, 86, 86, 87,
+ 88,234,118,112, 66,176,178,182,134, 72, 26,220,116,203,205,140,134, 99, 42,171,121,228,210, 19, 24, 41,201, 15, 11,242,113,193,
+153,141, 45, 46,108,172,209,109,183,201,203, 49,101,208,255, 30,246,123, 20, 65, 3, 62,175, 42,146, 52, 33, 73, 98, 70,195,145,
+175,175,231, 37, 27, 27, 27,196,113, 76, 89,110,211,202, 34,100,236,111,186, 66, 87,164, 74,129,173, 60, 9, 43, 48,155,167, 98,
+135,238, 90,176,190,102, 40,207,141,148, 0,125,125, 82, 73, 71, 20,121, 89,217, 72,133, 62, 77, 85,179,238, 79,146, 85,174, 67,
+ 78,153,212,218,221,169, 60,154,201,219,219, 16,225,215, 58, 49,202, 59,142,136, 80,182,113, 83,233, 75,159, 38,155, 97,157,198,
+177, 39,113,233,192, 32, 15, 4, 59,107,140,175,181,219,233,100,183,122, 74,155,255,220, 60, 33,210,196, 49, 70, 87,196,113, 60,
+ 33,214,249,238, 29, 49,153, 42,231,140,193, 86, 37,186,244,132, 61,109, 60,247,196,106,141, 46,125,109,220,134, 90,191, 53, 26,
+ 99,198, 62,181,110, 53,194,250, 44,144,215,101,215, 56, 91,226,156,158,240, 77, 68,221, 71, 89, 59,186,214, 96, 29, 12,135,218,
+119, 61, 4,209,145,108, 60, 34, 26,117,144, 89,138,140, 19,100, 28,251,169,131, 42,158, 76,101,115, 42, 66, 69, 96, 85,140,136,
+ 19, 95,230, 25, 15,249,216,127,254, 85,126,239,193,223,192,228,185,151, 73, 13, 65,192, 81,111,224, 51,119,218,247,181, 87, 6,
+ 95, 6, 8,174,130,196, 79, 62, 76, 83, 95,130, 57,115,102,131,162,244, 19,204,242,194,176,214,109,177,179,191, 71,156, 54,176,
+ 2,146, 70, 6, 66, 82,150, 37, 42,146, 33,141,107,136, 66,175,121,162, 34,158,126,230, 57, 26,169, 34,142, 20, 73, 28, 81,228,
+ 57,105,154,122,173,244,178, 36,107, 54,217,190,122,133,243, 23,111,225,201,103, 46, 35,133,164, 42,114,142, 15,246,200,226,136,
+ 72, 66, 62, 24,177,177,190,238,117,224, 7, 3,162,164,201,109,119,188, 6,237, 4, 66, 37, 84,206,178,178,186, 68,146, 36,164,
+ 77,193, 56,207,217,221,221,101,235,204, 57,150,150,150, 56, 58, 62,226,234,238, 30,105,203, 75,184, 42,227,216,216,220,192, 22,
+ 57,207, 61,251, 12,166,210,180,187, 75, 20,121,142,112,142,131,189,109,242,209, 49,194, 25,136,125,215,143,169, 52,135,251,251,
+ 96, 45,113,236,219, 48, 15,143,253,192,151,181,181,101,198,199, 3,150,151,151,216,223,217,102,109,107,147,141,141, 45,170,178,
+160,204, 43,100,146, 80, 84, 37,157,181, 21,162, 70,131,253,253, 67,178, 52, 99, 48, 28, 51,206, 98,214, 55, 54,216,219,221, 37,
+ 74, 83,122,163, 17,203, 75, 75, 28, 30, 30,179,181,185, 65,218, 59,102,117,169,197,241,209, 62,173,213, 77,202,188,162, 28,143,
+121,234,137, 47,210,108,183, 41,172,161,170,253, 97, 55,109,129,246,188, 24, 53, 81, 62,171, 37,150,167,109, 98,211,122,242,164,
+220,100, 21, 78, 66,164,124, 29, 93, 8,139,114, 14,105, 12,214,202, 48, 92,134,144, 34,103,206,129,118,167,132,184,117,192, 41,
+ 17,215, 14, 63,153,139,236,205, 36,251,102,235, 57, 17,198,143,149,214, 53,207,235,196,224,154,169,122,219, 12,246,204,206, 65,
+ 9, 98, 57,114,118, 96,203, 68, 1, 46, 56, 23,115,129,240,181,128,238, 68,125,174, 14, 39,173, 15, 54,164,207, 64, 57, 9,210,
+ 4, 65,176,186,254, 30, 90,218,234, 25,215,215,128,250,132, 5, 56, 11,198, 55,152,138, 38,130,194,149,156,103,254, 76, 52,171,
+173,181,126, 76,167,118,104,163,253,112, 9,227, 38, 42, 95,147,209,146, 65,134,112, 10,240,161,191, 28,225, 9, 19,118, 42, 92,
+ 96,157,243, 36, 37,235,107,198,184,147, 53,202,186, 31, 61, 92, 84,234,214, 33,159, 66,180, 78,161,146, 14,157,245,179,244,199,
+154,149,245,117,142,118,198, 56,231, 63,172,163,195, 30, 56,193,206,206, 62, 91, 91,231,121,250,233, 39,177, 54, 39,141, 18, 58,
+105,147,118,214,196,152,138, 36,145,140,134, 5, 73,214, 34,138,154,116,151, 87,216,223,189,202,254,246, 54, 23,206,156, 35,146,
+138,188, 40,105,100, 13,142,142,123, 68, 74,160,100,143,170, 44,233,133, 25,225,207, 92,190, 76, 57, 30, 66, 89,145,231, 37, 42,
+ 74, 88, 89, 94, 33,142, 18,186, 75, 75, 84,198,240,145,223,249, 93,142,142,123, 56,224,182,102,147,195,241,144,194, 88,140,115,
+ 36,192,225,225, 1,183, 95, 60, 79,132,247,246,101,172,130,162, 90,197,241,241, 33,171, 27, 41, 56, 71,150,164, 84, 70, 19, 41,
+201,114,167,205, 80, 12,177, 38,100, 53,148,164,153, 54, 64, 8,246,143, 14, 73,133,165,165,188, 68,106, 61, 11,185, 86, 44,171,
+ 3,245,147,128,126, 90,164,126,106, 27, 74,205, 74,175, 71,177,170,186,149, 67,204, 12, 51, 56, 89, 18,154,122,148,179,228,148,
+217, 18,214,245, 8,155, 98, 66, 29, 15,181,124, 41, 38, 53,192,122, 40, 69,200,103, 33,106,112,158, 84, 26, 60, 81,197, 33,188,
+ 8, 75, 28,161, 76,234,137, 63, 1, 96, 77,229,107,132, 70,151,216,170, 22,232,240,165,140, 90, 94,210, 68, 17, 85,161,168,194,
+184, 83, 15,234, 94,170,210,104, 67, 21, 64, 91,151, 37,186, 40,124, 27, 84, 85, 82, 85,197,164, 37,205,153, 16,121, 91,239, 0,
+ 8,103,188, 24,140, 51,193,155, 15, 63,115, 14, 48,161,100,225,157,107, 27,102,192,215,242,178,218,150, 33,245,107, 57, 28,244,
+201,142,142,105,119,186,180,218, 29,154,237, 46, 89,179, 69,146,101, 68,141, 6, 73,218, 8, 45,173,126, 80,139,136, 18,108,154,
+ 32, 26, 41,194, 10,148, 43,121,246, 51,159,230,223,255,255,126,134,209,241, 1,105,170, 2,127, 67, 50,234,143,144, 82,162, 43,
+ 79, 76, 45, 43,139,157, 29,230,161, 4,218, 58, 26,169, 66, 56,199,218,234, 50,214, 24,138,178, 98,119,255,136,141, 51, 91, 28,
+ 15,135, 62,174, 19, 2, 99, 44,237,118,155, 60, 47,195,166,107,137,227, 38, 69,153,131, 16,164, 73,194,115,207, 93,241, 78,132,
+177,164,177,164, 44,198,172, 46, 47,161,171,138,237,157, 29,206, 94, 56,207,222,206, 14,141, 70,131,227,163, 3, 70,253, 30,235,
+ 27,171, 28,236,238, 16, 69, 94,179, 34, 81, 17,205,172, 65, 85,229,228,121,201,210,242, 42,155,103,207,145,107, 67,145, 87, 24,
+109,232, 44,117,201,210, 6, 8,199,246,206, 54,103,207,158,231, 53,183,157,197, 57,201,211, 79, 63, 75,207,228,172,159, 63, 3,
+218,225, 42,203,250,106,151,157,171, 87,121,238,217,167, 57,123,238, 76,168, 99, 23,196, 42, 70,151, 99,150,187, 45,122,102, 68,
+171,217,166,149,101, 60,251,212,211,129, 59, 97,217, 90,107,179,220,105, 81,153, 10,163,225,240,104,196,153,141, 51,180, 54, 19,
+ 14,123,187,156, 59,119,129,131,221, 29, 84,156,208, 93, 94,166,221,105,209,239, 31,179,114,254, 2, 59, 79, 62,197,153,243,231,
+201, 29,236,238,237,146,181, 58,236,109,239,114,241,166,243, 28, 28, 28, 18, 37, 17,133, 30, 99, 5,152,170,242, 67,110,178,140,
+188, 44, 25,228, 5,227,193, 49,141, 70,139,126, 81, 80, 73,193,229,167,158, 97,101,107,147,202, 84,190, 21,141,105, 84,170, 66,
+118, 75,213, 68, 47, 57, 25,127, 53,193, 3, 47, 59,108, 38,160, 62, 91,234,141, 34, 63, 21,208,205,212,184,149,155,145,138,197,
+157,168,175,203, 83, 39,114,214, 17,244, 60,184, 50, 23,169, 11,226,185,153, 36, 53,160, 43,165,136,102, 37,151,107, 41,230, 16,
+245, 75, 41,174, 25,170, 50, 87,122,158,145,140,230, 52,210,156,184, 78, 71, 80,157,249,152, 8, 85,249,254,118, 27,178,134,210,
+132, 26,187,146,126, 31, 86, 18,105, 69,224,147, 76,103,152, 60,111,164,238,174, 51,198,116,226,117, 57,252, 70,200,204, 4,155,
+137,136, 12, 83, 50,132, 49,104, 29,254,109,141,215, 99, 14,162, 51, 70,135, 84, 71,168, 87, 26, 51,149,246,116, 97,144, 68,205,
+134,170,103,230, 10, 59,147,230, 23,243, 58,184, 74,212, 64,228, 38,163,252,234,209,160,214, 8, 52, 49, 91,231,110, 99,108, 35,
+142,134,125, 54,182, 54, 56,218,127,134, 39,159,124,134, 91,110,121, 45,189, 94,159,163,195, 30, 89,214,226,201, 47, 62,197,249,
+243, 23,217,222,126, 22, 83, 9,238,184,253,245,126,112, 68, 57,100, 84,121, 86,236, 74, 99, 25,149,173,208, 92, 90, 6, 33,216,
+221,222, 38,110,117, 57,183,185,193,163,207, 92,166,175, 53,107,235,203,116, 58, 29,142, 14,247,113,110,132, 53, 21,155,235,235,
+220,118,199,107,120,226, 11, 15, 51, 28,140,201,139,146,243,103, 54,200,178, 38,145,242,105,194,206,210, 18, 18, 56,234,245,217,
+220,218, 96,255,240,208,215, 10,169,251,202, 29,163, 60, 39,137, 99, 18, 37, 81,177,244, 41,222,224,208,152, 74,227, 76,133, 0,
+198,227, 49,198,122, 38,183,174, 10,170,170,228,224,224,144,209,104, 72, 20,199,244,250, 61,218,221,101,132,140,168,116,137, 85,
+ 17, 22, 53, 37, 23, 58, 55, 83,234,224,121, 35,245,235,183,187,185, 9,137, 68, 42, 49, 81,173,139,148,156,214,211, 79, 68,232,
+ 39,135,241,156,156,160,114,122,139,229,204, 82,158,220,124, 51, 36,152, 64, 36, 71,214,169,123,133,245,243, 37,145,174,158, 95,
+ 16, 20,241,124,195, 32, 72,129,138, 28,210, 70, 68,198, 98, 18, 31, 85, 87,101,133, 27, 91, 42, 29, 24,231, 69, 65, 85,230, 24,
+109, 38, 25, 46,169,124,125,122,174,182,110,189,222,118, 89, 20,232,162,160,156, 1,117,107, 42,175, 16,104,167,242,172, 94,209,
+ 77,251, 57, 2,174, 86, 75, 20, 19, 73,103, 41,106, 50, 96, 24,242, 50,113,150,125,134,172,110, 37, 45,141,166,210,154,178,242,
+ 17,123,148,106, 90, 67,199,242,178, 98, 89,167, 44,185,140, 78, 28,131,246, 18,185, 88,252,108, 1, 12, 42,117, 72, 27,163,164,
+ 36, 83, 80, 28,237,243,159,254,143,159,229,232,169, 39, 72, 34, 48,165, 33, 74, 34,122,189, 17, 74, 40,138, 82,163,132,162,212,
+214, 11,169,128,231,232, 40,133,209,154, 36, 81,168, 56, 34,182,134,229,110,135, 97, 62, 96, 48,204,113, 74, 97,132, 96,144,151,
+ 56, 99, 73,211,134,111,197,116, 48, 26,143,253,181, 49,144,231, 57,149,214,164,141, 38,189,254,128,170, 44,209, 85,197,230,250,
+ 50,105, 36,105,166, 94,112,105, 48, 24,248, 22, 78,235, 24,141, 70,108,157, 61,203,227,143, 63, 65,214,236, 80, 21, 35,208, 37,
+ 56,104,196, 17,186, 44,137,155, 45,146, 40, 34,106, 71,172,175,175,115,220, 31, 48,214, 6,226,152,179,231,206,249, 49,196, 85,
+197,104, 56,224, 53,183,222, 70,187,221,230,104,127,143,178, 52, 56, 93,178,186,178,194,184, 63, 64, 26, 73, 34, 21,191,255,217,
+207, 19,167, 49, 55,221,113, 7,131,225,144,150, 84,180,219,109,174, 62,253, 36,197,240, 24, 97,114, 86,186, 45,198,131, 1, 59,
+ 71, 7, 96, 53,163,209,152, 78,179,197,106,183,201,241,254, 62,107,173, 38, 43,235,231,216, 63, 60, 98,239,160,199,214,122,155,
+181, 51, 27, 28, 29, 31,178,212, 89,101, 52,174, 56, 60, 60, 34,203, 50, 95,106, 59,236,113,246,206, 59,217,126,234,105,214, 46,
+156,167, 95, 94,161,170, 74,172,173, 48, 14,100,156, 82,234, 2,149, 52, 40,140,165,153,164, 12,199, 99,210, 68,209,110, 53, 41,
+141,229, 96,144,227,162,152, 88, 42, 76, 85, 49,234, 29,211,233,116,252,100, 63,231,107,222, 62, 66,149, 65,232,200, 96,107, 80,
+175,243,122, 66, 79, 74,111,132, 97, 86, 83, 48,179, 62,219, 38,125,248,165,106, 66,109, 29,205,135,225, 41, 78, 76,189, 65,247,
+ 60, 35,184,231, 65,118,158,139, 51,153,150, 22, 28, 92,165, 60, 95, 75,169,144, 49,140,252,124, 14,103,220, 28,175,235, 36,151,
+108, 22,212,231,100, 96,103, 4, 28,156,187, 86,195,197,203, 47,159,228, 29,184,233,118,230,196,108,132, 29,132,220,102,228,109,
+ 69, 61,100, 56,200,218, 6,197, 84, 59, 35,143, 62,175, 40, 55, 35,150, 63,105, 1, 8,172,114, 33, 5,206,216,185, 3,169, 61,
+174,217,135, 9,242,129,126,236, 99,152,195, 61,147,214,208,117,154,195,233,201,198,227,220,180,207,176,158,134, 54,209,177,158,
+ 83,186,147,147,249,178, 19, 15,111, 50,107, 86,204,203,218, 33, 39,175, 45, 4,152,240,124,167, 26,164,203,155,236,143, 44,221,
+213, 85, 58, 73, 69, 18, 75, 14,143, 14, 89,237,245,216, 58,187, 66,165, 53,111,120,195,215,208,238,118,120,248,209,207,178,187,
+115,133,175,123,219, 31,225, 77,111,253, 70,246, 15,143, 80,102,204,106,183,201,109,183,190,134,245,115,183,209, 94, 94,165,114,
+142, 81, 62, 66, 9,135, 45,114,222,250,166,175,225,115, 79, 60, 65,210,108, 35,133,196, 24, 77,183,219, 69, 58, 67, 89,192,149,
+171, 87,233,118,219,172,172,173, 49, 58, 56,198, 34, 73, 27, 45,132,242,196,186, 70,163,129, 53,134, 55,190,246,117,236,237, 30,
+208, 80, 49,253, 94,111, 50,130,208,134, 13,114,121,101,153,188, 42,177, 26, 82,145,120, 9,209,204, 59, 92,166,204,177,186, 68,
+ 8, 69,153,143,184,186,179, 75,145, 87,126,126,111,148,248, 89,218,177, 79,229, 52,178, 22,149,129,179,103, 47, 48,236, 29, 33,
+170, 35,172, 45,176,182, 10,253,254,242, 84,125,231,211,106,234,167, 69,236,179, 99,117,235,255,215, 17,122, 20,213,195, 12,102,
+219, 43, 79,222, 12, 83,125,224,105,132, 46, 38, 45,138, 39,129,125,126,136,207, 20,229,229,204, 77, 35,107, 5,188,144,157,154,
+ 48,209,173,239,215,150, 65, 47,161,230,108,212, 13,161, 66,120,178,166, 12, 89, 42,137, 67,216, 8, 87,130,118,154,178, 28, 83,
+141, 71, 20, 65,227,159, 32,170,225,230,102, 71,123,231,211,107,176,151,148,165, 39,190,249,175, 1,208,181, 31,188,226, 92,229,
+ 35,113,172,151,111,150,130, 68,122, 1, 10, 17, 41, 63,240,198, 9,180,112,147,161, 22,190, 12, 99, 41, 42,255,181,212, 26, 99,
+125, 43,143, 19, 49, 42,110,160, 90, 13,178, 52,163,213, 89, 34,107,183,105,181,187, 52, 58, 93,100,179, 9,205, 14, 34,203,208,
+224, 29, 23, 93, 34,132, 35,149, 49, 66, 38,196, 78,160,243, 33, 31,254,213, 95,230,227,191,245,235,180, 34,201,120, 88, 96,172,
+101, 56, 28, 33,156, 96, 56, 44,125, 31,186,181, 20,149, 65, 42,129,181, 16, 73,133, 49,102,114,189,171, 66,115,246,220, 10,121,
+ 57,194, 2,195,162,164,217,105,147,151,134,188, 42,201,146,196, 43,205, 69,137,119, 68,172, 69, 42, 63, 22,180,172, 42,180,179,
+148,131, 62,136,136,178,168,136, 35,252, 28,246,106, 76,182,220,161, 8, 35, 82,219,205,140, 65,191,207,202,242, 10,219, 87,174,
+ 80, 21, 37,203, 75,146,131,157,171, 52, 27, 49, 66, 91,134,163,130, 51, 91,235,164,105,194,168, 63,100,121,109,141,163,227, 99,
+ 10, 39, 73, 90,109, 54,182, 54,105,183,219,140,134, 35, 14,118,247,121,237,107,238,192, 58, 67,149,143,113, 85,137,178,176,185,
+178,204,238,209, 17,157,102,135,199, 30,127,156,195,163, 30,103,206, 95, 96,105, 99,149,195, 81,143, 91,110,186,136, 29,141, 25,
+ 30,237, 35, 93, 69, 59,145, 20, 35, 77,255,176, 71, 18, 75,148,213, 52, 27, 9,105,154,208,202, 90,236,239,236,147, 40, 65,111,
+208,231,220, 77, 77, 54,227, 6, 15,125,242,243,252,145, 63,242,102, 84,156, 80, 57, 73, 89,105,146, 36, 65, 8,193,206,222, 62,
+ 43, 65, 50,183,236, 13, 89,189,120, 19,131,163, 30,103, 47,158,227, 96,231,128,131,227, 3,122,253, 1, 42,138, 81,177, 67, 83,
+ 49, 46, 11,150, 59,171,228,163, 1, 75, 89,151,209,184, 64, 73,201, 74,167,205,176, 52,196, 42, 98, 60, 26,147, 53, 50,242, 65,
+159,230,202, 50, 0, 85, 40,165, 16, 82,216, 88,139, 80, 42,148,182,106,249, 84, 51, 25, 0,227,187, 41,230, 57, 54,117, 86, 88,
+214,179, 85,103,116, 16,228,236,224,164, 73,234,125, 86, 18,153, 83,181, 32,102, 9,182,167,237, 13, 46, 68,198,181,172,181,181,
+ 98, 18, 84, 56,105,253, 35,146,147, 25, 11, 39, 39, 55,158,246,122,179,243,215, 79,205, 84,214,204,246, 25,117, 84, 41,103,167,
+ 73,158,222,226, 58, 17,163, 99,134,242, 31,230, 86,216,144,133, 20, 51, 14, 70, 52,187,241,218, 19,147,102,252,200, 74, 66,234,
+107, 70, 66,243, 68,111, 95,157, 50, 55,115,234, 65, 94, 81, 72,107,141,209,214, 19,127,108,232,173,181,206,171,122, 89, 59,169,
+ 37, 76, 37,254,106, 90,206,181,227, 96, 79,246,206,159,172,229, 79,164, 76,231,116, 6,236, 68, 31,220, 57, 88,219, 92,161, 18,
+ 41,217,114,198,106, 75,177,115,233, 83,108,109,172,176,190,182,130, 82,130,170, 42, 57, 60,220,231,163, 31,253, 40, 31,253,248,
+199,232,245, 15,200,243,156,103,175,110, 35,227,136,106, 60,194,149, 71, 16, 21,252,246,111, 61,192,205,111,120, 59,111,122,219,
+ 31,161,221,240, 67, 72,202,114,204,250,230, 50, 95,247,214, 55,242,171,191,249,155,228,214, 95,173, 44, 77,168,138, 28,109, 53,
+163,209,136,189,189,109,174,110, 27,150,178, 22,103,215, 54,168,242, 17,185,174,200,171,146,229,165, 14, 81,146, 16, 37, 9,103,
+ 54,218,124,237, 27,223,196, 83, 87,158,163,170,204, 36,250,148, 66,176,220,237,176,186,182,198,165, 75,151,248,154,215,220,225,
+235,190, 50,166, 44,252, 44,247, 34,207, 41,198, 99,134, 69,193,112, 48, 34,146,112, 60, 26, 32, 17,180, 58, 75,164,105,130,138,
+ 98,242,210, 48, 46, 53, 68,138, 70,163, 69,172, 34,228,208,144,231,125, 98, 33,161, 38, 88,185, 25, 41,212,151, 32, 60,115, 93,
+239, 90,184,233,192,147,211,212, 10,165,155, 39,225,207, 23,140, 94,156,210,157,152,233, 29, 23,211, 16, 96,194,226,173,123,238,
+157,195, 74,135,180, 54,136,188, 48,145,150,117, 70,251, 44,146,246,255,182,149,111, 25, 83,206,160,132, 65, 88, 63,251,189, 26,
+ 15, 40,203, 28, 99,244,169,250, 15, 94,225,174,244,130, 76, 1,208,125,164,233, 35,126,156,153,108, 80,145, 10,237,126, 74, 76,
+ 84,222, 16, 62,125,109,195,189,105,172, 47,109,149,198,131,104,165, 13,214,249,246, 77, 25,181,137, 26, 9,205,172, 77,163,213,
+ 37,107,181,105,182, 59,164, 89,147, 70,171, 77,163,217, 36,105, 52, 72, 26, 25,113,154,120, 98, 95,228,219,252,202,188,192,201,
+220, 15,120, 73, 99,226,180, 73,154, 68, 60,249,153, 79,242, 31,255,245, 63, 39,170, 74, 70,253,138,170,116,196,177, 31, 40,146,
+231,190,255,220, 88, 71, 89,121,182,184,113, 22,165,228,100, 46,128,146,120, 6,180,132,118, 39, 99, 48, 30,209, 27,142,144, 73,
+ 66,171,221,101,103,119, 31,225, 20, 73,146, 82, 20, 5,221,110,230, 37,151,157,240,154,241,210,159,243,184,204, 73,146,140, 34,
+ 47, 49,198,209,105, 38, 36,145, 36,137, 61, 33,179,215, 63, 6, 4,205,216, 51,206,181,113,244,142,123,180, 90, 77,138,241,128,
+ 88, 58,132,213, 20,121,193,133,243,231, 24,143, 71, 12, 6,125,150,218,109,142,143,142,137,155, 29,146, 52, 97, 99,109,157,173,
+181, 13,142,142, 14,216,191,122,149, 91,110,190,213,183,178, 2,194, 88,218, 13,159, 77,232,237,239,163,180,229,210, 83, 95, 32,
+207,115, 86, 87,151, 17,210,111,194, 23,206,156,161, 24,245, 73,141, 97,116,180, 79, 51,130,209, 96,128,211, 99, 86,130,208,206,
+114, 51,163, 55, 30,209,104,182,184,250,244, 54,174, 52,108,156, 89,161,151, 15, 65,250,186,235, 77,183,222,206, 67,159,122,130,
+175,127,219,155,217, 90,219,194, 20, 57, 69, 85,226,100,140,115,134,241,120, 76,163,217,164,223,239,179,178,188, 76,115,117, 21,
+ 49,214,228,121, 65,127, 52, 96,123,123,151, 78,183, 27, 8,109,126, 96, 73,105,193, 32, 40,130,236,180, 28,121, 96, 79, 19, 69,
+ 81, 86, 36,113,204,209,225, 62,105, 43,163,179,186, 76,210,108,162,133, 31,156,226, 42,223,107, 46, 66,203, 87,205,242,150,174,
+198,119, 47,249,138, 80,190,107,164, 14, 2,220,116, 90,154,157, 37,110,201,121, 73,242,217, 98,112,205,127, 21,167,100, 12, 79,
+241,227, 79, 13, 64, 84, 29,228, 9,175,102,103, 67,170, 91, 5, 66,182,181,238, 84, 86,253, 73,101, 57,102,134,202,212, 99, 87,
+173,117,215, 47, 65,202, 19,242,151, 51, 25, 4,203,180, 91,231,164,159, 50,209,191,159,176,242,167,242,153, 94,183,101, 42,229,
+ 29, 77, 65,114,186, 89, 91, 99, 48, 82, 80, 57,135, 21, 2,173,245, 28,104, 78,234, 16, 33, 77,105,102, 70, 62,214,145,122, 13,
+224, 58,204,119,214,214,120,205, 12, 83,123,109,102,146,114,135,217, 13, 79, 77, 64,125,238,216,230,100,106,231,107, 17,110,238,
+195, 11,155,134,152,147, 65, 8,159,129, 34,109,181, 33,105,112,241,150, 59, 88,138, 10,158,252,212,111, 50, 62,222,165, 24, 13,
+ 73,207, 70, 88,167, 65,104,254,244,247,252, 41,162, 36,225, 51,159,253, 61, 30,125,228,179,188,225,141,175,103, 60, 58, 70,228,
+ 61,150, 84,193, 19,191,247, 73,246,199, 21,199, 69,197,219,254,216, 55, 18,103, 49,231, 47,158,227,202, 23, 31,166,149,197,108,
+174, 45,243,166, 55,222,201,199, 62,249,105, 6,253, 99, 36,134,172,145, 98,202,138,225,160,143, 51, 6, 41, 28,195,241,136,125,
+142,144,206,160,117,206, 56, 31,114,203,197,243,108,110,109, 82, 25, 67,162, 4, 87,118,118,232, 13,135, 84,206,248,200, 41,164,
+ 48, 81,146, 71, 30,125,132,168, 44,217, 90, 93,241,243,218, 35,133, 85, 38,172, 5,139,148, 80, 22, 94, 18,116,109,101, 5,133,
+164,215,235,211,239, 29,147,181, 59,129,116,225, 16, 17,228,149, 33,138,189,183,239,242, 4, 23,198,179, 58, 99,167,202, 76,238,
+218, 94,234, 23, 3,170,215,136, 53,136,169,176,140, 56, 65,194,100,226,109,207,215,163,132,184,254,235,189, 96, 96,159,233,121,
+ 17,115, 58,206,158, 76, 55,171, 41, 45, 3,185, 19,171,125, 71,134,214,129, 45,171,113,101,229,211,229,165,239,158,176, 85, 1,
+182, 68,160,193,149,216,106, 68, 21,230,216,207, 48, 3,252,204, 3,171, 41,203,146,178,238, 55,159, 25, 58,131,117, 83,246,172,
+144,129,211, 39, 60,203,213,129,213, 62, 69,232, 44,104,107,169,180,119,164,173,117, 88,169, 64,165, 68,173,148, 52,107,211,104,
+182,201, 90, 93,210,172,229, 71,219,182,218, 52, 50, 63, 12, 37,206, 26, 68,141, 6,113,154,160, 66,205, 95,169, 40, 8, 98,248,
+180,123,148, 23, 68,105,226,163,133, 40, 70,170,136, 81,239,144,223,253,224,175,209,191,252, 12,162, 95,128,145,164, 73, 66,158,
+ 23, 19,193, 35,173, 29,149,113, 40,169, 2,243,222, 51, 91,188,243, 41,136,149,192,104,205,197,155,183,130,214,185, 98, 88,148,
+108,108,109,113,120,220,163, 44, 43, 26, 73, 35,100, 71,252,174, 80, 85,158,112,168, 75, 67, 35,139,233, 15,251,200, 88, 17, 69,
+ 49,195, 97, 73, 18,250,197,171, 34,167,219,242, 95,203,178, 32,203,154, 56,107, 73,227,152,171, 59,123, 56,231, 72,226,136,241,
+240,152, 72, 2, 86,179,210,109, 49, 26,248,222,247, 36, 73,168,116,137, 84, 41, 74, 41, 58, 75, 43,108,174,111,209, 59, 60,162,
+127,116,196,205,231, 47,208,204,154, 20,249, 8,165, 64, 40,133,209,134, 98, 52, 66, 23, 57,219, 59, 59,168, 36, 33,145, 41, 43,
+ 27,171, 44, 47,175,160,203,138, 70,105,169, 74,205,254,222, 21, 98, 97,176,249,144,149,118, 70, 89,128,197, 82, 90,131,176,134,
+243,231,206,242,212, 51,207,210, 72,253,172,131, 52,138, 81,145, 98, 52,234, 83, 86,130,155,110,125, 13,143, 92,122,138,237,131,
+ 17, 81,146,177,177,212, 68,168,146,202, 8,116,105,200,199, 37, 82,197, 88,231, 24, 29, 28,211, 60,123, 22, 43, 74,178,102,198,
+202,218, 26, 7,135, 71, 94, 78, 87, 72, 79,106, 84, 80, 89,104, 52,187, 12, 70, 35,186,157, 14,141, 66, 51, 42, 42, 63, 5,178,
+ 30,163,173, 5,101,145, 99,173,165,219,110,161, 85,136,122, 67,103,134,209, 94, 39,196, 89, 55, 33,174, 69,206,215,175,237, 36,
+ 45,109,103, 84, 34,235,242,215,236,204,142,122,174, 66,157,206, 22,115, 68,237,137, 82,220, 9,224, 61, 57, 68,101, 50,141,113,
+118,146,225, 68,198,246,196,115, 67, 96, 33,165, 39,176, 10, 41,230,230, 45, 76, 58,195,164,156,116,130,205,242,208,176, 22, 89,
+ 15,210,177, 92, 35,145, 61,113, 78,196,124, 58,191,238, 18,240, 66, 78,106,174,157,237,212,173, 83, 76, 70,108,204,232, 1, 76,
+ 15, 73, 56,136,252, 5,240,222,148,151,100, 8,128,109,141,239, 43,156,245,148,234,154,121, 29,137, 35, 66,154, 93,207,212,210,
+103,128, 61,252,110,218, 54, 48, 21,170,152,120,114,129, 96, 33, 38,105,117,137,194,205,164,212,197, 28,147,217,205,230, 42,234,
+250,203,236,152, 60,220,252,200, 63, 49,221,156,133, 84, 52,151, 55,104, 52, 91, 92,188,112,129, 71, 31,250, 48,199, 71, 3, 62,
+255,153, 47, 48, 28,149, 52,178, 46,198, 9,122,135,125,206,223,122, 59, 31,250,240,131,236,238, 94,161,221,238,240,198,215,223,
+201,225,206,101,226,252,136,253,209, 33,219,151,159, 97, 48, 30, 65,163, 77, 43,145, 84,197,152, 86,183,195,217,243, 23,233, 29,
+ 29,178,220,110,242, 71,222,254,181,124,244,161, 79, 96,113,236,237,237, 32,133, 32,141,163, 9,153,207, 6,105,133,222,104, 64,
+ 43, 73, 41,202, 2,167, 50,174,238, 31,144,180,154, 24, 4,135,219,123, 92,122,238, 89,182,206,109, 49, 58,238, 79, 64,200, 58,
+203,225,209, 49,145, 54,220,121,203,205, 92,221,219,163, 50,190,215, 95,103, 37, 75,157, 46,221,205, 13,178,102, 6,199,125,146,
+ 36, 69, 9,104,183,154, 68, 42,166, 55, 28, 49, 24,142, 16, 50, 34,109,118,208, 78, 7, 50,134, 66,197, 2,209,108, 35,148,194,
+ 86,214, 59,205, 51,173, 35,207,135,163, 47, 20,232,197, 76,155,200,244,101,221,220,168,220,147, 53,115,113,234,235,212,213, 59,
+ 59,247,140,249,251,194, 93, 91,217, 23,179,178,173,243,233,250,169,100,177, 65,132,182, 48,107, 42,108,229, 85,219,108, 85, 81,
+ 85, 37, 46,244,138, 87, 69,129, 46,198, 84,197, 8, 93,142, 48,122, 12,166, 64,186, 10,233,202, 41, 79,196,214, 35,104,157, 7,
+227,202, 59, 8, 54,100, 4,100, 16,196,112,114,218, 74, 99,194,156,105, 83, 79,195,114, 6, 75,168,105, 58, 25, 24,234, 25,113,
+ 35,165,153,101, 36,205, 54,141,102,135,172,217, 34,107,119,167,209,120,214, 36,110, 52,104,100,141, 73,139,157, 74, 98, 79,186,
+ 81, 94,146,114,162,104, 21,238,183,200, 70, 68, 73, 68,148,198, 24,227, 80, 68,216,106,196, 51, 79,124,142, 79,125,248, 65,108,
+127,140,170, 28,113, 28,211,235,143, 61,143, 64, 8,156,113,104,235,130, 62,190, 11, 85,177, 25, 49, 34,225,181,255,147, 88, 16,
+ 41,112, 66,113, 60, 24,147, 54,154, 56,161, 56,236, 13,105, 38, 73,184, 87, 36,113,146,160, 67, 41,163,172, 74,164, 18, 12, 71,
+ 99,170,202,208,106, 54, 61,107,216, 26,146, 88,145, 68, 42, 12,154,139, 57, 62, 62, 14,233,122,133,118,126,198,186,148,146, 72,
+ 73,198,195, 30,182, 42, 81,141, 4,137, 7,171, 52,137,177,214,209,110,181, 56,234, 13, 88, 63,179, 74,179,211,101,105,105,137,
+209,104,200,120, 52,226,220,153, 45,146, 40,162, 24, 28, 51, 28, 12,184,120,211, 69,116, 85,113,216, 31, 80, 85, 21,251,135, 7,
+136, 56, 66,166, 9,235,221,101, 86,214, 86, 73,163, 4, 41, 5,131,253, 61,170,188, 79, 83,104,178, 86,140,150, 10,116, 1,174,
+ 66, 56,199,234,242, 18,249,120,204,193,238,190,207,146, 73, 73,220,204, 80,145,162,219,108,123,254,133,243,186,246, 95,243,198,
+ 55,242,240,227,143,115,225,226,121,142,134, 99, 54,215, 87, 17,185, 38, 47, 10,198, 69,133,147, 99, 86, 55,214, 25,231, 5,163,
+157,109,150,206, 94,160,234, 15, 17,114,192,250,250, 26,219,219,187, 72,169, 40,181, 87,251,204,139,130,245,181, 45,246,183, 71,
+168, 40, 9,211,192, 12,145, 82,100, 8,138,225,144, 52, 75,169,180,102, 56, 24,112,190,121, 11,180, 51, 42,171, 17,198,115, 12,
+170,160,163,224,130,192,204,116, 70,249, 84,144,102,170,200, 38,194, 61,235,203,123,211, 72,124,218,170,229,196,201,136,149,201,
+208,152, 58, 13,109,103,238, 41,234, 72,121,146, 97,243,153, 91, 87,103,133,235, 50, 49,179,229,221,208, 7,111, 79,100, 35,103,
+218,212,152,237, 59,151,110, 78, 8,199, 90,223, 85, 53,217, 51,228,116, 64,204,201, 89,204,147, 96,115, 70, 95,163, 14, 38, 78,
+234,209,207,189,134,152, 33,209,157,140,226,221,124,121, 34, 50, 85,229,123,168, 67, 58,208,204, 40,220, 72,121, 98, 80,189,179,
+126, 0,134,115,190, 54,110,185, 22,204,235,154,121, 72,191, 59, 59,141,230, 20, 98,102,110,187, 59,117, 18,220,220,168, 85,166,
+162,252,245, 28, 9,199, 84,112,255,180,218,131, 21, 53,156, 7,165,108, 59,173,237, 38,205, 46,173,149, 45,162, 52,161, 17, 73,
+ 30,123,244, 9, 62,255,240, 23,121,234,202, 17,155, 91,107, 36,141, 37,112,146, 47, 62,246, 4,223,253,103,191,135,183,191,253,
+ 46,126,229, 87,254, 35, 95,127,215,215,211,206, 90, 12,243, 29,198,197,144,167,158,122,154,131,157, 61,198,123,251, 36,157, 77,
+170,254,128,161, 30, 34,141,225,194,173,119,240,248,231, 62,205,185,115, 27, 20,186,228,194,153, 53, 30,253,226,115,254, 60,180,
+ 38,247,236,194,137,166,182, 11, 35, 90, 13,142,194, 90,244,112,204,241,104,140, 76, 26,172,175, 90,126,239, 11, 95, 32, 55,134,
+178,172,176, 85, 73, 2,196,137,239,255, 85,128, 54,150,195,129,175,151, 27, 99,105,101, 25,214, 89,140, 51,148,213, 24, 33,160,
+221,233, 50, 28,142,189,144, 80,104,179,242, 68, 20, 75,239,232,128,150, 49,196, 89,155, 40, 82, 20, 85, 73,156,164, 72,153,248,
+ 72,113, 34,255, 32,103,250,187,195, 34,146, 98,114, 35,156, 70,148, 59, 13,216, 93, 72, 41,207,227,173,156, 43, 84,157, 20, 68,
+154,180,193,185,122,220,233, 41, 16, 47,236,132,210, 54,223,131,201,156, 92,235, 44, 49,197,205, 78,130,169,179, 14,129,228,137,
+177,158, 4,170,189,208,139,209, 26, 91,149,158,167, 80,122, 98,155,169, 10, 76,158, 83,149, 57, 85, 89,160, 75,255,111, 93,228,
+152, 34, 7, 83, 32,108,133,180, 6,229, 44,132, 26,152,157,145,122, 85,147,227,148, 51, 27,149,159, 22,109, 49,129,210,226, 66,
+ 31,106, 16,179,137, 34,100,220, 36, 74, 83,210, 70,147, 52,107,121,224,110,250, 40, 60,205, 90,225,107,131,180,217, 36,105,164,
+196,137, 79,169,203, 72, 33,227, 32,244, 51, 59, 90,185,190,182,202, 77, 54, 30, 89,107,255,203,216,215, 29, 43, 11, 6,236,224,
+144,223,248,229,159, 99,231,137,199,105,104,223, 35, 59, 24,141,194, 36, 67,159, 77,208, 38, 72,200, 74,175, 59, 80, 11, 80, 85,
+ 97,160, 19, 74, 82, 26,203,230,198, 18,121, 62, 36, 82, 9,163, 97,193,242,214, 22,251,199,125, 12, 80, 26, 77,187,217,164, 40,
+ 11, 26, 89, 74, 94,230, 65, 11,192, 18, 41,201,176, 55,164,213,110,163,100,204,112, 56,166,170, 74,226,212,207,105,108,183,186,
+ 56, 43, 24, 14,134, 36, 89,230,235,188, 34,162, 52, 6, 93, 22,164,177, 36, 31, 14,189,248, 9, 14,173, 43,210, 36,194, 90,205,
+234,210, 50,199,199,199,180, 86, 54, 72,219, 75,108,156, 59, 75, 89, 89, 70,131, 99,178, 44,193,152, 10,109, 74, 40, 11, 46,108,
+174, 49, 60, 58,162, 63, 26, 81, 89, 71,169, 53,253,209,144,238,218, 38, 89,167,203,210,234, 6,203, 75, 43, 12,123, 71,140, 71,
+ 61, 26, 25,168,178, 96,115,185,205,238,222, 85, 34,105,217, 59, 62, 96,107,115,147, 36, 73,185,124,121,155,168,209,162, 24,247,
+145,214,239,151,173,149, 46,227,113,206,198,242, 58,123,251,199,116,214, 54,216,222,185,204, 27,222,250,117, 60,254,197,199,184,
+188,115,149,179, 27,107, 28, 14,114, 54,214,215, 41,181,230,112,111,215,151, 11,139, 18, 41, 44,228, 57,253,203,151,105, 46,173,
+208, 25,143,184,114,229, 42, 27, 27, 43, 60,119,121,135, 56,107,122,114, 32, 21,206, 88,146, 36,165,210,134,180,217,162, 10,163,
+112,187, 73, 66,127, 48,160, 50, 6, 87, 85,228,253, 1,186, 44,105,182, 87, 80, 82,128,118, 68, 70, 19,213,109,151, 85, 5,149,
+231, 82, 57,107, 2, 56,217,233,112,148, 0,114, 54,148, 98, 38,147, 6, 3,147,219, 73, 49, 25,202, 58,155,113,245,105,110, 51,
+105, 33,197, 19,234, 39, 51, 68,106,182,186,181, 33,227, 53,153, 17,226, 39,192,213,101,229,201, 56,165,144, 85, 16, 56,223, 70,
+235,166, 37,131, 73, 13,188,214, 7,158,189, 87,102,102, 59, 72,102, 51, 6, 39, 2, 75, 59, 27, 8,137, 41,225,143,147,229, 5,
+ 55,229,171,205, 12,105, 98, 70, 46,122,174,199,254,148, 8,169,158,193, 16, 21,101, 21,134,128, 48, 17,155, 23,115,140,114, 38,
+158,144,179, 46,204, 66,175,163,241,105, 58,222,154, 48,102, 47,212,199,173,152,170,134,205, 74,206,214,206,194, 68,228, 67,206,
+232,101,135, 19, 53, 19,198,161,240,227, 28,237,137,168,107,102,200, 4, 39, 90,156,156,152,140,244, 0, 66,116,131,103, 56, 54,
+ 59, 29,140,112,180, 26, 9,203,171, 93,198,213,152, 39,158,121,138, 88, 9, 94,247,250,215,211,233,180, 24,246, 70,236,110, 95,
+229,119, 63,242, 59,220,116,225, 2,107, 43,171,220,126,235,109, 28,236, 31, 32,170,130, 98, 60,230,184,231, 91,204,154,205, 6,
+ 74, 10,250,253, 30,207, 93,126, 26, 5,124,227,215,125, 45,203,203,171,140, 6, 67,154,105,194,155,238,124, 29, 15, 63,254, 20,
+ 66,168,137,102,182,138, 34,175,154, 23, 72, 35, 82, 72, 42, 93,249,158,104, 96, 84, 22, 60,252,196, 19,116,183,183, 25,140, 71,
+ 24, 96,239,224, 32,200,194,166, 94,150,180, 50, 40, 41,136,130,220,107,146, 36,190,198,106, 12, 82,122,110,128,174, 42,202,178,
+164,221,110,179,191,119, 72,214,109,161, 34,133, 27,123, 49, 21,107, 60, 9,238,232, 96,159, 40,205, 73,219, 75, 94,145, 47,170,
+181,135, 35,127,227,217,153, 69, 53,115, 33, 94,174,186,250,139, 74,155,139,235,145,245,228,252,141, 50,199,102,113,147, 6,245,
+169, 56, 93,152,216,132, 8, 35,100,167,164, 80,167,117,144, 88, 13,181,237,170,192, 20, 1,172,203, 49,174, 40,168,138, 17, 85,
+225,127, 94, 21, 5,101,153, 83, 21,121, 24,105, 90, 5, 77,118,131, 10, 3,123,140, 16,104, 39, 48,120,135, 23,132,119, 64,165,
+ 5,235,193,222, 56,225,123,100,173, 11,135,226, 35, 22, 21,167,196, 73, 70,210,200,104,100, 77, 26, 89,139, 70,107,153, 70,179,
+ 69,150, 53, 73,155,205, 0,234,205, 16,141, 39, 68,169,143,196, 39,189,241, 65,181, 15, 9, 82,137, 27, 23, 29, 79,100, 52, 60,
+ 6, 11,172, 4,105, 53,143,126,226, 19, 60,244,129, 15,210,112,120,146,154,214,232,202,162,132, 7,109,231, 44,145, 82, 32, 64,
+ 41, 49,233,145,175,115, 41,113, 96,235, 43, 37, 73, 27, 9, 69, 94, 81, 86,154,172,217,164,172, 42,122,199, 61,162, 36, 66, 10,
+ 73, 20, 7, 61,248,144,254,173,247,147,178, 44,137,162,136, 44,107, 50, 42, 42,198,163, 2,112,164, 73,140,115,154, 40, 82, 12,
+ 6,253, 32, 83, 45, 41,203,138, 82,151,126, 99,181,150,162, 44,145, 66,146,101, 9,163,209,152, 44,139, 16, 82,208,233,116,232,
+245,251, 52,178,140,238,234, 26, 89,171, 69,154,166, 28, 31,239,134,185, 18, 18,140, 99, 56, 30,179,220, 93, 98,239, 96,159,254,
+112,132, 74, 26,140, 10,205,195,143, 60,198,237,119,188, 22,153, 53,105,183,151, 72,147,132, 81,191,135,206,135,232,241,128, 36,
+114,172, 45,117,120,242,210,227, 8, 37,216,217,217,230,206, 59, 95,135,115,240,204,115, 87,105,181, 59, 60,187,125,196,206,229,
+ 3, 46,158, 93,165,217,237,114,212, 31, 16, 75, 63,110, 83, 10, 73,255,184, 79,107,101,137,171,151,159,227, 53,119,220,193,231,
+ 31,126,152,181,213,111, 34,178,112,208, 59,230,236,133,243,228,227, 49,251,135, 7, 88,107, 56,115,230, 12, 66, 8,226, 72, 50,
+ 56,218,167,217,202, 88, 93, 94,226,168,215,167,211,106,114, 60, 24, 19, 41,133,182,134,193,160,207,218,218, 26,219, 87,175,210,
+ 93, 90,162, 8,123, 72, 97, 42,162, 36,162, 26,142,137,173, 39,226, 30, 28, 29,178,244,186,155,145, 73,130, 52, 18, 99,189,204,
+178,159, 51,160,113,149,198,150,154,202, 20, 62, 96,212, 26,172, 9,227, 73,235, 25,107,106,118,144,185, 47, 53, 73,233, 65, 93,
+ 76, 92,203, 41, 49,219, 90,140, 22,158,101, 31, 50, 1, 78,224,231, 88, 72, 55,217,175,172, 85,147,113,176,218,250,182, 79,105,
+157,223,115,235,145,168,206,103,119, 16,118,162, 49, 97,235, 97, 85,117, 38, 65,202,233, 80,149, 90,240, 69,138,235,138,107, 77,
+ 34,230,217,178,240, 76, 26,223,205, 41, 96, 50, 55, 93,141, 83,244, 63,102,247,218, 9, 14,159, 58, 1,211, 78, 30, 81, 89,234,
+137, 14,110,205, 42,159, 75, 13,132,153,180, 53, 96,215,195, 85,140,177,158, 32, 49, 51,132, 94, 78,122, 4,229,140,148,231, 12,
+176, 51,155, 82,119,115,196,187, 57,160, 16,115, 19,235, 39, 26,183,206,205,207, 4,225,132, 50, 79,221,155,120,141, 38,185,243,
+245,249,172,213,162,212, 6,163,125, 31,247,235,223,244, 53,252,194,207,195,205, 55,221,236,107,140, 74,112, 48, 26, 32, 28,124,
+252,119, 63, 74, 43,107,242,173,119,127, 43,105,156, 98,170, 10,170,146,126,191, 79, 20, 69, 52,218, 93, 4,154,179,103, 54,249,
+237, 15,127, 24, 99, 45,111,122,211,155,200,218, 75, 84,214,209, 63, 60,164,208, 21, 55,111,109,208,136, 36,133,177, 88,124, 36,
+211,110,181,168,170,138,193,104, 64,162, 34,150,187, 75, 32, 28,189,209,128, 82, 87, 8, 37,169,132,229,112, 60,160, 8,245,236,
+ 74,251,133,185,188,177, 66,154,164, 20, 69,233,103,186,199, 49,121, 89,144,197,209,180,191, 19, 40,203,146,209,112,192,193,254,
+ 1, 75,107, 9, 89,214, 96, 52, 26, 33, 85,140,140, 36, 73, 28, 35, 0, 93,249,141,110, 52, 56,198, 56, 16, 81, 10, 73, 4, 66,
+122, 1, 12,107, 39,158,232, 12, 43,100,158,217,254, 18,234,218, 47, 25,216,175,155,202, 23,167, 14, 87, 96,110,238, 50,243, 3,
+ 82,220,140, 16,133,243,224,234,116,133,211, 37,174, 42,125,100, 94, 21,216,114,236, 65, 61, 31,163,139, 17,166, 8,218,221, 1,
+196,167,105, 71,175,169, 46,173, 9,105,116,135,149,225, 70, 54, 2,167, 8,189,189,142,202,122, 98, 81, 89, 85,148,218, 98,156,
+196, 32,113, 34, 66,166, 49,105,156,145, 54, 58,196,105, 74,163,217,166,209,234,144, 54,219,164, 89,147,102,171, 77,218,104,145,
+181,154,164,141,148, 40, 73,136, 83, 79,172,140,226, 8, 25,123, 97, 10, 89, 11,232,132,238, 2, 39,110,240,121,206,104, 77,206,
+101, 53,194,166,228, 89,247,150,203, 79, 61,206,191,255,217,159,165, 53, 46,201, 71, 5,133,213,104, 3, 10, 65,165,141,239,233,
+247,170, 34,196,145, 12,164, 40, 48, 2, 42, 61,175,228,189,182,218,241, 34, 50, 74,209, 31,143,201,186,203, 92,221, 63, 12, 89,
+ 36,175, 35,160,141,241,142, 40,206,143,157, 20, 2,163,253,231,150, 54, 26, 20,101, 73, 85,129,174, 28,145, 84, 68,145,164,217,
+108,144,164, 49,207, 62,115, 64,146, 38, 84,149, 70, 84, 26, 67,228, 91, 8,203,156, 24,136, 34,129,179, 16, 43, 1,198,176,178,
+182,194, 96, 48,160, 44, 53, 43,235,103,104,181,187,108,157, 59,199,149,203, 87, 88, 94,234,250, 97, 40, 69, 78, 49, 30,209,110,
+101, 12,134, 3,246, 14, 15, 41,181, 35, 63, 28,240,236,149,109,238,120,237,157,104, 39,104, 68, 9,214, 57,242, 65,159, 72, 24,
+142,183,159,227,166, 51,171,152,124,192, 99, 15,127,129, 36, 82, 28, 31, 13,184,253,142,215,178,119,216, 99,239,224,144,229,149,
+ 53,158,120,118,135, 71, 46,237,114,235,185, 46, 73,187, 67,229,252,124,243, 52,107,160, 17, 44, 47, 47,241,197,103,158,161,217,
+109,178,191,183,195, 27,222,242,117, 92,222,190,202,167, 62,251,121,238,186,235,235,216,191,186, 77,179,213,102,253,204, 25, 42,
+173,201, 75,205,222,238, 62, 91, 91, 27, 96, 52, 38, 31,210, 94,191,128,206,135,244,251, 61,100, 28,211,206, 28,199,189, 62,173,
+102, 74, 85,105,210, 52,245,193, 66,104,193, 52,206,226,132, 98,109,109,157,254,240, 89,164,177,152,188,228,240,224,128, 11, 88,
+162,102, 19,108,228,197,193,172, 95,255,232, 10, 97, 44, 86, 27, 68, 53,246,130, 73, 85, 21,134, 13,121,208,175, 71, 7,251,241,
+ 2, 53,179, 60,168, 79, 69,129, 71, 81, 71,245, 53, 8, 3,194, 10,172,118,160,103,120, 89,245,212,178,122,189, 59,233,131, 67,
+ 39, 81, 78, 34,106, 86,122, 29,153,135, 72, 95, 88,137, 13, 42,145,152,217,201,194, 33, 50, 87, 18, 25, 69,147, 18, 85, 61,104,
+101,110,222, 51,243, 53,118, 78, 2,250, 76, 45,127,162, 56, 57, 59,176,169,126, 13,107,152,105, 78,155, 0,253,164, 13,143,105,
+166, 97,118,248,140,157,148, 16,194, 84,211,162,170,230,122,207,231,102, 56,135, 8,102,154, 98,159, 37,183,185,153,217,208,114,
+174,111,143, 80,119,144, 39,167,186,213,100, 11, 33, 64,213, 41, 23, 55, 55,218,145, 48,101,103,210, 78, 56,245,103,166, 35, 43,
+167,217,194, 9,145,168, 30, 67, 39,101, 45,233,167, 2,201,105,186, 91, 73, 25,161, 75, 67, 53, 44,120,228,179,143,240,141,223,
+240, 77,124,247,247,124, 47,227,195,125,108,233,133, 39, 98, 47,113,197,179,207, 62,195,109,175,255, 26, 90,205, 54,163, 81, 78,
+214, 80, 68, 66, 82,228, 5,166,178,220,124,238, 28,141,170,203,197,139,231, 41,139, 17, 50, 74,105,119,150, 17, 81, 74,107,121,
+141,189,237,171,236,237,237,162,172,161,145, 68, 20, 99, 31, 73, 88,231,168,180,246, 25, 17, 7, 90, 87, 28, 28,239,147, 38, 41,
+ 74, 74, 26, 89, 74,127,168,189,232,142,153,182,238, 88,231,232,100, 13,112,142,231, 46, 95, 38,137, 19,218,237, 22,205,102, 70,
+148,196,164,145,191,249, 84, 20, 97, 66,171, 79, 25, 24,213,113, 18,177,190,190,198,179,207, 60, 69,187,209, 32,118, 2,198, 57,
+ 72, 69, 28,251, 77, 47,137, 35, 70,195, 62,142, 17, 42,138,253,168,197, 40,193,134, 73,108,215,232,166,159, 54, 78,245, 6, 34,
+ 48,167, 78, 41, 19,226,212, 66,249,196,177,115,243, 2, 52,238, 68, 73,223,157, 86,103,159, 29, 30, 83,175,117,225, 35,130, 9,
+177, 47, 12,254,169,167,250, 57, 27, 6,158, 88,237,117,210,117,129, 45,115, 76,153, 99,202, 2, 83,140, 40,243, 49, 38,207, 3,
+168,135,159, 87,133,159,122,102, 29,202,216, 32,169, 11, 86,250, 86, 24, 43, 44, 78, 24,180,181,148,198, 80, 24, 63,217, 47, 47,
+ 75, 42,237, 48, 70, 97, 69,140,108, 36, 36, 73, 70,212,104,146, 52,154, 52,154, 30,180, 27,141, 38, 73,150,145, 52,154,164,173,
+ 38, 73,179, 69,146,102,164, 89, 70,156, 72,226, 36, 38,138,149,215,152,143,130,210,148,154, 14,142,152,235,215,175, 21,109, 39,
+ 51,152,220,105,179, 32,230,117,221,167,204, 72, 36, 80, 13,122,252,254,135, 30,224,224,169, 39, 48,189, 62,169, 18,140, 66,197,
+195, 89,135,148, 42,100,198, 32, 75, 61,203,217, 58, 40,141,191,167, 45,144,168, 16,165, 75,207, 47, 49,166, 96, 84,142,137, 50,
+ 63,195,160,172,180,111,211,171,179,124,210, 71,107,149,174,136, 34, 21,122,237, 53,149,174, 72, 27, 41, 8, 65,127, 48, 36, 77,
+ 83, 18,101,201,210,148, 52,142, 25, 14, 6,228,165,166,217,110, 51,202, 43,136,140,151, 92,173,188, 48,144,136, 36,173, 44,163,
+ 24,143,145,192, 82,199, 15, 53, 49,198,146,181, 59,164,173, 22, 75, 75, 75, 60,251,244,211, 52,146,152, 84, 65, 53,236, 49,232,
+251, 33, 47,227,161,102,239,176,207,113,127, 8, 82,241,236,229, 29,110,189,253,181,244,250,158,240,151,180,154, 56, 45, 40,202,
+ 17,219, 59,151, 57,187,182, 68,111,255, 42, 79,127,241,113, 34,165,216,221, 31,113,225,194,121, 46, 95,221,101,152, 23,168,180,
+201,115,187,251, 28, 14,198,156,185,176, 74,179,219,130, 36,241, 26,241,169, 31,217,108,227,148,106, 60,102,121,121,137,126,191,
+143, 72, 18,250,189, 67,110,186,233, 38, 62,255,249, 47,176,189,179,203,234,234, 10,159,125,248, 97,190,246,205,111, 38,206,154,
+244, 14, 15,144,101,233,117,226, 71,125,150,150, 58, 12,246,247,104,181,154,108,109,174,115,101,123,159, 86, 51, 99, 56, 26,146,
+ 23, 57,173, 86,147,131,163, 35,210, 70, 3,109, 60,192, 39, 73, 66,101, 28,227,241,136,213,149, 85, 14,118, 15,200, 71, 99,196,
+104, 76,255,240,152,213,229, 53,136,146,144,137, 12,105,213,208,222, 38,141,193,234, 24,103, 12,170, 42,113,165,215,113,208, 69,
+238, 65, 94,135,154, 58,245,176, 32,159,122, 71,120, 57, 84, 23,114,110, 66, 4, 98,182, 54,232,210,119,139,216,202,119, 86, 89,
+231,103,122,200,216,139,223,136, 32,130, 67, 36, 67,157,218,131,184,156,104,157,132,180,189,177,211,177,197,181,148,178,141, 38,
+169,112,164,152,142, 63, 13,195,159,234,175,238, 58, 97,134,152, 1,243, 73, 73,207, 77,123,242, 39, 83,225, 78,164,209,235,160,
+130,153,121,238, 39, 91,205,153,144,209,167,196,229,169, 64,206, 52,130,143,138, 74, 79, 53,219,107, 15, 98,166, 30, 48,235,121,
+156, 84, 14,171,101,242,102, 31,115,209,220, 12, 99,126, 62, 82,159,201,165,134, 17,158,117, 75,145, 19,211, 41,170,204,120, 53,
+ 83,150,178,152,168,205, 77,132,233, 39, 35,233,100,232,103,158,214, 98,156,156,138, 0,152,170,162, 56, 62,102,100, 99, 30,217,
+190,194,193,206, 10,111,126,227,215,112,233, 51,159,163,234,247, 57,216,219,163,217,104,227,128,170,210,236,238,238,243,103,191,
+247, 94, 62,248,107, 15,160,164,100,220,235, 81, 22, 37,237, 86,139, 56,138,217, 92,217,228,117,175,125, 13,159,124,246,128, 24,
+197,238,206, 14,168,183,176,178,126,134,135, 63,251, 41,242,188,160,145, 36,126, 26, 88,224, 2, 56, 41, 41,202,156, 88, 42,226,
+ 64,144,168, 76,133, 43,124,230, 67, 42, 53, 71,244, 19, 14, 34,229, 83,126,205, 44, 35,138, 20, 23, 47, 92, 96,111,255,128,188,
+ 44,145,195, 33,203,157,206, 68,183,189,223,239,211,106,164, 24,227, 69, 77,108,200,172,168, 72,209,110,183,252,168,211, 68,209,
+ 89, 90,198, 88,208,149, 65, 42, 77, 89,105, 98, 3,163,178,100,111,119,151,173,179,231,145, 50,154,150, 50,196,204,240, 28,119,
+227,244,251,141,164, 98, 39,181,242, 89, 7,112, 70,102,113,218,170,120,173,227, 32,102, 28,187,185,153,222, 98,110, 10, 66,184,
+137,236, 20,192, 1, 35,100, 72,223,233, 64,124,171,194,192, 19, 3, 58, 7,237, 71,148,122, 64,247, 76,118, 83,230,232, 50,159,
+164,216,235,105,104, 46,200,186, 58, 99,153, 29, 84, 24, 74,241,104,227, 38,227, 36, 61,121,209, 80, 26, 71,105, 28,134, 8,178,
+ 6,141, 56, 37,138,151, 72,210, 38,105,195, 3,118,220,104,146,100, 45,255,125,163, 65,146,196, 36,141, 6,113, 35, 69,133, 72,
+ 92,198,145, 39,184, 41, 27, 68, 92,228, 68,142, 83,136,217,154,221,245, 4,164,174, 43,223, 63, 63, 8,105, 58,103, 17, 37, 5,
+213,184,224,232,242,115, 92,254,236,167, 57,222,126,142,229, 68, 81,148,165, 23,130, 10, 68, 91,240,147, 12, 19,229,147, 61, 78,
+ 8, 74,141,223,140, 29, 19, 71, 35,138,164,215,119,215, 37, 90, 23, 24,103,105, 54, 91,108, 63,115,117, 50, 44,196, 24, 75,220,
+204,252, 60,118,169,168,202, 2, 33, 34, 15, 48, 85,229,179, 72,198, 80, 21, 21, 14,135,177, 21, 81, 24,179,154, 53, 82,158,125,
+238, 42,113,156, 96,172, 96, 52, 42,113,178, 36,205, 26, 20, 69, 14,214,210, 72, 27, 30,224,173,207, 40, 72, 41, 24, 12,250,200,
+ 56,161,213,237,144,100, 25,135, 7,123, 56,163,137, 16, 84,163, 1,163, 97,159,209, 96,136,104,181,232, 13, 70, 20,149,159,103,
+177,183,183,203,250,218, 42,189,227, 67,132,138, 88, 90, 94,161, 28, 29,145,201, 6,187,207, 62,201,230, 74, 7, 83,244,121,230,
+169, 75, 8, 4, 7,189, 49,183,220,113, 59,135,135,199,244, 6, 99, 58, 43, 43,244, 6, 67,134,101, 69,179,219, 36,105, 36,164,
+ 89,131,229,141, 53, 90,221, 54,178,215,163, 24,151,168,102,215,247,249, 27,195,120, 52,164,221,108,242,196, 99,143,113,238,166,
+ 91,184,112,225, 2,143, 63,126,137, 59,239,124, 45,101,101,249,194,163,143,115,225,220, 89,122,253, 62,199,131, 33, 74, 69,108,
+110,174,254,255,169,251,207,103, 75,179, 44,189, 15,251,109,251,154,227,174,203,204,178,221, 61,221, 51,156, 1,201,129, 33, 40,
+ 58,136, 33,134, 28, 21, 82, 72, 17,252,231,244, 69,255,129,164, 80, 48,100,130, 65, 41,164, 0, 29, 8,130, 67, 12, 49,152,193,
+116, 79,187,170, 46,147,246,154, 99, 95,183,141, 62,172,125,206, 61, 55, 43,187,167, 7, 4, 64,178, 34,110,100, 86,213, 77,115,
+239, 57,239, 94,123,173,245, 60,191,135,113, 12, 52, 77, 67, 8, 9,239,189, 96,102,239, 30, 88, 44,231,188,126,253,154,190,239,
+113,218,178, 92, 46,217, 31,246,104, 43, 78,136,161,239,200, 74,227,171, 90,178,226,187,142,102, 12,236,222,222,114,249,241,167,
+168,218,161,138, 78, 3, 52,152, 66, 2, 77, 17,235, 28, 41, 6,180,157,200,110, 66, 89, 79, 54,150, 60,244,132,126, 40, 81,209,
+169,104,102, 34, 42, 62,178,213,143,145,202, 57,171, 2,252, 9,140,227,196,208,143,140,253,200, 56,142,114,145,212, 10,235, 45,
+174,242,248,202,227,144,172, 13, 93,210, 18,143,157,224,209,122,150, 99, 38,170, 8, 73, 23,209,166,146,177,255,209,201,117, 76,
+ 89, 43, 59,245, 92,160, 88,249,177,178,124,248, 28,124,175, 75, 63,213,193, 99,230,124,153,120, 63,109,158,207,132,125,241,241,
+207,127,154,212,120,206,170,143, 79, 70,241, 71, 17,250,113,223,110,199,113,122, 98,158,127,223,147,247,161,221, 1,124,119,102,
+247, 93,211,252,211, 67, 90,107,141, 81,250,201, 14,253, 92, 28,247, 56,106,120, 44,104, 71,111,222,163, 56,193,136, 5,226, 44,
+ 9,235, 40,246, 57, 69, 94,150,221,105, 78,234, 44,225, 77, 68,121,211,176,163,123,120,141,234, 59,250, 16,120,243,234,199,164,
+220, 19,246, 27,118,239,238, 48,109,205, 48, 12,204, 86,115,148,173,112,190,102,138,240,209,199,159,241,246,245, 75,246,187, 45,
+ 49, 70, 22,139, 5,159,124,242, 17, 55, 85,230,243,207, 63,229, 31,252,236,107,252,204,243,237,203,151,124,245,237, 43,190,247,
+217,247, 88,222, 60,231, 87, 95,255, 10,101, 12, 77, 85,145,183,187,211,247, 44,229, 92, 46, 38,178,167,137, 36, 18, 25,163,133,
+102,100, 10, 30, 87, 6, 26,199,213, 8, 69, 9, 45, 20,246,205,126, 71, 76,137,190,239, 32, 37,174, 86, 75, 98,140, 12,227,192,
+ 48,244, 56,171, 73, 37,179,222, 25, 75, 72,177,236, 87, 29, 41,130,111,106,234,122,134, 82,154,183,111,222,160,147,112,216, 61,
+138,125, 63,113,232, 58,102, 74,160, 38, 74,169,239, 40,201,159,236,125,242,123, 89,224,191,177, 91, 87, 79, 45, 34,239, 13,208,
+207, 63,237, 59,208,136,252,244,231, 79,212,165,249,209, 21,145, 79, 56,202,116,202, 14, 16, 97,218, 17,183, 58, 66, 44,105,102,
+101,103,158,199,161,160, 90, 59, 66,233,194,195, 52, 72, 55,113, 28,207, 37,158, 60, 68, 49,113,202, 51,152, 66,100, 74,153, 16,
+115, 97, 52, 40, 82,182, 68, 60,170,178,212,174,162,117, 53,198, 55,152,170,198,215, 51, 92, 53,199, 85, 53, 85, 93,227,234, 6,
+ 87, 53,216,170,194,249, 10,235, 44,214, 73,214,188,246,101,252,103,213,137,196, 7,250,140,240,152, 79, 40,204,156,249, 14, 58,
+249,175,106,254, 83,103, 78, 18, 13, 18, 54,147, 35,119, 95,127,197, 55,255,248, 79, 48, 58,178,155, 6,121,189, 67,230,152,109,
+ 99,202,134,180,118, 10,239, 52,135, 97, 98,152, 32,160, 9,229,253,165,203,163,220,212,142, 16, 36,110,115,182,156,243,230,221,
+ 61,161,168,252,157,183,140, 67,143,175,252, 41, 26, 83,105,141,117,142, 97, 24, 8, 49,210, 52, 53, 93,223, 81, 38,172,104,173,
+184,184, 92, 18,166, 1,173, 13, 15, 15, 7,158,191,184, 96,191, 31,232,250,145,213,101, 85, 2, 72,192, 91,131,247,150,169,235,
+176,198,114,185,154,209, 29,118, 56,107,176, 85,205,108,190, 64, 25, 75,119,216,211,214, 21,196,145,126,127, 28,187,207,216,117,
+ 29, 15,235, 45, 57, 89,238, 31, 30,104,154,154,105,232, 81,206,114,177,108, 9,211,158,198, 40,190,249,197, 47,184, 90, 54, 48,
+110,248,230,245, 75,198, 49,144,148,225,249,103,159,242,205,219,119,188,124,245,150, 23, 31,125,202, 16, 97,202,160,189,167,106,
+ 43,234,218,114,117,125,193,197,205, 5,179,229,138, 80,123,186, 46,224, 77, 35, 55,164, 12,125, 8,236,118, 59,170,186, 33, 78,
+ 35,164, 68,219,212,188,252,230, 91,158,127,244,156,175,190,250,134,229,106,137,173,229, 76,123,216,237, 48,206,113,177, 90, 16,
+ 66,135,117,134,118,177,128,253,129,102,222,176, 63,116,180,109,203,225,112,160,174,234,114, 81, 74,132,105, 68,105,133,201,138,
+108, 12, 73,107,162,146, 46, 87, 77,145,135,175, 94,241,226,179,239, 99, 47, 53,182,170,209,222, 75, 39,171,101,106, 68, 6, 83,
+196,162,217,138, 78, 69, 91,143,178, 14,229, 28,202, 88, 18, 7,166, 94, 26, 16,131,150,201, 87,214, 24,132, 31, 47,181, 48, 17,
+167, 72, 63, 78,116, 93,199, 97,191,103,183, 27,232,251,129,148, 34,214, 89,234,166,162,142,169, 64,150, 20,198,103,172,115, 88,
+171, 30,129, 51,103,234,248, 83, 1, 45, 25, 36, 89, 68, 98,242,115, 37,163, 45,109,142,217,234,165,248, 27,243,168,234,127,178,
+190,202,167,240,177,167, 16,183,199,194, 43,113,178,241,169,122,255, 73, 68,109, 81,233,199,115, 14,204,113,228,158, 79, 58,130,
+115, 11,121, 58, 27,199, 83, 68,181,167,162,254, 8,166,127,143, 8,166,120,204, 39, 63,239,212,143, 93,122, 62, 3,215, 31,129,
+253,170,240,188,245, 49,139,189,160, 64,207,246,235,239, 31, 49,249, 36, 94, 72, 37, 93, 75,126, 76,197,175, 43,158, 93,217,209,
+ 25,173, 78,191,231,135,129,253, 79,125,130, 41,229, 2,189, 24, 72,211, 26, 99, 53, 38, 6,188,238, 73,140,236,118,183,164,241,
+ 64,151, 19,245,245,130,186,153, 49, 96, 8, 49,241,247,255,203,127,128,138,153,113, 18,241,211, 52, 5,154,166,165,174, 27,102,
+173,252,217,187,221, 22,162,102, 82,142,127,240, 71,255, 53, 47, 62,254,223,242,175,252,107,127,155,255,246,143,255,136,237,254,
+ 64, 93,251,179, 17,114,225, 12, 23,191,177,177, 6,148, 38, 76,129,182,174,101,100, 30, 35,222, 24,166, 20,177,218, 48, 78,129,
+172, 20,117,219, 16, 67,228,221,235, 87,114, 0,150,211,247,197,139,231, 40,173, 36, 42,180,236,105, 99, 81,130,134, 16, 24,167,
+129,113, 10,204,230, 11,118,251, 3,117,221, 18,179, 35, 38,205,205,243, 23, 88,231,248,230,235,111,133, 9, 62, 76,212, 85,205,
+108, 62,167, 58, 28,136, 90, 67,124,106, 55,251,117, 66,185,223,218,202,246,157, 46,254,108,196,116, 78, 51, 60,253,119, 10, 0,
+231,241, 38,124,122,168,210,163, 72,132,211,136, 43,202,248,175,248,190,137, 1,166, 94,152,236,161,151,110,124,234,136, 83, 87,
+118,230, 19, 57, 68, 33,184,133, 35, 99, 61,150,206, 94, 18,212,132, 53,174, 36,187, 32,166,194, 92,200, 18,186,146,178,164, 86,
+ 21,165,184,242,150,218,121,180,173, 49,110,129,175, 27,140,151,130,110,235, 25,198, 75, 17,183,181, 61,129, 94,172,247,167,177,
+161,210,246,140,133, 47, 33, 55,232, 44, 83, 40,117,156,119,235,179,204,122,245,129,233, 69,254,206, 69,232,183, 19, 44,168,179,
+221,251, 35,109,123, 28,122,126,242,199,127,204,246,219,111, 49, 6, 38,167, 8, 83, 34, 6, 48,202, 16, 74,228,143,183, 48,111,
+ 43, 98, 78,132,144, 9, 81,166, 36, 49,131, 87, 10,173, 50,179,198,203, 56, 63, 69,140, 49,164, 12,155,237, 30, 20, 88,227,233,
+135, 81,248,225,229,235, 11, 81,186,189,156, 5,241,170,148,162,239, 39, 82, 4,235, 29, 38, 6,170,202, 98,141,194,106,203,102,
+179,193,104, 67, 74,154,237,182, 39,103,209,152,228, 99,222,128, 86,167,116,177,202, 90,186,174, 23, 5,183, 86, 52,109,141,210,
+154,187,187,123,150,109, 13, 97, 66, 27,199,253,221, 59,174,174,174,217,238, 15,172,183,123,166, 49,178, 47, 88,218, 12,216,202,
+211, 84,142,161,219,209,204,106, 94,127,253, 43,158, 93, 44, 88, 84,154,111,126,245, 37,253, 52,162, 93,195,124,117,197,203,119,
+183,188,187,223,176, 88, 93,162,124, 77, 84,138, 49, 70,218,249,156,186, 54, 92,172, 26,102, 11,249,104,151, 51,174,219,134,237,
+110, 96,183, 17,221,129, 55,150, 93,183, 39,171,140,117,154,135,251, 91, 86,171,107,166,113,226,112,232,152,198,192,205,243,103,
+124,243,242, 21, 31, 61,127, 78, 40,207, 89,204,138,135,205,158,166,242, 52,170, 18, 20,245, 98, 65, 55,142,104,163, 89,173, 86,
+236, 54, 91,134, 97, 96, 24, 71,156,115, 76, 49,224,156, 39,233, 81,238, 19, 10,230,171, 37,119,175,223,209,239, 14,212,219,142,
+237,171, 55,180, 90,145,103, 51, 76,108, 81, 85, 6, 83,159,246,227, 71,207, 55, 38,146,205, 36, 13,153,117,104, 95,225, 92,133,
+181, 14,235, 59, 66, 63, 18, 39, 41,174, 33, 4,193, 90,235, 82,200,166,137,161,239,217,172, 55,108, 55, 27, 54,235, 53, 15,155,
+131,164, 78,230, 76, 93,123,230,109,203,124, 62, 39,204, 18, 85,136,216,224,112,206, 97,207,243, 22,242, 35, 88,237,152,235,158,
+ 75, 50, 98, 42,142,148,152,226,153,127, 92,147,147, 66, 69,249, 58,116, 41,252, 79,246,231, 71,112,219, 41, 30, 60, 63, 17,202,
+ 29,207,124,177,130,135,199, 24,241,179, 51, 84,138,116,105, 18,206,136,170,199,194,206, 25,130, 61,126,168,160,159, 71,175, 38,
+125,158,143, 92, 36,253, 28,195, 47, 52, 41, 63, 38,161,145, 31,163,236,142, 7,128, 42,227,141, 35,187,219,148, 98,123,228,232,
+158, 23,246,115,235,218, 35, 4, 64,157, 21,116,131, 74, 25, 21, 35, 38,171,130,180,204,103,136, 61, 78,226, 9,148,236,232,244,
+241,231, 39,171,194,163,161, 93, 29, 25,222, 58,147, 85,194, 57, 77, 74, 19, 33,118,168,148,209, 49,179,126, 88, 11,220,194, 59,
+158, 61,251,148,213,245, 13,205,114,201,184,239, 24,246, 91,194, 97,143,211, 6,239, 18,135,177,199,207,174, 88,204,175,176,186,
+225,219,187,123,126,167,159, 10,176, 70, 81, 27, 67,191, 94,115,127,187,225,197, 39,223,231,179, 31,252,144, 87,223,126,193,204,
+203,133,102, 74, 74, 70,218, 41, 48,165,112,178, 9, 46,155,150,102,233, 88,212, 53,111,222,188,198, 91, 75, 50,134,221, 40,173,
+133, 42, 95,171,175, 91, 94,190,124, 73, 55, 12, 40, 96, 53,159,161, 82,226,147,143, 94, 48,246, 61, 99,154, 36, 28,228, 72, 29,
+210, 14,149, 51,227,225,192, 48, 69,170,139, 43,156,171, 88,223, 63, 48,132,114,163,141,153,152, 53,151,207, 62,130,251, 13,125,
+216, 18, 83,230,176,125, 64,197,190,128,110,128, 24, 74,146,186, 42, 31, 79, 21,157, 39, 64, 72,193,161, 74,243, 44,208, 20,115,
+ 86,196, 37,197, 55,227,180,194, 40, 25,215, 82, 98, 71, 85, 72,100, 23, 33,107,185,181,146, 81, 73,242, 5, 84, 6, 65,239, 80,
+212,226,197,106,151,138, 85, 44, 37,114, 16, 64,140,138, 19,196,145, 28,134, 34,122, 27,136,225,216,129,247,132, 81,254,123,154,
+ 4,248,146, 75,142, 60,233,113, 55, 37,157,121, 38, 4,121, 16,195, 20, 9, 25,201, 48,144,103,191, 36, 36,121,140,247, 84,182,
+ 66,251, 6, 83, 73, 39,110,172,199, 84, 51,116, 53,127, 20,177, 85, 21,174, 18, 97,155,113, 14,237,100, 95,103,140,121, 18,130,
+161,148, 66,153,115, 28,238,217,182,251,152, 94,252, 36,236, 38, 63,165, 84,157,111,252,206,172, 46,127, 41, 95,224, 20, 99, 43,
+234,100,131, 34, 42,141,214,176,127,251,134,215, 63,251,115,212,184, 69, 79,145, 60, 66, 63, 28, 93, 4,194, 50,168,116,102,222,
+ 26,234,214,115,123,183, 35, 20, 1,148,202, 10,103, 52,228,136,181,138,182,245,132, 56, 73, 87,225, 27,222,220,117,146,173, 88,
+ 80,196,242,189,181, 12,195,200,229,197,146,126,191,167,170,107,250,161, 39,230,132,245,142,119,111,247, 92, 93,206, 57,236, 58,
+170,166,162,118,142, 48,140, 92, 95, 95,240,171, 47, 95,177, 88,212,236, 15,157,120,176,125,113,133,164, 68,154, 38,218, 85, 75,
+ 24,122,116,142,104, 45,122,149,110, 72,124,254,253, 79,217,236, 14, 52, 83, 64,165,137, 60,193,242,242,146,245,118, 45,170,105,
+163,121,119,119,199, 48, 74,214,251,122,187, 21, 8,139,119, 56,173,200, 83, 71, 59,155,115,255,250,107,174, 22, 51, 26,103,249,
+234,235, 95, 49,198, 0,182,198,181, 43,238,183, 3,119,235, 14, 91,205,169,231,151, 4,237, 25,167,137,102,117,137,113,153,249,
+197,156,249,114, 78, 51,111,168,218,138,102,230,176, 73, 16,210,135,195,107,166, 96,112,179, 11,116,125, 79,131,151,128,159,148,
+ 24,199, 81,246,191, 74,113,123,119,203, 71,223,255,140,168, 12,235,174,163,158, 45,120,120,123,139,114, 7, 94,124,252, 17, 81,
+107, 54,125,207,194,104,180,142, 92,206,231,228, 49,210,135,200,106,177, 98, 28, 38,250,195,136,111, 42, 25,211, 55, 21, 91,179,
+ 39,166,196,184,223, 83, 59, 15, 58,179,239,118, 60,215, 31,241,240,237, 27,108, 93,163,198, 17,230, 19, 58, 76, 80, 71,178,107,
+ 80,214,149,179,219,144,180, 5,227, 81,182, 70,133, 17,103, 6,146,177, 40,231, 81, 77,195,216,139, 24,117,234, 7,113,152,140,
+ 19, 83, 22, 33, 91, 24, 70,134,126,224, 97,123,224,238, 97,203,221,253,150,135,237,150,125,215,161, 50,180,190, 97,222, 79,172,
+ 70, 9, 4,106,199,154,170,242, 56,103,177,101,133,192, 25, 6, 58,103, 69,206,177, 36, 36, 30, 39,122,178,211, 22, 1,120, 44,
+207,161, 41,130, 83,125, 74,152, 59, 21,237,247,246,217,233, 61, 47,252,185, 98,253, 20,235,122,246,249,231,177,174,194,134,225,
+ 73,176,217,113,162,240, 72, 93,141,103,127, 94, 58, 5,205,156,184, 96,101, 50, 96, 83, 86,103, 58,113, 25,143,197,163,215, 56,
+ 29, 29,223,234, 4,162, 55,103, 93,184, 64, 28, 76, 73,216,209, 24,173,113, 69,180, 99,180,146,209,225,123, 99,114,173,244,147,
+232,206,147, 15, 55, 29,189,239,137, 20, 36, 82, 81,197, 44, 98,163,156,159,160,198,242, 17,208, 81,190, 57, 79,130,102,206,200,
+ 58,100,137,132,201, 81,242,137,199, 41,224, 45, 88,103, 8,253,196,188,153, 49,142, 3,135, 16,185, 92, 94,210, 94, 94,145,180,
+136,113, 98, 18,241,132, 67,246, 72,113, 10,140,195, 72, 83, 87, 92, 44,103,188,184,185,226,235,175, 54,104,101, 1, 45,135,116,
+121,209,223,190,125,199,245,205, 21,159,124,250, 25,214,104, 86,179, 86, 60,229, 74, 50,210,205,249,126,186,120,198,239,215,107,
+174,151, 11,174, 46, 47,176,117,197,253,110,207,174,235,249,189, 31,125,159, 28, 51,247,235, 7, 24, 3,141,177,252,225, 95,255,
+235,236,119, 27,166, 41, 48, 13, 35,179,186,166,245,142,222, 40,250,195,254, 17, 76,146, 50,195, 32, 99,210,182,109, 25,198,146,
+110, 85,130,116,246,135,158,174, 23, 17, 77,138, 80, 55, 51,174,157,231,229,203, 55, 60,220,223, 99, 43,225,157,199, 35,199, 89,
+ 61, 85, 80,159, 73, 16,159, 36,168,156,208,175, 37,120,192, 40,133, 85,178, 75,117,198,226,189, 19,241,145,213,232, 28, 81,113,
+ 36,135,158, 52, 41,208,246,212,140,146,101,207,164, 10, 97, 45,145,196, 71,158,197,251,170,210, 89,182,121,140,164, 88,148,235,
+ 97,132,208,147, 38,249, 8, 71,218, 91, 17,195,196, 88,132,113,229, 6,124,196, 19,159,178, 7, 10,134, 52, 68,113, 74,132, 80,
+148,171, 24,178,174,132, 20,230, 60,214,215, 24,223, 98,171,186,252,188,193,214, 13,206, 55,104,231, 49,174,236,194,143,164, 54,
+107, 81,214,136, 66,221,104,148, 61, 43,226,234, 41,221, 46,255,218, 54, 91,255,134,244,196,223,160,115,224,183,119, 41, 60, 38,
+221,150, 73, 64,136,220,126,243, 21,191,252,233,143,233,251,158,126, 72, 36,165,137, 9,108,233,194, 44, 18,195,238, 43,195, 56,
+ 6, 81,244,167, 71, 17,144, 60, 27, 80, 87,174, 28,114,129,164, 4, 73,122,232, 71, 82, 6,231,116, 17, 50,201,120,222, 88,185,
+236, 24, 37, 10,245, 30,177,180,237,118, 19,190, 50,116,195,136,177, 14, 69,146,203,122, 48, 76, 49,210, 15, 18, 82,210, 15, 34,
+174,203, 41, 51, 13, 35,243,121, 67,208, 6,163, 52,219,253,200,179,235, 57,195,216, 19, 98,230,243,239,125,206,155,183,183,180,
+237,140,110,127, 96,177, 92, 80,169, 76, 24, 7,222,189,126,197,199,159,126,202,253,237, 29,119,183,119,212,213,140,205,250, 65,
+148,243,206,138, 64, 50,140,204,154,150,245,195, 45,109,235,240, 94,243,238,237, 91,186,126, 68, 91, 75,221,206,217,118, 35,235,
+221,192, 56, 37, 62,122,126,131,171, 26,134, 41,156, 68, 84,215, 87, 87,212,149,161,246, 21,243,249,156,249, 98,129,247, 14,163,
+ 44,166,242,204, 47,150, 28,238, 14,116,187, 3,174,174,209, 89, 99, 85, 37, 34,184,148,177,222,209,168,150,110,232,153,250, 9,
+ 95,215, 76, 99,196,213, 13,237,229, 53,155,190,103, 54, 70,150,173,103,182, 88,177,126,184, 99,209,214,172, 86, 11,238,239, 30,
+104,155,138,113, 24,193, 25,153,120,149,213, 85, 10, 73,206, 41, 85,196, 90, 49, 49,159,207,216, 29, 36, 88,231,221,235, 55, 76,
+206, 50, 91,205,105, 47, 14,248,197, 28, 59,159, 99,155, 25,214,183,100, 91,161,173,151,179, 82, 31, 21,210,142,172, 43,180, 29,
+208,110, 68, 87, 45,166, 22,253, 74,238, 71,134,195,158,110,119, 32,236, 59,166, 65,112,215,135,253,129,238,112,160,239, 71,250,
+113,162,159, 34,253, 36, 29,119, 8,148,200, 84,201, 41,232,198,154,166,242, 56, 39,133, 93,146, 6,207, 80,226,199,143, 35, 36,
+135,116, 82,198,199, 28, 79,160, 23,173,205,137,173,114,140, 78, 37,229, 15,186,182, 78, 49,174, 39,208,218, 99,225, 21,203,119,
+233,198,207,168,172,167, 78, 61, 75,242,102,204,137, 20, 57,253,222,199, 49,254,185, 81,251, 52,169, 60, 75,137,203,197,245, 20,
+ 99,194,166,179,125,104,137,134,150,196,167, 92, 18,179, 52,143,197, 25,100,140,110,101,212, 37, 9, 91, 22, 99,180,236,163,202,
+191, 91,107,165,168, 27,115,218,117, 31, 5, 11, 71,163,125, 62, 67,206,166, 44, 47,136,158, 38, 9,126, 57,122, 22, 83,250,181,
+161, 33, 71,241,221,135,130, 68, 84,126,116, 55, 74,129,209,212,237,130,113,154,240, 5, 59,105,173, 5,173, 88, 44,151,120,107,
+153,215, 51,146,115,244, 65, 46, 23,160, 11, 27, 24,178,213, 56,101,177,218,210,212,150,139,165,103,181,112,132, 23,215,132, 41,
+161,149,103, 28, 38,134, 97, 68, 29, 58, 94,191,122,205, 15,126,240, 57, 87, 23,151,212,214,113,185, 90,224,140, 97,152,242,105,
+170,160,138,194,114, 12, 19, 15,187, 45,149, 82, 28,250, 1,239,107,110,110,158,177,217,127, 73,227, 28,173,181,204,150,115, 8,
+ 19,171,229,146,185, 86,124,126,125,141,127,241,156,118, 54,227,207,255,226,103,140,251, 3,117,161,137, 21,215, 39, 83, 76,244,
+163,136,144,170,170, 2,235, 33, 10,246, 87, 89, 3, 83,192,123,201, 9, 55,218,146,208, 28,186,158,166,106,248,228,147, 23,188,
+122,253,134,144,182, 37,151,254, 12,140,242, 33, 95, 20,233, 4,138,144, 53, 76, 46,211, 27,112, 86,227, 75, 62,180,179, 22,103,
+ 29, 85,109,169,156, 66, 19,100, 26, 48,236, 72,157,149, 93, 93,174,209,177, 96,126,179, 20,110, 82,144, 93, 87, 16,203, 88,142,
+ 65,178,222, 99, 32,199,177,248, 95,167,146, 55, 46,202,244, 28,197,150,150, 99, 25,169,159,118,237,185,100,142, 63,238,168, 36,
+151, 32, 51,133, 68,204, 48, 69, 33,181,137,184,203,161,171, 22,235,252,105,132,110,124,141,171,228, 67,215,115,140,175,176, 78,
+138,189,113,210,185,107,107,203, 51, 33, 99,116, 85,158, 5,101, 10,200,226, 60, 54,246,131, 54,179,127,177, 12,128, 95,183,128,
+ 87, 57,147,198,158,215, 95,252,130,119,223,126,131, 41, 98,143, 97, 76, 56,107, 69,225,140,136, 57,141, 77,104,171,217,110, 71,
+166, 40,122,140,148, 31, 17,156,214, 40,170,198,179, 59, 28,164, 49,112,158,245,166, 35, 4, 9,243,176, 86,108,153, 99, 12, 52,
+117, 5, 49,162,201, 52,181,199, 26, 1,201, 24,231,233,186, 14, 95,123, 18, 6,149, 19,206, 73,132,111, 38,179, 89,239, 36,131,
+ 97, 72,132, 33, 98,156, 97, 28,133,114,102,181,161,109, 42,118,219,157,248,178, 67, 96, 28, 35,159,125,246, 41, 67,223,179,219,
+238,249,248,227, 23,116,189, 76,114,218,101,203,195,221, 91,172,134,105, 24,120,253,242, 37,109, 85,241,240,240, 64,101,101,109,
+ 96,173, 38,199,129,122,177,164,235, 55,132, 52,177, 90, 85,236,119, 59, 54,251, 29,190,170,153, 45,151, 60,236,122,118, 93,100,
+189, 61,240,252,227, 79,241, 77, 67,215, 75,114, 34, 4,110,174,159, 97, 85,100, 86,215,204, 42, 71, 91, 85, 37,236, 67,225,124,
+ 77,206,150,122, 54, 99,216, 78, 12, 57, 83,183, 11,118, 15,111,200, 86, 86,147,227, 36, 69,124, 76,129,186,105,216,222, 63,224,
+125,195,226,226, 2,211,204, 64, 59,188,173,121,115,191,149,203,166,177, 44,175,159,179,126,251,138,113, 28, 89, 44, 23,220,222,
+222,161, 80, 52,181,163,239, 7,134, 62,226,171,138, 48, 5, 82,140,212, 77,205,190,235,209, 70,244, 63, 90, 41,250, 67,199,110,
+156, 88,127,249, 21,237,162,101,121,189, 98,113,177, 98,182, 90,210,204,102, 52,179, 5,122,182, 34,251, 6,108, 5,198,145,181,
+149, 24, 95,237, 72,198,160,180,195,184,136,114, 21,218,214,224, 6,185, 4, 24, 95,194,171, 70,134,125, 96,236,123,186, 78, 10,
+251,216, 15,132, 41, 18, 67, 38,133,204, 16, 39,185,248,231, 64,136, 35,253, 56, 80,251,170,236,212, 37, 14,246, 88, 11,227,201,
+197,149, 79,100, 82,142,103,242,147, 93,121,126,106,201, 62, 81,240,212,211,139,193, 25,124, 45,159,129, 96,222,239,226,243, 89,
+248,205,147,216,214,227,248,189, 76,200,211,217,142,252,113, 2,167,201, 5,169,171,206,110,222,143,140,250,199, 11,133,125,178,
+227, 84, 71,187,137, 72,248,157, 81, 88,163,113,214,149,194, 46,255,110, 75, 33, 55, 70,151, 2, 47,130, 30,163, 21,206, 90,249,
+255,214, 96,236,113,159,174,203, 77,233,177,211,142, 79, 8,116, 9, 29,226, 83, 42, 79,126, 68,201,254,186,211,239, 67,137, 54,
+ 71,130, 79, 58,225, 84,229,161, 88, 93,220,112, 56, 28,196,190, 53,175,184,156, 47,232,194,200,184,221,156,236,104,126,121,197,
+237,122,203,148,192,107,208,214,148,104, 64, 73,146, 26,186, 30,106,197, 39, 47,174,249,222,103,207,249,236,147,143,249,118,223,
+209,117, 19, 57, 31,176,206, 17,178, 98, 56, 28,232,119,123,186,237, 22,167, 20,243,170,194, 27,141, 10,147,220,183, 78, 44,123,
+ 67,204, 2,219, 25, 1,101, 52,243,229, 18,107, 44, 78, 27,129, 37,164,128,243,134,155,103,215,188,123,243,142, 23,207,110,176,
+ 90,211, 86, 21,105, 24,249,193, 39,159,130,202, 28,182, 59,170,186,162,174,106,185, 21,198,200, 88, 34, 86, 67, 12, 24, 99,113,
+222, 51, 30,130, 8,240,140,198, 24,135, 86,162, 98, 62,116, 35, 97, 26,217,108, 54,104, 39, 35,226,120,144, 34,110,222, 43, 57,
+ 42,203, 8,253, 92,124, 46,175,179,140, 89,173,150,247,144,247, 78, 10,219,217,123,196, 25,141,179, 96,153,196,191, 58,108, 9,
+157, 33,232,132,202, 1, 19,103, 40, 39,131,254,148, 38, 41,232, 81, 58,243, 56,246,168,116,204, 23, 31,203,142,124,144,127, 47,
+182, 52,217,143,201,231, 75,222,120,217, 63, 37,185, 45,231,147,152, 45, 73, 38,122, 17,181, 69, 20, 89, 89,208, 14,188,199, 87,
+173,140,208, 93,141,245, 51,172,175,164, 27,175,164,168,219,170,198,249, 26,237, 60,218, 57,249,126, 58, 43,221,183, 53,178, 19,
+ 87, 26, 91, 38, 92,226,161,125, 79,172,175,158,150,239, 99,162, 32,255, 2,125,255,127,217, 63, 58, 67,191,221,240,205,207,127,
+202,184,223,209,148, 11,122, 78, 65, 60,232,229,114,221,212, 26, 99, 18,218, 42, 14, 67, 36, 68, 75, 82,134,148, 70,140, 5,103,
+ 21,198,200,196, 96,140,153,182,242, 28,186,145,113,146,117,198,172,178, 69, 3, 18,229, 50,104, 52, 70,101, 20, 17,231, 76,193,
+233,194, 52, 76,104,173, 25,134,192,229,229,140,238,112,144, 75,163,209, 2,254,153, 38,166, 35,218, 24,117, 18,199, 89,163, 25,
+187, 14,171,165, 59,187,185, 89,176,217,110,152,205, 23,196,156,184,187, 91,179, 92, 44, 72, 49,226,172, 38,134,145,177,135,254,
+176, 99,214,206,216, 61,172, 9, 83,120,188,232,196, 9, 87, 85,132, 56,178, 88, 46, 81, 76,196, 60,113,125,179,162,235, 14,108,
+ 54, 59, 81,210,175, 46,216,117, 35,235,253,192,195,182,103,182,188, 98,177,186, 96,223, 29, 24, 71,177,185,126,252,241, 51,114,
+ 28,152, 53,115,150, 77, 77,227,229, 66,152,115, 70, 91,139,173, 43, 82, 54,204,150, 51, 14,235, 14, 63,155,193,168, 24,110, 51,
+198, 74, 96,207,253,253, 61,207, 62,250,136,168, 18,132, 40, 19,215,113,164,219,119, 84,171,200,110,138, 92, 93,222,176, 93,175,
+121,247,176, 67, 95, 93, 16, 66,192, 54, 51,246,251, 13,227, 52, 81, 55, 13, 41, 4,134,174,163,242, 21, 93, 63, 48,102, 17,157,
+ 57,231,196,137, 83, 70,252,162, 89, 72,244,125, 15,104,110,223,221,241,246,221, 59,234, 55, 53,139,139, 5, 87, 87,151, 92, 94,
+ 44, 89, 93, 92,226,174,246, 84,179, 5,174,153,161,171, 22, 92, 69, 54,158,172, 13,218, 56,193, 28,167, 68,214, 14,171, 43,178,
+ 29, 80,198,163,140,197,106, 9,135, 33, 71,134, 97,192,108,148,188, 54, 67,199, 56, 4, 33, 61, 70,113, 21,185,210,204,116,227,
+ 68, 66, 49,142, 9, 99,198,179, 9, 49, 37,120,236,168, 59, 74, 50,189, 43,133, 87,184, 50,143,221,185, 57,213,181,227, 26,185,
+132,192,104,253,216, 65,159,130,208, 78,108,185,199, 41,151, 42,160,177, 39, 65,104,233,241,252,231,177, 41,213,199,162,156, 51,
+ 42, 27,244, 73, 90,255,104, 23, 63,218, 78,159,212,189,147, 87, 93, 46,215,164,132,149, 78, 90, 21, 80,229, 49,172, 94,138,138,
+117, 10,239, 13,214,216,210,117, 75,144,189, 43, 93,136,228, 96,155, 83,247, 46,135,186, 20,117,109, 75, 49, 55,230,244,141, 58,
+222, 44, 82, 9,160, 56,174,255,210, 17,211,167,158, 50,187,159,198,103,170,223, 74,116, 37, 37, 72,188,143,185,164, 2,205, 22,
+ 43,124, 51, 71, 27,143, 10,129,190, 31,185,188,244, 40,103, 57,244, 35,141,183, 84,245,130,122,126,193, 92,213, 28,134, 73, 4,
+ 17, 57, 1,146,184,213,119, 7,193, 31,198,128,213,154,237,102,203,167,159,255,144, 47,246,239, 88,111,214, 56,115,193,216, 29,
+208,218, 17,199,129,219, 87,175, 80,227, 68, 30, 70,210,208,163, 98,196, 25,195,152,142,162,149, 92,246,229, 26,107, 28, 22, 81,
+ 77,207,230,115,194, 20, 80, 25,154,186, 65, 91, 67, 55,246,160, 53,247,187, 45,255,242,191,250,215, 48,206,128,211,108, 54,107,
+ 86,139,149,216,212,172, 33, 20,246,123, 85,205,100,244,222, 11,222,116,154, 6, 92,221, 66, 78,120,103,104,154,154,156,160, 59,
+244,108, 55, 27,182,187, 61,235,205,142,126, 24,233,134, 17,109, 60,205,226, 74, 86, 5,103,118, 11, 37, 91,242,226,227, 20,202,
+152, 42,158,227, 99,209,182, 90,201, 1,174,205, 99, 33,119,178,166, 49,186,104, 45, 76,150,162, 30, 59, 24,118,196, 78, 17,116,
+ 64,229, 9,166, 30,156, 38, 37, 33,222, 81,126,204, 81, 66, 83,114, 20,200, 75,138, 19, 41,140,210,205,159,165,200,229,227,141,
+248,200, 85,136,199,116, 64,185, 93, 75, 65, 47,251,126, 42, 80, 26, 83, 53, 56,223, 74,183, 93,213,104, 95, 97,143, 69,221, 87,
+101,188, 94,126,238, 43,180,117, 24,231,139,221, 71,157,137,218, 10,228,229, 73,132,172,122, 15, 73,203,175,247,184, 42,126,147,
+ 3,255, 95, 32,186,239,140, 43,157, 38,182,239,222,240, 15,255,243,191,139,158, 6, 48,150,110, 16,177, 83,152, 34, 6,104, 42,
+141,183,224, 43,199,254, 16, 24, 35, 36,165, 9, 49, 21, 10,154,168, 48, 42,239,233,186,129,170,170,100,146, 52, 5,134, 16,101,
+196,108,140, 76,197, 82,164,246,134, 20, 70, 46, 46,230,228, 48,225,154,154,245,122,139,214,134, 67, 55,145,162, 20,179,190,235,
+105, 42,143, 81,146, 65, 97,173,103, 26, 70, 66, 76, 56,107,168,156, 99, 44,162,198, 20, 19, 97,232, 73, 4,150,139,154,174, 59,
+ 80, 85, 53,139,229,146,187,187,123,246,251, 3,223,251,222,167,244,125,135,214,112,121,177,228,176,123, 0, 37,250,138,135,245,
+134,186,170,185,189,219,156,206,168,105, 28,105,230, 21,218, 64, 32,112,113,121,193, 20, 2,235,221, 1,227, 42,218,153,196,150,
+222,239,123,214,219, 14, 95,181,124,254,217,103, 60, 60,108, 24,166, 30, 99, 21,243,213, 28,173, 35,222, 27,230,109,131,115,150,
+182,173,169, 42, 89,215,248,166,198,183, 13, 42, 24,234, 38,201,123,179, 77,140,113,100,177,186,100,183,190,167,169, 43, 82,218,
+129, 70, 28, 59,211, 1,173,164,248, 77,211,200,126,187, 35, 91,203,237,237, 45,151, 23,151,236, 54,107,190,122,245,154, 31,125,
+254, 41,145,196, 97, 10,212,217,226,173,236,144,141, 51, 36, 37,197, 39,132,137,148, 11,157, 77,149,215,176, 36,182,121,231, 25,
+250,158,106,117,201,240,176,102,127, 56, 16, 31,214,216, 55,239, 88, 46,222,112,125,185,226,250,230,154,213, 71, 55, 44,175, 46,
+105,151, 43,234,249, 2,221,204, 48,199,226,174, 29, 90, 89,148, 54, 40,101, 72,202,128, 46,240, 43, 3, 90, 69,218,130, 21, 78,
+192, 24, 35,221, 48,210, 15, 35, 67, 56,144,146, 38,155,130, 79, 46, 83,225,132, 98,152,142, 10,156,233,196, 95, 57, 54,145,211,
+ 20,232,167,137, 97,156, 74, 3,144,202, 42, 89, 73,243, 99, 45,222, 57,234,186,166,209,230, 68,102, 60,214, 60,101,236, 89,151,
+252, 52,209,237, 84,123, 50, 31,132,210,164, 52,157,146,217,212,153,115,236,184,138, 62,106,204,158, 4,181, 41,117,226, 60, 60,
+ 13,161,225, 9,154, 86,105, 37,227,247,202, 25,241,241, 1, 86,107,204,105, 76, 42,133,219,123,125, 82, 16, 74,151,101, 31, 71,
+240, 71,145,143,209,216,162, 42,181, 86, 46, 1,218, 60,170,211,207,193,247,177,176,191,245,217, 46,241,145, 65,146, 11,107,252,
+187, 89,181,143,118,233,191,164,184, 75, 48,246,163, 95, 16, 69,221,206, 65,121, 22,139, 25,173,211,216, 12,117,211, 48,246, 29,
+179,197,138, 89, 61,227,249,205, 39, 12,174, 37, 87, 17,125,232,217, 31, 14,244,251, 53, 97, 28, 32, 12,188,123,247,134,186,241,
+ 56, 91, 49,141,137,135,251, 61,174,186, 21,161,157, 86,164, 56,146,163, 71,167, 64,158, 6,190,253,242,151,196,205, 43,110,191,
+253,134, 23,215,215, 92, 95,174,216,188,187,231,132, 64, 56,238, 73,114, 70,105,209, 21,236,118, 59,222,188,125,139,115,142,245,
+118,203,245,245,141,136,104,154,150,113,138, 88,239,248,241, 79,127,138,183,154, 79, 62,126, 65,158, 2,179, 28,113, 74, 40, 71,
+181,171, 37,132,195, 58,172,177,164, 16,177, 90, 51,116, 61,179, 89, 98, 8, 19,251,253,129,237,110,203,221,221, 3,219,237,158,
+ 16, 83, 9,198, 24, 75, 20,102,226,208,237,169,154, 37,139,182, 38,246, 69,204, 70,150, 52, 42,101,200,197,119,175,142,249,224,
+ 74,220, 5,214,104,236,233,225, 56, 94,250,244,233, 66, 40,226, 73,117,250,115, 84,236,201,147, 35,245, 48, 81,172,101,110, 67,
+208,138,112,234,200,143,158,112, 25,181, 31,125,164, 18, 65,152,206, 84,241,162,132, 63, 37, 4,150,212, 50, 81,173,103,129,207,
+ 40,131, 50, 21,202,123,148,245,120,215, 96,125,133,171,102,210,121, 31,139,186,171,112, 85, 93,196,108,130, 89,181, 78, 80,171,
+198,149, 3,200, 30,181, 34,143,144,165, 83,216,253, 57,242, 81,253,246,137,117,255,131,248,231, 12,163,123, 20,114,254,242, 47,
+126,204,235, 47,126,201,220, 26,246, 83, 20, 23, 64, 17, 70,218,242,250,199, 16,208,106,198,253,122, 15, 74, 19,115, 36,228,132,
+ 47, 19, 62,173,100,138,119,232, 7,180, 82,165,168, 71,208,138,170,173, 78, 73,120,186, 36, 16, 42,192, 26,133, 83, 34, 84,218,
+236, 58,148,241,244, 67, 47, 43, 63, 13, 99, 55,112, 49,247,244,253,132, 81,176,156,207,217,109, 14,114,176,231,136,209, 89, 44,
+157, 86,196, 86,174,178,228,160,168,189,229,112, 24,153,173,102,244,195,200,221, 67,207,229, 69,139,181, 26,114,160,178,158,105,
+232,216,237, 55, 34,140, 12,146,183,189,190,223,145,179, 38, 70, 25,235,199, 28,169,106,139,178, 80, 53, 53,202, 24,238,238, 31,
+ 48,126,134,245, 53, 67, 86,236,251,129,237, 97,196, 84, 13,223,251,222,247,121,247,246, 29, 97, 26,112,222,160,200,204,106, 71,
+ 78,129,155,103,207,105,154,134,118,214,226,188,120,180,125,237, 10, 37,208,131, 49, 84,110,194,215, 21,211, 16,152, 50,204, 86,
+151,188,123,243,134,217,108, 70, 59,159,177,221,108,184,126,254, 17, 15,135,142, 68,194, 87, 2,167,241,243,150,182,185,228,254,
+ 97, 67,154,183, 50,121,156, 34, 95,191,122,205,199,215, 43,124, 51, 35,140, 19, 58, 91,136,129,203,171, 27,238,238,110,209,206,
+ 48, 13, 1, 84, 98, 26, 39,106,223,162,181,156,223,211, 52, 97,141, 57,217, 70, 21,242,154,238,135,129, 49, 70,222,222,111,121,
+245,246,129,235, 55,107,110,238,238,120,246,252,134,171,155,107, 86,151,151, 52,171, 21,213, 98,137,109, 90,148,111,200,166, 66,
+155, 10,148,197, 88, 71, 54, 70,240,201, 70, 21, 71,132,161,214,134,165,210, 36, 37,132,183,186,169,104,111,239,185,127,216, 50,
+ 78, 81,236,206,186,248,210, 93,209, 98, 96, 78,182,217, 84, 82, 67,213, 52, 17,179, 34, 71, 72, 42, 49, 70, 1,216,200, 25, 38,
+231, 83,194,160, 12, 56, 36,224,202, 90,225, 69,212,222,225, 10,114, 89,240,233,233, 9,244,229, 17,215, 26,191,163,110,207,167,
+192,116,251,212,216,171, 30, 21,244,145,167,217,234, 41,229,115,252, 6,233, 55,193,190,202,170, 38,198,128,109,188, 23,177, 14,
+200,184,176,220, 82,188,243, 56,103,240,149,220,120,165,176, 75,151, 46,221,252,163,106,247,216,169, 29,185,238, 70, 63, 10,167,
+ 84,177,196, 29, 83,183,142, 31,178,175,120,191, 27,127,234, 81,126, 66,163,251, 53,234,221, 39, 9, 94,231, 8, 90, 93, 84,251,
+198,210,180, 51,156,175,248,193, 15,126,128, 39, 17,250,142,186,169, 81, 85,133, 27, 38, 62,126,254, 41, 77,179,228, 62,122, 73,
+213, 26, 21, 32,185,205, 97, 16, 17,215, 24,122,230,243, 25,151, 87, 87,124,252,209,247, 97,191,230,226,234, 25,195,215,175, 25,
+195, 64,154, 12, 83,127, 32,213, 51, 14,155, 7,198,109,230,245, 47,254, 9, 47,174, 47, 9, 85,197,223,252,195,127,133, 95,253,
+ 39,127, 15,149,213, 41,109, 78, 29,195,107,138,178,241,112,232,136,151,137, 56, 12,140, 49, 96,157,229,163,155, 23,180, 77,203,
+ 31,255,201,159,136, 53, 3,131,119,158, 24, 18,239,222,221, 98,173,227,217,179,103,104, 5,239,222,189,195, 25, 79,211,100,156,
+147,125,212,212, 15,236, 55, 91,124,213,138,144, 36,136, 69, 75, 14, 79, 69, 8,233,164,105,151, 60,110,177,238, 13, 67,199,204,
+ 5,185,216,101, 87,138,167, 58,141,133,142,222,121,113,138,100,180, 81,114, 41, 44,239, 13,173,180,252, 55,163,139, 35, 66,161,
+117, 46,162,185,140, 86, 17,149, 39,226,184,103, 82, 73,198,233,227,129,169, 36,148,137,111, 52, 22,156,163, 76, 10,200,145,115,
+252,124, 44, 74,209,152, 51, 36, 25,181,134,148,136,177, 56,172,181,220,170,181, 54, 50, 58,119, 21,182,106, 68,165,238, 26,180,
+107, 48,190,194,213, 2,212,144,189,185,116,225,198,185, 66,146, 42,132, 42, 35, 42,112, 93, 14, 26,117, 76, 81,211,231,152, 28,
+245,235, 77,226,239,191,111,243,119,133,135,239, 23,215,127,150, 37,255,175, 22,143,251,248,181, 76,125,207, 79,254,201,159,162,
+195,128,211,162,254, 87,202, 16, 67, 46,175,183, 66,169,128,183,154,245,122,132,164,152,114, 36,102, 77, 86,199, 3, 79,209,212,
+ 13,195, 48, 74,119, 55, 78,140, 49, 17, 82,102, 54,175,229,251,138, 20, 75, 93,144,213, 85, 37, 20,178,170,169,216,245, 3, 83,
+ 86, 80,160, 36,195, 24, 88, 56, 65, 24, 91,149,217,238, 71,154,198, 49, 76,145, 97,140, 84, 78, 46,142, 57, 39, 82, 20, 97, 83,
+ 51,119,144, 18,139,182, 98,187,217,114,115,115, 73, 36,115,255,112, 0, 20, 77, 93, 9,140, 38, 4,102, 23, 75,250,161, 43, 64,
+ 15,197, 24, 18,218,120,246,135, 29,222, 91, 48,150,126,152,120,254,241, 2,227, 53,182,178, 84,117,205,187,187, 7,124, 61, 67,
+ 25,143,169,107, 54,219, 29,235, 67,143,111,230,124,242,241, 39,220,190,121, 75,154, 2,222, 26,194,216,241,226,227,231, 88, 3,
+ 87,215,151,212,245,163, 51,194, 85,242,123,214,179, 22, 95,213,194,151, 72,150,198, 79,248,202,179, 97, 79, 86,154, 16, 35,117,
+211,146,146,164,228,189,124,245,138,249,252, 82, 86, 76, 68, 66,154,136, 41,208,109,215,212,174,226,106, 57,231,238,237, 43, 62,
+254,236,123,124,189,219,243,242,213,107, 86,179,134, 74,137,167,124,140, 48,111,103,188,124,253,150,170,178,196, 56,146,114, 42,
+194,225,132,206,176, 88, 44,152, 98,150, 96,151, 98,213,210, 49,162,202,164,113,140,138,110,146,136,220,205, 46,240,176, 30,184,
+187,187,231,238,245, 61, 47, 62,122,224,197,139,103, 92,220, 92,179,184,238,104, 22, 75,220, 98, 46,154, 21,159,200,182, 70,105,
+ 39, 36, 55,231,193, 40,114, 89,255, 26,231,241, 85, 69, 93, 85, 44, 23,115,110,174, 47,185,191,123,224,221,187, 59,214, 27,241,
+172,135,194, 75,208,199,245,239,153,219, 42,165, 84, 52, 20, 35,170, 55, 4, 45,171,210, 41,138, 47,252,100, 75, 37,161,116,192,
+ 38,251,232,240,209,162, 31,115,222, 81, 85, 21,206, 73,211, 34,103,208, 83,251, 89, 78,194,116,200, 31, 72,105,203, 39,130,234,
+119,185,238, 57,231, 71, 87, 81, 74,146,154, 26,211,153,205,247,136,152,253,240,115,157, 75, 99, 30,162,198, 86,149, 59,117,234,
+ 70,107,156,147,162, 94,121, 41,234, 85,117,252,185,123,210,153,107,253,184,123,208,168, 34,234, 40, 34, 54, 30,233,113,153,199,
+220,247, 35, 16, 48, 31,211,159,242,249, 23,247, 52,106,239, 73, 16,215,119, 10,247,111, 62,140, 68, 40, 39, 10,121,180,193,249,
+154,217,108,206,199, 31, 63,103, 86, 89,238,222,109,120,120,120, 0, 18, 55,215, 75, 86,139, 57, 57,215,132, 41, 17,202, 8, 68,
+ 41, 85, 88,224, 3,195,254,129, 20, 19,135, 16, 49,117,205,118,189,101, 97, 12,243,143, 63,102,255, 71,127, 68, 30, 7, 70, 11,
+195, 97,135, 85,134, 47,214, 91,110,223,188,230,219, 95,254,148,198, 38,126,244,135,191,207,255,234,127,241, 63,227,199, 95,125,
+203,159,253,252, 11, 2,143, 66, 41,111, 13, 51, 87, 97,180, 98,182,152, 97,157,231,219,111,191,161,246, 21, 77, 85,227,189,231,
+231,191,248, 57,155,237,150,223,255,221, 31,225,171,138,113,232,121,243,238, 22,173, 45,191,250,246, 21,198,215,212, 85, 69, 55,
+140, 80, 41, 33,117, 77, 30,215,204, 25, 6,121, 48, 33,149, 29,143,236,131,140,214, 52, 85,205, 52, 5,172,182,104, 21, 24,194,
+128,179,142,186, 93, 49,101,195, 52, 29,152,121, 67, 21, 31, 61,195,154,120,186,253, 30, 47,106,178, 94,161,236,156,142, 63, 47,
+123,246,227,135,210,133,228,123, 36, 59, 69, 66, 28,201, 99, 38,165,192, 52,149,226,107,212, 41,189,233, 20,205, 90,246,248, 41,
+ 75,112, 80, 72, 89,108,101,145,211,200, 10,100,108,167,109,133,174,164, 19, 55,174, 28,148,174, 70,123,233,202,141,171,202, 72,
+ 93, 20,234,214, 57, 76,117,212,128, 88,116, 89, 29,157, 56,207,250,200, 94, 56,203, 51, 62, 35,188,228,247,139,121, 86,191,177,
+ 11, 63,209, 89,223,203, 55,248,238,187, 56,255, 51,104,185,249,176,237,237, 55,124,122, 49,138,158, 48,187,227,246,129,127,252,
+ 15,254, 30,149,210,132, 32, 93, 78, 74,170,116,210,226,157,119,206,144,148,101,183,235,201, 70,186,248,120,140, 79, 46,110, 15,
+109, 12,253, 36,180,185,148, 50,113,138, 56, 3,171, 89, 35,145,195, 41,224,140,236, 4, 43,107, 73, 41, 18,130,194,186, 21,187,
+187,151,104,173, 56, 12, 1,140, 70,133, 8, 49,211, 84, 86,118,237,128,175, 26,198, 73, 46,166, 74,201,175,143, 33, 97,200,180,
+149, 69, 21,136,210,190, 31, 88, 46,103,140,113, 36,161,184,191,223,241,201,199, 51,150,203, 25,187,221,150,202, 57,114,134,195,
+126,207, 56, 36,114,214,244,227, 64,223, 71, 22,179,138,126, 28, 25,251,137,213,101, 77,213, 24,134, 48,113,189,122,198,187,219,
+ 7, 40,154,140,170,153,113,183,125, 96,187,221, 49,111,231, 92, 95, 94,243,242,235,111, 75,243,163, 25,134, 3, 47, 62,186,198,
+ 87,150,217,188,102, 54,111,105, 27,121,134,189,181, 68, 50,151, 23,151,178,234, 49, 86,132,172, 25,156, 53,180,109,133,210,199,
+ 44,248, 61, 85,213,210,119,219,146, 78,151,185,123,245,146,106,209,240,176,223,112,177, 92, 80, 87, 21,135,237,134,172, 20,139,
+229, 37,243,170, 97,251,240, 64, 91,215,196,113,224, 23, 95,124,201,239,255,238, 15,153,166,142,195,102, 75,229, 47,241, 85,133,
+ 53, 37,200, 73, 37,180,177,162, 79,209,138,249,124,206,253,122, 83,130,168,228,189,212,117, 18,129, 27,142,113,220, 25, 34, 90,
+ 82,235,134,145,105,154,216,247, 19, 15,219, 3,183,119, 27,158, 63,127,224,217,139, 13,151, 87, 87,204,174,150, 84,243, 57,213,
+108,129,105,230,232,234, 40,168, 51,160,197,246, 41,164, 58,135,241, 21,166,170,168, 22,115,218,139, 5,171,103,215, 92,127,244,
+156,237,122,199,250,126,195,102,189,165,239, 39, 66,148, 40, 84, 93, 70,242, 71,194,228, 56, 77,162, 7, 81,144,212, 72, 74,129,
+ 24,236, 25, 69,174,164,185, 41, 78,141,231,113,213,136,166, 0,144, 52, 85, 37,147,107, 85,226, 80, 83,153, 26, 30,153, 25,143,
+185,237, 79,225,108, 57, 39, 84, 76,143, 28, 21,138,235,166,252,191, 99, 92,121, 42,150,241,227,164, 57,113, 38,172,227, 17,234,
+118, 30,108,150,180, 8, 38, 49, 6,235,189,199,168,199,184, 85,239, 12,149,247,120,239,169,188,165,170,228,231,206,153, 51,159,
+249, 83, 1, 91, 46,136, 76,165,212, 41,198,245, 24, 44,114,164,145,229, 98,170, 73, 37, 1, 7,245, 94, 82, 84, 65, 92,158, 46,
+ 1,167, 47, 73,157, 18, 38,212, 95,218,137,200, 0, 95,147,208, 57,146,148,198,215, 45,206,215,204, 23,115,110,158,173,136,195,
+ 64,214,142, 41, 41,230,139, 25, 31, 61,191,164, 50,158,251,135,200,161,235, 36,215, 86, 69,226,180,167, 59, 60, 48,246, 59, 94,
+125,251, 13,203,139,143, 48,179, 57,237,114,201,219,183,111, 81, 23, 11, 58, 13,247,155, 53,244, 61, 67, 14,212,174,162,123,184,
+227,235, 47,190,162,169, 26,200,154,249,229, 71,252,206, 15,127,159, 79, 62,254,148,255,195,191,255,191,228, 39,255,199,255,147,
+216, 15, 68,254, 47,241,157, 90, 51,134,200,103,151,159,241,147,159,252, 4,167, 53,149,181,144, 19,111,238,110,185,219,174,121,
+254,236,154,143, 94, 60,167,239,122,126,250,211,159, 18, 82,228,243,207,191,199,207,126,249, 43,158, 61,255,136,251,135, 53,211,
+216,227,189,163, 27, 14,120,103, 65, 45,241, 85,133,210,229, 6, 88,232,122, 67, 1,102, 40, 45,110,133,152, 6,166,144, 32, 27,
+137,184,140, 90, 70, 84, 68, 42,155,169,149,228, 29,159,119,168,170,136, 42,149,210,216, 83, 34, 95, 89,167,104, 78, 35, 87,163,
+ 69, 13,175, 82, 9,246,200,241, 52,137,137, 41, 98,162,216,155, 76,144, 34, 26,202, 8, 45,157,226, 12,207,148,166, 81, 2, 67,
+ 82, 22,113,144, 50, 98,149,177, 86,148,233,218,215,210,109, 87, 13,182, 22,155,153,124, 52,104, 91, 97,156, 43, 29,121, 41,220,
+ 86,138,185,114,250,145, 80, 88, 84,178,231,171,161,252,158,181, 44,171,247, 24,246,143,104,168, 39,142,140,247,129, 77, 31,170,
+225,234,159,135,202,253,132,123,125,186,181, 87,239,101, 54,192,119,111,254,168,120, 90,128,169, 41,240,250,231, 63,225,246, 87,
+ 63,131,105, 64,101, 67,202,129,105, 74, 88, 37,130,199,202,201,161,183,221, 11,110, 58, 38,228, 96, 79, 25,175, 21, 78,139, 46,
+ 39,164, 81,246,236, 89,108, 96,125, 63,114,185,154, 97,114,164,117,150, 72, 98, 24, 7,154,202,160,117, 64, 17,209,166,161,159,
+162, 0, 94,210, 72,204,154, 16, 20, 70, 41,166, 33,112,241, 98,193,190,235, 65,121,166,152,136,211,136,210,153,170,182,196, 49,
+ 51,246,145,198,195,162,177,236,118, 29,203,231, 43, 98,210,248,186, 98,223,109,217,110, 3,215,151,245,105,119, 27,195,136,178,
+ 21, 49,100,118,219,142,118,182,226,246,238,158,113, 8, 96,100, 50,160, 84,166,109, 12,139, 85,195,148, 70,158,191,248,136,119,
+183, 15,116,125,160,153, 47,241,205,140,251,205,154,190, 59,112,181,186, 64,103,203,187,111, 95, 81,107,195, 20, 70,246, 99,207,
+247,190,255, 49,203,139, 57,174,118,204,102, 45,179, 89, 67,229, 29,141,119,120,235,168, 46,102,100, 99, 49, 86, 84,234,249,152,
+128,161, 34,222,105, 42,103, 8, 90, 17, 99,164,105, 26, 54, 15,183,248,166,162,109,106,238,223,190,226,179,203, 31, 97,188, 99,
+ 24, 3,207, 47, 86,188,185,125,199,184,127,160,170,103, 88, 83,177, 63,172,249,222,247,127,135,238,176, 99, 76,154, 95,125,251,
+138, 23, 55,151, 52,179,138,119,183,111,249,244,163,103,188,123,245,138, 23, 47, 62, 34,167, 45,187,221, 1,227, 44,251,190,227,
+202,104,198,113, 40, 46,145,137,186,174,138,102, 65, 17, 18,132,210, 77,106,165,136, 90, 50,207, 14, 57, 51, 29, 70,182,195,196,
+253,246,192,187,251, 7,158,189,189,229,249,179, 27,174,110, 46, 88, 93,175, 88, 94, 93, 82,175,150,216,217, 28, 91, 47, 81,190,
+145,231,219,104,208,158, 92,121,146,173,192,213,232,122,134,157, 45,168,167,145,217,117,199,245,225, 64,191,221,114,216,236, 88,
+ 63,108,217,110,247,236,187,129, 41,157, 98, 59, 73,197, 95,153, 74,152,146, 13, 19,222, 42,234,202, 97,202,212, 3, 36,107,195,
+151,102,214, 89, 35,234,251,178,210,139,197, 37, 19, 83, 70,151, 73,165,212, 81, 41,168,153, 4,201, 72,227,250,222, 88,254, 8,
+151, 17,251,229,163,199, 61,146, 31,109,112,101, 98,144,138,238, 74,105, 1, 76,157,166,163, 71, 64,237, 49, 52, 77, 63, 78,178,
+ 35, 18,222,164, 82,198, 86, 85,117,178,127, 25, 35,123, 47,231,220, 19,211,254,201,150,166, 31,227, 88,139, 42,255, 59, 52,177,
+ 39,233, 93,239,253,251, 63,175,168,206,167, 35,248,179, 64,138, 12,117, 93,227,156,149, 78, 79, 24, 39,236,118,123,172,117,212,
+117,133,175,107, 54,247,107,186,222,112, 56, 28,232, 58,201,203,158,186, 13,251,205, 3,247,239,110,105,151, 55,204,231, 43,218,
+229,130, 16, 18,191,124,245,146, 62, 14,252,141,102,198,171,175, 95,114, 88,239, 81,149,194,205,230, 60, 60,108,248,230, 87, 95,
+240,195, 31,253,136, 16, 71,126,239,247,127,151, 23, 47,190,199,188,189,230,111,254,225,223,226,147,155, 27,190,121,243,166,116,
+160,154,218,248,211,233,187, 94,175,185,190,190,102,183, 89,115,243,236, 25,179,182,101,152, 6,250, 67,199,239,255,206,143,216,
+109,119, 44, 23, 11,254,221,127,231,223,161, 31,122,178,210,124,249,229,175, 36,198,117, 26,241,206, 97,141, 17, 53, 40,162, 36,
+ 70,169, 18,215,217, 16,147, 98, 24, 71,170,170, 38,231,145,105,234,241, 85,133, 41,226, 37, 95,107,148, 54,140,221,132,138, 35,
+206, 38, 42,163,240, 37,226, 43,159, 88,237,199,238,188,196,233,170, 39,137,184,103,112,162,163,136, 68, 6, 5,137, 76,214, 5,
+ 63, 90, 20,169,201,148, 17, 94,161, 79,101, 53,157,250, 69,121,115,203, 24, 61, 43,141,214, 34, 82,179,174, 20,243, 18, 73,106,
+171, 10,235, 91,249,168,188, 88,205,188,199,249, 99, 33,247,162,241,176,226,218, 80, 78,118, 98,202,148, 7,193,232,239,188,135,
+254,135,188,246,254,237,140,230,143,177,142,239,199, 66,190, 31,144,115, 62,108,200, 69,147, 18, 35,216, 20,249,234,103, 63,101,
+216,238,152,105, 75,119, 8, 88,235, 24,134,177,192, 60,228,242,150,146,176,238,181, 21,149, 58,230, 68, 47,192, 90,131,247,158,
+195,208,151,152,224,196, 56, 38,156,179,204,218,134,105, 26,203,206, 83,222, 19, 85, 37,208,153, 41, 4,124, 85,177,222,108,232,
+199,169, 92,182,101, 90,224,196,141, 74, 74,208,247, 19,243,185,199, 25, 75,183,219,209, 84,150, 56,133, 98, 95, 84, 44,231, 45,
+135,253, 64, 59,171,232,199, 61, 23, 87, 11,246,221,129, 24,173, 68,228,234, 64,229, 27,250,190,199, 24,249,187,190,123,247, 64,
+202,208, 15, 3, 49,203,168,185,173, 27,250,253,129,152, 21, 87,207,150, 28,134,129,155,143,111,184,189,223,112, 24, 38,234,102,
+ 65,213,204,120, 88,111,136, 41,113,181,188, 38,199,204, 97,119, 16, 93,203,208, 51,133,129, 31,124,255, 51,218, 69,141, 49,112,
+185, 90, 49, 95,205,105,235,154,166,170, 48,206,224,107, 79, 59,159,203,251,220, 75,132, 46, 74, 82,234,156,117,248,202, 51,155,
+181, 28, 30, 54,146,160, 86, 2,185, 98, 9, 95, 81, 10,214,247, 15,204,175, 86,220,189,189,101,217,204,168,235,154, 62, 69,182,
+187, 45, 33,194,242,226,130,219,187, 91,158,191,248,152, 55,111, 95,179,239, 14,116,195,130,198,121,146, 25,217, 30, 6,170,118,
+198,122,189,166,242,158, 93, 14,194,109, 8,242,186,185,178, 75,143, 33,138,173,173,235, 5,149, 92,194,114, 30,155, 91, 69, 42,
+175, 83, 44,244,199, 93,215, 51, 78, 3,219,253,142,187,245,150,235,187, 37, 55, 55, 87,220,124,116,224,226,230,192,108,181,162,
+ 89, 78,184,166,197, 85, 13,217,213, 34,112,214, 50, 5, 81,214,130,110,208,110,142, 9, 3,174,238, 73,237, 64, 59, 95,178,184,
+ 56,176,184,220,179,221,110,217,172,183,236,247,123,250, 67,207, 56, 6, 66, 22, 59,182,137,182,236,222, 61,202, 4,172, 69, 28,
+ 22, 41,161,180,228, 28, 24, 43,246, 74,173, 69,205, 62,197, 64,223, 15, 18,225,157, 51,195, 96,112,174, 88,185,141, 76, 63,101,
+205,168, 30,215,190,229, 2,113,252,241,196,129, 79,170, 48, 89, 10, 19, 35,137,114,253, 49, 15,254, 24, 93,162, 79,147,202, 19,
+208,139,199,108,247, 83, 81, 47, 53,217,106, 35,177,181, 39,245,123,121,162,245,217,248,244, 8, 82, 57,247,232,125, 88,169,251,
+155,131, 60,206,185,242,255,221,138,182,250,173, 62, 39,157, 5,192,128, 98, 54,155,227,156,135,156, 24,135,145,251,183,119,236,
+247,123,230,139, 57,206, 87,188,124,245,134,135,219, 13,155, 93,224,139,219, 13, 57, 38, 60,153,135,119,111,249,250,235,175,216,
+119, 7,254,237,191,243, 63, 37,247, 35, 87,203, 21, 41, 13,244, 10,246, 42,227,173,231,205, 55,175,185,127,251,142, 78, 7,214,
+ 70,243,236,250, 6, 69, 96, 28, 15,252,224, 71,223,103, 63, 28,152,178,231,179, 31,252, 1, 23,113,207,191,243,119,254, 45,254,
+175,255,183,255,123, 73,255, 54, 40, 44,253,216, 99,173,102,189, 94,139, 87, 23,184,189,187,197,106, 33,224,125,244,236,154,197,
+172,161,169, 26, 25, 43,150, 96,145, 67,215,243,163,239,127,143, 20, 35, 55, 55,215,172, 22, 11,194, 56, 62,193,209, 30,227,113,
+219,166,101, 8, 17,180,230,250,230,134,253,190,195,186, 3, 15,235, 13,190,146, 98,217, 15,129, 88,222,252, 85,138, 84, 86,225,
+173,194,199,226, 82, 56,223,247, 42,202, 34, 37, 21,107, 70,153,178,164, 92, 8,109,234,244,121,156, 71,231,234,199,254, 80,161,
+209,122, 18, 4,176, 54,100, 45,147, 30,180,160, 82,149,169, 48, 86,172, 99,198, 86,101,247, 86,225,189,236,194,171,186, 41, 2,
+ 55, 95,104,110, 21,206, 75,142,184,113,246,148, 35, 46,182, 20,121, 79,115, 98,167,151,137,145, 62,187,140,240,212,125,241, 63,
+202,130,126,190,202,202,249,212,161, 72, 94,194,209, 22,243, 97, 17, 95, 62,253, 90,249, 31,227,126,195, 79,254,248,143, 81,195,
+ 68, 10,138,113,202, 76,113,146,101,135, 61,226,125, 13, 93, 23,132, 4, 87,158,187, 41, 36,129, 13,149,131, 73, 0, 70,229,191,
+ 25, 75,119, 56,240,236,102, 9, 57,227,172, 37,132, 64,202,137,166, 17, 78,185, 51, 90,178,232,141,248,175, 99,204, 76,147,236,
+ 60, 99, 18,127,252,172,113,108,183,157, 4,187,132, 9,173, 36,193,208, 25, 67, 14,129, 20, 50,171,101, 37,129, 69, 42, 81, 85,
+ 25, 95, 25, 80,145,217,124,193, 55,223,188, 19, 15,184,147,176,152,148, 50,181,107,152,194,196,221,253,134,155,155, 25, 83, 84,
+ 12,195,132,241, 34,240,139, 9, 86, 87,115,134, 48, 82,205, 90,118,135,137,245,174,199,186, 6,215,180,172, 55, 59, 64, 81,187,
+138, 56, 68,194, 36, 2,190,126, 56,224,189,225,243,239,125, 94,118,182,137,171,235,107,150,171, 57,179, 89,139,182, 26,235,197,
+ 70, 92,207,100,218,228,219,153, 20,116, 45,148, 70,141,194, 87, 25,231, 3, 85, 83,161,141,162,106, 42,214,187, 45,174, 4,172,
+ 88, 45,182,202,187,119,111, 65,195,172,105,120,123,251,150,231, 47, 62,166, 91,175,137,122,100,159,182, 52,243, 57,218, 40,230,
+139, 5,247,235, 7,154,166,229,219, 87,175,249,252,211, 79,208, 85,195,187, 7, 1, 97,237,182,247, 84,222, 81,121, 71,127,232,
+ 8, 33,210,247,189, 68,117, 31,195,144,200,116,125, 7,202, 19, 74,154, 36, 5,233,125,132,108,161,149, 64, 85,142,176,177, 41,
+ 51,197,145,195,112,203,195,122,203,253,237,154,187,251, 45,207, 94, 92,115,245,236,138,171,235, 45,179,197,156,217, 98,137,106,
+102,152, 74,244, 47,202, 86,100,229,192,120, 48, 94,236,112,174, 66,217, 30,229,156, 0,121,106,143,109, 61,245,204,115, 88, 59,
+ 54, 15, 27,233,220,163, 48, 43, 66, 8, 5,123,161,201, 24,140,117, 56, 35, 0, 33,163, 18, 70,139, 62, 72, 23,129,231, 17,181,
+125, 40,226,219, 67,201, 11,112,206,226,172, 76, 77,142,211, 19, 95,196,180, 39,208,218, 17, 80, 83, 80,180,226,101,167, 0,114,
+194, 9, 70,115,114,154,156, 69,205, 42,173,201,156,219,217,164, 9,164,172, 3,143, 69, 93,159, 50, 79,164, 86,199,148,176, 34,
+ 82,121, 68, 79, 42,245, 30,147,251,236,160, 83,239, 37,110,124,168,216,127,168,131,254,181,129, 48, 74,253, 83,157,158,239,143,
+ 52,159, 30, 75,199, 93,167,116,120,237,124, 46, 41,103, 41, 17,199,137,245,102,131, 47, 15,208,235,183,183,188,121,245, 53,251,
+237,142,187,135, 29,183,253,132, 55,142,121,211,224,156,102,191,219,243,135,127,243,111, 97, 93,141,183,158, 52, 14,194, 47,246,
+150,118,181, 98,220,119,252,236, 39, 63, 33,117, 61,179, 75, 41,168,155,237, 3, 87,207, 46,217,245, 91,126,116,185,160,158, 55,
+ 12, 74, 83, 93, 92,113,117,249, 9,255,251,255,224, 63,224, 63,252,127,253, 71,132, 41, 72, 6,117, 10,172,150, 75,198, 48,209,
+206,102,220, 63, 60, 48, 14, 61,147,214, 60,203,153, 31,254,224, 7,242,239,195,200, 71,215,207, 78, 95,229,110,191,227,221,219,
+183,180,109,139,213, 34, 82,211,103,148, 80,163,141, 88,210,180, 99,179,221,113, 51, 78, 24,239, 81, 33,161,181,145,203,142,111,
+ 72,104,166, 8,187,125,199, 20, 71,166, 40,225, 36, 38, 5,172, 74, 56,157,112,229,162, 25, 57,203,247, 61,197,181, 41, 25,221,
+151,110, 43, 63, 17,115,156,173,104,142,191, 71, 78,101, 15, 85, 46,157,250,104,137,116, 24, 39, 33, 15,198, 85, 98, 49,171,102,
+ 88, 55,195, 85, 13,190,158,161,155,133, 64, 95,188,132,158,248,186, 22,244,170,243, 40,111, 81,174,136,244,140, 57, 61,148,199,
+ 17,149, 81,103, 10,245,114,216, 40,245,107, 12,102,234, 95, 68, 51,173,254, 74, 23,221, 15,129,150, 62, 36,184, 57,217, 87,131,
+140,243,136,241, 84,192,141,119,143,201, 83, 57, 63,249, 50,207,233,128, 18, 23,153,216,222,190,225,229, 47,126,138, 75, 48,140,
+129,172,141,188, 55, 12, 88,113,245, 8,223, 61,100,156, 85,116, 49, 17,138, 6,194, 40, 85, 24, 5,186, 48,188, 77,217,193,102,
+234,202,208, 54, 13,227, 40,184,227,113, 24,112, 85, 37, 14,153, 16,101, 18, 83,114,211,149,150,247,215, 20, 33,196,128, 85, 10,
+103,197,101, 49, 77, 17, 91, 57, 17, 38,197, 64, 91,105,114,156,138,120, 47, 83, 57,205,126,123, 96, 57,151,144, 20, 83, 65, 38,
+114,119,127, 79, 72, 80, 89,161,219, 25,227, 49, 74,184, 5,125, 63,224,189,228, 49,108,119, 91,148,145,247,207, 16, 2,190,241,
+ 68, 21,203,148,199,114,191,222, 99,172,167,153,205,232,199, 81, 10, 90,148,195,223, 98,136, 99, 96, 26, 15, 92, 95, 95, 48, 95,
+205, 72, 4,154,166,230,226,234,130,229,106, 65,211, 84,248,202, 83,213, 21,198,121,218,182,197,213,173,132,251,180, 77,153, 80,
+153,211, 14, 85, 59,139,175, 28,205,172,198, 24, 77,211,212, 60,228,132,115,158, 93,183, 23,127,187,119,220,175, 31,136,133,221,
+ 30,114,162, 27, 58,114,138, 76, 67,143,171, 20,221, 97,203,234,242,134,221,126,207,199, 31,127,194,221,221, 29,205,124,193,195,
+118,199,213,229,138,108, 43, 30,246, 29,206, 56,250, 97, 16,149,123,206, 76,227,200,208,119, 44, 22,115,250,219, 59,180,209,132,
+105,196, 89, 75,156,146,116,194, 42,147,115, 41, 56, 37, 15, 64,144,172,199, 75, 96, 34,230, 72, 76, 48,141,137,105,232, 24,186,
+145,245,174,231,238,254,129,155,119,183,188,120,126,205,245,205, 5,151,215,151, 84,203, 57,245,124, 89, 60,238, 51,178,107,192,
+ 8,196, 70, 91,115, 26,105, 43, 5, 88,141,211, 89,228, 53, 78, 26, 18, 99, 37, 59, 33,231, 44,175, 81,156, 8, 97, 44, 86,189,
+132, 53, 6,111,132, 39,225, 76,150,206,219,233, 19,161, 45, 69, 65, 82,135, 73,220, 56,199, 6, 68, 43,133, 47, 96,173,202, 89,
+ 89, 85,123,153,114, 11, 65, 82,132,122,199, 70, 39,197, 76, 8,137, 41, 10,220, 44, 28, 73,118,103,171,111, 78, 2,115,125,194,
+175,163,207, 98,205,203,231,105, 35,245, 75,254, 46,146,251, 78,153,124,234, 88,224, 51,143,231,111, 62, 85,133,252, 27,148,118,
+ 79, 34, 52,127,157, 95,252, 55, 30, 90,234,159,219,217,121,188, 28,102,228,193,155,205,230, 24,109,137,211,200,253,237, 45,155,
+205, 3, 89, 25,110, 31,238,217,237,118,236,118, 91,214,247,111,217,108,215,100,101,200,245,140,201,104,198, 0,127,237,175,255,
+117,174,158,221, 16, 99,100,189,189,199,140,189,128, 83,230, 21,205,172,229,139,191,248, 11,134,221, 30,235, 45,182,170,184,190,
+122, 78,204, 19, 99, 28,104,231, 11,116,101, 89,221, 92, 49,191, 92,146, 12,100,109,248, 59,255,238,191,199,239,253,193, 31,240,
+167,127,242,167, 40,147, 49, 10, 66, 25, 99,205,102, 51,140, 49,188,123,243,154,139,229,146,139,203, 11,102,179, 25,203, 89, 43,
+ 73,107, 33,156, 34, 86,251,193,242,252,230,134,203,203, 11,140,177, 5, 60, 83,177, 99, 71, 74,137,170,192, 81,172,115,120,239,
+ 9, 49,178,219,108,216,108,246, 76,163,140,210,250, 97,194, 58, 79,211,182,100,109,137,218,240,250,237, 59, 17,150,196, 81,216,
+236, 26,244, 73,204, 81,248,195, 41, 23, 16,147,122, 84,101, 30,119,223,231, 74,205, 92, 70,238,197,110,150, 74,167,117,124,163,
+203,184,179,162, 54, 66,146,242, 77,139,107, 90,124, 61,195,214, 51, 92,189, 40, 73,102, 45,190,153, 99,219, 89, 33,185,249,194,
+ 79, 47, 29,185, 49, 40, 39,188,116,153, 46,157,187, 39,206, 46, 23,234, 3,170,209,252, 63,162,254,251, 55, 60, 83, 79,166, 98,
+ 49, 74, 72,205, 24, 72, 33,138,120, 71,107,116, 74,224, 69,205,127,234, 0,206, 60,175, 20,193, 97, 74,153, 28, 3,111,190,250,
+146,245,235,151,216,156, 56,196, 68, 31,101,190,100,173,236,222,173,113,164, 81, 2,150, 36,222, 86,212,196, 90, 43, 42,103, 80,
+ 89, 68,116,219, 97,160,106, 28,149,115,236,182, 7, 46, 46,151, 98,145,212,154,105,148,117,139,117,150,110,183,167,174, 42,226,
+ 20,168,231, 45,227, 56, 18,146,248,204,141,177,130, 62, 45,209,170, 93,215, 97,173, 76, 9,150, 87, 30,171, 51,202,106,226, 36,
+ 88,225,182,118, 76,195,128, 81,138,166,117,212,181, 67, 59,205,237,253,154, 97,202,248,170, 34, 5, 81,162,119,135, 3, 23,171,
+ 25, 97, 74,172,215, 91,170,202,113, 56,116, 69, 96, 10,195, 20, 49,214, 96, 43,199, 16, 38, 46, 46, 87,108,182, 82,208,219,217,
+156,144, 97,156, 2, 83,223, 99,181,130,144,232,135,192,106,181,228,234,147, 27,166, 60,145,117, 98,117,113,193,108, 57,103,117,
+185, 98, 62,111,241,206, 83,213,242,140,214, 77, 75, 53,159, 99,235, 10, 93, 85, 40,227, 30,181, 71, 74,132,170, 86,105,234,166,
+162,105, 42,170,198, 23, 96, 76,205,208, 31, 78, 26, 21, 95,121,188,177, 76, 93, 79, 54,154,186,109,185,187,191,227,122,177,162,
+239, 7,162,134, 48,181, 76, 99, 15,123,205,106,185,192, 26,203,245,229, 53, 63,251,249, 79,185,186,188,196,250,150,205,221, 91,
+158, 93,204,217,247, 29,149,149,137,203, 52,142,236,182, 91,230,139, 21,222, 59, 98, 8, 2,132, 49, 53, 83, 55,202,247, 52,101,
+ 1,166,100, 69, 34, 17,242, 99, 64, 73, 76,177,248,176,245, 41,125, 44,149,255, 62,196, 61,135,126, 96,189,222,114,119,251,192,
+179,155, 11,158,191,184,230,242,102,201,234, 82, 60,238,213,124,129,105, 22,232,186, 69,185, 74,198,241,136,203, 70, 41, 71,214,
+197,126, 91,198,210, 86, 11, 61,211, 56,139,245, 98, 11, 76,100,134,161, 39,198, 1,210,132, 54, 98,221,110,188,165,169, 13,222,
+138, 24, 14,117, 92, 43, 5,134,113,100, 26,167, 50, 46,143,132, 16,132, 83, 96, 52,195,160,232,140, 46,226,114,135,175, 69,104,
+238,156,112, 6,140,214, 37, 94, 62,150,112,173,227, 94, 62,202,172,242,120,201, 70, 86,159,198, 90, 41,222,198, 22,238,197,145,
+127, 97,206,146, 73, 31,139,189, 58,211,167,201, 52, 46, 98,143,100, 27, 72,239,117,221,249,215, 30, 44, 74,253, 38, 75, 25,191,
+246,208,225, 76, 49,253,244, 47,243, 87,213, 1,229, 15,172, 3,212, 83, 92,151, 82, 88,235,104,154, 25,195, 48, 16,115,228,203,
+ 47,127, 73,204,145,151,175,223,240,139, 47,190,230,246,110, 75,219, 52, 76,211,129,119,111,190, 97, 81, 59, 94,124,246, 59,116,
+125,228,217,103,191,195,234,226,138,177,223,147,166, 3, 93,191,193,246, 3,213,172,101,222,212,172,102, 51,254,195,255,243,255,
+ 5,163,145,192,131,126,192,245, 61,139, 69,205,162,174,153, 95, 8,195,125, 8, 19, 95,124,249, 83,150, 87, 23,124,244,233,103,
+204,151, 11,254,253,255,249,255,134,127,242, 39,127, 70, 78, 1, 44,236, 14, 59,177,170,236,119,228, 24, 9, 57, 83, 85,190,164,
+194, 13,180,203, 5, 38, 11, 13,169,235,247,196, 40,249,193, 55, 55,215, 40, 5,117, 93, 81,249, 74,138,164,115,194, 44, 47, 29,
+154, 42, 99,182,170,170, 24, 99, 18, 14,129,171,200, 89,227,135,137,144, 50, 73, 89,194, 97,192,249,138,207, 63,255,156,237,102,
+203,246,237,158,170,246,132,176, 71,199, 64, 74, 74,236, 98, 41,156,156, 11, 34,234, 16, 37,186, 4, 28, 29,139,250,249,190,232,
+ 49,238,240, 84,208, 51,104, 37,118, 73,237, 12,218, 53, 84,237,146,217, 98, 73, 61, 95,210,206, 87,184,102,134,169,230,152,122,
+ 38, 98,199,170, 70, 87, 13,206, 59, 25, 85,150, 81,151, 58,238,118,173, 92, 88, 31, 81,193,234,201,148, 9, 85, 88, 66,239, 69,
+149,242,155, 69,232,127,245,164,179,255, 30, 11,254, 9, 55, 57, 78,196,195,192,120,232, 24,187,158,156, 51,174,242,228, 16,113,
+109, 77,246,162,149, 81,199,111, 24, 39,182, 37,133,223, 76,158, 70,126,241,147, 31,227, 83,102, 59, 6,134, 0,202,123,244, 20,
+176, 54, 98,108,198, 40,205, 20, 38,180, 50,114,104,137, 84, 8,103, 68,204,102,143,225, 77,133, 96, 88,162,169,101,151, 62, 10,
+115,160,235,122,156,183,248,170, 98,191,221, 98,173, 99, 10, 16, 99, 16,140,106,140, 69,180,169, 33, 67, 93, 25,177, 95,134, 76,
+ 44,175,153, 51, 6,149, 34,211, 48, 10, 5, 83,131,183,154, 93, 63,114,113,225,168,106,249,196,221,126, 32, 37, 77, 8, 17, 99,
+ 19,202, 8, 88,166,170, 77,129,209,204, 64, 69,182,251,158,166,117,140, 83, 0,165, 25, 67,102,177,170, 25,166,145,213,245, 74,
+ 18,215,172,161,106, 90,172,117,236,186,142, 97, 28,209, 36,210,148,104,156,227,217,245,115,180, 81, 36, 21,105, 26, 79,179,152,
+209, 46,231, 92, 92, 95, 51, 91,204,169, 43, 71, 93,214, 69,117, 45,186, 16, 83, 85,248,182, 69,251,170, 48,210, 31,113,165, 90,
+ 9,216,200, 87,142,186,169, 89,173, 86,220,237,123,102,179, 25,125,183,199, 90, 75, 72, 35,206,104,218,166,102, 56,244,216, 89,
+ 67, 63,245, 40,163, 72,161, 32,149,199,200,238, 1, 46, 47, 47, 25,250, 61,155,135,123, 46, 47,150,188,121,243,138,155,155, 43,
+190,125,245,146,231,215, 55,216,170, 97,189, 61, 48,175,100, 90, 48,134,137,186,241,108,183, 91, 22,139, 21, 49,132, 19, 48, 44,
+166,136,117, 6, 29, 74,130,102, 22,222,190, 78,138,172, 18, 42, 69,162, 86,146, 98, 88,154,197,227,229,255,152, 46, 18, 99,102,
+236,133,231,190,239, 70, 30, 54, 59,222,221, 61,240,236,106,201,179,103,215, 92, 63, 47, 0,155, 85,135,155,207,177,117,131,241,
+ 13,202,122,180,182, 36,165, 73,198,160,241,101, 52, 45,197, 79, 57,139,118,186,188,199, 28,109, 93, 81, 59,139,189,179,108, 54,
+ 59, 82,138, 56,167,241,149,165,105, 60,117,229,241, 94, 46, 4, 41,101,134,105,100, 24, 12,195,104, 37,199,125,156, 4, 35,157,
+ 36, 56,102, 40, 71,138,140,228, 61,245, 96, 5,216,102,109, 33,105,218,114,246,148, 40,219, 24,138, 85, 77, 46, 30,198, 9,130,
+ 92,107,139,118, 86,132,188,198, 22,152,142,150,196,198,179,176, 39,206, 10,249,209, 93,134,146, 38,234, 88,228,173,156, 5,137,
+ 15,180,229,127,169, 39,252, 55,117,234,191,185, 16, 63,205,212,254,103,218,185,228, 76, 70,188,180,190,174,208, 90,115,216,111,
+232, 54,247,124,252,226,138,119,247,239,248,211, 63,253, 51, 94,124,242, 61,254,141,127,243,239, 48, 78,129,221,246,158,111,191,
+185,100,251,230, 21,219,205,150,127,233,111,252, 33,171,103,159,176,221,110, 25,118, 27,214,239,190, 97,187,123,192,199,204,204,
+125,204,205,229, 5, 97, 24,248,211,255,246,143,153,198, 30, 29, 43,118, 41,115,227, 43, 76, 93, 99, 43,203,139,143, 63,193, 86,
+ 53,219,195,158, 38, 91,126,245,179,191, 64, 39,197,116,245,140,191,245,175,254,141,211,190,105,156, 38, 64,159, 70, 50,235,135,
+123,102, 77, 83,232,110, 3, 83, 76,108,119, 59,154,170,166,219,237,101,124, 89, 87,204,218, 57,149,115,220,221,222, 22,206,186,
+ 97, 28,197, 62, 18, 99,162,170, 43,177, 93,148,113,234, 48, 12, 50,234,155,132,181,127, 56, 12, 82,100,179,132, 9, 56,231,217,
+ 30, 54,160, 52,171,213, 5, 75,175,160,255,150, 56, 5,134, 48, 18,147,145, 91,119, 22, 31, 89, 78,249, 44,177, 44,151,196,183,
+ 99,214,239, 81,233, 94, 44, 31, 89,226, 74, 99, 42,118, 41, 36,111,219, 84,134,108,156, 16,221,154,150,118,177, 98,113,113,205,
+124,121,129,107,196,191,106,170, 86, 82,207, 92,133,118, 5,197,170,149,224, 88,141, 22,150,250,153, 56, 79,189, 39,252,146, 22,
+146,194,149, 63, 70,156,129, 86,249, 49, 49,176, 36,147,253,211,213,238,252,223,159,170,238,189,191,112, 74,137, 48, 78,164,190,
+ 99,220,110,217,222, 63,112,216,110, 81, 25,234, 89, 75,179, 92,208,196, 57,186,174,113,222, 61,166, 79, 41, 85, 40,124, 98,158,
+143, 49,176,185,127, 7,211, 72,154, 2,195, 16,137,165,171, 16,168,137, 69, 49, 49, 14, 35,113,202,160, 53, 33,103,166, 34,198,
+147, 93,186,116,233, 33, 78, 56, 3,206, 90,166,113, 98,181,154, 75,162,152, 82, 12,163,208,181,154,182, 97,183,219,163,148, 98,
+ 28, 39,234, 34,150, 83,206, 19,131,136,237,186, 62, 20,181,178,231,208, 77,104, 45,211,162,186,114,228, 16,200, 90,242, 38,180,
+ 74, 24,173, 25,199, 64,229, 13, 77,235, 48, 86, 58,238,253,110,164, 31, 3,205, 76, 10,116, 78,137,125, 23,169,219, 22,178, 20,
+206,113,140,100,244,233,226,188,221, 71, 46,175,231,116,195, 72, 61,107,200,192, 24, 3,203,229, 37,206,214,108,247,123, 17,136,
+ 77, 17,239, 12,171,217, 18,149, 19,227,216,115,121,125,129,171, 12,214, 91, 22, 23, 75, 46,159,221,208,204,151,204, 22, 45,144,
+ 36,187,189, 21, 27,171,173, 42,148,115,104, 39, 69, 73,214, 67,250,148, 93,129,210,130,105, 69, 83,215,158,229,114,206,195,235,
+183,212, 77,131,214,154,186,174,217,239,197,213, 98,148,226, 48,116,144, 46, 8,211,132,213,142, 97, 26, 9,211,128, 85,158,126,
+191,225,238,237, 43,170,118,201,125, 42, 19,147, 97,224,242, 98,201,159,255,248, 39, 60,127,246, 12,109, 45,251,237,134,182,154,
+ 49,132, 32,171, 19, 35, 22,194,152, 98, 17, 35,202,190, 25, 43, 30,114,194, 78, 58,211,152,139,107,164, 36, 5,151, 80, 38,125,
+ 74, 36, 59,243,125, 40, 93, 44, 92,146, 14, 58, 69, 69, 26, 18, 99,232,216,239,123,182,119, 59,238,222,109,121,126,187,225,250,
+249, 21, 87,207,175, 89, 92, 94, 80,207, 23,248,197, 66,138,123,213, 10,153, 78,107,114, 41,130,162,157,209, 88, 39,144,180,202,
+137,200,176,109, 27,218,121,195,108, 37,162,230,195,254, 32, 43, 31, 35,226, 55, 95,121,218,198,225,141, 52, 46,213,104, 25,188,
+ 99, 24, 71,250,126,196, 90,205,161,159, 24,114,146,243,175, 56,114,200, 9,109, 19,253, 32,120,117,115,178,127,155,211,217,116,
+204, 65,231,152,161,226, 29,149, 22,247,141,117, 22,235,107,124,185,232,201,250,208, 60, 34,166,213, 83, 53,114,126, 82,166, 37,
+ 41,241,168, 43,179,239, 91,106, 50,144,142,254,242, 39, 29, 54, 31, 40,232,233,131, 7,154, 8, 12,222, 11, 99, 81, 71,147, 90,
+ 49,183,169, 72,201,213,148, 68, 47,245,129, 2,175, 74,126,116, 86, 39, 27,213,249,159,117, 20,224, 61, 13,115,209, 39,139,157,
+183,142, 60,245,244,187, 59,140,154,120,123,255,138, 87,175, 95,243,175,254,245,191,134,117, 53,175, 94,253,146,245,102,203,183,
+ 47, 95,114,121,117,205,199,191,255,175,115,249,236, 19,178,118, 12,221,129,195,253, 91, 30, 94,126,201,195,183, 95,242,230, 97,
+195,231,223,255, 62, 84,142,121, 93,243,179,127,242,167,124,251,238, 21,159,127,254, 25,202, 90, 76, 85,203,225, 22, 52,151,151,
+ 87,212,213,146,126,154,232,251, 1,210,150,215, 47,191, 97, 49, 95,209,206, 26, 62,254,228,134,197,197,130,183,247,235, 2,159,
+ 73,104, 20, 99, 8, 24,231,113,117,203,253,122, 77, 54,142,166,157,177,104, 26,192, 9,190,182,236,143, 46, 86, 11, 14,135, 3,
+205,124,134,181,238,148, 80, 52,140, 83, 9,213,241,194,218,142,241,116,179, 27,199,137,172,160,239, 71,161, 66,133, 40, 55,228,
+ 65, 84,205,139,197,138,245,102,199,219,183,119,204,204,132, 27, 6,226,216,145, 84,102,159,196,142,164,131,196, 21, 30,115,197,
+ 5,187, 42, 31,161, 8, 65,142,201,123, 71,181,166,208,156, 68, 40, 19,143,241,189, 26,114, 54,104,237,112,190,162,110, 91,234,
+249,140,106, 49,163,185, 88,226,103, 75, 76,213,144,173, 43,108,117, 67,182, 71,239,248,209,206, 1, 89,231, 39, 23,196,252, 62,
+ 89, 56,137,244,254, 36,224, 75, 69,244,103, 20,217, 9, 76, 70,159, 82,144,180, 92, 10,149,250, 32,206,245,253, 68,192,227,142,
+240,172,159,226, 60,177, 78,157, 90,146,239,250,196,179,202, 69, 98,120,246,108,229,163, 7, 94,149,247,112, 62,165, 13,230,227,
+207,207,110, 31,234,152,145, 80,214, 27, 42, 70,114, 63, 50,237, 59,186,237,134,253,195, 27,182,119,239,136, 83, 79,213,204, 88,
+236,175, 72,221, 21,213,124, 73,174,107,241, 0,107, 83,240,202,114, 41, 35, 74, 18,222,244,250, 37,116, 3,155, 62,210,105, 75,
+208,137, 74,141, 88,151, 81,214,138,216,104, 24,113, 74, 49, 41,216,163,152,200,212, 40,170,148,113, 94, 49, 41,217, 91,206,173,
+ 99,102, 28,111,167, 3,243,197, 28,171, 45,253, 56,178,235, 7,234,182,197, 52, 51,186,251, 59,156, 22,177, 80, 68,145,148, 33,
+132, 76, 12, 9,133, 33,134, 64,237, 53,206,104,186, 41,210,182,142, 48, 6, 98,232,241,126, 69,138,195, 41, 49,174,169, 45,235,
+205,192,205,205, 92,224, 44,185,227,126,179, 33, 98,240, 85, 13,122,196,146, 25, 38,176,181,226, 48, 70, 46, 22, 11,214,187, 61,
+ 93, 63,177, 88,205, 68,165, 29, 50,237,194,177, 31, 15,204, 86, 11,176,134,253,212,115,249,236, 25, 33,194,110, 24, 65, 27,140,
+142, 44, 86, 45,179,186,166, 63, 28,208, 10,150,215,115, 76, 99, 48,149, 99,117,125,197,242,226,138,217,114,193,108,190, 0,173,
+169,219,154,170,174, 49, 85, 85,200,133, 22,227, 93,129,144, 8,115, 95,165,146,112,103,203,153,166,193,228, 76,101, 20,139,229,
+ 28,229, 45,158, 86, 68, 98, 74, 65,215, 49,145,209, 85, 77,222,108,137,125, 39,200,101, 15,219, 16,184,110, 23,108, 31,238,105,
+231, 45,195,230, 29,109,229, 24, 14,145,205,186,166,114,134,113,127,203,213,197,140,215,175, 95,177, 90, 93,136, 24,112,191, 99,
+ 94,105, 42, 99,216,236, 59,178, 18,240,149,202,114, 81, 27,178, 98,204,130,175, 34,130,202,233,113,245,150,133,248,152,148, 38,
+169,179,179,191,236, 71, 53, 26,149,227, 41, 94,250,232,122,201, 89,220, 23, 99, 72, 28,198, 61,183,135,158, 55,155, 29, 55,119,
+247,124,116,247,192,243,103,151, 92, 93, 93,208, 94, 45,105, 47, 46,112, 77,139,173,103,224,106,146,113,168,242, 97,180, 34, 89,
+ 7,166, 70, 85, 51, 84,181,195,183, 59,170,214,209, 46, 91,110,182, 43, 14,155, 29,227,190,147,241,122,150,125,186,116,248, 14,
+ 77,198,107,112,222,224,172,126,212,232,160,229,235, 10, 81,244, 30, 33, 17, 82, 66, 7,232, 85,194,106, 78,197,252, 9, 42,186,
+224,169,197,229,145,105,148,193,121,201, 24,177,206, 82,213, 45,190,105, 11, 47,163, 20,114,163,207, 70,133,250, 12,135,254, 94,
+243,156, 5,134,163,116, 62,219,169,255,230, 38,224, 44,100,229,195,130,157,223, 20,180,242,151,181, 26,138,167,123,129, 99, 1,
+ 63,125, 67,242,111,238,214,159, 76, 9,138,170, 58, 43, 9,117, 24, 14, 7,182,235, 7,140,142,220,175,239,249,107,255,242,223,
+164,174, 91,118,251, 3,109,221,208, 54,151,124,246,217,239,209, 52, 45, 65, 65, 63, 78, 76,195,150,221,195, 3,187,251, 55,188,
+126,245, 37,247,111, 95,178,188,184,225, 98,181,224,250,230, 10, 72,252,248, 39, 63,102,177,186,160,154,205, 49,198,226,219,250,
+196, 66,119,206, 1,138,253,238, 64, 63, 78, 56,239,228, 54,159, 18,243,217, 12,215, 58,154,166,129,251,181,228,213, 43, 69, 63,
+141,164,125,241, 47,174,215, 92,174, 46,208, 74,241,229,175,190,228, 71,223,255, 1,206,153,226, 43,215,167,100,187,148, 19,219,
+251, 13,214, 30, 73, 71,238,116,187,139, 5,221,120,204,235, 62,133,177,148, 75, 87,152, 4,146, 48, 77, 19, 33, 6, 50,250, 20,
+218,227,189,103, 60,108,216,237,118, 16, 37,116,226,144, 2, 33,101, 73, 85, 11, 81,194, 53, 98, 42, 35,249,199, 44,224,148,121,
+ 34,142, 75, 20,238,118, 46,128,135,130,253,156, 98, 32,171,140, 45,226,159,170,174,168,219,134,102, 62,167,154,205,168,230, 51,
+ 65, 72,106, 83,172,103,250,113, 92,172, 16, 50,159, 82,143, 49,173,138, 39,180, 57,206,114, 5, 8,137, 28, 69,132,149,203,220,
+ 79, 25,141,201, 74, 98, 38, 53,103,201,105,234,105,132,249, 83,105,104,177,125,157,255, 33,186, 60,115,167,252,164, 82,108, 57,
+129, 43,242,175,153,239, 43,193, 16,157, 63, 96,167,184,227, 82,225, 37,229,172, 60,196, 71,214,180, 28, 14,249,233,175, 41, 66,
+208,190,239,232, 54, 91,246, 15, 15,236,215, 27,186,221,142, 56, 13, 76, 83,144,195, 8, 45, 25,217,117,133,113, 22,138, 32, 45,
+133,169,132, 99, 40,114, 10, 76,219, 13,187,135, 7,134,110,224,208, 5, 92,109,209, 10,234,218, 66,134,113, 8,168, 84,252,200,
+ 89, 66, 90,180,146,209,247, 9, 66,100, 13,113, 74, 88,103, 75,119, 98, 11,219,160,168,202,173,163,174, 27, 30,214, 59, 1,212,
+ 0,206, 58,134, 49,226,188,149,226,160, 96, 26,165,219,111,234,138,190, 31,241, 94,139, 46,100,140, 56,173,208, 5, 84,148,115,
+166,118,150, 48, 6,218,198,115,115,125,193,225,112, 32,101, 77, 12, 66,195,187,186,110,216,108, 70,246,219, 64, 93, 91, 82,212,
+ 84, 85, 37, 66,209,105,194,122,241, 95, 39, 5,202, 41, 34, 9,231, 61,214,203, 62,253,242,242,146,105,156, 48,218, 75,158,131,
+115, 44,102, 45, 41, 70,250,113,196,183,141,176,195,155,138,118, 49, 99,121,113,201,108,177, 96,177, 90,209,180, 51, 50,138,197,
+106,137,243,162,101, 49,174,236,141, 20, 39, 95, 50, 33, 23,121, 83,185,176,197, 92,238,138, 50, 85,210, 70,211,204, 26,102,243,
+ 25,227,174,167,170,107, 66,223, 83, 85, 21,195,152, 74, 90,160,227,176,223,227,151,115,166,105, 66, 41,195, 24, 2,174,242,132,
+105, 66,107,197,126,125,143,111, 87, 60,188,125,197,199, 31,191,224,225,118,131, 51,158,111,222,188,225,234,242,146,164, 97,189,
+221, 96,105,104,138, 93,118, 8,137,161, 23, 11, 44,221,129, 88,136,123,147, 42, 9,101, 41, 23,150,133,122, 79,215,242,221,179,
+ 63,103,158,240, 18, 84,126,252,241, 36,206,142,153, 97, 10,116,125,207,118,187,225,254,254,129,183,239, 46,120,254,236,154,171,
+231,151, 92, 61, 59, 48, 95, 93, 80,205,123,170,182,197,212, 53,198, 87,194,103, 87, 6,173, 44,217,149, 49, 54,182, 88, 96,231,
+216,182,167, 93,118, 76,151, 29,161, 19,219,112,223,203,123, 64, 44,183,242,181, 24, 37, 96, 23,107, 29,222, 43, 82, 54,196, 8,
+ 85,200,132,136, 8, 56,131, 4,203, 12,177, 39,166,240,152,251,240,157, 41,182,156, 17,206, 59, 98,174, 49,214,208,148,104, 86,
+ 99, 44,214, 9,119,223,186, 50,109, 48,250,148, 10, 7,249, 73, 28,235,251, 63, 30,121, 48, 74,165, 95, 95,212,207, 85, 68,239,
+ 43,225,127,155,189,249, 95,221,132,243, 93,181,252,111, 59,130,127,242,249,249,116,161,193, 24,205,225,176,135,156,120,251,230,
+ 21,127,240,251,127,192,191,245,175,255,109,140,245, 76, 33,209, 13,129, 49,100,214,155, 29,235,205,142, 67,183,101, 56,236,232,
+118, 27,222,124,243, 21,239,222,188,226,171,175,190,164,174, 43, 62,249,244, 99, 62,249,232, 57,139,249,140, 87,175, 94,243,171,
+ 95,125,141,114,142, 33,102,150,109,131,175, 28,139,249, 12,173, 50,202,192,253,253, 29,187,237, 1,235,107,250, 67,143,213, 53,
+111, 95,191,225,254,254, 14, 92,113,169, 43, 37,254, 77,196,204, 25, 99,196,148, 81,250,106,177,196,104, 77,183,223,178,219,239,
+ 9, 97,226,114,185, 32,101,197, 56,142,220, 63,108, 48, 70, 83,213,117, 17,245, 72, 1, 24, 7, 17,172, 48, 72,236,234,113,212,
+115,252, 30, 25, 99,168, 43,131, 70,118,227, 33, 69,116, 84, 76, 33, 18,114,164,174, 43,178, 51,140,131, 98,119,216,147,211, 64,
+138,129, 17, 67, 72,160,162, 4,102, 68,161,183,158, 70,235,199, 27, 54, 37,186,247, 56, 29, 72, 57, 75, 65,207,143,147, 26,165,
+228,193,119,206, 80, 55,158,217,124,198,242, 98,193, 98,185,164,153,205,241, 77,131,182,246,136,165, 43, 32,163,252,152, 92,116,
+124,237, 79,185,235, 69,169,122,182, 31, 87,200, 97, 24,167, 72,154, 2,177, 31,137,211, 36,225, 52,136, 71,221,199, 10,162, 35,
+ 59,243,168, 10, 63,231, 47,159,101, 18,156,162,103,149, 58,117,206,167,113,127, 62, 83,103,158,176,142,169, 96, 38,159,198, 45,
+ 62,229,188, 76,114,144,157,146, 9,211, 9, 57,169,202,175, 61, 61,118, 39, 63,171,100,203,231, 98,183, 81,199, 63, 47, 37,194,
+ 84, 70,226, 99, 64, 41, 67,221,204,197,226, 21, 35,198, 90,172,111, 48,198, 19,167, 76, 31, 7, 82, 62, 48,141, 3, 67,223,209,
+239,247, 12,135,142,169,140, 78,107, 53,241,240,238, 45,219,245, 6,149,193, 27, 77, 74, 17,165, 52, 97, 12,228, 32,151,230, 8,
+132,242,253,247, 10, 76,241,166,135, 24,240, 72,254,131,107,106,182,251, 3,179, 89,131,177,150,177, 31, 25,134,137,122, 38, 68,
+191,253,221, 3,115, 99, 81, 4,177,188,197,128, 43, 94,221,164, 68, 45, 93, 87,178,171,236,186,161,164,168,101, 84,146,244,183,
+ 20, 70,156,150, 11, 79, 83, 87,220,223, 13,252,240,119,111,152,198, 1,239, 12,175, 95,239, 9, 65,115,177,242,196, 56,208,119,
+137, 24, 69,240,103,141, 69, 1,251, 67, 79,213, 56,198, 16,176, 78,254,254, 73,129,173, 28,117,219,162,181,230,226,226,242,132,
+186, 5,196, 91,110, 31,243,182,155,249, 76, 46,167, 77,205,108, 46, 69,119,177, 92, 48, 95, 94,224,107,217,151,187,170,194,215,
+ 13,237,114,113, 82, 46, 11,171, 62, 63, 25,169,230,152,164,200,103,153,234, 72, 42,162,236, 97,117,229,240, 89, 49, 91,180,140,
+ 93,199,124, 49, 99, 51,142,180,179, 25, 73, 73,152,145,173, 60, 93,119,192,229, 92, 92, 4,153, 67,119,224, 98, 49,103,125,127,
+199,124,222,210,237, 54, 24,165, 25,167,196,190,210, 24, 50,222,104,230,149,231,229,215,191,226,114,181, 96,156, 70,134,224,200,
+147, 8, 26,199, 97,100, 28,122,218,182,133,245, 3,195, 24, 72,190,126,196,198,126,231, 2,171,158, 76,186, 30, 89,233,103,119,
+ 89, 85, 76,213,103, 36,181,116,124, 22,202, 32,108, 82,153,126, 26,217,247, 19,119,155, 3,111,238,182, 60,123,123,199,139,231,
+107,174,159, 95,115,113,117, 41,121,238, 75,121, 13,108,221,128,159, 73,215, 94, 66, 98, 76,101,136,198, 99, 76, 77,237, 59, 92,
+211,144,230,163, 96,185,187,142,225,176,103, 28, 7,134,174,103, 26, 6, 57, 59,114, 34,197,114,185,214, 18, 57,238,108, 98,242,
+ 25, 27, 34,198,136, 54, 35, 19, 79,162,186,120,140,117,125,175, 78,105, 37,184,217, 42, 6,129,220,120, 39,107,157,169, 46,223,
+151, 72, 38,200,126,221, 10, 17, 15,101,202,145,146, 80, 42, 62, 1,218, 28,241,183,231,206, 47,165,126, 77,167,126, 14,161,255,
+144,101, 70,169,255,238,203,192, 95,103,111, 83,239,229,204,254,211,168,223,211, 25, 95,190, 59,236,208, 42, 51,111, 27,126,255,
+ 95,250, 30,191,247,187, 47,112,206, 19, 19,244, 99,228,229,203,183, 84,182,162,219,190, 99,216,110,232,183, 27, 94,127,253, 5,
+ 63,255,233,143,185, 93,175,153, 82,230,226,250, 25, 23, 23, 23, 92, 44,231,196,113,228, 31,253,183,255,136,140,224, 48,251,125,
+ 71, 72,153, 69,172,201, 41,178, 88, 52, 24, 3,251,253,174, 40, 65,101,207,121, 68, 7,190,125,243,134,203,231,215,165,219,206,
+143,180, 28, 45, 5,208, 89,205,106,185, 18, 12,167, 54,124,244,226, 99, 94,191,249,150,183,111,122,118, 23, 43, 52,153, 89, 91,
+ 11, 62,210, 40,154, 70,146,220, 66, 74, 28,142, 62,247,210,221, 74,168,137, 40, 54,187,195,129, 41,201, 97, 22, 99,102, 24, 38,
+250, 97, 96, 26, 37,143, 60, 37, 24,134,137,205,118, 47,130,154,251,215, 76, 67, 79, 10,162,130, 31,146,116,243,148,110, 60,161,
+138, 58, 23,180,118, 37,212, 68, 14, 55,123,204, 32,214, 90,188,197, 81, 20,159, 71, 0,138, 53, 70,148,162,133,165, 92, 87, 30,
+239,228,166, 42,219,136, 72, 14, 2,213,224, 56,198, 66, 46, 64,143,182, 15,117, 70, 70, 59, 39, 10,230,199,164,163,152, 72,227,
+200,212, 15,132,253,150,177, 63, 72,151,162, 20,190,174, 32, 54,184,208,160,189, 71, 89, 43, 98,164,227,235, 81,224, 57, 57, 63,
+ 29,191,159,156, 33,229, 96, 82, 60,194, 54,114, 41,174,199,220,246,148, 74, 97,207,242,251, 40,173,158,112, 17, 85, 74,103, 58,
+ 16, 78,152,201, 84,254, 28,125,142, 92, 56, 27,105,230,156, 37,205,234, 56,174, 63,137, 19,197,133,128,173, 49,141, 19,111,111,
+150, 24,206, 35,195, 94,107, 43,100,193, 24,153,166,145, 62, 76,236,247, 19,235,187, 29,219,135, 7,186,190,195,232,204,210, 43,
+126,249,139, 47,164, 64, 40,249,186, 40,175,113, 28, 3, 68, 57,140, 67,146, 93,186, 82, 10,155,161,114, 86,166, 48, 36,140,210,
+ 36, 36, 22, 51,146, 78, 17,188,187,105, 66, 27, 1, 67,117,157, 48, 26,156, 6,173, 44, 49, 36,156, 85, 76, 83, 96,214,182, 60,
+236, 14, 0,180,141,147,233,147,214,164, 40,223, 27,171, 53,181,213, 56, 35,163,208,121,235,233,246, 19,215,215, 13,181,183,220,
+175, 55, 76, 83, 34,132,140, 82,134,170,182,220,173,119, 12, 99,102,182,168,200,102, 98,182,172,185, 93,111,153,207, 43,246,135,
+129,229,213,130,205,161, 35, 25,141,118,138,229,245, 37, 57, 37,170,186,129,172,104,155,150,105,156, 80, 10, 22,139, 57, 33, 69,
+134, 48,113,245,236, 25,245, 76,224, 71,109,219,210,180, 21,203,197,226, 84,196,235,153,116,229, 85, 35,107, 38, 74,218,151, 50,
+250,236, 18, 39, 36, 50,173,146,140,219, 83, 58, 35,105,150,145,143, 22,241,151, 73,138,197,106,206,250,254,158,197,114,206,230,
+254,158,202,214, 76, 72,224,142,245, 21,169, 63, 96,140, 97, 10, 1, 82,230, 48,245, 92, 92,172,164,139,223,237,169,235,138,110,
+183,198, 25,199,246,238, 13, 87, 55,207,136, 49, 80, 27,197,237,195, 29,139, 90, 94,175,205,118,195,220, 26,234,122, 46,211,207,
+190,163,106,196,134,151, 67, 32,100, 89, 29,166,227, 95, 51, 61,238,206,243,185,112, 54, 62, 82,214, 78,239,121,117, 54,229, 58,
+ 35, 50, 74,180, 87,241,182,199,199,197,237, 56, 37, 14, 67,199,174, 15,108, 30,182, 60,220,174,185,126,115,199,245,243, 11,174,
+159, 93,113,117,189,100,190,156, 81, 47,230,232,118, 41,185, 14,174, 6,227, 64, 21,122,164,113, 88, 7,218, 89,178,247,164,202,
+ 97,107,143,107, 61, 97, 24,152,186,142,225,112,224,176,219,211,231,158, 41, 8, 43, 33, 29,183,119, 39,157,131, 64,177,142, 11,
+184,152, 17, 39, 68,204,223, 9,122,209, 37,127,222, 27,185, 0,219, 97, 44,128, 55, 33,184, 86, 85,133,170, 44, 56,141,177, 6,
+167, 13,199,204,107,165,244, 89, 23,243,235, 53,107,199,127,236, 95,214,117,255,182,157,249,135,192, 51, 31,112,177,125,231,150,
+198,135, 96,149,234, 47,211,224,255, 38, 97,158,140, 34, 41,129, 14, 49, 6,134,254, 64,156,122, 22,115,139,247, 29, 23, 43, 17,
+163, 28, 14, 19,251,135,158,208, 29, 88,213, 35,239,194,158, 47,190,252, 25, 63,251,139, 31,179,217,238,200, 25,174, 86,151,252,
+224,123, 63,164,157,181,100, 18,191,252,226,151,124,243,242, 37,222, 85,160,193,186, 66, 25,154, 34,186,239, 49, 6, 30, 44, 92,
+ 94, 92, 17,179, 41, 41, 79, 66, 90,234,246, 7,116,201, 62,206,101,100,120, 60,192,143,135,115,140,145,217,108, 38, 86, 52,231,
+137, 49,112,113,113,201,171,238, 37,155,237, 86, 18,139,154,150,126, 12, 24,173,136,113,143, 49,134,113,156, 4,224,146, 3, 41,
+245, 52, 77,141,214,154,105, 28,121,184, 23, 27, 95,204,226, 33, 13, 33, 49, 78,129,253,161, 99, 24, 39, 14,221,192, 16, 18, 40,
+195,161, 27,136,221,134, 54,236,176, 58, 75, 94,184,134, 6,161,187,229,199, 59,225,137, 88, 38,160, 34,203, 49,198, 87,159, 96,
+ 46,138, 16, 51, 99,152,100,196,155,146,228,254, 26,137,104,205,113, 34, 76, 61,227,208,209,119,123,252, 97, 43,204,231,156, 4,
+ 56, 17,197,134,162,203,120,242, 8, 99,200,165,128,159,139,136, 52,160,146,122, 4,171,100, 81, 54,135, 97,100, 58,236, 25,183,
+247, 28,118,130,239,132,132,175,106,102,243, 37,205,124,129,169,103, 18,167,122, 18,181,148, 81,215,233,125,149, 31,121,205,249,
+177, 72, 75,161, 13, 20,179, 44,160, 11, 14, 50,159,252,167,191,126, 93, 37,113,138, 71, 91,224, 41,202,241,220,229,159, 31,183,
+245, 39,139,233,241,247, 76,246,113,196, 87,238, 55,218, 40,180, 3, 93, 27,156, 82, 39,210,159, 61, 94,140,202,106, 38,147, 75,
+ 81,159,168,198, 1,215,174,176,205, 10,223, 62,176,125,184, 99, 26,247,164,212,179,217, 30,176,214,131,149, 92,122,109,100,236,
+157,198,136,205, 18,188,147,140,248,197, 53, 26,173, 50,104,241,225,122,111, 4,228,100, 45,253, 56,224,154, 26,107,101,164, 62,
+ 14, 3,179,118,198,172,109,121,251,213, 75,170,218, 17, 38, 17,200,237,118, 3,243, 69, 37,218, 16,173,137, 33,210, 54, 2,248,
+216,238, 70, 42,103, 48, 74,209,239,122,218,218, 81, 25,217,227, 26, 5,181,151, 84,177,231,207, 47,216,108,118, 56,239,120, 88,
+ 63,176, 59,100,174,158,205,232, 67, 96,187, 15,216, 90,131,203,152,218,176, 27, 59,146,201, 76, 42,209, 94,180,116, 97, 4,107,
+112,206,209,206, 27,146, 18, 2, 91,156, 36, 67, 43,133,196,114,177,196, 56,207,238,208, 49, 95, 46,248,222,199, 63,148,245,155,
+115, 52,179, 25,214, 59,116,153,162,205, 22, 11, 50, 10, 91,215,204,151, 75,140,117, 50,129, 50, 22,101,205,227,228,231, 56,122,
+ 54, 90,244, 70, 89, 46,253,218,148, 32, 5, 37,187, 87,140, 88,184,114,206,180,203, 22,235, 52,245,106,129,210, 74,162, 90,117,
+203, 56, 5,170,166, 69, 31,182, 69,168,154, 36,158, 86,101, 14,125,135,243,158, 48,142,144, 96,234, 58,148,151,148,178,110,183,
+149,116,194, 28,177, 57, 10, 51, 62, 7,186,253, 30, 87, 87,212, 85, 43,145,199, 57, 48, 77, 35,174,170, 24,246, 19, 67, 10,140,
+ 83, 32, 34, 10,239, 84,186,245, 92, 86, 67, 49,199, 15,164,153,229, 39, 92, 8,117, 86,188,148,100,240,148,247,182,172, 30, 82,
+ 9,108,138,136,179,101,236, 35, 83, 63,210,117, 35,247,155, 61,183, 15, 15, 92,223,222,243,236,197, 37,215,151, 43, 46,174, 47,
+168, 47,246,180,243, 57, 85, 35, 98, 91,172, 71, 57, 95, 4,162, 50,226, 78,133,105,161,236, 81,125, 46,161, 58,214,251,146,208,
+184, 3,221, 17,247, 3, 99, 31,152,198, 73, 58,242, 41, 48,133,200, 20, 99, 17, 1, 23, 63,190,178,100,149, 31,191, 23,241, 40,
+226,145,245, 84, 74,162,153, 48,102, 56, 9,233,156,235,112,206,130, 45,177,205, 89, 65, 45,231,141, 49, 21, 74,167,147,242,253,
+215,113, 95,206,249, 50,246, 67,133,250, 67, 51,251,191, 74,145,255,205,160, 25,190,211,245,124, 32,146,229,113, 20,255, 87,236,
+212,211, 73, 80, 39,185,218, 49, 8, 48, 33, 77, 3, 99,127,192, 16, 49,106, 18,181,224,184, 37, 29,238,112, 83, 15,221, 45,235,
+111,127,204,183,191,252, 51,118,219, 3,218, 26, 62,121,246,130,223,249,225,239, 49,159,205,113,206,114,183, 94,243, 95,253,215,
+127, 68,211, 52, 12,211,196,172,109,105,170,138, 48,101,124,213,162, 24,185,184,184, 96, 49,175,112, 78,227,148,225,118,191,197,
+251,134, 89,219, 18, 99,100,187,217,178, 27,247,132,130,190, 60, 65,151, 16,118,240,124, 54, 67,105,205, 20, 2,187,253,142,218,
+ 90, 42,239,249,244,211, 79,185,187,187, 21,107,206,225,128,117,174,228, 47,123,148, 82,120,175,202, 5, 34, 82, 85, 53,117,213,
+224,172,147,131,161,128, 43, 84,204, 76, 83, 44,187,229, 72,206, 81, 44,106,200,232, 71, 62, 55,147, 85,162, 86,129,224, 53, 6,
+ 47,122,245,156,138, 86,193,150,245, 70, 81, 47, 40, 78,126, 76, 93, 82,251, 78,188,255, 66, 99, 50, 58, 51,169,130, 70,204, 98,
+109, 50, 64,156, 70,250,253,142,110,183,229, 80, 73,172,161,202,160,194, 68, 26,123,180,247,143, 99,248,163,234, 83, 61,218,155,
+228,166,124,236,226,143,209, 47,103,158,250, 16, 24,251,129,126,183,163, 91,223,177,223,175, 57,236,183,196, 48,225,170,138,110,
+190,101, 54, 95,137, 46,194,121,121,200,142,163,243, 36, 2, 30,217,241, 61,122,220, 31,227, 22,203,231, 29, 99, 22,181,136,206,
+148,113,104,237,138, 6, 64, 14,237, 99,209, 62,234, 29, 84,217,221, 39,108, 89, 29, 28,197,113,250,164,228, 63, 42,243,181, 42,
+112,137, 99,168, 67, 9,110, 48,216,211,207,133, 64,117,182,242, 0,217, 9, 31,255,191,126, 58,253, 18,222, 64,194,199, 76, 24,
+ 39,124, 59,167, 94, 92, 80, 47, 55,204, 46,174,233,247, 15, 60,188,252,130,106,190, 96,202,137,152, 51,149, 53,196,156, 80, 33,
+163,163, 68,237,142, 25,130,214, 12, 57, 82, 23, 22,124, 34,147,140,194,215,178,115,174,173, 99, 72, 9,235, 61,179,217,140,219,
+119,239,138, 47,187,102,179, 61, 72,246, 64,140,184,178,106,153, 98,194, 88, 77,234, 37, 12,164,118, 22,167, 19,222, 56, 82,234,
+ 69, 69, 63, 4,172, 86, 24, 21,241, 70, 46,206,179,214,178,221,141, 44, 87, 45, 74,105,198, 24,100,181, 48,129,171, 12,174,129,
+111,223,236, 81, 30,148,201, 84, 11, 75,202,137, 97, 26,169,231, 53,166, 18,223,183,169,229,194, 63,155,175, 80, 58,179, 90, 45,
+217,111,118, 24,109,112,206, 83, 85, 86, 70,244, 90,243,189, 31,254,128,229,229, 5,237,124,142,169, 60, 85,211,144,148,116, 90,
+199,100, 75,101, 45,139,229, 10, 87, 85,242, 12, 42,141,241, 94, 94,167,227,235, 76, 9,143, 58, 53, 70, 25, 76,146, 34,103,117,
+ 9, 25,145,245, 80,214,229,125, 98, 21,179,213,156,186,245,152, 73, 51,155,205, 24,198,128,169,106,124, 61, 81,213, 53,117,221,
+ 8,190,183,116,193,198, 26,246,221,158,213,108, 94,116, 42,242,254, 20,207,180,144,239, 18, 25,111, 29,179,218, 51,245, 29,214,
+104,166,126,100, 50,242,121, 10, 73, 34,115,222, 97,130,136,217,250, 50,122, 30,163,116,235, 9,117,182, 22,146,201,105, 38, 63,
+153,120,157, 46, 49,200, 26, 69, 25,125,138, 48, 62,229,146,171, 68,210, 71,129,104, 46, 23,148,210, 8,149,174,121, 76, 19,251,
+ 49,176, 62,116,220,173,119,188,187,219,240,252,230,146,103,207,246, 92, 93,207,185,184, 90, 49, 95, 46,168,102, 45,182,105, 49,
+117,131,242, 21,232, 90,158, 13,201,147, 46,150, 65,193,199,106,235, 5,212,229,157, 16, 44,171, 3,218,108, 9,113,195,225, 48,
+ 49, 76, 19,195, 48,150, 92,247,137,113, 12,146,246,150,213,169,225, 57,159, 36, 30, 57, 29,199, 99, 68,165,200, 88, 70,245,126,
+176, 28,186, 30,107,141,136,103, 99, 34,141,145, 24, 34,174, 10,120, 31,138,112,206, 60,230,170,124,168,198,170, 71,245,172,253,
+181,163,247,239,252,248, 79,207, 99,255,110,199,253,222,239,153, 63,200,166,121, 26,165,250, 87,250,115,143,249,223,138, 20,228,
+112,158,207,103,252,236,167,191,228, 7,223,255, 30, 38, 91,194,112, 96,115,127,207,230,221, 29,111, 95,222,242,245, 95,252, 5,
+253,253, 23, 92,175, 50,217,205,200,126,198, 71,159,124,130,177, 17,235, 34,219,237, 3,255,229,223,255, 7, 56,235, 88, 88, 79,
+206, 9,103, 52, 70, 3,206, 72, 81,207,134,135,135, 7, 46, 47, 62, 33,198,145,113,236, 24,134, 3,206, 85, 76, 33,208, 52, 70,
+196,105,227, 88,132,108, 79,181, 11, 70,105,218,166,197,121,207,187,183,111,217,172,215, 92, 45,151, 92,124,250, 41,135,195, 1,
+ 95,213, 60,127,246,156,174,219, 19, 82,194, 58, 79, 34,211, 31, 14, 92,172,174,216,237,247,228,156,105,218,153, 36, 45, 21,126,
+127,221, 52,244,195,116, 42, 72, 49, 4,134,113, 96, 24,122,134, 97, 60, 66,199,176,198, 48,169, 32,156,105, 21, 10,228,192, 96,
+136, 56,140,236,166,140, 59, 33, 98,143, 88,225, 99, 54,128,120,145, 77, 33, 49,165,242, 53,106, 33, 76,101, 9, 71, 8, 81, 14,
+ 25,171,181, 88,127,186,142,205,253, 61, 90,101,161, 61,245, 61,227,108,142,173, 91,185, 45, 91,161, 39, 1,232, 2,182,200,199,
+253,125,201, 59,214, 74,147,244,145, 17, 47,212, 58,178, 40,255,227, 56, 49,116, 61,113,136,152,168,113, 8, 24, 67,197, 76, 26,
+ 34,131,146,221,153, 49,229,101, 72, 65,108,129,211,200, 52,141, 66, 67,203,143,190,246, 35, 58,249, 4,148, 72,114,136, 25,235,
+177,190,193,213, 51,124, 51,195,249, 26,223,120,148,175, 30, 47,168, 37,154, 88,149, 32, 28,175,207,118,249,103, 5,253, 24, 9,
+167,207,248,206, 89,113,134,139,148,177,255,169, 32,156, 68, 86, 71,187,121,146,235, 77,161,145,157,162,140,243,177,235, 79,146,
+ 47,159, 21, 97, 18,112, 81,213, 52, 84, 77,203, 98,117,197,176, 95,211,239, 55, 40,231,233,198,137,218, 72,240, 79,119,232,145,
+235,132, 92, 66,181, 86,140, 49,158,173, 97, 20, 83, 12,132, 50, 53, 48, 73,172, 54,117, 93, 99,171,186, 64, 59,100, 20,217,212,
+ 13, 47, 95,127, 69,221,214,132, 40,192,144, 97,154,112, 78, 51, 77,147,140,141,199, 17, 3,180,117,203, 56, 76, 24, 37, 66,178,
+ 48, 5, 86,173,197,164, 32, 5,171,220,241,134, 41,242,252,197, 13,111,111,223,162,180,225,176,239, 73,104, 46,111, 4,167,106,
+ 28,162, 24,111, 18,217,142,132, 96,168, 47,230,120,231,128,140,247,226, 23,174,154, 86, 80,196, 26,246,219, 61,139,197, 66, 16,
+156, 65,160, 53,151,179,150,118,185,164, 93,173,184,184,186,196, 21, 5,123,214,134,166,174, 69,255,129,162, 93, 44,104,102,237,
+ 35, 76, 89,105, 25, 89,159,194, 56,244,233, 53, 69, 41,129, 3, 21, 13, 70, 46, 17,196, 39,177,153,147, 46, 61,171, 82, 0,147,
+198,183, 21,179, 69,139, 11,150,166,109,200,106, 96,202, 89,198,253,109, 75,181,175,233,199, 94, 58,251, 36,235,143, 97, 28, 36,
+188, 36,101,140,243, 36, 14, 5,241,155,137,125,135,177,150,202, 90,156,150,156, 8, 63,159,163,196,155, 74,223,119,242, 99,215,
+ 49, 12, 3,227, 20, 25,166,137,160, 52, 83, 12,162,159, 73,114,249,212,249,209,186,246, 29,227,231,241, 61,201, 9,101,142, 57,
+106, 85,143,186, 22, 45,193, 77, 58, 7,130,202, 16,229, 50,127, 12, 67, 73,249, 88,212,193,230, 76,223, 71,134,112, 96,187, 31,
+121, 88,247,220,190,219,240,209,213,156,235,103, 23, 92, 95, 95,176,184, 90,210,172,150,248,249, 28, 63,155, 97,188, 18,142,124,
+137, 87, 70, 25,193,207,218, 4,118, 0,103,168,173,196, 49, 87,174,146,248, 87, 93,236,193, 1,246, 12,210,177, 15, 35,195, 24,
+ 24, 67, 58, 57,144,142,123,110,253,132, 3, 33, 95,183, 49,226,252, 73,112,242,173, 79,163,184,164,140, 22,209,109, 24, 35, 99,
+ 63, 82, 53, 53, 85, 35, 24,108,227, 29, 88,119, 34,112,254,166, 70,219,190,239,249,126, 42, 58,251,176, 7,247,145,141,157, 63,
+188, 96, 87,156, 14, 27,242,119,119,232,167, 59,219,185, 67,173,136,126, 84, 81, 63,234,227, 45, 78,149, 65,239,169, 88,139, 61,
+226,137,197,238,252, 55,202, 74,252, 32, 90,161,173, 67, 37, 69,232, 3, 49, 79,220,190,123,205,127,250, 95,252, 23,188,125,251,
+ 47, 97,115,102, 58,244, 28, 54, 59,190,250,226, 27,110,223,221,130,134, 31,254,224,115,254,229,213, 51,116,179, 98, 72,150,251,
+ 77,207,221,118,207, 31,253,195, 63, 65,161,248,104,117,129,241,142, 24, 38,246, 93, 87,176,151, 51, 30, 30,238,240,181,227,122,
+182, 96,223, 5, 22,141,167,219,239, 80, 73,211, 79,154,251, 77,143,173, 86,216,170, 70,119,182,236, 99, 31,133, 33,167,215,160,
+124,135,174,175,175, 25,199,145,166,109, 88,111, 54,229,128,147, 76,233, 69,187,160,239,123,134, 49,240,118,183, 69,145, 73,106,
+ 71, 91,213, 34, 0, 60,116,220, 3, 55, 23, 75, 46, 46, 46, 81,198, 48,132, 3,125, 63, 50, 13, 19,251,205,158,109,183,103,215,
+239, 25,199,137,126, 72, 68, 28, 33,102, 12,153,103,115,141, 63,162, 30,181, 65, 41,139,201,148, 61,185, 45,152,209,116, 38, 82,
+204,103, 40,214,116,210, 18,228,116,156, 8,164, 71,143,120, 25, 7,198,148,153, 66, 70,143, 8,205,143,200, 52, 14, 18,202, 49,
+155, 81, 85, 13,198, 10,110,241, 56, 71,214,194,143, 58,185, 37, 36,112,200, 98,172, 71, 57,125, 74,249, 75,177, 8,244, 98,102,
+ 12, 73, 46, 46, 99, 98, 10,145, 49,106, 66,178, 48,100, 14,227, 30,181, 57,148,149, 69, 40, 22,149,145, 24, 38,194,208, 51, 77,
+ 35,161, 16,217,148,214, 82,184,157,195,215, 13,222,215, 88,235,208,166, 66, 59,143,211, 22,173, 43,178,171, 49,245,140,170,157,
+ 11, 72,164,246,103,129, 72,103,142,142, 82, 4, 31, 73,119,103,126,123, 85,196,134,250, 28, 93,171,206, 98, 23, 31,157, 12,223,
+ 9,113,201,197,154,247,157,199, 54,191, 55, 9,147,139,137,177,150,228, 16,229,109,101,112,125,131, 54,137,235,203, 21,239, 94,
+191, 36,197, 36,227,240, 33, 34,218,202,132, 50,114,137, 74, 26, 82,200, 56, 5,214, 36,161,190, 77, 34, 94,115, 90,131, 19,161,
+ 25, 26,150,173, 8, 58,135, 41,176, 90,174,216,236,118, 56,171, 24,251, 61,171, 69, 11, 41, 49, 14, 9, 99, 5, 61,171,181, 38,
+ 78,129,229,108,134, 51,154,135,125, 71, 93,121,166, 41, 81,251, 50, 33, 82, 90,224, 49,149, 38,231,196,103,159, 95, 48,165, 1,
+109,225, 97,115,160, 27, 21,151,215, 23,236,199, 3, 67,140,248,185, 67, 57, 77, 61,243, 12, 83,160,157,173,240, 77, 69,138, 1,
+107, 13, 41, 76, 66, 98,116,142,172, 50,227, 20,184,188,190, 34, 3, 85, 85, 83, 85, 53,202,104,218,102,198,197,213, 21,237,114,
+ 33, 99, 91,107,201, 90,163,173, 16,203, 22,139, 5,181,175,201,136, 67,196,121, 47,212, 67,165, 72, 73, 52, 14, 42, 27,217,167,
+ 31, 29, 23, 74,203,120, 37,107,114, 18,129,150, 46,171,165, 35, 80,200,228, 36,197, 93,203,175, 85,214, 48, 95,173, 8,219,158,
+171,155, 21,211,235,183,212, 81, 49,141,138,122,190, 64, 63,220,163, 67,196,104,136,113, 34, 17, 73, 68,148, 81,244, 7,193,218,
+122, 95,139,226, 59,139, 88,118,134, 37,103, 77,229, 61,157,222,201, 68,134,204,118, 63, 96,172,167,114, 30, 82, 34,133, 76,194,
+ 16,181,101,204,137,196, 35, 8,229,152, 13,206, 19,123,245,177,190, 28, 39, 81, 39, 4, 84, 17,206, 30,155,130,199,180, 71, 82,
+ 38,100,205,168, 34, 86, 37, 70, 18,228,120, 42, 66, 18, 22, 35,147,174, 64, 22,173,208, 20,232,167, 29,219, 93,207,250, 97,205,
+229,221,134,155,103, 91,174,111, 86, 92, 92, 45,139, 32,119, 65,189,236,113, 77,131,170, 42, 84, 85, 9,142, 87, 91, 20,146,218,
+166,140, 33,153, 10,109, 42,162,237,197, 86,235, 53,182, 82, 24,175,209, 42, 16,167,137, 97, 63,209,199,200,148, 50,125, 12,101,
+ 2, 81,206, 43, 45, 66,204,227, 74, 82,104,112, 5,204,100, 68, 16,125,252,190,196, 50, 69,213, 58, 20, 59, 95,192,245, 61,126,
+239,240,181, 36,165,154, 83, 4,186, 32,114,209,246, 76, 75, 84, 84, 7,239,143,223,127,243,136, 61, 63,201, 62,127,162, 14,250,
+ 13,200, 88,222, 75,131,122, 28,189,168,247,236, 71,249, 24, 91,123,178,243, 60, 46, 12,211,249,223,130,247, 51, 37, 5, 30, 82,
+ 66,105, 78, 94,199,140, 49,142, 41,137,224,234,225,238, 22,215, 40,246, 63,251,130, 47,127,254, 21, 94,107,102,149,167,114,142,
+105,234,249,248,251,159,210,247,151,252,206, 15,127,196,205, 71, 31,179,235, 3,127,242,147, 47,249,230,213,175,248,111,254,244,
+ 39,164,168,184, 92, 45,200,198,138, 47,157,204,172,170, 33,101,246,135,142,136,166,106,150, 52,179, 21,149,179, 92, 94, 92, 48,
+142,153,168, 3, 93,114, 28,214,123, 62,251,221, 21,127,254,139, 95,208, 13, 29,104, 87,114,230,243, 73,224, 37, 55, 57,195,126,
+187,163,109, 91,110,174,175,113, 86, 19,134,145,171,203, 75,188,177,164, 24, 89,239,118, 52,179,150,119,247,107,190,126,249, 82,
+ 50,147,187, 81,196,103, 70, 60,189, 99,129, 37,212,117,131, 82,138,170,169,241,117,203, 55, 95,126,205,161,235,232,135,129,190,
+239, 9, 99, 32, 4,141,242, 53,109,227, 89,182,150, 54,239,177, 89, 22, 2,199,194,115,178,219,144, 30, 69,111,167, 14, 86,161,
+ 84,122, 50, 37,137, 49, 49, 77, 81,108,111, 65,120,242, 33,196,194, 28, 59,138, 77, 18,132, 72, 30, 36,202,177, 31, 38,170,250,
+ 64,181,217,157, 18, 2,181, 54, 98,147, 43,205,172, 68,126, 58, 73,164,115,146,107,108,156,112,223,115, 73, 65, 18, 12,165, 22,
+ 1, 79, 70, 86, 14, 73,186,251,132, 33, 25, 91,222,111, 73, 18,238, 66, 18,168,198, 52, 49, 77, 3,227,208, 51,246, 61, 97, 26,
+ 5,109,153,133, 93,110, 93,198, 85,138, 88, 80,148, 24,135,181, 53,174,110,241, 77,131,159, 45,168,102,115,252,124,142,107,103,
+216,186,194, 86, 78,104, 91,165, 59,123,100,206,171,211,101,229,187, 89, 9,199, 60,231,223,198,108,250,248,223,213,111,157,165,
+240, 20,247,172,109,233,244,141, 35,233,136,217,193,230,238, 29,235,183,111, 88,181,154,202, 43, 54,219, 32,193, 23, 57, 32,185,
+ 86, 89,198,141, 41, 83, 89,168,140, 34,134, 64,142, 48,107,164, 51,116,149,197, 84,114,196,212,222,241,250,245,107, 89, 23,105,
+195, 97,187,151,244,196, 49, 96, 84, 36,198, 64, 12,137,102, 86,147, 74, 68,159, 34,211,120, 75,136, 17,107, 69,132, 57,141, 35,
+243,202, 18,250,137,166, 49,120,109,176, 86, 46,113,207,158,173,120,243,238, 13,219,125,207, 56,101,180,174, 1,195,219,183, 29,
+ 87, 47, 42,146,137,248,198,147,181,163,153,205,105,155, 57,253, 56, 98,140,116,100,166,110, 37,109,203,200, 52,102,113,121, 37,
+120, 86,239,176, 5,176,210, 52,173,160,154,173, 37,102,240,133,239,237,189,199,215,197,123,110, 45, 9,129,159, 24, 35,232,207,
+ 92, 86, 55,170,112, 26, 82, 86,160, 37, 96, 73, 29, 93, 30, 50,202, 2,101, 48,254, 72,252, 75,232,156,138,231, 59, 31,125,154,
+242, 60, 24, 67, 61,159, 17,209, 44, 46, 22,172, 55,107,212,152, 9,221,128,241, 21,205,124,197, 20, 18,134,196,152, 70,114,204,
+ 39,146,224, 20, 3,187,221,158,203,213,101,209,248,104,172,241,140, 65,166, 44,214, 88, 97,186, 3,201, 56,121,248,178,156,206,
+182, 76,136,178,210,100,163, 37,191, 92,235,147, 64,244,253,243,255, 88, 42,206, 27, 71,117,102,177, 61, 50,204,181, 86, 56, 99,
+ 48,165,240,101, 50, 54, 41,180, 14, 76, 83, 20,138,212,227, 21,129,233, 92,184,202,145,120,169, 68,172, 22, 34,195, 52,176,233,
+ 71, 30,246, 29,183,235, 13,207, 30, 86, 60,187,190,224,234,234,192,178, 27,104, 23,115,220,188,193, 52,179,178,115,175,201,202,
+150,137,154, 67,169, 18, 44, 85,206, 24, 83, 25, 76,101,241,109, 69, 93, 75,247,158,163, 92,220,186,253, 72, 74, 19,100, 45, 83,
+ 44, 99, 48, 90, 97,205,113,146, 41,144, 31,171, 13, 86,139,125,216,187, 18, 12,227,164,240,103, 10, 62, 54, 66, 26,132, 7, 50,
+ 14, 61,182,151,215,194,121, 65,126, 59, 95,225, 42,217,249,203,104,222,114, 30,252, 97,127,123, 63,249,121, 81,207, 39,207,207,
+249,158,238,183, 87,172, 75,154, 90, 42,108,142, 84, 96, 27, 89, 29,243,214, 31,143,174,124,102, 25,206, 69, 72,161,143, 23,137,
+247, 83,195,212,113,187, 42, 59, 78,111, 29,218,195, 98, 57,231,221, 14,222,188,188,163,106, 87,116,251, 29,155,251, 59,172,201,
+124,250,233, 11, 62,253,252, 99,254,218, 31,252, 30,207, 47,111,120,254,252, 35,190,248,250, 27,190,252,250, 27,254,248, 31,253,
+ 19,254,232, 31,255, 5,206,205,184,122,126,205,205,213, 5,222, 42, 82,204,204,154, 57, 77, 85, 67,204,194,233,245, 53, 90,103,
+198,110,135,110, 22,236, 15,123, 46, 63,250,132,215, 95,189,225,143,255,201,207,153, 45, 86, 44,191,254,150,207, 63,255,132,255,
+199,255,231,255,205,126, 28, 74,198,121, 1, 77, 40, 17,186, 12, 67,207,253,254, 64,237, 60, 87,151,151,204,234, 25,139,186,197,
+150,110,111, 24, 70,134, 24,248,230,203, 47, 24,167,192,122,187,165, 31, 60, 15,235,123, 62,125,241, 17,151,171,229, 73,164,145,
+147,168,237, 93,211,144, 80,204,151, 11,126,240,187, 63,226,213, 55, 47, 9,111,223, 97,171,186,236,201, 29, 19,134,105,236,201,
+169, 39,196,158, 41, 74, 24, 3, 49, 22, 49,207,211,139,213, 49, 3, 24,192, 20, 69,250,113, 95,156,144,221, 80,136, 71,234,146,
+ 20,246, 35,113, 78,149, 46, 53, 36,152, 98, 96, 8,153,205,126, 40,153,236, 50,130,211,199,215,250, 24, 45,104,205, 9,173,217,
+214, 13,243,118, 70,211, 54, 84, 77, 83,148,211,134, 99,107,155,179, 18,239,188,156,124,114,171, 77, 71,251,144,124, 94, 78, 17,
+ 98, 36,197, 64, 86, 26,131, 38,161,203,126, 47,145, 77, 20, 75, 92, 42, 16,141, 36,175,123,158, 18,202, 70,180, 75, 18, 22,133,
+ 70, 59,135,173, 27,124,219, 82,181, 45,190,110,177, 85,141,245, 14,231,205, 73, 64,120,234,176, 79,169, 76,234, 47, 41,188,255,
+188,249,180,143,107, 5,101,132, 45,174, 66,192, 58,248,249, 79,255, 28,198,145,103, 23, 13,251,221, 1,180, 92,167, 77, 86,167,
+110, 42, 20, 54,134,181,130,213,204, 33,137, 77,236,116, 0, 57, 98, 76, 52, 77, 75,215, 13,140, 83, 96,117,177, 36,198,162, 89,
+ 32,227,156, 35,165, 36,152,216,110,143,209,150, 48, 13,104,148,232, 75,128,113, 28,168,139, 71, 93,229, 68,206, 26,231, 4, 69,
+106, 43, 67,206,145,155,235, 5, 67, 63, 50, 14,145, 20, 50,235, 53,124,244,201,156, 47,126,249,142,122,102, 57, 28, 38,108,171,
+ 24,119, 7,230,171, 37, 77,229, 25,131,132,158, 92, 92, 92,144, 82,164,242, 94,236,120, 33, 80,249,178, 98,243, 14, 99, 28,117,
+ 41,216,206, 57,148,210,226, 93, 47,185, 3,199,124,133,170,174,203,191,151, 5,133,150,213, 81, 58,166, 23,157,177, 55,142, 78,
+136,227, 78,247,216,218, 37,162, 68, 3,235,199,177,117,202,229, 70, 43, 54,134,211, 5, 65,103,104,218, 25,221, 16,152, 45,151,
+180,243, 57,170,151, 2,120,216,237,229,217,232, 58,226, 52, 8,204,103, 26,113, 78,188,219, 26, 67,136, 9,231,235,178,166,177,
+ 24,227,136,217, 8,191, 95,137,144, 51,134,204,106,113, 73,183, 89, 51, 37, 48, 49,209,214,254,177, 41,211,250, 20, 26,244,235,
+ 38,190,231,221,250,241,178,250,168,233,207,104, 35,201,104,198,104,121, 47, 89, 93,180, 57, 18,149,173, 77, 89, 81,105,117, 2,
+139,101, 2, 58,138, 32,237,172, 28, 65, 22,161,102,138,114, 63,234, 67,164,155, 2,251,174,103,183, 59,176, 94,239,121,182, 57,
+112,125,232,185,184, 88,178, 92, 45,152, 45, 70,114,219, 98,218, 17,124, 37, 99,120,229,100,205, 81,244, 49, 89, 75,103, 92,107,
+143,178, 53,198,206,176,190,198,121, 75, 53, 51, 84,111,225,118,157, 24,198, 12,148,117,164,149,203,161,181, 22,109,164,107,247,
+ 90,227, 74, 28,113, 85, 57,156, 51,184, 18, 9,109, 77, 73, 72, 45,223,195,116, 20, 31, 78,145, 73, 79, 40, 59, 98,237,128,243,
+ 61,149,247, 56,239,241,149,116,239, 56,115,154, 6,217,223,182,160,127,183, 83, 56,138,209,206,148,200,252,186,204,202,243,223,
+163,120,119,143,222,220,179,157, 75,254,144, 95, 78,229, 83,118,243, 81, 20,165,201,167, 17,255,249, 67,162,149, 18,251, 13,165,
+139, 50,150,102,233,113,233,192,243,213, 31,240,227, 31,255, 5, 95,252,236,151,180, 77, 37,209,128,206,114,183, 57, 80,109,122,
+214, 93, 70,177,231,239,253,131,255,152,175, 95,189,225,175,255,237,127,147,159,255,234, 91, 72,153,103,207,158,243,209,243,103,
+ 16, 69, 84,166, 17,114,221, 56, 69,188,245, 52,237,156,136,194,234, 76,235, 20,179,198,151,212,181, 5,147,219,241,243,175,191,
+229,147, 79, 52,247,155, 29,207,167,204,183, 47, 95,151,125,218,163,127, 57,103, 24,198,129,251,117,192,105,203, 20, 38,241,194,
+214, 13, 6, 24,199,145,168, 53,223,188,122,137,114,134, 77,183,231,208,143, 44, 22, 75, 41, 80, 41,145,141, 38, 42, 24, 66, 96,
+225,101,159, 94, 57, 47, 95,171,214,108,183, 91,170,186, 97,117,125, 77,159,196,115, 58,141, 35, 33, 27, 98,144, 67,214,234, 72,
+ 42,120, 90, 78, 42,239,163, 85, 90,124,163, 71, 91, 21,231, 22,150, 34,190,202,197,151, 46, 10,242, 2, 84, 43,220,227,148,206,
+112, 67, 42,158,198,192, 74,105, 33,162,157,198,117,143,183,121, 99,164, 51,175, 43, 25, 99, 55,181,193, 26, 87, 68, 75,141, 36,
+ 91, 85, 30,172,125, 36,186,149, 78,125, 76,144,148, 38,102, 41,216,249,104, 67,201, 98,233,202, 41,144,226,132, 14, 19,152,137,
+172, 29, 89, 25,166,148, 81, 5, 88, 67, 86,104, 83,246,132,198,130,245,167,124,247, 92,196, 78,169,248,222, 93, 85,137,150,161,
+146, 28,108,235, 75,215, 97,212,147,247,255, 83,150,237,211, 9,250,191,248,128, 25,121, 14,117, 73, 54, 75,121,228,205,155,111,
+216,220,191,101, 53,179,168, 2, 31,194,136, 16, 83, 23,223, 67,206,130, 8, 54,186,164,178,105,195,148, 35,109,107,209, 26,234,
+202, 23, 59, 95,102,185, 88,242,197,175,190, 98,190, 88, 96,172,101,191,223, 10,175, 58, 38,230, 51, 79, 12, 29, 65,105,225, 29,
+164, 84, 86, 57,138,186,169,152,134, 94,162, 63,135,137, 56, 77,180,181, 37,199,136,247,162,201, 72, 10,156, 86, 60,191,185,225,
+205,187,215,196,168,216,238, 50, 55,207, 46,216, 29,166,211, 8, 56, 37,216,237, 35,186,206,164,237, 22,227, 28,179,197,138,249,
+108, 37, 66,192,170, 46,209,149,153,166, 17,108,108,211,204,228, 32, 46, 7,168,181, 30,173,181,116, 73, 70, 99,180, 48,190,125,
+121,221, 85,113,105,196,148,176,214,160, 74,140,103,228, 49,209, 48,147, 37,171,254,184,111, 61,254,247,148, 78,186,136,168,197,
+235,159,145,177,180, 62, 77, 98,202, 88, 27,133,210,101, 93,105, 52,198, 91,150, 23, 75,154, 89,131,113,226,162, 24,250, 1,109,
+ 69,141,127,216, 39, 2, 82,228,156,213,210,232, 27,139,115, 53,253, 48,225, 92,197, 48, 70,230,243,101,201, 45, 87,120,111,113,
+190,166, 15,137,166, 94,114,216,236, 8, 41, 11,159, 2, 45,107,173, 41, 23,125, 0,167, 60,143,239, 22,116,197,147, 80,223,227,
+186,238,116, 14,156, 69,126, 27,117, 42,238,206, 22,247, 72, 44,123,118,173, 65, 77,197, 58, 38,162,180, 40,248, 83,146, 74,101,
+154,251, 24,189,157,148,240, 19,166, 8,105,200, 76, 97,160, 31, 34,219,253,196,110, 63,177,217,239,121,118,181,226,249,213, 5,
+113,181,160, 93,205,241,171, 57,106,214,160,171, 22,237,206,196,132, 50,202,194,104,137,125, 85,214, 11,177,206, 41,234,218,176,
+ 88,213, 92, 94,206,121,253,250,142,187,251, 3,135, 94, 80,186,198,185,194,119,183, 39, 22,188,215, 74,194, 95, 42, 79,221, 84,
+212,149, 76, 29,101, 58, 36, 76,121, 82, 62,229,215,167,152,144,254, 35, 19, 99, 96, 28, 3,186, 31,232, 75,167, 95,215, 21,222,
+123,112,246, 4,173,177,223, 69, 96,158,117, 19,234,124,236,158,158,198,105,170,116, 26,131,156, 18, 51,142,197, 61,231, 39,133,
+252, 40,136,200, 80,108, 47,138,104, 10,240,191,252,114, 99, 52, 57,155,178,191,148,177, 94,176,146, 15,171,138,234,249,168, 6,
+214,103, 5,253,120, 46, 30,129, 39, 70, 37, 18, 22, 95, 45,105,170,138, 79, 62,186, 97,186,172, 88, 53,134,155,171, 37,127,247,
+239,254,103,220,222,221,163,181,101, 12,150, 55,247, 29,191,122,219,241,159,255, 87, 63,102,102, 52, 47, 62,190,230,111,253, 79,
+254, 13,126,242,211, 95,242,240,176, 97,214,180, 92, 45, 23,120, 45, 73, 76, 70,105,250,126, 36, 12,145,166,105, 48,141,101,152,
+ 70, 22,139, 21,211,112, 16, 81,144,147,206,224,255,249, 31,253,199,252,206,223,252,183,249,215,254,181,191,205,127,245,247,254,
+ 62,191,243,233,231,252,141,127,229, 15, 33,100, 76, 22,162, 89, 42, 55,241, 99,125,143, 49, 67, 73,240,121,249,230, 45,222, 88,
+ 42,231, 8, 33,176,222,108, 88, 94, 92, 50,164,128,237,123, 98,215,211,245, 61,214, 24,230,109,195, 20, 2,253, 56, 50,107, 26,
+ 9,109, 81,138,118, 46, 97, 46,125, 8,244,125,199,254,208,227, 92, 5, 40,140, 17,240, 74, 12,137,148, 3,228, 72, 24,247, 12,
+155,123,116,232, 78,150, 20, 9,111, 17,159,105,140,169, 20,239,116,218,137,105,253, 56,246,149,231, 44,159, 68, 19,234,124, 87,
+140, 18,177,157,210,101,212,116,116,131,229, 39,214,173,163, 69,204, 20,241, 80,204,226,179,150,113,175,116,223,170,116, 68,222,
+123, 81, 22,123, 71, 66,162, 24,115,210, 68, 25,253,200,222, 15, 69,196, 74,254,178,182,167, 72,197, 99, 81, 79, 49,226, 66,100,
+ 28, 7,209, 59, 40, 77, 86,197,246, 18,166,211,197, 75, 44, 40, 14, 99, 93, 1,134,192, 52, 77,146, 24, 86,213,212,227, 36, 34,
+172,226,205, 55,101, 21,112,220, 37,158,180, 38,164, 15,203, 71,127,203,130,254, 62, 26,249, 47,115,166,124,104,138,246,212,169,
+146, 36,176, 39, 4, 14,155,123,246,155, 59, 94,125,251, 53, 23,171, 5,253,237, 22,239, 61,241, 48, 65, 78,130, 98,141,153,108,
+ 32,134,128,245, 18, 91, 25, 67,128, 12,214,105,170,202,151,181, 5,120, 95,159,118,247,198, 74, 40, 70,136, 9,107, 28,135,126,
+196, 59, 77, 23, 68, 96, 7,210,213, 76,253, 68, 51,111,164, 3,204, 50,233, 81, 37,150,213,212, 86, 46,150, 73,196,141,198,105,
+ 9, 91, 9, 3,195,152,233,250,196, 24, 29,207, 23, 51,190,252,241,183,204,151,150,160, 96,156, 18, 81,103, 24, 0, 19,121,119,
+119, 71, 72,153, 16, 34,243,249,130,144, 20,214, 86, 52, 85, 35,116, 47, 99,112, 70,203, 46,211,138,128, 78, 41,133,171, 60,206,
+122,172, 19, 17,167, 41, 93, 86,202, 2,136, 49,214,161,141, 40,153,209,134,120, 54,225, 60, 22, 50, 73, 21,147, 6, 89,198,116,
+185,100,110, 39,116, 73, 8,203,101,237,149,117,126,212, 31, 29, 9,138,229,121, 32, 79, 24, 35,153,240,104,205,114, 53,103,183,
+239, 81,122,193,208,247, 60,172, 31, 48,222,162, 6, 25,209,134,225, 64,202,142,113,156,112,174,102, 10, 17,107, 45, 99,202,120,
+ 91,203,106, 42, 36,154,118,134,178,136, 16,119,236,113,190, 38, 99,137, 89, 19,147, 38,161, 8, 57,113, 24, 70,185,216,158, 39,
+ 4, 62, 9,238, 82, 69, 84, 90, 46,197, 8,116, 42, 69,177, 84,230,156,158, 92,100, 85,209,146,156,156, 31, 90,227, 84, 70, 23,
+113,108, 76,154,152, 20, 46,105, 82, 82,114,126, 28,127,143, 19,163, 66,115, 50,134,150, 95, 55, 68,161,191,197, 24, 25,166,142,
+174,143,172,119, 27,182, 15, 59,246,119, 91,186,231, 23,172,246, 75,102,253,146,106, 53,199,207, 35,182,206, 66,166,115, 78, 60,
+238, 69, 52,172, 16,135, 79,109, 52,182,210, 84,141,167, 93,180, 92, 92, 92,114,115,125,205,235, 55,107,238,238, 55,108,247, 59,
+166, 16, 1, 45,239,159,178, 78,244,101,244,222,212,158, 89, 91, 75,226, 94,209,221, 24, 43,235,150, 24,196,249, 49, 13, 35,227,
+ 16,152,198,145,169, 20,120,225, 69,100,162,134, 73, 43,134,174,147,201,144,145,162,110,140, 8, 89,127,253,216,252,204,151,203,
+ 19,241,205, 35, 20,225, 28,231,122,174,246,123, 28, 55,126,216, 50,103, 98, 38,152, 72,138,194, 75, 15, 70, 17,140,194, 25, 57,
+ 92,114,130,144,116, 65,143,230,167,163,171,247, 72,114,231,187, 72,173, 53,153,154,217,108,197,124,182,228,250,114,193,226, 69,
+131, 9, 3,159, 60, 91, 49,141, 59,126,252,227,159, 72,108,159,157,241, 15,255,241,207, 25,186,200,197,213, 51,190,247,217, 53,
+ 23,151, 23,220,109,246,252,221,255,236,191,100,222, 84, 92, 46,151,248, 52, 96,146,198, 16, 25,135,129,202,213,146, 78, 22, 2,
+ 83, 12,248,156,216,239,215,212,117,197,252, 98, 37,221,131,175,248,179, 63,251,199,116,120,254,230,191,254,111,242,159,254,255,
+254,191,252,249,159,253, 41,255,187,255,245,191,143,138, 96,148, 41, 33, 18,234, 4, 47, 80,101,164,149, 65, 44, 34,105,228,219,
+ 87,175,184, 88,173,136,177,216, 70,194,196,221,250,129,113, 28, 49, 86,130, 6,130,209, 52,149,231,112,232,136, 33, 72,156,162,
+179,108,246,123,222,222,222,146,141,225,242,230, 25, 97,220,209,143, 35,118,233,169,155,134,221, 86,128, 52, 99,140, 37,223, 92,
+209,237,119, 28,214,107,244,217, 37,238, 20,133,124,150,176, 20,211, 25,230,247,113,186,248,104,227, 56,170, 61, 75,206,239,227,
+251, 68,118,122,185,172, 80,100, 13,119, 76,113, 43,175,117,105,102,163,202,152,242,123,135,148, 9, 83, 98, 42,159,163,148,140,
+155, 76, 9, 97,176, 85, 37, 15,122,185,213,234,178,219, 18, 7,181,193,106,143,113, 94,240,145,104, 66,152,164,168, 7, 75,140,
+ 9, 29,166, 83,167,164,138,197,197, 90,203, 56,141,196, 56,149, 21,207, 99, 72, 3, 64,138,161, 92,118,228, 98,112,204,147,215,
+ 74, 9,119,218, 40,162,126, 76, 54, 60,250,237, 69,235,251, 47,182, 37,255,117,235,177,156,147,136,150,138,253,115, 58,236,249,
+241,159,252, 9,222, 91,236,229,146,212,223,210,119,129, 48, 69,154, 99,215, 88, 82,161,142,151,116,163, 76, 65,166, 74,236,173,
+ 49,146,178,134, 50, 92, 92, 8,170,181,242, 53, 9, 77, 55,244,116, 99, 96, 53,175,177, 90,113,216,247,180,141,227,205,250, 32,
+140,243, 8,222, 90,185, 60, 31, 58,234,198,209,239, 7,180, 50, 88, 45,171, 55,109,149,100, 95,123,131,107, 44,237,188,230,245,
+219, 59,172,175,120,251,245,129,143, 62,187,224,103,191,122,197,197, 71,158, 41, 70,250, 16, 81, 14,180, 21,175,246, 24, 19, 13,
+134,183,239,222,137,190,164, 63,176, 92, 46,153, 42,137, 53,246,197, 57,131, 50, 2,153,138, 25,107,149,236, 85,141,125, 20, 51,
+150, 92,107,153,226,232,242,255,165,144,107,109, 10,187, 63, 63,198, 4,228,140, 53, 6, 91,132,110, 41, 70, 65,132, 30, 19,184,
+120,108, 80,142,246, 92, 74, 7,127,196, 14,107, 10, 8, 72, 41,114, 12,164, 28,112,222, 50, 29, 14,204,151, 45, 57, 37,106,231,
+232,119, 45, 15,109,205,195, 93,135,179,101,156,159,164, 97, 72, 49, 98,181, 37,134, 72,200, 9,231, 13, 83,136,180,182, 98, 24,
+ 14, 24,111, 73,121,164,170, 42, 76, 47, 20, 65,249,147, 13,169, 40,249,181, 22,193,222, 20,199, 39,146,205, 39, 57, 28,229,125,
+127,180, 90,230,130, 58, 62,143, 61, 20,171,215,177,185, 59,179,130,161,229, 25,215,242, 61,176,134,242,236, 37,140, 73,104, 45,
+ 63,198, 36, 19,140, 99, 17,231, 60,150,225,220,222, 90, 4,186, 99, 84,244, 33,209, 13, 18,106,181,126,216,114,191,221,242,236,
+ 97,197,205,238,154,229, 85,207,124, 53,209, 44, 6,170,249, 12,221,212, 40, 87,161,109,133,210, 14,237, 12,201,120,146, 81, 37,
+210,181,197, 86, 51,170, 89,207,108,117,193,234,102,199,250,126,195,221,221, 61, 15,235, 45,251, 67, 79, 78,178, 30, 84, 74,236,
+188, 78,131,209,242, 30,179,206,200,170,170,146,117,142, 42, 94,246,106,154, 24,251,129,225,208, 51, 12, 26, 61,140,228, 49, 22,
+128, 88, 36,132, 2,131,210,234,244,163,214, 50,246,183,231, 33, 21, 71,187,206,241,195, 88,131, 61,125, 28,227, 26,159,114,217,
+229,245,210,143,105, 49,167, 23,245,233,216,254, 59, 56, 59,185, 23,130, 74, 24,149, 37,152,163,124, 40, 43,157,186, 73,250, 20,
+112,112,252,189,245,251, 25,178,156,199,105, 66, 80,153,202,181, 84,245, 12,239, 61, 57, 77, 44,103, 53, 85, 54,140,253,196,223,
+254, 27,127,139,223,249,254, 15, 48,206,243,231, 63,253,130,215,183,107,148,157, 49,191,184,161, 27,122,254,225, 63,254,115,238,
+238,238, 24,186,129,203,229,140,153,215,212,106,194, 41, 39,144,138, 44, 48, 25,107,133,181,238,156,197,121,137,131,108,231, 45,
+182,110,169, 42,195,253,183, 95, 19,187,142,175,254,226,207,120, 88, 63,128, 10,220, 62,220, 50,165, 9,156,193,214, 21,169,123,
+244, 40, 63,170,223,143,135,165,188, 65, 23, 23, 43, 80,154,135,187, 59, 86, 23, 43, 54,219,173, 48,170,157, 99,225,107,134,110,
+196, 26, 77, 93,213,144, 18,109,211,160,179,236,150,199, 20,137,100,246,135, 3,117,215, 19,166, 9,163, 45,219,205, 22,101, 29,
+ 99, 16, 92,231, 24, 69,104,146, 82, 98,236, 6,172, 49,197,242,148, 31,135, 48, 69,241,152, 83, 62,243, 95,158, 49,154,203, 98,
+228,216,181, 31, 49,184, 90,149,189, 82, 41,238, 24, 73,102,202, 89,114,218, 99, 82, 66,189,147, 28, 48,193,166,150,189,123, 25,
+108,151,101,153, 62,147, 75,234, 71,250, 20,103,157,129, 6, 93,224, 23,199, 9, 82,206,177,224, 90, 13, 42, 37,140,230, 9,160,
+ 38,151, 56,217, 99,230,179, 42, 7,180,247, 98,221, 19, 34,151, 46, 92,116,241,232,166, 50,141,144,124, 38, 69, 14,147,220,170,
+199,137, 48,142,140,227,200,197, 52, 49, 91, 46, 72,185, 70, 41,137,197, 77,233,132,249,126,242,158,253,239,239,159, 92, 70,211,
+194, 41,216, 31,118,220,189,122,205,237,203, 87,252,222,239,253, 46,191,216,191, 37, 25,205,254, 48,224,178,194,101,141, 46,223,
+205, 88,112,187, 57,201, 78,125, 74,129,198, 91, 98, 12,248,170,149, 76,109, 35,196,192,237,182, 35, 3,135,195, 1,165, 36, 28,
+ 99,183, 59,176,156, 55, 12,253, 22, 84,195, 24, 34, 77, 85, 51, 78, 19, 55,171, 11, 14,219, 53,139,197,140,135,245, 22,231, 45,
+251, 93, 47, 34, 54, 13,222, 26, 1, 8, 53, 22, 84, 98, 8, 19, 89,107,222,222,109,185,126, 49,103,219,237, 88, 92, 26,116, 5,
+177,216, 24, 51, 50,170, 78, 41,158,198,152,206,106, 14,221,150,204, 68,140, 83,233, 42, 19,179,166, 37,198, 10,211, 46, 81, 37,
+ 58, 85, 91, 35, 88,229, 41, 20,123,165,125,236, 76,203,243, 17, 74,252,172,214, 26,101,159, 90,116,116,105, 70,244,153, 80, 82,
+ 29,173,136, 39,103,200,177, 50,154, 19,144,234, 56,185, 58,157,167, 89,124,206,228, 76, 24,123,210, 52,146, 67,160,239,247, 24,
+157,208, 4, 81,198, 19,153,207, 26, 54,235, 7,198,105, 40,156, 4,233, 86,167,105,160, 93, 52, 60,236,239,217,108,215, 2,173,
+169,171,178,179,215, 5,166,213,115,177,156,179,217,247, 84,117, 37,207,158,182,197, 50,154, 49, 89,152,255,233, 3,238,166,167,
+245, 65,125,192,214,150, 31,201, 74,101,250,150,146,144,227,162,206,104, 93, 22,105,250,248,245,235,210,197,203, 25, 98,148,172,
+ 62, 68,127, 19,197,162,122,106, 64,206,116, 34,133, 49,155, 75,144, 20, 90, 23,189, 81, 36, 78,138, 33,140,236,199,137,221, 52,
+177,237, 7,118,135,137,231,155,129,171,171,158,229,213,129,116,177,196,204, 27,204,108,134,173,103,226,116,177, 85, 97, 80,120,
+148,246,100, 93,227, 76,139,170,122, 76,219, 80,207, 27,150,203,150,203,203, 5,235,245,150,205,122,199,102,189,165,239, 6,153,
+194,158,133, 67,228, 20,202,164, 33,139,150,160,170,132,252, 8,228, 24,100, 95,238, 29,182,115,152,174,199,116, 3,251, 44, 99,
+249, 97, 28, 9,233,236,251,158, 31,191,183, 54,149, 93,166,214,210, 85, 89,103,139,186,216,138, 15,219, 60,138, 22,142,137,105,
+143, 83,239, 71, 8,199, 7,183,132, 79, 68,144,249, 73, 24,134, 42, 94,218,227,176,196,156, 57,210, 68,239, 84, 68, 17,197,143,
+120, 20,229,233,147, 10,251, 3,160, 27, 37, 97, 46,109, 59, 43,177,163, 20,162, 90,199,139,229,140,219,183,239, 56,140,137,159,
+253,252, 75,146, 49,252,249, 95,252,148,205,250, 22,101, 59,190,120,249,138,135,205, 65,118, 33,229,239, 53,246, 3,238, 82,163,
+147, 60,244,227, 40, 30,238,156,160,169, 23, 50,234,112,114,248, 59, 47,170,222,132,101,121,253, 17,221, 48,162, 81,124,118,189,
+228,205, 97, 3, 90,114,211,223,222,223,129, 49,184,186, 18,188,107, 8, 79, 86, 23, 90, 89,249,126, 22,181,116, 66,130, 44, 46,
+174, 46, 25,199,145, 67, 39,169,105,149,246, 18,210, 48, 14, 52,243, 57,222,121,172,214, 52, 85, 77,140, 81, 66, 94,234,154,126,
+ 24,104,218, 57,175, 94,189,146, 96,139,146, 41,174, 98,241,195,106,133, 81, 26,157,164,227,218,231, 40, 9, 65,165, 76,171,227,
+ 43, 84,198,240, 74,231,114,219, 78,143,100,181, 83, 0,143, 62,113,176,101, 44, 47,239, 31,171,229, 61, 36, 33, 5,242,208,167,
+ 44,132, 40, 21, 51, 42,137,117, 39,196,146,229,173, 4, 18,121,124,175,201,133, 67,166, 3, 83,121, 67, 31,134, 30,187,183, 36,
+ 18,227, 52,226,187,170,196,134,138,149, 13,101,137,170,228, 44, 43, 75, 50, 25, 27, 19,218, 78, 5,199,153,201, 49, 16,130,216,
+214, 68, 92, 19, 11,223,192,160, 11,140,198, 89,203, 56,106, 70, 53, 50,230,241,228, 67,205, 41, 18, 85,148, 41,132, 17, 97,222,
+ 52,142,244, 93, 71,223, 29,152,134,142, 24,158, 51,203,151,162,160,118, 34,194,226, 40, 6, 60, 30,108,127,101,188,210, 63,139,
+139,192,211,231, 71,107,197,110,123, 32, 12, 35, 95,253,252,151,124,239,211,207, 88,249,204,159,253,215, 19, 49,149,247, 65,202,
+ 56,107, 48,186,192, 63, 98, 70,233,132,247,150,156, 35, 86,131,243, 48, 77,229, 61, 92,194,122,166, 16,232, 7,121,189,178,134,
+113,236, 81, 90, 19, 66,143,175, 26,134, 78,209, 13, 3,222,138,176,213, 42,205, 52,141, 88,103, 36,132, 70, 69,200,150, 20, 50,
+117, 43, 88, 82, 84, 46,182, 43, 71, 86,145, 97, 28, 81,206, 10,244,102,102, 57,236, 96,182,108,217,142, 61,190,105, 37, 81,204,
+ 57, 82,209,196,116,253,158,152, 2, 99, 25,225,135, 24,216, 29, 54, 24,109,177,247, 2, 64, 26,250, 17,176, 44, 22, 11, 66, 12,
+152,104, 33, 71,172,119, 39, 18,156,236,255, 11,183,160, 96,125,143, 54,213,105, 12,197,247,110, 74, 30,186, 58, 77,172,114,206,
+144,164,248,230,194, 76, 79,169,116,237,198, 64,193,140, 30, 93, 16,143,168,226,210,185,199, 40,174,141,174, 99, 60, 28,132,219,
+191,219,145, 67,164,239,186,146,114, 54, 48, 77, 93, 33,194,237, 32, 4,226, 20,132,213,239, 38, 50,178, 74, 27,167,137, 74,105,
+172, 57, 83,146, 43, 77,138,129,126,191, 21,142,186,209,162, 45,209, 22,165, 50, 49, 41,250, 41,208,245,195,169, 27,230,201,101,
+ 69,125, 39,117, 51,243,148, 89,126, 50, 97, 41, 93, 58,120, 8, 49,161, 85, 44,208, 36, 32, 42,225, 78, 41,133, 86, 70,214, 45,
+ 38,203,143, 58, 75,131,169,181,224,150, 79, 48, 27,117, 98, 53, 64, 58, 61, 98, 34,194, 46, 5, 62, 64, 84,134,160,100, 26,152,
+213, 72,140, 91,166, 62, 50,236, 39,186,253,129,195, 97,203,197,208, 81,119,115,170,161,195,207, 70, 76, 45, 28, 10, 92, 35,147,
+ 94,227,208,120,208, 65,124,236,206, 66,229,100, 87, 62,159, 49, 91,205, 89,110,246,108,239, 55,108, 55, 59, 14,187, 3,227, 36,
+194,227,170, 22,209,111,229,236,201,145,112,116, 75,104,173,192, 30, 93, 24, 71, 99, 68, 70,197,196, 52, 26, 6, 45,186,141, 97,
+152,232,167, 73,166,131,165, 88,166,156,176,225,168,110, 70,194, 19,136, 17,109, 52, 58,137,204, 48,199, 92,118,164, 17,210, 49,
+223, 85,127, 32,122,245, 67,148,155,115, 43,122,122,114, 38,165,146,160, 21,131,120, 50, 69, 8,112,228, 91,115, 26,151,156,223,
+212,100,231,156,222,243,204,231,247, 50,165, 53,132, 64, 54, 61,235,135,129,126, 7,119, 38,240,174,185, 67,235,196,127,242,159,
+255,125,254,155,127,244, 51,246,218,252,255,153,251,211,104, 93,211,244,190, 11,251,221,211, 51,188,195,222,251, 76, 53,117,117,
+ 85, 87,207,221, 86,183, 37, 89, 45,227,150, 49, 32, 12, 49, 96, 28,219, 64, 0,199, 96, 45, 49,153,149,176,178, 18, 2,193,100,
+ 49,100, 97, 12,100,241, 37, 31, 2, 49, 24, 72,156,196, 96, 67, 28, 2, 14, 88,198,150,108, 89,150, 37,203, 18,178,213,221,170,
+174,174,170,238, 26, 78,157,121, 15,239,244, 12,247,148, 15,215,253,188,239,187,207,169,106,203,178,147,160, 94,123,213,169,210,
+ 57,251,236,253,238,231,189,175,251,186,174,255,255,247,231,244,180,165, 86, 53,235,205,200,249,110,164, 82, 6, 71,160, 49,153,
+108, 53, 85,227,132,104,228, 28, 40,139,115,134, 24,183,128, 98,183,217,114,235,246, 11,144, 13, 49, 41,124, 31,113, 14,140, 94,
+176, 60,125,137, 7, 79, 46, 49,214,113, 99,214, 50, 59, 59,229,157,247, 31, 19,208,220,189,127,159,197, 98, 73,221,131,186,243,
+ 28,247, 30,124, 80,138,137, 42,183,222,132,209,150,152, 5, 78,147, 67, 98,179,222,178, 88, 44, 4, 32,131,194, 26,135,209,226,
+117,191,121,227, 6,179,166,161,157,181,248, 97, 96, 12,158,133,158, 75,218,154,113,244,187,129,116, 2, 67,161, 30,213,237,140,
+172, 20,149,173,233,198, 13, 65,203,158, 78,251,145,208,111, 65,121,116,173,208,217,237,117, 11, 19,187,121, 74, 9, 75,105,186,
+ 93,171,103,110,232,186, 8, 22,167, 98, 97,237, 33, 83, 88,105,189,223,151,145,166,145,112, 46, 97, 5,106,175,183,200,165,160,
+147,101, 92,234,115,166,243, 30,227, 29,166,247,104, 59, 8, 79,188, 20,210, 89, 87,203,229, 74,155,130,162, 5,148, 35,105, 41,
+236, 89, 89,178, 25,177, 78, 24,239,106,178,228,164, 44,135,106, 10,101, 15, 16, 15, 42,255, 9,205,169, 20, 86, 24,157, 40, 45,
+ 69, 42,132, 32,224,136, 20, 37, 24, 39, 78, 94, 81,225,169,199,113, 36, 13, 35,113, 24,241, 62,144,111,221,166,158, 67,110,107,
+185,220, 20,114,159, 62, 28, 67,135, 95, 29,101,199,230,239,106,107, 51,191,106, 24,212,193, 2, 42,111,225,232, 71,114, 31,217,
+ 62,185,194, 15, 3,159,249,226,231,249,206,183,190,129,173, 23,220, 58,185,195,246,222, 22, 69, 68, 91,209, 56,132, 44,241,168,
+ 49, 39,180, 1,223, 71, 42, 35,233, 46,203,249,140, 20, 36,158,181,109, 91,174,118, 27,162, 49,140, 62, 82,215, 14, 91, 89, 46,
+ 87, 87,180, 78, 16,198, 17, 24, 66,198, 36,197,233, 98, 6, 49, 18,194,200,172,169,184,186,184, 20,175, 47, 22,157,203, 68, 39,
+ 39,106, 99,112,214, 16,253,136,115,154, 74, 25, 30, 94,118,204, 78, 78,121,178, 90, 83,207,107,214,125, 32,185, 37,168,134,182,
+170,177,149, 34,134,129,144, 6,102,149, 33, 36, 17,222,165,113, 44,207,117,160,239,197,246,165,163,102, 62, 95,146,213,165,140,
+235,125,195, 60, 37, 78, 78, 78,246, 83,158, 9,138,164, 39,210, 90, 10,226, 85, 79, 22, 16, 69,126,142,144,114, 60,202,202, 53,
+ 68,163, 81, 57,200,202, 35,176, 15, 45, 82,170,116,110, 73,147,113,229, 34,157, 4,202,162, 21,196, 72, 14,129, 52,140,248, 93,
+ 71,191,222,176, 94,173, 24,250,158, 97,219,209,119,221,222,111,142,210,116,187, 13, 93,183, 22,141,204,238,146, 28, 18,190,243,
+232,164, 72,117,198,135, 32,220, 5,229,104,173,149, 75,234,216, 81, 59, 75,162, 33,143, 25,103, 2,198, 52,132,208,163,140, 37,
+ 37, 97,127, 96,106,188,210,140, 64, 34, 21, 10,229, 65,228,122,208,216,148,153,217,241,148, 65, 77, 18,149,137,161, 41,157,127,
+142, 81, 34,184,179, 20,115,241,140,103, 12, 7, 33,180, 20,116,153,214, 24,163, 48, 73, 23,240, 84, 66, 37, 85,154,255,137,119,
+ 82,198,250,234, 72, 29,207, 20,150, 36,207,110,206, 10, 21,100,237,219,107,184,234, 3, 81,239,232,136,108,195, 72,231, 19, 55,
+122,207,162, 31,136,203, 1,183,156, 67, 28, 48,205, 9,166,106,201, 38,161, 76,133,209,142,108, 44, 90, 87, 36, 83,161,109,141,
+171, 71,104, 91,204, 98, 78,115, 50,103,113,181,102,183, 94,211,109,122,134, 97,192, 40,141, 51, 96, 85, 70,229, 72,140, 30,227,
+ 21, 42,121, 74,204, 93,153,110, 39,225,226, 88, 77,101, 5,136, 51,106, 75,175, 52, 57, 38,226, 24,240, 94,166,136,211,153,100,
+ 83,140,130,159, 75,145,148, 53, 73,101,201, 74, 46,249,189, 49,150, 17,163,201,251, 93,206, 20,176, 33,183,200,103,209,127,228,
+131,184, 67, 29,255,179, 8,238,114, 86, 34,104,202,226,103,142, 89, 10,198, 36,194, 74, 37, 5,107, 63,254,205,233, 41, 82,205,
+135,239,233,101, 18,166,121,255,157,183,121,238,185, 23,121,251,205,183,104,219,154, 27,103, 75, 82, 28,113,181, 99,237, 45,237,
+141, 23,120,239,254,125,154, 27, 45,175,124,252,121,118,223,121,143,211,106, 70,171, 28, 51,147,217, 94, 61,224,198,217, 66,124,
+238,125,143,154, 47,196, 59, 91,198,142,243,197, 12,165,102,172,186, 1, 27, 18, 75, 55,163,169, 42,162,247,156, 63,126, 64,248,
+212,199,153,181,210,233, 69,159,121,233,227,207,211,184,175,177,243,137,247,223,123,151,231,239, 60,199,221,247, 54,188,246,202,
+ 39,248,224,222, 7, 79, 5,128, 83, 70,181,137,186,170, 25,131, 23, 29, 77,206,204, 22,115,241,100, 43,197,232,125, 65,128, 30,
+108, 19,135, 91,191,116, 16,214, 84,116,125,207,102,187, 67, 91, 39, 20,186, 66,162, 67,107,218,118,198,213,118,139,206, 2, 1,
+201,190,199, 25,131, 54, 14,147,236, 51, 72, 66,233, 82, 39,169,215,179, 73, 68, 83,193,126,118,175,166,158, 77,211,251, 46,137,
+ 60, 42,139,125, 69,161, 69, 32,149,133,175,220,247, 67, 1,224, 8,196, 35, 39, 97,100,231,148,168,170, 40,129, 37,106,154,255,
+ 72,214,122, 42, 7, 14, 89,139, 7, 91,200, 31,251, 55,206, 65,220,147, 63, 20,145,140,146,221,153, 50, 2, 23,177,133,153, 62,
+125,196, 16,228,235,224, 48,102,140, 41,115,126, 46,250,135, 33, 68,188, 15, 44,111,222,100, 22,151,212,109,131,173, 76,153,140,
+ 29,239,217,217, 99, 51, 57, 10,186,248, 40, 27,218,223,200, 78, 93, 29,161, 30,148,130,190,239,209,198,240,240,209, 67, 62,241,
+233, 79,177, 56, 91,210,125, 51,242,249, 47,125,137,111, 93, 93,136,154, 91,131,181, 10,124,177, 12,149, 85,139, 41, 89,217, 37,
+ 90,140,182, 54, 12, 62,114,118,118,163,240,247, 19,151,151,151, 2, 99,201,114,232,196,148,208, 70, 68,115, 57, 39, 66,128,182,
+109,176,198,176,235, 59, 26,231,216,108,182, 37,231, 72, 51, 12,129,186,182,101, 29, 34, 90,150,229,162,165,169, 52, 99, 63,226,
+ 3,132,206, 50,132,196,122,157, 88, 93,118, 36,103,112,243,138,217,141, 68, 50, 35,163, 50, 68,103,112,246,148, 25,134, 60, 4,
+146,246,140,118,131, 15, 35, 57,121,200, 3,253,208,179,235, 47,241,113, 3,219,138,174, 91,115,118,114,134, 74,145,202, 25,154,
+242,156,167, 24,201,149, 59, 74,210, 43,202,101, 2,218, 76, 2,198, 84, 44,229,133,203,161, 82,193,164,232, 67,150, 64, 40,221,
+166, 86, 24, 50, 57,143,232, 16,246,127, 62,251, 64, 8,158,177,239,217,173, 55, 92, 62,121, 66,223, 73, 48,145, 31,228,249,243,
+195,192, 56,140,194, 25,215,226,202, 24, 6,191,119, 54, 52, 77,203,229,147, 43,134,222,147, 82,166,109, 43,185, 0,164, 36,214,
+192, 44,177,169,193, 15, 52, 85, 45,103, 75,240,140, 67,194,107, 67,221, 46, 68,143,144, 34, 9, 83, 38,146,210,189,203,232,187,
+128,146, 50, 31,234,128,202, 71,162,217, 41, 79, 93,149, 21,173,222,183,134,185, 96,165,101,250, 21, 77,201, 66, 40,118, 89, 83,
+190,175, 84,154,190,152, 51, 62,101,172,145, 6, 33, 41,185,172,230, 50,173,205,228,107, 19,228,107,171,144,242, 94, 53, 74,220,
+ 0,109,229,104,107, 75, 93, 89,140,202, 4,239,217,238,192, 26, 37, 5, 55,140,248,224,105,162,120,199,171,121,196,181, 3,166,
+154,131,157, 29,146,224,156, 69,155, 6,109, 20,206,214, 40, 87, 99,171,134,166,106,153,183,115,198,147, 51,118,235, 13,219,245,
+ 21, 99, 63,200, 42, 51, 5,114,144,201,103, 72,145, 84,108,183, 19,177,114,250,200, 33, 30,213,213, 50, 5, 45,171, 27,225,146,
+200, 10,113, 12, 1, 27, 66, 56,208,121,162, 96, 29,245,148,162,147, 19,217, 24,185,145, 60,115, 40,171,107, 80,154,227, 52,158,
+ 41,141, 43,171,201,198,112, 56,242,212,193,164, 91,108, 80, 69, 32, 85,212,213,178, 5, 73,123,245,116,206, 71, 9, 92,249,186,
+245,231,122, 64,128,252,189, 42,101,116,202, 60,124,255,109,198,221, 21, 23,231, 3,231,235, 83,214,187,129,135, 79, 30,243,202,
+203,175, 50,191,113,135,240,224, 17,209, 84, 60,188,184, 98, 28, 3, 87,187, 43, 86, 17, 94,125,254, 14,159,250,212,167,200,253,
+134,156, 18, 29, 17,173, 36, 5, 77, 59,205,108,177,196,103,197,232, 3,205,108,193, 15,254,134, 31,226,175,254,226,207, 19,250,
+ 14,123,162,120,252,240, 46,223,126,107,198, 98, 57, 67, 43,197,114,113,147,229,172,230,246,217,130, 15,206, 87,172, 46, 47,120,
+229,197,143,241,228, 94,205,231, 62,245, 57,126,246, 47,253, 12, 62,199,107,111, 0,107,237,222, 69,208,247, 3,198,136,192, 40,
+165, 68,215,117,123, 79,187, 41, 69,172,235,118,178,111, 84,138,182,169, 37, 31, 61, 39, 22,203, 5, 90, 27, 70, 63,210, 86, 53,
+198, 42,118, 93,143,139, 9,140,165,105, 90,182,221,192,197,227,199,168,126,141, 13, 91, 81,210,170,201,114,115,189, 83, 63,140,
+207,242, 95, 83, 89,125,204, 47,200,249,195,237, 46, 31, 57, 26, 46,130, 18, 38,116,100,158, 60,171,153, 97, 28,203,127, 19,233,
+124,140, 30,239, 71,234,170, 41, 42,101,189, 39,223, 97, 28,202,214, 40,163, 48,217, 94,219,177, 77, 49,167,178, 99,157,166, 69,
+135,224,137,235,225, 67, 74,178,192,181,193, 26,177,111, 25, 45,194,151,137,100, 21, 67, 1,130, 40, 13, 68,124,200,108, 55, 43,
+ 17, 90,133, 32,251,246, 16,153,159,156,208,206,103, 88,103,201, 69, 84, 38, 40, 88,246, 29,207,161,112,171,191,105,254,245,143,
+122,221, 99, 74, 24,231,216,108,174, 88,158,156,242,220,157,155,124,235,205,111,242,125,191,225,135,120,235, 47,253, 52,239, 46,
+150,146, 42,165, 21,149, 53, 36,175, 74,119, 6,149, 51,178, 66, 83,147,114, 57,227,172,136, 33, 99, 17,122,142, 33, 81,149,220,
+118,237, 28,171,243, 75,180,209,133, 35,160, 81, 72,204,233,201,114,201, 56,138,111, 92, 70,139, 3, 57,102, 94,186,125,139,119,
+190,243,128,179,179,166, 16, 10, 51,139, 89,131, 51,134, 24, 51,166, 50,188,247,104,164, 62,185,201,119,238,174,232, 3, 98, 41,
+ 82,129,100, 71,244,163, 43,230,203,138,179, 89,195,237,147, 83,116,157,208,173,195, 44,102,178, 62,240, 21,253,110,199,176,219,
+225,140, 66, 41,143,143, 61, 62, 70,208, 21, 42, 71, 84,150,188,121,107,229,103,110,157, 36,198,153, 24, 8,193, 96,138,253, 76,
+ 28, 33, 81, 82, 11,141,217,235, 66, 52, 19,232, 40, 73,144, 78, 40, 46,160, 40, 90,134, 34, 11, 67, 77, 28,246, 20, 9, 33,208,
+117, 29, 87,231, 23,140,195,192,102,179, 17, 64, 79,121, 86,131, 23,254,188,247, 30, 82, 22, 87,130, 17,178,157, 42,120,224,121,
+ 92,176, 89,119, 52,237, 2,165, 59,114, 30,233,251,192,110,215,179, 88,156, 16,162,136, 69, 49,236,191, 46, 87,183, 84, 90,149,
+ 12, 13, 41, 44,144,169,107, 71, 24, 61,214,206,246,142,157, 73,251, 99,148,218,235, 69, 14,239,153,124,141,242, 57,157,225,154,
+ 76,228,200, 57,117,141,127,168,142,168,233, 7,155,155,181,146,163, 96, 16,187,219,100, 19, 53, 70, 4,147,222,138, 61,242, 80,
+ 31,166,166,243,184,158,171,107,107, 66,163,197, 69,229,140,166,173, 29,181,179, 52,149,149,180, 72,163,168, 10, 52,105,232, 7,
+ 20, 18, 12, 22, 66, 34,135, 4,193,163,252,128,154, 5, 84, 29,192,138,152, 78,105,139, 50,226,134, 80, 49,201,116, 67, 87,100,
+ 83,227, 92,131,171, 7, 92,237,168,103, 53,253,118,139,239,122,252, 56, 8,205,114,136, 36,239,139,158, 66,250,216, 16,165, 33,
+136, 65,126,222, 99,193,201,250,224,203,180,240,104,178, 88,244, 65,164,132, 29, 71, 79,178, 18, 6, 31,149, 42,209,145,121, 63,
+ 26,215,230,104, 31,250,116, 71, 69,161,120, 77, 41, 86, 71, 7, 98,154,240,112,165,160,155, 73, 1,188,239,244,229,207,198, 82,
+204, 67,146, 78,112, 42,244,211,184, 38,163,228, 7, 6,215, 85,216, 83, 71,127,244, 65,206, 24, 18,175,189,242,113,238,189,255,
+ 62, 90, 65, 59, 95,240,232,114,203,123,143, 46,232,253,200, 87, 95,121,149, 7,247, 30, 17,253,192,251,239,189,207,237, 87, 62,
+206,105, 99, 88,156,156,113,117,217,241,193,131, 7,188,112,243,148,218, 53, 92, 60,122,200,174, 15,204,151,183, 69, 45, 62,236,
+112,179, 25, 79,158,172, 81,174,230,203, 95,250, 94,254,222,223,241, 59,112,109,205,159,251,127,255, 55, 44,230, 13,109,227,176,
+ 86,241,203,223,252,101,200,138,139,171, 13, 95,190,115,155,239,255,210, 23,184,247,103,127,138,251,247,222,227,147, 47,191, 76,
+223,109,121,229, 99, 47,211,214, 45,190,219, 92,123, 24, 67, 8,130, 3,116,142, 48,140,104,164,155,234,250,158,166, 0, 48,114,
+241,243, 42,173, 25,123, 57, 0,102, 77,195,124, 62, 99,209,206,152,207,231,197, 38,225,168,171,134,171,203, 43,218,249,130,148,
+ 18, 87, 87, 43,140,171,208, 85,141, 82,154,126,183, 97,105, 35, 42, 15,178,159, 82,106, 95, 92,158,233, 92,143,146,194,212, 71,
+ 4, 12, 60,109,111,249,149,194,137, 38,232,144, 58, 42,236,122, 82,210,151,203,222, 24, 34, 57, 13, 28, 9,237,201, 41, 51,250,
+ 40,202,228,242, 38,118,117,141,171, 90,180,220, 95,246,187,108, 17, 99, 74,145, 17,107, 84,225,225,167,184,255,117,218,199,140,
+ 78, 23,201,131,197, 38, 43,161,218, 9, 46,215, 16,140,140,145,189,242,114,211,206,251, 57, 1, 49,120,250,237,166, 36,162, 5,
+194, 56,226,251,145,116,243, 22,205,108,134,171, 5, 19, 89,130,168, 72,154, 61,171, 93, 63, 69, 77,252,168,117, 83,254, 21,250,
+224,158,241, 15, 31, 18, 24,138, 98, 59,241,177, 87, 62,206,197,213, 57,183, 95,126,153,151,158,187,205,246,254, 61,116,211,160,
+140,162, 42,133,105, 44, 41, 83, 40,185,124,134, 24, 8, 17,172,149,174,199, 40, 25,237,102, 31,246,249,239,117, 83,145,179, 97,
+179,219, 48,250, 76,211,218,125,225, 87,100, 78,151, 11,198, 97,160,114,142,232, 61,221,110, 71, 12,137,121,219,208,119, 29,214,
+ 22, 84,106, 9,126, 49,186, 36,150,145, 57,191,236,105, 23,115,206,215, 29, 67, 84,116,131, 6,229,208, 74,220, 8, 97, 13,151,
+ 87, 35,231,116,188,239,174, 88,158, 56, 94,120,113,201,173,219,167, 44,150, 53,237,172,162,118,150,177,106, 36,205, 49, 12,132,
+180, 35,132,132,173, 18,195,216,179,221, 24,140,178, 92, 93, 94, 10,101,172, 80, 37,109, 85,244, 47, 24, 57, 96,181,248,235,149,
+ 53,104,107,139, 46, 36,239,133, 79, 41,136, 7, 57,165, 36,216,229,156,100, 85,152, 2, 67, 63,224,125, 96, 24, 61, 49,142,236,
+118, 59, 54,155, 13,219,237, 22,107, 12, 93, 63, 16, 99, 20, 69,122,161, 70, 98, 12, 41, 70,154,162,255,208,102,178,122,214,212,
+ 33, 98,237,192,110, 39,233, 98,237,108,206,118,213, 49,244,137,113, 28,101, 89, 20,188,164,193,197, 68, 74, 26,109,170, 98,109,
+ 77,248, 97,192,206,103,248,173, 7,165,104,154,138,203,174, 67, 23, 90,158,113,178,198, 50,185,164,178, 77, 15,113,126, 54, 0,
+204, 42,179,135,237,100,100,213,146,139, 14, 33,229,201,234, 76, 1,176,104,170,202,210,212, 53, 77, 83,224, 44,206, 97, 10,116,
+ 39,164,132, 15, 14,239, 3,222, 59,134,177, 34,148,194,151,138, 75,107, 42,232,154,252,204,212,112, 47, 90,212,114,193,176, 70,
+ 81, 59, 75,101,181,252,179, 4,241, 24,103,169,140, 66, 35, 23,201, 97, 55,200, 4,123,140,164,209,193, 40,235, 53,211,142,232,
+118,142,174,103, 40, 87,161,140, 32,103,117, 57, 99, 20, 14,180, 35,153, 10,101, 42,180,213,216,166,193,213, 21,195,118,203,176,
+221,208,111, 55,140,125,199, 24, 10,165, 49, 31, 26, 5,239, 99, 33,114,122,198, 32,151, 61, 31, 34, 41,133,114,177, 46, 86, 75,
+235,138, 42, 62, 96, 55,187,129,202,197,162, 44, 45, 62,196, 36, 22, 34,179,231, 85, 31,146,160,246,131,148, 73,205,172, 14,119,
+ 46, 74, 65,158,236, 72, 19,112, 72,163,240, 83,199,190, 79,239, 41,160,146,152, 8,101, 95,155,202, 3,191,223, 37,230,105, 92,
+163,143,198, 56,135,169,192,211,193, 51,114,160, 39,208,138, 80,184,196,157, 79,140, 25,182,131,116,120,173, 51, 52,202,115,115,
+ 49,227,201,213,134,245,197, 5,121,115,197,237,231,231,140,122,100, 48,240,222,195,199,252,192, 23, 63,203,230,242,138,180, 29,
+216,110,183,196, 33, 96,103, 53,155,109, 79,192, 50,107, 23,252,149,175,189,206, 31,249, 99,255, 15,198,110,205,170,228,149,159,
+181, 75,148,171,120,120,126,137, 87,154,245, 56,242,242,203, 47,226,117,228,199,255,226,207,240,248,241, 67,154,166, 34,134,192,
+217,201,146,219,183,110,178,122,127,115,109,132, 29, 66,216,187, 13,118,193, 83,213,117,121, 45,229,117, 24,135,129,211,211, 83,
+134,113,100,177, 88,144,203,239,175,235, 10, 80,184,170,162,109, 91,108, 85,209,117, 35,202,136, 56,236,254,131,135, 84,117,131,
+143,145,101, 12,152,232,104,234, 25,159,120,229, 85,118,143,191, 77,223, 13,130, 43,204,250, 25, 33,226,181, 55,234,135, 20,150,
+195, 4,230,122, 30,192,135, 5, 15, 28,192, 67, 79, 9,191,166, 27,126, 65,111, 22,170,133, 60,103, 25, 50, 81, 4,117, 41,226,
+163, 24,124,180,117,152, 74, 2, 53, 36,170, 83, 14,200, 97,244, 84, 77,162,170, 51, 85, 35,151, 20,109,100, 4,138,142, 76,233,
+ 2, 41,230, 82,152,194, 83,211,136, 67,240, 10,234, 58, 58, 73,105,133, 81,134,140, 59,128, 49,140,129,113, 32,132, 80,118,180,
+ 17, 18,104, 60, 67, 17,242,196,113, 20,139, 74,215,115,114,118,147,217,169, 80,241,140, 85,178,163,213,148, 16, 29, 57,229,254,
+102,194,104, 62,242, 66,165, 68,181, 61,155,207, 49, 74,211,198, 5, 47,222,186,133,201,137,122,121,138,173,103,130,200, 85,129,
+ 76, 64, 25, 69,142, 16, 83,164,117, 53,163, 79, 69,196,168, 88, 46, 90,250, 93,135, 54,173, 40,204,125, 79,189, 88,160,163, 98,
+179,237,233,134,161,196,134, 38, 42, 87,179, 89,239,120,238,185, 83,249, 92,237,140,205,122, 77,244, 3,126,240,168,156, 89, 46,
+231, 60,184,119,193, 98,225,136,113,196, 40,249, 59,180,213,248,172, 24, 66,226,201, 78,177,184, 85,113,247,242,130,199, 3,164,
+100,138,211, 2, 48, 10,155, 96, 54,175,233,115,160, 27, 71, 62, 56, 31,120,112, 57,112,115,113,197,171, 31,191,205,243, 47, 45,
+152,213, 53,109,219, 50,111, 90, 97, 57,116,142,148,123, 32, 8,118, 52,202, 57,181,235, 71,218, 49, 80,141,129, 42, 8,185,173,
+ 74,178, 26, 83, 25, 81,100, 27,185,236,105, 37, 43,150, 20, 66, 9, 22, 26, 33, 70, 84, 70, 52, 23, 49,145,195,128,239,118,140,
+187, 29,155,205,150,152, 20,221, 48,178,235,183,164,156,217,108, 55,197, 26, 39, 19,149,202, 85, 50,178,213,236, 39, 83, 10,104,
+155,102,127,193, 55,214, 97,171, 10, 23, 18, 77,179,100, 28, 19,209,139, 46,105,187,218,144, 83, 68,169,196,110,183, 41,133, 61,
+144,194,136,171,102,120, 63,208,119,134,249, 13, 97,176, 27,165,177, 74, 49,118,163, 4,137, 88, 71, 72, 25, 55,125,143, 90, 81,
+ 25, 83,206,244, 74, 86, 98,153,103,139,168,158, 44,106,215, 93, 23, 83,200,209, 4,211,177,165,216, 86,149,163,169, 28,117, 35,
+226, 82,231,220, 62, 68, 41,101,161, 83,134, 16, 8,161,198,123, 95,104,149,225,232,189, 82, 68,199,124, 88, 80,104,113, 33,152,
+146, 92,167,197, 70,237,140, 22, 20,171, 21,241,179,182,194, 41, 80,164,253, 52,111,216,201,179,217,239, 52,155,121, 71, 51,219,
+209, 44,123,234,197,128,157,141,152,186,198, 52,243, 50, 29, 44, 58, 34,163, 65, 87, 50, 53, 52,146, 81,161,156,248,223, 77, 93,
+151,203,145,188, 38,227, 70,116, 17, 49,166, 18,136, 37, 26,178, 24,164,192, 75,172,173,232,142,234,202, 97, 10, 24, 73,206, 45,
+113, 16,248,224,177, 93,239, 9, 49,203,139,103, 77,233,152, 97, 12,162, 46,212,123, 53,225,145, 47,249, 41, 64,128,153,210,166,
+142,216,211, 89,229, 67,170, 85,241,237,170,233, 22, 87,140,206, 49,149, 47, 52,243, 20, 97, 78,237,129, 54,234, 41, 70,252,228,
+254,184, 94,216,143,246,190, 36,108,213,242,206,131,115, 62,247,197, 47,115,190,218,112,255,173,111,227,180,162,173, 29,119,223,
+123,135,212,117,156,204, 42, 46,214, 34,152,104, 12,204, 93,166, 87, 35, 91,163,120,112,126,197,119, 30, 8,156,162,106,106,186,
+190,103, 36,208,106, 67, 42,236,234, 71,143, 46, 88,158, 25,222,120,227, 13,186,237, 21,125, 30,137, 74, 17,149,227,114, 61,240,
+151,254,251, 95,162,207,153,139,110,195,213,213, 21,203,197,140,215, 62,241, 42,127,245,245, 55,121,231,189,239,144, 8,124,235,
+205,215,121,233,197, 23,120,251,253,119,143,246,214, 1,133,166,239,101,220,174,141, 97,219,237,168,156, 67, 43, 69,223,247, 84,
+ 85,197,110,183, 35,165,204,213,229, 37,149, 53,212,117,197,108, 54,167,105,106, 78, 78, 78, 48,198,208,117,131,160,103,199, 17,
+148, 97, 54,159,177,217,118,244,195,200,106,181,226,228, 70, 77, 91,207, 48, 54,177,250, 96,135, 86, 30,178,133,108,174,121, 73,
+255,122,181,217, 31,218,221, 63, 83,224,167, 28,105,174, 9,195,246,172, 41, 37, 35, 62,193,197,234,125,122,153, 86, 25,149, 53,
+218, 72,154,214,124,177,100, 57,159, 49,107, 27,156,209,196, 24,217,172,214,172, 54,107,250,174, 35, 36,217,177, 87, 37,128, 70,
+167, 72, 54,177, 8,205,212,254,160, 56, 94, 49, 60, 77,195, 82, 74, 95,219, 13, 30, 46, 96,166,184, 20, 44,198, 4,241,224,171,
+161,216,223, 34,137, 68, 80, 1,157, 35,236, 34, 97, 28, 24,250,158,110,183,165,219,172,153,111,207, 56, 61, 59,165,157,207,168,
+219, 6, 99, 13,198, 77,192, 5,132,100,199,117,222,195,225, 61,150,127,213, 59,245,167,255,251, 4,241,233, 54, 91,110,221,188,
+141,182, 21,228, 68,213, 46,113,237, 28,227, 12,182,132,140, 72,135,149, 14,140,122,216, 99, 99, 23,115,203,250,114, 32, 4,143,
+ 82,134,190,239, 89,156,157, 22,206,248, 6, 99,173, 8,130,208,236,250, 1,231, 52, 77, 93,115,126,113, 78,104, 42,172, 54,116,
+163, 71,145, 89, 46,230,248, 49,160,181, 28,170, 66, 23, 84, 84, 77, 77,239, 7,124,231,121,188,246,216, 27,103,252,133,187,151,
+220,235, 34,171,172,132,120, 26,163,136, 63,179,198,144,185,169, 96,225, 42, 22,205, 9,243, 49,178,222,238,120,120,229,185,216,
+220,227,249,135, 53,175,126,236, 54,207,221, 88,176,152, 85,204,102, 18, 36,228,188, 39,229,129, 16, 70,178,178,140, 65, 49, 6,
+193,142, 58, 31,168,134, 64, 85, 75,154,150, 50, 70,108,164, 5, 88, 52,177, 24, 38,187,111, 74, 81,232,119, 49,144, 67, 32,251,
+ 72, 24, 70,182, 87, 79,216, 94,158, 19,253,200,102,215, 49,248, 68, 55,120,172,149, 56, 90, 99,180, 8,131,181,132,200,212,109,
+ 75, 83,213,212,174,218, 95,250, 67, 8, 7,241, 41,138,224, 35, 33,122, 34,144,179,166,105,107,170,166, 98,113, 58,231,228,100,
+134, 31,101,197,102,157,161, 31, 6, 65,244, 26, 65,238,170,156,202,165, 62, 73, 33, 85, 74, 70,254, 41,225, 92,141, 54, 61, 33,
+137, 21,181,114,150,249,188,193, 90, 77, 72,146,131, 42,104,234,178, 6,213,122, 31,195,172,245,209,104, 93, 79, 53,129,107, 53,
+ 99,154,226, 26, 35, 8,224,170, 60,147, 19,141, 77, 31, 17,248,166,142,212, 71,225, 39,200,222,185, 92,200,211,179,210,171,235,
+235,128,163,230,161, 76,144, 11,129,118,207,253, 87,147,238,164,172,145,209, 34, 12,246, 49, 18,251,145,203,117, 66, 61,217,210,
+182, 43,230, 39, 43, 22,167, 43,102,103,103, 52,243, 5,110,214, 99,155, 25,184,154,236, 92, 65,206, 90,193, 1,151, 58,169,141,
+ 52, 33, 88,135,182, 22,235, 92,153,156,110,217,110,182,116,187, 30, 79,148,117, 28,154,172,178, 92, 62,178,193, 78, 4,194, 61,
+ 51, 36,151,233,160, 52,193, 62, 6,236, 16, 2, 33,101,116,217,209, 8,132, 94,239, 5, 69,234,200, 63, 61,249,209,247, 62,118,
+ 35, 2, 45,231, 28, 22,185,225,216, 50, 6,210, 19,120,164, 36,239,168, 44, 42,103,193,222,197, 34, 24, 41,164,184,162,132,159,
+168, 76,135,224,150,162,155, 47,121,191, 19,156, 32, 31,204,211,207,236,213, 33,211,249,196,233,237, 23,121,225,213, 79,241,246,
+207,252, 37,238, 63,122,136, 85,240,210,139,119,232,186,158,133,179,164,148,104,219,134,186,157,195,184, 35, 12, 3, 47,221,113,
+248,149,229,254,189,129,183,238, 62,228,185,214,112,121,177, 97,126,170,185,245,252,199, 25,208,212,205,130,246,198, 41,118,237,
+121,254,133,151,120,252,232, 46,183,110, 46,248,218,195, 15, 24,251, 30,157,224,114,183, 70, 59,203,206, 7, 94, 57, 59,229,201,
+229, 5,159,250,220,103,248,251,127,219,111,227,191,255,198,191,203,215,190,241, 75,124,249, 11, 95,224, 79,253,233, 31, 99,126,
+178,124,106,148, 42,123,164,148, 19,253,208, 23, 24,139,136,131,200,121, 31,255, 23, 67, 64, 27,195,106,181,226,198,233, 41,166,
+236,215, 66,136, 88, 99,168,235,166, 8,238,114,225,118,103,188,247, 52,133, 3,223, 15, 3,249,106,197,201, 92,225, 82,207, 56,
+238,112,185, 20,187,172,158,125, 35,252, 13, 64, 79, 62,108, 68,124,184,196, 29, 11, 34,121, 6,161,154,167, 8, 82,166, 76,233,
+ 76,109, 29,139,197,130,229,201, 41,103, 55,206, 56, 93, 46,153,183, 53,206,202, 27,127, 49, 95, 96,159, 56,206,207, 47, 24,251,
+238,224,212,208, 10,147,235, 67, 34, 26,250,200,130,115, 93,224,119,224, 53, 8, 23,251,217,169, 69, 42, 19, 44,133,214, 9,101,
+229,115, 89,109,241,163, 20,246,152, 34, 62, 6, 84,200, 36,173,196, 97, 16,252,190,176,183,155, 53,219,245,154,211,179, 51, 22,
+167, 39,212,109, 75,213,212, 88,107, 73, 86,161, 83,190,150,238,246, 97, 20,229, 95, 77,167,174,174,137, 27, 37, 5, 47,199,196,
+124,185, 40,174, 85, 41, 80,139,229, 9,166,170, 8, 41,210, 90, 1, 29,150,101, 27,214, 41,114,244, 98, 27, 13,153,202,166,178,
+119,135,177, 11,228,236,169,172,176,223, 67, 8, 12, 99,160, 89, 84,164,164, 36,252, 68, 41,218, 90, 19,188,231,228,100,201, 48,
+140,244,155, 29,126,204, 44,231, 21, 77, 83,177, 89,175, 49, 70, 98, 94,189, 15,220, 60,155, 19,162, 39,164, 76, 23, 32,154,138,
+ 15,158,236,120,119, 21, 88, 97,240,206, 50,120, 47,135,116, 86,228,168, 65, 37,158,172, 70,170, 60,114, 98, 20,103,198,114,107,
+209,176,136,129,237,102,224,254,131,129,110,117,143,221, 75,115, 94,254,216, 41,179,121, 35,171,155,217, 9, 89,201, 10, 50,122,
+ 47,164, 56, 91, 19,162,208,233,134, 49, 80, 13, 94,208,192,101,215,168,116, 33,207, 21,212,106, 74,161,184, 58,196,205,147, 83,
+ 32, 71, 79,240,158,177,219,209,109, 54,108,215, 43,252,208,177, 27, 3,253, 24, 65, 59,172, 54,212, 78, 72,118, 40, 67, 91, 34,
+ 92,171,186,150,177,110, 33,225,197,152,232,250, 81,114,238, 17,243,198, 56,200,215, 42, 69, 68, 4,125, 74, 75,103, 58,155, 53,
+ 60,206,147, 37, 76,147,114,194,143,158,186,149,201,161,177, 51, 66, 12,251,120,222,169, 33,243,227, 72, 61, 63, 67,171,109,201,
+ 85, 72,104, 43, 77,130,209,169,156, 81, 98,241, 99, 15, 10, 99, 31, 98,100, 38, 18,168, 81, 7,135,140, 86,135,231,250, 40,134,
+213, 20,199,140, 51,186,184, 85, 74, 61,209, 26, 93, 46,224, 49, 40,188,201,184,160,240, 90,147,146, 41,187,127,181, 7, 64, 77,
+240,158,252,244,138,118, 15, 85,219,231, 61,146,137,135, 24,220,114, 73, 53, 71,113,201,148,169, 69,204, 90,242, 42,198,196,208,
+119,108,214, 91, 86,151, 87,204, 79,102,156,172, 87,156,220,184,201,252,228,132,122,177,192,182, 51,116, 51, 71, 85, 50, 49, 82,
+ 90,139,162,223,105,148,145,181,118, 46,171, 69, 7,204,180, 22, 48,150,214, 36,165,201,221, 64,240,146,136,232, 16,118,192, 52,
+122, 80,218, 92, 59,143, 82, 78,251,117,108,136, 17, 43, 86,170,194,244, 78, 1,163, 20, 33, 78,254,116,181,127,177,153, 68,111,
+197, 2,101,237, 97, 60,152, 83, 6,123,216,139, 84,214,236, 81,139,198,136,152, 38,149,157,101,192,163,178, 18,149, 95, 78,251,
+176,123, 10,241, 40, 77, 35, 78,117,224, 34, 79, 22,137, 92,198,241, 83, 17,152, 20,216,249,168, 72, 40,173,121,249,149, 87, 89,
+117,153, 59, 55,111,241,157,183,223,166,210,154,155,103, 11, 78,230, 45, 58,103,162,181,180, 85,203, 39,158, 59, 97,110,192,135,
+154,104, 18,201,104,148,142,104,149,120,178, 94,241,220,173, 79, 48,170,115, 78,195,200,102,125,201,226,249,143,177,238, 54, 60,
+184,123,151,136,230,225,253,183,120,242,248, 33, 74, 69, 82, 28, 81,203, 5, 99, 31, 8,131, 40, 83,157,155, 49,155,223,224,107,
+223,186, 32,180, 3,191,230, 43,127, 59, 63,250,123, 53,127,246,199,255, 20,143, 46, 55,252,208, 87,127, 35,111,188,241, 58, 39,
+ 77, 75, 55, 12,242,115, 80, 50,218,228,120,191,140, 8,104,140, 54, 83, 43, 76,219,182,242, 3,142,162, 2,143,222,179,219,110,
+ 37, 89, 41, 38,170,170, 69,105, 45,104,205,130,102, 77, 19,103, 93, 27, 30, 93,174,121,169, 94,178,126,252, 0,227, 47, 33,121,
+ 34, 90,226, 93, 39, 95,161,202,207, 80,255,247, 55, 68, 33,248,203,255, 84,249,153, 77,137, 0,123,198, 66,222,107, 36,116,193,
+ 73, 50,133, 91,112, 0,237, 76,159,227,136, 77,124,164,177,201, 36, 21, 5,207, 88,222,108,117,221,112,114,178,228,230,205,155,
+220,188,117,147,211,147,211,253,168, 78, 17,105,230,115,176,154,144, 50, 23, 23, 87,120,239, 81,218,148, 55,141,197,153, 4,166,
+ 20, 75,173, 65, 89,116, 6,163,227,225, 98,165,167,105, 84,137,200, 60, 58, 24,166,142, 94, 14, 49, 17,167,144, 82, 25,249, 26,
+ 84, 93, 19,140, 65,133, 32,254,224, 40, 23,103,149, 19, 49,143,232,152, 72, 41, 48,248,145,190,219,177, 93,175, 56, 89,223, 96,
+113,114,202,124,185,164,105,103,184,198, 21,236, 35, 37,240,226, 0,227, 56,214,183, 28,116,117,106, 15,243,120,122,202,242,140,
+144,113,122,170,178,218,175,206,180, 41,207,150, 42, 62,112, 20, 85,219, 82, 55, 14,109, 34,206, 24, 66, 14, 36,149, 4, 32,211,
+192,160, 35,138,150,148,118,204, 27, 69, 74, 3, 90,105,124, 31, 80,133,246, 22,124,207,208, 7,152, 80,170, 49, 17,119, 3,179,
+179, 37,105, 12,212,117,205,182,219,145, 48,172, 59,207,162,133,166, 81,108,118,107,162, 86,248,100, 25,187,145, 23,111,182,100,
+ 21,217, 38,207,118, 23, 24,187,154,116,186,228,175, 62,250,128,157, 50, 36,101, 25,125, 46, 0, 35,241,120, 7,162,224,108,147,
+ 70,101,195, 85,138,168, 69,195,106, 24, 56, 67,113, 54, 59,161, 31,118,156,119,129,225,238,134, 68,226, 99,119,102,204,150, 51,
+236, 92, 81,185,150,170,174,160,106, 75,254,132,102,244, 1, 55,120, 6, 55,208, 86,174, 0,137,202,202, 42,235,242,156, 9,164,
+ 75, 30,165, 68, 86,137,196,193,169,145,188, 64,138, 66,148, 20, 67,159, 52, 41,155, 61,119,190,109,103,216,166, 69,219,138, 69,
+187,160, 54, 14,109, 20,195,232, 89,143, 43,134,173, 39,238, 32,134,200,214,175, 9,106, 68,133,140,209, 21,219,177,103, 86,207,
+168, 75, 76,234, 48,116, 36,239, 25,131,228,168,251, 49,145, 91, 45,151,227, 90,118,232,153,130,138, 54, 10,107, 91, 84, 10, 24,
+109,136, 49, 97,210,200,216,107,154, 51, 11, 5, 7,236,138,182,100, 54,107,168,117,222,231, 61, 29, 50, 33,166, 73,173,218, 71,
+ 50,235,169,193, 43,150, 87,233,216,167,115, 96, 58,229,228,204,217, 95,170,201,232, 28,209, 73,166,115,135, 96, 41,185,196,104,
+ 45,142, 64, 56, 38,147, 23,118, 74,217,169, 79, 69,111, 58,211,242, 4,204,201,106,175,166, 87, 40, 82,217,160,161, 20,217, 8,
+ 13,210, 29, 93, 60, 2, 98, 43, 83, 17, 48, 35,145,204, 48, 4, 86,187,200,197,118, 96,185,241,220,218, 68,110,220,242, 44,207,
+122, 73,128,155,247,152,102, 64,213, 51,178,157,161,116, 45,211, 28,196,201,161,141,134, 90, 2,118, 48, 21,202,181,152,118,129,
+ 91,108, 25,250,142,177, 31,165,176, 39, 17, 98, 82, 44,191,135, 11, 72,129,246, 76, 49,215,249, 40,122,245,120,108, 62,117,134,
+ 57,202,156, 94,171, 99,213,224, 20,161, 46, 89,191, 89,171, 3,198,245, 72,153,174,148,168, 49,109, 73,221,145,131,104,234,184,
+133,229,173,114, 46, 89,184, 19,204, 38,239,133, 98, 2, 54, 17, 48, 1, 89, 0, 41, 82,255,211,135, 28,174, 7, 36, 96, 46,254,
+226,151, 62,246, 50, 95,123,253, 45,182,155, 21, 97,232, 89, 46,102, 60,255,252,115,178,251, 81, 80, 53, 45,139, 89,203,114,214,
+ 18,186, 53, 94, 69,118,157,103,209,182,156, 45, 90,102,149,103,237, 35, 23,157,167,215, 53,151, 81,177,125,114,129, 25, 34,155,
+221,142,245,110,135, 54,134,147,147, 5, 99,236, 80, 57, 9, 82,246,236,148, 11,127, 69,138,129,147,211, 27,204,231, 75,252,144,
+248,230,183,222,230,235,223,122,135,183,238, 62,224, 31,250,159,254, 46,126,207,239,249,199,248, 47,254,179, 63,194, 95,248,137,
+ 63,197,247,127,249,215,161, 93,195, 55, 94,255,101, 86,155,181,144,143, 14,219, 7,241,115,154, 18,107, 88,194, 12, 8, 1,148,
+ 98,187,221, 80, 91,139,247, 35, 77, 93,149,220,231, 26,107,221,254,245,152,118,114,125,223,147,209,140,163, 8, 46, 98, 82,120,
+239,121,225,198,146,135,239,189, 95, 70, 77,154,156,197, 90, 51, 5, 35,236,237, 86,211,115,241, 17,241, 62, 31,218,137, 31, 95,
+ 4,246,184,198, 67,142, 77,254,176, 63,159,159, 30, 49,231, 67,214, 64,150, 8,211,202, 57,150,203, 5,183,110,223,226,214,237,
+219, 18, 20,226, 36,123, 93,229, 64, 61,246,146, 47, 80,128, 50, 93, 55, 20,165,124,192,165,233, 64, 40, 76,102,109,200,218,138,
+127, 87,167,103,216,213,170,136, 6,143, 93, 0,215,148,253,147, 34, 57,165,107,186,136,105,100, 40, 35, 82,179, 23,224, 9,104,
+ 35,226,125,143,207, 81,130, 38,118, 27,118,155, 53,179,229,146,197,242,132,147,211, 51,102,203, 19,154,217, 28, 87, 89,140, 21,
+156,164,177,178,115, 60,222,249,127,104,110,146,250,149, 44, 73,142,131, 54,212,145,241, 96,207,241,147, 14,197, 90,102,179,134,
+ 60,136, 29,106,175, 30,182,153, 33, 38,114,200,104,101, 56, 89, 24, 70, 31, 72, 89,179,235, 19,139, 90,227,195, 64,163, 28, 41,
+ 5,156,149,216, 96,157,179,232, 90, 42,135, 79, 50, 61, 50,218,240,228,209, 10,109,160,105, 28,227, 40, 29,110,215, 5,148,173,
+193, 36,170,182,101,183,221,176, 38, 50,218, 10,218,138,111,127,240, 16,143, 92, 46,198,144,168, 49, 40,149, 24, 21, 4, 45,126,
+115, 21,193,230,204, 92,139,175,250,211,191,238,123,121,255,157,119,184,247,214,187, 68,155,104,201,120, 5,187, 81,241,222,251,
+ 59,140, 31,185,121,219,211, 38, 69,110, 37, 82,213, 90,183,119,163,132, 16, 25,134, 17,103, 45, 67,235, 69, 0, 25, 19, 46, 79,
+ 26, 16,233,144,149, 78,232, 92, 4,126,229,208, 77, 49,146, 66, 20,198,187, 22, 65,155,117, 13,224,208, 78, 49, 63,169,168, 93,
+195,169,157, 17, 43, 67,111, 96,213,111,232, 55, 91, 46,159, 92,176, 90,173,232, 66, 15,212,216,188, 64,105, 67, 84, 61,218, 4,
+226, 24,105, 76, 77,183, 91,113,165, 53,205,108,198, 98,113,194, 24, 2,219, 97, 96,232, 3,193, 11,120, 69,246,175, 81,224, 56,
+ 89,206,235, 24, 2,202,137, 69, 45, 5,143,115,146,145, 96, 84,161, 7,106, 37, 57,222,229,105,177,214,130, 3,171,210,222,159,
+ 30,179,218,139,156,211,209, 26, 77,115,189, 59,159,108,169,162,150, 87, 71,116,200,184, 95,171,198,114,113,182, 9, 82,113,179,
+ 40, 83,166,117, 70, 48,194, 57,150, 80,168,152, 80,113, 66, 77, 79,168,109,217, 63, 79,157,251,164,217,202,165, 94,229,105,186,
+144,179,104, 7,204, 65, 59,147,141,172,139, 53,130,242, 86, 5,148,149,146, 34,229,178, 90, 49,134,164, 12, 67,140,116,222, 51,
+248, 53,195, 32, 32,164, 97, 56,225,116,244,180,227, 64, 53,247,216,214,163,235,128,114, 51,180,107, 5, 55,173, 53,218,213, 36,
+ 99,200, 70,166, 64,214,141,152,122,129,155,117,132,177, 39,140, 30, 63,122,162, 47, 19,110,226,225,236,217,159, 71,165,185,152,
+158,179,252, 17,209,171,251,131, 43,179, 15, 82,121, 90, 69,168,181, 42,129, 21,215,247,220, 41,149, 31,238,180, 35, 85, 28,141,
+ 87, 36,221, 76,165, 52, 1, 19,247,168,193,116,244, 98, 79, 36,185,201,103,120,252,131,201, 41, 31, 21,119,174,137, 35,166,180,
+179,148, 18,247,239,221,163,105, 22, 52,117,197, 11,207, 63,135, 41,171, 5,149, 51, 85, 85,115,114,178,192,170,140,223, 73, 39,
+101,180, 56, 0,110, 46,231,220, 92,244,208, 43, 30, 93,156,147,236,140, 43, 31,153,205, 91,114,132, 85,239,247,211,132,172,149,
+ 76,171,147, 98, 59,140,220,187,255, 8,223, 13,188,242,242, 43,204, 79,207,176,166,162,117, 13,177,223, 17,147,231,155,127,229,
+231,248,143, 47, 30,243,233,207,127,142,223,245,187,127, 23,191,241,111,253, 13,252,203,255,210,255,134, 47,127,225,211,124,241,
+203,223,195,207,253,220,207,241,205, 55,222,160,235,251,210,217, 38,148,145, 55,129,143,145,148,227,254,114, 53,120, 79, 63,244,
+ 88, 51, 35,248, 17,133,162,105, 26,102,243, 57, 73, 73,208,136, 42,158,237,132,198, 71, 97, 72,247,195, 64, 46,225, 36, 67,183,
+ 35, 47, 43,194,216, 9,176,225, 87,185,175,253,213,236,117,243,190,170, 31, 9, 31,243, 95,123,182, 60, 37,183,181,179, 25,139,
+147, 19,150, 55,111, 80,207, 90,180,171,229,176,200, 17, 59, 86,228,156,241,253, 64, 28, 70,174, 46, 87,248, 84,102, 11, 73,198,
+226,186,140,177,116, 73,119,155,118,127,199,197,153, 3,180,247,187,106, 4,142,187,247,227, 66, 43, 54, 56,137,180,220, 23,245,
+201, 78, 7,228, 28, 72, 62, 49, 70, 79,240, 61,187,221,154,245,213, 37,235,171, 11, 78, 78,110,176, 56, 57, 99,182, 88,148,136,
+217,154,228,100, 55,167,203,190, 93,235,167, 51, 22,242,209,175,211,119,121, 5,255, 26,145,175,197,174, 84,185, 10, 31,252,126,
+106, 55, 36,136, 30,156, 53, 16, 35,173,181,108,122,143,211,137,121, 91, 49,164,145, 33,106,176,146,215, 93,149, 78, 93,108,111,
+ 25, 31, 19,149, 51, 44,230, 51, 82,140,180,173,208, 15,119,219,142,190, 31,184,117, 86,239,215, 23, 40, 73,179, 90,239, 6,110,
+ 61,127,194,147,245, 14,188, 34,181,115, 46, 66,226, 98,117,197, 16, 19,119,102,138, 71, 93,166, 82,153, 23, 80,156,213,115,222,
+246, 91, 46,117, 70,231, 26,157, 60, 21,129, 19, 21, 24, 52,252,244, 95,248, 25, 82,202, 60,103, 52, 39,181, 98,211,121, 26,103,
+ 33,100,198, 49,241,240,145, 39,171, 29, 39,165,161, 80,204,246,190,102,107,229,184,140, 49, 50,122, 89, 41,140, 62, 18, 82,150,
+236, 70, 99,209,206,237,121, 9, 74, 91, 1,106,133, 8,190,120,141,147, 76, 19,180,113,212,205,140,197, 9, 66,122, 43,195, 49,
+173, 45,235,208,179,186,127,193,253,187,239,115,241,232, 17,195, 48,146,219, 22,123,227, 6,243,122,193,188,189, 65,174, 79, 36,
+112, 36,142, 48,118, 50,178,183,150,238,201, 3, 54,126,203,102,220,242,228,241, 21,214,212,232,236, 72, 3,248,161,120,157, 19,
+248,209,179,108, 91,252,174, 39, 37, 7, 74,149, 56, 89, 71, 12,158,153,209,164,224,101, 95,157, 68,244,105,149,134, 36, 35, 94,
+ 89,233, 29,240,181,153,169, 75, 62,226,149, 76,194, 52,109,175, 37, 2,230,156,247, 22, 62,209,204,168,131, 94,170, 20,226, 24,
+ 19, 33, 39,188,162,164,221,129,201, 69,225, 95,138,170,193,144,178,196, 39,167,156, 24, 66,192,143,177,184,169, 38, 71, 75,177,
+ 75,239, 93, 93,229,215, 19,119, 62,139, 53,179,114,150, 38, 59, 26,101, 81, 41,151,136, 97, 83,104,129, 19,233,178,184,234,203,
+223,143,182,226,166, 65,166,130,219,126, 68, 93,110, 37, 79, 35, 68, 78,188,167, 29, 3,205, 24,168,102, 1,219, 72, 70,132,113,
+ 53,202, 58,201, 22,208,166,216,225, 28, 90, 7,156,245,216,102, 70, 10, 35, 49, 68,252, 56,136, 78,194,143, 18, 62,149,226,181,
+115, 40, 37, 41,248,228,131,115,199, 62, 21,194,120,237,237, 46, 69,247,250, 49,176,247, 17, 38, 80, 33,161, 84, 68, 27,201,230,
+ 85, 33,236,199, 21,250, 40,131,125,130,212,164, 36,220,244, 24, 34, 62,200, 27, 99,244,161, 28,164,229, 34,176, 39,255,112, 77,
+141,156,179,122, 74,237,206,209,110,253,240, 85,159,221,184,197,207,255,252, 47,160,141,230,254,195, 15,152,205,106,218,166, 46,
+201,110, 98,223, 73,133, 3,157,115, 44,168,214,200,108,230, 80,118,198, 48, 70, 94,184,117,202,227,111, 63, 68,155,154, 77, 31,
+113,243, 51,230, 55,158, 35,165, 72, 55, 6,250,221, 21,214,104,182,235,149,216, 84,202, 8,233,209,249, 99, 94,121,238, 37,110,
+223, 60,163,153, 47,177,182,161,173, 90,154,153, 37,197,192,122,181, 99,251,228, 17, 63,251, 19,119,185,255,222,183,249,125,255,
+250,191,204,191,245,111,253,126,254,217,127,250,159,228,214,173, 91,252, 61,191,229,183,240,155,126,211,111,226,199,127,252,199,
+121,243,205, 55,247, 74,200, 49,196,235, 86, 49, 5, 87,155, 21, 85,137,243,155, 53, 45,198, 57,225, 4, 27, 91, 4,131, 25, 99,
+ 69,212,215,143,158,156,161,235,123,114, 86, 2,120,208,134, 28, 61, 15, 31,188, 43,196,168, 41, 16,225,187, 22,132,191,177,189,
+250,245, 68, 49,117,212,169, 31,235, 40,212,119,217, 11,151, 34,155, 51,218, 24,234, 89, 67,179,156,227,218, 86, 66, 23,148, 65,
+101,129,130, 80,138,122,246, 1,167, 12,157, 31,229, 98, 84,172, 84, 94,121, 40, 81,171,101,109,118, 36,136,203, 79, 77, 23, 14,
+194,191,227,103,242,248, 57,124, 90,104,167,202,254, 95, 46, 14, 98,137,218,191, 9,247,191,239,112, 0,166, 16,137,190,199,119,
+ 35,221,106,195,250,201, 21,179,197,130,249,201,137, 76,125, 78, 79,139, 13, 78,114,218,173,227, 40,179,185,176,116,212, 36,110,
+213, 60,171,253,253,149, 43, 29,149,130,152,161,110,103, 92, 93, 93,225,172, 67,105,143, 70, 44, 84, 85,173, 9, 62,208,182,142,
+203,208,211,154,204,114, 86,243,120,227, 89,247,137,100, 0,167, 80, 90,144,190, 26, 75, 24, 70, 92, 93,179, 88, 44, 8,222, 83,
+233, 74, 56, 16, 93,207,229,213,150,229,204, 48,111, 27,182,235, 45,203,121,205,229, 85, 15, 70,225,172, 69,101,195,218, 39,220,
+252,132,135,187,129,123,235, 14,231, 52, 55,158,107,184,217, 52,188,247,238, 37,131, 79,204, 73,188, 52, 38,186, 12,107,149, 73,
+ 42, 16,108, 38, 69, 56, 33, 81,107,135, 31, 51,157, 50,204,106,197,103, 62,253, 2,231,151,151,188,255,254, 90,136,117,217,176,
+233, 35,230,201,136,182, 91, 42,163, 49,229,113,109,148,172, 12,141, 58, 8, 44, 67, 82,132,172, 73,130,252, 2, 91,161, 93, 37,
+137, 92, 58, 73,222,183, 18, 55, 81, 28, 61,201,199,178,221, 40,192,148, 8,218, 56,134, 81, 44,169,227,224,185,188,186,228,253,
+251,239,242,240,209, 67, 84,138, 52,202, 49,111, 78, 89,204,159,103, 55, 58,250,177,198, 53, 75,186, 92, 51,238, 50,173,170,201,
+235,192, 75, 47, 62,135,214,153, 56,247, 52,106,137,242,107,226,213, 57,221,122,141, 74,154, 52,102, 86, 87, 91, 66,144,177,125,
+ 28, 3,237, 89, 67, 30,227,158,205,157,179,160,128,115, 12, 40,149, 48,101, 7,110,140,197,106, 43,228, 52, 13,202, 30, 24,234,
+ 50, 17,151, 14, 59, 78,163,224, 82, 40,100,125,165,203,132,167,236,177,245,225,253, 65,209, 27, 8,184,167, 4,149,164, 36,110,
+148, 16,133,146, 86,186,120,227,172,228,108, 56,183,167, 84,230,172, 8, 81, 52, 29,253,152,216,237, 70,186, 97,144,100,179, 16,
+ 36,252,164,124,222,169, 67, 79, 81,138,125, 46,161, 68, 6, 69,219, 52, 44,102, 50, 14,175,178, 43,121,232, 69, 35,102,109, 97,
+ 42, 36,116, 10,160, 98, 1, 91,153,194,194,144, 52, 62,107, 12,202, 72, 8,217,118, 27,136,113,197, 56,142, 44,251,129,249, 48,
+ 72,215, 62,235,209, 51,143,173, 91,140,107,196,223,174, 43,178,178, 96,181, 76,192, 77,144,169,172,243,178,122, 16,152, 12,209,
+143,164, 48, 8,133, 49, 6, 41,238, 69, 47,161, 52,168,164, 32,137, 51,197, 30,119,230,199,163,246,143,220,199,229,137,252, 19,
+ 80, 37, 86,114,242,180,135, 32,201, 63,206, 89,162,181, 4, 31,177, 78,132, 23,178,183, 63, 40, 21,253, 24, 15,242,125,142,247,
+226,234, 90,222,250, 94,233,151,143, 40, 96,234,169,168,215,163, 3,172,235, 6,222,124,235,109, 82, 78, 60,122,244,128, 91,183,
+207, 4, 84, 80,254,172,210,162,214, 84,198,162,178,194, 84, 51,130,170, 88, 13,154,176, 81, 52, 77, 77, 82,137,155, 39,115,238,
+ 95,108,152,235, 26,223,175,185,122,108,216,245, 35, 57,244,168,148, 8,253, 8, 68, 14, 36,250,140,211,154, 69,237, 80,113,160,
+223, 38,124,184, 98,104,102,216,249,140,170,157,115,187,158,177,189,188,164, 34, 48, 94, 62,226,143,254,161, 63,200, 63,251,191,
+248,231,248,145, 31,249, 17,254,195,255,240, 63,224, 63,255,207,255,115,190,252,165, 47,241,187,254,209,223,197,227, 71,143,248,
+201,159,252, 73,190,241,198, 27,244,125, 15, 74, 4, 42,192,222,199, 62,159, 47, 72, 41, 51,134,136,241, 65,246,206,214, 81, 87,
+ 45,193, 11,215, 89,107,232,118, 61,125, 8,152,170,193, 26, 71, 72, 35,206, 24, 20, 35,195,176, 66,169, 80,212,158,166,220,214,
+210, 65,113,174,142, 46, 82, 71,201, 94, 31,230, 67, 63,216, 73,174, 63, 43,211, 14, 56, 95,139,104, 60,248,181, 14,201,123,135,
+ 34,249,116,180,232, 52, 6,223,199,152, 66, 73,113,146,248, 75,237,138,141,132, 44,135,175, 15,212,139,158, 56,140, 0, 84,190,
+103,244,137, 49,100,250, 81, 18,239,134,126,160,202,194,101,215,197,130, 50,125,191,215, 32, 52, 71,251,170, 61, 50, 55,198,253,
+200,235, 35,173,127, 41, 99,157,222,243,193,167,116,183,253,231, 79,186, 76,167, 18, 49,196,253, 63,253,232, 25,187,142,245,234,
+130,234, 73,195,226,228,140,197,217, 77, 41,238,203, 19,102,139, 57,174,113, 84,149,236, 90,173,211,104, 43,168, 81,101, 52, 89,
+165, 67, 23,116,228, 92, 57, 22,219,165,148,159, 18,222,237, 61, 70,251, 29,103, 76, 71,121, 13,197, 50, 67, 22,170,155, 15, 1,
+104, 72, 33, 83,181, 26,171, 13, 49, 25, 66,206, 12, 62,113,179,109,232,199, 43,102,243,134,174,135, 28, 21,203,153,116, 32, 57,
+ 68, 84,237,128,204,110,187, 67,161, 56, 93,182,108,183, 27, 50,154,222,203,148,207,123, 56,187, 49,231,242,209,154,230,206, 41,
+111,172, 59,222, 63,223,241,210,201, 28,157, 71,110,220, 60,195,205,231,220,190,239,249, 78, 90,115, 47, 69,110,229,145, 87,219,
+ 26,223,117,244,217, 19, 48,204,149,226, 76,195, 16,162, 48, 6,178,231,181,215, 94,225,147,159,125,133, 87,195, 72, 91,125,155,
+247,222,126, 76,165,106, 82, 28,232,134,200,176, 25,217, 85,235,162,136, 54, 88, 83, 9, 34,181,232, 15,148,113,132,108, 64, 59,
+208, 21,198,181,216,170,193,184, 10, 91, 57,140,137,228, 33,136, 16,177,144, 46,115, 20, 1, 81, 78,153, 48,122,134,110, 96,189,
+217,176, 90,173, 88,173,175,120,242,232, 49,247,238,221, 37,196, 30,229, 12, 89, 85,108, 83,205,147,171,204,213,147,199,188,115,
+190,225,114, 59,176, 13,145, 45,137,117,231,105,173,225,249,217,156,155,139,150,197,188,225, 51,159,124,133,231, 78, 91, 22,218,
+ 50,179, 75, 66,216, 49,140, 59,186,174,151, 20,199, 40,232,111,171, 12,109, 85,211,179,195, 85, 21, 33, 21, 75,103, 18,244,111,
+244, 35,186, 88,230,166,240,166, 76, 70, 89,249, 25,251,148,241, 26, 97,241, 39,137, 81, 22, 48, 78,249,125,170,172, 81, 11, 98,
+ 72, 29,233, 84, 4, 42, 35, 35,111,117, 52, 93,157,124,216, 99, 8, 37,143, 65,114,211,181,145,149, 91,211,212, 52, 89, 83, 99,
+200,133, 7,143,130, 68,148,236,244,172,217, 13,137,221,110,160, 31, 6,250, 16, 8, 83, 65,223,219,190,138,149,186,236,217,157,
+145, 73,102,229,236, 53,162,103, 85, 85,184,166, 46, 48,164,140,114, 9,180,223, 35,204,125,204,104,155,209, 81, 86,201,186, 92,
+ 58,140, 53, 40, 45,169,193,221,118, 20, 70,197, 48,226,135,129,166,239,169, 66,160,106, 6,108, 61, 67, 59,143,170,102,100, 91,
+147, 85, 89,241, 24, 39, 23,243,108, 73, 41,162,117, 36,235,145,108, 44, 42,200,170, 48,143, 61,113, 28,136, 57, 20,225,121, 32,
+ 7,225, 56, 20,161,220,245, 78,253,248,160,253,107, 89, 97, 38, 5,102, 8, 1,239, 61, 85,101,241, 94, 24,233,163,181,184,146,
+161,124, 8, 34, 18,123, 74,138,169, 92, 2, 34, 33,197, 50,238, 83,135,126,237, 41, 98,220,164,198, 86,170,196, 16, 78,234,229,
+233,215, 71, 92,162,110, 24, 75,214,117,162,170, 28,109,219,162,114,198,106, 73, 29, 83, 70,203, 15, 58, 43,208, 53,217,106, 76,
+115,155,155, 55,111,179,139,145, 55, 63,248,128,139,203, 75,249,124,202,210,184,134,231,207,110,179, 75, 22, 63, 6,102, 39, 39,
+108,214,163, 28, 78, 71,175, 71,107, 53, 39,117,197,139,183, 79,217,245, 27, 54,195,200,166,243,116,157,199,163,184,113,227, 22,
+183,111,156,113,231,198, 25, 90, 53, 52,181,227,234,193, 3,254,211,255,228, 63,225, 71,127,228, 71,248, 47,255,248, 31,167,239,
+122,222,250,214,155,188,247,206,187,124,254,243,159,231, 71,127,244, 71,121,253,245, 55,248,147, 63,246, 99,124,251,157,239,112,
+180,145, 38,197,200,106,181, 66,151,177, 96,101, 29,221,208, 11,155, 60, 69,118,187, 29, 85, 85,203,110, 41,139, 53,206, 90,135,
+143,114, 33,170,172,197,230,129, 20,123,108, 46, 86,182,130,101,253, 27, 29,191,127, 24, 67,224,233, 2,125,205,249,157,143,255,
+169,190, 75, 19,153, 15, 11,249,148, 80, 41,147,163, 92, 16,166, 0, 9,165, 53,202, 85,232,166,197,206, 22, 84,222,131,214, 84,
+190, 21, 86,188,143,116,131,103,179, 27,232,123,143,239, 18, 49,120, 76, 93,149,219,255,244, 20,166,189,240, 39, 39,245,140, 64,
+238,250, 56,253, 89, 92,242,244, 21, 79,120,225,125,104,210,228, 95, 85,194, 26,139, 65,216,243, 70,203, 24,214, 16, 11,137, 45,
+224, 7,216,110,215,172,214, 87, 52,231, 79, 88,158,156,113,114,122,131,211,179, 51,218,147, 37,139,197, 66, 2, 55, 42,131,118,
+ 66, 54,211,133,143, 45,127, 95,122,230,162,117, 72, 80, 84, 71, 26,152,195, 26, 75, 23,173, 93, 74,224,251,145,126, 16,232,137,
+ 37, 99,172,145, 53,134, 14,196,172,240, 94,172,102,179, 89,133, 31,165, 35,210, 40, 17, 82,229,120,184,140,165,204,205,179,133,
+168,229,179,168,135,155,155, 53,171,213,154,161, 79,220,186,189, 20,203,155,145, 96,164,109, 63,224, 19, 44, 79, 22,172,183, 91,
+102,139, 57, 79,186,192, 59, 79,214,212,214,178,219,246,156, 46, 27,118, 99,224,172, 85,124,230,249,231,120,231,189, 13, 23, 38,
+243,110, 74,188, 28, 2,175, 25, 67,149, 44,137,138,160, 51,219, 60,114, 63,121, 46,115,228,244,198,156,239,253,254,239,225,108,
+233, 72,227,192,175,253, 82,205,246,201, 95,102,117, 53,150,187,152, 98,236, 37, 87, 32,132,145, 24, 71, 82,240,164, 88,145,167,
+214, 93, 75, 10, 29,198,161, 77,133,182, 21,166, 48, 19, 92, 93,163,141, 23, 57,233, 96,241,122, 26,224,107,177,136,141,158, 56,
+140,116,219, 45, 87,151,151, 92, 92, 92,240,248,241, 67, 86,151,231, 98,199,139, 53,219, 46,115,239,188,231,114, 28,185,223, 95,
+242, 15,254, 51,191,151, 63,250,135,254, 35,186, 16, 81, 65,168,159, 89,193, 42, 6,214,187, 13,183, 98,135,122, 48,242,203,111,
+190,195,243, 39, 51, 94,125,225, 22, 47,223,156,115, 82,213,228,228, 57,127,114, 65,223,201,243,168,178,198, 25, 57,159,115, 74,
+ 50,102,182, 72,115,160, 53, 57, 13, 4,223,163,103, 11, 81,149,187,226,129,119,142, 49, 37,162, 82,172,251,129, 33, 71, 9, 98,
+205, 2,133,153, 40,103,249,154, 79,253,144,214,104, 38, 94,126, 89, 33, 26,163, 75, 14,131,224,200,199,224,241, 62,210, 23, 23,
+143, 15, 18,108,101,140,166,105,148, 20, 54,155, 36,222, 28, 45,244, 60, 20,218,102,148, 13, 68, 60, 62,101,186, 49,176,238, 6,
+ 58, 47,228,181,156, 15,141,225, 36,232,155,118,255,141,181,180, 77,216, 83, 35,235,186, 97, 54,107,152,207, 91,234, 89,139,173,
+ 44, 33,101,172,143,194, 32, 16,244, 35, 49, 33,252,130, 50,194,183,197,154,102,157,161,178, 10, 91, 98,137, 99,200,108, 55, 35,
+227,152,104,135, 72, 51, 38,102,243,145,122, 54, 98,155, 1, 21, 70,116,189, 64,185, 90, 10,122, 89, 71,100,244, 62,216, 76, 68,
+232,186, 36, 62, 76, 81,216,153, 28,124, 33,205,245,228, 16,101, 2, 19, 2,230,214,114,246,175, 31,118,229, 92,203, 42,207, 74,
+237,111,238,146,135,171,246, 64,144, 3,225,109, 26,149,199,253, 8, 69, 4, 74,197, 48, 31, 11, 49,174,252,133, 33,148, 75, 64,
+ 16,224,199, 30, 13,155,143,243,220, 14,249,184,123,112, 96,137,221, 99,207, 23, 47, 29,144,210,251, 28, 89, 83,178,138, 49,114,
+187,115,206,238, 25,185,166, 16,202, 82,201, 58,142,202,160,116, 67, 51,187, 65,204, 53, 15,207,183,220,125,116,129, 87, 21,203,
+ 27, 47,130, 59, 1,179,224,244,236,121,154,246,132,171,237, 14, 91, 57,214,235,115,172,133, 56,121, 65,203,193,120,214, 84,204,
+ 13,204,156,102,117,117,206,229,250,146,243,203, 11,250,110, 75,238,119,248,237,138,251, 15,222, 39, 19, 89,158,158,178, 88,158,
+114,235,230,115, 60,122,124,206,157, 23,238,176, 92, 44,249,249,191,252,151, 81, 74, 81,213, 53,247,238,223,227,245,111,190,206,
+103, 63,253, 25,126,219,111,253,251,185,115,251, 54,231, 79,158,176, 94,175,247,215,152, 73,109,150, 82,162,170,228, 86, 57,107,
+ 91,172,177,184,202, 73,178,145,147,241,145, 46,224,136,126, 28,247, 66, 13,194, 6,252, 5, 86, 5, 84,158, 84,153, 9,133, 40,
+ 98,213, 33,142,239,153,145,244, 49, 39,224, 90,228,226, 81, 75,255, 97, 86,177, 67,225, 87,197, 99, 89,118, 91,199,140,232,163,
+ 63,167,143, 50,206, 81, 96, 20,204,234,134, 91,103,103,220,186,117,139,118, 62, 71, 91, 39, 74, 82,142, 98, 97, 11,177, 80, 84,
+166, 66,138,170,234, 26, 87,201,135,209,134, 28,101, 31, 55,198, 40,163,249,148,158, 25,177,167,116, 88, 5, 77, 29,250,212,209,
+164,167,149,240,240,148,215, 93,145,149,190,254,253, 79,136, 95,107, 49,206, 96,156,198, 90,208, 58,210,180,154,147,147, 10,133,
+ 4,243,132,152,196,254, 52, 14,116,219, 53,221,118, 67,183, 89,211,119, 91,250,126, 32,120,177, 71,165, 16,137, 49, 31,222,115,
+123,144,211,177,214,133,167, 46, 36,211,247,199,181,223,171, 82, 38, 36,136, 81, 49,172, 47,249,169,255,230,143,179,189,255, 62,
+202, 7, 66,200,248,148,152, 47,140,236, 37,149,101,232, 3,183, 78, 27, 44, 9,101, 29, 23, 23, 61,139,121,141, 82,162,240,175,
+234, 10,163, 27,186, 62, 16,131, 47,120,223,136,211,134,190, 31, 57, 57, 89,176,235, 6,148,242, 40,163, 72, 89,179,222,142,184,
+170,194, 56, 45,158,107,219,240,173,199, 43, 60, 48, 87, 6,171, 20,231, 67,143,173, 45,117,202,156,157,148, 53, 83,159,232,124,
+192,231, 76, 54,134, 78,193,144, 35,171, 20,184,159, 19, 79, 72,184,218,242,119,125,245,251,248,129,207,127, 22, 21, 18, 70,107,
+ 28, 25, 66,224,205,187,143, 48, 90, 81, 27, 88, 84, 10, 87,101,154,214, 81, 85,117, 17,181, 57,156,171,229,223,171, 6, 91,207,
+153, 47,150,204, 78,150,204, 79,150,212,243,150,122,214, 96,234, 10, 76, 73, 30,143, 1,252, 8,222, 75, 39, 21, 2,190, 27, 24,
+182, 27,214,107,249,216,172, 87,108,174, 46, 25,187, 13, 67, 31,120,180,169,249,250,253,129,175,175, 18,119,189,225, 73, 82,188,
+243,232,156, 71, 23, 23,164,156,113, 25,110,161, 88,238, 89, 11,137,207, 63,127,198,103,150,115,218, 16, 25,188,231,151, 31, 92,
+240,164, 27, 72,202, 48,115, 13,219,135, 87,116, 93,194, 90,205,172, 53, 60,127,251, 38,179,102,198,118,187,195,213, 21,218, 56,
+124,212, 44, 22, 75,226,216, 97,194,142,198, 89,214,157,199,204, 78,105,150, 39,248,152,232,252, 72,172, 42,122, 96,136,194,237,
+ 15, 73, 70,224,195, 24, 25,188, 32,146, 67,148,238, 61,164, 44,103,254, 52,254, 46,105,108, 62,202, 10,214,135,136,247,242, 53,
+247, 62,178, 27, 60, 93,239,217, 13,129,110,240, 12, 99,113,142, 40,141, 49, 66,217,108,154,134,186,174,169, 42, 87, 86, 67,154,
+152,193,199,204, 88, 58,253,193, 71,250, 16, 9, 49,239,189,220,185,100,193,103, 14,148, 74,103,141,136,166,231, 45,167,203,150,
+147, 69,203, 98, 62,219,235, 88, 92, 93,236,129,147,198, 44, 22,180,116,136,101,162,144,174,137, 99,173, 81,184, 2,204,169, 92,
+133,214,150,156, 53, 33, 36,161,224, 13,125, 1, 17,133, 50, 1,140,101,242, 25,143, 98,201,203,244,185,156, 29,135, 96,217,130,
+207, 45,138,180, 73,252, 27,199, 81,162,159,251,129,161, 31,158, 18,202,229,103,188,249, 18, 41, 56,117, 86,249, 89,252,244, 36,
+121,203,229, 69,141, 73,198, 38,222, 39,140, 14, 50,146, 40, 28,228,227, 12,235, 84,240,132,185, 32, 6,213,116,248, 21,170, 16,
+133,198,163,212,193, 5, 53,165,134,113,124,224,151,170,170,143, 9, 96,165,163, 19,203,196,129, 99,175,180,248,188, 99, 86, 52,
+205, 9, 89,183,188,241,214,187, 92, 60,185,162,105, 90, 94,253,244, 23,152, 47,207,168,155, 5, 15, 31,159,243,232,254, 3,134,
+ 48,178,122,252, 24,159, 70,206,110,157,178,219, 40, 6, 63,200, 69, 68, 29, 46, 33,163, 15,172,125,230,219, 31,220,165, 27, 2,
+ 67,206,248, 44,183,254, 6,152, 23,114,210, 7,119,223,101,215,109,249, 53, 95,252, 94, 62,255,185, 95, 67, 55,246,252,223,254,
+207,255, 9, 63,250, 79,252,147,252, 71,127,232, 15,129,214,108,135, 30, 3, 92, 93, 92,240,147,127,246,207,242, 11, 63,255,243,
+252,186,239,251,117,252,115,191,247,127,206, 95,252,217,159,229, 79,255,217, 63,195,213,234,138, 12,146,233,157, 97,187,221,114,
+178, 88, 22,124,162, 7, 52,195,216,147, 21, 56,215, 18, 17,225,157,120, 90, 19,181, 81,196,209, 23, 75,147,154, 20, 20,251,199,
+125, 18, 56,230, 15,149, 82,169, 15,129, 57,124, 8,128,244, 67,186,216,227,124,229,253, 15,247,195,219,253,189,226,120,162, 67,
+229, 41, 14,162, 92, 4,130,247,248,113,192,120, 41, 0,134,170, 64,106, 74, 96, 74, 93,161,212, 66,114,138, 71, 47,111,128,144,
+168,125,192,185, 10,103, 52,171,245,154,180,237,100,202,209,203,104,213, 88,119, 8, 90, 57, 42,234, 19,198,248,248, 35,166,124,
+173, 88, 62,221,169, 79,185,238,234,233,203,143,210, 96, 42,172,138, 24, 34,235, 97,195,147, 71,247,248,228, 39, 95,193,213, 30,
+255,248, 10,163, 90,177,100,197, 68,138,153,174,219, 48,244, 91,186,221,138,250,234,130,171,203, 83, 78, 79,207, 88, 44,207,152,
+ 45,230, 52,179,133,240, 9,106, 89, 73, 76,128, 18,173,203,100,107,186, 96,233,227, 11, 23,251,213,155, 42,110,150,168, 12, 41,
+ 4,186,205, 6, 83,108,111, 83, 87,162, 13,140, 49, 74, 54,119,153, 48,204, 26, 67, 40,135,146, 86,242,223,107,101,112, 78,112,
+159, 87,125,192, 42,197,144, 18,166, 22, 10, 88,215,111,105, 42, 91,176,168,129,186,118,116,125,130, 44,129, 39,182,105,184,247,
+100,195,233, 89,195, 7, 23,107,250,152,152, 25,168, 83, 68, 59, 73,186,235,214, 43,162,134,106,105,249,225, 47,126, 10,211,156,
+113,190,217,241,228,242,130,135,231,231, 60, 90,173, 9,253,192,166,247,116, 49, 51, 51,138,223,244,189, 95,224,135,191,252, 61,
+ 56,239, 75,164,111, 2,149,185,115,235,148,121, 45,137,124,117, 5,174,209,100,147, 14, 36, 48,227, 4, 50,100, 43,172,173,209,
+ 86,198,241,202, 58,180,173, 80,211,135, 41, 69,192, 54,228, 28, 80, 69,235, 66,229, 72,157, 34, 42, 8, 57, 16,252, 64, 24, 7,
+188, 31, 25,199,145,222,123,118, 30,222,189,204,252,194,197,150,203, 1, 78,116,195,205,106,206,187,253,138, 55,191,243,237, 66,
+ 65,180, 52, 57,240,105,167,153,187,138,183, 6,207,121,204,124,241,213, 87,249,245,175,188,192,155,223,120,139,175,191,251, 62,
+189,202,124,176, 89,115, 53,142,216,143,127,140,113, 43,150, 59, 99, 53, 57, 65,211, 72,192,142,177,166,140,151,165, 17, 8,193,
+ 51,175, 29,201, 79, 19,190, 34,104, 78,197,206,156,181, 76, 50,162,184, 6,136,226,148, 26, 99, 96, 44, 1, 71,114,113, 53,251,
+216, 84,165, 64, 79, 28,146, 20,247,186,157,137, 82, 42, 19, 60,133,143, 25, 31,202,135,207,210,169, 23,145, 71,140,144,145,194,
+238,170,154,170,174,105, 42,121,191, 91, 23, 72, 72,247,236,189,103, 24, 2,253,232,233,203,170, 55,149,166,161,120,217,138,195,
+202,236,171,215, 52, 77,216,227,101, 53, 5, 18, 83, 26, 70, 37,175,131,210, 2, 55,154,104, 53,186,156, 75,169,228, 80,168,156,
+ 10,136, 73,154, 15,201, 10, 80,228,108, 25, 75, 40,204, 56, 14,244,187,158,221,118,199,124,177,163, 93,118,212,203, 1, 59,155,
+163,219, 30,237, 26,172,109,208,186, 65, 41, 73,252,147,245,157,229, 8,205, 86, 38, 36, 73, 46, 7,209,147, 67, 32, 12, 25, 63,
+246,216,107,138,228, 9,205, 57, 37,193,112, 72, 72, 83,135,150,237,240,235,163,163,107, 58,208, 99, 46,210,255,148,136, 58, 19,
+146,220,134,149,214,215,212,213,249,248, 48,207,249, 32,160,152,178,211, 17, 16,129, 82, 74,210,161,142, 58,157,103,186,159,167,
+ 72, 91, 83,225, 80,121,130, 32,136,178, 79,105, 67, 72, 10, 91, 47, 9,121,198, 27,111,188, 75, 86,142, 87, 62,253, 25,154,182,
+165,170,150, 84, 85,139,115, 53, 31,127,105, 9,163,103,123,249, 16,191,217, 18,135, 29, 79, 30,110,241, 97, 32,230,242, 80,228,
+ 32,223, 91, 78,244, 49, 19,157,229,162,243, 40, 45,183,215,124, 92,136, 70,207,172,109,100, 36, 51,238,120,243,141, 95,226,165,
+231,111,243,240,241, 3,214,155, 43,134,205,154, 79,188,252, 50, 15,214, 43,208, 2,229, 8, 93,199,253,113,160, 94,205,120,244,
+224, 17, 47,191,244, 10, 95,253,234, 87,249,202, 15,124,133, 63,252, 71,254, 48,175,191,241, 58, 33, 10, 63,123, 12, 61,182,178,
+248,232, 89,111,214,220,188,117,131,221, 48,160,208, 52,213, 9, 73, 67,239,123,124, 18, 55,186, 99, 32,141, 91,114, 50,196, 18,
+ 3,170,212, 88, 34, 23,244,179,254,244,167,138,146, 46,151,129,201,177,112, 8,236,249,104, 66,202,222,195, 58,125,254,130,215,
+156,208,209,138, 99,191,187, 56, 21, 72,169,168,218, 51, 58,235,189,142, 35, 70, 9,253, 24,250, 14,211, 88, 17, 85,161,176,100,
+180, 17,173,131, 53,134, 88, 53,162, 54,173,229, 64,209,222, 99,130, 71, 87, 50, 42, 51,174,188, 81,175, 54,236,186,145, 97,240,
+ 24, 27,229, 80, 50, 83,166,189, 92,136,210,244, 74,168, 67,154,156, 81, 92,179,152, 9, 4,227,128, 45,222,251,102,143, 52, 4,
+178,159,212, 40, 85, 67, 30,169, 43,131, 55, 1,223, 93,240,230,235, 87,188,252,241, 87, 88, 93, 60,224,115,159,253, 50,247, 30,
+ 92, 16,180, 34,165,226,149, 79,129,190, 91, 49,250, 45, 99,119, 69,191,185, 98,179,184, 96,190, 56, 97,177, 60,101, 54, 95, 82,
+ 53, 53, 85, 93,225,170,170, 92,170,245, 30, 6, 34, 48,137, 50, 49, 48,122,191,227,220, 99,105,147, 34,102, 77, 10, 35,227,250,
+138, 26,141, 31, 34,214,148,239, 41, 3,186,194,170, 14, 31, 2,149,115,204, 27, 77,231, 7,146,182,120, 15,182,245, 36,163, 48,
+166, 34, 38,143, 1,210,216, 81, 25, 45, 99,213, 8,207,159,205,232,183, 29,235,117,199,236,164,225,106,227,153, 55, 53,187, 93,
+207,217,233,140,135, 87, 27,176,134,213,168, 88,245,145, 86, 89, 76, 14, 56,147,168,108,230,246,178,162,157, 55,100, 50,151,151,
+ 87, 12,195,136, 86,134, 27,103, 55,121,229,229,155, 44,190,240, 9, 89,113,216,138,221, 40,170, 99,103, 13, 55,110,156,160,195,
+192, 48,246,132, 97,192,239, 86,164,193, 19,134,158, 59,179,154,126, 24,153, 47, 42, 82,147, 48,243, 57,186, 94,162,170, 57,186,
+154,161,221, 12,227, 90,140,173,247, 93,163,169, 27, 92, 59,195,212, 13,166,170,197,239,175, 53, 73, 75,124, 40,214,128, 21, 8,
+142, 53,137,172, 35,209, 68,114,246,132,236,137, 41, 16,115,164,247,137,123, 87,138,208,222,194, 95, 94,225,116,228, 21,171,185,
+ 21, 71,182, 4,206, 85, 70,101, 43, 17,181, 6,190,244, 66,141,223,141,220,237, 61,184,138,143,127,254,115,124,254,139,175,176,
+ 60, 89, 82,181, 21,124,243, 77, 76, 24,121, 18, 34, 95,123,239, 62, 47, 36, 69,171,117, 1,192,128,115,150, 20, 7,241,158,163,
+113,182, 66, 69,177,176, 85, 70, 51,168,140,178,146, 67, 97,181,150,247,128,207, 56, 83, 17,202,232, 59,145, 40, 33,105,132,172,
+132, 70,154, 68,173,110,132,120,179, 79,145,212, 66,150, 41,247,248, 40,225, 32,251,251,255,116,150, 76,174, 39, 85,246,223, 98,
+115,211, 81,186,253, 24, 68,244,152, 83, 46,182, 84, 83,194,149,116, 17,193, 69,250,190,161,107,122,250,190,162, 31, 71,129,211,
+228,116, 32,205,165,124,116,202,232, 35,109,150,124,109,102,234,142,167,247, 75, 86, 40, 25,122,179, 47, 38,229,103, 76,153, 76,
+234, 12,166, 56, 60,140,202,101,244, 78, 17, 27,154, 67, 72, 5,138, 97,180,140,253,200, 56,238, 24,186,145,121, 55,208, 14, 3,
+179, 69,135, 93, 46,112, 77, 11, 85,131,113, 51,148,105, 80,182, 45,194, 61, 77,102, 74,161, 44, 95, 95,206,216, 28,104, 72, 98,
+193,211,154, 72,252,112, 75,219,135,169,225,127,101, 9, 91,215,255,236, 52,226,139, 49,238,199,168, 7,112, 70,186, 54,178,205,
+199,221,217, 83,197,250, 24, 75,171,180,136, 36, 62,204, 98,164,148,226,186,182,250,184,123, 20,242,144,117, 51, 80, 53, 95,255,
+198, 55,185,113,251, 5, 78,206,206, 24,125,135,177,146, 66,101,148, 0, 91, 98, 8,116,221,192,163,199, 23, 68, 47, 35, 77,223,
+239, 4,249, 88,210,136,212,209,247,228,163,120,110,173, 53,248, 16,143, 10,161, 92, 66,116, 85,179, 60, 59,227,222,253,251,244,
+ 62, 98,171,154,191,248, 51, 63,197,107,175,189,198,233, 98,201, 95,249,133, 95,224,203,223,243, 61,252,177, 63,241, 39,104,150,
+ 51, 76, 86, 56, 5,129,132,138,226,229,125,255,131,119,249,115,127,126,224, 31,255, 61,191,135,223,246, 91,127, 43, 15,254,227,
+123, 60, 58,127, 66,202,138,170,105,104,218,134,172, 21,202,106, 86,155, 13,109, 83,177, 9, 91,188,135,213, 48,210,231,136, 49,
+142,106, 81, 17,135, 14, 21, 37,208, 65,105,158, 82,164,171,191,161, 93,250, 71, 17,229,246, 1, 41, 42, 93, 19, 55, 62, 29, 41,
+154, 39, 81,156, 58,190, 84,168, 18,166,162,246, 36,173,174,235, 24,118, 61, 85, 93,161,141, 69, 43, 91, 46,162,230, 80,116,109,
+ 85,110,225,114, 24,164, 42,144, 99, 32, 56, 97, 39, 75,183, 85, 58,172,203, 13,113,219,225,199,158, 16, 52,174,114,184,130, 5,
+182,214,124,168, 32,112, 90, 65, 73,142,123,218, 91, 76, 38, 81,227, 52, 66,211,250,105, 95,121,134, 60, 98,109,102, 62,171,113,
+156,241,240,131,154,215,191,249, 58,119,110,191,128, 70, 17,195,200,237, 27,103, 60,120,178,146, 21, 69,202,135,227, 40,102, 24,
+ 3, 97,179,165,143, 25,229,131,192,110,198,158,208,180,196,186, 38, 86, 21,177,154,212,194,250, 48, 49,155, 58, 40,107, 37,133,
+ 81,151,253,228,228, 55, 78, 25, 98,100,123,249,132,182,174, 36, 34, 83,137,231,218, 90,241,247,199,161,112,186,107, 43,182, 78,
+ 47, 80,154, 62,100, 78,202, 14, 86, 44,172, 34,136, 21,118, 75,162, 31, 60,139,121, 67, 74,176, 90,141, 84,141, 33,102,161,216,
+ 13,222,115,122,182,148,157,186, 79, 44,206,230, 60,188,218, 96,116,194,184, 76,101, 21,149,211,204,103, 21,205,172,198, 22,118,
+246,172,169,209, 74,120,216, 90, 5,188,223,242,157,239,124,128, 86,154, 27, 55,158,163,157, 45,113,206, 74, 96,240,118, 43, 43,
+ 56,165,200,253,192,110,189, 99,187, 94,115,113,126, 69,221, 84,196,148,153,159,157, 81,181, 48,107, 90,154,102, 65,213,204,113,
+ 85, 75,221,204, 48,238,128,246,116,174,194, 89, 43,211, 29,109, 48,133, 40, 7,186,156,101, 86,246,238,218, 8,184,164,178,164,
+ 81, 94,235,168,197,159,156,180, 56,135,238,190,191,227,228,206, 77,190,252,185,207,241,232,207,253, 21,190,125,177,198,231,142,
+ 89,180,124, 81,201, 4,229, 97, 26, 57,211,153, 31,122,174,225, 99, 39, 13,247, 98,194, 40,207, 11, 39, 11,190,231,115,159,227,
+214, 11, 55,228, 50,145, 21, 87,231,107, 62,222, 86,168,155,167,252,228, 79,254, 28,155, 82,143, 78, 77, 13, 57,209,214, 53,155,
+245,138, 24, 19, 86,233, 98,235,117,196,232,177,109,131, 87, 82,208,135, 16, 80,101,237, 20,115, 42, 16, 22,209, 77, 73, 7,158,
+ 8, 58, 18, 84,216, 83,221,180, 86,123,210,232,241,185,175,167, 58,158,147,240, 56, 68,117, 38,236,146,132,128,120,202, 46, 61,
+196,201,154, 38, 89, 10, 90, 27,234,202,209,212,142, 93, 39,127,191,179, 14, 83,201,197,161,170, 44, 77, 83, 51,155,181,116,187,
+129,174,239,233,124,197, 48, 6, 98,242, 37, 25,238,163, 49, 14,234,218,180, 87,237, 39, 8, 7, 17,175,218,211, 1,117,249,189,
+ 70, 75, 82,156, 66,239,195,104,244, 17,233, 84,190,238, 3, 76,199, 26, 75,182, 9,157, 36, 93,178,239, 7, 98,138, 12,193, 51,
+142, 35,141,247, 84,237, 64,213,206,112, 85,196,212, 1, 83,133, 34,158,115,251,149,115, 54, 70, 56,116, 85, 35,121,236, 74, 99,
+141,163,170, 5, 90,100,127,165, 7,181,250,235,228, 83,170,167,196, 57,147,194,126,234,100,166,162,190,231, 22,151,142,140, 15,
+ 73,255,122,166,208,239,147,188,212, 51,216,209,125,118,251,212, 81,237,203,187, 34, 82, 81,213,167,124,235,173,247, 56, 57,187,
+201,237, 59,119,184,184,186, 32,165,129,110,183,162,109, 87,116,221, 64,202,176,221,238,120,244,240, 62,219,113, 93,136,120, 94,
+242,144,243,100, 1,153,244, 4,153,211, 91, 55, 25,134,192,110,183,185, 6,143,145,188,115, 67, 78, 10,165, 29, 63,240,235,191,
+202,127,251, 39,255, 27, 98,240,248,156,184, 92, 95,242,240,225,125, 62,243,169, 79,243, 51,127,225, 47,240, 3, 95,253, 42, 57,
+ 5,186,110, 39,152, 72, 99,101, 4,150, 35,187,161, 67,231,158,102, 85,243,198, 27,223,228,215,126,207,151,184,113,227, 6, 15,
+ 47,158, 20, 24,136,147,155,169,151, 55,214,242,228, 6,195, 24,209,121,144,236, 99,229,100, 84,150, 51,217,143,140,113,141, 13,
+131, 92, 56,179,222, 51, 9,210, 94, 59,241,215,250,217,170,143, 76,100, 83,223,165, 83,207,101,210, 35, 14,135, 35, 18,205, 84,
+188,149, 58, 26, 92, 79,147, 25,181, 39,206, 37, 68,208,211,117, 29,219,245,150,249,108, 67,229, 36,207, 88, 77, 55,217, 56,141,
+200, 74, 38, 65,137, 73, 85, 6,148,115,226, 37, 50,166,140, 77, 29, 88,139,178, 21,166,106, 48,151,107,182,155, 13,195, 40,106,
+224, 80, 72,126,198,216,189,122,253,195,146,233,142, 71,240,215, 96, 52,249,224, 40,209, 71,157,177, 82, 17,157, 71, 84, 78, 60,
+124,240,152,243,135,239, 50,159,205,185, 56,191,228,221,239,188,207,114,126,194,147, 71,143, 88, 44,111, 48,171, 52,109,101,138,
+ 54,197, 72, 40, 71, 4, 77,194, 17,112,105,192, 38,133,246, 10,250, 0,121, 32,135,154, 48, 24,176,134,100,116, 25,135,138, 66,
+ 94, 23,246,129,178, 14,237, 44,217, 88, 1,124, 40,133, 46, 99,209, 24, 35,161, 91,145, 67, 39,200, 76,113,238, 96,156,221, 11,
+228, 0, 9,163,209, 16,163, 38, 2, 49,129,115, 21, 49,130, 81, 81,214,119, 38, 99,172, 76, 1,170, 74, 83,213,150,213,106, 3,
+ 6,170,218,240,248,178,103,177,168,241, 99,100, 76,129,203,117, 79, 59,171,184,218,236,136, 41, 81,183, 80, 55,138,182,173,169,
+235,154,186,109,104,219,185, 96,127,141,166,118,186, 88,157, 52,179,166, 41, 28,131,219,204,219,153, 0,139, 52,144,131, 16, 46,
+203,186,202, 25,195,242,244, 6,103, 39, 39,108,183,107,118,187, 55, 80,186,231, 51,159,127, 21,211, 26, 76,149,153, 85,194, 90,
+111,103, 51,234,186,162,106, 26,225,224, 87, 21,182,170,208, 78,180, 17,206,186,107,108,242, 28, 68,136,171,162,100, 92, 16,211,
+126,138,165,180, 80, 7,141,107,112,117,196,185,142,171,203, 29,119,110,206,249,216,171, 47, 80,187,138,215, 94,126,158,175,159,
+175,121,168,224, 5,157,248,204,178,229,227, 55, 20, 15,227,192,153,213,124,236,108,193,227,171,158,183,214, 61,151, 17,126,232,
+123, 63,205,243, 47,191, 72,158, 57,236,201,138,249,233,156,231,111,158,240,201,207,127,150, 71,227,150,244,189,175,241,141, 95,
+122,135, 97, 72, 12,195,200,141,153,100,215,163, 4, 40,131,150, 9,138,115,150,202, 90,130, 31, 49,198, 48,198, 40,231, 23,154,
+224,227, 30,225,230,102, 13,181,209, 88,141,132,212, 16,240,153,253,251, 99, 18,132,238, 27, 49,117,160,130,198, 40, 69,219,143,
+ 94, 72,164,197, 90,118, 72,234,204,101,223, 46, 65, 75,114, 81,150, 41,226,174,239,169, 58, 71,189,171,228, 57,168, 66,185, 56,
+ 20,177,112, 85, 49,111, 27,134, 69,203, 48, 14,244, 62,208, 15, 35, 62, 68,194,148, 56,169,174,175,151,249, 8,144,214,177,174,
+ 71, 61,245,239,186, 60,119,214,136,106, 62,234, 84, 72,121, 92,179,237, 30,195,170, 50, 2, 96, 51, 90,163, 42,135, 77, 19,226,
+ 43, 49,142,158,120,181,198,247, 35,205,172, 39,206, 7, 98, 59, 98,155, 30,215, 54,216,170, 1,215,144,212, 20, 20,147,203,196,
+192,162,105, 69,255,100, 44, 38, 70,112,245,161,168,255,138,162, 49,159,242, 26,127,183,223,159,203, 14,254,195, 14,192,235,234,
+250,167,161, 24,207, 90,232, 82, 41,248,242, 2, 77,118, 9,253, 84,225, 47,249,208,199, 95, 65, 78, 40,109,247, 98, 33, 87,181,
+188,249,246, 93,234,118,206,233,141,155,124,231,157,111,115,121,245,132, 97,216, 0,137,126,220,162,181,116,130, 62,120, 82, 78,
+ 82, 88,147,160, 9, 73, 7,229,118, 46,232, 83, 99, 52, 97, 28, 75,100,109,217,169, 20,161,159, 41,169,116, 70,107,126,224, 7,
+126,144, 87, 95,251, 36,159,251,194, 23,121,235,205, 55, 88,111,183, 44,103, 51, 30, 62,122,196, 75,207,189,128,206, 10,167, 20,
+ 42, 6,114, 84,248,236, 81, 70, 44, 36, 49, 12,212,174,162,114,162,112,127,231,157,119,248,205, 63,252,119,178, 92,156,162,148,
+161,174,106,102,243, 57, 49,103,106,231, 88,175, 55,188,190,122,157,229, 98,201,203, 47,190,132,188,237, 34, 74, 55,204,155,134,
+ 56,108, 24,243, 10,173, 7, 41,124,198,236,211,200,166, 29,107,230, 89,229,250,254,178,165, 14,124,244,167,119,230, 41, 31, 16,
+191,170, 0,116,166,117,138,222,191,118,233, 96, 71,204, 5, 71,155, 63,132,118,166,158,218,221,167, 76,214, 98,225,232,251,142,
+237,102,205,110,214,208, 56,139,177,210,137, 70,165, 72, 38,162,157, 43, 96, 11,246, 97, 48, 76,221,104, 22, 95,105,178, 30,140,
+ 69, 57,139,118, 21,174,174,169,235,134, 77, 83,177, 90,239,232,198,190, 4, 14, 69,192,238,223,148,236, 37, 38, 7, 96, 78,158,
+ 48,198, 73,147,172,150, 3, 43, 31, 36, 57,178, 67,151, 91,253,148, 61,110,117,192,170,200,249,234,146,135, 15, 30,114,178,104,
+185,115,235, 57, 30,221,127,200,167, 62,253, 25,186,174, 35,250,142, 48,142, 56,215,208,206,230, 92, 93,174,168,171, 26, 35,222,
+ 40,172, 9, 84, 70, 81, 41,141, 83, 26,167, 21, 78,101, 44, 17,147, 53, 38,105,241,239, 7, 85, 40,129,153,172,197,246,151,141,
+ 28, 6,114,241, 41,246,165, 24, 64, 21,107,218,250, 2,167,161,114,154,156, 12, 33,141, 88,163, 24,199, 40, 99,249, 16,153,181,
+114, 97, 8, 49, 19, 10, 62,120,244, 9,131, 65, 89, 65, 79,207, 22, 45,231,143, 55,180,109, 77, 24, 53,187, 93,143,202, 9,107,
+145,172, 2, 39,196, 61, 87, 25,158, 92,110, 81,214,224,115,166,247,129,186,209, 52,115, 77,187,176, 52,237,140,186,153, 81, 55,
+ 45, 85,177,143, 25,165,105,141, 20,145,202,153,114,208, 58,172,211,210,201,153,105, 76,170,208,197,193,111, 84,233,172,157,197,
+ 42, 71, 93, 87,124,229, 7,127,144,205,166,103,219, 7,198,236, 81, 46, 83,169, 10,103, 28,117, 83,227, 42,139,173,202, 74,198,
+217,253,179, 98, 43,153, 18, 89, 87, 73, 39, 86,108,107,199,161, 32,211, 51,104,108,137, 70,181,150,202,213, 52, 85,198,169, 13,
+149,178,188,252,220,130, 42, 27, 24, 3,159,253,204,231,184,253,254, 67,206, 47, 55,188,173, 96,232, 59,206, 86,240,241,179, 22,
+ 98,224,189,187, 87, 60, 12,142,183, 54,112,122,235,140,223,254, 63,250,123, 56,107, 90, 82,191, 35,108, 7, 46, 46, 47,248,254,
+175,254, 58, 30, 93, 60,228,252,209,123,188,242,220, 41,246,213, 19, 46, 30, 94,114, 50,215,220,190,125, 34,107,213,172,168,235,
+154,164, 13, 41, 21,228,106,148, 64, 24,171, 37, 55, 34,100, 81, 92, 7,239, 25, 83, 68,207, 23, 96,101,114,101,148,156,183,222,
+100,192, 95, 75,101,123,186, 8, 78,117, 35, 22,110,253,232,139,224,180,120,212, 67, 44, 2,207, 76, 73,238, 60, 80,229, 20,136,
+248,109,144, 34,221, 15, 3,253, 48,210,212, 94, 46, 91,229,194, 45,110,167,154,197,208,210,117, 3,179,126,160,235,164, 91, 15,
+ 33, 18, 38,140,114,206,215, 51, 16,242, 71, 64,152,166,142, 61, 63,157, 7, 49,229,185,235,167, 18,232, 14,152,219,227,198,116,
+ 95, 91, 21, 88,163, 36, 7,162,156, 71,185,164,192,133, 24, 24,118, 3,177, 15, 12,219, 30,219,108,112,109,203,108,185,160,110,
+ 27, 92,179,192, 84, 75,112, 86, 26, 18,177, 15,144,208, 66,190, 51, 34,252,117,182,198,254,245,118,224,127,189, 99,248,143, 10,
+150,216,195,195, 38, 37,125, 74,152,146,231, 62, 5, 89, 28,119, 70, 83, 97, 63,220,254,242, 81, 58,209,225,243,234,124, 64, 94,
+230, 50, 33,208,218,162,148,101,179,235,233,135,129,147,155, 55,120,231,221,111,115,126,249,152,245,234,130, 20,199,242, 14, 52,
+226, 13, 84, 25,171, 68,152,145,130, 88, 62,152,116,147, 5,204,161,202,141,100, 62,107, 48,192, 56,116, 52,102,130, 44, 40,180,
+ 21,145,197,201, 98,193,231, 62,253, 5,190,244,107,126, 13, 70, 91, 22,203, 83,154,217,130,121,219,208,109,214,140, 97, 36,101,
+120,241,197, 23, 24,250,142,121, 83,211, 21, 15,101,244, 65,184,196, 41,161, 80,197, 49, 16,121,248,248, 49, 49,102, 78, 79,206,
+112,214, 21,165,165,208,184, 82, 74, 52,117, 77,223,143,108, 54, 3,111,127,231,219,220,188,117, 11,237, 22, 56,151,113, 68,110,
+ 54,145, 97,183, 66, 89,121,109, 76,114, 18,154, 80,134,187, 74, 95, 15,204,249,176,184, 78,117,116, 43,157,138,123,140,177,140,
+162, 15,254,244,156,210,126, 77,113, 12,153,157,210,209, 14,111,168, 41, 32, 37,149,173,187, 46,111,166,130, 60,206,236,179,199,
+ 83,134,126,232,216,172, 87,204,103, 53, 77,109,112,141,197, 58,139, 51, 10, 93,213,229, 38, 43,204,239,131,111,118, 18, 88, 32,
+212, 47, 99,177,198,162,173, 41,113,153,133, 27,158,130, 92, 78, 58, 69, 55, 72, 90, 30, 49, 72, 60,106,209,151, 40,253,244, 5,
+ 84,224, 26, 89, 75, 58, 86, 46, 5,125,202,116,214,133, 16,163,205, 36,124, 81, 24, 45,118,186,166,114,212,149,132,106,220,185,
+117,155,211,147, 27, 92,156,159,163,173, 97,187, 93,113,243,230, 77, 82,130,247,222,123,155, 55,223,250, 14,159,255,252, 23,121,
+238,246,141,146,133, 14,218, 36,148,142, 64, 32,165, 81,246,154, 41,203, 88, 61,201,215,172,179,218,239, 0,115,146,144, 20,144,
+ 41,208, 36,108, 72, 41,161,189,240,200, 67, 6,223,109,216, 92, 93, 17,252, 88, 86,136,197, 83,159, 4,190, 97,108, 66, 91,240,
+126, 64, 41,133, 79,105,143, 45,202, 41,161,181,232, 22,182, 91, 79,213, 86,236,134,145, 49, 26, 66, 12, 84, 90, 81, 87,150,205,
+ 46,208,214, 14,235, 42, 46, 87, 29, 99,210,212,181,101,219,143, 88, 7,205, 76,211,206, 44,205,172,102,177,152, 51, 95,156,226,
+ 92, 67,221,136,203, 67, 43, 69,163,237, 62,101,210,150,115,195, 88,133, 53, 22,156,112,200,141, 18, 47,189, 81, 10,103,220, 53,
+110, 5, 36,188,247, 56, 87, 51,143,138, 49, 71,146, 10,104, 28, 70,203,133, 81, 27, 74,138,158, 41,197, 89,242,178,181,158,242,
+ 45,196,186,151,148, 66,169, 36, 40, 88,201,168,221,239,141, 81, 6,231, 26,140,245,180,179, 25, 49, 87,108,103, 61,159,249,212,
+103,121,231,219,239, 48,236, 70,162, 95,179,188,233,248,251,126,224,215,240,231,254,234,155, 92,237, 6, 54, 97,228,172,203, 60,
+222,121,186, 24, 88,145,121,232, 61,205,173, 27,252, 67,191,251, 31,230,229, 79,190,202,229,230,130,205,163, 7,248, 39,151,124,
+226,181,215, 88,173,207,233,245,200,139, 31,187,133,233, 7,134,214,146,230,138,166, 86,156,158, 44, 36,112, 40, 4, 76,211,224,
+163,220, 66,156,209, 88,171,232,183, 61,167, 51, 67,239, 7, 50, 10, 31, 18, 58, 4,250,232,153,181, 53,217,137,203, 72,208, 22,
+ 25,165,227,245,206, 86,233,107,103,181,209,215,151,161, 49,231, 98,129, 19, 22,190, 0, 98, 74,223,154,229,124,141, 49, 29,116,
+ 44, 18,164, 78, 55,142, 84,189,101,215,245, 52, 77, 77, 93, 85,212,141,100,148, 87, 90, 99,173,161,170, 44,109, 83, 51,111,107,
+118,125,195,110,215,179,235, 71, 6, 45,107, 4,166, 36,208,103,114,141,243, 51, 66,221,195, 92, 50,239,167,147, 90,107, 65,160,
+107,233,212,157,209, 36,157,138,246,171,224, 95,175, 77, 40,244, 94, 52, 36,123,249,178,134, 48,166,196, 45,107,114, 42,204,150,
+126, 96, 28, 71, 54,221,142,152, 51,182,114, 44,150, 39,204,151, 75, 22, 39, 3, 85, 59, 8,104,171,170, 80,206, 21, 10,157,164,
+ 2,166,164,193, 68,204,211, 68,185,255, 95,253,223, 51,252,240, 35,174,184, 74, 34,190,208,229,150,118, 28,241, 58,165, 0, 77,
+126,228,169, 91, 86, 90, 31,254, 59, 50, 98, 44,180,203, 98,157, 18,209,195,249,249, 99, 94,120,241, 69,238, 61,184,203,122,189,
+ 98,189,122, 66, 78, 30,171,229, 5, 55, 40,218,214,113,186,108, 81, 68,134,193,211, 13,129,222, 7,124, 46,214,187, 36, 10,223,
+202, 90, 42, 87, 49,115, 53, 49,140,156, 84, 6,231, 42,102,141,100, 51,159,158,156,178,152, 47,104,155, 57,167, 39,183,137, 93,
+ 7,109,139, 31, 34, 15, 31,157,243,218, 39, 94,197,184, 74, 56,236, 10,174, 86, 87,204, 78,103,156,158,158,176,123,252, 4,109,
+ 20,149,105,184,125,231, 69,190,247,251,190,151, 47,125,239,151,121,254,197,231,249, 3,255,230, 31,224,209,147, 11,158, 92,174,
+ 56,187,113,139,182,105,168,171, 70, 64, 39,202, 80, 87, 21, 39,243, 37, 77, 21, 72,202,161,212,200,227,243, 71,132,116,201,243,
+207,189,202,220, 69,134,126,131,138, 29, 3, 90,240,184, 25, 76, 78,232,164,176, 86,139, 32,173,236, 6,159, 30,175,239,247,226,
+215,146,190,244, 97,154,146,211, 53, 72,203,241,255,239,169,205,185,188,175, 38,177, 73, 17,195,149,164, 67,140,150, 0,147,227,
+221,149, 53, 37,239,216, 26,154,218,162,141, 40,246,201,137, 28, 61,132, 17, 98,133,194,149,124,130, 92, 60,217,105, 31,237, 58,
+ 41, 69, 4,244,160, 80, 88, 12,224, 98, 36,249, 81, 62,191,209, 56, 43,135,132,241, 70, 20,166,193,139, 94, 65, 85,242,198, 85,
+250,218,229,102, 58, 36,142, 95, 27, 77, 42, 22,193,105,199, 92, 14, 57, 35, 66,193,113, 28,249,133,159,255,203,196,208, 51,142,
+ 91,186,237,154, 87, 62,246,113, 94,251,196, 43,124,229,249, 23,184,247,232, 33,207,221, 57,195, 25,205,249,147, 11,186,221, 6,
+109, 62, 41,226, 42, 20,179,118, 46, 20,176, 50, 10,214,166, 70,235, 10,109, 26,193,230, 26,185, 68, 24, 35, 2, 41,179,207,174,
+158, 70,241,101, 57,149, 37, 42, 54,231,145,224,199,210,213, 8, 15,156, 28, 73, 41, 22, 37, 47,248, 24, 25, 70,168, 43, 83,116,
+ 70,162,138, 15, 9,134, 20,152, 16,232,214,200,229,199,185,138,148,122, 92, 85,211,141,158,237, 16,112, 86,225,156, 35, 71,121,
+109, 78,150, 51, 30, 93,238,232,199, 36,211, 40, 31, 25, 99, 98, 54, 83, 84,141,166,110,106,234,102, 78, 59, 91,202, 71, 59,195,
+ 25, 75, 91, 57, 92, 81, 89,239, 15,212,169, 11, 55,154,202, 85,152,218,145,166, 67, 88, 43, 84,146,139,214,180, 23,205,104,180,
+ 73,164, 84, 19,131, 0,116, 60,153, 72, 40,193, 68,250, 40, 29, 75,126,142,122,242, 87,107,189,231, 14,176,183, 92,234, 50,121,
+ 74,144, 60, 57,142, 98,229, 75,130,128, 53, 54,211, 46, 23, 4, 53,224, 77,226,196,103, 46, 86, 27,218,179, 27, 84,179, 37,186,
+153,209, 52,150,197,252,148,239,249,244, 23, 96,177, 96, 55,118,180,218,146,214, 35,187,221,150, 39,171, 43,124, 14,124,254, 11,
+ 95,224,213,215, 62, 69,248,224, 17,102,220,112,203,106,252,205, 91,220,127,240, 1,111,189,253, 58,167,167, 13,183,206, 22,184,
+208,240,120, 97,105,182,138,202, 40,156, 85,132,224,233,187,129,198,181,164, 84,138, 48,137,232, 3,221,110,199,141,197,146, 92,
+192, 76, 99,140,204,148,240, 61,148,179,232,202,161, 48,144,138,155, 70,235,103,173,173, 71, 69,173,220,163, 9, 71,231,194,100,
+107, 75, 69,157, 46, 19, 49,181, 15,139, 10, 19,146,172, 48, 74, 98, 18, 75, 88,215, 15,212,157,163,105,133, 20, 58,142, 13, 85,
+109, 69, 68,166, 53,149,181, 52, 77, 69, 59,171,153, 13, 13,109, 87, 83,117, 61,118,218,173,167, 15,223,170,239, 3, 97,142, 24,
+151,199,117,137,167,210, 73,101,252, 46, 14,143,105,196,110,203,180, 80,240,208, 26, 99,142,181, 96,229,243, 42, 35,219, 91,107,
+ 36,175,162, 4, 41,169, 97,196, 43, 45,136,217,174,103,179,221,226,125,192, 85,151,156,158,156,114,227,198, 25,203,179, 5,179,
+147, 37,110,222, 98,218,185,176,228, 77, 45, 83, 68, 37, 97, 85, 90,243,255,159,162,254,145,221,251, 20,153,119,148,188, 54,189,
+144,251,206,111, 18, 52,148,127, 79,229,215,135, 91, 81,186, 22, 90, 37,162, 75,205,122,181, 33,147,185,127,255,125,174,174, 46,
+233,135, 30, 69,196,232,204,107,175,188,204,162,118, 44, 92, 98, 86, 91,140,242,228, 52, 98,173,165, 31, 34,151,171, 29,143,214,
+129,221, 8,221, 48,136,234,213, 88, 22,243, 37,103,167,103,244,235, 43, 82,127,197,124,222,178,152,183, 56,103, 75,177,117,204,
+155,138,198, 25,182,235, 21,239,223,191,207, 55,190,241,117, 98, 76,220,187,255,128,197,172, 97, 28, 61, 79, 46,206,105,172,227,
+133,148,249, 13, 95,249, 65,222,122,239, 93,148,114,228,164,121,245, 19,159,230,185, 59,207,115,126,126,201,143,254, 19, 63,202,
+127,250, 71,254, 40,111,127,235,109, 30,159, 95, 96,172,101,236, 7,140, 50, 4,109, 24,135,158,202, 58,134,126,128,172, 8, 57,
+ 80,213,138,209,143,140, 62, 96, 76,102,232, 55,140,118,141,211, 17,159,148,236,140, 35, 88, 35,249,205, 41,179, 31, 43,105,125,
+ 61, 17,236, 56, 99, 60,127,200,244, 70,156, 0,170,176,190, 15,209,133,123, 86,128,145, 55,157,240,155, 37,163, 88,216,244,135,
+ 49,246, 68,157,178,198, 96,141,197,148, 95, 27,107, 69,237,233, 28,198, 40,121,227,206, 27, 92,109, 49, 78, 75, 1, 39,146,147,
+ 39, 69,131, 46,201, 87,162,152, 23, 53, 45,169,136,194,212, 94,110, 49, 5,130, 31,138,159,158, 66, 83, 36,132, 67, 46,123, 50,
+242, 79, 65, 72,186,217,218,162, 72, 61, 88,238,166,225, 85, 58,178,175, 41,149, 81,229, 13,191,191,176,104, 69,223,109, 33,195,
+249,249, 99, 86,151,151,156, 44, 91,206,150, 39,188,246,202,203,220,185,117,155,219,183, 36,125,238,197, 87, 95,102,183,185,160,
+223,109,200, 68,174, 86, 23,124,230, 51, 95, 32,171,138,152, 13,103, 55,110, 98, 10, 85,207,185,170, 8,183, 42,212,228,131, 47,
+135,207,113,215, 68,161, 86,233,146,213,153, 99, 32,135, 1,210, 32, 22,211,164,136, 33,137, 7,215,203,206,210,148, 75,115,206,
+148,174,171, 76,120,140, 4, 52,165, 4, 33, 40, 84, 25, 73,198,148,153, 53, 34,190, 26, 7,168,235,134,221,144,216, 14,123,121,
+ 44,198, 88,250, 78, 32, 50, 93,215,209, 15,146, 71,159,178,198, 71, 47,185, 40, 78, 97, 43, 69,221,214,212,245,140,166,153,203,
+248,189,110,105,156,229,100,214,224,172, 18,183,131,214, 24, 45,207,140, 53, 22,109, 28,149,173, 68,145,110,101,117,162,247, 5,
+ 93, 28,203,114, 82, 91,148, 10,133, 63, 96, 9,209,136, 46,198, 66, 40,150,209, 92,198,194,233,232,162,106,173, 43,246, 71, 91,
+ 46,166, 69, 65,109,109, 97, 71,116,101,250, 52,173,179, 36,201,205,184,154,218, 90,122,165,177, 68,102,217,240,218, 23,191,192,
+139,253,192,118,136, 34,137,200,154,198,107,178, 79,216,126,199,205,220,147,163,167,111, 18, 62, 4,190,255,139,175,176,108, 52,
+138,200,246,253,183,169,171, 22, 69,199,197,176,225,151,223,125,128, 38,240,226,237, 59, 52, 54,114,115, 62,199, 25, 69,125,218,
+162, 30, 67,211,214, 88,103, 73, 65,186,107,231, 42,217,184,104,181,183, 26,215,117, 37, 5, 92,233,194,177,151, 92,247,140, 32,
+ 98,181, 53,226, 66, 1, 81,177,255, 53,152, 20,135,198,128,235,225, 42,197, 41, 21,227,148,186,153,247,212,200,235,206,170, 92,
+246,238,145,113,244, 34,130,235,106,118, 77,197,108,104,104,218, 74, 4,104,133, 87,226,156, 52, 55,109,211,208, 54, 53, 77, 45,
+ 83, 34,239,195,209,122,246,169,101,113, 33,225, 29,114, 40,174, 3,172,213, 81, 36,179,181, 70, 50,223, 43,187, 15, 21,155,116,
+ 4,166, 92,164,247,228,188,146,170, 54, 21,117,140, 37,107, 37,151,240, 18, 40, 85,122, 13,201,250, 24, 61, 73, 27,124,200, 92,
+ 93,109, 8, 99,224,234,124,195,250,226,138, 91,183,231,156, 61,119,139,217,233, 41,205,114,196, 52, 1,219, 44,208,166, 69,153,
+170,172,164,121, 58,165,237, 87, 63,130,255,149,124,142, 99,162,216,180,167,216,243, 66, 56,146, 58,151,241,200, 49, 48, 67,107,
+202,205, 71,210,218,142, 11,253, 30,150,147,179, 64, 44,148, 17,152,138, 18,187, 82, 38,243,232,201, 57,209, 52,124,240,232, 33,
+138, 76, 55,116, 24,163,185,177, 88,240,249, 87, 94, 32,109, 47,168,180, 38,122, 79,244, 3, 90,129, 69, 17,187,158,211,182, 18,
+ 12, 38,150,213,214, 50, 4,133,171,231,204,231, 55,112,170, 2, 59,146, 93,199,220, 89, 22, 37, 15,123,244,145, 24, 61,235,221,
+ 21,231,239,221,227,173,119,222, 97,179,235, 36,139, 88,107,188,223,114,126,177,193,105,205,174,239,120,225,149,231, 24,199,196,
+237, 27,207,241,179, 63,247, 87,137, 74,211,143,158,209, 43,140,117, 52,243,154, 20, 34,175,189,242, 10,175,127,253,107,244,221,
+ 37,219,237, 21, 99,244,228, 97,139, 15, 61,182, 50, 84,161, 70,107, 67,240,137,206,123, 26,111, 25, 58,143, 54, 21, 70,121, 78,
+ 22,142,188, 11,132,156, 81, 41,224,180, 8, 54, 98,210,164,164, 9,217,160,209, 88, 60,166,108, 33,173, 50, 71, 17,138,101, 23,
+148, 36, 35, 92,248,207, 19, 98, 88, 29,252,105,207, 20,116, 25, 83, 90,119, 84,100,138,181, 77, 21,184,144,202, 98,149,155, 70,
+ 88,178, 39,151, 14, 93, 86, 49,169,252,119, 35, 86,170,214, 81, 59,133, 49, 89, 70,158, 57, 32,155,221, 0,121,148, 3, 39, 38,
+178,138,228,236,100,100,202,244,247,150,131, 56,101,200,158,156, 71,185, 20,228, 64,244, 3,126,236,240, 99,199,208,247,164, 16,
+202,243, 29,129,136,205,142, 56,141, 93,143,244, 5, 7,191,247, 1,144, 52, 17,177,236,164, 91, 48,134,245, 16, 57,191,186,226,
+241,189,187,188,252,226, 29,158,187,115,131,229,188, 1,163,152,205,231,232,198,210,143, 61, 97, 37,136,201, 97, 55,160,115,230,
+147,159,124,149,215, 62,249, 50,143,206, 47,216,110,123,198,113,197,124,121,139,211, 27,207, 81, 53, 75,146,118,104,237,112,102,
+154,116,148,110, 82,107,146, 58,252,251,148,126, 24,189, 39,244, 29, 33,193, 56,140, 12, 93,102,236, 21,195, 38,146, 7,207,250,
+106,160,203,154,216, 52,232,113,164, 46,122,130, 74,101,134,228,101,175, 8, 12,222, 66, 26,176,170,196, 39,103,209,177, 84,149,
+129,236, 81, 38,177, 13,154,171, 62,211, 26, 69, 26, 51,163,246,100,101,169,231, 11, 30,221,127, 68, 80, 25,101, 53, 99,113, 14,
+212, 45,184, 10, 92,101,112, 77, 75, 51, 91, 82, 53, 51,154,118,198,172,109,152, 55, 21,179,218, 81, 25,141,211, 34, 66,114, 70,
+112,185,146,125,238,112,174, 65,215, 53,218,200,197,196,150, 96, 17, 17,246,137, 2,192,104, 93, 50,211, 3,218, 86,178,203, 69,
+ 73, 2,101, 17,101,198,152,101,100, 60,122,240, 94,222, 7, 10,172, 51,228, 41, 82, 21,201,200, 78, 42,203,165, 42,183,224, 3,
+217, 40, 84, 85,145,250,154, 24,125, 81,202,195, 34, 87,168, 52, 98,212, 64,229, 28,117,223, 50,143,153,109,239, 25,123, 41, 94,
+169, 82,228, 20,139, 83,196,176,208, 6, 67, 98,245,248, 93,137,121, 30, 71,250, 49, 96, 92, 69,221, 88,150,203, 37, 95,248,244,
+ 11,172,206,159,112,243,100,193,217,141, 57,198,102,114,244, 44,103, 53,149, 86,204,234,150,156,132, 91,239,154,150, 24, 19,206,
+ 58,241,162, 71,104,107, 37, 62,244, 16, 25,146, 42, 60,142,192,102,232,169, 79,150,178,210,152, 4, 3,249, 0, 65, 17,145,168,
+192, 84,148, 50,215,104,133, 83,105,156, 60,221, 41,167,107,133, 52, 33, 29,127,222, 39,133, 30, 64, 84,185, 96,194, 85, 81,200,
+135,160, 24,250,145,110, 55,210, 53,158,174, 31,105,187,145,218, 88,180,147,231, 27, 99,113,117, 69, 85, 85, 82,220, 43, 75, 99,
+ 53, 99, 97, 62,236,215,167,229,111,159,130,105,246, 62,172, 61,201,244,192, 43,157,110,237,202, 24, 84,114, 24,151,177, 85,162,
+ 82,135,230,115, 18, 7,114,180,127, 87, 79, 93,170,149, 41, 26,166,146,226, 40, 47, 74, 36, 37,133, 9, 19, 72,205,145, 48,140,
+201,176,218,245,156,239,214, 60, 94,119, 92,173, 55, 60,191,245,220,186,221,115,114,107,160, 61,147, 73,144,105,230, 40, 59, 67,
+ 23, 34,221,255, 48, 58,245,239,134, 6,125,138,185, 61,165, 82, 77, 47, 98, 62,234,210, 85,241, 6, 78,233,100,114,118,101, 18,
+145,221,118, 75,207, 64,223,247, 24,205,129, 50,167,165, 88,121,223,161,230, 45, 26, 77, 83, 47,216,172, 86,108, 87,107,116, 76,
+ 37,101, 9,180,181,124,236,249, 23,232, 67,166, 15,153, 97,220,178,221, 94,200, 27,220, 86,172,134,200,234,209, 57,117,211, 16,
+178, 97, 12, 29, 49,105,162,171, 56,185,253, 49,230, 65,144,126,231, 79,206, 25, 71,121,184,149,131,144, 34,167, 55,111,162,208,
+220,122,254, 5,158, 92, 94, 17,180, 38,228, 76,179, 90,209,143, 35,219, 97,199,251,119, 63, 96,190,156,147,115,164,219,109, 89,
+175,174,246, 98,172,205,118, 83, 10,164, 97, 67, 39, 30, 89,227,168,116,133,107,150,156, 44, 22,180,181,197,233, 68,214,146, 75,
+174, 68,122, 42, 88, 80, 68,169, 43,171,139, 34, 50,116, 14,171, 52,149, 45,133, 73, 43, 81,205, 22,127,231,113,166,219, 97,218,
+ 34, 60,244, 41, 32,229, 48,174, 42, 33, 9,230, 48,198,154,200,114, 19, 53, 73, 33,129, 25, 19,111, 91, 84,218, 18,225,171, 11,
+ 68,101,186, 17, 59,231,168,107, 71, 93, 25,156,201,104, 37, 59,229, 28, 71, 82, 80,101, 9,159, 72,201, 98, 82, 32,235,128,210,
+ 82,237,178, 18,191,187, 42, 54,133, 28, 11, 12, 36,140,114,136, 22, 48, 82,156,246,161, 69,253, 46, 20,177, 26, 87,201,164,198,
+ 26,183,143, 88,213, 31,182, 75,211, 6,109, 68,157,107,172,120,117,179, 2, 55,155, 81,183, 21,183, 23,160,179, 28,184, 77,237,
+ 64,137, 64, 40,167,196,118,181, 18,145,102,244, 60,122,248, 8,173, 53, 47,189,244, 49,140,115,228,156, 25,135,158,126, 12,172,
+118, 35,187, 49,243,202, 39,207, 56,189,121,179,236,237,237,100,191,144,231,163,160, 57, 39,192, 76, 70,130, 45,146, 46, 93,101,
+ 72,120, 53, 50,166,145, 77,128,128, 4,182,156,111,183, 12, 42,211, 23, 5,178,173,172,136,124,148, 0,166,180,149, 28, 2,111,
+ 13, 49, 6,180,169,100,197,145, 76,185, 92, 73,150,194,106, 20, 78,121,164,140,173, 99, 34,140,137, 59, 47,220,226,226,242,138,
+174,207,216,214, 16, 60,248, 62,148,247,147,162,174, 43,234,166,161,170,154, 61,112,164,174,107,234,186,194, 57,209,146,180,181,
+163,118, 22,103, 53,149, 45,225, 57,214,146,181, 36,161,233, 66,131, 51,198, 10,170, 84,233,114,136,203, 37, 45,134, 64,142,146,
+ 93,129, 50, 56, 50, 1,241, 91, 39, 25,106, 48,140, 1,162, 72,146, 66, 89,171,200,204, 65, 86, 19, 83, 84, 53, 41,203, 68, 70,
+ 70, 26, 16,133, 11,160,140,198,182, 51, 50, 3, 41, 5,180,177,184,198,178,180, 13,174,246,244,189,103, 28, 51, 67, 8,204,198,
+ 72,223,143,210,145, 14, 35,195,232, 73, 41,160,114, 68,169, 68,213,180,204,231, 51,116, 6, 87,213,220,168, 28,218, 10,105,211,
+213, 21, 41,120, 62,246,226,115,228, 20, 88,156, 46,168,103, 21,201,247,156,158,157, 82, 57,203,172,109,200, 40,134, 97,160,105,
+ 22, 37, 37, 83, 84,238,214, 88,250,161,163,117,114,137, 23,225,190, 4,178,100,107,168,107, 89,233,228,105,242, 80,214, 90, 28,
+157,209, 31,222,220,229, 3, 41,244, 67,194,146,114,249, 76,211, 28, 60,229,103,243, 38, 38,114,166, 15,114,225,233,251,158,110,
+ 87,209,205, 26,186, 82,188,181, 82, 40, 43, 22, 55, 99, 37, 27,161,174, 43,170,202,137,120,210, 74,168, 83,142,169,172, 86,190,
+139, 10,254, 40, 69,242,218, 68,175, 76,105,246,105,115,165, 6,237, 53, 96, 5,243,170,143,118,230,250,232,252,146,207, 83, 10,
+123, 65,228,230, 56,146,172,101,212,254,218,232, 63,166,140, 79,208,143, 35,235,174, 99,236, 58, 54, 93,207,102,183,229,118,223,
+113, 54,142, 44,110, 6,234,152,176, 46,160,173,104, 64,254, 7, 81,212,127, 37,163,249, 61,111,190,136, 58, 76,177, 15,237,247,
+ 28,211, 3,165,147,132,141,170, 84, 68, 65, 9,101,165,224,239, 54, 91,201, 2, 46, 89,218, 85, 85,211,117, 59, 18, 2, 78,240,
+ 36,178, 78,212,206,114,227,230, 41,151, 79,206, 89,156, 44,229, 1,219, 68,182,193,176, 94,247,108,198,145,168,160,243, 3,163,
+ 31, 64, 25,252, 40, 9, 71,117,229, 48, 57, 97,171,138,246,228, 6, 39,139, 83,170,230,132,186,110,112,214,210,182, 13,203,197,
+156,232, 61,143, 31, 63,230, 47,254,212, 79,240,224,225, 99,206, 47,174,208,202,112,251,121,207,173, 59,119,176,179,150,175,189,
+254, 58,227,112,151,222,123,208,137,223,253,143,253, 30,134,126,203,118,187, 37, 19,217,174,215, 88,165, 72, 62,162,179,162,219,
+245,108,155,142,202,213,164, 44,249,200,195,213,138,198, 90,114, 24,153,153,204, 73,165, 48,166, 69,229, 40, 74,211,164, 9,211,
+248, 43, 5,116, 74,232, 4,198,106, 42,163,105, 42, 75, 93, 89,172,214,194,242,215,250, 67,166, 52,135, 93,123,230, 72,247,160,
+ 14,214,150,233,159,122, 42,234,229, 54,127,192,194, 22,142,179, 82,101,124,170,142,148,166,101,148,181,223,191, 43,140,205, 88,
+ 19, 81,121, 36, 6, 69, 24, 69, 81, 78,142,152, 56,162,188, 67, 87,101, 20,173, 45, 90, 23,210,215,116, 41, 41,250, 11, 82, 57,
+ 82, 98, 64,165, 80, 48,154,115, 78, 78,192,186,150, 49, 36,130,210, 88,231,132,214,102, 93, 1,211,148,241,217,209,247,167,180,
+222,123, 93,165, 43, 54,101,215,101, 80, 70, 99, 84,102,220, 93, 50,174, 31,179,108, 64, 87,167, 5, 37,234,233,187,157,116,143,
+ 74,118,175,171,213,134,205,118, 71,219,182,108,119, 59,121,238, 77, 67, 51,215,184,106,198,233,169,161, 27, 60, 24, 9, 66,249,
+218,215,127,145, 31,248,245,191,129, 91,119,238, 16,117, 77,196, 20, 27, 77, 89,159,232, 3,236, 67,229,194,137, 54, 65,126, 14,
+ 30,168, 34,201,121,146,115,244, 67, 71,174, 44, 23,221,134,203,245,154,205,174,163, 78,153,214, 56,146,207, 12, 99,198, 85, 74,
+246,230, 90,137,191, 56, 37,170, 36,249,215,209,251,178, 11, 85, 12, 62,224, 3, 92,109, 6,124, 86, 12, 62, 98,181,120,157,189,
+ 31,233,123, 79, 86, 20,124,180, 76,223,140, 46,239,165,186,162,174, 90,234,170,166,174,106,172,149, 75,148,177, 22, 87, 85, 52,
+101,188,106,173,162,170, 14,122, 11,235, 28, 49, 43,108,249,249,107, 93,149,169,202, 36,190,205, 88,103, 81, 36,194, 48, 8,231,
+126,148,176,142,172, 20, 86, 75,183, 26,179, 98, 12,158,108, 44,218, 71,250,212, 65, 89, 27, 77,171,217,156, 82,233,163, 65, 69,
+ 89,255, 40,171,132, 70,151, 68,252,153,181, 69, 25, 77,180,137,228, 35,174,140,233,173,211,180, 85,194,182,145,161, 15, 88, 31,
+240,163,199,182, 21, 49, 38,154, 81,200,104,193, 75, 74, 87, 46,204,242,138, 76, 10, 1,103, 20,206, 8,106, 24,149,176,206,161,
+245, 12,147, 51,139, 69, 75,179,172,105,230, 13,126,183,225,236,185,219,180,179,133,172, 13,148, 46,147, 20, 71, 55,120,193, 76,
+ 91,139,209,153, 77,183,229,230,233, 29,214,155, 29, 89, 85, 50,214,213, 14, 83, 59,170,166,150, 75, 49,135,130, 23,203,100, 37,
+ 29,133, 27,125, 55, 75,235, 36,162, 61,176,216,143,226,136,243,209, 57,146,243,145,144, 58,239,185, 49, 57, 75,240, 75, 55,140,
+184, 93, 71,179,169,169, 92, 69, 85,201, 4,193,166,188,143, 11,183, 90, 38,122,117, 85,209,212, 21,245,232,241, 33, 10,196, 50,
+167,239, 46,250, 58, 10, 94,158,152, 20,123,225,246, 52,170,209,170, 92,178,211,126, 10,118,152,206, 73, 76,172, 62, 26,199,171,
+ 73, 48, 56, 97,235,202, 27, 50,146, 74,164,114,249,125, 28, 98,204, 69,152, 42, 56,221,115, 31,217,244, 3,155, 93,199,213,122,
+203,115,219,129, 91, 59,207,217, 45,143,173,101,253,102,173,197,170,143,184, 85,253, 74,198,238,127,163, 74,248, 95,201,231,121,
+198, 62,167,228,134, 24, 50,165, 0,201,173, 59, 21,153,191,182,229, 33, 80, 73,110,204, 42,145, 74, 38,116, 12, 30,103, 43,230,
+179,154,197, 98, 73, 93,183, 60,188,247, 30, 99, 8,152,170,146, 23,163,228, 56, 47,230,115,108, 81, 81,239,250,158,110,179, 99,
+ 23, 51, 99, 10, 92,108, 59,118,163, 39,107,176, 85,121,147,212,150,128,220,234, 99, 55,162, 76,160, 25,192,174, 59,124,184,135,
+ 81, 18,160, 80,215, 78,216,194, 77,195, 11,207, 63,207,139, 47,190,200,213,195,247,121,120,255, 33, 55,111,220,228,226,201, 57,
+ 95,248,204,231,248,228, 23, 62,199,106,189,230,203,223,243,125,184,170,226,141,111,125,147,247,222,127,143,221,118, 77,109, 21,
+ 63,246, 99, 63,198,111,254,225,191,131,213,250,138, 15, 62,184, 71, 68,222,240,227, 56, 22,213,127, 70, 23,241, 73,179,152, 51,
+175, 26, 94,189,179, 96, 97, 6, 76,106, 8, 73,209, 5,200,218,177,235, 37,155, 93,231,136,201, 1,155, 51, 22,139,213,153,202,
+ 40,106,107,168,157, 40,140,181,226, 8,204,112,132, 60,221,147, 2,143,222, 10,215,108, 32,165,224,105,246,255,156,222,192,106,
+ 10,232, 41,251, 78,173,165,216,236, 71, 98, 89, 18,150,166,217, 64, 78,138, 20, 34, 62, 71,100,209, 29,138,165, 80, 50,231, 77,
+172,208, 49,200,135,149, 72, 76,180,151,184, 89,145,139,151, 46, 86,214, 64, 18,195, 40, 93,135,181,150,106, 54,227, 76,215, 52,
+179,196,152, 50, 65, 75, 78,182,115, 50,194, 55, 69, 57,175,141, 46,248, 80,189,127, 77,180,146, 95, 75, 87,168,100, 21, 84,196,
+ 84, 99,191,102, 8, 35,126,216,144, 66,207,233,201, 2,239, 51, 90, 91, 90, 53,103, 28,122,156,177,108, 55, 27,238,189,255, 62,
+239,222,253,128,249,124,206,141,155,183,169,154,150, 97, 76,140, 99,160,178, 53, 84,144,178, 38, 43, 67,191, 27,184,220, 94,240,
+223,253,169, 63,193,255,248,119,254, 14,176, 51,218,229, 25, 40,197,118,179,161,110, 26, 41, 98,211,129,153,100,237, 97,115, 41,
+ 80,106, 71, 54, 14, 85,215,232, 81, 70,151,175,191,241, 77,126,246, 47,253, 28,233,226, 1,126, 16,241,234,102, 24, 49, 88,114,
+ 18, 34, 89,206, 1, 50,146,175,173, 52,227,224, 49, 74, 49, 14, 17,165, 42, 70, 31,112,149,146,212,179, 32, 54,186,136, 92, 24,
+235, 90,113,117,185, 38, 43, 85,232,139,150,193,135, 50, 81,200, 7,107, 90,233, 62, 52,101,101, 16, 35, 57,201, 1,235, 42,135,
+173,107,234,198, 81, 87, 86, 10,156, 86, 88, 39,222,235,172, 4,149,171,141, 37,163,100,231,238,196,230, 38,158,229,136, 86, 72,
+ 94,117,140,165,139,135,188,247,156,139, 77, 80,153,204, 56,110, 14, 48,169,201,168, 88,158, 31, 93,242,182,147, 47,201,141,218,
+145,181,140,140,179, 86, 66,149,203,242, 61, 40, 39,186, 14,114, 89,215,100,112, 46, 19,213,128,169,106,124,237,169,114, 34,196,
+ 76, 21, 18,141,143,178, 11, 30, 61, 41, 30, 82,199, 84,138, 56,131, 88, 3,157,136,243, 92, 83, 50, 14,156,163,153, 85,216, 70,
+ 46, 14,138,200,205, 59,119,168, 27,241,247,199, 32, 5,116,244, 94,162, 69, 67, 36,198, 17,101, 43, 82, 12, 24,235,200,218,145,
+162, 97,140, 34,234, 82, 85,133,169, 43,178, 18,106,168, 78, 83,140,105, 46, 40,214,201, 79,254,209,235,216, 41,110,152,163,252,
+136,107,140,145,163, 95, 31,232,147, 71, 73,129, 64, 44, 43,181, 97,244,116,131,103,219, 13,212,117, 71,237,164, 32,214,245, 81,
+247,172,132, 42, 89, 85,242,222,157,154, 18,173,194, 52, 99,120,166,212,237, 53,239, 71,194, 57,181,103,199, 78,126,123, 43, 81,
+187,198, 98, 74,147,169,148,190,238,114, 57, 26,189, 43, 93, 38, 54,147, 43, 75,233,130,252,133,156, 3, 38,219, 2, 47, 50,215,
+240,205,162,217, 41,151, 33,192, 39,133, 79,145,188,238, 24, 70, 79, 63, 4,250,110,100,220,141,204, 22, 21,117,237, 74, 92,172,
+ 57, 40,156, 83, 74, 7, 5, 96,230, 25,184, 11, 71,226,181,143, 34,186,253,245, 20,239,107,136,218, 15,161,201,125, 20,124, 6,
+101,202, 62, 70,110,204,170,220,224,180,158,252,208, 34,134,146,215, 87, 30,162,166, 22, 78,112,221,212,180,117,131, 43,183,162,
+249, 98, 65, 55, 12, 60,119,118,147, 87,110,157,162,181, 4,222,247,222,211,220, 94,112,239,209, 35,190,253,224,156,251,143,183,
+172,119,158,144, 20, 85, 51,167,106,151, 84,117, 35,246,245,228,233,251, 53, 62,139, 45,143, 36, 1, 29, 99,191,165,235, 54, 50,
+218, 3, 76, 25,139,174,102, 51,134, 97,224,237,111,183, 44, 42, 71,142,112,254,232,156,237,213,150,205,213,150, 87, 94,123,141,
+ 79,191,242, 9,158, 59,187,201,162,169,184,125,231, 57,190,240,185,207,115,235,206,109,126,234,167,126,146, 63,243,167,255, 36,
+255,253, 95,249, 37, 86,171, 13,191,243,183,255, 78,222,125,239,125,126,252,207,254, 57,174,174, 86,104,165, 8,227, 40, 5, 56,
+238,200, 24,172,110,153,217,204, 11,167, 53,117,142,228,164,217,230,134, 39, 15, 87,188,252,242, 11,152,213, 21,249,210, 11, 45,
+ 42,169, 34, 78,211, 56,173,169,140,161,178, 7, 15,176,158, 0, 26,215, 68, 49, 71, 55,108,125, 61, 46, 87,113, 72, 21,201,197,
+146,144, 75,241,223,235, 41,178,222,123,210, 35, 71,251,169,146, 85,109,178, 41,152,128,120, 68,123, 74,152, 56,177,215, 41,189,
+146, 8, 39, 93, 86, 18,115,156,132,188,166,146, 70,233, 36, 9, 91, 57,147,116, 33,218,229, 41,253, 72,237, 81,174,202,214,184,
+ 22,148, 83,184,100, 72,198, 18,109,181, 79,185,147,125, 88, 9, 91,208,135,128, 33,173,244, 83,182,158, 82,228,139,117,172,223,
+109,121,252,240, 3,102,198,243,226,157, 91,124,251,141,111,176,156,181,180, 77, 3, 40,194, 32, 65, 59,179, 90,172,137, 55,111,
+220,228,241,197, 5,222, 7,182,219,142,217,201, 13,154,186,225,226,241, 19, 54,155,173, 36, 51,161,233,124,226,241,229,138,102,
+177, 96,136,129, 95,252,249,191, 68, 63, 6,126,240,171, 63,196,197,147, 39,188,249,230, 91,216,202,242,183,253,240,223,201,216,
+117,100, 37,113,195, 86,105,146, 10,228,216,243,224,193,123,196,113,160, 54,154,110,125,201,195, 7,247,184,127,239, 46, 23,143,
+159, 48,222,127,196,205, 74,172,122,221,144,113, 90, 70,130,147,211,196, 89, 67, 24,189,136,169,178,224,117,167,117,138, 53,142,
+ 20, 36, 95, 32,102, 69,214,154, 49, 6, 57,236,172,101, 12, 3,161,184, 8, 70, 95, 4, 71, 74,149,245, 24, 37,195,219,202, 52,
+ 33, 79,133, 51, 18,131,136,243,246,143,208,196,100,119,150,122,138,208, 84, 98, 59,155,152,222, 5,135,112,205,163, 44,143,141,
+ 46,133, 85, 34, 54,197,251, 91,158,213,164,192, 32,223, 67,241,114,203, 74, 38,202,229, 38, 70,121,191,147, 75,128,141, 71,233,
+ 44, 54, 66,165, 37, 65, 48, 37, 48, 6,165, 44,218, 53,132,161, 35,147, 48,202,202,215, 31,163, 52, 18, 51, 77, 12, 1, 21, 53,
+ 54,103,178,178, 84, 49, 49,250, 72,240,161,176, 48, 98,129,182, 36,226, 56,136, 5, 77, 35,133, 91, 67, 51,107,168,106, 41, 94,
+174,182,168, 74,149,166,198,178, 88, 46, 81, 74, 83, 85, 21, 93, 24,246, 22, 84, 91,214, 92, 41, 10,105,177,170, 28,131,143,162,
+187,176,142, 24, 16, 33, 46,128,115, 18,135,170, 20,185,160, 91, 67, 8,251,143,105, 61,122,157,228,249,209,132,151,235,199,252,
+161,152,231,107,139, 61, 14,136,214, 9, 89, 86,212,243,195, 24,216,245, 3,205,174, 47, 46, 8, 17,116,106, 99,196, 34, 87,132,
+174, 50,253, 43,250, 28,107,240,209,160,178, 92, 14, 39, 72, 90,126,202,137,197,177, 9,247, 40,109, 78,208,136, 22,157, 45, 58,
+218, 61,100,106,178,169, 82,168,111,170, 8,228,152, 72,146,250, 16,203,178, 95, 95,148, 45, 78, 84,169,196, 72,235, 35,133,253,
+ 52,217,148, 14, 94,165, 44,151,129,156, 25, 66, 18, 46,192,197,154, 20, 51,126, 8,156,156,136, 96,208, 8, 7,193, 94, 47,234,
+ 71,192,151, 15,235,150,175,199,103,126, 52,156,230, 56,192,229,111, 70, 55,127,252,156, 92, 83, 94,239,181, 13, 83, 12,103, 65,
+ 64,106, 35, 7,123,137,110,173,156,140,144, 69, 88, 99,176,218, 97,148,101,183,235,121,114,177,226,135,190,242, 27,185, 61,111,
+232,250,129,119,223,191,199, 55,190,245, 30,239, 61,186,224,193,229,154,157,151,192,128,170,110,121,233,227, 31, 71,161, 25,135,
+145,208, 15, 12, 93, 7,217,227,140, 28,108, 22,141, 50, 10,173, 2, 93,191,147, 32,123, 50,131, 15,251, 31,238,110,119, 1,218,
+176, 90, 95,112,101, 29,173,210,220,123,242,152,147,118, 46, 29, 67, 85,241,217,213,154, 87, 95,254, 56, 79,238,125,192,110,117,
+197,242,228, 38,171,203, 43,254,145,255,201, 63,202,151,191,231, 75,252,193, 63,248,239,241,237,119,222,229,143,252,103,255, 25,
+223,255,253, 95,225,159,254,167,254, 25,254,252,159,255, 73,190,246,181,175, 51,134, 94, 50,211, 53, 40, 55, 99,219,237,120,241,
+197,207, 48,111, 27, 92, 86, 12, 25,198,161,229,237, 7,239,243,213,191,253,135,233,190,246, 11, 52, 78, 17,209,164,104,247,118,
+ 54,138,226, 55,151,241,218,132, 74,206,121,194,189, 22, 1, 76, 9,209,217, 43, 72,211,225, 86, 62, 41, 67,133, 43,160, 14,214,
+ 32,165,143,160, 13,135,110, 29,196, 99, 29,211,196,139,201, 68,157, 15,225, 40,123,152, 75, 1, 92, 25, 8, 49,224,227, 64, 21,
+ 50,117,200,184, 26, 76,149,112, 21, 84, 85,177, 56,218,114,107,206,134,140,116,235,162, 6, 55,147,100,110,159,125,160,209, 84,
+ 56,148,146,104,205, 84, 24,214,202, 88, 74, 74, 69,193,170,170, 61,193,112,159,104,151,143,126, 93,124,245, 42, 70,206,239,127,
+135, 71,239,125,139, 59,103,115, 22, 55,150, 52,117,195,208,245, 92, 93,174,184,188, 90,179,221,118,168,156, 57, 89,206, 89, 46,
+102,220,121,225, 5, 78,111,221,228,253, 15,238,243,232,241, 37,171,171, 21,183,110,220, 32, 7,143,142, 35, 58, 5, 1, 79,164,
+ 68,232,119, 60, 92, 93,241,242, 39, 94,225,193,221,247,217,172, 87,252,220,184, 37,198,200,147, 39,231, 60,124,244,144,153,150,
+117,205,110, 24, 73,170,230,133, 23, 95,162,105, 91,174,206, 47,121,252,232,161, 48,243,201,248,110, 75,240, 61,202,100,250, 97,
+160,181,142,202, 26,198, 20,217,165, 72,149,101, 91,238,163,172,185, 84, 22, 43, 98,206,106, 31,173,233,163, 39, 68,141, 65, 17,
+ 83, 64,103, 87,252,199, 18,218, 81,213, 21,227, 24, 72, 89,188,237,104, 75,223, 7,241, 62,167, 36, 17,172,198,148, 9,103, 57,
+212,224, 40, 89, 78,124,189,131,247, 52,177, 46, 99, 91, 41,252, 41,150, 40, 81, 35,250, 12,125,244, 60,202, 26, 93, 16,164,130,
+245,206, 68,193, 15,138,197, 40, 79, 79,217,254,182, 64,206,146,224, 23, 66, 40,146, 42,176,101,255,172, 85,145,176, 41,113, 75,
+136,158, 65,131,146, 61, 59, 90, 17,162,228, 16,232,202,129,178, 37, 80, 37,137,245, 54,137,159, 61,133,128, 42,218, 17,179, 79,
+212, 83, 88,101, 48, 37, 36, 37, 86,134,232,125,233,206, 51,169,210, 80,176,189, 85, 83, 73,228,103, 91,225, 42,115, 32,215, 89,
+209,204, 24, 52, 51, 87,201,133, 54,202,217,238,156,219, 7, 93, 89,103, 25,131,103,232,123,218,217, 92, 46, 76, 24,198, 16,193,
+ 86,132,156,112,214,146, 20,140, 81, 84, 5, 42,136,183,223,143, 30,239,143,139,250,245,110, 83, 29,219, 96,167,243,225,175,231,
+184,127,170,113,204, 89,228,170, 99, 76, 48,122, 92, 55, 80, 91,131,179, 2, 94,202, 57,203, 68, 77,137, 24, 82,112,222,165, 81,
+209,147,237,241,218, 59,254,163, 39,196,211, 58, 96,143,142, 45, 5,219, 84, 82,103,242, 81,134,201,113,160,152, 50, 7,187,238,
+196,179,184, 70,155, 59, 96,237, 50,250,154,221,245,186, 62, 71,239,129, 87, 70,155,253, 37, 73, 23, 80, 88,200,138,109,239,201,
+ 23, 87,140,227, 64, 93, 87,162, 65,146, 23, 64, 93, 19,163, 61, 45,102,248,176,174,252,195,254,253,184,224,127,120,134,246,223,
+ 28,143,251,211, 75,130, 92,200,109,211, 27, 82, 44, 40,114,149, 79, 90,210,217, 42, 43,105, 73,163, 31, 25,148,230,198,217, 45,
+140,171,240,222,243,157,247,222,231,191,250,147,127,134,215, 94,125,129, 15, 62,184,207,189,251, 23, 92,109, 6, 66, 82,120, 52,
+ 41, 91, 78,110,220,230,133, 23, 63, 70,138,158,110,125, 69, 26,118, 60,119,182,224,149,207,190,200,114,217, 50, 95,204,196,235,
+ 27, 37,187,125,183,235,216,238,182, 44, 78,150,248,148,121,247,253, 15,120,235, 59,239,179,237,250, 61,235, 58, 43,195, 54, 68,
+242,172, 37,249,145, 52, 40,174,186, 45,205,233, 41,219,190,227,239,254, 45,127, 55, 31,188,253, 6,119,223,251,128, 71,151,151,
+ 12, 99,228,207,252,233,159,224,183,252,189,127, 15,255,194,191,248,251,248,183,255,157,223,207,106,187,225, 39,127,234,207,243,
+237,239,188,195, 63,244, 15,254,131,252,173,191,241, 55,242, 95,255,215,255, 37,119,239,190,203, 48,116, 40, 51, 67, 69,232, 2,
+ 60,186, 92,115,182,108, 89,123,197,207,191,254, 30,203, 59,175,210, 46,206,196,159,173, 34, 74,101, 70,101,136,200,206, 45,150,
+219,124,136, 1, 19, 21, 65,139,151, 63,151,157,220,225, 25, 72,207,132,182, 80,216,255,135,203, 96,190,198, 84, 46, 57,134,135,
+212,182, 41, 4, 48, 79,221,127, 56, 2, 2, 31, 84,176,199,183,105, 93,232, 92,117, 93,211, 54,129, 89,155,136, 81, 83,103, 75,
+133, 19,222,182,170, 48, 90,242,174,181,171,228,112, 53, 71,118,146,189,232, 79, 20,207, 89, 75,128,131, 20,251, 98, 19, 49,210,
+153, 83,198,104, 73, 29, 82,236, 14, 72, 98,245,108,111, 34, 39, 11,143,238,189, 71,149,119,220,123,251, 27,220, 79,129,223,252,
+155,255, 46,124,204,188,255,198,155,212, 77,203,174,144,178,172,181,216, 33, 80,213,137,166,117,104,231,120,225,197,151, 88,239,
+ 70, 98,244,144, 2, 58,121,108,142,132, 41,178, 49, 8,200,229,124,179,225,209,189,251,156,222,188,193,227,135, 15,184,124,244,
+128,170,174, 81,192,246,242,130,159,250,137, 31,167, 46, 98,179,213,102, 71,238, 55,188,250,234,171,248,237, 57,111,252,210,207,
+ 81, 91,205,173,179, 19, 82,202,124,251,238, 61,238, 62,184,199,195,139, 21,207,147, 73,141,101,200,176,141,129, 62, 38,218,146,
+220, 5,224,135, 32, 93,127,140,120,149, 73, 74, 19, 66,201,145, 63,112, 55,112, 6,118, 33, 80, 23,161, 99,191,235,100,111,157,
+196, 37,225, 51,152,114, 67,119, 90, 81, 85,166, 64,167,142,139,114,249, 59,125, 33,132,133, 88,198,209, 73, 98,116, 17, 59,157,
+113,134, 28, 19, 33,121,220,145, 29,143, 44,121,239, 49, 75,146, 88, 82,145, 52,137,102,141, 41,145,181,105,111,171,242,251, 81,
+191,221,239, 58,141,177, 34,200,211,197,169, 81,126,173, 74, 80,142,114, 26, 76,222,143,109, 15,211,197, 50,221,113,149,124,173,
+ 5,145, 58, 17,215,178, 31,101,162,100, 28, 57,136,243, 39,149,105, 80,178,134, 96, 32,232,140, 85,145, 28,188,124, 46,228, 18,
+ 81,183, 13, 85, 83, 97, 42, 67,214,133,207,160, 21,211, 0, 44, 75, 5,192,104, 75,223, 15,164,148,104,219, 22,239,165,232,165,
+224, 81, 10,134,221,192,114,126, 34, 58,146,148,240, 73,163,156,198,199, 32, 23,187, 24, 8,101, 31,157,125, 96, 28, 70,198, 97,
+ 44,185,243,161,236,212,205,181, 6,144,163,105, 94,254,144, 44, 8,173, 37,113, 79,231, 41, 22, 91, 95, 27,183, 63, 19, 28,118,
+141, 76,151, 24,134,192,214, 14,114, 33, 42,180,202,186,174, 69,232, 87,242,198, 39,114,157, 86,106, 31,193, 45,164, 56,245, 93,
+106, 76,222,135,176,236,199,235,186,136, 80,141,189, 86,227,174,223, 66, 14,163,245,195,173,230, 89, 72,139,220, 25,115,193, 24,
+ 23,240,213,181,194,126,200,107, 48,214, 96, 1,147, 4,144, 54, 33,106,173, 51,232,202,146,181,161, 31,101, 13,150,201,216,186,
+114,135,104,238,227,130, 94,110,184,233,104, 7, 18, 11, 10, 53, 23, 8, 11, 71,121,219, 40,245, 76,178,215,241,247,163, 10,139,
+ 93,237,243, 98,143,198, 30,197,210,150, 21, 79,135,122,126, 36,131, 92,125,200,139, 41, 63, 3,189, 7, 24,164,156, 5,250,144,
+165, 75,108,172,193, 39,133, 81,150,147,229, 41, 85, 91,113,118,227, 20, 63, 26, 30, 92,172, 56,191,188,194, 89, 75, 86,153, 16,
+ 69,237,174, 82,197,199, 95,254, 4,203,121,195,184,187,130, 48,240,153, 23,111,241,137,151, 62,199,199, 63,246, 60,143,238,127,
+192,147, 39, 79,184,119,254,136,243,203, 21, 87,235, 29, 40, 75, 24, 7,172,206,124,236,197,231,121,233,227,175,242,210,115,119,
+104,170,138,229,233, 13,238,222,127,200, 59,239,221,101,181,217, 17,149,162, 31, 50,139,166,102,187, 93,241,137,151, 94,230,147,
+175,126,156,247,223,121,135, 95,252,133, 95,228,135,255,142,223,204, 39, 63,253,121,126,246,103,126,138,203,203, 13,231, 31,220,
+229,143,255,177, 63,206, 63,242, 35,255, 56,255,218,255,238,223,230, 95,249,125,255, 2,187,221,134,247,222,123,135,127,255, 15,
+254,251,252,250,175,252, 32,255,252, 63,255, 47,241, 99,127,242,199,248,229, 55,126,153,111,126,243, 45, 84, 54,220,123,231, 46,
+172, 46,168,102, 13,239, 62, 94, 81, 47,159,227, 43, 95,249, 44,111,188,254,117,130,239,167, 0,194, 18,151,150,100,142,158,216,
+131, 34,116,144, 7,198, 24,117,200, 62,191,166, 82, 45,251,244,114, 25, 56,206, 28, 63,236,204, 11,170,180, 20,111, 81,195,170,
+242, 49,189,137, 14, 69, 86,232, 75, 7,204,103, 86, 7,230,191,100, 33, 91,154, 70,192, 42,117,210,100, 44, 74, 87, 24, 83,227,
+234, 6, 87,181,104, 87,163, 92, 13,174, 42, 36,166, 90, 66, 92,140, 69,219,114, 75, 46,163,251,125,194, 92,121,142, 20,182, 28,
+198,121,207,160,103, 74,168, 83,135,160,169, 61, 72,167,188,103,140,202,144, 4, 56,242,238,183,191,141,238,206,121,225,102,203,
+ 11,183,207,248,198, 55,190,201,189, 15,238,177,186,184,228, 91,111,125,155,219,207,189, 72, 68, 81,215,141, 48,170,163,167,239,
+119, 52,245,162,168,105,229, 48,218,118, 61,221,110, 71,165, 19, 70, 69, 44, 69,157,159, 50,195, 32,161, 54,235,213,154,118, 54,
+ 99,232,122,118,126,196,123, 79, 8,145,245,102,205,108, 54,227,206,157, 59,248,186,226,242,201, 57,239, 40,232,214,151,108, 55,
+107,174,158, 60,228,198,141, 19,110,222,248, 56,174,174, 89, 15, 3,223,122,251,109,134, 97, 36, 87,154,117,231,217, 40,197, 42,
+101, 28,226,156,144, 49,108,137, 69,214, 9, 67,198, 23,207,242,224,161, 31, 18, 78, 37, 17,170, 41, 77,109, 21,102,200,152, 44,
+ 49,158, 99,200, 36,157,137,217,208,197,184,143,183,157, 84,198, 19,148, 67,198,168,121,191, 35,165,116,220,130, 36,150,206,127,
+ 28, 70, 12, 80, 57,139,114,142, 17, 47, 33, 48,198,146, 40,177,206, 26,114, 10,196, 80,230,240,197,151,157,147,136,218, 38, 37,
+178,116,251,153, 20, 18,193, 75, 81,207, 33,144, 66, 32,199, 67,226,164, 8, 26, 37,196, 69, 89, 43,126,120,103,161,150, 73,221,
+ 20, 80,111, 93, 75, 10,126, 2,102,148, 34, 26,166,210, 39, 29,117, 46, 99,221, 44,151, 19, 85, 14,122,148,162,178,197, 71, 30,
+189, 20,127, 43,196,196,233,156, 52,214, 82,183, 45,218, 57,112,138,100, 74,135,169, 21, 36, 15, 99, 79, 26, 71,198,174,195, 76,
+ 19, 56, 37,175,161,177,194,136, 8, 94,180, 70, 35, 80,217,134, 49,102,198,177, 71, 89, 75, 8, 81,114, 17,156,149, 49, 59, 74,
+194, 93,124,241,140,143, 35,195, 24, 36, 15, 64,179, 23,187, 29, 9,198,247,240,182, 61, 74, 57,171, 61,169,109, 31,144,178, 47,
+178, 82, 23,210,113, 29,226,217,105, 94,206,194,142,240,163,162,211,194, 79,208, 74,162,109,235, 16,177,133,212, 54,173, 47, 82,
+ 76, 71,217, 32, 83,202,228,148,177,126,172,122, 63, 26,243, 31, 97, 95, 49, 90, 66, 85,172, 21,180,178, 50, 69,208,150, 15,106,
+121, 37,171,225,163,132,172,167,102, 1,121,175,238,167,104,143,242,132,205,156,240,211, 28,162,197,173,214, 56, 99,168,140, 61,
+180, 55, 74, 97,157,197, 90, 9,156,170,139, 64,212, 32,221,124,202, 9, 91, 87,118,143,136,204, 89, 61,181, 63, 47,251,132,105,
+ 89,159, 19, 49,196,114,208, 7, 98, 25, 33,164,124,204,121, 87, 71,204,176,227,162,126, 56,252,164,176,155,253,218,254, 56, 93,
+141, 15,217,167,231,167, 43,249,135,117,254,234,200,138,160, 14,170, 69, 48,133, 40,151,133,130, 53, 42,206,206,110,113,251,214,
+ 29,218,185,163, 31, 94,229,253,123,239,179,219,238,112,201, 99,114,121, 33,109,230,198,157, 23, 88,220,184, 77, 55, 38,116,222,
+241,133,215, 94,224, 75,159,251, 52,227,230,146,111,191,245, 22, 63,254,245, 95,100,181,222,162,141, 37,145,184,220, 14, 60, 90,
+143,104,103,137, 62,112,115, 86, 19,222,189,199,119,222,127,196,249,106,139,210,112,235,198, 41, 57,195, 23, 63,253, 42, 87,151,
+ 43, 30,156, 95,241,100,189,193, 84,134, 79,124,226, 69,126,211, 15,253, 16,163,207,252,210, 55,190, 78,192,242,223,254,196, 79,
+243,213,191,229,215,242, 59,255,129,223,193, 31,251,191,255, 95,249,224,254, 99,170,118,198,159,248,127,253,183,252,147,255,212,
+143,242,191,254,231,127, 31,255,251,127,247, 15, 48,250, 45,253, 85,199,127,247,227,127,134,183,190,115,151,255,213,255,242, 95,
+228, 51,159,255,181,252,244, 79,252,105, 30,191,243, 54,231,239,125, 64, 88,159,209,222,186, 77,123,114,135,182, 50, 60,122,247,
+117, 78,218, 36,129, 12, 49,227, 35,132, 36,147,141,132,240,188,149, 79, 48, 89,152,244, 20,206,195, 33,163,248,153,124,241,130,
+121, 76, 71, 8,216,242,198,165,236,158,229,141,165,247,221,203,222,147, 90, 18,220,246,194,187, 28, 65,165,253,159, 73, 69,220,
+ 54,125,158, 54, 75, 80, 72, 72,185, 16,165, 42, 73,101,115,226, 83,214,206,161, 92,133,114, 66, 92, 83, 86, 86, 11, 74, 59,180,
+177, 40, 43,243,211,148,101,231,169,212,180, 54, 82,251,175,109,218,245, 75,230, 77, 57,172,138,127, 53, 23, 36,176, 36,199,141,
+ 37, 56, 38,179,126,252,144, 86,121, 82,240, 60,126,235,107,196,245, 35,238,124,254,179,124,242, 19,159,228,221, 15,158,240,250,
+ 55,191,133,246, 29, 23, 87,107,134, 44,232,208,155, 55, 12,179,198,201,222, 56, 12,140,131,101,182, 88,226,180,102, 49,155,241,
+248,193, 67, 54,171, 43, 78,230, 53,149,211,248, 33,161,115, 34,120,207,118,183, 35,219,154,113, 24,120,244,224, 17,119,239,222,
+ 37,133,145,211,179, 83, 22,139, 5,198, 40,174, 86, 87, 60,120, 16,153,207, 37, 52,102, 49, 95,112,229,206,247, 23,250,211,211,
+155,108,186,129,171,123,247,185,247,193, 61, 54,151, 87, 56, 35,135,240,106, 8,108,172, 97,173,160, 81, 80,165,196,152,160,213,
+154,193, 71,234, 70,227,140,162,239,165, 67,206, 25,252,152,137, 85,162, 41,249,226,139,153,231,106, 8, 24,163, 8, 57,227,209,
+100, 29,241,209, 50, 36,193, 52, 43,163,174, 93, 20,149,150,203,214,190,225,136, 7, 11,149,144,193, 52,222, 39, 58, 58,129,252,
+228,102,191, 10, 42, 97,158, 40, 28,198, 30, 8,148, 33,142, 24,103,229,194, 25, 35, 89,137, 29, 47,169,140,182, 78,254, 30,159,
+ 8, 99,196,143, 98,129,138, 33,144,252,136,202,177, 60,175, 10,109, 42,249,176, 21,198,214, 96,107,116, 93,201, 51,229,148,132,
+ 6,121,128, 81,148,214,169, 76, 86,202, 74, 64,133,120,180, 74,148,192, 39,116, 36,251,176, 7, 23, 77,228, 65,152, 38, 72,138,
+ 62, 69,234,217,172,252, 25,133,113, 53,186,170, 68,252, 89, 41,148, 77,228,108,228,232,235,131, 40,242,135,129,237,213,138,218,
+ 54, 82,140,116,102, 12, 18,218, 98,180,193,102, 67, 76, 1, 91, 59,161,218, 70,131, 31, 3,201, 56, 98, 62, 52, 97,193,123, 66,
+ 66,112,213, 33,209,123,207, 48,122, 6, 47, 29,188, 41, 86, 98,246,105,102, 89,176,202,121,154, 4,151,157,243, 94,229, 61, 69,
+ 47,235, 82,248, 15, 11,182, 61,164,102,191,214, 59,106, 30,143,234, 64, 8,145, 97,244,123, 48, 89,204,153,161,138,184,114, 73,
+ 10, 69, 84, 23, 98,220, 99,169,247, 21, 42, 23,218,100, 62,164, 64,102,117, 32,158,230,107,236, 83, 25,171,103, 37,107,185,125,
+148,120,190,158,100,122, 56, 51,142,226,151,143,167,217,164,242, 61, 31,160, 85, 73,101,146,202, 34,170, 60, 10,144,153, 58,114,
+103, 77, 25, 20, 30,224, 55,117,229,168, 43, 71, 85,137,128, 89, 21,187,111, 74, 9,235,172,221,147,176,184,118,235, 80,135,208,
+141,163, 66, 31, 66, 40, 35, 89, 83,198,179,105,175,126, 60, 22, 24,236,173, 74,215, 34,113,202,155, 86, 29,190,169,167, 67, 94,
+126,181,169,112,215,235,123, 62,112,195,201,251, 12,248, 12,232,218, 49, 95, 44,202,109,199,136,247, 90,105,116, 78,244,227,134,
+190,207, 96, 22,124,254,139,127, 11,243, 69,203,221, 15,222,230, 83,159,120,142,143,191,252,121,238,190,243, 46,223,120,253,155,
+188,255,157,183, 56,127,114,193,217,141, 37,102,214,114,113,126,197,173,147, 22,103,165, 24,249, 32,123,180,237, 48,210,214,150,
+109, 63, 48,196, 64,242,208, 63,124, 66,202,112,247,209, 57, 31,123,233, 5,190,242,149,175,240,206,187,239,242,238, 59,239,112,
+255,241, 5, 63,253,243,127,153, 7, 23,151,156,175, 59,176, 21, 47,119, 91,214,171,115,116, 50,252,125,191,227,119,243,127,249,
+195,255, 39, 30, 61,124, 27, 99, 45,255,207, 63,246, 95,240,219,255,129,223,206,147,203, 39,252,123,255,254,255,161,196,102, 6,
+190,249,198, 55,248, 87,255,181,255, 45,255,198,239,255, 3,188,242,226,239,226, 79,252,177, 63,202,176,190,228,254,189, 15, 56,
+ 83,138,187,111,191,197,103, 63,253, 42, 58,246,244,219,142, 56,110,241, 99, 34, 68,161,104, 9, 89, 53, 18, 16,187,210, 48,193,
+ 87,212, 20,176, 80,198,175,249,200,131,122,116, 17, 76, 37,103,125,122,142, 20,234,232, 89,143,251, 8,195,169, 53,218,191,153,
+ 39, 62,249, 53, 3,124,161,197, 77,221,214,193,151, 69, 42,185,246,198, 72, 12,102, 93,215,212, 37,126,177,106, 26,234,186,198,
+ 85, 98,243, 80, 86,188,229,170, 0,140,148, 78,211,167, 17, 81, 16,177, 28, 24,229,162,161, 10, 44,166, 76, 13,210,244,126,200,
+215,239,224,186,172, 17, 12, 17,162,116, 68,111,252,226,207,240,252,188,226,249,219,183,248,220,171, 47,242,205,191,114,151, 95,
+254,218, 95,229,236,206,139,132,126,199,235,111,191,201, 75,207,221,226,228,236,148, 49, 36, 54,155,181, 60,139,102, 73,240,138,
+104, 29,163,247,204, 81, 84,206,176,152, 53,228, 48,208,109,215,204,108, 36,102, 65, 24,143, 17,214,235, 21,219,245,138,122,190,
+ 68, 43,197,110,183,101,189, 94, 3,137,186,109,153,207, 21,179,197,130,140,162,170,107,230, 51, 1,184,156,156,158,144,149,102,
+183,219, 8, 47, 65,107,250, 97,100,181, 94,163, 20,188,252,177,151,185,124,255, 62,179,232,121,252,228,146, 93, 8,140, 17, 42,
+205,190, 67,143, 49,147,124,134,214,144, 20,100,163,165, 11, 53, 10, 31, 50,149,171, 32,139,224,109, 62,111,137, 23,107,146,201,
+248,156,132,236,135, 60, 79, 49, 20,214, 63, 7, 42,223,158, 38, 89,122, 42, 97, 7,132,253, 28, 39, 5,217,171,107,113,177, 98,
+143, 89, 21,216,253,161,157,139, 58, 95,246,253,210, 31, 7,239,139, 13, 43,239,145,210, 86,110, 48,114, 62,165, 36,123,108, 63,
+ 50, 12, 3, 33,248,195,249, 22, 39,190, 68, 81,230, 91,183, 39,248, 41,235, 80,206, 8,210, 43,151,120,155,161,180,175, 49,239,
+139, 53, 49, 19,125,220,219,162, 38, 70, 67, 46,236,115,229, 71,121,178,140, 17,166,132, 22,155,103,170, 43, 90, 43,232, 86,241,
+191, 27,148,115,162,166,159, 28, 24, 90,163,188,116,252,132, 72, 30, 70,178,143,172, 47,215,130,230, 45,100,197,113,236,101,103,
+ 75,198,217,138,193, 15,178,206,170, 43,238, 63,186, 39, 56, 88, 36,149,210, 56,209, 84, 8,136, 71,240,174,163,143, 12,165,168,
+123,127,136, 71,229, 40, 65,243, 88,103,114, 13, 43,173,132, 90,137,150,122, 99,203,205,114,130,206,100,100, 42, 28, 75,243, 16,
+139,221,109,234, 98, 39,124,172, 42,122,157,148, 50,227,232, 11, 88, 62, 81, 85, 65, 10, 97,105, 86,199, 16, 24, 75,168,203,177,
+ 86,108,175, 17,123,134,247,206,179,150,221, 2,221, 58, 38,198,125, 88, 66,229, 71, 69, 87,239,215, 71,251, 73,198, 81,173, 59,
+254,159,150,191,203, 28, 81,233,172,145, 21,160,181,186, 68,218, 90, 41,232,206, 74, 81, 55, 70, 8,140, 5,201,109, 37,103,120,
+130,134, 28,122,235,167, 85,188,211,136, 53, 70, 67,138, 18, 73,233, 75, 65,151, 66,159,246,187,236,105, 15,118, 80,208,231,195,
+245, 71, 29, 5,174,252,127,197, 34, 87,172, 74,228,253,140,120,175,198,173, 28, 89,213, 68,149,209, 70,179,221,174,209, 10,156,
+214,244,187,142,182,210, 44, 78,102,124,242,211,223,135,113, 51, 30,221,191,203,223,246, 27,126,128,231,111,183,252,197,159,253,
+ 57, 30, 60,120, 76,101,160,235,119, 84,141, 40,130,183,187,142, 93, 31,104, 77,199,114, 57,199,173, 6, 98,148,120,203,152,224,
+201,213, 22,175, 20, 67, 57, 19,116, 58,224,118,222,189,255,136,199, 23, 43, 42,173,185,121,227, 12, 87,215,188,254,198, 91,244,
+ 49, 98,218, 22, 21, 53, 15, 31,220,163,223, 4,254,212, 79,252, 52,187,224,249,135,127,247,143,240,211, 63,249,227,188,243,230,
+123,220,197,240, 19, 63,241,231,248,189,191,247,127,198,232,119,252, 7,127,240,255,184, 31,233,221,123,240, 30,255,202,191,254,
+175,242,239,252, 27,191,159,175,254, 29, 63,204,127,247, 95,253, 87,220,185,243, 2,221,106,205, 15,126,241, 11,204,102,134, 52,
+110,233,194,134,152, 70, 82, 18,238,117,156,214,127,229, 22, 26,163,108,136,212,196, 77,159,158,147,242,179, 84,124,152, 75,226,
+152, 20, 56,133,178, 28, 44,105, 50,190, 62, 8,213,246,123,116,241, 8, 28, 88,210,185,132, 67, 24, 25,195,235,107, 98, 17,133,
+115,226, 81,157,118,197, 85,101, 5, 52, 81,201,131, 47,192,151,242,166, 75,185,140, 54,165, 64, 68, 47,178, 39, 83, 73, 66, 27,
+202, 2,150,164, 4,227,200, 68,154,154,110,240,165,203,216, 43, 51, 73,104, 50,201, 15, 12,219, 43,172,239, 80, 42,114,249,224,
+ 33, 15,223,250, 6, 55, 95,121,129,109,220,210,141,129,216,111,121,251,157,247,248,190,211, 91,204,106,203,110,179,230,188,114,
+184,197, 9, 89, 69,250,190,231,234,242,130, 74,103, 76, 14, 56,187,164,138,145, 24, 37,208,103,222, 84, 56,157,217, 94, 93,210,
+154,196,234,234,146,110, 76,140, 49,243,238,221,251,120, 12,237,124, 78,219, 52,116,151, 59,110,223,190,205,124, 33, 92,248,237,
+110, 71, 85, 85,156,156,158,177, 88,204, 9, 33,210,204,230,135,206, 53, 36,140,117,251,176,160, 27,183,110,113,235,185,231,121,
+180, 56, 71, 15, 3,219,199,143, 25,140,226,241,227, 43, 60,169, 36,177,201,138, 37, 23, 84,168,236, 89, 51, 73, 73,230,118,202,
+146,212,150,146,194,232, 92,120,220, 6,159,215, 36, 50,157, 31,139,224, 80,151, 16,160, 61, 70, 30,163, 53,174,146,152, 90, 82,
+198, 76, 36, 67,178,116,202,169,124,228, 76,223,245,144, 18,166, 50,140,218,160,181, 47, 63, 95,201,180,119, 70,239, 19, 8,115,
+ 54,168,168, 75,206,125,185,108,202, 76, 94,186,196,164, 24,250,158, 16,179, 4,218,120, 47, 35,119,239,137,126, 36,134,233, 98,
+ 32, 89, 1,146,124,105, 37, 95,221, 88,137,241, 53, 14,140, 4,200, 40, 51, 69,252, 78,139,237, 88, 96, 79, 17,178,222,163, 87,
+ 21,162,211,152,138,150,214, 78, 6,195,229, 34, 48, 77, 63,149, 86,184,170,194,100, 89, 41,152,178, 78, 18,152,146, 76, 84,115,
+ 10,232,193,147, 67,134,232, 81, 33, 16,255, 63,180,253,217,147,101, 87,118,230,137,253,246,112,198, 59,249, 28, 30, 51, 2, 9,
+ 36,144, 3,115, 6,147,243, 88, 85,100,145, 44, 14,213, 53, 88, 85,203,164,146,117, 61,182, 76, 50,153,254, 0,246,131, 30,101,
+146,245,131, 76,166,150,153, 36,211,216,234, 50,171, 42,235, 26,154, 85,236, 34,153,153,100, 50,153,137, 4, 18, 51, 16, 0, 34,
+ 16,163,207,126,231,123,166,189,183, 30,246, 62,247, 94,143, 8, 36,201, 86, 9, 48, 55,120, 4, 60, 60,220,253,158,115,214, 94,
+107,125,223,239, 43, 74,108,213, 48, 62, 31, 7,159,181, 96, 49,155, 7,104,146, 8, 92, 0, 79,213,139,226,152,218, 25,156,242,
+ 16,175,166, 41,177,196,200, 88,209, 24, 95,196,141, 49,126,229, 81,215, 20,101, 77, 89,249,172, 0, 16, 68, 90, 61,181, 30, 93,
+ 38, 49, 98,195, 40,219,121, 62,185,246, 32,160,118,101, 42,150, 1, 92, 97,133,103,140,135,175, 24,223,125,218,165,197,109,173,
+151,176,118, 57,219, 55,198, 80,215,254, 9, 83, 55,214,187,127,194,178,175,105,140,231, 37,212, 13,198,154,213,243,107,173,152,
+187, 53, 52,249,147,135,144, 37, 71, 67,138, 39,132,128,226,169,102,244,201,229,240,179,180,101,206, 61,225,232, 18, 23, 67,178,
+124, 71,206,114,167,174,131, 75, 71, 71,146, 36,142,137,219,162, 30,107,226, 72, 7, 70,134,215,166, 88,107, 3, 32, 44,112,137,
+215, 79, 38, 79,170,240, 90,113,147,181, 46,228, 69, 27, 31,228, 16,148,161,198, 88, 76,227,179,164,253,219,202,110,244,228, 1,
+ 72, 60,113,124,123,246, 55,238, 62, 85,100,247,227,172,111,254,251, 8,187,144, 86,129, 29,112,164, 82,107,112, 62, 14, 52, 78,
+ 34,148,140,232,228, 41,139,197, 28,165, 98, 16, 25,183,158,255, 12,105, 46, 40,203, 51,126,253,111,125,147,217,249, 9,223,254,
+247,223, 99,182,152, 96, 22, 83, 68,150,161,133, 65, 7,149,105, 81,248, 76,114,157,104,170,198, 95,100, 89, 22, 81, 86,126,143,
+ 86, 89, 71, 45,188,232,197, 45, 25, 76, 46, 92,227,134,170,153,163,112,204,138, 5,159,255,220,203, 60,127,235,121, 62,248,224,
+ 67,206,207,199, 94, 21,171, 34, 38,147, 51,238, 61,254,136,239,255, 80, 51,153,205,120,229, 27,191, 72, 57,254,215, 28,156, 62,
+228,221,183, 51, 58, 29,197,243,183,158,163,223,239, 51, 28,158,135,241,160,230,224,224, 49,255,135,255,234,191,226,127,245, 63,
+255, 95, 48, 58, 27,241,189, 63,249, 35, 18, 21,113,244,201, 61, 58, 29,205,214,165, 46,150, 10, 43, 93, 24, 97,179,220, 7, 53,
+ 97,183, 40,132, 69,216, 85,103,106,157, 93,187,160, 87,188,246,165, 34, 93,248, 40, 64,127, 48,144, 23, 2,121,214,116, 51,126,
+220, 45, 85,208, 64,132,155,194,173, 20,166,237, 56,190,253,179, 74,234,181,223,247,187,125, 21, 8, 98, 82, 43,111, 61, 87, 97,
+ 76, 31,188, 34,206,134,194,216, 42, 85,195, 3,101, 60, 62,231,232,224, 17, 74, 74,186,189, 14,151,111, 61,231, 81,139, 34, 6,
+153,248,245, 67,232, 80,252,181,161,137,178, 20,129,242, 63, 11,107,113,182,166,174, 23, 60,252,248, 99,206, 31,223,227,250,238,
+128, 84, 43, 30,124,240, 62, 7, 31,223,102, 96,103,140,147, 24,135,226,228,228,156, 71,143, 14,232,124,240, 62, 66, 56,226, 36,
+ 97, 56,158,178,219,219, 8, 57,227,150,170,158, 51, 60,247,254, 99, 37,125, 56, 68, 89,204,201,179,140, 60,141,217,217,220,228,
+240,224, 17,216,138,249, 98, 65,103,176, 77, 57, 43, 56, 61, 59, 99,119,255, 10, 73,146, 16,167, 25,231,195, 49,189, 16, 0,145,
+101, 25,163,209,136,197, 98,225,147, 0,175, 92,165,170, 60, 3,123, 62,159,179,189,189,197,254,254, 62,247,238,223,227,202,149,
+171, 44, 22,115,164,194,163, 55,211,148, 36, 75, 57, 19,150,141, 75, 59,236, 40,197,244,193, 49, 38, 64, 64,140,241,211,175,198,
+ 16,128, 62, 14,219, 24,159,197, 32,253,255, 47,203, 38,100,141,107,210, 88, 16, 73,144, 74, 80,154, 21,224,200, 88, 23,246,203,
+225,160,164, 60, 72,166,141,246, 80, 82,160, 5,248,144, 73,207,156,104,240,193, 41, 18,129, 17,146, 70, 10,106, 97,144,162, 34,
+144, 69,124,183, 45, 9, 22,159, 8,156, 69, 42, 31,241, 42,148, 71,231,214,117,237,109,166, 65,235, 81,215,181,143,144,109,124,
+ 66, 98, 93, 86,152,166,161, 41,107,172,115,193, 71,220,230, 98,251,206, 95, 71,177,199,115, 42,239,148,240,221,183,195,136, 38,
+120,149,181, 47,186,117, 19,106,187, 47,248,182,197, 43, 7, 95,179,223,131,107,144, 33,183,188, 49,190, 33,177, 97,100,219, 54,
+ 86, 38,160, 74,149,143,224,116,194,219,242,104,157, 75,117,131,171, 26,132, 53,184,166,194, 25,139, 41, 13,139,233,130, 56,138,
+ 40,202, 10, 99, 26, 86, 2,233,128, 78,109, 28,105, 22,161,226,136,218, 54,104,161, 88, 20, 11,154,180,231,161, 92,225, 57, 95,
+214,134,170,241, 59,244, 42, 8, 22,141, 9,216,238, 16,204,180,116,126,180, 55,187,244, 54,223,214, 17,227, 59, 79, 17, 82,225,
+ 2,113, 82,171, 48, 8, 89,227,188,215,134,186, 33, 76, 85, 46, 6,129,121,241,164, 13, 28,121,187,124, 43,171, 26, 33, 26, 31,
+145, 27,198,106,141,241,217,236,237,116,198,173,249,228,219,189,253,133,181, 55,159,214,177,203,149, 10, 94,170,139,182, 59,177,
+ 22, 55,254, 12,187,246,143,167,165,174,144,186, 79,199,214,134,132,192, 48,134, 79, 34,159, 27,159, 36,109, 97,247,220, 5,161,
+252, 51,216, 90,131, 38, 72,254,151,123,234, 16,204,161,130, 81,191, 61, 45,136, 53,219,146,167, 8,153,229,232,189, 49,205, 18,
+171,233, 95,100,127,202,106,140, 13,191,239,213,158,118,201,212,181, 23,208,162,127, 85,184,205, 95,165,147,111,156, 68,171,246,
+103,189, 28, 23, 96,133,240,157,131,138,200,179,156,110, 55,231,227,143,238,242,224,193, 29,207, 76,126,249, 39, 56, 61,155, 51,
+216,232, 81, 86,167,124,227, 43, 47,112,248,240, 61,222,248,193,155, 12,143,167,164,169, 67, 42, 75,148,167, 36,221, 46, 69, 99,
+121,116, 52,162,177,150,110, 63,103,180,168,153, 22, 37, 72,207,175,182, 97, 80,168,180,246, 41, 77,202, 43,132,215,167, 60,173,
+205,198, 2,206, 52,188,249,246,123,124,230,230, 13,254,206,175,253,109,110,191,247, 1,227,209,132,163,209,156,210, 22,140,199,
+143, 57, 58,233,147, 38,125,110,236, 95,227,103,126,233,151,249,227, 63,250, 99, 30,220,125,159, 63,251,246,127,199,253, 71,159,
+ 96,108,179,138,209,116, 22,225, 42,222,120,235, 13,254, 55,255,229,127,201,255,250,191,248, 47, 56, 61, 62,225,224,195,247,112,
+179, 33, 7,143, 14,125, 98,212, 32,193, 42,135,105, 73, 72,237,202,226,194,177,107, 5,152,145,226,217, 39,213,229, 69, 40,130,
+158, 92, 60, 89,212,131,215,179,181,181,137,150,176, 36, 87,163,119,199, 90, 81, 95, 33,100,219,160,132, 86,135, 97,157, 91, 37,
+ 37,105,129,210,120,209,155,106,199,252,190, 40, 27, 83,135, 61,125,131,108, 26,132,112,156,157, 30,240,198,107, 63,160, 46,231,
+236,110,111,241,167,239,191,199,111,254,222,239,209,219,189, 68, 62,216, 3, 81, 99,132, 98, 60, 58, 99,115,163, 71,234, 12, 56,
+133,152,207, 65, 72,234,217, 2,217, 52,200, 88,161, 92, 77,206,130,121, 61,165, 60, 93,160,147, 4, 51, 29, 83, 76, 39, 76, 38,
+ 51, 54, 58, 57,231,231, 35,110,127,116,151,247, 63,254,132, 90, 68,108,110,109,147,230, 25,103,227, 5,101, 93,123, 46,187,105,
+192, 90,138,197,130, 97, 40, 74, 90, 57,104, 74,154,126,159, 88, 69, 92,190,188,207,100, 50, 38,237,118,216,187,118,147,254,198,
+ 46,227,241,132,135, 71, 39,108,109,111,163,226, 24,135, 32,201,114,226,204, 11, 5,187,253, 62, 55,111,221,194, 58,199,240,124,
+200,222,254, 62,198, 24, 30, 62,124, 72,127, 99, 64,148,248, 56, 83, 7,204, 22, 5, 73,146, 82,214, 11,178, 44, 99,120, 52,164,
+172, 74, 26, 28,249,160,207,213, 56,227,232,116,140, 89, 84,126,252,238,189,138, 32,125, 66,155, 13, 1, 32,206,212, 8,225,131,
+129,140,245,129, 41, 58,142,137, 26, 71, 55,209, 56,211, 80, 57,208, 65, 0,232, 39,170,110,137,236,245,226,103,175,215, 81,194,
+250,192, 22, 17,160, 68, 56,156,109,112, 13, 56, 29, 33, 92,236,139,183,113, 52,194,132,161,160, 11,188,138, 16, 16,238, 86,177,
+153,203,107,214,250, 76,121, 0,219, 24, 31,196, 22,132,115, 77,221,248,213, 70,240,195,155,160,228, 23,107,170, 94, 29, 14, 42,
+173,245, 83,170,216, 23, 89,169,188, 51, 68,218,176, 63, 23, 72,169,151,221,157, 23,163,152,149,166, 74, 71, 33, 60,104, 37, 15,
+183,206,171,215, 81, 62,202,117,217,216,132, 6, 80, 69,145,135,212, 90, 31, 22,132, 18, 8,235, 35, 94,133, 53,184,218,224, 26,
+131, 48, 13,212, 53,174,174,153, 79,103,148, 69, 77,154,118,169,235, 41, 90,235,101,186,162, 16,146,249,162,242, 43,172, 56,163,
+ 52,150,198, 89,104,252, 10,211, 24,139, 85,202,143,220, 27, 31, 40, 83, 85, 13, 85,109,168,106,191,171, 94,214, 14,215,106,166,
+196, 19,210, 40,187, 28, 76,203,144, 43, 31, 73, 65, 18, 43, 47,244,138,181, 71,175,134,113,185, 9,226,220,170,110,168, 27,111,
+ 11,108, 3,101, 86, 63, 39, 15,191,105,107, 79, 21,220, 16, 38, 20,240,186, 17, 75,225,235,122,209,111, 51,219,185, 96,187, 19,
+171,142,189,157,146,184,167,157, 86,171, 16, 40,249,148,246,107, 77,105,247,233, 97,101, 79, 64,118, 62, 85,250,189, 86,224,165,
+ 20, 62,131, 67,249,104,225, 40,140,220,147,128,192,141, 34,237, 67,150,194,115,181,105, 28, 58, 44,145,150, 5, 91,138,213, 28,
+191, 45,232, 81,164,151,136,188, 86,165,106,173,183, 61,248,174, 92, 99, 77,176, 63, 93, 40,234,254,253,166,246,176,127, 19, 62,
+198, 88,187, 84, 65,183,177,117,207, 26, 99,252,101, 59,247,167,138, 62,130,235, 55,111,113,116,120,128, 45,231,173, 20, 15,132,
+242,131, 84,161, 72,163,132,221,237, 29,170,170,228,244,244,152,205,173, 13, 54, 55,119, 57, 59,159,177,189,191,139, 53,115, 94,
+184,113,131,135, 31,125,196, 39, 31,125,196,124, 54,161,180,134,142,142,208,145, 64, 38, 49,105,119,147,135,159, 60,228,124,110,
+ 80, 81, 68, 83, 72,182,250,187,100, 91, 30, 75,105,165,164, 42, 27, 78,143,143,105,202, 18, 37,189, 93, 70, 9, 25,198, 72, 79,
+104, 34,133, 31, 97, 90, 26, 62,186,119, 15,245,167,127,202,111,255,198,223,230,193,189,123,228, 7,143,185,125,231, 99,170,217,
+156,195, 71,143,201,147, 1,239,124,240, 1, 63,241, 15,127,151,175,124,109,198,244,143,254,144, 89, 63,227,240,145,163,116, 14,
+164,194, 8,175, 48,149, 52,140,199,231,124,239,213, 87,249,103,255,242,223,240,155,255,201,239,241,127,254,223,253,111,145, 38,
+163,107, 44, 90,117,144, 42,162, 17,181,231,148, 35, 80,194,231,201,183,118,152,101,180, 40,235,133,220, 46, 69,143, 23, 47,123,
+185, 28,141,175,198, 72,226, 2, 19,125, 37,156,243,201, 26, 34,116,126,182,245,136,175, 91,222,194, 97, 66, 5,175, 38, 82,249,
+108, 45,103,145, 90,160,180, 39, 8,250,208, 23, 21,114,175,229,114, 42,208,122,154,125, 55, 82,130,173,121,243,213,239,113,122,
+244,144, 44,150,188,123,255, 54,119, 63,190,203,255,254,206,199,252,214,223,253, 93, 26,145,241,252,103,191,192,108,182, 32,141,
+ 5, 91,157,203, 8,215, 96, 10, 11, 33,125,171, 25,142,153,156, 28,211,233,230,228, 27, 61, 54, 82, 56,154, 13,185,127,239,144,
+203,151,246,105,202,146, 56, 73,169,209,232,180, 75, 81,157, 81, 89,137,145, 41,231,227, 25,221, 94, 31,169, 34,116, 2,101, 93,
+211,205, 50,143, 90, 45, 42,239, 26, 48, 6,161, 21,146,138,122, 30, 49,155,140,201,146,148, 44,239,113,227,249, 23,184,116,245,
+ 42, 42, 74, 16, 66,179,119, 89, 16,165, 57, 31,222,185, 67,237,160,108, 28,157,222, 0, 21,107,106,227,175, 77,161, 52,166,170,
+208,177, 15, 43,153, 47, 22, 1,121,155,160,148, 98, 60,153, 16,197, 49,221,110,215,243,192,243, 12,133, 34,205, 82,159,208, 22,
+107,191,227,243,243, 23,172, 82,158,234, 70,155,121,237,227, 88,189,146,208,162, 21, 52, 70, 34,133,101, 81,213,228, 54, 70, 68,
+ 26,109, 27,122,113,204,188, 50, 30,109,236,132, 23,161,181, 57,213, 65, 9, 29,197, 18,169, 67,254,180, 2, 37,195,216,221,121,
+136,143,112,254,184,236, 5, 88,126,199,221,212, 6, 45,188,168,168,181,229, 90, 43,124,214,119, 56, 52, 56,219, 96,156,193, 10,
+136,162,216,143,195,219,221,189,243,123, 89,225, 31,110,222,123, 28,212,245,214, 9, 47,190, 12, 32, 16,144, 88, 39,177, 78,172,
+165,180,121, 93,134, 23, 97,122, 70,134,176,198, 67,149,214, 59, 86,103, 2,156,198, 44,137,117, 75,112, 82,187,219,149,224,180,
+135, 45,201,112,168,109,145,166, 46, 76, 25,150,162,176,166,246,154, 3, 33, 16, 77, 3,193, 86, 22,122,182, 48, 61,105, 24, 14,
+ 71, 32,189, 75,164,170, 74, 63,209, 10,139, 48,165, 52,117, 61, 35,203, 58, 68,113,202,162,110,168,173, 35, 86,210, 23, 19,169,
+189,128, 48, 28,245,151,123,238,246,249,111,237, 42,145,113,109, 76,125,113,109,219,102,103,182, 83, 14, 65, 26, 71,228,105, 68,
+146,104,210, 36, 34,142,147, 48, 62,118,222, 5, 98,253, 36,160,106, 68,208,112,153,165,144,187,213, 93, 24,107,105, 26,191,211,
+ 87, 85, 67, 89, 86,148,149, 95,173,173,186,114,150, 90,177,101, 87, 46, 68, 16,253,138,165,107,237,130, 24,175,157,166,182,113,
+224,238,217,190,234,103, 53,156,159,214,149, 95,252,204,226, 83,145,232,171,103,238, 90, 97,199,175,163, 86,141, 76, 72,138, 11,
+ 49,209,235,248, 89, 41, 37,250, 89, 99,238,117, 56,191, 87,223,233,101,112,197,186,189,173, 9,227, 15, 47,148,243, 39,219,102,
+ 57,126, 55,171,110,190,177,193, 87,106,131, 88,193, 81, 47,199, 33,246,130,255,248,175,218,169,127, 90,215,126,243,185, 91,252,
+230,111,252, 38,255,183,255,203,255,137,166, 44,194,139,232, 59, 7, 29,199,108,109,110,177,181,217,231,241,163,251,104,173, 73,
+ 59, 29, 70,179, 41, 27,219, 27,204,202, 49, 95,251,252,231,249,209,159,127,135,106,116, 70, 34, 18,138,185,101, 99, 43,161,168,
+ 43,180,141, 40,167, 53, 39, 15, 62, 65,165, 29,190,242,147, 95, 98,239,210, 21,210, 56, 97, 49,155,178,119,105,151,131,163, 35,
+246,175, 94, 99, 54, 91,176,217,237, 18, 73,193,163,131,135,124,255,213, 31,112,255,193,125,228,154,104,143,112,177, 11, 90, 84,
+ 41,148,214,242,222, 39, 31,115,233,141,215,248,189,223,249, 29,254,240,223,255,183,244,143, 51,142,143,166, 76, 71, 99,234,102,
+202,241,217, 1,255,225, 79,254,130,223,250, 91,191,200,189,219,111,145,198,146,249,124,204,237,187,159,160,162, 8, 83,251,159,
+113, 36, 29,105,156, 80, 84, 37,255,175,255,230,255,205,223,254,181, 95,229,249,151, 95,230,248,195,247,176,165, 33, 75,251, 12,
+ 54,251, 28, 14,143,194, 88,221,211,178,252, 8,201,174,217, 4,237, 42, 90,114,205,206, 32, 46, 28,184, 60, 40,102,229,202, 16,
+203,240,157, 11,111,107,176, 66,255,119, 40,255,144, 22, 43, 91,155,148, 43, 23,133, 20,114,217,169,123, 5,112, 0,157,132, 20,
+ 55, 29, 70,119, 82,251,189,163, 12, 92,230,213,186,200,171,166, 93, 93, 83, 21, 99,238,125,252, 1,245, 98,196,105,181, 96,123,
+115,147,126, 39,227,124, 54,230,232,224,128, 89, 97,121,235,205,119,232,245,122,124,225,165,231,233,171,133,247,139,167, 57,170,
+147,227,170, 26,187, 24, 50, 63, 63,164, 28, 57, 98,246,113, 70,208,207, 35,152,121,229,122,154, 36,116,187, 3,102, 69,195,104,
+ 86, 32,116,204,231,190,240,101, 68,103,155,114, 49,163,177,126, 55,175,227,132,233,116, 70, 55,203,136,162,136,121, 51, 9,164,
+ 44, 95, 48,181,141, 81,141, 70, 58, 88,204, 11,242,218, 34,116,194,104,178,160, 59,136, 49,117, 65, 93,215,108,110,109,115,173,
+110,184,247,232, 0, 91,215, 72,173,169,235,134,170, 90,208,235,246,208, 42, 90,174,203,146,216,115, 25,196,218,207,180, 40, 12,
+251,151, 46, 81, 85, 37, 77, 93,161,179,140,114, 81,248,149,133,240, 15, 89,140,197,214, 13, 56, 71,109,131,160,208,249, 93,165,
+ 86, 80,215,134, 72,203, 0, 99,241, 86, 28, 83, 53,212,149,193, 56, 71, 81, 85,164, 73, 70, 39,142, 40,171, 2, 99, 3,102,213,
+132,204, 60,173, 72,117,176, 82,134, 21,137, 23, 64, 25, 26, 83,161,173, 70,248,106,226,119,139,218, 95, 51, 46,248,143, 91,165,
+180, 9,197,188,237,152,140, 49,168,160, 29, 48, 97, 74,214,178,186,235,218,250, 17,174,113,136, 56, 10, 93,156, 15,242, 89,185,
+ 31, 28, 66, 74, 34,229, 49,163, 44, 83,198,252, 62, 61, 10, 98, 57, 41,181,215,134,132,192, 32, 63,212,212,172,188,194,126, 4,
+109,155, 64,210,112,254,239,182,181, 69,199,169,255,121, 90,127,176, 80, 90, 5, 32, 14, 40,169,112, 77,179,252, 51, 75, 85,181,
+ 49, 62,254, 86, 11, 92, 85,249,137, 73,221,128, 49, 97,245, 96,150,197,221, 26, 24,141, 39, 68, 73, 26,126, 38, 13,113,148, 32,
+149,183,168,249,209,190, 36,142, 83,172,105,147,233, 26,186,218,211, 0,163, 56,241,159,223,137,181,206,213, 11, 97,109, 75,127,
+187, 0, 77, 17,203, 67,253,133,157,117,248,147, 82, 18,162,169, 99,242, 44, 33,203,124,254,121,146,100, 1,223,139,183,161, 53,
+ 13, 85, 99,150,142, 28, 47,112, 19,203,195,143,175, 59, 13,101, 85, 83, 85, 53, 81, 89,133,209,127, 21, 14, 1,126,165,216, 22,
+ 97, 41, 86,212, 55,159,232, 24,166,128,210,173,237,201,185,104,196, 14, 7, 2,177, 62,248,119, 79, 51, 8, 62,141,209,242,236,
+145,251, 90,212,235, 51, 26,188,103, 54,238, 98,181, 18, 87, 33, 84,107, 21,143,189,242,238,183,111,234,197, 27,251,191,191, 84,
+191, 35,150,169, 90,109,244,165, 8,106, 63, 17,102,251, 4,117,158, 84,254,230, 90, 26,225, 67,150,114, 20,112,124,145,246,135,
+129, 72,249,211, 68, 20,233,160,220,243,121,216, 74,137,208,129,249,139,192, 61,195, 72,224,184,120,130,114, 63, 38,131,189,253,
+128,209,120,206,239,252,222,223,227,235, 63,243, 11,188,117,251, 14,147,194, 7, 33,108, 12,186,244,183, 46,147,100, 93,186, 81,
+205,163,123, 31,208,217,216,160,150, 25, 73, 62,160, 88,204,248,249,175,125,145,183,127,248, 67, 62,124,239,109, 16, 11,154,166,
+228,124, 92,115,105,175,203,209,180,225,100, 14, 58,217,226,107,175,252, 44, 95,252,242, 79, 48, 62, 63,225,243, 55,175,179,213,
+233,241,221, 87,223, 96,127,208,197,206,198, 92,218,187,140,138, 58,124,251, 15,255, 61,167,119,222, 35,142, 99,126,242,155, 63,
+197,175,254,226, 47, 51,155, 76, 56, 63, 63,247,157,105,235,141,181, 43, 3, 94, 24,133,112,116,112,140,214, 49,127,231,239,255,
+ 19,190,247,173, 63,102,116,126, 72, 19, 41,242,126,143, 65, 22,161,108,205,241,120,198, 47,253,202,111,112,114,231, 14,227,195,
+ 71,212,182,228,124, 62,195, 53, 13,145,133,218, 9,154,122,142,165, 96, 54,159, 48, 45, 13,255,228,127,252, 63,225, 79,254,240,
+ 63, 96,202,194, 3, 89,146, 46, 70, 41, 74, 59,199, 81, 34,157, 2, 19,121,155, 5,107, 41, 74,206,122, 11, 87,155,121,220,222,
+ 41,173, 17, 85,138,181,145,150, 88,203, 31,110,201,112,161, 32, 47,187,120, 21, 14, 9,210,219,108, 2, 39, 29,161,150,251,243,
+118,124,175,117,224,173, 75, 63,218,215, 64,162, 35,242, 36, 33,203,210, 16,236,225,255, 27,167,169,223,115,234,224, 49,247,203,
+ 55,207, 88,168,231,124,240,230,247, 57,120,112,155, 98, 62,199,168, 28,213,217,101, 82,103,152,120,192,239,254,227,255, 17, 63,
+255,235,127,147, 47,126,249,101,164,171, 40,206,206,153,142,103,168,188, 79,146,118, 16,206,139,149,100,164, 56, 63, 63, 33,149,
+ 17,105,150,144,119, 58, 24, 33, 73,187, 93,242,188,235,149,202, 85,133,177,142,206,246, 14,215,110,222, 32, 78, 61,244, 37,235,
+246, 49, 72,154,186,194,212, 6,103,252,195,123, 81,148,104,173, 48,117,233,163, 68,173, 79,149,139,211, 14, 27, 59, 59,204,202,
+138,225,120, 76,150,165,108,244,123,104, 42,164,169, 41,102, 99, 58, 89, 70, 81,248,191,175,177,142, 72,107,138,249, 28, 37, 4,
+ 81,164, 89,204,166, 28, 60,122, 72, 55,203,232,230, 25,199, 71,135,108, 12,122, 12,135,167, 76, 70,231,148,197,140,243,179, 19,
+238,223,187, 11,117, 77,170, 35,102,211, 49,199, 39,199,204,139, 2,219,120, 97,212,241,233, 41,166, 49, 36, 56, 50, 41, 73,148,
+ 68, 73,136,148,239,154,173, 84, 52,141,135,199,184, 80, 28,147, 84,209,233,102,228,169,102, 81, 46,120, 60, 90,208,168, 20,156,
+ 65,135,177,113,146,106, 58, 93,208,177, 69, 69, 14, 33, 29, 66,106,210, 52, 35, 10,168, 87, 21,210,177,252,184, 81,181, 40,110,
+127,233, 41, 47,102,212, 65,115,161,148, 10, 41,132,126, 93,132, 37, 56,147,253,231, 17,200, 64,158,243, 65, 40,173,210,165,170,
+189,181,179, 50,126,141,215, 56,135, 84, 17, 73,156,147,102, 93,116,228, 11,156,140, 37,105, 39, 35,235,244,233,244, 55, 72, 58,
+ 61, 68,154, 67,148,225, 84,140, 17, 26,233, 36,194, 53,184,166,192,214, 37,210,250,152, 95, 97, 42,176,198,119,183,206,173, 89,
+172,196,202,246,107,220, 82,192,135,245,153,245, 66,133,152, 96,239, 45,241, 22, 62, 99,188, 53,206,248,130,238,156,133,218, 34,
+109,133, 48, 53,212, 80, 77, 45, 31,223,254,196,127,127,243, 17, 85, 89, 34, 84, 66,156,118,104,170,154,162, 88, 32,227,136,164,
+219, 67,233,148,209,100,204,168,156,208,143,123,148,165,197,108,110,160, 6, 61,234,166, 93,185, 26,154,208,165, 91,235,188,134,
+ 66,136, 0,129,138, 72,211,200,167, 58,182,221,186, 23,141, 96,141,165, 54, 13, 2, 72, 35, 77,150, 70,228,105, 76,150, 39,100,
+121, 74,158,251,112,158, 86,232,170, 35, 29,196,175, 17, 89, 18,135,251, 59, 33,203,114,178, 44, 35,205, 82, 63,130,142, 60, 12,
+ 72,133,233,156, 49, 22,131,103, 33, 88,227,213,238, 34, 60,155,180,246, 73,147,145, 2,173,180,175, 75, 74,145,165, 62,143,163,
+147,166,164, 73, 68,154, 68, 68,177,207, 64,208,145,246, 97, 43,170,253,111,155,176, 38, 62,149,115,255,227,114, 76,156,107,252,
+129, 72,172, 42, 93,171,253, 49,117, 69, 85,150,148, 69, 73,177,168, 88, 44, 74, 15, 8, 2,159,236, 23,154,107,173,125,173,245,
+ 1, 82,114, 53, 61,119,126,114,174, 94,188,113,233,247,133, 92,169,143, 87, 99,211,213, 40,179,149,215,139,181,253,233,250,239,
+ 47,201, 55, 74,173,172, 98,122, 61, 53,201, 91, 62,148, 86,104,165,194,168, 84,133, 67,129, 8,106,231, 21,130,246,201,241,132,
+120,194,130, 32,158,241,195,107,223,175,108, 69,167,223,227,231,126,241,151,248,155,191,254, 91,108,239, 94, 97, 94, 24, 4, 49,
+ 81,148,177,183, 61,224,193,221,219, 72, 41,200,250, 27, 8,229, 47,140, 47,125,238, 37, 62,124,247, 61, 62,188,253, 26,147,209,
+ 28, 91, 73,174, 95,191, 66, 69,205,209,121, 1, 58,231, 27,223,248, 6, 95,255,242,215,185,119,255, 1, 63,251,115, 63,195,225,
+227, 7, 20,227, 17,111,189,245, 54,181, 20,100,177,160,215,201,249,214,159,125,143,195,211, 51,132,157,243,210,243,151,232,110,
+108,114,231,147,123,252,232,245,215,248,233,159,250, 41,126,230,167,127,150,199,135, 7, 76,103, 51,223, 9,133, 37,155, 91,218,
+253,188, 23,244,228,248,132,221,189,203,252,204, 79,189,194,127,255,237,111, 83, 24, 71, 47,213,244,100,195,120, 52, 70,103,125,
+190,246,245,175,179,152,142, 25, 15,207, 0,193,116, 58, 99, 94, 84,126,151, 36,101,200,123,118, 88, 43,120,124,120,198,223,254,
+ 91,127, 27, 44, 60,184,255, 9,105,150,250,196,163, 98, 78,164,125,174,184,112,107,105,107,159, 18,129,251,151,120, 15,214,130,
+ 94,196,133,172,241,245, 87,115, 69,156,146,107, 57,236, 33, 0, 37, 16,186,164, 88, 93,127,109,103, 41,133, 23, 57,197, 81, 68,
+150,249, 98,158,101, 62,177, 43, 73, 19,127, 35,198, 17, 66,201, 11, 98, 62, 28, 40, 26, 78, 79, 30,115,255,147,187, 20,149,161,
+180,154,173, 75, 55,184,113,235,121,126,229,111,252, 50,157, 44, 65, 54, 5, 81,164,232, 38, 9,166, 44,120,247,237,119,160,105,
+200,149, 68, 98, 64, 89,146,204,255,191,243,195, 99,162, 56,245,133,218, 9,242,222, 6, 89,183,199,230,214, 54,189,193, 22,183,
+ 62,251, 18,187,151,246, 73,178, 14, 82,199, 28, 29,159,144,102, 25, 89,150, 6,175,105,138,115,126, 28,236,130,224, 80, 10, 15,
+210,136,162, 8,227, 32, 78, 50, 46, 95,187, 70,146,230, 28, 30, 30, 97,112,108,239,108,145,199,138,166, 42,177,198, 80,150, 21,
+113,156, 50, 43, 10,111,177, 18, 80,149, 37, 85, 85,145, 36, 49,139,197,130,241,112,136,115,142, 56,138, 56, 27,158, 48,155, 77,
+121,252,248, 49, 90, 41,238,222,185,131, 49,150,241,120,204,108, 58,165, 42, 61,117,108, 94, 86, 44, 22, 5,101, 85, 49, 26,142,
+ 56, 25,142,217,218,218,240,108,253,170, 33, 81, 18,141, 67, 75, 15, 2, 42,235, 26,108,120,221,130,151, 60,207, 19, 54,183, 6,
+ 24,107,144,113,194, 39, 71, 35,162, 36,193,212, 13, 42,100,100, 39,137, 38,235, 8,164,183,134,248,108,116,173,124, 70, 67,232,
+144,149, 82,171,168, 91, 21, 48,173, 1, 37,235,218, 67,226, 69,184,159, 47,144, 79, 16,204,214, 33, 98,214,249, 21,161,181,126,
+ 37, 88,214, 13,101,227,213,221, 77,109,151, 58,129,180,211, 69,197, 41, 34, 8,211,148,146,232, 40, 70, 39, 25,105,183, 75,156,
+117, 16, 81, 12, 90,226, 84, 43,205,181, 8, 91,131,173,176, 77,133,116, 94, 55, 99,234,210,171,212,133, 12, 83,245,182,176, 7,
+212,108, 8, 75, 89, 2,187,172,161, 93,145,186,214, 82,212,238,172,156, 9, 30,248,112, 8,176,190, 64, 8, 26,255,126,229, 56,
+122,124,204, 39,119,238, 18, 73,201,240,228,136, 52,203,105,172, 63, 72,107, 41,153, 76, 38, 36,121,135, 56,237, 97, 12,204, 22,
+ 51, 10, 83,209,139, 50,138,202, 16, 95,218, 67,230,121,192, 69,187, 37,120,202, 6, 22,133, 13, 93,107,164, 36, 73, 28, 70,233,
+145,127,198, 47,239,239,118,178,107,188, 56,208,127, 92, 18, 58,245,213, 91,154,132, 67, 91,176, 8,182,107,162, 36, 77, 72,210,
+148, 52, 75, 73,243,140, 44,247, 7,248, 52,246, 69, 95, 7,170,159, 23,209,182, 5,221,219,241, 90,241,158, 82,138, 40,208, 0,
+227,240,185, 35, 29, 17, 69,138, 60, 77,232,118, 50, 58,121, 66,150,196,164, 73,132,142,124,188,179, 10, 69,189, 21, 38,250, 6,
+ 87,173,124,234, 63,142,144,246, 84, 81,183,254,117, 92, 71,157,187,139, 69,189,174, 42,202,162,162, 40, 42,138,181,162,238,163,
+113,253,179,111,117,160, 13, 13,177,107,197,193,254, 57,173, 94,184,182,251,251, 75,165,113,107,245, 8,210,253, 54,254,114, 89,
+212,197,197, 7,246,210,119,248, 4,132,222,255, 0, 37, 74,251, 28,105,213, 22,114, 37,195,175, 87,111, 44, 79,212, 92,200,209,
+125, 42, 28,227, 9, 47,225,179, 10,186, 31,103, 87,156,158,159,115,120,124, 74,221, 56,238,221,123,196,124, 90, 49, 28, 21,116,
+ 51,205,233,227,187,140,199, 35, 58, 27,155,160,124, 97,184,178,179,201,124,120,194, 15,127,240, 3,112, 53,189, 52, 34, 77, 98,
+ 10, 99, 57,153,150,100,219, 87,248,230, 79,190,194,103,159,191,193,243,207,221,228,165,207,190,192,159,126,231,219,236, 95,218,
+195, 84, 53, 73,146,243,133,175,254, 20,145, 72, 72,226, 1,151,174,188, 64,111,176,141,171, 75,104, 10,106, 99, 57, 31,142,216,
+191,180,207,199, 31,127,204,241,241, 49,191,253,219,191, 67,175,223,227,227, 59, 31,211, 88,179,220,167, 5, 61, 34, 82, 10, 22,
+139, 5, 39,135, 71,124,233, 43, 95,165,183,181,207, 59,239,189, 15,179,115,114, 51, 39,201,114, 84, 62,224,224,240,144,175,190,
+242, 13,190,255,253, 31,160,106,203,228,244,156,162,174, 88, 40,135,212, 18, 83, 55,193, 1,172,168,138,134,209,120,206, 63,249,
+167,255,132, 63,248,131, 63,160,223,239,210,235,246, 57, 59, 57,164,155,197, 56,219,248,241,162,112, 63,246, 50,253,113, 98, 69,
+177, 70,126,146,114, 45,193, 77,172, 70,119,203,221,155, 16, 1,216, 34,151, 34,205, 22,186,208,142,238,219,232,213,229,190, 92,
+248, 27, 43,142,180, 63,185,231, 41,121,230, 79,249, 73,154, 16,167, 73,216, 37,171,176,235, 91,141, 13,149,116, 28, 30, 62,194,
+ 33, 56, 25, 78,216,190,116,157,221, 75,215,184,126,227, 50,219,253,156, 94, 18, 65, 49, 67,150, 37,182,174, 88, 44, 22,148,101,
+ 73,174, 20,253, 65, 15,157, 70, 1,180,231,136, 84, 76, 44, 99, 58,155, 91,232, 44,167,172, 13,243,162, 34,235, 13,136,243, 46,
+155,123,187,136,200,195, 60, 44,254,161, 48,159, 23, 60,124,248,144, 72, 41, 54,250,125,162,216,103,173,139,176, 11, 94,207, 94,
+ 78,210, 60,164, 4, 42,242, 78,151,173,173, 45,102,179, 25, 39,167, 39,244,122, 29,118, 6, 93,191,155,181,150,170,174,112, 72,
+234,198,231,177, 11,188, 37,104, 49,159, 19, 71, 17, 77,237,247,142,121, 39,167,170, 74,134,163, 51, 38,147, 49, 85, 85,178, 49,
+216,164, 88,148, 84, 85, 77,183,211,163,147,231, 88,107, 24, 79,103, 12,135, 99,142,143, 79,152,205, 22, 12,199, 99,170,144,162,
+214, 20, 21,177, 80, 68, 64,228, 28,105,164,208, 90, 82,213, 6,107,124, 50,150,195, 11,112,227, 68,209,237,119, 49,214, 18,231,
+ 93,142,207,167, 88, 33,169,170, 42,228, 50,224, 5, 83, 29,223,113,131, 37,138,252,161, 45,138,162, 85,194, 86, 20, 7,239,241,
+ 90,164,111, 75, 27,108,201,131,142,229, 68,199,219, 17, 87,174,225,213, 53, 38, 47,228, 91,180,206,168,170, 49, 52, 22,154,218,
+ 82, 22,126,164, 75,221,120, 56, 75,146,121, 45,129, 16, 33,116, 37,236,135, 35, 77,154,250,172,119, 17,198,238, 43,232,141, 5,
+ 87,226,108,137,169,106,164, 19,208, 24,108, 93,161,176, 56,211, 44,133,125,237, 14,223,153,128, 78,198,119,153,206,218, 48, 0,
+ 11,227,247,150, 95, 47, 86,227, 95, 97, 45, 52, 77, 88,118, 7,124, 50, 65, 27, 80, 89, 62,120,231, 54,167,199, 39, 72, 28,211,
+209,144, 36,201,145, 58,161, 44,107,210, 36,101, 60,157,209,221,216, 33,202, 58, 44, 22, 37,211,233, 24, 29, 71, 40, 43,104,156,
+160,115,245, 50, 36,217,154,112,108,165,133,106,227, 86,101,176,179, 37,177,239,114, 99,173,131,250, 92,132,159,190,183, 64, 55,
+141, 7,235, 68,218, 23,255, 52, 77, 73,146,136, 36,245, 69, 62, 78,162,144,128, 40,131,179,192,119,236, 81, 28, 17, 39, 49,113,
+146,144,100, 9,113, 18, 19, 37,113,184, 70,252,225, 68,134, 44, 9, 23,248,255, 38,116,233, 88,143,147, 86,202, 43,199,147, 88,
+147,198,145,255,251,226,136, 52,246, 25,243,157, 44,166,147,197,164,177,127,182,168, 16,225,171,180, 90, 22,117, 95,204,219,247,
+255,135, 20,245,149, 72,252,217, 69,189,166, 46, 75,202,178,164, 92,148, 20, 69, 69, 85,251, 68, 57, 17,154, 25, 63,225,190,216,
+ 72,175,174,109,255,186,168, 91, 87,182,127,127,153,170, 69, 32, 1, 5, 20,162,210,109,158,181,122,202,146,244,172,194,122,161,
+139, 15,182,156,213, 23,208,190,133,209,187, 10,169, 58,172,162, 60, 87, 22, 3,214, 66, 59, 86,185,218,171,157,199,167,119,234,
+ 10,199,116, 60,229,209,253, 7,188,249,163, 55,120,252,240, 1,179,201, 24, 41, 44,195,195,123, 44, 38, 39,168, 36, 33, 31,108,
+ 16, 39, 9,105,164, 72,133,225,181,239,127,151,211,179, 83, 82,221, 33,142, 52,121, 79,115,112, 58,167,191,243, 28, 47,125,233,
+203,236,239,109, 82, 78, 70,124,247,219,223,226,198,245,107, 68, 73,194,254,254, 21,223, 85,197,146,141,157, 45,166,227, 17, 73,
+154,176,177,181, 73, 89,142, 73,226,154,110, 23,148,138,105,140,227,229,207,126,150,247,222,123,151,155, 55,111,242,207,255,197,
+ 63,231, 87,126,245, 87,249,249,159,255,121, 94,127,227,117,202,208, 93, 95, 40,126,192,116, 60, 98,255,242,117,126,253,119,254,
+ 62,175,189,250, 67, 6,162, 64, 21, 19,146, 94,151,162,209,196,113,202,206,149,171,228,157, 62, 31,191,245, 14, 81,211, 48,169,
+230,204,108,237,237, 92, 97, 97, 47,144,222, 87, 44, 53,191,253,247,254, 62, 31,126,252, 49,143, 31, 62, 32, 75, 19,142, 30, 63,
+102,208,237,120,186,154,240, 99,246,214,230,127,225,109,213, 63, 92,184,150,197,234,157,101, 18,145, 20, 23,199,241,207,178, 35,
+182, 60,229, 85,247,190,178, 79,174,135, 27,172, 58,117,181,188, 30,226, 72,147,165, 9,157, 48,186, 75,179,140, 36,203,136,211,
+108, 57,126,111, 45,115,171, 3, 3,140, 70, 99,238,221,127,128, 78, 50, 94,252,236,231,249,252, 23,191,200,243,183,174, 97,171,
+ 25, 71, 15,238,241,209,187,239, 99,138,130,254, 96, 16, 66, 56, 36,169,138,125, 71,211,235, 17, 15, 6, 24,231,147,250, 36,177,
+ 15,248,136, 82,162, 36,165,104,188, 66, 88,199, 9, 40,205,108, 54,103, 60,154,224, 28, 76,166,115,170,186,226,225,253, 7, 84,
+197,130,141,126,143, 56,214,228,121,238,247,185, 97, 71, 73, 24, 89,198,105, 78,214,233,145, 36, 41,221,110,151,205,141, 13, 6,
+131, 62,117, 85,242,232,225,125,182, 7, 61,242,196, 71,101, 54,193,131, 43,116, 68, 81,122, 8,199, 98,177, 96, 58,157, 4,143,
+250,192,143,237,226, 56, 28,216,253,107,145,231, 29,250,253, 62, 91,155,219,100, 89,135,141,141, 77,122,221,142,143,108,157, 45,
+ 24,143, 39, 12,207,199, 88, 7,113, 28,211,235,245, 40, 27,203,100, 58,195, 52, 13,137,144,100, 18,175,221, 72, 53, 69, 97,150,
+121,229, 77, 99,209, 65,100,183,189,189,141,147,146,188,215,103, 52,157, 49,154, 45, 2, 43,220, 5,188, 43, 68,169, 69,105, 95,
+192, 34,173,194, 40, 54, 9, 9, 91,138, 56,100,169,123,108,174,244,157, 96, 8,231, 96, 25,225,203,242, 57,229,159, 43,173, 23,
+ 90, 46,133,125, 34, 28, 4,156, 16, 33,229,205,187,116,106,227,130,186,219, 80, 87, 13, 85, 81,210, 76,167,222, 13,162, 53, 70,
+128, 49, 53,166, 88, 32,170,210,219,197, 92, 19,214,135, 22,233,227,144, 16,174, 66, 52, 21,152, 5,216,106,105, 43, 83, 8,104,
+106, 76, 49, 67,186,102,185,106, 19,107,148, 66,130,162,189, 13,129, 18,161,179,195,217,176, 47, 95,123,230, 89, 3, 77,248, 60,
+198, 4, 44,173,245, 69,199,203,195, 89, 76, 22,188,243,198, 59,184,166,161, 42, 22,212,101, 9, 50, 34, 78,186, 30, 30, 83, 86,
+212, 64, 54,216,166, 81,158,166, 55, 25,141,208,105,140,173,106,172,142,200,175, 92,198, 69,113,144,193,174,197, 95,135, 78,221,
+133,239, 65,171, 80,212, 99, 95,104,229,154,237,181,237,210,155,218,107, 1,148, 86,164, 65,189, 29,199,138, 40,214, 75, 50,218,
+ 82, 88, 27,132,137, 42,242,153, 29, 58,142,137,211,152, 56, 73,151, 99,241,168, 93,203,169,112, 29, 56, 86, 26,175,160,235,242,
+135,101, 47,246, 78,151,163,252,132, 60,245, 93,121,146, 68,228, 89, 66, 39,243, 59,254, 52,120,191,117,164, 2,135, 64,135,103,
+137,199,195,250, 49,188, 94, 75,169,116,127,253,162,238,214,133,242, 14,231, 76,128, 29,213, 52,107,157,122, 89, 84, 84,149,183,
+ 83,182,130, 97,191,202, 86, 79, 21,245,246, 75,176,214,162,110,238,239,252,254, 58,238,115,217, 45,173, 11, 31,150,241,146, 79,
+119,233,159,214,201,121, 27, 10, 97, 68, 22,186, 47,229,191,176, 85,160,252, 42,204, 99,169, 10,119,235,194, 43,177, 20,198, 40,
+185, 58, 88, 60,203, 78,208, 2,102,148,147, 40, 39,188,159,181,156,179,152,143, 24, 15, 15,152,142,143,160,153,161,132,160,179,
+185, 77,167,191, 65,164, 37,123,155, 61,222,248,225,171,220,189,115,111,153, 40,182,181,179,205,241,249,156,205,221,171,124,230,
+179,159,229, 39,190,242, 85,142, 30, 61, 98,122,126,202,243,207, 93,195, 15,157, 34,146, 44,231,252,228,144, 36, 86, 92,187,122,
+147,241,104,202, 55,190,254,147, 44,230, 51, 46, 95,218, 33,209,130,106, 81,208,239,111,114,126,126,206,221,143,239,176,187,189,
+195,171, 63,124,149,237,173, 29,190,243,157,239,240,220,173, 91,252,167,255,248, 31,243,173,111,127,107,249,160, 91, 23,148,251,
+ 7,152,102,111,255, 58, 95,251,218,215,120,245,219,255,158,190, 54,116, 6,219,100,157, 13,186,189, 62,181,140,121,229,149,159,
+226, 47,254,228, 91,164,210, 80, 53, 5,231,139,249, 50,154,178, 29,113, 11,225, 40,203,146,159,248,234, 43,188,248,194,103, 56,
+120,244,216,119,163,139, 5, 77,109,200,242,140,198,121,196,200, 50,146,116, 93,223,176,100,252,187, 21,226, 82,172,148,151,235,
+170,142,245,189,250, 18,244,193,186,183, 93, 46, 31,176,171,110, 94,172, 16,146, 97, 13,212,142,221, 85,200, 49,111, 11,123,162,
+ 35,178, 44,241,167,236, 78, 70,150,231, 36,105, 70,148, 36,168,120,173, 83, 95,191,222,148, 34,138, 99,254,228, 91,223,230,210,
+222, 37, 34, 29,113,245,242,101,250,189,140, 56, 82,188,255,206,187,220,255,228, 19,170,198,248,252,232, 44, 99,176,181,131, 84,
+ 17,198, 88,202,162, 32, 74, 98,162, 44, 7, 17, 33,163,212,143,112, 43, 47, 62, 75,179,140,186,170, 73, 18, 95, 60,135,103,231,
+ 60,248,228, 46, 69, 89,146, 36, 9,213,162,224,225,131, 7,140,135, 67,250,189, 14,121,154,144,103, 25, 74, 71,204, 23,139,160,
+ 0, 86, 40, 29,209,235,247, 67, 68, 35,244,178,156, 60,139,201,146,136,253, 75, 59, 36,177,230,232,209,131,240,144, 74,168,235,
+ 50, 40,209, 37,141,113, 68,113,204,124, 54,243,130, 55, 4,253,141, 1,113, 28, 99,172, 35, 73, 18,186,189, 14,214, 90,118,119,
+119,233,100, 61,156,131,237,237,109,226, 56, 97, 81, 44, 56, 58, 58, 66, 8, 73,183,215,103, 52,158,176,179,179,203,230,214, 22,
+227,233,148,209,116,202,172,242,128,165, 76, 8,122, 90,161,165, 33, 73, 53,101,225, 53, 85, 72, 15, 96,177,214,162,148,162,219,
+237,178,181,179, 71,131,160,172,106,142, 78,206,168,172, 63,184, 74,231, 72, 35, 80,137,243, 60,107,173, 67,113, 72,136, 90,110,
+124,232,210, 85,184, 46,252, 36, 39, 36,110,173,117, 42, 82,170,167, 98, 61,219, 17,229,186,112,217, 6, 50,166,181, 94,184, 91,
+ 91, 71,227, 4,149,177, 84,149,161,170, 74,234,162,160, 28,158, 33,108,237,149, 37,166,198, 20, 83,154,233, 8, 59, 31, 99,203,
+ 25,213, 98,140,173, 10,168, 23,136,186, 68, 52,115,100, 61, 67,154, 5,110, 49, 69,152, 5,182, 44, 16,141,247,229,139,178,192,
+206, 71,168,118,108,238,188, 15,157,229,155, 23, 3,182, 42,124,137,143,125,109,109,122,166, 42, 49,198, 79, 75,132,245, 97, 62,
+194, 26,191,171,111, 5,184,109,225,168, 26, 30,223, 63,228,227,247, 63, 66, 43,197,108, 50, 34,138, 19,156,136, 64,197, 40,173,
+189,128, 46,239,162,187, 3,140,136, 80,194, 49, 60, 62,246,184,216,170,193, 70, 49,189,171,215,145, 58,241,135,140, 64,118,116,
+203, 84, 79,135,177, 30, 60,211, 22,245, 36,246,105,152, 75,252,119, 16, 91, 54,141,161,110,106,156,243, 62,245, 56,210,196,145,
+ 47,182, 81,164, 66,129,110,159, 9, 50, 76, 45,125, 68,175,239,152,253,142, 61,138, 99, 84, 20,249,183, 54,150,116, 45, 17,206,
+219,220, 90, 87,150, 93,138,215,226,200, 79, 95,243, 36, 38,203, 82,127,239,165, 94,147,147,103,137,223,239,167,254, 80,226, 11,
+186, 66, 69, 26, 21,133,206, 60,132, 64, 41, 21,249,176,167,101,252,248,143,159, 92, 94, 92, 91,250,215,213, 94,208,130,133,223,
+ 51, 30, 69, 92,151,158, 98, 88,134,241,123, 85,213, 30,137, 28, 58,117,221,174,176, 3, 93, 78,181, 83,138, 53,251,158,186,113,
+105,243,247,215, 49,177,235,233, 57,237, 13, 36,214, 44, 74,207,242,150, 63,235,215,114,173,135, 91,239,190,132, 92,197,201,201,
+117,204, 94,171,166, 12,223,123, 27, 26,175,195,254, 76,135,206, 94,133,189, 70,155,233,126,209,234,230, 3,189,221,146,253,220,
+ 32,168, 81,210,248, 55, 33,112, 50, 98,251,242, 85,226, 36, 97,163,147, 97, 22, 83,126,244,250,155, 12,103, 37,137, 84,164,157,
+136,105,209, 16,119,118,185,118,243, 26, 55,110,238,209,137, 82,230,211,146, 27, 55,174, 97, 77, 65,167,211,225,203, 95,254, 6,
+223,127,245, 53,158,191,117,141,217,248,140,233,112, 76, 20, 41, 78,207, 14,169,138, 49,139,241, 41,199, 7, 15, 57, 59, 61,195,
+ 56,120,225,133,231,249,240,131,219, 76,199, 83,158,127,254, 51, 60, 58,120,196,214,214, 54,223,253,179,239,210, 31,244,249,167,
+255,244,159,242,111,254,237,191,189,192, 12, 22,194,115,205, 23,147, 49, 27,253, 30,191,242,203,127,139,247,222,126,155,163, 71,
+ 15, 89, 20, 53,215, 66, 12,236,162,210,124,225, 11, 95, 38,209,142,215,127,240, 29, 98,233, 83,148,138,198,132,194, 32,189,248,
+ 8,239, 68,144, 58,227,239,253,221,191,207, 91,111,189,205,221,123,119, 89, 20, 37,101,109,217,191,188, 79, 85,207, 16,152,101,
+167,254,228,107,188,138, 84,117, 79,228, 4,184,117, 64, 48,235,209, 76, 79, 97,250,215,186,240,118,252,190, 60,157, 47,187,115,
+121, 65,175,177, 18,203,249,235,166,221,169,231,185,199,194,166,121, 78, 20,128, 41, 42, 14,108,247,118,180, 47, 61,198, 84,235,
+ 8, 99, 28,111,189,241, 38,177, 86, 28, 63,126,200, 70, 39,101, 99,115,147, 69, 89,115,237,198,115,124,246, 11, 95,196, 42,197,
+131,131, 67, 54,119,246,216,189,245, 60, 66, 43, 38,103,167,212,243, 25,174,170,136,148,246,193, 45,210,143, 8,133,116,184,198,
+ 35, 76,243, 94,151, 98, 60,242,106,251,249,140, 59, 31,221,166, 92, 44,112,214, 49, 24,244,105,170,138, 98, 49, 71,224,188, 2,
+ 56,205, 16, 65, 40, 23,197, 9, 85,109,145, 90,147,100, 57,101, 85,129, 49,228,113, 68,162, 4, 90, 88, 98, 45, 25,244, 58,108,
+ 13,250, 52, 85, 73,177,152,224,172,207,150, 46,203,198, 63,208,156, 39, 26, 42,165,136,130, 23, 58,142, 19,140,177,116, 58, 29,
+250,131,190, 87,220,207, 11, 54, 55,183, 24, 13,135,108,108, 12,136, 34,205,120, 52,102, 60,153,160,148,166,211,233,146,166, 25,
+157, 78, 23,169, 52,227,233,140,143,238, 61,100, 97,173,127, 93,140, 99, 43,142,144,206,144,247, 18,154,178, 13,102,241, 28,119,
+161, 4,117, 99, 25, 12,250, 12,182,183,153,149, 37,157, 78,206,131,135,143, 89,212,222, 50, 22, 9,200, 34,136, 50,252,131, 84,
+ 41, 15,215,136, 98, 34, 29,163,132,242,221,246,242,128,167, 66,130, 85,155,110, 21,112,169,225,112,184,124,254,180,186,140,181,
+148, 54,169,218,130,196,210, 19,221, 24,255,117, 52,214,127,173, 69, 89, 82,151, 37,182,170, 40, 71,199, 84,179, 49, 90, 88,108,
+ 49,135,249, 20, 22, 35,170,233, 41,245,252,156,122, 54,166,158, 14,169,167, 67, 40, 38,152,217, 16, 51, 59,135,217, 16, 89, 22,
+ 80,206,125, 16,139,245,172,119, 55, 27, 35,202,105, 56, 40,176, 20,201,186, 54, 28, 62, 80, 15,125,106, 89,216,175, 59,231, 61,
+231,206, 93,232,230,165,107,255,124,232,210, 91, 47,184,240, 36, 62, 83, 53,188,251,230,187, 12,207, 70,104, 33,153,140,206,201,
+242, 14, 78,198, 76, 22, 5,113,146,113, 54, 26,209,219,222,163,209, 41,149, 16, 68, 56,134,199, 71,100,121,238,239,155,188, 67,
+247,234, 21,164,140,124, 67,167, 88, 78,214,150,108,118, 99,151,154,135,150,112,166,213,202,154,218, 42,213,107,211, 44,147,220,
+124,147, 39, 66,129,146, 75, 64,144,135,251,176,188,103, 91, 82,159,210, 17, 90,199,129,222,231,113,207, 75,193,218,218,170,174,
+ 37,154, 26,107,177, 1,132,214,194,178,226,200, 31, 56,178, 52,165,155,167,116, 50, 63,229,203,178,148, 78,150,146,165,254,208,
+236,245, 0,114, 25, 35, 44,149,242, 1, 80, 58, 36, 59,182, 5,190, 69,226,138,191,250,248,125,117,164, 12,177,172, 97, 53, 65,
+ 16,184,217,186,166,174, 42,170,178,166, 88, 84, 20, 69, 73, 89, 53, 30, 29, 44,101, 16,159, 43,191,114,208,107,207, 68, 33, 67,
+ 36, 70, 0,115, 93,223,243, 69,221,133,249,149, 92, 18,115,188,175,113, 57,142, 23, 23,243,103,127,156,104,106,105,222,183, 43,
+179,125,187, 11,107, 67,228, 87,187, 25,183,196,202,182,116, 32, 23, 50, 99,151, 55,241,218,168,161, 45, 4,237, 88,118,125,236,
+239,132,192, 8,175, 44, 68,174,198,114, 33,245, 24,231, 4,121,111,147,237, 75,251,212,117,197,222, 70,151, 55,127,248, 67, 62,
+188,251, 8, 25, 69,236,110,164, 84, 6, 92,220,227,133,151, 95,230,249, 91,183, 40, 38, 83,180, 45,217,221,187,204,209,201, 25,
+ 73, 2,211,233,140,143, 62,126,192,249,249,132, 63,250,195,127,203,241,225,125, 62,254,224,125,238,220,189,205, 98, 49, 98, 49,
+ 63,229,241,253,143,176,117,197,213,171, 55,249,224,246, 7,188,253,214,155,252,210, 47,254, 34, 47,191,244, 18, 63,120,245, 85,
+190,244,165, 47,115, 54, 28, 50, 24,108,240,253,239,127,143, 27, 55,110,242,171,191,242, 43,124,231, 79,191,179, 20,252,120, 73,
+175, 70,217,154,205,110,134, 33,225,235, 95,255, 41,190,247,167,223,225,244,124, 72,172, 5, 82,198, 52, 54,101,182,104,248,165,
+ 95,254, 89,126,248,253, 63, 65, 22, 51, 54,163,132,227,217,140, 10,159,253,141,240, 73, 90,206, 90, 70,195, 57,191,247,219,191,
+203,100, 58,103, 60, 29,241,201,253,123,212,141,227,234,149, 43,212,213, 4,225,234,224, 59, 22,203,228,162,139,169,108,159, 94,
+212, 47,184, 63,214, 36,143, 75,181,168,115,203, 7,176,191,174,214, 59,115,133, 82,173,194, 83, 95,120,205,245,154,173, 82, 74,
+239,166, 72,211,132,124,109,252, 30,167, 57, 58, 73,208, 81,228, 41,115, 34,236,224,165, 68,104,205,193,193, 33,111,191,245, 22,
+229,124, 78, 93,204,185,178,189,129,107, 10,238, 63, 62, 68,198, 41,151,111,222, 96,235,242,101, 18,191, 51,225,218,245,231,194,
+168,207, 49, 57, 58, 96,114,240, 24, 89, 21,244,123, 25, 81, 18, 97,154,154,114, 62,197, 54, 53,227,225,144,217,104, 68, 51,159,
+ 51, 61, 31,178, 24,143, 16,214, 48, 58, 59,101, 60, 30,163,180,242,105, 98, 74, 81, 85, 21, 85, 93,161,173, 65, 56, 88, 20, 37,
+141,131, 52,237, 80, 86, 53,211,217,156, 36, 77, 61,172,168,169,137,133, 35,194, 17, 71,210,219,229,109, 67,172, 20, 89, 28,113,
+124,116,192,249,249, 41,198,194,124, 81, 99,172, 66, 69, 49, 85, 93,163,180,199,123, 70, 81, 68,150,119,232,116,187, 72,169,216,
+220,220,198, 57, 56, 63, 59,103,103,123,155,162, 40, 40, 43,111,255, 44,203, 10, 29, 69,116, 58, 93,178, 44,167, 40, 42,102,139,
+ 5,157, 78,151,178,174,249,240,222, 61,230,198, 32,165, 32,119,130,190, 20,164, 49,196,153, 66, 6,132,180,197,135, 84, 32, 60,
+150, 53, 75, 82, 84, 20, 83, 90,203,214,230,128,143, 63,185,207,180,244,161, 48, 49,142, 60, 2,149, 9,146,196,243,251,211, 56,
+ 70, 43, 77,164,163,165,224, 74,173, 95, 3,226,162,206,167, 69, 14, 59,215,142,225, 87,249,213, 66,180, 88,226,149, 40,211,186,
+181,103,143,115,212,214, 35,119, 27, 99,105,170,102,217, 53,217,197,144,249,248, 12,170, 26, 55,159, 66, 49, 69,212,115,104,166,
+216,114, 78, 61, 27, 83, 77, 70, 44,134,103, 44,198,103,152,249, 8,170, 9,178,156, 33,234, 26,105, 27, 95,160, 45, 80,150,212,
+147,115,100, 51, 7, 97, 86, 15,245,160, 60,147,109,174,128, 9,153, 4, 1, 84, 19,150,196,161,171, 55,190,168,135,113,189, 11,
+191,246,133,194,174,162, 63,173, 97, 58,154,242,250, 15, 94, 71, 90,137,109, 74,176, 6, 21, 39,136, 40,245, 83,137,186,198, 10,
+ 72,250, 3, 42, 17, 97,181, 34,114,134,249,249,144,238,160,199, 98, 81, 16,245,251,228,123,123, 40, 21,163, 36,203,149, 71, 59,
+ 93,107, 1, 48,214,177, 92,137,197, 97, 52, 44,214, 92, 97,214,249,241,187,143,122, 13,135,128, 48, 74,246, 90, 43,207,182,247,
+128,169,150, 87,161,150, 49,167, 74, 69,161, 75,142, 67, 65, 15,224, 31,177,246, 58,175,241,227, 61,217,180, 9, 99,120,239,223,
+137,148, 38,137, 34,242, 52,165,219,201,232,118, 82,242, 60, 35,207, 51,178, 52, 38, 77, 19,146,184,237,130,213,138,241,174,159,
+ 81,212,165,190, 56,105,254, 49, 69,253,169, 46,222,121, 7,208,122, 78,201,178, 83,111,218,162, 94,122,207,125, 89, 81, 86,158,
+ 95,209,174,156,116, 40,232,190,176,175,138,122, 43, 46, 6,124, 81,151, 50, 92, 88,237,200, 83,182,226,182,213,248,221,231,189,
+ 94,244,234,185, 79, 25, 51, 56,231,150,209,167,173, 92,197, 4,127,167,107,163,231,240, 96, 7,191, 3,241,197,188,245,187, 59,
+103,150,169, 52,235,187,120, 25,140,246,178, 69,147,182,251, 89,185,194,253, 8, 37, 46, 32,251,220,133,112, 1,205,165,253,203,
+ 36, 89, 68,191,147, 81, 77,103,252,232,213,215, 40,171, 26,173,225,198,141, 61, 78, 71, 53,159,255,210,215,217,186,180,207,245,
+155, 55, 73, 84,132,194, 48, 31,141,217,236,119,185,115,231, 35, 14,142, 78,184,125,251, 35, 78,143,143,185,122,105,159,205,254,
+ 22,157,238, 38,131,141, 77,182,119,247, 72,226, 1,113,212, 3,161,120,227,205,215,217,220, 24,240,252,115,183,120,248,224, 33,
+183,111,127,196, 55, 94,121,133,211,225,136, 56,203,216,222,221,225,147,187,119,249,254, 95,124,159,127,248, 15,254, 1,145,142,
+184,253,254, 7, 75, 42,155,115,142, 75,253, 62,163,225, 25,189,193, 46, 63,247,171,191, 74, 61,124,192,163,219,183,121,116, 50,
+ 69, 39, 93,116,166,168, 22,134,151, 95,250, 9,250, 91, 25,175,189,250,109,154,211, 17, 70, 41,102, 38,208,226, 2,114, 82, 34,
+169,172,230,235,175,252, 44, 55,175, 93,226,240,225, 3,176, 53,179,249,194, 83,198,164,243, 2,191,101, 82,218, 90,198,222,242,
+125,119, 49,123,207,137, 11, 50,185,139, 28,126,247, 12, 52,255, 10,181, 40,132, 88, 34,101, 91, 20,162, 63,133,250, 81, 83,123,
+242,215, 82,250, 83,122,200, 30, 78, 90,161, 92, 59,122,239,100, 68,105, 28, 44,103,209, 74,204, 18,198,238, 14,248,195,127,253,
+175,120,231,213,191, 96, 35,247, 22,150,211,243, 49,163, 73,193,151, 94,121,133,237, 75,151, 24,108,237,120, 65,150,210,164, 74,
+ 32,235, 10,105, 26,100,146,145,167, 25,179,241,144,225,232,156, 78,175, 79,214, 31, 96,235,134,233,233, 25,195,227, 83, 14, 15,
+ 15, 41,230, 11, 22,211, 9,139,217,140,211,243, 49,198, 89, 6,155, 27,212, 54, 98, 56, 45,136,147,132,205,205, 62, 66, 10,108,
+237,104, 76,141,138, 98,102,101, 67,213, 52, 68,169, 47,198,199,199, 39,244, 58, 61, 76, 83, 98,194,200,210,119, 54,146, 44,139,
+137,181, 66, 88,255,103, 59,131,109,250,155,187,108,239, 92,162,191,177,201,172,172,252, 24, 91, 72,102,211, 25,117, 93, 51, 28,
+142,232,111,108, 32,117, 4, 82, 17,199, 62, 48, 6, 1,113, 18,211,201, 50,154,186, 70, 72, 65,154,231, 30,178, 34, 60, 71,218,
+154,134,166, 44,176,245,130, 60, 77,249,248,254, 67,198,139,130, 72, 75, 98,235, 72, 5,244, 18, 79, 6,115,206, 11,245, 12, 80,
+150,150,110, 55,103, 50,169,232,100, 41, 73,150, 81,184,134,172,215,231,236,209, 9,179, 69,197,185,115,200, 72,208,111, 36, 89,
+ 87, 17,167, 26,169,172, 87,191, 71, 49, 90,249,177,187, 12,118, 89, 25, 70,233, 74, 5, 47,116,216,244,202, 16,102,226,156, 93,
+237, 57, 67, 17,151,235,215,102,152, 16,185, 0, 62,114, 2, 12, 80, 91, 23,146, 5, 3, 2, 59,228, 89, 84,139, 25,102, 54,198,
+140, 78, 89,156, 13,185,123,239,152, 15, 31,156,114,190, 48,228,105, 70, 7, 11,213, 28,204, 2,211, 20, 56,103,189,141, 80, 72,
+132, 83, 68, 82,163, 29,136,178,196,204, 38,212,243, 49, 74,121, 63,190, 8, 22, 79,107,252,193,110,125, 65,224,150,124,123, 19,
+246,234, 30,158,131, 51, 97,138, 23, 22, 99, 33,170,149,176,115,245,164,111,131, 51,130,187,183,239,113,239,227, 7,228, 73, 76,
+ 93, 46, 80, 74, 80, 56,141, 83, 49, 58,138, 25,143,198,116,187, 3, 92,148, 81, 37, 41, 40,141,157,207,169,230, 19,122,189,140,
+241,162,160,187,123,137,108,115,211,179, 36, 34,137,212,173,234, 59, 68,215, 58,223, 17,251, 96, 28,252,189, 27,169, 37,174,121,
+105,129, 13,161, 58, 77,227,217, 36, 34,112, 41,252, 14, 93, 6, 87,212,106, 58,231,215,180,122,213, 41,183,157,185,246, 10,116,
+ 31,123, 42,151,228, 53, 31, 28,214, 98, 95,253, 62,189, 9,147,129,198, 52, 56,227, 9,148,113, 20,121,183, 76,238, 39,124, 89,
+158,145,102, 73,216,213, 71,232, 40,124, 13,218,139, 30,165,146,126, 4,175, 52, 74,135,228, 71,173, 61, 65, 80,168,139,220,142,
+ 31,163,243,186, 56, 81,182, 23, 28, 63,109, 22,133,109, 90,161,156, 47,228, 69, 81, 82, 44, 10,170,170,193, 26,191,126,209,203,
+ 78,189,117,152,249, 67,136,159, 74,177,212,202,168,231, 46,111,254,190, 23,182,173,198,226,237, 7, 47,149,234, 50, 88,207, 66,
+234, 90,123, 81,217, 39, 54,174, 43, 51,125, 24,165,175,189,176,214,173,129, 34, 92,232,204,141, 91,178,131, 91, 52,160, 23, 55,
+120,228,163, 90,190,208,161,160,175,157,190,151, 49,174, 98,181,159,127, 18,116,178, 92, 2,136, 22, 81,170,201,243, 14, 74,193,
+165,221,109,110,191,251, 62, 7, 15, 15, 73, 34, 65,156,104, 74, 11,187,151,111,112,237,198, 45,190,246,141,111,112,239,206, 71,
+ 84,229,140,157,173, 29,142, 30, 61,228,141, 31,254,144,243,225, 24,235, 4,183,158,123,158,253,221, 75,212, 69,195,100,178, 64,
+ 39, 49, 22, 67,183, 63, 64,168, 20,235, 34,166,179, 17, 58,169,153, 79,167,220,189,115,143,126,167,203,215,191,254, 13, 62,252,
+232, 35,190,246,141,175,115,247,222, 39,244,123, 93,234,186,164,219,233,240,230,155,111,241,159,255,231,255, 51,254,226, 47,254,
+130,241,100, 18, 38, 22, 2,217, 52, 88,103,232,246,123, 92,187,117,147, 95,250,230,151,248,240, 7,223,101, 56, 42,136, 58, 61,
+ 68,226,104, 74, 1, 46,229,107, 63,253, 53,110,191,247, 42,229,241, 1,141,132, 81,213, 96, 90,245,119,136, 6, 52, 40, 54,119,
+ 47,243, 27,127,235,215,248,232,237,183, 72,133,163,105, 26, 14, 14, 30,115,253,242, 46,213, 98,238,163, 0,195, 65,201,173, 69,
+ 68, 58,177,150,204,182, 60,137,187, 11,239,179, 62,197, 89, 67, 39,138, 16, 33,233, 4,225,128,214,170,189,195,141,172,214,108,
+144,202,171, 90, 35,189, 58, 61,183,145,135, 74,120,128, 69,154,133,162,222,233,144,230, 9, 81, 26,163,147,196,135,107, 72,143,
+237, 20,178, 29,221, 10, 30,126,248, 30, 15,222,127,139, 23,111, 92,102, 54, 29,243,234,107,111,240,187,191,247,247, 65, 74, 78,
+ 78,143,145,192,160,215,243, 55,184,146, 52, 77, 73,221, 84, 72, 29, 19,119,187,196,145,166,168, 74,132,148,116,123, 61,198,167,
+103, 76,206,206, 40,138,146, 69, 89,145,229, 25, 91, 27, 3,102,243, 5,247, 14,142,169,157,163,211,239,113, 62, 42, 57, 31, 23,
+116,122, 57, 27,219,125,242, 36, 65, 32,153,204, 39, 24, 39, 49, 66, 51,153,207,168, 77, 77, 81, 20, 84,139,134, 52, 73,176,214,
+ 7, 80,216,208,133,197,218, 39,182,101,177, 70,184, 26, 43, 52,113, 54, 64, 70, 41, 8,136,210,148,107,207,221,162,155,119,152,
+142,198,116,187, 29,143,161,117,144,164, 9,123,151, 46,249,174,201, 26, 58,221, 14,131,126, 63,100,183, 39, 68,113,132,177, 13,
+ 78,192,249,112, 24,242,197, 3,154,181, 46,104,138, 25,121,146,208, 56,120,116,120,136, 49,142, 8, 72,129,126,170,145, 52,196,
+ 73,228,169,117,133, 15,162, 73,210,136,170,108,136,195,132,165,209, 48, 45, 11,236,164,100, 58, 91,112,232, 60, 14,117,208, 40,
+242, 92,144,100,138, 40,150,203,215, 90, 5, 47,113, 59,169,107, 17,196,178, 29,181, 47,187, 58,233, 39, 30,139, 5,139, 98, 65,
+146,196, 75, 26,161, 8, 83, 34, 25, 82,182, 68,112,220, 56, 41,176, 2, 26, 39, 48, 78,248,195, 72, 59, 45, 52,214,239,215,235,
+ 6,202, 57,197,217, 33,143,238, 30,240,241,157, 17,143,143, 38,124,124,239,152,131, 79, 14,216,205, 5,219,221, 8,105,203,160,
+ 72,151,116,147,140,110,148, 96,206, 39,124,244,198, 7, 20,143, 31,225, 70,231,212,227, 83,242, 44, 90,101, 2,173,217,136, 91,
+176,249, 50, 85, 82,128,179, 62,149, 14,227,247,239,174,221,183,135, 67,139,112, 65, 84,103, 67, 32,202, 82, 32,104, 48,149,228,
+213, 63,255, 17, 77, 81,162, 37,212, 85,129,210,154, 90,166,160, 98,140,105, 40,230, 37,105,167,135,204,187, 20, 1,113,107,167,
+ 19, 76,179, 32, 73, 53,227,178,100,243,202, 53,226, 78,207,239,175,117, 91, 96, 69, 56,144,176, 68,134, 91,107, 16,176, 44, 52,
+237,215,232,130, 82,223, 25,150,207,118,107,219,245, 8,203, 46, 61,214,171, 14, 84,173, 61, 11, 68, 59,141, 81, 10,161,253, 91,
+203, 76, 89,214,129,117,103, 84, 88,101,216,160, 38,111, 66, 40,146,181, 54,216, 96,189, 91,161,157,238, 37,185,183,201,249,130,
+ 30,173, 33,209, 87,201,108, 42,140,223,219,162,238,227,155,163, 21,250,247,175, 80,204,159,197,144, 95, 6, 98, 57,183,204,134,
+ 55, 77,229,133,114,101,237,189,234, 69, 73, 89,122,157,149,144,129, 7, 19,233, 37,243,101, 53, 85, 8,220,134, 96,235, 83,159,
+185,186,253,251, 90,203, 37, 8,102,101, 63,107, 79, 79, 43,139,145, 90, 75,221, 90,239,203,150, 81,167, 23, 60,229,173, 79,148,
+ 11,227, 90, 90,191, 99,248,102, 90,174,239, 58,133,206,217,128,171, 21,225, 64, 33,212,218,180, 64, 92,164,154,181,130,172,144,
+100, 36, 3,133, 76, 10, 15,153,104, 71, 51, 2,129,179, 48,155, 77, 25, 12,250,196, 74,242,193, 91,111,115,118,122, 78,150,101,
+136, 56,102, 97, 53,183,110,221,226,133,207, 60,199,199,239,191, 67, 44, 29, 85, 49,231,240,240,144, 60,207, 25,141, 38, 88, 39,
+217,217,218, 35,214, 41, 82, 37,140,102, 5,139,178, 90,250, 7,141,243, 60,239,166,174,144, 88,234,170, 34,203, 58,100,105,198,
+209,225, 17,247,238,125,194, 23,190,240, 57,166,211, 17,159,255,220, 75, 60,184,119,151,217,116, 66,150,166, 60, 62, 56,164, 40,
+ 74,126,235,183,127,135, 63,250,163, 63,242,230,152,128,131,140,156, 35,205, 35,166,243, 5,191,241,119,254, 30,119,222,121,139,
+163, 15, 63,160,168,230, 24,153,161,162,140,209, 98,202,207,254,226,207,243,248,238,135,184,217, 33, 70,214,156,205, 42,138,144,
+ 61, 45,133,162,211, 25,144,244,122,168, 40,227,119,127,235,215,249,228,189,219,148,163, 49,211,179, 51, 98, 5,123,187, 3,102,
+179,145, 47,234,107, 57,245,235,239, 95,152,206, 60, 49,130,247,137,104,254, 48,247,100,124, 33,237, 88,214, 31,177,214, 40, 84,
+171, 61,105,155,241, 44,130,181, 82,173,237,217, 91,225,158,192,119, 5,105, 26,147,119,114,242,110, 70,146,182,170,216, 36, 4,
+108, 40, 15, 10, 9, 55,168,169, 11,126,240,167,223, 98,118,122, 72,130,229,181, 31,126,159,157,157, 77,182, 55,250, 28, 63,186,
+207,124,116,142,105,106,242, 78, 78,119,208, 67,164, 49, 42,143,137,179,132, 98,116,142, 43,102, 72, 83, 33,157,161,156,207, 72,
+164, 36,209,145,183,222,196, 41,105,183,199,165,203,123,196, 81, 68,156, 36,228,189, 1, 58,142,216,219,221,229,228,116,200,193,
+225, 49, 82, 75,250,189, 14, 74,250,100,186,209,116, 76, 81, 89,146,180,195,124,177, 96, 94, 44,200,210,156,162,168,151, 2,196,
+ 80,247,136,148, 36,139, 37,253, 44, 33, 75,180, 79,198, 82, 49, 22, 65,183,155,163,112,152,198,160,117, 76, 39,239, 17, 71, 49,
+231,195,115,226, 52,101,255,242, 62,206, 26, 14, 30, 63, 36,146, 18, 29,172, 71,105, 28, 99,155, 26,165, 37, 89, 26, 83, 21, 5,
+ 69, 81, 82, 87, 53, 82, 8,172, 49, 36, 90,161, 4, 84,139, 5,145,132, 65,175,195,209,217, 57,163, 89, 1,214,145, 0,131, 84,
+163, 48, 8, 41,169,140,163, 40,125,148,171,142, 36, 77, 99,137,148, 6, 12, 58,211, 12,199, 19, 34, 20,163,233,148,145,115, 24,
+ 43,232, 58, 73,172, 13,113,226,149,189, 58,210, 8,180,239,214,218,135, 87,187, 31, 95,138, 47,229,242,173,237,208, 35,229, 31,
+206,173,240, 82, 0, 66, 9,175, 96,142,244,178, 48,160,100, 64,156, 58,154,144,147,109,240,113,187,126,113,236, 39,136, 69, 99,
+104,154,138,122, 54,101, 49,156, 33, 42, 75,102, 5, 3, 1, 29,105, 41,167, 99,118, 7,154, 88,251,164,199, 60, 74, 81,214,241,
+254,107,175,243,253,255,238, 79,121,252,254, 7,136,242,140, 68,195,214,238, 22, 81, 30,131, 48,136, 40,196,180,134,245,144, 11,
+138,214,214,169,226,237,109, 54,140,224,195,174,125,137,240,246,186,129, 22,238,227,183, 28,225,231, 33,253, 10, 98,120, 58,225,
+237, 55,223, 37,209, 17,206, 53,190,176, 57,129,149, 9, 8,201,108, 50, 37, 78, 51, 92, 20,163,122,125, 22, 18,180,214,204, 79,
+143, 73,252,183,207,162, 54,108, 94,190,138,206, 59,136,128, 9,143,180, 23,144,181,207, 98, 27,216,240,174, 45,212,161, 9, 91,
+ 30, 60,194,171, 96, 77,136, 82, 53,198, 43,185, 91, 6,124, 0,144, 69, 97, 63,172,117, 43,126,148, 79,237,205,125, 3,160,195,
+234, 85, 5, 42,167,255,119,197,229, 95,241,219,109,219, 36,134,166,177, 85,232,199, 73, 68,154,121,182, 69, 22,216, 22, 58, 14,
+205,132,148, 75,110,125, 59, 61, 20,218,231,160, 72,237, 17,224, 66, 71, 94, 99,240, 68, 81,255,180,226,254, 36,249, 84,132,125,
+186,187,144, 47, 29,214, 5, 77, 80,191,151, 94, 36,231,133,114, 13,198,186,112,192,144,203, 98,174, 46, 20,244,213, 52,218, 90,
+139,122,249,230,165,223,143, 34,189,156,215,199, 45, 83, 86,235,229, 56, 34, 90,210,223,164,103, 49,183,197, 84,178, 82,196,203,
+117,184, 88,187,203, 90, 21,122, 25, 78,103,173, 74, 81,182, 76,222, 0, 79,112,107, 97, 47, 23, 31,248,114,121, 17,173,212,239,
+110,229, 93,127,226, 7, 6, 23,109, 81,203,194,190,132,234, 40,190,242,165, 47,241,232,222, 93, 62,124,247, 61,234,218,146,117,
+115,230, 70,112,235,165,159, 96,123,107,147, 68, 54,136,106,198,240,228,132,155, 55,110, 80,213, 21,143,143, 14,137,147,148,237,
+205, 29, 92, 35, 40, 22, 13, 22,197,120, 81, 48, 28, 79,160,170,169,235, 18,173, 36,184,134,217,108, 66,177, 40, 89,204, 11, 16,
+146, 40,138,232, 15,122, 56,219,240,224,193, 39, 92,190,180,203,143, 94,253, 62,223,248,250, 87, 24, 14,207,185,117,235,121, 6,
+131, 77, 30, 31, 28,243,202, 79,126,147,131,195, 35, 30, 31, 29, 81,153, 6, 37, 28,159,217,219, 36, 78,165, 31,239,111,222,224,
+197, 27, 87, 57,254,209, 31,209,152,134,243, 34,166,196,161, 83,197,222,254, 13,110, 93,189,202,251,111,126,139,147,179, 99,226,
+ 60, 97,178,176, 24,171,137,116, 15,169, 82,162, 36, 3,169,249,197,159,251, 37,170,201,148,225,163,199,236, 12,186,116, 18,197,
+206,238,128,179,225,233, 18,102,240,151, 49, 12,125, 99, 46, 86,169, 71,150, 11,216,154,101, 6,146, 99, 41,132,108, 53, 19,237,
+ 30,244,169,152,223,245,155, 20, 31,180,225, 90, 22,119, 24, 77,106, 37, 72,210,152,188,147,145,229, 25,113,154,160,147,196, 71,
+ 82,234,208,165,175, 89,217,100,164,216,232,230,124,231, 15,255, 29,183, 63,120,135,155, 55,111,176,185, 57, 32,142, 34,202,217,
+152,186,156, 83, 85, 37, 8, 65,191,223, 35,235,118,253, 13,227, 12,162, 41, 24,158, 28, 98,155,146,106,177,224,236,248,152,106,
+ 62,103,115, 99,131,188,191, 65,190,185, 77,127,123,123, 9,201, 72,178,140,172, 59, 64, 72, 69,191,223, 39,207,251,124,120,247,
+ 46, 82, 74,246,246,246,232,230, 93, 4,142,243,225,136, 69, 81,163,163, 4,231,240,190,219, 36, 97, 56, 28, 35,133,247,201, 90,
+219,160, 4,116,178,132, 60,213,116,178,152, 68, 71, 84,198, 49, 43,107,170,198,146, 37, 17, 18,131,214, 26,235, 32,138, 19,250,
+ 27, 27,116,186, 29,138,178, 96, 58, 29, 35,156,227,236,244, 4, 83,215, 8, 33,200,211,132, 94, 55,247, 95,199,249, 41,155, 27,
+ 27, 68,145,166, 40,138,224,113, 95, 32,112,228,177, 87, 9,151,243, 41,166,152,225,170, 5,165,181,220,125,116, 12, 50, 66, 56,
+ 75,166,156,207,249,142, 99, 12,154, 69,229,161, 46, 82, 75,172, 53, 20, 69,133,176,150, 56, 85,204,203, 2,140, 99, 58, 47,169,
+164,100, 81, 91, 98, 33, 73,164, 37,138, 64, 69,146, 56,142, 81, 42, 70, 74, 15, 33,105,131,191,218,110,125,201, 55, 8, 15,248,
+246, 89, 34,148, 87, 81, 35, 86,224, 34,161,229,178,195,179, 66, 6,140,171, 14,224, 20,137,145, 26, 39, 21, 86,250, 28, 56, 41,
+117, 64,199,224, 99,120,157,195, 53, 53,182,170,112, 85, 73, 42, 29, 91, 61,201,238,142, 98,239,114, 78,172, 45, 66, 58,148,214,
+222, 58, 40, 28,218, 25,158,123,110,147, 91,159,221,103,247,250, 62,251,183,174,147,108,111, 80, 71, 18,153,103,184,214, 34, 37,
+228,178, 32,250, 41,168, 13, 66, 67,127,141, 59,227,149,240,206,239, 6,194,226,203, 55, 69, 24, 23, 50,204, 91,181,184,196, 73,
+ 73, 99, 5,175,191,250, 38,147,243, 9, 73,228, 95,159,186,105,112, 40,162,204,147,225,202,162, 36,206,114, 84,191, 79,147, 36,
+148, 66, 34,129,217,233, 49, 91,131, 46,243, 98, 78, 35, 53,219, 87,174, 35, 18,207,125, 88, 31,251,182,124, 17,236, 42,128,197,
+ 5,117,188, 84,242,105,214,185,101,137, 4,111,179, 33,148, 36,144, 71, 67,168, 75,164,137,244, 42,175, 92, 41,189, 26,247,135,
+220, 7,161, 86, 20,202,245,167,139, 92,198,153,134, 6,100, 45,185,205, 7,142, 25,159,107,161,189,152, 47, 77,227,192,182, 88,
+217,227, 86,122,173,213, 20,152, 86, 79,166, 61,255,222, 55, 11,218,199,227, 94,240,169,115,129,115,223,186, 86, 28, 79,200,140,
+214,106,214,170,216,135, 78,221, 54, 75,161,156, 39,202,249, 55, 47,148,115, 23, 68,195,190, 9, 18, 23,242,224,173,245, 34,232,
+186,105,208, 75, 97, 3,171, 0, 14,173, 20, 81, 75,240,106,205,238,237,220, 62, 68, 30, 34,220, 26, 72,100,157, 8,214, 10, 85,
+196, 26, 40,236,201, 96, 22,175,195, 82, 66, 16, 57, 9, 17,222, 38,230, 20,194, 69, 40,185,130,241,183,129, 12,106,121,177, 8,
+148,208, 75,206,179,114, 62,219,217,134,120, 62,107, 89, 42, 51,157, 3, 39, 47, 66,253,187,189, 46,105,146,112,118,114,130, 20,
+142, 36,129, 36,207,153, 23, 48, 24,108,161, 20,228,169,192,204, 27,174, 93,190, 4,198, 50,159, 78,185,114,245, 50,174,182, 28,
+ 62, 60,161,152,214, 40,157, 18,117, 34,116,236,125,209,253, 78, 66, 89,205,113, 86, 48,155, 78,177,182, 97, 49,171,112, 70, 96,
+148,247,241, 74, 9,189, 65,143,186,140,248,209,107,175,241, 19, 95,120,137, 65, 39,229,236,244,140,126,127,147, 31,124,255, 7,
+ 72,157,241,255,249,175,255, 27,254,209, 63,250, 79,249,225,235,175, 45,113,151,105, 28,163,112,124,248,222, 59,136,238,183,248,
+ 95,254, 79,255, 1, 87,174,239,113,124,251, 1,167, 39, 39,104, 91,115,229,185,125,190,251,103,223,227, 63,251, 71,127,151,180,
+191, 73,164, 31,177,153,116,120,116,214, 80,155, 8, 33,187,204, 22,150, 40, 79, 24, 13,167,188,251,254, 7, 60,119,245, 10, 31,
+189,158,208, 85,138, 60,106,232,101, 25,113, 20, 83,215,139, 53,177,155,120, 2,137,124, 49,115,120, 29, 12, 36,240,118, 27, 43,
+ 37, 70, 58,148, 20, 88,105,113,202,243,186,149,112, 40, 28,181,108,252,222,118, 13, 17,226,111, 88, 15,226,105,132, 64, 75, 31,
+149, 41,165,244,129, 21,202, 63, 56, 44,142,166,241, 5,163,189, 1,101,235,138, 8, 15, 76,199,170, 91,179,225,100,220,223,218,
+ 99,231,242,117, 50, 95, 61, 56, 62, 27,178,123,233, 26, 89,183,195,108, 58, 97, 50, 28,114,247,131, 15,136,133,228,101, 11,121,
+175,131,173, 75,180,114,100, 89,130,107, 28,121,183, 79, 99, 14, 24, 77,103,148,101, 77,156,192,124, 54, 39,235, 15,188,194,218,
+ 89, 84, 20,145,197, 17,103,195, 49,179,217,130,141,237, 13,118,247,118,152, 76,231, 76,166, 5, 27,131, 1,121,183,195,238,222,
+ 30,167,103, 31, 83, 45, 74,159, 57,158,119,168, 66, 68,103, 85, 87,164, 73, 12, 14,170,170, 66,144, 33,132,194, 24, 71, 81, 53,
+140, 43,195,112, 50,227,210,222, 30, 77,211, 16,139, 54, 33,203, 80,150,115,186,145, 98,103,103, 3, 33, 29,103,103, 25,143, 30,
+ 29,112,109,127,223, 39,166,229, 29,159, 67, 46, 4,157, 44, 99, 40,252,195,181,169,161,155,229, 40, 36,211,209,136,166,134,210,
+ 57, 6,157,156, 52,142,153,157, 23, 8, 91, 97,231, 11,148,243,113,194, 11, 33, 24,214,142,174,246,152,214,147,241,140, 40, 74,
+ 60,239, 93, 8, 84,236, 99,136,139, 69, 69, 63,132,185, 72,229,239,219,190, 84, 76,133,101,138,163, 87, 66, 90, 56,146,220, 7,
+180, 68, 26, 31,216,179, 28,247,138, 11,246,199, 54,217,172, 77,152,244, 60,117,131,179,171,157,110,219,248,214,214,248,215,197,
+249,176, 16,159,166,166,112, 97,250,227, 11,184, 66,106,223, 5, 43, 33,208,206,145, 88,129,232,110,194,118, 73, 86,213,168, 88,
+ 99,103, 99,226,216, 18,103,130,100,144, 18,119, 83,162, 88,177,121,105,143,221, 43, 87,232,102, 41, 52, 87, 48,162, 65, 39, 41,
+ 82, 71,232, 78, 15,155,230,168, 52,195, 74, 95, 28,156,106, 57, 28, 43,198, 56,206,249,232,212,240, 32,179,214,160,156, 95, 45,
+ 88,235,104,156, 3,235,139,184, 53, 22,173,244,170,160,227, 16, 40, 78,142,207, 56,120,124, 12,206,139,207,202,218,129,212, 72,
+ 25, 83, 53, 53,117, 93,147,196,254, 96, 97,226,136, 74,123, 1,177,171,189,118, 35,201, 50,206,199,231, 68, 89, 7,180,191,143,
+188, 80,213,175,194,132, 2,101,253,248,216, 24, 75, 82, 69,148,117,132,113,102,205,146,235,150,246, 96,223,206,185,181,251, 52,
+ 36, 65, 74,187,108,180,218,105,223,242,208,191,150,170, 38,195,218, 86, 10,235,119,249,126, 95,129, 8, 33, 56,158,204,103,189,
+179, 1,111, 67,211, 73, 76,218,100,212,117,237,189,248, 85,205,130, 18,112, 75, 17, 95,155, 91, 33,228, 69,226,165, 64, 34,157,
+ 10,235, 98,187,202,145, 8, 52,194, 39, 27,201, 79, 11, 26, 91,190,255, 36,248, 93,172,108,112,246, 25,122,163,214, 45,246,228,
+ 63,214,249,215, 95, 25,135, 50,134,186, 89, 53, 44,198,132, 21,169,243,107, 84,157,198,209,242,116,229, 99,222,220, 26, 36,166,
+245,149, 7,160,204, 90,144,251,106,167,245,236, 24,206,103,165,216, 60,237,223, 99,153, 24, 36,156, 90,138,195, 84,179, 10,105,
+ 88,191, 64,252, 73, 76,132,208, 7,133, 67, 47, 63,143,181, 22, 67, 56,193,134, 17,255, 42,165,199,255,125,181,115, 12, 54, 6,
+188,250,234, 15,153,207,166, 36,169,192, 20, 48,173, 74,174,220,124,153,173, 94,135, 88,207,184,125,251, 45,158,191,241, 60,151,
+247,174,113,231,147, 71,244,123,125,186,105,204,220,204,253,206, 10, 75,167,219,193,226,200,243,148,126,175, 3,198,219,150, 58,
+217,128,241,228,148,178, 44,113,206, 16,233, 20,231, 26, 31,167,169, 35,138,166,196, 9, 71,150,199,220,191,127,143,233, 98,206,
+215,191,254, 21,238, 63, 60,225, 23,127,225,151, 57, 60, 58,231,232,241, 1,121, 28,243,217,231,159,231,195,143,222,131, 6,142,
+ 78,135, 92, 31, 92, 69, 69, 17,199,143,238,112,247,241, 25, 55,191,250,211, 60, 28,253, 59,204,241, 24,109,107, 70,167,135,116,
+178, 75, 28,159, 13,185,246,194, 23,249,240,221,247,217,232,118,233, 68, 51,230,149,135,107, 88, 23, 51,157, 54,196,166,224,237,
+119, 63,228,167,255,241, 63,196, 36, 41,103,103, 15,216,221, 72, 48,117,141, 86, 17, 84,139, 11, 69,124,233,129,253,180,198,253,
+ 2,130, 95, 44, 67, 43,156, 19, 75,129,164, 10,184, 90,171,164,223,214,186, 26,101, 45, 70,250,120, 75,235, 44,177,211, 40,227,
+ 79,205, 70, 26,111,103, 90,162, 11,107,127,232, 20, 16,107, 31,101,235, 66,118,186, 88, 45,194,150,162,138,229,105,216,195,147,
+ 1,201,205,231, 94,192, 93,218,231,193,131,187, 8,109,201,251, 3, 92, 93,147, 9,197,100, 50, 99, 49, 91,112,247,195,143,144,
+117,195,181,203,251, 12, 54,251,184, 60,162,183,179,143,107, 44, 66, 40,110,216,136,147,163, 35,106, 25,161,133,198,184,154,178,
+170, 81, 18,104,106,132,171,137, 59, 9,157, 78,159,249,108, 66, 66,195,151,190,242, 69, 94,123,237,109, 14, 15, 79,216, 28, 12,
+184,188, 55,160,172, 43,206,142,199, 20, 69, 77,150,103,100,221,140, 69,229,167, 61, 77,101,124,114, 25, 80,213,181,239,118, 7,
+ 93, 26, 99, 57,159,204, 56,154,213, 72, 21, 81, 54,126,247,171, 36, 8,229, 35, 69,141, 41, 41, 22,142, 78,183,199,214, 70,151,
+186, 44,248,236, 11,207,243, 71,127,252, 45,226, 52, 37,206,114,250,253, 1, 27,253, 62,105,154,176,127,105, 31,107, 44,113, 20,
+ 51,232, 71, 65,141, 13, 85, 83,177,168, 43,108, 49,227,248,240,128,225,233, 57, 69, 85,114,114,120, 66,228, 96, 97, 27, 42,225,
+152, 91,152, 57,137, 43, 42,198,165, 97, 43,213,148,214,139,100,165,244,129, 28, 66, 43,206,143, 70,164,187,125,138,178, 68, 99,
+ 73,107, 24, 72,197,185, 49, 84, 86,178, 40, 29, 73, 97,200,114,183,220,211,122,113,152, 12,175,223, 26,135,184, 13,197,104,243,
+186, 3, 72,198,226, 99, 90, 91, 28,103, 11,164,177,107,199,188,218, 88,148,138,252,254, 92,250,125,165,146,106, 25,255, 43,133,
+ 32,118, 14,229, 64,139, 30, 8,131,117, 13,113, 30, 65,145, 99, 41,208,218,161, 98,137,234,102,116, 6,125, 6, 87,174,144,239,
+110,123,161,152,173,209,206,249,116, 55,157,160,211, 14, 58,237, 18,176,121, 56,105,112, 81,184,167,172, 89,170,218,145, 4,223,
+186,197,184,102,233, 80,171,202, 38, 60, 3, 37,126,234,238,191,247, 40,246,227,104, 43, 5, 38,172, 23, 63,254,248, 1,141,241,
+247,156,214,154, 2,129, 69,146, 36, 57,101, 99, 40,235, 25, 91,253,109, 22, 74, 81, 71, 49,196, 49,162,242,187,251, 40,210, 30,
+202,131, 36, 74, 82, 92, 43, 52, 13,163,223, 72,251, 73, 71,235,110, 50,141, 37,137,189,226,189,110, 84, 16, 57,175, 28, 79,214,
+134,144, 39, 97,151,108, 10,132, 63,216,107,213,238,134, 35,111, 89,214,173, 77,121, 61,162,123, 61, 45,205,173,136,122,132,105,
+237,218,225,174,181,213,185, 56, 66, 59, 75,236, 12, 89,147,250,162, 94, 55,129,215, 99, 86,128,155,229, 36, 55,208, 47,181, 66,
+ 56, 17, 4,222, 22,108, 3,118, 93,164,245, 12,202,233, 51,194,197,126, 44, 70, 91,172, 40,255, 45, 94,215,134,215,205,173,133,
+201,172,146, 49, 87, 59, 79,223,205, 75, 26,107, 80, 70,122,164,178,168,151,113,182, 46,252,220,154,166, 65,235, 40,236, 49, 66,
+ 44,158,183,139,172, 83,220, 90,250,219, 10,226, 32, 3, 2,178, 85, 72, 63,235,155, 93,137,166,159,254,102, 69,187, 71,112,107,
+228,176, 54, 54, 78, 10, 42,109,215, 48,132, 43, 98,143, 88,138,177,214,181,162, 50, 28,114, 37, 17, 64,212, 22,115,183,178,200,
+ 57,255, 39, 21,146, 56, 75, 56, 63, 57,103, 52, 26,145,166, 17,196,130,163,217,130,207,239, 95, 38,166,228,133,231,246,121,103,
+254,136, 79, 30, 60,224,240,160, 96, 54, 41,120,241,197,235,184,106,129, 45,102, 40,229,200,122, 25, 86, 57,202,106,225, 1, 25,
+166, 98, 58, 57, 69,200,156,119,222,186, 77,146, 41, 54,182, 98,156,105,124,120, 64,156, 80,215, 53,198, 25,148,214, 36, 90,210,
+ 84,130,211,227, 83,186, 27,219,232, 40,162,215,237,177,181,181,195,116,234,225, 3,127,240,111,254, 53,191,254, 55,127,133,255,
+227,135,239,162,133,226,108, 86,162, 30,157, 66, 18,243,245,203, 55,120,120,112,194,213,175,253, 18,229, 31,255, 1, 40,184,122,
+117,159, 8, 71,181, 24,243,207,254,197, 63,231, 87,127,234,235,124,114,243,135, 76,138, 9,155,221,136,147,121,137,181, 21,200,
+152,166, 49,184,133,227,222,131,199,212, 90, 82, 40, 69,227, 44,103,195, 51, 46,119,246,233,117, 7, 12, 23,227, 11,202,245, 11,
+187, 33, 39,159, 58, 69,138, 11, 59, 34,231,111, 16,225, 33, 54,202, 73, 79, 77,114, 14, 29,226, 21,173,173, 48,198,162,164, 70,
+107,127, 49,214,141,162, 14,171, 32,185,182, 66, 81,203,194,236, 87, 66,137,214,212,141,166,110,170,165, 16,198,143,189,228, 82,
+229,188,126, 83, 72,124,232,197,135,239,190,131,178,198, 83,206, 54, 55,113,103,142,197,116, 70,183, 59, 64,197, 29,172, 72, 49,
+166,102, 81,149, 28,157, 29,161,116,131,141, 46,179,213,191,142,173, 29,198,105,132,142,217,186,249, 2,253,189,203, 76, 39, 19,
+102, 69, 69,119, 99, 3,148,198, 84, 11, 31,168, 16,212,185, 82, 8,206,135, 35,172,180, 92,191,113,131,201,164,228,221,183,111,
+179, 40, 10,106,219, 97, 58, 26, 17,107,201,193,233, 9,117,217, 33, 73,182,233,247, 58,108,111,246,120,120,255, 17,166,242, 5,
+182, 44, 74,142, 79, 78,201,211,136, 60,221,230,124, 56,162,208, 29, 34,173, 57,159, 44,200,180,192,233, 16, 99, 28,249,200,210,
+122, 49, 65, 56, 67,214,233,145, 37, 9,163,201,156,173,173,109,142,143, 79,184,114,229, 38, 8, 24,157, 13, 89, 36, 49,253,141,
+126,152,166, 74,242,174,103,105, 47, 22, 11, 22,179, 57,194, 26,154, 98, 78,167,147,177, 88,228,156,207, 43,162,184, 67, 39, 51,
+ 84, 85,133,113, 48, 53,142, 74,101, 52,101,129, 74, 52,211,178,194, 74,197,162,106,232,198,158, 2,103,173, 67, 90,201,116, 52,
+165,108, 44,177, 82, 52,101, 67, 47, 73, 57,181,134,194, 42,226,170, 65, 78, 26,210,184, 32,146, 10,171, 21, 78, 69, 56, 25,225,
+156,183, 80,137,240,102,132, 37,110,187, 91,225, 81,187, 72,225,139, 33,126,210,216, 34,125,101,240,119, 91, 97, 1,131,116,194,
+ 23, 27,185, 54, 74,150, 2, 33,125,120,140,107, 12, 82, 58,210, 72, 16,101, 17,164,154, 56,145, 36,219, 93,116, 51, 67, 80,147,
+ 68,150,142,104,200, 19, 77,183,215,165,187,181,131,234,118, 17, 90,160, 92,141, 51, 46, 20,244, 12,153,118, 32,206, 32, 73, 65,
+106,172,169, 16,194,248, 75,213,130,107,108,187,125,198, 41, 16, 86, 32,140,192, 10,143,174,245, 97, 29,128, 10,251,126,240,201,
+112, 82,226,155,102,255,245, 47, 22, 21,167,103, 35,170,202,144,233,152,186,174,124, 62,187,214, 52, 78, 80, 11, 71, 35, 4, 42,
+246, 46,145, 90,107, 76,104,216,156,177, 72,237, 35,162,107, 99,201,226, 4,235, 68,184, 46,220, 18, 36,165,219, 3, 68,164,208,
+117, 8,233,210, 17, 81, 20,194, 94,214, 1, 90,136,149,165, 89,248,162, 43,164,255, 28,113, 44, 61, 34, 54,241, 8, 88,239,118,
+ 88,217, 91,125,231,110, 81,238,233,201,224,211,113,165, 98, 21,227,221, 82,232, 26, 67,154, 37,116,234, 28, 99, 12, 2,225, 29,
+ 30,130,149,147,234,201,209,121, 27, 7,173, 36,202,170,167, 8,152, 23,243,206,197,179, 35,194, 5, 79,141,222,219,189,192,178,
+150,185,167, 59,122,150, 54,204, 39,243, 49, 86,131, 28, 95,203,252,100,218, 56,139,180,222,178,186, 76,163,116,126,138,167,117,
+ 8,144, 0,177,204,186,125,114,159,189, 28,191,183, 39,223, 22,189, 41,197,133,221,182, 12, 99, 50,177,198,147, 93, 21,130, 11,
+ 25,107, 56, 28,202, 89,172,242,221,156,210, 38,196,179, 74,116, 43,172,176,110,233,107,124, 82, 76,237,214, 58,199,213,239,133,
+ 48, 83,231,130,181,115,101,169,192, 65,131,160,147,231,140,198, 67, 22,139, 5, 91,251, 57,229,204,209,219,216,161,147,119, 24,
+228,150,135,247, 63, 97,115,107,147, 78,190,205,155,175,223,101,111,107,159,243,179,115,178,184, 33,141, 35, 6,155, 61, 26,145,
+ 50, 91, 24,100,237,112,117,197,116, 60, 34, 79, 83,230,115, 75,222, 29, 32,132,135,129,224, 20, 69,227, 71,127, 89, 39, 35, 78,
+ 98,138,170,192,154,138, 72, 69, 36,121,135,219,183, 63,228,206,195, 3,126,235, 55,127,143,131,131, 17, 87, 46, 95,229,124, 56,
+228,206, 71, 31,241, 59,191,245,107,116,243,156, 98, 90,211, 80,115,116, 50,194, 41,193, 91,175,125,159, 23,191,244,203,124,225,
+ 11, 63,205,209,204, 82, 55, 53, 71,135,135,188,248,252,139, 28, 60,120,192,230,214, 46,215,158,255, 28, 14, 56,120,248,104,153,
+147,238, 79,118, 30, 44, 99,106,195,189,123,247, 48, 8, 58,131, 13,138,121,159,179,199,199, 36,233, 57,253,172,179,140, 72,109,
+127,194,171,139,240,105,155,218,133,155, 46, 92,132,194, 6,102,181, 8,168, 70, 11, 66,248,177,188,148, 18,101,195, 40, 73,121,
+ 27,145,148,146,186,150, 84, 33, 43, 64,174,173,118,116,139,146, 21,146, 40, 86,216,200, 67, 34,154,186,198,154, 6, 23, 8, 93,
+226,137,149,207,250, 74,160,156,207,120,251,245,215,168,207, 78,208,182,194, 57,131,194,224,234, 10, 41, 36, 81,146,163,163,132,
+162,156, 51, 47, 70,244,183,123,164, 27, 93,140,210,204, 75,131, 41, 43,156, 80, 40, 45, 72, 51, 77,220, 29,208, 79, 50,198, 71,
+ 7,156, 29, 29,177,115,253, 38, 74,107, 22,101,227,137, 92,117, 77,222,201,232,117, 59, 76, 38, 99,182,171,130,171,215,174,242,
+240,254, 1,195,209,144, 52,113,204,231, 5,179,233,148,126,175,203,206,206, 22, 90,251,168,205,189,157,109,142, 31, 31, 48, 30,
+158,145, 36, 9,206, 52,156, 12, 71,152,166, 98, 50,157, 17, 39, 49, 87,158,191,225,247,191,117,193,108, 81,161, 83, 77, 39,207,
+ 73, 58, 61,226, 88, 98, 77,205,249,240, 28,240, 34,184, 71,143, 15,217,217,222, 2, 33,216, 28,244, 73,210,152,170,170, 56, 31,
+157, 83,149, 11,182,119,183,169,155, 26,225, 26,210, 56,230,250,213,171, 62,212,101, 50, 70,154,134,189,173, 13, 14,143,142,249,
+ 76,109,249,137,113,193,172,134, 55,239,124,196,159,124,247,207,105,170,154,243,162,161,167, 5,113,172, 24, 79, 43, 18, 9,243,
+178,166, 19, 71, 62, 69,205,120, 53,180, 86,154,217, 98,129, 70,162,133, 64, 88, 67,170, 36,211,198,144, 26,137, 94, 88, 22,179,
+154, 56,154, 35,149, 67,170, 28, 37,148, 79, 13,108,237, 80,210,139,227,106, 83, 67,227,119,189,106, 73, 51,244,145,169, 86,216,
+112,184, 98, 25,219,105,140,245,169,109,194,163, 75,253,180,111,149,236,214,250,126,157, 54, 64,132,164, 38, 22,146,184, 73,145,
+253,140,180, 28,144,218, 5,145, 2, 73, 73,108, 23, 36, 90,120, 69,114, 27, 38,148,104,112,177,223, 3,235, 8,210, 28,155,102,
+216, 40,133, 56, 6, 29, 33,106,133,172,107,156,105,150,145,170,206, 47,168,189,232, 79,130, 78, 52, 86, 72,108,101,113,202,239,
+175, 17, 2, 29, 69,190, 25,146, 18, 43,220,114,253, 88, 89,203,112, 50,163, 44, 42,159,247,144,166, 68,177,230,244,188, 36,237,
+ 14,176, 50, 98, 54,157,208,233,116, 81, 81, 12, 74,161,243,148,210,250,102,199,195,121,116,112, 5, 8,207,179, 95, 71,161, 10,
+ 46, 52, 96,254,153,221,120, 69,118,184,103,149, 84, 24, 97, 86, 49,169,173,144, 45,212, 12,132,207, 2, 73, 35, 69,146,104, 79,
+113, 75, 18,178, 52, 33, 77, 98,226, 88, 47, 27, 74,177, 38,122, 19,107, 14, 26,255,133,178, 6,112, 89,153,171,215,131,198, 92,
+ 28,225, 76, 74,158,187,144,200, 39,168,170, 10,156, 37,106, 65, 55,114, 77,119,181, 30,183, 43,196, 50,125,174, 21,236,174,249,
+231, 46,194,181, 86, 88,185, 11,224,176,165, 71,168,157, 24,182, 69,187, 85, 68,182,188,142,181,134,245,211,162, 87,219,177,253,
+242,181, 88,130,226, 86, 83,106,107,124,180,121, 85, 87,104, 37,212, 42,228,254, 9,168, 76,123, 90, 18,161,237, 86, 75, 91,147,
+ 31,129,135, 71,239, 82,233, 46,151,202, 65,183,150,191, 45,158,254, 74,197, 90,172,106,216,135,105,169, 48, 18, 26, 9, 77, 72,
+120, 50,141,193, 57, 79, 3, 91, 1,239, 86, 63,178, 11,169,171,203,175,217, 46, 25,242, 45, 52,165,229,218, 11, 7, 29, 37,233,
+230,138, 69,100, 40, 22,115, 78, 38,146, 23,191,244, 89,174,239,237, 82, 13,239,211, 73,251, 76,102, 35,100,234,168, 22,167, 40,
+177, 1, 86, 35,101,130, 78, 35, 50,237,252, 94, 44, 50,216,186,160,151,118,217,251,202,215,137,187, 25,200,132,172, 51,160,110,
+ 12, 58, 82, 72,105,105,234, 5,182,158,240,209,135,183,201,123, 61,170,179, 35,138,170, 96, 49, 95,160, 68, 66,164, 12, 47,223,
+186, 73, 49, 58,231,225,189,251,188,240,249,175, 49,154, 20,212,229,156,217,120,204, 11,159,251, 60,223,251,193, 27, 52, 86,210,
+139,225,165, 91,151, 56, 58,155,242,224,193,135,116,122,191, 73,190,255,121,212,221, 63,163, 40, 27,238, 31,205,216,234,244, 40,
+103, 51, 70, 11,131,147,138, 65,183, 67,226, 20,234,100, 24, 20,163, 6,215,212, 32, 29,135,143,238, 48, 63, 63,226,242,102,151,
+ 15, 63,177,108, 14, 46,115,240,201, 61,174, 61,119,149, 36,206, 88,148, 69,184,200,219,107, 72,134, 61,229, 90, 28,110,155, 33,
+188, 34,206, 44,127,237,239,191, 48,126,111,213,153,120, 74,150,113, 62,172, 66, 26,183,162,203, 9,129,172,253,117,163,194,190,
+172,197,124,202, 80,176,147, 38, 66,164,150,186,246,214, 28, 63,190,180,107,135, 63, 63,113,178, 33,187,221,235, 42, 5,211,179,
+ 57,101,105,121,243,157,247,184,190,191, 69, 47,141,112, 77,205,240,228, 8,157, 38,244,227,136, 72,106, 30, 31, 30,112,118,126,
+159,179,131, 59, 60,255,153, 47,178,119, 85, 17, 77, 53,121,167, 67,158,165, 40,233,125,219,157, 60, 39,137, 53, 27,253,140,123,
+159, 28,241,248, 99,195,149,207,188, 76,186,113,137,209,249, 17,167, 39,247,121,238,214,115, 60,247,220,117, 62,190,243, 49,163,
+227, 19,118,247,174,112,237,202, 54,163,201,152, 36,219,192,170, 57, 91,187,151,232,166, 49,229, 98,134,146, 2,131,101,103,163,
+199, 43,175,124,131,127,255,239,254,144,241,112,136, 86,130,217,116,194,217,112,194, 71,143, 79,249,155,127,243,215,112,197,148,
+ 78,175, 79,229, 20, 78, 39, 68,189, 77,140,107,168,203,154,170,130, 36, 77,185,188,127,205, 11,222,164,161, 92,140,137,116,196,
+151, 62,255, 34,179,241, 4,179, 88,208,212, 21,202,149,228, 73,138,116, 21, 90, 24, 76, 89, 48,153, 25,100,148, 50,155, 47,168,
+ 22, 11,242, 88, 19,199,138,189,237, 30,103,231, 35,140,174, 81,166,225, 87,191,244, 34, 61,187,224, 15,255,252,117, 78,107,135,
+ 18,146, 69, 85,179,208,254,181, 50,198,191, 9, 41, 49,141,161,182,144, 16, 19, 43, 69, 85, 89, 76,164,160, 49,108, 72,193, 1,
+150,142,141,233,212,138,106,214,176,200,107,148,145,196,117,130,198, 33,165,239,206,193, 63, 27,132,240,169,103, 90, 27,112,218,
+103,145,203,214, 42, 38,151, 98, 55,156, 64, 58,133,177, 2, 21,172, 91, 46, 52, 32, 86, 72,156,136, 2, 18,217,235,122,148,146,
+232, 88,135,117,163,135,174,120,251, 88, 76,108,115,114,105,136, 92,131,116, 21, 52, 5,218,213, 68,194, 18,197, 18,165, 29, 50,
+137, 33,242, 25,235, 66, 39,136, 56,131, 40,245,197, 92, 71,160, 52, 40, 11,162,128,170,240, 10,119,106, 47, 6, 13,246, 48, 41,
+149,159, 54,134, 46,153,112,111, 88, 7,202,121,193,152, 85, 14,235, 12,174, 6, 21,101, 76, 22, 5,103,211,146,102, 54,195, 84,
+ 83,116, 71,251, 46, 95, 70, 24,145, 96,101, 68, 83, 65,222,239,227,164,166, 22, 22, 34, 9,181, 9,137,122,160,162,152,186,177,
+ 62,110, 54,201, 66,110,186, 89, 50,213,219,167,124, 43, 32,147, 50,120,215, 3,152, 76, 4,177,148, 53,214,175, 72, 85, 72,123,
+ 20,218, 31,208, 4, 36, 90,144,197,138, 60,141,124,252,106, 22,145, 38,146, 56,150,232, 72, 44,227,149,165,192, 51, 6,194,212,
+ 85,184,245,198, 80, 92,116,230,184,167,105,149, 74,107, 92, 18, 19, 91, 75,102,253,250, 51,214, 10,103,109, 16,133, 7,251,154,
+ 12,142, 7, 15,229,101, 25, 5, 36, 36,200,229,145,228, 2,179,195,139,136,213,242, 47, 94,175,101,109,226,222,211,157, 40,171,
+117, 2, 43,165,186, 8,110, 33,143,250, 93,125, 46,193,211,147, 0,133, 64, 11,129,150, 97,104, 35, 89,186,186, 90,123,120, 89,
+ 54,104,228,234, 4,208,126,144, 88,247,172, 45,171,166,127, 80,170,213,208,226,153,249,230, 23,235,247,218,200,189, 61,125,137,
+ 39,190,207, 64,124,243, 10,191,240,102,125,124,158, 81,114,181,159,185, 48,206,121,154,102,183,132,205, 44,119, 58,110, 13,138,
+226, 85,217, 18,205, 98,238,247,131, 89,234, 5, 9,181,129,205,141, 45,102,147, 49,123,219, 91,196, 17, 56, 97,121,252,232, 33,
+ 87, 47, 95,194,153,154,249,116,142, 18, 41,253,141, 14,149,107,144, 81,196,230,230, 46, 55,175,220,228,227,247, 63,228,224,248,
+ 17,189,141, 14,143, 15,142,137, 83,159,187,188, 40,230, 36,137, 36,137, 21,157, 60,102,115, 99,155,173,237,125, 94,126,241, 11,
+188,255,254, 91, 60,184,119, 7, 91,195,198,198, 22,101,105,121,237,181,215,184,254,252, 75, 56,106,174,221,184,202, 39,119,230,
+188,246,218,155,252,204,207,254, 12,223,249,139, 87, 3,255, 89, 49, 24,244, 25, 79, 75,186,121, 66,146, 36, 92,186,126, 19,247,
+189, 63, 99, 86, 44, 16,147, 41,151,119,246, 88, 44, 10,156,147,108,239,238, 50, 57,123, 76, 85, 54,104,225,177,185,142, 42,204,
+252, 28,147,209, 41,247,239,125,194,198, 70,159,114, 49, 35, 17,134,147,163, 35,164, 22,184,140,165, 15,212,173,150, 62, 23, 71,
+ 75, 79,210,228,254,178,188,251,240, 66,250, 67,154, 79,131,147,193,123,187, 62, 70,147, 33,136,163,221,123,181, 93, 59,210, 99,
+ 52,149,112,212,117, 74, 83,215,152, 48,126,122,230, 9,119,237,197, 63, 59,126,196,230,102,159, 56, 73,249,222, 95,188,206,139,
+207, 93,230,249,155, 87, 56, 57, 61,128,200, 49, 60, 59,165, 44, 26, 78, 78,142, 73,115, 13,141,224,116,188, 96,110, 30,241,220,
+ 11, 41, 11,215, 80, 76,199,116, 59, 25, 46, 73,188,240, 74,116, 80, 81, 74,222,223,228,241,163, 35,122,131, 35, 6,187,123,100,
+121, 78,119,176,137,177,160,227,136, 75,151,175,242,209, 71, 31,147,117, 55,248,204,103, 95,192, 57,193,201,201, 41,247,238,223,
+ 39, 18, 48,137, 52,189, 60,195, 57,201,233,104, 4, 42, 98,247,242, 21,190,249,211,223,228,238, 71, 31, 97, 77,195,254,213,107,
+140,230, 5,159,121,233,139, 92,189,126,131,242,252, 49,195,209,148,217, 98,193,254,165, 75,140, 39, 99,148,173,137,133,165,105,
+106,210, 44,163, 76, 98, 54, 55, 54, 81,113, 66,175,219, 37,206, 59,244, 55, 54,112, 88,198,163, 49, 27,155, 27,244, 92, 31,165,
+181,183,132, 69,154, 70, 10,202,178,166,113, 21, 91,219, 59,156,159,158, 98,154,146, 56,138,209,194, 5, 74,154,101, 60,158, 82,
+ 46,134,124,227,243, 47, 48,156,140,249,243, 55, 62,196,184,136,218,121, 17,211, 2, 75,207, 10, 10,235,200,252,178,216,191,246,
+198, 46,215,115, 74,174, 30,144,153,146, 20,182, 97,129, 36,170, 29,233,194, 98,147,134, 58,106,208,145,241,107, 19,113,241,186,
+ 82, 50,196, 89,138,214, 24,212, 74, 46,221, 18,148,229, 19, 74, 77,216, 13,107,164,181,254,192,103, 5, 66, 24,164,169,188,138,
+222, 42, 48, 6, 97, 5, 81,236,119,189,137, 90,233,136, 16, 9,177,130, 68, 57,180, 48,196,194, 32,155, 25,182,156, 35,109,233,
+ 69, 97, 58,242, 29,112,146, 32,162, 12,116, 2, 81,130,147,113,248,127,254,255, 47, 31,106,146,176,111,182, 8,219,128,173,150,
+ 7,140,229,197, 44, 21,166,170, 49, 38,236,232,157,163,177,198,143,196,157, 47,148,214, 58,238, 63,120,196,124, 81, 97, 76, 29,
+ 66, 63, 34,166,179, 25,121,167, 75,237, 44, 85, 85, 16, 7, 11,102, 99, 45, 73, 55,163, 16, 18, 33,108,152,102, 24,191,159,119,
+132,195,143, 92,227, 78,240, 68, 63, 41, 2, 7,190,117, 25,124, 74, 30,136,184, 24,213,173, 37,196,145, 15,235,201,179,196,147,
+220, 66,135,238,127,230,171, 8,238,191, 60,222, 89,112,177,194,112,225,249,225,148, 47,236, 81, 20, 97,147, 20, 44, 24,173,125,
+184,142,148,168,200,187, 75,214, 27, 10,132,244, 37,125,249, 60, 10, 12,128, 31,251,112,249,235,255,115,225, 16,176,242, 7, 45,
+113,233, 23,127,111, 61, 9, 85, 60,161,130,151,216, 37,184, 45, 88,194, 27,131,110, 71,212,254, 40,228,219,155, 22,118, 33,156,
+127,176,218,144, 79, 40,145,152,144,229, 43,165,239,186, 68, 40,166,173,138, 81,224,144, 46,156,220,228,186,167,221, 44,125,149,
+136,139,249, 31,180, 22,183,128,181, 81, 45,101,204, 10, 47,146, 89,126,102,177, 58, 44, 56,119, 33, 31,199, 61,137,168, 93,223,
+ 97, 8,129,179,142, 72, 38,204,138,134,249,116, 70,127, 67, 49,156, 85,168,120,131, 36, 77,184,124,105, 7, 45, 22,156,156, 60,
+ 34,210, 62,145,169,223, 25,208, 44, 28, 39,211, 49, 73,226, 79, 67, 91,131, 13,122,131, 77, 30, 31,158,114,116,118,196,233,217,
+ 57,147,201, 24, 99,231, 36,145, 64,201,134, 60, 73,201,226, 20,235, 26,230,211,115,102, 99,131,112, 49, 31,127,240,144,141,141,
+ 77, 46, 95,222,226,214,141,207,240,222,187,239,162,132,162,168,252, 62,243,210,254, 14,175,189,245, 22,184,136, 44,205,121,239,
+253,143,249,207,254,198, 47,121,213,169, 53, 68, 74,112,255,254, 67,138, 26,222,126,253, 53,110,223,190,205, 87, 94,249, 41,254,
+229, 63,255,175,169, 26, 67, 81, 87, 28, 28, 29,177,185,185,205,100, 50,231,243, 95,252, 10,135,247, 62,226,116,116, 68, 36, 64,
+ 57,131, 19, 77,216,231, 9, 26, 83,241,232,224,128,207, 93,187,206,233,209, 99,116, 22,129,181, 28, 29,159,208,123,110, 55,140,
+ 44, 27,164, 92, 9, 86,120,130, 37,248,164, 15,243,105, 97,164, 88,142,239,159, 42,242,206,121, 5,178,115,207, 72,115, 91, 27,
+ 95,133, 49,149, 12, 99, 83, 27,168, 95,118,105,133,252,241, 55,145,181, 13, 15,238,127,196,100, 58,226,234,245, 27,236,109,110,
+ 82,204,206,104,108,195,246,206,128,241,249, 1,105,210,101, 50,173,208, 58, 97,103,255, 26,183, 62,251, 50,121,111,143,162, 40,
+ 25,158, 28,162,149, 34, 77, 83,108,149, 99,123, 93,172,169, 17, 88,210,110,143,254,230, 54,211,241,132,209,241, 67, 58,137, 36,
+142, 98,118,119,247,176, 14,138,218,208, 56,152, 21, 5,143, 15,143,184,121,243, 57,162, 56, 98, 81, 46,184,113,243, 26,212, 13,
+143,239,223,163,223,237,146,119,187,108,237,238,115,114,126, 70, 85, 20,124,225, 11,159,231,235, 95,253, 10,206, 58,206,134, 67,
+ 70,211,130, 40,235, 50, 25, 77, 72,117,198, 98,122, 78, 99, 5, 15, 31, 63,102,103,208, 97,119,144, 99, 77, 73,132, 37,178, 18,
+ 87, 53,140,135, 6, 21,103,188,244,242, 75,164,157, 62,139,170, 34,235,166, 24,103, 25, 78,198,108,109,110,146,101, 25,211,201,
+148,218, 84,108,108,109,144,102, 61, 70,211, 57, 81,148,240,153, 23, 63,203,240,248,144,243,227, 3, 34,169,232,118,186, 94,189,
+109, 26,108, 53, 39,239, 68,124,249,179,207,241,193,135,159, 48,171, 12, 40,129, 54,150,210, 58,250, 90, 49,175,106, 58, 82, 1,
+ 13,206, 88,154,202, 44,139,185, 18,122, 73,130,235,201,136,185,169,152, 9,136, 13,184, 66,224, 74, 65,149, 55, 40,219,160, 27,
+ 25,196, 66,194,167,181, 33,131, 96,204,250,231, 85,171, 36, 15, 83, 36,215,170,149,195,117,100,140,193, 81, 19, 65,176, 72,130,
+182,254,192, 39,181,246, 29, 33, 50,248,154,157,223, 75,122, 74, 18, 42, 10, 32, 46, 9, 66, 59,132, 6, 37, 45,145, 73,176,105,
+234, 9,140,174,198,105, 13, 42, 65,168, 4,151,100, 56, 29, 35,227, 12, 17,165, 56,169,177, 23,185,113, 94,119,111,106,104, 42,
+ 47, 4,148,109,246,184,195, 26,135,107, 28,182,177,148, 85, 13, 50, 66, 73,141, 17,190,185,114, 8,111,253,138,115, 30, 60, 62,
+ 94, 90,213,108,240,175,235, 56,166, 26,142, 24, 12, 6, 52, 69,205, 98, 54, 35,207, 50,132,148, 20,174, 33, 73, 83,143,104,166,
+ 9,107, 50,191,243,174,154, 2,157, 38,160,148, 63, 56,216,112,159,173,177, 69, 60, 66,250, 34, 76, 69, 60, 25,225, 25, 36, 97,
+173, 40, 77, 73,129,142, 36,113,172, 73, 18,143,101, 77, 83,159,146, 22, 71, 62,165,173, 21, 67, 91,203, 19, 79,245, 53,212, 56,
+226,153,129, 94, 79,233,182,218,142, 61,210, 68, 54,246,207,129,200, 23,117, 65,136, 4,143, 60,181,142, 53,235,171,144, 34,104,
+ 9, 86,129, 83,255,145,106,249,197,231,222,122,244,229,210,253,176, 54,121, 88, 67,114, 95, 92, 45,200,101, 70,194,210,212, 23,
+174, 25,159, 54,104,208,214,218,101,134,247, 69, 26, 91,136, 41,116, 14, 39,109,240,222,217,144,124, 21,132, 21, 98,101, 99,243,
+234, 76, 95,220,109,216,159,138,181,244, 52,255,193,238,130,112,238,211,204,251,178,253,109,185,138,132, 93,158,224,196,147,160,
+210, 39, 3,102, 46,254,215,135, 60,248,111, 95,203,196,143,182, 11,131, 86, 62, 73,107,123,235, 18, 74, 73, 62,250,224, 29,226,
+ 4,170, 98,138,214,254,107,143,181,162,104,230,108,246,123, 84,101, 69,175,219, 67, 42,197,143, 94,125,149,162,178,100,249,192,
+239,254, 17, 68, 73,206, 27,111,189, 69,214,233,114,245,234, 53,164, 20,244,123, 57, 81,156,114,126,248, 0,173, 50,250,157, 93,
+ 48, 53, 31,126,240, 62,141, 43,217,216,236,114, 62,156,210,147,187, 76,230,115, 30, 63,126,200,193,193, 67,246,246,159,163,219,
+233,249,204,223, 52,163,223,235, 50, 25, 14,153,205,107,175, 59,176,130,141,243, 51,254,244,219,223,225,103,126,238,167, 49,206,
+171,123,203,186, 36,142, 61,128,101, 54,171,248,226,103,191,202, 31,253,219, 63,160, 90, 28,178,221,223, 96, 50,172,252,248, 91,
+ 8,156,240,222,200, 71, 7, 71,252,236,151,191,204,124, 58,164,116, 9,141,105,152,142, 11,210,106,227, 98,142,253, 51,110,179,
+245, 78,253, 73,167,195, 95, 70, 88,106, 19, 1,151,227,251, 11,162,145, 53, 43,221,167,172,154,214, 55, 49, 23,233,117, 23,178,
+129,113,214,122,139, 88, 53,231,209,163, 7,216,133,161,159,229, 92,218,221, 36,137, 42, 22,179, 83,186,105,194,217,217, 33,221,
+141, 75, 24, 17,243,252, 11,159,227,210,149,231, 57,159, 46,152, 21, 67, 14, 63,185,195,124, 54,101,115,176, 65,127, 48,160,215,
+235,178,179,187,139,107, 54,104,154,154,126,175,195, 78, 63,103,120,116,192,226, 44, 38,234,244,169, 85,140,211, 49,139,178, 98,
+231,242, 62, 95,253,122,206,209,225, 17, 74, 75, 62,249,228, 14, 31,223,249,136, 65,183, 75, 81, 54,244, 54, 54, 24, 77, 39, 24,
+235,216,142, 18,174, 93,185,194,157,251, 15,120,248,240, 33,253, 94,207, 11,158, 44, 62,184, 38,203, 56, 59, 57, 33, 78, 52, 58,
+ 78,152, 45, 22,148,243, 9,243,209, 49,229,102,135,157,126, 70, 30, 41,138,166, 36, 78, 18,175, 29,136, 34,102,211, 49, 78,106,
+178,110,135,198,150,244, 6, 61,148, 86, 62, 81,206, 57,180, 84,212, 69,197,209,193, 17,121,191,207,246,246, 14, 72,205,104, 52,
+198, 52,134,237,173, 29,250,157,196,223, 19,117, 67,156,229,126,252, 11,124,238,229, 23,217,252,211, 31,114,114,112, 70, 30, 71,
+ 84,166, 1, 36,165,146,216,162,162, 78, 52,169, 80,224,188,110, 70,167,241,146,189,174,148,198,214, 53,145, 51, 36, 74, 82, 89,
+ 75,109,161,174, 36,182, 22,212,166, 33,113, 13,206,233, 11,147,183, 86,192, 11, 96, 92,131,196, 71,142,218,176, 99, 20,214,199,
+144, 74,214,210, 2,241,250,141, 54,251,196, 52, 22,140, 66, 89,231,215, 64, 58,194, 9, 11,202,128,176,184,196, 65,211, 16, 89,
+ 73, 92, 75, 18, 37,145,202,249, 0,159, 52, 2,157,162, 19,141, 83, 37,182,169, 16, 10,164,140,128,144,228,165, 20,104,133, 83,
+222, 67,110,219,180, 68,231,112, 86,130,212,126,204,219, 62, 22,165, 31, 93, 75,169,252,253, 41, 28, 85, 83,179,168,141,143,232,
+149, 18,227,239,224, 0,218,137,169,157,224,209,209, 9,221,193, 54,135, 15,143, 41, 22, 5, 91, 27, 3, 63, 70, 15,140,114,172,
+193,154, 10,103, 35,116,172, 49,141, 37,202,115,132,109,252, 62, 61, 52,117, 50,138, 40,138, 41, 34,142, 16, 90, 97, 28,158, 91,
+ 31,156, 68,198,216, 96, 83,107,239,181, 53, 97, 42,226, 41,161,247, 82,232, 42, 61, 18, 54, 10, 41,124, 81,164, 67,162, 91,228,
+ 97, 77,193,167, 46, 37,203,140,118,255, 87,216,103,213,246, 31,147, 55,226, 46, 30, 0,132, 8,185,236,145,159, 70, 44,139,122,
+235, 4,108, 51,210,197,138,238,214, 30, 70, 90, 64,140,120,162,202,184, 31,223,204,124,154,152,239, 89,211, 76,231,158, 96,121,
+240,116,247,254,164, 32,112,125,178,224,214,232,157, 38,164,211, 53,141, 65, 87,141, 65,181,254, 98,185,202, 48, 23, 86, 32,164,
+241,234,101,235,133, 3,203,128, 23,107,195, 55, 78,240, 14,138,229,159,105, 71, 49, 82, 6,218, 81,123, 80,112,172,246,239,194,
+219, 78,158,252, 70,151,106,119, 39,158, 56, 9, 62, 1,192, 23,238,194, 8,230,226, 67, 95,114, 49,240,123, 53,146,201,210,140,
+225,135,119,216,232,105,170, 69,133, 82, 25, 89,127, 19,103, 29,253, 78,194,245,155, 87,153, 78,135, 60,126,248, 9, 14, 71, 85,
+ 22, 94,220,133,225,115,159,251, 28,143, 31, 61,162, 42, 75,108, 85,147, 72,159, 7,156,119, 58, 68,105, 7,161, 21,253,237,203,
+204,230, 51,230,181,193, 54,134,162,172,153, 77, 71, 84,101,197,238,118,159,199,143, 63, 97, 99, 99,128,115, 21, 59,187, 27, 76,
+167, 83,122,131, 13, 6, 91,219,124,255,135,223,227,234,141, 27, 28, 29,157,240,249,159,120,133,241,232, 46,105,150,241,225, 71,
+119,184,245,220, 45, 62,120,231, 45,138,178,164, 42,253,131,244,253, 15,111,243,252,231,239, 3, 63, 75,158,119,152, 79,103, 84,
+229,140, 69, 53,103, 56, 30, 49,154,206,217,249,210,231,216,189,244, 28,231,103, 83,204,188, 65,210,132,211,151,255,249, 91, 7,
+199,167,103,196, 89,202,230, 70, 31, 97, 22,212, 56,166,181, 31, 81,213,117,181, 2, 36,172, 93,106,226,153, 23,232, 95,109, 4,
+255, 36,101,233, 73,127,167, 88, 79,130, 16,235,211, 22, 46, 40, 76,151,211, 26,231,158,185, 6, 16,194,171, 93, 35,173,113, 13,
+ 40, 25,177,152, 45,188,128, 79,119,113,210,103, 1, 68, 81, 70, 36, 28,219, 66, 48,154, 47,120,254,179, 47,177,189,115,153,186,
+241,163,221, 56,246,167,226,195,195, 67, 78,143,142, 73,179,132,110, 64,172,110,108,108,176,185,177,193, 70,191,135,118, 13,143,
+ 30, 60, 96,255,242,140,221, 43,207, 97,117,202,227,179, 33, 50, 73,217,217,217, 69, 73,137,105,106,138,197,148, 52,209,116,179,
+132,249,108,206,193,227, 67, 58,105, 70, 81, 84, 40, 89, 48,159, 79,113,174, 33,141, 21, 31,222,185,199,205,155, 55,184,122,245,
+ 26,105,154,122,108,166,242, 2, 46,154,154,243,115,199,209,227, 9,135, 7,143,176,213,140,243, 3,248,204,141,203,100, 81, 68,
+ 89,150, 60,247,220, 45, 18, 4,102, 50,162,167, 99,166,227, 51,192,144, 37,154,222,181,203, 76, 39, 83, 14, 31, 31,210,237,245,
+217,236,245, 25,143, 39, 28,159,159, 18,105,205,195, 7, 15, 56, 62, 57, 35, 75, 19, 52,150,205, 94,134,116,134,126,127, 64,218,
+233,241,181,111,254, 52, 63,241,141,175,243,195,239,125,151,121,237,109, 97,165,177,100, 6, 42,231,232, 72,205,184,105,216, 20,
+146,133, 49,100, 82,133, 76, 8,223,101,106, 37,131,181, 76,210,246, 28,145,244,244,188,202,192,188,118,228, 13,164,181,161,169,
+ 42, 26,180,231, 85,104,237,141,107, 54,232,103, 2, 3, 29, 39, 49,182, 1,137,231, 93, 24,139,148, 22, 43,236,178,192,200,208,
+221, 75, 33,113,198,208,216,134,166, 22, 80,148,129,128,151, 16,197, 21,153,241, 57, 9,117,221,128,105,136,140,163,108, 26,166,
+ 69,137, 43,102,216,186, 36,235,196,108, 95,222, 97,103,103,203,187,129,172,163,158, 22, 84,205,196,211,215, 54, 59, 68,221, 30,
+116, 37, 34, 2, 17,123,150,130,107, 59,146,198,248,183,150,173, 97, 5, 77,237, 87, 23,126,207,107, 17,194, 80, 25,139,142, 3,
+ 84, 73,105, 44,214,231, 33,160, 80, 34,226,189,219, 31,210, 56,129,116,126, 50,163,164, 36,203,114, 76,211,208,233,246, 60,255,
+188,174,201,226, 24,211,212,204,138, 57,162,147, 35,147, 24, 81, 58,180, 80, 52,172,208,205,141,131, 88, 71, 88, 60, 11, 95,172,
+ 77,198, 76, 99,151,112, 49,214,152,250, 79,238,144,151, 58,152, 54,129, 77,249,130, 30,135, 32,146,184,141, 91,141,252,120,220,
+191,175, 86,208,151,165, 54, 76, 92, 20, 59,179, 54, 49, 20,226,137, 49,246,211, 65, 99,109, 17,116,106, 77, 48,169, 91,122,159,
+ 11, 63,103,121, 17, 96,182,238, 73, 95,195,208,138, 39, 28, 53,207,226,186,127,218,196,224,199,218,220,220,106,109,108,157,123,
+ 66, 54,207,133,110,124, 9,248,122,226,185,231, 1, 64,102,201,215,215, 85,101, 9, 7,222, 0,134,247, 30,184,150,222,230, 5,
+ 42, 94,240, 36, 77, 0,208,180,167, 32,105, 47, 72,239, 47,218,224,228, 82, 57,216,238, 94,124, 49,246, 31,171,132, 93,123, 64,
+139,149,240,205,173, 94,208, 86, 56,208, 42, 63,219, 17,188,104,125,201,110,245,199, 5, 23,131, 27, 46,238,127,130,208, 79, 71,
+ 44,230,115, 20,158,222, 52, 43, 42,250,121,159, 94,167,203, 64, 11, 18,165, 24,149, 37,243,233,132,126, 55,163,110, 74,146, 52,
+227,198,141,107,124,252,201, 93,164, 20, 76,134,231, 20, 69, 73,156,118,216,222,187, 74,154, 86,156, 28, 28,243,224,225, 67, 94,
+122,249, 37,146, 52, 70, 41, 73, 93,150, 76,134, 67,174, 93,189,201,241,129,100,120, 62,229,165,151, 62,203,123,239,189,133,165,
+ 98, 92,140,209, 58,163,187,209,227,209,225, 1, 47,190,240, 89, 38,147, 5, 87,175, 60, 71,146,116,216,191,188,207,189,187, 31,
+145,191,221,231,197,207,188,192,193,221, 59,228,121,202,217,124, 78, 89, 27,172, 53, 12,207,135, 52,139,138, 78,154,114, 58,153,
+ 32, 99,133,117, 13, 39,231, 39, 60, 58, 56, 32,202, 94, 33,206,122,236,238, 94,162, 25,142,225,228,204,143, 34,105, 16,141,165,
+211,219, 32, 78,124, 6,249,246,246, 22,103,247, 62,100, 94, 27, 68,150,251, 16,131,198,143,250,108,136,129,108, 49,173,235, 60,
+247,191, 10,235,248,175, 55,153, 90,243, 31,175, 17,230,214, 89,207,127,213,147,123, 20, 69,216,166,225,232,209, 99,222,126,253,
+ 61,226, 40, 99, 58, 29,113, 62, 62,163,223,189,132, 64, 97, 26,133,173, 36,131,205, 61,146, 62,236, 93,185, 70, 85, 90,154,106,
+ 78, 85,142,137, 35,199,181, 27,207,113,114,114,198, 15, 95,253, 62, 91,155, 3,175,216,142, 35,118,118,182,232,166, 25,155,155,
+ 91,244,250,125, 78, 78,135,156,205,224,149,157, 91,104,161,217,223,189,204,224,210,142, 7,176,204, 38, 92,187,114,153, 72, 43,
+ 6,121,202,254,246, 38,239,126,112,143, 52,233,146,165, 41,231, 39, 39,216,166, 98,123,103, 19, 37, 29, 91, 91, 27,196,113,206,
+193,193, 99,202,173, 45,122,221,156,188,147, 50,157, 77, 72, 84, 77,154, 40,122,217, 54,253, 94,204,195,251, 61,180, 4,170, 57,
+145,176,108,108,110,241,230, 59,111,179, 53, 47,217,239, 15, 80, 82,178,152,141,233,246, 7, 84,179, 17,206,198,212, 8,186, 89,
+ 70,189,209,227,228,248, 4, 37, 21,253,222, 96,169,214,159, 79,253,155,176, 57,166,156,147, 48,240,201, 99, 56,100,149,128,176,
+ 92,186,188,199,207,252,234,175,242,157,255,240,109,226, 72,135,112, 20,144,206,119,220, 37, 14, 19,107,230,133, 97, 16,197, 62,
+199,220, 58,104,204, 42,157,209,121,129, 93,229, 44,145,131, 60,210,212,214, 48,169, 29,105,101, 73, 42, 16,113,131, 81, 13, 66,
+ 58,255, 12, 10, 15, 90, 99, 26,148,210,152,186, 21,105,249,124,105, 39, 88, 10,207, 28, 38,172, 22, 87, 96, 42,165,212, 50,107,
+219,186,134,186,174,189,207, 89,107,106,165,104, 38, 49,115,165,136,172,197,149, 37,118, 58,167, 25,143,105, 70, 35,204, 98,140,
+116, 13, 73, 39,226,100,183, 75,245,153,231,217,220,218,162,169,107,206, 79, 78, 40,103, 51,159, 9,223,237,208,221,222,166,187,
+123,137,120, 99, 11,213,239, 33,178, 20,161,180,159, 90, 26,227, 71,239, 85,129,171,188, 98, 29, 2, 61, 13,137,210, 30, 18,175,
+163, 4,165, 98, 63,117,136, 34,140,169,145, 82,161, 85,204,163, 71,135,156,158,143,232, 14,182, 25,158,143,160,241,207,237, 60,
+239,112,116,124,204,222,222, 37, 30, 62,120, 72, 28,105, 22,243, 57, 81,154, 49, 91,204,217,220,223,243,133,174,165, 58,138, 80,
+ 80,132,247,169,171, 72, 99,132,223,167, 27,227, 2,198,219,239,109,133,116, 75,209,107, 75,195,123,178,155,108, 9,163, 42,164,
+ 46,250,188,116, 69, 20,251, 48,161, 54, 97,172,101,197,171,144, 13,208,142, 80,172, 93, 89,188,158,181,144,118,159, 18, 40,182,
+158, 57,225,214,187, 91, 21,162, 73,173, 92,139,181,118, 97,133, 19,194,103,108,224, 6, 60,107, 52,176, 62,130, 23, 60,179, 65,
+121,178,144,255,216, 26,126, 97,159,206, 5,145,241, 69,189, 88,120, 22, 6, 59,230, 42,176, 70,248, 53,120, 88, 43,121,188,186,
+127,141,106, 99,209,117,221, 96,140, 90, 27,151,216, 0,135,183, 33,134,117,181, 23,145,225,102, 90,118,227,235, 24,206, 39, 50,
+215,219,192,251,245,177,193,122,152,189,146,161,195, 95, 55,217, 47,145,162,110,169,116,111, 73, 57,171, 29,188, 11,167,241,149,
+ 1,114, 61, 20,246, 89, 3, 99, 33,124,151,208,212,158,168, 52, 30, 85,244,246,188,210, 51,239,244,152,207,231,228,123, 9,194,
+ 24,122,157,174, 39, 57, 41,137, 49, 6, 29,105,198,147, 17,231,195,115,110, 92,191, 78, 30,199,140,134, 67, 78,207,199, 20,139,
+ 5,121,167,131, 49,135,212,101,197,116, 52, 38,142, 54, 25,143, 71,212,101,193,102,191, 79, 93,148,140,199, 5, 95,254,210, 87,
+120,251,173,215,233,246,186,244, 55, 59, 32, 35, 30, 62, 58,231,254,251, 31,145,100, 17, 91,189, 30,199,199, 67, 94,249,230,207,
+211, 52,142,247,111,127,192, 55,191,254,101,162,110,143, 94, 18, 49, 28,141,168, 5, 20, 65,163,105,157,227,236,236, 12,225, 32,
+138, 34, 63, 90,108, 74,142,142, 15, 80, 58,103, 52,153, 80,154,134,193,214,128,225,105, 68,199, 36,104, 21,148,239,194, 43,108,
+139, 69,193,201,241, 25, 81,164, 48,206,210,219, 28,176, 37, 51, 30, 79, 74,166,211,169,215,244,200, 39, 20,158, 75,188,204,255,
+127,255,121,194, 22,250,148,111,243,153,133,253,201, 27,206, 58,166,147, 49,111,189,241, 22,243, 89,197, 98, 94,210,235,117,216,
+219,217, 68,106,193,100, 58, 67, 52, 18,165,114,202,218,145,247,251, 52,141,225,248,248,152,210, 52, 68, 73, 77,150, 71,232,164,
+203,139, 47,127,142,243,225,144,183,223,120,141,205,126, 23,209, 73,121,120,255, 30, 89,156,114,124,116,198,141, 23, 94, 98,251,
+202,103,232,109,236,114,255,112, 68, 20,151, 36,177,162,172, 23, 92,185,118,149,180,147, 51, 61, 59, 13, 19, 2,127,163,166,105,
+ 70,180,155, 81, 22, 5,157,110, 23,211, 44,152,207,167, 72, 12, 82,150, 94,251,209,235,241,248,209, 3,138, 98,202,139,159,253,
+ 12, 91,253, 28,209,204,152,143, 70, 44,138,138,141,222, 6,238,242, 30, 90, 72,178, 72, 48, 29, 14, 33,138,249,226,151, 95, 97,
+119,107,128, 86, 2, 83,150,152,166,130,166,164, 42,231,152, 38,246,127, 95, 85,178,189,217,103,107,208,231,224,241, 33,101, 49,
+ 39, 75, 99,166,179, 25,166,170,188, 3,193, 25,146, 36, 70, 75, 65, 93,206, 56,126, 60,100,107,111,143, 81,189,192, 22, 99,250,
+ 27, 27,220,188,126,133,111,124,245, 39,120,253,222, 1,139,186,102, 32, 19,166,182,194, 58,199, 68,212, 36,214, 81,133,135,110,
+131,207,158, 55,198, 19,232, 26,107,209, 82, 82, 10,207, 8, 23,206, 18, 43, 77,209, 52,140,139,154,222, 2,108, 44,105,116,140,
+144,208, 24,185,180,158,181,235,193, 54,120,166, 69, 74,138,128,178,118,214,250,142, 87,201, 37,162,212,218, 21,171,220, 52, 53,
+166,153,211,148, 37,206, 26, 79,158,195, 49,179,150,217,104, 76,125, 52,161, 30, 78,169,198, 83,220,124, 78,236, 12,145,176,164,
+169, 96, 99, 51,194, 30, 75,212,217, 67, 78,251, 3, 76, 99, 40,231, 11, 98,169, 73,163,152, 70,103, 44,210, 7,156,228, 29,162,
+141, 45,242,221,109,242,173, 45,146, 94, 7,221,233, 64,164, 17,174,193, 84, 5,214, 6,255,180,142,130,198, 32,116,205,149, 35,
+142, 83,207, 79,211, 49, 14,207,237, 23, 8,234, 69,197,189, 59,159, 96, 67, 72,213,232,240,156,249,120, 74,154,102, 88,103,137,
+226, 4, 99,253, 3, 63,137,227, 0,194,242,118,208, 78,191, 79,221,142,113,195,189, 38,149,164,105, 26, 47,154,148, 42,248,161,
+ 45, 24, 71,211,248,169,133, 31,189,235, 0, 9,147, 33, 93,243, 98,103, 44,150, 98, 46,175,125,104,209,178,177,110, 59,116, 77,
+164,189, 40, 78,201,150,137, 18,200,114,174, 29, 47,251,151, 82, 60,235,192,143,123,102, 19,192,143, 41,240, 66, 8,159,212, 40,
+236,234,247, 60,248, 98,201, 96,247,211,100,241,169,253, 66, 59,206, 23,252,120,248,204,179,166,143, 79, 47, 48,215, 82, 47,215,
+ 58,245, 11, 19,137, 39,186,114,156, 11, 65, 53, 62, 37,207,186, 96,235,172, 13,101, 89, 82, 85,134,186,105,168,235, 6, 93,213,
+ 30,180, 64,128,207,172,119,215, 74,136, 37, 81,110,245, 13,177,242, 3,139, 85,113,111,199,246,170, 45,224,178, 45,254,114,217,
+197,175,211,231,228, 90,108,222,122, 55,189,250,161, 60, 61, 18, 89,122,253,172,187,160, 80, 20,235,136, 90,231,150, 54, 44, 17,
+130, 25, 86, 22,130,134, 89, 49, 37,221,212,140,138,134,233, 28,146, 40, 65,201,148,211,225,132,198, 53,136, 72,208,217,216, 12,
+ 99, 59, 65, 83,149, 60,126,116,198,205,235, 55,176,174, 97, 81, 45,168,108, 77,217,148,220,189,243, 33,157,222, 22,221, 88,179,
+187,183, 71,109,193,138,152, 89, 97,249,204,173,207,128, 41,153, 14, 79,201,122, 17,175,189,249, 42, 89,156,162,147, 20, 39, 52,
+239,191,119,155,189,205,109, 94,249,210, 23,248,236, 23, 62,207,255,243,255,250,127,231,231,127,250, 23, 40,203, 25,184,154,235,
+151,247,249,179, 63,249, 22,131, 75,251,252,222,239,253, 54, 78, 41,156,105,188,226,213,121,223,103,156,104,206, 71, 99, 68,156,
+251,192,150,208, 41, 77,139,154,186, 42, 73,243,156,253, 65,202,105,172, 25,107,127, 49, 72,106,111,203, 80, 17,210, 57, 78,142,
+ 30,162,116, 8,144, 80, 17,163,197, 25,187, 91, 59,212,118, 14, 74, 34,131, 51,225,162,246,245,233,155,237,211,119,232, 65,228,
+184,126,131,173,135, 1, 5,160,197,250,190,168,101,253,171,214,230, 22, 20,182, 74, 11,143, 83, 77, 34, 34,173,151, 93,141,183,
+164,132, 45,156, 16,254,215, 1,217, 58, 58,122,196,191,250,103,255, 15, 54, 58,155,228,221, 28, 65, 67, 81, 84,236,110,238,115,
+ 94, 54, 76, 23, 99, 34, 37,216, 76,186, 8, 33, 57, 59,122, 64, 83, 7, 10, 87, 39, 67,187, 62,105, 63,101,107,179,207, 79,126,
+243,155, 36,121,135,199, 15, 31,179,185,179,237, 19,208, 74,131,213,154, 91, 95,253, 38, 55,111,220,162, 56, 27,115,244,232, 33,
+166,154, 18, 13,186, 84, 83,199,248,228,140,238,214, 22,221,205, 75,222, 91,111, 45,211,201,152,110,167,203,116, 50,162,169, 22,
+ 12, 71,103, 60,126,252,136, 78,167,195,245,235,215,217,238,119,185,121,181,135,142, 4, 81, 26, 83, 86, 21,103,199, 39, 92,218,
+223,102, 99,163,135,169, 74, 68,221,208,177, 13,143, 70, 67, 14,199, 19,242, 52,229,198,238, 46, 90,123, 59, 87, 89,150,100, 27,
+ 3,164,210, 44, 22, 11,198, 69, 69,191,219, 69,162, 40,231, 53,186, 23,133,135,169, 33, 75, 37,231,167, 67,164,204,185,190,191,
+139,180,142,106,190,240,227,211, 72, 82,215, 53,189, 60,166,104,230,184,102,142, 35, 66, 19, 83,205,103,228,177,226, 55,126,229,
+103,121,243,163,143,121,253,221, 59,204,155,146, 26,111,133, 45, 42,152,162, 57,179,134, 65,164,160,110, 16, 66,178,192,162, 35,
+137,171, 33,113,146,153,115,204,241, 88,225, 28,136,132,163, 40, 97, 54, 83, 36,137,194,197,198,211,204,140, 65, 59,208, 2,164,
+112, 72,103,144, 78,130,177, 56,209, 96,141, 8,170,112,233, 31,210,182,241,250, 12,169,124, 66,154, 5,179,124, 70,249,189,105,
+211, 24,154,197,130,114, 52, 97,122,114,194,228,116,200,252,124, 66, 61,171,113,141, 64, 33, 72,132, 32,195,146, 56, 75, 37,160,
+ 25, 87,212,155, 2,230, 53,139,238, 25, 66, 7,114, 93,156, 82, 56,137, 54, 49,206, 65, 93, 53,160, 20, 38,150,200,110,138,238,
+229,116, 46, 95,161,179,127,153,205,173, 1, 89, 39, 69,104, 65,156,229,225,235,212, 96,189, 56,185,118,142,134,208,241,106, 63,
+ 93,240,170,125,197,221,187,247, 40,107,160, 19, 33,148,196,212, 37,197, 98,198,214,206, 22,211,249,130,110, 39, 99, 49,157,160,
+165,160, 44,203,165,136, 42,221,200,137,178,132, 58,132,225,248, 36, 59,175, 79,104,234, 18, 39, 53, 78,121, 82,167,176,198, 39,
+217,153,136,218, 52,136,198, 55, 89, 42, 52, 74,222, 31, 93, 47,189,245, 82, 58,148, 0, 84, 32,198, 41, 69,172, 34,226, 72,134,
+ 98,238, 59,244, 54, 78, 85, 4,182,187, 12, 28, 10,175,199, 90, 5,247, 32, 86,228,184, 37, 47,176,197,183, 94,104,225,196, 74,
+ 56,189,156,232,186, 37,183,100,249,220,106,169,132, 75, 55,149, 67,216,246,179,123, 71,129, 13, 30,138, 11,246,115,119, 17,126,
+243,172,117,223,167, 30, 46,158, 60, 28, 56,177,202, 56, 17,225,123, 89, 87,143, 11,183, 22,158, 33,150, 99,121,159,200,215, 96,
+141,164, 9,126,209,198, 88,234,186,161,168, 12,101,109,168,106,235, 69,158,101,213, 32,149, 88,141,223,215, 5, 14, 98, 13,167,
+ 23,186,112, 88, 21, 83,183, 86,212,101,136, 30,212,203,152,195,192,213, 13, 85, 87, 46, 19,112,218,206,126, 37,162, 91,177,157,
+151, 92,165,229, 79, 84,240,244, 94, 67, 62,131, 96,183, 44,240,171, 40,229,229,235, 32, 3, 38,180,155,166,161, 51,133, 40,137,
+137,103, 53,157, 52,163,219,233,146,208, 80, 53,134,241,116,206,230,246, 37,134,103, 71,116, 98,197,108, 92,209, 73, 59, 8, 20,
+179,233, 57, 39,103, 39,220,184,121, 19, 35, 20, 90,231,220,249,248, 46,159,251,194,151,153, 55, 13,198,249, 2,179,181,187, 79,
+213, 56,108, 85,113,122,118,138,144,150,126, 63,103,179,183,205,227,195, 71,196,249, 54,207,221,186, 78, 47,206,185,253,193,123,
+188,123,251, 3,126,250,149,111,242,218,155, 63,228,171, 63,249, 83,124,120,239, 35,186,105, 78,167,211, 35,214, 17,113,146, 82,
+ 27, 11, 74,162, 26,159,116, 36,133, 96, 62,159, 17, 37, 26,161,162, 48,253, 0,173, 35,156, 19, 52,101,197,233,233, 25,145,107,
+216,236,245, 56, 24, 77,188, 14,194,129, 16,138, 74, 42, 68, 99,168,235, 57, 8,135,214,154,227,163, 49,103,195, 33, 73,218,103,
+115,167, 71, 99, 10, 15,118,129,255,225,166,142,139,231,179,139,197, 93,132,140,224,245,132,182, 96,213,104,109,109,173, 32,170,
+ 45,234,137, 82, 36,113, 76,146, 36, 68, 1, 49,185,124, 8,172,188, 55, 97,125,227,104,102, 83,134,199,135, 28, 31, 28,113,227,
+234, 85,122,221, 28, 44, 84, 85,141, 84,154, 94,191,207,104, 60,228,116, 56,102,171,223, 33,150,142, 98,177, 0,169, 41,230, 17,
+231,167, 39,164,221,156,188,211, 71, 38, 29, 94,120,249,139,252,202,175,253,118,176,123,157,113,112,239, 1, 86,194,112, 60,163,
+123,114, 74, 63,138, 16, 52, 76,199, 19,178,216,122,145,105,153, 83, 78, 20,105,127,131,166, 54,164,131, 62, 59,253, 62,213,120,
+ 76,175,147,208, 84, 5,219, 91, 27,140, 70, 67, 78,207, 70,108,110,239,211,137,107,164,242, 9, 83, 69, 9,113,146,251,125,105,
+146, 80, 84, 13, 89,183, 67,108, 28,162,174,233,118, 58,124,124,124,138,149,154,178,113, 72, 87,163,180,239,148,202, 98, 65,183,
+215,243,246, 29,173,208, 81,140, 48, 80,153,154, 69, 93,161, 83, 15, 76,217,216,217, 36,205, 99, 78,207,134, 84,197,140,231,111,
+ 92,227,242,254, 21,166, 85,193,108, 54,225,248,225, 67,202,178, 36, 78, 83, 36,144,103, 49,166,105, 80,218,145,198, 49, 87, 47,
+237,242,159,252,218,223,224,133, 27, 31,240,167,175,190,193,189,195, 19,132,118, 52, 53,156,227, 21,212,113, 28, 99, 10, 71, 55,
+ 86,212,162,193, 56,239, 11,142,129, 72, 41, 10,103,105, 2, 42, 85, 57, 63, 22,158,206, 28, 89,218,160, 50,137, 80, 2, 39, 29,
+ 85,227,173, 95, 82,123, 63,177, 31, 81, 46,151,211, 30, 45,107, 27, 84,152,208,217, 0,121,241,246, 55,141, 49, 53,214,249, 67,
+161, 78,123,100, 34,102, 90, 11,106, 59,167,113, 49,184,132, 56,113,244,186, 29,226,164,131,148, 26,211, 52,184, 98,129,173,230,
+148,245, 2, 99,107,202, 97,205,180,170,201,114, 67,148, 4,142,188, 40,136,147, 4, 33, 74, 34, 33,201,117, 76, 55,143, 72,148,
+198, 24,193,238, 96,155,189,235, 55, 73,247,118,200, 58, 25, 66, 11, 42, 83,249,107, 92,233,160, 55,208,212,149, 89, 50,194,189,
+ 34,188, 9,207, 96,205,120, 56,229,224,248,148, 56,239,162,123,221, 37,196, 72, 71,154,188,211,165,156, 79,201,211,148,225,201,
+ 49, 82, 64,217, 52, 24, 7, 58, 73,200,186, 29, 84, 20, 65,211, 98,119,252,195, 82, 40, 29,236,174, 62,176,196,135, 52,249,206,
+182, 17,146,198, 72, 68,227,191, 71,237, 2, 72,202, 58,207,138,112,118,109,212,237,237,203,126,228, 30, 17, 71, 49, 73, 36,194,
+254,124, 5,248, 89,165, 51,202,101, 67,232,195,184,220,114,237,235,214,129, 47,226, 73, 67,237,133,205,237, 19,138,120,177,246,
+177,114, 53,210, 94, 51, 79, 9,111,129, 95, 29, 11, 90, 38,128,120,106,161,189,110, 50,255,255,249, 31,233, 4,110, 61,178, 92,
+ 56,158, 9,128, 95,219,221,183, 49,213, 34, 76,173, 77, 99, 48, 56,234,218, 80, 53, 13, 85,221, 80,215,190, 83,183,214,160,203,
+198,162,108,235, 83, 95, 47,186,171,113,187, 88, 31,183,179,190,223, 92,219,175,135,194, 93,183, 93,248,178,168,203,149, 79, 93,
+172,198, 24,106, 45, 27,253,162, 0, 97, 21,207,249, 36,166,207,127, 93,173,119, 84, 92, 76, 99, 91, 83,226,183, 30, 74,183,214,
+193, 75, 9, 89,146,248, 27, 44, 73,161, 42,137,149, 64, 9,199,253,251,159,176,255,194, 46, 78, 58,158,219,191,194, 71,119, 63,
+ 6, 98,132, 86,108,239,108,114,255,225, 9, 89, 83,177,191,191,207,222,165, 61, 38,147, 9,123,187,123,228,221, 77,116,220,225,
+225,227,135,220,188,114,137,199,199,231,148,243, 41, 87,174, 94,103,120,126, 66,181, 88,176,168, 26,166,211, 41,199,135,199, 12,
+186, 39,116,122, 29,246, 46, 93,230,241,227, 7,116, 7,125,162, 88,179,127,249, 26,239,125,124,155,211,225, 57,223,253,222,159,
+177,119,229, 42,121,183,203,116, 60, 99,111,239, 18, 81, 20, 81, 91, 75, 26,107,108, 8,175, 17, 66,146,103, 41,163,243,211,149,
+215,213, 89,172,245,164,170,197,108, 78, 83,123,202,208,108,182,160, 40, 42,154,160,172, 21, 50, 80,183,108, 21,110, 66,111,221,
+ 25,141,103, 52,141, 37, 75,115,178, 44, 97, 60, 41, 46,236,119,254, 99,122, 53,219, 98,173,149, 34,142,162,176, 99,211, 23, 10,
+187,146, 42, 68, 52,134,130,175, 5,177, 10, 10,218, 36, 33,138, 19,148, 86,107, 26, 10, 95,200, 5, 62,249,175,156, 78,248,151,
+255,252, 95,112,237,250,117, 62,254,240, 14,111,188,241, 35,190,248,249,151,185,118,101, 63,216,184,198, 76,199, 99,164,138,152,
+ 76,198,116,179, 20, 99, 42,178, 52,166,168, 74, 36, 6,219, 72, 70,103, 21,143, 31,159, 48,173, 12,191,240, 43,191,198,214,238,
+ 37,206, 71, 19, 22,198, 49,109, 42,138,233,148,108,146,112,119, 58,101,103,119, 27,155, 72, 22,231, 11,202,137,196,106, 75, 53,
+143, 49,182,162, 49, 5,147,249,130,230, 0,118,118,119,104, 74,195,201,241, 49,121,154, 16, 73,193,238, 55,190,193,131,135, 7,
+ 28, 28,157,178,211,237, 6,123,169,161,110,106,108,227, 72,211, 20,172, 35,141, 83,154,198,162, 54, 4,103, 71, 39, 84, 77, 67,
+150,117, 88, 44, 10,191, 82,210,130, 88,121, 49,154,146, 80,204,167, 68,113,140,116,254,247, 85, 18,145,200, 4,131,165, 9,226,
+179,218, 24, 68,214, 33,237, 84, 20,211, 57,179,233, 24, 25,165, 36,177, 66,233, 30, 59,131,151,136, 36,204,166, 35,138,249,156,
+249,172,100,111,127,131, 52,239, 82, 25,203,198,214, 54, 63,243,213,175,176,191,177,201,115,251,251,188,243,209, 29,126,244,238,
+ 7, 28, 12,199, 52, 66,114, 62, 47, 80,101, 77,220, 30,178,133, 90, 58,104, 44, 22,225,132,199, 39, 24,139,210, 17,166, 49, 62,
+202,184,177, 20,243,138,184,227,208, 74,120, 55, 85, 99, 64,121, 69,252,114,173,219,122,141,195,168,210,227,224,205,154,168,201,
+143,246,173,243,169, 87, 62,153, 55,246, 73,108,202,145,111,108,147,230,125,118,247, 43,234,217,130,197,120,138,182,138, 60,235,
+161,146,132,193,230, 38,105, 28, 17,107,135,107, 74,220,124,134,153, 77,208,210, 97, 77, 65,158,199,104, 29, 17,197, 9, 73,214,
+ 65, 71,130, 44,142,176,101,137, 4,202,186, 36, 29,116,216,187,118,133,120,187,139,205,124,128,140,144,130, 40,242, 2, 72,130,
+ 58,222, 6, 52,108, 59,150, 22, 64, 93, 87,196,113,194,108, 94,112,239,225, 33, 34, 74,137,210,156, 94,127,147,251,159,124, 66,
+221, 24,146, 36, 37, 73, 18, 48,141, 79,248,115,190,123, 42,234, 5, 66, 43,116,154,146,182,233,131, 33, 40,169,157,178, 42,165,
+252,179, 59,136,219,214, 15,225,198, 24,170, 58,236,216,173,165, 49,106, 57, 90,174, 27,191,207,109,167,117,126, 45, 18,138,120,
+240,159,199,177,159,246,232,245,136,213,240,113, 23,158,223, 75, 90,160,193,218, 16,222, 19,120, 21,159,246,236,105,167,198, 23,
+167,133,173, 35,107,117,224,147, 79,137,118, 87,211,222,118, 50,188,194,197,174,125,172,112, 79,215,221,191,134, 54,232,194,251,
+238,175,246,137,150,202,125, 9, 90,203,112,102,241, 76, 1,107,188,158,170,118,150,170,246,194, 56,143,216,246,207, 9, 39, 28,
+186,110, 12, 54,164,252,248, 83,147, 11,105,108,107,251, 3,187,150,143,190, 38, 96, 82,172,197,174,178, 18,206,181,187,120,191,
+ 95,105, 59, 51,123,225,207, 10,231,158,218, 77,136,139,166,245,181,221,234,197, 9,194,147,211,131, 85,130,147,135,227, 8,225,
+150,120,114, 63,118,243, 95,119,222,233,114,229,242, 62,143, 30,222,227,234,206, 54,135,231,231,104, 45,217,216,232, 82, 53, 5,
+221, 94,151,195,131,199, 28, 29,159,242,171,191,240,211,220,126,239, 29,172,115,116, 54,123, 62,222, 51, 74,249,139,239,255, 57,
+253, 65,159, 91,159,121, 25, 21, 37,108,110,111, 49, 28,141, 57, 61,122,196,205, 43,215,121,227,157, 15,121,241,249,231,249,139,
+247,223, 99,103,107,131, 52,203,105,202,130, 47,190,252, 18, 56,120,248,248,128, 31,188,246, 35,110, 61,247, 28,127,241,195,215,
+ 25,143, 70,140,171,134,203,123,151,184,121,235, 57,190,255,250,235, 84,101,197,251,183,111, 51,155,205,249,194,151,190,204,217,
+104,136, 20,146,178,172,125,216,129, 16, 52,214,114,255,193,125,222,122,231, 13,127,138,199,123,235,133,107, 72,147,152,186, 42,
+153, 78,231, 44,230,133,255,115,214,195,120,164,240, 2, 28,143,250,130, 56,210,204,139,146,147,211,115,162, 56,241,167, 87,233,
+ 99, 10, 89, 63, 81,254, 71, 42,234, 98,169,203,144,203,124,224, 40,210,196,137, 63,213,235,200, 23,247,245,162,190,126,186,111,
+179,181,147, 36, 37,138, 34,148,246,217,198,237, 3, 81, 58,239,206,168,202,130,239,126,251, 91, 60,122,248,136, 76, 71,124,254,
+115,159,227,228,228,136,195,163, 67,146, 72,113,237,234, 85,146, 52,229,244,244, 20, 83,212, 52, 70,144,229, 61, 30,221,251,144,
+ 27,215,246, 73, 34, 73, 81, 22, 84, 69, 77, 81, 41,140,147,148,243,146, 78, 18, 51, 30,158, 97,140,161,174, 11,146, 78,202,157,
+ 15,222,231, 82,183,143,114, 27,140,243,136, 44, 79,200,210,148,106, 94, 48, 77, 4, 81,167,131, 22,146,133,177, 24,225,175, 67,
+173, 4,181,173,105,202,130,209,249, 57, 73,156,176,177,153,208,205, 50,132, 51,124,120,251, 54, 55,246,183,217,216,204, 81, 1,
+ 78, 98,170,154, 98, 62, 71, 71,146, 52, 75, 65, 43,250, 59, 91, 60, 28, 78, 88,204, 23, 44,230, 37, 39,103,103, 36, 91, 57,177,
+138,168, 49, 88,167,168,107,203, 98, 33, 24, 12, 6, 76,166, 37, 82, 40,132,210,116,250,126, 18,100,173, 35,235,118, 61,114,210,
+ 84,152,178, 68, 1, 58,150,204,102, 83,166,139, 25,187,253, 1,198, 88,180, 78,200,114, 69, 89, 46, 56, 57, 27,114,115,123,143,
+ 94,154,115,118,124,202,246,246, 0,201,117, 18,237,115,223, 95,124,238, 22,127,246,198, 27,220, 63, 58,161,168,106,206, 15, 79,
+ 72,240,202,239,174,138,112, 77,133,138, 21,182,105,136,165, 38,106,154,144,228,231,119,173, 6, 79, 37, 91, 20,142,184, 48,196,
+177, 37,210, 30,186,226, 66,129,145,194,210, 88,139,116, 45,142, 52, 12, 95,173, 89, 61, 23, 16,254,123, 22,248,223,119, 96, 76,
+229, 83,254,100,179, 18, 37, 73, 48, 74, 32, 59, 41,145,112, 80, 26, 74, 81,250,207, 93,140,105, 68,202, 70,222,163,211,223, 36,
+222,219, 65, 41, 73,172, 0, 83,147, 36, 26,219, 24,210, 44,195, 57, 80,229,130,178, 88, 80,105, 16, 90,146, 95,218, 97,231,234,
+ 62,186,155, 65, 2, 66, 25,132, 86,129, 95,166, 16, 45,213,204, 65,211,184,150, 12,186, 36,143, 73, 9,117, 89,112,255,222, 17,
+139,202, 66,146,208,223,217, 70, 72, 77, 93, 86,126, 18,146,166,104,173,113,113,226,187,183,198, 39, 33,214,181, 33,235,118,137,
+242,156, 56,207,189,139,162,241, 41,125,166,181,115,233,176, 95, 14, 93,187, 93, 22,116, 23,138,172,239,204,155,198, 46, 11,114,
+ 91,240,173,241, 83, 18,133, 88,118,223,177,214,164,145, 34,141, 86, 96,153, 56,168,220,149,146,203, 3,203, 5,175, 88,187, 54,
+181,109,122,219, 26,138,252,175,144, 93,254,244, 42, 80,172, 14,124,235,163,114, 46,226,174, 47,114,221,197, 5,107,217, 95,187,
+ 59, 15,217, 4,114,237,137,105,255, 90, 15,200, 21,180, 39, 10, 77, 79,235,219, 23, 66, 96, 91,235, 90, 24,189, 55, 77,227,217,
+ 29,206, 96,157, 63, 8,235, 85, 15, 38,150, 49,151, 88, 48, 34,112,146,221, 42, 95, 86,172,137, 10,218, 45,132, 20, 65, 21,223,
+194, 31, 96,109,247,206,218,104,148,167,138,248,167,165,186,173,139,215,253,231,145, 79,120, 31, 87,187,147,245,189,253,250,126,
+127,213,188,185,176, 26,128,186,177,108,111,111,179,152,143,152, 79,199, 72,107, 24,142,206,216,222,222,162,108, 38,108,232,132,
+162,154,162,100,195,119,190,251, 93,110, 94,222,166,219, 25,208,221,180,148,115,131,138, 98, 62,255,133, 47,177,189,189,201,120,
+ 58,103, 54,155,130, 83, 12, 54,186,188,245,250,187,108,110, 12,136, 48,100,145,230,149,175,125,141,110, 47, 99, 52, 60,229,253,
+201, 24,140,163,170, 11,126,254,231,126, 14,221,217,224,143,191,245,199,116,187, 61,126,234, 39,127,146,239,124,239, 85,142, 79,
+ 79,120,120,120,128,150,146,166,170,152, 45, 22, 28,157, 15,249,209, 91,111,177,177,189,129, 84, 10, 99,205,106,106, 35, 37, 39,
+167,103, 60,122,124,196,162, 44,151,115,110, 31, 86,224,136, 98, 63,194,158, 76,166,164,105,234, 89,199,129, 14, 39, 90,191, 44,
+142, 44,207, 41, 42, 75, 99, 29, 78, 10,174, 92,187,202,163,199,143,216,218,187,133,115, 38,224, 41,237, 19, 55,206,143,247, 99,
+186, 39,252,162, 79, 90,216,124, 2, 96, 59,146, 11, 5, 61,140,212,227, 56, 38,142,227,101, 81,215,107,227,120,169, 53, 90, 74,
+ 52,130, 56,209, 68,113,236,197, 69, 74,133, 81,154, 95,154, 58,219,240,232,147,187,252,219,127,245,223,178,187,179,205,124, 50,
+ 67, 72,184,117,235, 51, 88,211, 80, 44,230,124,112,251, 67, 58,157,156,221, 75,251, 60,124,116, 72,222,219, 64,165, 29, 22,181,
+227,254,163, 35,174, 93,217,131,186,162, 92,204, 41, 10, 75,109, 96,127,239, 50,195,163, 7, 24,161,168,194,205,116, 58, 28,162,
+132, 97, 58, 60,229,133, 23,111, 96, 19, 73,154,104, 58,155, 27,148,147, 49,181, 76, 24, 21, 6,234, 5,221,205,148,221,221, 61,
+164, 20, 20, 85,197,124, 58, 65, 9,139,198, 34,154, 10,217, 84,236,110, 14, 16,226, 6, 15, 31, 60, 34,237,228,196, 73,140,173,
+ 75,154,166, 38,235,245,209, 74,209,216, 6, 91, 26,175, 45,200, 83,118,118,119,120,240,248,148,163, 71, 7,220,153,143, 25, 29,
+ 75, 46,109,245,169,141, 97,123,123,135, 75,151,247, 25,142,198, 68,113, 74,158,101,104,124, 70,248,244,108,232,173, 80, 90, 82,
+ 87, 13,105,158,147,229, 29, 92,175, 98,120, 50,100, 50,155, 49, 94,204,105,156,197,246,123, 40, 33,136,147, 24, 23, 71, 97, 84,
+ 41,104,234,134, 56, 19,108,108,111,115,120,124,192,254,205, 43,236,236,109, 35, 36, 12,134, 51,182, 6,191,192,247,223,124,155,
+ 59, 7, 7, 52,181, 97,124, 54, 2, 99, 61,234,210, 57, 82, 33, 3, 29,205, 4,173, 72,128,145,106, 65,229,124,108,110,209, 56,
+244, 2,146, 12,162, 4,234,186, 14,226, 80,177,150,110,197, 50,134,213, 79, 95, 13,194,133,140,103,188,104,210, 5, 38,185, 8,
+191,182,182, 6, 87,248,144,148, 48,166,247, 22,174, 6, 29, 57,132,180,152,166,193,218,130,106, 54,131,185, 38, 90,228, 68,189,
+ 30, 34,141, 49,145,196, 41, 65, 36, 4,166,150, 68, 81,204, 98, 52,199,212, 6,213,212, 56, 9, 73, 55,167,191,183, 69,103,103,
+128,238,164, 84,202,162,195,132,176,193,174, 70,224,248,175,213,107,176, 77,176,143,201,101, 56,146,169, 45,143, 15,142,168, 27,
+ 65,141,162,191,181, 77,212,233, 48, 60, 57, 33, 75, 83,134,206,209,217, 24,224,132,160,211,239, 51, 62, 61,161,110,106,148,246,
+ 83,176, 56, 73, 80,105,134,206, 50,132,242, 98, 52, 41, 2, 90, 87, 72, 92,235,171,119, 46, 88,239, 4,198,121, 50,159,119, 10,
+180, 8,102,115,161,195,109,139,125, 91, 69,100, 24,189, 39, 73, 76,146,198, 36,105, 20, 10,185,242,226, 56, 45,130,218,125,237,
+ 57,205,122,204,246,106,183,238, 39,136,114,181,119, 23, 23, 39,183, 23, 1, 87, 79, 60,159,130,182, 70, 56,150,135, 64,108, 75,
+ 27,196,175, 21, 5, 23, 59,245,150, 88,234,214,246,230,225, 95, 27,236,125,106,205, 70,246,108,149,187, 91,170,248,215,131, 86,
+ 86, 93,187,120,182, 61,173,109,153, 91,250, 94,232,212,149,112,104,121,241,179, 90, 99,151, 29,250,242,115, 88,139, 14,137,167,
+ 90, 46,247,214,171,174,251, 66, 1,191, 96, 11,251,148,111, 97,121, 58, 94, 59,249,132,125, 16,214, 92, 8, 6, 88,118,222,238,
+211,139, 58,242, 98,122, 77,139,124, 92,165,224, 93,140,128, 21, 98,245,119, 44,157, 10, 98,109, 44,135,247,124,142, 70, 19,198,
+211, 57, 90, 69, 84, 14,242, 78,234,147,166,128,110,191, 75, 39,147,100,177,164, 42, 43,110, 60,127,157,162, 88, 48,153, 28, 50,
+157, 23, 96, 35,102,163, 41,179,233, 8,233, 12,215,111,252,127,121,251,175, 39, 75,183, 51,189, 19,251, 45,243,217,109,211,103,
+150,183,199,225, 28,224, 0, 13,160,209,222,136, 61, 36,155,106, 74, 61, 51, 36,131, 23,163, 11, 94, 40,230, 66,250, 7, 20,138,
+ 80,255, 17, 10, 93, 72,186, 80, 40,228, 70,156, 17, 53, 28, 14,217,156,110,160, 27,104,160, 97, 15,204,241,167,124,101, 85, 86,
+165,207,220,254,115,107, 45, 93,172,111,155,204,170, 58, 64,147,138, 57, 39,118,100,102,165,223,185,247,247,174,247,125,159,231,
+247, 92,102,156, 23,196,141, 22,113, 28, 16,134,138,131,189,231, 72, 44,135,187,207,120,188,189,141,142, 20,237,118,202,235,175,
+189,201, 15,254,246,175,185,117,235, 58,113, 18, 99,165, 70,203,136,139,155,107,108, 63,124, 68, 85,148, 44,173, 44, 17, 4,154,
+163,189, 35, 66,169,184,176,121,145,219,111,125,137, 43, 91,155,140,198, 99,138,170,244,118,157, 5, 33,199,219,239,124,137, 55,
+222,122,135,247, 63,252, 25,134,250, 96,163, 4,189,254, 41,101,153,145,229,147,217,131, 42, 12, 67,180,210, 51, 34,155,212, 17,
+ 82, 88,218,237,174, 87,177, 10,216,216,220,228,105,239,132, 76, 9,202,178,172, 11,186,241,147,143, 95, 1, 2,241,210,120, 93,
+193,217,216, 86,225, 60, 55,121, 42,146, 11, 20, 65,224,139,122, 28,199,196,113, 60, 47,234, 98,142, 67,244,156,102,141,146,126,
+ 26, 19, 4,170,238,210,107,177,143, 84,222,150,226, 28,119, 62,120,159,191,250, 31,254, 61,210, 86, 60,217,126,194,230,250, 38,
+206, 24,242,162,162,209, 72,185,120,249, 10,101, 89,242,224,254, 61,210, 36,161,179,180, 76,167,221,161,114,146,147, 81,193,179,
+189, 83, 42, 39, 8,181,164, 18, 1, 97, 34,105, 68, 9,173,102, 74,239,248, 16,169, 20,121,150, 49, 30,143, 65, 5, 44,119, 27,
+216,108,194,201,233, 62,114,164,168,210, 6, 43,221,101, 70,101,197,222,238, 49,205,182, 33, 74, 83, 90,107,155, 68,113, 66,160,
+ 4,163, 65, 73, 89,140, 72, 66, 69,178,210, 37, 31, 79,104, 55, 98,114, 11,215,174, 94, 68,105,201,241,225, 1,105,179, 67,154,
+ 68, 28, 29, 30,179,187,251,156, 48, 9, 89,219, 90,167, 40, 75, 44, 6, 25,104, 46, 93,190, 72,179,209,161,127,114,196,189,251,
+119, 56, 18,134, 64,223, 98, 99,115,139,206,202, 26, 65,210,224,210,210, 42, 69, 89,130,148,152,178,182, 69,105,197,104, 48, 32,
+110, 52,104, 52,155,168, 64, 35, 8, 72, 26, 13,168, 96, 50,201,153,148, 57, 79,182,119, 60,120, 39,105,160, 36,152,202,160,180,
+ 36, 76, 98,226,102,138, 12, 3,108, 94,144,180,219, 88, 91,177,180,177,194,175,255,230,215,185,243,217, 61, 30, 63,122,198, 55,
+222,249, 2, 73, 24,145,151,158,113, 62, 56,233, 83, 72,136,165,170, 71,163,117,188,103, 32,102,113,204,206,248,122,108,133,160,
+168, 96, 50,176,132,169, 67, 5, 22, 41, 43, 66, 93, 18,168,202,167,158,205, 82, 25,189,210, 93,214, 44, 5, 91,153, 89,145,146,
+ 82,227, 68, 13,158,241,246, 25, 48,118,186, 88,245, 1,165,214, 7, 4,137,170,244,215, 45, 4, 81, 32, 17,149,197,230, 5, 85,
+105, 25, 77, 20,140, 19,154,113, 68, 20, 4, 56, 41,169,132,160,148,245,238, 83, 41,162, 56, 38,106, 55,105, 44,117,104, 44,183,
+ 9, 59, 77,136, 53, 4,126,178, 80, 19,115,230, 22, 77, 33, 61, 41, 79,105, 42,227, 47,208,206,250, 41,133, 49, 22,172,100, 56,
+200, 24,246,115, 84,220, 33,208,154,116,169,139,140, 52,149,169, 40,243, 9,206, 89,226,102, 74, 16, 70,132,129, 38,219, 45, 17,
+ 66, 35,132,242,222,101,165, 81, 81, 68,216,104, 80, 42, 63, 77,213, 18,159,210,166,252, 74, 78,135,161,159,224, 77,157, 74,110,
+ 14,127, 49,214, 71,232, 58,103, 22,108, 92,204,162, 63,167,129, 95,170, 70,212, 6,225,162, 31,221, 39,255,105, 37,208,122,250,
+177,231,247,228, 98, 46,168, 93,224,159,136, 51, 2,107,249,202,174,253,165, 29,188, 88, 8,123,161, 94,221,212, 69, 94,188,244,
+ 32,176, 72, 58, 21,103, 9,112,181,161,119, 58, 70, 23, 47, 17,205,205,222,119,222, 75,190, 8,233,226,252,161, 68,188, 56,124,
+ 23,110,118,253,211,245, 65,171,114, 53,246,188, 22,206, 77, 39, 36,150,169, 45,180,110,106, 4,232, 51, 29,246,130,128,109, 17,
+ 4, 48,199,124,206, 95, 78,137,111,179,127, 95, 16, 28,200,185,212,111,238,189,155,243, 66,206, 64, 97,196, 44,243,110, 33,118,
+206,206,199, 32,103,138,254,140, 57,204,194,110,223,158,217,243,159,193,208, 10, 63,126,183,214,120,104, 71, 16,210,106,117,120,
+252,240, 33, 77, 45, 41,141,143, 25,172,156,227,180,223,103, 57,109,211,109, 54,185,122,249, 6,210, 5, 8,165, 41,243, 33, 74,
+107,172,149,148,110,194, 23,191,244, 21, 14,119,119,200,199, 19,126,237,215,190,194, 95,127,247,123, 62, 78, 48, 80,126,239,165,
+ 35, 34,173,160, 42,113,178, 98,216, 47,232, 92,232,146, 52, 90,244,135, 61,246, 14,246,105,180, 52,151, 47, 94,229,227,143,222,
+ 35,159,244,177, 42,100,127,111,143, 63,248,195, 63,224,161,187,207,246,246, 51, 46,221, 90,225,193,163, 71, 92,217,186,192,201,
+233, 41, 2, 57, 19,174, 56, 33, 81, 82,179,190,121,129,175,254,250,111,243,127,251,127,252, 95,253,154, 65, 88,156,112,148,166,
+224,116,112, 74,191,223, 35,203, 38,140, 70, 67,146, 52,198,216,178,126,178, 76,159,212, 1,215,175, 93,231,248,244, 20,235, 28,
+105, 43,165, 43, 43,150,187, 75, 88,155, 47, 8, 58, 62,127,167,254, 42,184,194,226, 19,255,188,208,206,143,223, 64, 73,191,107,
+155,226, 35,167,157,186, 82,231, 59,245, 41,120,197,255,205,195,122, 63, 55,219,165,214,143,169, 34,207,249,206,183,190,201,253,
+207, 62,101,109,101,149,222,225, 41,167,167, 61,150,150,150, 64, 74, 84, 24,146,180,218, 68,198,176,186,190, 69, 89, 20,132, 81,
+192,202,250, 26, 79,159, 62, 33, 72, 91, 36,173, 22, 31,221,125,192, 82,167, 77,154,198,180,151, 58, 92,188,124,157, 36,241, 46,
+131, 98, 50,198, 20, 5,197,112, 72, 97, 44,151,174, 93,129,229,148,251,119, 62,161, 21, 37,148,165,161,189,190, 70,123,109,139,
+211, 97, 70,218, 89,161, 40, 74,238,125,246, 25,202,148, 44,119,189,152, 9, 87,145,101, 57,177, 80, 56, 83,176,253,232, 62, 23,
+174, 94, 37,141, 3,182, 46,108,114,241,210, 5,180,200,113,197,132,126,127,192,238,222, 33,235,197, 38,227,241,152, 56, 74, 9,
+ 59,109,242,201,144,225,201,136, 78, 51,229,159,252,233, 63,230,249,225, 51, 14,118,247,184,114,233, 50,198, 88,242,178,100,148,
+149,148, 66,179,185,185,229, 85,183,166,100, 52, 24, 80, 86, 21,205,118, 27,180,244,227, 87, 5, 84,194,199,225, 42,133,177, 21,
+173,102,139,141,245, 13,142,142, 78,113,109, 67,154,132, 56,103,137,146,136, 48,137,168, 76,129, 18, 49, 81,179,129, 19,154,193,
+233, 17, 34, 8,144,137,230,202,173,107, 8, 29, 32, 31, 62,227,107, 95,124,155,254,104,132, 17, 48, 24,143, 25, 85, 5,177,212,
+ 24,107, 80,224,221, 38, 82, 64,101,169, 92,229,249, 8,190,246, 97,149,102, 84, 89,118,142,114,194, 72,160,149, 37,210, 5,186,
+ 78,219, 82, 74,215, 8,217,202, 23,111,103,234, 11,171,173,181,115, 10,171,236,172,123,155,131,139,106,182,185,245,159,235,108,
+137, 45,115,132,169,144, 88,164,208, 72,225,208, 26,180, 10, 80,194,239,243, 51, 59,166,156, 76,136,202,192,139,193,116, 64, 20,
+ 69,196, 81, 64,179,211,166,209,106,162,154, 41, 65,167,137, 77, 67, 74,109, 81, 84, 40, 35,137,234, 24, 90,175,221,149,179, 98,
+101, 17,179, 32, 43,159,137,173,113,214,224,140,227,244,164,199, 47,126,250, 49,151, 46,221,192, 88, 69,220, 74, 9, 27,113,205,
+ 47, 23, 12,250, 61,154,173, 6,105,171, 65, 16,132, 20,227,140,210, 90,194, 36, 98,208, 31, 82,149,126, 10, 18, 38, 9, 58,138,
+ 49,182,168,159,123,202, 31,156,181, 68, 26,229, 15, 63, 2, 31, 40, 51, 75, 17,243,205,130, 49,198, 51,231, 23, 58, 79,223,185,
+215, 9,158,106,110, 87, 11, 3,229, 5,190,129, 38,212, 1, 65,232,167, 5, 74,122, 43,179,172,199,239, 44,212, 4, 87,103, 52,
+156,189,182,139, 89, 97,151,126,180,240, 75, 60,224,110,225, 90, 48, 63, 42, 56,177,168,149,175,197,105,246, 28,192, 76,156,231,
+156, 48,207, 16, 57, 83,187,120,165,242,125, 86,192, 61, 16,161,126,125, 97,114, 89, 7,164,185, 58,179,221,205,110,103,113,215,
+ 66, 72,127, 31, 41,233,187,111,159, 33,236, 15,123, 53,167,223,152,122, 37,226,188, 22, 46,152, 93, 43, 5,218,123, 58,197, 28,
+224, 34,230, 95,248, 60, 57,103, 58, 74,159,223, 17,211, 61,185,156,167,244, 44,118,246,159, 19, 34, 47,220, 75,252,200,130, 5,
+ 19,130,152, 5,201,204, 79, 52,110,102, 97, 19,103,148,206,115,165,188,168,249,245, 66,206, 15, 22,254,180,234, 99, 43,117, 24,
+209,105,119,120,114,255, 57, 65, 51,101,216, 59,225,230,173,107, 60,186,255,148,163,231, 21,237,246, 42,173,230, 42,229,184,224,
+248,232,136, 75, 87,175,208,127,250,156,172, 40, 41,171,138, 15, 62,186,131, 51, 19,126,239,119,190,202,123, 63,253, 91, 78, 14,
+119,209, 65, 68, 24, 53,216,123,126,192,106,119,157,201,104, 72, 24, 41,156,240,233, 64,167,131, 62, 75,171,203,220,188,182,201,
+246,227,231,140,135,240,229, 47,127,149,131,189,199, 20, 69,204,218,198, 69,126,246,225,251,252,229, 95,252, 37, 95,249,226,187,
+168,231,123, 36, 73,196,151,191,248, 54, 97,160,120,250,228, 96,118,178, 11,149,154, 77, 58,132,208, 12, 70, 99,138,194,251,108,
+165,246,227,117, 41,253, 62, 70, 41,205,112, 60,166,127,122,204,131,227, 83,159, 45, 45,165,143,110,180, 14,165, 35, 46, 92,220,
+ 66,217,156,246, 82,151,178, 44, 72,180, 34, 73, 90,244,199,249,194, 88,234,124, 66,222,175,188, 94, 58,195, 46,118,245,105,243,
+ 76, 72, 65,253,115,106, 29,248, 81,252, 20, 25, 89, 71, 57, 42, 33, 23, 58,117, 47,154,145,136,217, 58, 1, 4,166, 22, 88,149,
+ 89,198,207,126,242, 67,178,225,128, 34,155, 48,234,247,248,250,215,191,202,206,211,231,168, 48, 32,142, 98,148, 14, 41,139,138,
+ 60,203,209, 58, 68, 34,137,146,136,194, 24,130, 56,101,253,194,101,180, 20,172,174, 95,192, 85, 5, 72, 65,107,169,203,165, 91,
+175,243,217, 71, 31,113,184,183, 71, 35,138, 61, 22,212, 57,242, 73, 65, 20, 38, 28,156, 30, 48, 41, 42,182, 86,219,148, 69, 69,
+ 16, 69, 92,184,124,153,180,149,115,114,124,132, 51, 5, 85, 57, 97,247,241, 61,154, 73,200,234,242, 18,171,203,109,112,150, 81,
+ 86, 18, 6, 49, 82,107,158,237,238,113, 33,140, 41,138,202,171,197,235,206,110,125, 99,131, 86,187, 75, 24, 40,178,241, 8, 97,
+ 33,104,132,132, 81, 76, 16, 87,156,238, 31,145,166, 49, 43,221, 22,141, 56, 66,235,152,194,192,225,193, 51,130, 40,100,171,217,
+ 33,203,114,130,154,121,189,124, 97, 11,234, 2,146,149, 5, 78,248,192, 19, 33, 3, 28, 5, 58,140,104,119,150, 56, 29, 14,184,
+124,229, 26, 81,152,128,169, 8,149, 35, 8, 3, 84,168,153, 20,133,207,214,174, 59,227, 36,109, 16,135,161, 15, 38, 65, 96,109,
+201,214,214, 26, 69,150,147,156,142,184,121,101,139,131, 81,143, 86,187, 73,255,224,148, 86, 8,161,177,132, 2, 74, 3, 82,251,
+149,204,148, 67, 46,173,163,172,252,197, 55, 8, 52,187,147, 2,121, 82,112, 43,136,104, 20, 25,149,148,148, 50, 64,169, 10, 99,
+100,221,103,212,249,108,114,118, 53,192,154,202,239,197,149,242,133, 97,250,252,193,147,209, 76, 29,136,129, 53, 56, 83, 33,173,
+169,175,103, 6, 48,126, 20, 45,124,175, 22,196, 65, 93,140, 21, 78, 7, 88, 29,226,194, 24,151,196,184, 36,194,180, 82,138, 70,
+ 72,210,136,169, 2,137,243, 51, 52,108,229, 39, 18, 30,194,101, 33,168,215, 97,181, 32, 76, 34,189,181,206, 24,172, 48, 40,161,
+ 48,149,160,223,155,112,231,147,123, 76, 70, 19,118, 30, 63, 1, 21,114,225,181,155, 52,194, 16,180,160,168, 74,114, 83,178,186,
+182, 69,146, 54,253,202,173, 63,192, 56, 8,162,136, 98,114,136,169,140,159,170,164, 41, 58, 12,168, 10, 83,115,217,253,104,219,
+107, 87,188, 7,222, 85,114, 22,119,108, 0,171,234,209,187,240, 35,231,178, 44,189,255,189, 46, 92, 82, 42, 2,237,115,232, 3,
+188, 22, 70,235, 41,250, 53,240, 98,185,186, 83,247,152,117,231, 57, 40, 11,226,184,105, 24,151, 56,195,255,158, 23,244, 57,128,
+ 74,206,248,239,211, 86,146, 87, 94,151,196, 28, 39,238,196, 25,103,204, 66,250, 41,103,153,101,231, 49,228,245,105,195,250, 78,
+ 93, 50, 77,140,115, 51, 77,216,244,237, 69,158,187,123, 1, 50,195,172,120, 91, 55,133,121, 89,255,120,115,182,206,177, 48,126,
+ 61,228,230, 36, 60,127, 61, 12,252,180,162, 50, 84, 37,243,144, 34,166,214, 63,135,146,146, 80, 9, 66,237, 15,102,122,186,179,
+ 88, 12,213, 88,180,158,137,115,112,152,197, 78, 93, 45,158,168, 16, 47, 13,148, 95,204,184,158,142, 86,206,135,130,156, 63,125,
+201, 51,197,222,157,155, 22,136,179,136, 25,113,230, 79, 80, 95, 96,124, 28,157, 56, 23, 0, 51,152,228,148,198,208,136, 21,105,
+ 2, 5,150,193,209, 51,198, 39,151,112, 34, 34, 89, 89,161,127,116,204,143,190,251, 35,190,252,206, 23, 81, 58,166,127,124,192,
+241,193, 46,105, 28,242, 39,255,240, 31,241,139, 95,220,225,238,253, 15,113,161,100, 48, 58, 70,218,138,108, 0, 97,103,137,170,
+ 60,160,204, 75,182, 31,223,167,179,190, 68,111, 48, 68, 11, 65,110, 42,174,221,188,201,206,147,123,100,195, 62,195,227, 9,253,
+107,215, 89,191,120,153,229,205,101,222,127,255,125,162,180,129, 53,134,103,123, 7,172,109,108,114,114,124, 64,255,201, 67,190,
+252, 79,254, 25,223,255,219,111,251, 83, 49,176,212, 72,137,131,136,222,160, 32, 77, 26,140,178, 9,227, 81, 15,137,247,176, 98,
+ 5, 43, 75,171, 92,216,220,228,240, 96,143,178,172, 48, 69, 78,225,188, 96,199, 73, 1,165,244,204,103,161, 89, 93, 94,102,180,
+247, 12,165, 52,229,120,136,156, 12, 9,211, 37,191,175,153,121, 37,197, 47,237,200,207, 40, 61, 92, 29, 96,120,198,115, 50, 79,
+203, 67,137, 89, 58,223,116,164, 38,229,130, 88, 72,212,209,153,206,191, 95, 10,137,181, 14, 41, 61, 30,212, 63, 33, 61,215,221,
+ 90,139, 69, 32, 76,197,179,237,199,236, 63,125, 66, 35,142,216, 88, 95,231,228,248,132,193,160,199,218,198, 26,227,162, 36, 73,
+ 83, 86,150,150,209, 74,114, 58, 62,166,200, 38,164, 62,174,143,194, 56,218,157,101,164, 12, 25,143, 71, 44, 45,173,224, 92, 69,
+101, 45, 91, 23,175, 96, 92,128, 49,142, 32,208,244, 6,167,236,238,238,241,165, 47,127,153,214, 74,204,254,209,144, 73,230,248,
+226,151,127,147, 70,179,129, 10,148, 31,139, 22,150,201,100,194,206,147,199,220,186,126, 25,157,180,217,125,182,195, 94,191,207,
+112, 48, 70,218, 18,169, 20,163, 73,201,230,133, 54, 81,220, 0, 33, 24,143, 51,154,173, 22, 81, 28, 18, 4, 13,202,124,194,225,
+254, 46, 85,149, 83,101,150, 78,186, 10,194,145,143, 39,232, 52,165,177,180, 76, 24, 69,140,122, 39, 84,195,156, 70, 20, 83, 88,
+ 1, 82, 19,183, 87, 88, 93, 93, 35,144, 37,174,204,124, 40,147,138, 40,203,138, 48, 8, 61,158, 83,105,178,113, 78, 67,199, 96,
+253,223,187,114,128, 82, 52, 26,109,122,163, 12,227, 74,150,151,186, 68,162,194, 58, 8,147, 38, 97, 75,145, 23,185,183, 75, 9,
+ 40, 50, 47,176, 19,198,161,141, 36, 63, 29,240,236,217, 14, 81, 28,211,108, 42,214, 86,154,132,166,162, 28,103, 76,172,227, 20,
+139, 22,144,214,118, 25,105, 44,186,126, 8,104, 41,105,200,136,113, 89,160,140,223, 13,143,100,192, 39, 39, 5,141, 68,208, 81,
+ 2, 43, 11,170,192, 98,116,133, 81,202, 91,216,170,122, 7,138,245, 83,189,217,174,212,249,145,183, 3, 39, 37,216,250, 96,235,
+188,120,206,217,218, 31, 44, 36, 96,234, 93,118, 9,149,103, 31, 56,225, 53, 39, 82, 56, 4, 26, 29, 40, 47, 6, 75, 19,194, 48,
+ 38,138, 35,210,102, 66,156,132,196,145, 38,144, 2, 79,129,119, 4,245, 70,212, 24,131, 12, 66, 68,160,106, 33,175, 4,148,143,
+151,182,126, 79,154, 23, 25, 74,131, 51,138,108, 2,247,239, 60, 5, 35,233, 54,189,216,242,249,246, 99,142,118,159, 80, 86, 35,
+ 86,175, 94,246, 95, 51, 12, 73,219, 29,162, 56, 65, 43,141, 80, 39,136, 64,163,170,128,178,168,136, 26, 9,113,187, 73,208, 72,
+252, 69, 95, 5, 40, 25, 96,164, 67, 40,141, 86, 1,129,182,181, 69,145,217,120,220, 89,208, 82, 96,167,241,203,248,200,228,162,
+244, 25, 20,254, 33,226,239,111, 29,120, 4,174,148,222,162, 26,106, 61, 47,236,129,246,211, 0, 33,144, 88, 95,220,229,212, 22,
+ 93, 71,123, 59,127,221,246, 53,184,246,208, 79,173, 92,181,143,221,223, 95,117,179,105,229, 12, 21,251,242, 70,194,175,254,166,
+ 25,230,110, 97,140, 62, 21,179, 45,238,169,207,162,200,167,242,182,105,100,153,173, 3,109,106,131, 92,173,205,120,217,232,125,
+ 6,145, 57,131,118,245, 69,124,246,118, 93,204,253, 36,198,212, 24, 94, 63,149,153,254, 64, 94,115,164,168,194,160,214, 55,128,
+ 40,235,201,147,155, 10, 26, 33, 16,130, 64, 73,180,114,115, 82,159,170, 71, 27,174,246, 62,139, 51,133,218,157,139, 59, 60,187,
+115,144,175, 82,175,191,162, 88,191,138,192,243,249, 69,226,101, 74, 71, 94, 80,199,191,138, 74, 54, 63, 72, 56, 6,189, 83, 54,
+215, 55, 56,122,124, 15,107,160,217,142, 57,232, 29, 19, 69, 1, 73,179,129, 52,134, 70,156,178,190,113,129,227,254,136,160, 25,
+ 32,117,201,181, 43,151,249,228,227,247,185,119,239, 51,194, 80, 51, 24, 12, 25, 14,114,118,158, 30,146,234, 54,163, 81, 73,208,
+245,126,242, 40,214,228,249,144,229,238, 21, 30,220,255,140, 52, 78,104,139, 22, 61, 42,108,149, 51, 26,158,144, 52, 86, 65, 88,
+226,164, 65, 85,250,145, 91,146, 52,200,198, 19,118, 15, 14, 73,226, 6,227,124, 82,239, 2, 29, 7, 7,187, 8, 33, 8, 85, 64,
+ 81, 20,140, 71, 25,105,115,141,164,209,242,208, 92,227,159, 24, 66,105, 58, 75,203,172,172,174,177,178,188,194,201,193, 14,206,
+230,100,249,144,126,127,136, 68, 82, 86, 85, 45,128,116, 40, 37,233, 38, 13,238,125,248, 83,142,159,238, 80, 28,239,209,137, 3,
+186, 27,151, 48,166,250,143,136, 22, 92, 12,122,121, 53,101,233,165,182,143,250,129, 38,157,157,241, 15,172,169,144, 82, 97, 42,
+139, 84,154,162, 50, 68, 74, 83, 89,135,113,240,244,233, 14, 91, 75,109,122,123, 59,116, 26, 17,195,129,240, 92,241,184,201,193,
+176,160, 69, 76,187,213,164,217,110,145,118,154,236, 60,217, 97,144,141, 8, 66,141, 11, 3,194, 70,131, 36,105, 50, 26,142,113,
+ 42,100,117,163,131,115,150, 60, 31, 81, 20, 57,119,238, 63,100,117,169,203,155,239,124, 25,225, 42,238,220,249,140,145,145,220,
+254,194,187,236, 62,223,231,238,221,123,220,186,121,139,180,179,194,193,209, 1,151, 47, 95, 98,255,233, 83, 78,250, 57, 87,174,
+ 92,167,213,108,240,236,233, 67, 20,150, 11,151,175,176,180,180,132, 16,146, 32, 10, 24,141, 70,152,114,204, 48,243, 4,182,102,
+ 20, 32,243,146, 82, 86, 8,215,160,202,188, 30, 98,115,115,139,211,147, 99,142, 14, 15,137,162, 49,205,182, 66, 58,199,100, 48,
+164,177,212, 37, 74, 83, 38,147, 49,165,144,100,163, 17,163,113, 69,127, 92,178,127,220, 35, 77, 98,226,118,140,195,122,197,184,
+149, 20,185,161, 24, 15, 17, 66, 18,167,169, 23,190,230, 99, 36, 62,211,189,118,185, 82, 20, 5,163,225, 0, 29, 70, 20,105, 66,
+101, 10,164, 82, 4,177, 65,105,229,247,232,206, 81,150, 37,133,245, 12,116,237, 12, 65, 18,179,188,186,198,233,201, 9,163,209,
+152, 70,218, 64, 9,216,126,248,152, 80,105,116,160,201, 42, 67,174, 4,185,242, 10,125, 53, 37, 69, 74, 15,138,210, 58,244, 0,
+148,122, 15,218, 80,146,163, 28, 62,221,205,105,197, 13, 54,181,160, 85, 78, 80,129, 99,142,241,246,112, 38,191, 55,149,243,145,
+160,195,143,250, 69, 61,206, 92,232,206,252, 20, 72,248,162, 98, 1, 35,252,129,203, 86,179,200, 44, 33,124,177, 11,180, 32, 12,
+ 21, 81, 20, 16, 39, 49, 73, 35, 34,142, 19,162, 56, 34, 74, 35,226,216,119,167, 50,144, 62,179, 91,207, 41,136, 74,123,111,253,
+ 52, 27,221,185,169, 63,219, 82,217,138,162,204,189, 88,185, 84,216,202,241,241, 71,159, 50, 26, 78, 88,238, 54, 17,206, 50,232,
+ 13,105, 45,181,121,184,243,132,231, 79,158,240,201,157,207,184,126,245, 6,155,171,107,232, 32, 36,106, 52, 16, 72, 76,253, 60,
+234,245,122,132,113,132,142, 66,116, 28, 19,197,201,108,218,170,181,194,168,169,111,188,172, 21,233,243,176,144,233,116, 12, 64,
+ 89,111,123, 22,117,103,108,173,163, 42, 61, 47,131, 64,212, 17,217,190, 56,120,235,169, 71,191,234, 32,152,221,148,154,106,158,
+ 76, 61,226,247,195,148,153,109, 12,113,198,229, 52,237,204,229, 25,177,156,152,177, 81,196, 52,181,243,115,132, 62,194,113,230,
+154,114,102, 35,124,134, 92,186, 80,128,237,194, 40,221,214,193, 82,114, 90,176,235,110, 90, 24,236,130, 8,248,236,141,121, 33,
+183,110,214,149, 91, 99,234,135, 82, 93,204,173,239,206,109,101,176,198,107, 57,166,197, 94,212, 58,133,243,225, 45,214, 26,191,
+ 38,170, 65,113, 76, 1,113,117, 81,159,254, 13,245,204, 90,224,196, 92,132,198, 89,177,220,108,180,189, 48,126, 63,255, 49,175,
+234,210, 95,134,202, 59,111,217,123, 85,125,127,245, 33, 65,252,202,135,130,197, 67, 71, 54, 30,113,249,173,215,121,182,180,196,
+184, 63,164,159,231, 84,121,238,119,113, 90, 19, 80, 34, 84,136, 14,155,108,239,238,115,245,246, 10,101,101, 56,220,125,204,141,
+235,215, 49,166,162,223, 31,242,235, 95,255,117,190,251,237, 31,210,105,109, 50, 62,205, 25, 13,199, 52,172, 87,139,142, 70, 61,
+198,147, 33,249,184,143,194,103,195,223,255,228, 83,154,237,148, 56, 54, 52,218, 41,198,150,124,255,135,127, 67,218,217, 96,243,
+210, 69,214, 86, 55, 56, 81, 39, 68, 81, 66, 24, 68,156,246,251,252,103,255,249, 63,227,191,254,255,252, 75, 78, 79,143, 25, 13,
+ 7,132,129,166, 40,115,170,202, 1,154, 56,136,216,188,112,145,231,187,207,176,117,184,142, 84, 33, 66, 5,156,246,250, 88, 83,
+ 50,234,239,163,117,137,149, 30, 86, 96, 77,173,120, 81, 14,235, 12,141, 52, 37, 9, 52,131,131,125,204,112, 64,224, 44, 54,155,
+208, 59, 57,193, 44, 64,103,126,105, 40,193, 11, 97,193,245,147, 97, 97,167,126,126,253,114,126, 39,117,230,164,237, 28, 56,131,
+116, 22, 45, 52,141, 70, 66, 24, 70, 12,198,185,231,238,135, 33,149,243, 29,212,233, 73,143, 70,179,193,131, 7,247,113,197,132,
+213,213, 85,150,215, 54, 40, 12,124,122,231, 1, 84, 22, 29,197, 4, 81,194, 36, 43,216,191,251,144,118,183, 75, 51, 8, 73,211,
+132,149,213, 85,210,164,193,112, 48, 98,148, 85,172,108, 46, 81, 22, 5,131, 65, 15, 29, 68,116,210, 38, 69,105, 72, 91, 13, 70,
+165,101,208, 27,176,118,233, 38,239,126,227,247, 64, 72,130,230, 50, 46,136,105,183, 91,228,214,114,225,234,117,198,227,140,149,
+245, 11,244,250, 3, 14,142,143, 89, 91, 89,162,180,130, 7,143, 31,243,149, 47, 47, 51,202, 43,250,189, 62,157,181,117,150, 87,
+ 47, 32,195, 30, 75,221, 22,137, 22, 80,140,177,229, 4, 35, 13, 70, 57,208, 33,147,178, 68, 7, 33,205,102,135,251, 15, 30,209,
+234,116, 9,198, 99, 63,242,140, 99, 76,150,161,162,136,238,133,139,196,205, 38,207, 31, 61, 97,124,116,192,120, 52,193,148, 57,
+ 31,125,248,115,190,242,165, 47,160, 82, 63, 42, 21,206,119,196,214, 26,202,162, 32,199,144, 54,155,254,226, 37,180,247,144, 11,
+234,216, 93,193,100, 52, 68,151, 37, 89,154,226, 76, 78,179,213,172,197,171, 22,155,103,200,180,129,114, 16, 40, 47,242,170,242,
+ 10, 83, 20, 52,151,151, 89, 91,223, 34,234, 13, 8,195,128,213,110,151,181,149, 46,186, 82, 12,141,101, 52, 26,147,105,205, 4,
+137,113,165,143, 22,117, 62, 22,216, 88, 75,172, 5, 97, 32,125, 46,189,148, 36,165,143, 78, 61, 42,225,135, 79, 39,252,206,237,
+132,200, 20,232,210,239,133, 69, 85,235, 52,172, 64,214, 28,243,169,240,118,234,160,153,141, 75, 23,217, 72, 82,162,235,137,144,
+180, 2,225, 36,194, 42,148, 45, 61,200,198,121, 63,125, 24,248, 16,167, 56, 8,136,226,144, 56,209, 68,177, 34,138, 37, 97, 44,
+137, 66, 65, 20,105, 15,243, 82,254,160, 33,213, 84,124,236,167, 78,174,246, 61,171,122,143, 46,240, 56, 86,191, 39, 45, 81, 72,
+164, 9,248,217,123, 31, 49,232,143, 9,180,246,241,161,129, 34, 43, 42, 66, 44, 95,250,202,187,124,114,239, 30,149,117, 60,158,
+ 84,220,184,117,155, 40,137,145, 81, 4, 22,132, 86, 4, 97, 72, 81,248,245, 81,144, 36,168, 40, 34,105, 36,160,235,144, 21,173,
+ 49,218, 80, 85,245,235,198,160,181, 94,128, 61,205, 93, 75, 65, 93,164,202,202, 7,163,212,126,183,186, 0,214,235, 48,225,187,
+122,173,228,140,231, 62,181,171,170, 64,123, 50,233,108, 10,238,230, 73,160, 44,230, 59,112,102,151, 62, 77,174,155,114, 82,168,
+173,210,179,209,252,185,209,251,171,136,110,231, 27,135, 23,197,110, 62, 24,224, 76,183,109, 23, 82,212,172,245, 29,117,101, 16,
+162,244, 26,136, 5,229,188, 59,167, 51,152,119,231,117, 81, 55,115, 75, 32,245,116,209,152, 10,103, 12,198, 84,190,160, 87, 21,
+166, 42,113, 85,229,175,125,216,154,230, 58,229, 47,216,217, 4, 64, 72, 80,181,214, 65, 9,225, 5,136, 74,212, 98,196,105, 81,
+175,187,242, 41, 11, 88,158,233,190, 95,236,136,231, 99,122, 94,180,162,157,243,148,159,217, 80, 76, 79, 50,128, 19,238,151,198,
+212, 9,241,170,130,206, 47,133,231,159,183, 62, 8, 1,101,145,163,164, 98,125,125,147,201,112, 64,156,229,244,198, 71,236,239,
+ 61, 7, 29,243,193, 47,126,192,181, 75, 87, 25, 76, 96,125,235, 34,227, 73,206,201,222, 33, 46,159,208,108,166, 52, 5, 84,197,
+132,189,103,125,222,184,245, 6,151, 54,183,248,206, 95,125,143, 32, 40,125,220,233,120,204,202, 70,135, 36,109,113,120,184,207,
+133,205, 77,142,247, 79, 89,233,118, 48,194,144,196, 9,163,188, 79, 16, 69,196,137, 87,169, 74, 36,207,119,118, 57, 58, 62,226,
+ 31,254,195, 63,230, 47,190,249, 77, 42, 99,248,203,111,125,139,102,171,205,243,231,207,168,172,167, 5,205,125, 31,138, 48, 73,
+185,112,105,139,127,253,223,253,171, 90, 83,160, 80,129,143, 93,109,181, 90,180, 91, 9,217,222, 93,130,192,208, 94,110, 83,238,
+142,188,223,209,249,145, 23, 50, 96,237,194, 6,107,107,171, 72,103,104, 53, 35, 42, 49, 33, 10, 52,167,163, 30, 85,104,124,214,
+240, 52,221,232, 87,140, 21,156,133, 23,138,179, 73,247, 47,211, 85, 44,138, 67,166,153,192,181,153, 24,101, 45,167,199, 71,236,
+236, 60,245, 99,193, 32,160, 40,161,179,180,204,214,165, 75,188,241,214,219, 62,255, 57,207,168,138,156,221,131, 19,174, 95,191,
+198,202,214, 5,250,189, 19,150,186, 29,254,249, 63,249, 83,170,202,178,189,189,195, 40,115,132,113,147,166,136, 40, 75, 75, 81,
+ 58, 86,214,151,105,117,214,121,246,100,155,211,147, 99, 90,157, 46, 40, 73, 16,199,172, 55, 82,138,124,130,196,178, 20,197,228,
+121,193,147,157,103,172,172,174,145,180,187,244,199, 57, 65,224, 15, 81,183,223,124,139,211,211, 83,150,150,186, 76, 70, 99,130,
+ 40,101,169,219,101, 37,203, 57, 62, 62, 66, 6, 1, 95,120,231, 29,154,205, 38, 59,207,247,217,220,218,226,100, 48,100,148,229,
+180, 27, 41,101, 81,208, 27, 14,233, 94,186, 72,162, 59,148,147, 17,227, 81,143,192, 26,132,179, 24, 43, 40,138,146, 40, 86,124,
+241,221, 47,123,244,105, 81, 82, 20,165, 47, 70, 74, 83, 24, 67, 8,132, 73,131,229,245, 77,156,211, 4,199,254,112,230,172,225,
+251,127,251, 93,222,124,253, 38,151, 46,108,208,237, 6, 96,253, 46,174,176, 57,217,184,162, 52, 21,221,181,245, 90,147, 35, 8,
+194,152,178, 40,235,100,185, 17,167,207,159,161,176, 44,117,219,132,129,198,153,146,170,168,144, 74, 99, 6, 6, 25, 68, 68,141,
+ 20,146, 8, 59, 26, 99,198, 35,170,210,162,155, 45, 26, 34,192, 85, 37,175,191,246, 26,223,248,250,215,248,151,127,254, 45,159,
+253, 13,100,198, 48,112,142,134,214, 84,194,225,140, 35,116, 94,124,133, 16, 4,129,196, 85,254,241,212,144,142,134, 18,244,173,
+ 96, 55,119,252,244,193, 9,191,123,179,141,214, 32, 75,131,148, 37,170, 18, 4, 90,225,106,186,227,153, 53,158,245, 9,133, 98,
+166,243,144,136,160, 46,100, 90,161,132, 67, 82,121,244, 44, 6,237, 74,168, 25, 16, 74,130, 86,138, 56, 10,136, 2, 47,254, 10,
+ 67, 73, 24, 10,130,208,161,180, 65, 40,239,123, 23, 74,227,164, 67,105,129,212,210, 11,249,166,231, 11, 37,253,161,193,249,233,
+128,197, 97,156,193, 84, 21,210,249,245,217, 79,127,242, 1,207,118, 14,232,118,150,137,227,144,202,148, 24, 87,146, 52, 35, 90,
+221, 6, 50,208,124,125,233,171,252,224,123, 63, 96,116,210, 35, 31, 79, 72,211, 20, 17,104,202,162, 34,140,252,152,221, 58,139,
+ 12, 52,113,179, 65,208,108, 16,165, 49,165,117, 62, 75, 92,213, 25,241,211,155,241,169,105, 8, 47,160,243,156,145,250, 80, 34,
+124,188,173,150, 30,221,172,165,196, 5,218,227,122,181, 34,168,129, 53, 94,220, 42,209,218, 23,118,169, 37, 82,123,205,140, 82,
+ 98, 38,138, 22,152,185,152,122,186,176, 63,207,131, 19, 11, 81,219,115, 5,183, 31,199,159, 19, 90,191,106, 10,248,170,105,160,
+155, 42,212,167,187,252,197,127, 59,167, 13,246, 88, 90,129, 16, 85,125, 40,147, 62,177,212,169,133, 32,178, 41, 3,127,225, 96,
+ 48, 61, 36,212,226, 66, 99, 13, 24, 55, 27,181, 27, 83,249,110,221,248,195,156,169, 12,148, 37,206,150, 62, 54, 24, 55, 59, 40,
+201, 25, 96,199,206,173,236,210,175, 2, 2,237, 51,234, 67, 45, 9, 3, 93, 3,189,106,161,196,244,162, 43,207,248,201, 95,236,
+162,207,236,221, 95,209, 77,191,204,143,126,102,215, 80,255,209, 94,149,108,243, 50, 47,251, 47, 43,220,191,108,116, 47,234,108,
+237,254,112,128,142, 98, 63, 66, 20,150,245,110,202,195,187,119,249, 71,255,249, 63, 39, 54, 99,170,113,134, 29,143, 89,238, 54,
+185,191,253,132,219, 87, 46,114,255,211, 79,217,218,186, 72,144,196, 40,229, 24,244, 78,120,120,247, 14, 31, 72, 77,153,151, 24,
+ 10,164,128,162,200, 57,220, 63, 34, 78, 37,198, 90,222,121,251, 58,249,112,140,138, 82,134, 89,129, 10, 19,214,150,150, 40, 77,
+197,165,203,215,232,247, 74, 46,110,172,115, 55, 73,168,218, 29,172,245, 33, 45,111,189,253, 5,218,173, 14,161,214,220,185,123,
+159,202, 88, 12, 83,251,136, 36,140, 34,190,240,246, 59, 36, 73,196,195,251,159, 81, 7,224,145, 38, 13, 47,252,210,138, 72, 75,
+250,131, 35,132,203, 57, 29, 15,169,240,136, 73,132,195, 42, 65, 37, 4,237,110,155,193,224,148,163,195, 61,180,114, 52,151, 91,
+180,187, 45,118, 75, 73, 89, 12,126,245,238,252,204,201, 88,188,152,170,244, 57,211,152,243,227, 51, 91, 91,121,138,124,196, 47,
+222,251, 33,119,239,124,198,229, 43,151,136,226,132,202, 74,118,247,158, 49,202, 38,164,173, 22,171, 43,171,100,163, 33,163,222,
+ 41, 23,182, 46,210, 93,187,192,243,253, 67, 58,205,152, 43, 23, 47, 16, 74, 11,213,152,165, 36, 96,119,247, 0,235,250,188,241,
+214,155, 52, 90, 45,172,117, 68,113,196,209,225, 9, 56, 71,146, 68,196, 81, 72, 24,199, 52, 26, 41,197,100, 76, 26, 74,138, 60,
+ 7,103, 72,226,144,235,215,174,121,114, 83,145, 19, 5,138,108,212, 67,235, 0, 97, 43, 4,142, 44,203,232, 46,117,177, 78,240,
+124,255,128, 36,142,184,120,249, 34,195,222, 9, 81,148,178,188,178,130,117,142, 86,167,203,181, 27, 55,249,171,191,248,119,148,
+197,132, 86,187, 77,254,188, 32,203, 11,110, 94,191, 74,103,105,149,160,145, 80,101, 99, 79, 60, 19, 62, 97, 48,136, 82,132,130,
+170,202, 17, 82, 51,232, 15, 72,148, 66,100, 25, 50, 10,177,149, 69, 37, 17, 73, 35,101,121,165, 75, 20, 5, 52,210,152,178, 40,
+ 88,238, 52,176, 56, 14, 79, 6,140,243,130,141,181, 53, 2, 21, 34,180, 35,159,140,233,198, 77,156, 21,168, 40, 36,108, 8,168,
+ 10,130, 34,163,152, 76, 88,106,183, 24, 13,250, 12, 78, 79, 72, 67,141, 41, 27,200, 88, 82,228, 37, 86,106,164,142, 48, 69, 73,
+160,106,145,106,160,208,173, 38,167,123, 71,148, 90,179,122,229, 42, 54,159,160,142,246,185,120,233, 2,171, 43,203, 60, 59,221,
+ 70, 1, 74, 43,242,162, 34,142, 21, 85, 29,233,156, 57, 75, 36, 5,165, 53,232, 64, 81,225,188, 22,160,128, 68, 10,148,147,228,
+ 88,246,134,134, 79, 30, 13,248,226,141,200, 59, 35,148, 65, 41, 79,217,242,151,126, 89,139,178,228,220, 98, 59,203, 26,156,107,
+132,130, 40,156, 9,185, 2, 25,162,133, 67, 11,175, 88,199, 85,179,113,168, 18, 16,135,154, 64,123,171,145, 79, 29,147,168, 0,
+148,118, 62,107, 93,129,172,187,107,111,113,211, 80, 3, 89,230,250,158, 26,111, 59, 77, 71, 67, 32,241,194,192,191,249,171,239,
+113,116, 48,161,209,232,250, 36, 59,103,152,100, 19, 15,183, 17,138, 70,171,193,202,198, 58,135, 7, 71,188,254,198,235, 28, 31,
+246,106, 6,187, 69, 7, 33,147,194,160,162,128,172,204,209, 90, 81,148, 37, 73,167, 77,212,105,163,194, 16, 91, 86, 53,217, 77,
+ 82, 77, 11,113,253, 50, 8,245, 44,197,110,234, 80,177,245, 30, 70, 27,139,214,138, 56, 8,192, 57,116, 37,107,141,154,156,119,
+136,117,234,154, 84, 26,165,213, 76,193,173,180,242,123,250,217,200,219,205,252,247,240, 43,164, 46, 78, 39,200, 11, 32, 26,225,
+206,174,114, 95, 54,249,155, 9,216,236, 66,136,203,172,171, 92, 24,199,187,249,132,112,234,103,119,214, 97,141, 31,149,207,103,
+246, 94,235, 83,115,123,153, 99,225,235,143,159, 9,224,108,237, 18, 48,184, 90, 4,103,173,127,221, 84,181, 14,200,120,164,171,
+ 53,254,117, 83,143,226, 49,149,183, 87,138,249,130, 97,102, 29,159, 77, 4,188,232, 50,208,146, 32,144,196,129, 95, 7,133,245,
+ 1, 85,171,250, 1,231,189,110,231,130, 91, 22, 81,180, 51,117,252,124, 76,255,226,251,120,233, 56,229,204,222,194,186,153,183,
+206,185, 95,214,113,139,115, 19,130, 23, 71,239,191,108,143,207,185,132,175,222,160,207,234,198, 6,247, 62,253, 0, 97, 75,150,
+210,136,103, 59,199,156,158, 14, 56, 26,101,184,241,152, 36,214, 28,239, 63, 33, 82,150,195,253, 61, 86,150, 55,216,218,186,130,
+ 17,142,131,221, 93,150,151,154,228,227, 1,182, 52,228,249,132,102, 43,198,153,156, 72,107,164, 80,100,147, 18,165, 75,126,254,
+139,159,243,238, 23,223,225,253, 79,238,226, 84, 74,233, 34, 94,187,241, 14,223,249,238, 95,176,188,186,238,125,194,195, 19,254,
+244, 79,254, 49,159,222,187,203,221,187,159,113,243,214, 13,142, 15,143, 16,198,241,181,175,126,149,247,222,251,126,125, 0, 18,
+ 8, 97, 48,206,114,237,250, 85, 94,127,253, 54,166, 42,216,125,246,196, 23, 21, 1,227,209, 8, 41, 99, 34,173,104,198, 17,119,
+142,246,161, 97, 57, 25,141, 40, 17, 8, 21, 34,176, 88,109,145, 56,222,184,253, 26,189,195, 67,242,193,128, 73,191,135,106, 4,
+ 68,233, 50,102, 80,242, 63,218,127,103, 60,157,162,142,228,180,152, 34,103, 50,236,129,201,201,199, 3, 86, 87,186,180, 91, 75,
+220,123,188,195,127,245,255,254,255,178,186,177,206,210, 82,135,241,176,207,209,222,115, 94,187,253, 26,197,168,143,201,199, 28,
+ 12,142,233,247,142,105, 55,155, 68, 58, 32,142, 67,154,169,230,217,179,231,140,122,171,104, 81,177,191,127,232,199,147, 66,144,
+ 38, 1, 75,157, 22, 97, 26, 18,198, 33, 91,155,107,216, 34,231,244, 96,159, 65, 85, 80, 20, 5,217,100,140, 14, 34,111,253, 75,
+ 98,122, 7,187,132, 90, 18, 53,218, 56,103,104, 70, 33,121,158,209, 59,173,104,180,218, 52,219, 13,162, 32, 64, 58,203,250,234,
+ 42,237, 86,147,141,245, 85,126,244,163, 31,115,218,239, 35,181,230,246, 27, 95, 96, 50,158,112,229,218, 85,138,178, 32,155,140,
+120,248,248, 17,113,160,216, 92, 95, 65, 43,137, 51,150, 48, 72,137,210, 6, 58, 12, 60, 88, 40, 9, 65,104, 68, 24, 81, 77, 38,
+152,178,244, 57,227, 85,137, 16, 41, 42,212, 52, 59, 77,162, 72, 83,100, 99, 6,167,199, 76, 38, 57, 78, 64,119,105,141, 70,179,
+ 69,220, 88, 34, 76, 26, 68, 74,209,172, 42,191,134,146, 33,194,121,191,178, 19, 80, 85, 21, 75, 75, 93,218,141,148,245,213, 85,
+134,131, 1,163, 81,143,124, 28, 83, 21, 3,116, 16,208,236, 46, 81, 21, 19,164,138,177,147, 9,227,211, 99,100, 28, 17,183, 90,
+ 52, 86, 87,232, 92,104, 32,157,162, 28,156,178, 30, 74,222,253,242,187,124,251,135, 63,229,254,147,231,148,214,160, 48,116,219,
+ 41,121,158, 97, 45, 4, 90, 83, 9, 5,198, 32,169, 72, 67,141, 82, 6,172, 67, 75, 69,130, 32,197,171,226,157, 20,236, 13, 12,
+ 15,183,143,185,125,125,131, 64, 43, 74, 81,162,107,151,132,146, 26, 91, 11,225,165,208,179, 73,228,244,129, 39,149,170, 65, 44,
+114,150,235, 29, 77, 17,187,210,214,241,208,166, 78,127, 51, 4,181,194, 56,168,173, 70, 74, 75,212, 20,129, 26, 42, 84, 52,199,
+ 23,187,233, 46, 88,168,218, 70, 55,207, 6,151,106,161,219,172,139,135, 34,228,199, 63,252, 41,159,252,252, 51, 46,223,120, 19,
+173, 67,140, 53,104, 21, 80, 26, 67, 81, 20, 4, 58,194, 58,207, 8, 88,221, 88, 99,231,249, 62, 50, 10,104,116,218, 76,178,156,
+142,246,145,169, 42,140,252,193, 70, 43,168, 12,173,165, 37,226,102,115,182,151,158,238,203,167, 5, 93,107,133, 49, 10,231,206,
+ 22,245,169,247, 31, 32,212, 22, 27, 42,112, 26, 33, 29,101, 41,124,138,155,131,160, 70, 55,107,223, 37,122,237,192, 84,228,166,
+ 68,173, 13,154, 22, 77,137,116, 11, 45,177,251,149,182,121,231,180, 83, 98,158, 11,242, 42, 1,239, 34, 94,125,241, 99, 22, 10,
+250,226, 78,125,246,117,236,180,203,174, 85,230,214, 46,152,227,170, 90,175, 1, 78,201, 51,121,238,211,251,202,213,170,118,107,
+231, 47,125,241,174, 51,233,205,124,252, 62, 45,254,211, 3,128,173, 42, 31,172,229, 92,205, 8,240,135,186,153,133,109,161, 83,
+151,194,239,208,163, 80, 19,133,190,160,123, 27,164, 69, 75,229,247, 80,194, 45,176,221, 95, 24,193,159,229,175,207, 10,171,112,
+ 47,121,255,203,133,115,179, 95, 94,248,157,150,125, 73,170,205,175,134, 2, 20,159,187,199,255,124, 60,169,227,248,228,132,141,
+245, 53,150,150,151, 57, 26,247, 24,244,251,184,178,226,233,211,167, 92,188,113, 19, 57,238,115,180,179, 67, 18, 8,118,119,247,
+ 89,187,113,139, 52, 89,226,232,232,152,225,120, 88, 51,152, 53,141, 70, 76,145,229, 8,153,226,180, 38,155, 12,104,164, 41, 17,
+146, 70,107,133,206,114,131,189,131,231,108,239, 60,225,237, 47,189,201,103,247,247, 24, 77, 44, 65,212,226,194,229,155,252,232,
+199,239,113,249,194, 69,108,105,185,119,247, 30,203, 27,235,124,252,201, 71,188,246,250, 27,180, 90, 45,180, 84, 28, 28,236, 49,
+ 24,143,177, 66,205, 84,156, 73, 24,114, 97,115,131,245,245, 53,142, 14,247,201,179, 33, 96,105, 53,154, 40, 29,162,133, 36,141,
+ 35,178, 81,159, 34,207,232,219,146, 18,225,243,147,157, 66, 56, 9,210, 17,201,144,119,223,122,155, 39,247, 31, 64, 94,160,172,
+165,119,114, 76,107,181, 69, 85,169,255, 17,107,186, 59, 23,147,235, 61, 27, 85, 89, 96,138,140,229, 78,147,241,112,192,221,207,
+238, 16, 4, 17,221,181, 13,222,184,125,145, 91, 55,174,114,122,116, 72, 43,142,184,245,181, 95,163, 28,157,112,120,124,204,112,
+ 52,162,179,212, 37,138, 66,186,203,171,140, 70, 19, 6,217,144, 70, 34,104, 54, 36,167,199,207,201,198, 94,188, 37,144, 44, 45,
+ 45, 17, 71,138, 36,242, 17,187, 23, 46,110,250,241,160,176,116,154, 41,154,138,209,200,213, 99,232, 33,253, 94,143,178,213,160,
+202, 39,148, 74, 98,138, 28, 99, 32,105, 52, 88,219,220,100,239,240,128,113, 54,161,217,110, 1,117,231, 34, 5,101,145,209,110,
+ 54,121,231,157,183,249,203,111,126, 11, 7,108, 93,184,194,165,102,147, 50,159,208, 78, 26, 44,119, 90, 44,183, 19,132,205,137,
+146,148,188,168,216, 63, 56,226,194,133, 54, 82, 5, 53,198, 83, 80,148, 57, 89, 89, 16, 42, 77,163,219,229,232,249, 14,227,241,
+152,102,183,227,225, 19,105, 2,161, 66,137,136,245,181,101, 26, 73,130,177,130,135,219, 79,107,205, 72, 74, 86, 90,140,203, 16,
+ 66, 33, 3, 77,216,236, 80, 21, 69,141,133,246,150,174, 48, 12,200,179, 9, 85, 94, 96, 77, 69,187,149, 34,241,135, 15, 29, 8,
+ 4,113,205, 54, 87,184, 42,247, 52, 44, 99,137,163, 16, 25,197,158,103,174, 67,108,233,208,205, 38,101, 57,225,181, 55, 94,231,
+143,255,254,127,194,227,103,207,153, 20, 57,217, 96,136,150,146,147,145, 37,210,202,199, 10,215,158,237, 73, 81, 17, 42,233, 5,
+110,206,163, 94, 35, 33,104, 82, 50,169, 28,198, 73, 10, 17,112,114,154,243,248,241, 1,183,111,111,160,165,166, 50, 22, 37, 42,
+180,170,230,129, 82,138, 89,118, 4,117,242,159, 80,218,119,213,117,140,171, 20,222, 70,148, 68, 1, 97, 32,102, 22, 44, 91,149,
+216,170, 32, 84,130, 40,208,190, 43, 85, 18, 33,157, 47,234,161, 70, 69, 33, 50, 8, 9,227, 8,165, 3,175,115,145,129, 15,131,
+ 49,245, 10, 75, 56,132,174,169,138,178,206,195,168,167, 5,223,251,206,119,217,254,236, 9, 43,157, 53,191,105,214,146, 64, 11,
+138, 34, 35,138, 21,166, 42,145,194, 34,177,228,121,134,142, 19, 54, 46,109,209, 27,222,247, 59,116,173, 9,164, 36, 74, 82,138,
+ 40,242,142, 38, 28, 42,208,164,205, 38,141, 78, 27,165,213, 12,160, 98, 42,223,177, 7,129,158,121,158,167,215,233,233, 30,119,
+218, 25, 2,136,208,250,162,239,141,110, 72, 41,252, 72,185,182, 27, 6,129,158, 69,171,106,173,231, 35,254, 26, 7, 45,101,125,
+128,177,158,243,143,112, 51,110,191,120,229,220,238, 92,193, 22,231,220, 86,191,132,147,113,102,135,254,194, 40,158,179,227,251,
+105,188,233, 66,109,242,138,116, 59,223, 18,224,237,104,194,152,179, 2, 54,103,107, 66,225, 52, 80,104, 94,224,103, 35,246,170,
+238,198,157,183,223,250, 32,156,233, 1,162,222,151, 91, 51,155, 44, 76,187,123, 83, 25,202,178,162, 44, 61,234, 91,214,194, 56,
+165, 60,220, 39,172,221, 5,186,190,175, 45,248,157,186, 82,117, 84,229,185, 52,180,105,152,188, 88,160,206,157, 9,116, 65,156,
+217,113,139,115,129, 47,139, 59,245,133,251,205,175,134,237, 43,196, 87,231,146,217,120, 9, 32,224,243,199,237,226,115, 14, 5,
+150, 44, 27, 99,170,138,141,205, 75,140,135, 3,134,123,143,145, 85,197,253,247,127,206,141,127,254, 95,240,248,199,223, 69,217,
+146,201,160,226,242,230, 21,158, 29,157,242,251,191,243, 5, 6,123, 59, 24,161,176, 74, 82,149, 21,191,241, 27, 95,229,199,127,
+251,183, 20,165, 38,140,187, 60,127,254,140,180,153, 66, 81, 50,113, 6, 55, 24,243,133,119,191,198,183,255,230,219,228, 54,224,
+214,213, 27, 60,124,178,199,247,190,253,151,124,229,203, 95,230,218,230, 22,191,248,233, 79,249,254,253, 31, 48, 44, 11, 38, 31,
+ 58,214,183, 46,210, 94, 90, 38, 27, 13,121,253,141, 91,124,231,187,127, 67, 97, 42,156, 12,144,194, 17,227,184,208,214,132,118,
+ 66,163,217,224, 47,191,245, 77,160, 68, 41,197,106, 51, 38, 10, 91, 44, 95,121,147,183,222,126,135,163,199, 63, 33,112,134, 97,
+169, 57, 24, 89,223, 57,184,137, 23, 5,161,105, 54, 86,184,178,117,137,111,125,247,187,140,178,138, 50, 47, 56,234,245,105,244,
+115, 8,194, 87, 90, 14,207,167,172,189,188, 76,251, 7,166, 16,226,172, 40, 67,204,189,163, 78,204, 87,105, 30, 50,226,234, 68,
+ 56, 67, 41, 36,147,170, 64,138,130, 86, 8,187, 39, 37, 59, 7, 19,108,163,100,101,228,248, 79,255,201, 63,102,127,239,144,205,
+110,151,110,224,120,244,240, 83,170,162,226,163, 15, 62,228,245, 47,125,137,214,114, 23,161, 3,138,170,226,249,147, 39,236,237,
+ 60,165,172,134, 52,147, 38,101, 54,164,223,239, 49,153,100, 68,113, 64,105, 70,116,219, 93,148,150, 52, 26, 77, 66, 29, 80,102,
+ 57,161,116, 88, 81, 34,165, 33, 73, 19,116, 20,114,114,122,194,209,209,152,103,207, 78, 88, 89, 90, 66, 10,193,225,241,177,191,
+167, 78, 14,168,170, 9,203,171,235,148,198, 17, 41, 77, 49,201, 24, 22, 5,194,149, 52,211,136, 64, 24, 54, 55,214,120,243,157,
+183,105,180,187, 4, 74,248,209,120,183, 77, 40, 21, 39, 71,123, 28, 29,101,172,175, 47, 17,167, 77,116, 36, 8,123, 19,146,102,
+138, 19,206,223, 71,214,121, 79,191, 41, 40,198, 67,172,131,102,218,100,111,255, 57, 81, 18,250, 46,169,118,213,234, 32, 36,105,
+ 47, 97,117,202,157,187, 15, 24,151, 22,113, 58, 32, 31,246, 88, 95, 95,161,213,110,249, 61,106, 33,169,202, 33, 65, 20, 67,145,
+205, 46, 46, 90, 75, 38,101,238,247,250,166,100,146, 21, 68, 73,131, 70,163,225, 71,214,129,166, 48, 37,142, 18, 33,193,102, 37,
+ 70,104,143,113, 45,114,100,172, 16,174,162,154,140,253, 78, 85,105, 26,145,228,183,191,242, 69,182,239,127,131,239,252,228,167,
+ 28, 71, 13,238, 62,126,142,171, 28, 65, 40,176,174,196, 73, 65,133,100, 82,130,116,190,219,141,235,136,222,208, 65, 44, 36, 90,
+ 24, 63,213,145, 96,156,228,228, 56,231,254,103,123,188,254,198,229,217,184,183, 40, 74, 63,221,192,161,148,239,126, 28, 21, 74,
+106, 28, 83, 69,181,158,221,148,210,132,113, 76, 16,121, 59,150,214,194, 19,230,130, 8,103, 42,148,112,168, 58,164, 68, 43,233,
+139,172,242,221,186,212,254,254, 86, 58, 64, 41,141, 12, 66,111,205,180,162, 86, 77, 27,112, 22, 77,224,239, 43,107,124,234, 89,
+169,249,214,191,249, 75,158,109, 63,163, 42, 43,111, 75,139, 99,132,130, 48,116, 4,202,122, 70, 62,126,228,235,108, 70,158,157,
+ 82,212,161, 45, 91,151, 47,251,180,180,201, 24, 81,228,126,191,173, 21, 42,138, 16,194, 55, 31, 81,146, 16, 52, 18,207, 33,176,
+ 32,148,243,170,244,170,196, 24, 73, 16, 8,140,149,216,186, 83,159, 42,175,167, 93,171,176,142, 50,112, 4,198,167, 6,218, 0,
+ 16, 21,202,213,121, 12, 90, 17,199,154, 32,210,168, 80, 35,181,242,254,117,165,208, 82,207,133,110,202, 59, 18, 28,198, 63,249,
+235, 28, 10, 87,139, 5,221,180,177,156, 1, 92, 22, 65, 50,115,197,187,199, 65,251,245,197, 92,144,187,192, 63,153,142,210, 63,
+ 71,232,235, 22, 97, 94,204,196, 70, 94,241,110,124, 81,157,171,225,109,221, 57,251,238, 27,165,230,215,190,105, 30,186,173, 11,
+120, 93,212,167,227,120,103,189, 78,196,204,186,246,106,238, 75,159,213,197,233, 46,222,107,104,166, 24,227,178,244,220,130,162,
+ 44,168, 42,131, 53,254,194,169,132, 32,144,117,184,149,146, 53, 90,121,154,154,103,209,211, 4,172,105, 16,139, 60,211, 9,187,
+217, 73,242,124, 55,254,170,226,122,230, 64, 48,165,243,188,160, 12,116, 24,241,162,192,225,151, 41,233,207,203,229, 95,222,217,
+203,207,107,215,177,206,210,239,247,216,220,218,226,206,103, 31,209,233,164, 28, 29,159, 34, 38, 67,142,159,239,178,178,117,137,
+222,211,156,178, 24,242,224,209, 93,190,254,141,223,224,223,254,187,127,203,229,213, 54,175,191,241, 22,185,117,252,248,189,247,
+ 48,227, 83,146, 52,101,103,127,192,229,173, 46,110,251, 33,215,111,221,224,227,207, 62,101, 69, 71, 60,122,246,140, 48, 10,249,
+173,223,248, 45,190,255,227,247, 72,219, 75, 4,161, 96, 99, 99,137, 15, 63,126,159, 48,138,120,227, 75, 95,226,234,228, 54,255,
+250,207,255, 45, 34,140,144, 74,113,249,242, 21,170,108,194,112, 52,228,241,211,109,255,112, 51,149,239, 10, 2, 72,219, 29, 54,
+183, 46,210, 59,220,227,195,247,126,232,189,182, 65, 64, 86,248,189,239,218,202, 26, 23,183,214,249,222, 15, 31,211,108,182, 56,
+ 58,238, 51, 41,188,151, 91, 42,229,195, 23,132,230,242,214, 37, 92, 89,242,116,251, 49,206, 24,142,123,167,132,105,130, 83,129,
+ 63,113,202, 23, 73, 77,127,215, 29,251,223, 57,236, 5,137, 53, 26,167, 3, 90,237, 85, 86,215, 55, 24, 31, 62, 71, 9, 63,134,
+106,183,219,252,175,254,203,255, 5, 7, 39, 71,236,237,237,161, 75,195, 68,150,172, 92,190,232, 61,248, 31,191, 79, 26,133,168,
+178,226,100,255,136,157,103, 59,228,121, 65,137, 97,255,176,199,104,180,207, 91,239,124, 25,169, 29, 90,197, 60,120,120,151, 94,
+239,152, 27, 55,110,176, 62,206,184,114,237, 58,227,193,169, 23,230, 37, 49,101, 85, 49,201, 11,130, 48, 37,212,154,238,242, 18,
+131,225,128,143,159,125,204, 27,111,190,197,201,225, 17,130,146, 60,243,225, 29,206, 20,140, 71, 67,210,102,155,170, 44, 9,116,
+ 64,101,124,135, 55, 49, 25,205, 36, 70, 40,205,213,203, 87,216, 61, 60,166,202,114, 2, 41,209,210,210,109, 55,217, 92,189,205,
+227,237, 71,236, 31,157,130,142, 41, 10,195,112, 60,102,146,101,180, 91, 13,239, 41,119, 37,224,136,181, 36,136, 3,202, 73,142,
+ 84,138,110,167, 67, 62,153,248,145, 92,146, 82,230, 57,147,241, 24, 99,125,108,107,167,219,225,227, 79, 62, 37,137, 3, 86, 91,
+ 9,161, 22, 52,210,168, 22,116,105, 63, 10,204,199,148,166, 36, 12, 67,172, 49, 68, 65,200, 68, 7, 12, 70,125, 78,143, 79,102,
+196,191, 34,175,232,245,188, 37,112,101,181,203, 36,203,144, 74, 32,195,168,102,248,199, 84,101,142, 49,134, 32, 44,145,166, 36,
+ 27, 78,136,116,200,120,216,167,219, 72,248,189,223,248, 42,159,222,187,203, 94,111,215,167,166,105, 77,110, 44,129,246,187,103,
+ 21, 4, 12, 70, 5, 50, 47, 73,147,128,202, 81, 79, 20, 65, 11,133, 42,203,218,210,104,189,167, 94, 8,134,131,156, 59,119, 30,
+115,235,245,139,168, 78,138,196, 33,170,186, 43, 52, 10, 53,219, 41,218,218,255,124, 14, 67, 42, 61,110, 88,232, 0,166, 59, 97,
+ 41, 61,181,218,122, 92,114, 16, 42,130,200, 31,158, 4,198,135, 86,105,233, 19,215,116, 0,210,239,208,125,196,149,170, 3,178,
+ 36, 86, 75,191, 57,151,245, 58,210, 56,242,113,193,119,190,249, 61, 30,124,246,128,165,165,101, 78, 38, 39,116,155, 77,164, 82,
+ 32, 28,113, 18, 19, 7,138,209, 48,163,172, 74,162, 72, 80,153,130,170,200, 17,132,228,185, 97,115,115,195,187, 28, 76,197,201,
+225, 1, 54,109, 16, 8, 8,194, 16, 35, 36, 75,107, 27,132,113, 74, 18,167, 62,143, 93,131,118, 14, 91, 85,232, 64,215, 66, 45,
+ 77, 96,173, 95,111,219,243, 69,125,174, 61,176,198, 98,172, 47,129, 74,121, 29,150, 87,185, 75,162, 56, 36,140,130, 89, 32,211,
+153, 40,229,250,235,205,174, 35,117, 77,152, 22,233, 69,102,165,157,238,219,103,188,254,179,234,181,122,142, 92,167,112, 58,102,
+108,153, 90, 51,229,234, 3,193,249, 14,253,252,203,105,227, 56, 21,203,205,225, 49,117, 71,111,234, 34,237,103,240,224,132,183,
+177,213,157,185, 96,161,168, 79,109,112,214,226,168,139,117, 77,128,243,205,123, 45,144,155,146, 11,207,216,191, 22,166,221,162,
+190, 63, 42, 63,197, 48,198,213,177,170,149,135, 18,213, 63,231,212, 94, 57, 69,243,158,229,223,131,122,243,230,133, 63,155, 70,
+240,169, 26,166, 47,165, 64, 77,233, 93, 11,190,197, 23,111,204, 62,254,252, 77,212, 24,208,249,219, 83,116,171, 59, 35,196,155,
+130,253, 95,245,117, 94,122,171,127, 41, 89,139, 34,149, 60,247,115, 75,249,138,207,245, 15, 70, 91, 26,110,222,184,198,100,212,
+167, 42, 38, 20,227, 49, 85, 97,121,178,179,195, 63,250,167,255,132,163,163, 62,150, 10, 25, 57,250,187,187,188,245,214,219,244,
+250,167,188,113,235, 38,131,254,128,195,253,125,191,187, 8, 34, 6,147,130,168,145, 34, 48,108,110,172,147,229, 19,168, 12, 73,
+ 18, 51, 30,141, 25, 14, 71, 92,121,227, 77,190,253,183,223,103, 56, 30,177,187,183,203,179,221,231, 4,113,204, 32, 47, 40,138,
+138,253,103, 79, 89, 89, 93,227,247,127,239, 15,216,126,244,152,229,165, 46, 63,250,201,143,216, 63, 58,172, 31,222, 62, 72,192,
+ 57,201,149,155,111,241,238,151,191,198,221,247,127,198,253, 79, 63,172,179,181, 59, 44,173,108,209, 93,222,228,250,245, 27,164,
+ 50, 99,231,206,207,112, 2,182,247, 78, 56, 26,229, 84, 40,148, 10, 60,119,221, 41,254,248,143,254, 1,235,237, 22,191,248,209,
+247,232, 31,237,209, 72, 99, 54,175, 94,160, 16, 14, 35,167, 84,191, 87,163, 24,127, 85, 6,243,203, 14,123, 82,202, 25,243, 61,
+168, 73,114, 62,146, 49, 68,171,132, 80, 37,104,169,232, 52, 99,122,167,135,228, 85,198,112,148,241,238, 59,111,242,246, 27,215,
+ 57, 62, 62,102, 52,169,232, 52, 27,188,253,133,215, 81,105,155, 94, 54, 33,203, 38,252,252,199, 63,227,224,201, 30, 79,238,111,
+115,124,124,196,254,233, 9, 63,250,249, 7,124,240,201, 35,194,184,197,181,171, 55,216,222,126,194,100, 52,166,221,106,147,198,
+ 9, 58, 12,177,166,164,119,124, 72, 39,137, 48,197, 4,172,101, 82,148, 20,149,143,171,117,245,147,108, 48, 24,179,186,178,202,
+234,202,106, 61,217,242,163, 89, 83,228,100,147, 17,166, 42, 57,216,219,101,121,169,131,198, 32,108,129, 51, 5,189,147, 99,198,
+163, 9,167, 39, 3, 70,227, 9,161, 10, 81, 86,144,143,135, 30, 33, 42, 43,130, 64,209, 93, 94,162, 40, 13,214,121, 81,206,227,
+199,219,148,121, 81,163, 55,149, 15, 66, 81, 2, 41, 44, 90,122,223,111, 62,201, 16,206, 81,228, 5,195,225,152, 80,107,146, 36,
+161, 42, 75, 78, 79, 78, 24, 14, 6,116, 90, 77, 6,253, 30,119, 62,249,152,110,171, 53,139,193, 76,210,184,190, 64,123, 60,104,
+ 89,100,184,170, 68, 74, 73, 81, 20,196, 81,138, 67,178,253,228, 41,205,102,131, 80, 9,108,229,161, 25, 30,215, 6,113, 24, 35,
+145, 32, 52, 73,167, 51, 27, 65,122, 75,167, 65, 84, 21,186,102, 83, 7, 58,100,116,124, 76,163, 17,115,229,218,101,126,241,139,
+ 15, 72,162, 8, 33, 4,163,225,164, 30,107,107,162,200,199,140, 22,198, 17,134,186,198,180, 8, 10,107, 40,149,100,108, 45,133,
+241,240,152,166, 0,141, 35,210, 14,132,161, 55,236,147,164, 1, 73, 20,214,141,138,143,147,152, 61, 6, 37,245,158, 87,121,109,
+ 66, 93, 44,148, 86, 4,181,216,107,102,197, 82,218,171,210,103,163,105,129,172,223,175,117,128, 10, 2,132,146, 62, 56, 37,136,
+144, 58,192, 9, 89,103,146,187, 25, 53,108,166, 51,114, 2, 87, 9, 6,253,140,127,251,175,255, 45, 71,123, 39,152,202, 17,167,
+ 77, 42,231, 72, 27, 13,100, 16, 32, 48, 52, 27, 1,221,110,147,178,200, 40,202,140, 32, 84, 68, 73,236,109,106, 81,204,104,156,
+147, 54,218,180, 90,109,112,142,126,175, 71,149, 77, 8,149,100,208,239,209, 27, 14,217,184,124,149,205,107,215,136, 91,157,250,
+ 0,195, 76,173,205,180,147,156, 22,195,218, 23,174, 85,157,138, 40,228, 66, 64,150, 56, 67, 76,147,210, 79, 4,124,110, 67, 64,
+ 28,249, 64,166,121, 40, 83, 80,167, 40,250,251, 80,200, 5,255,182, 57,227, 23,171,193, 44,246, 44,164,170,126, 60, 82, 11,239,
+164,242,180,180, 89,120, 87, 93,232, 93,109, 57,116,181, 45,208, 57,139, 39,162,219, 58,179,194,206, 59,113,225, 22, 90,249,154,
+ 20,231,252, 4,197, 85, 21,182,242,246, 50, 83, 21, 24, 83,249, 48, 31, 83,205,187,254,122,154,232,191, 76,253,115,215, 36, 66,
+166,163,115,103,112,174,154,117,238, 56,131,168,247,235,206, 26,172, 55, 23,215,117,208,205,114, 74,196, 2,201,206, 24, 40, 75,
+ 67,158, 87,140,179,156, 73, 94, 80, 84,134,178,242, 95, 83, 74, 49,187,223,163, 48, 34, 8, 2, 63, 29, 81, 26,132,168, 59,117,
+ 41, 17,142,153,144,100,126, 1,118,204,115,234,231, 34,186,197,208,122,113,174,115, 94, 28,157,191,176, 83,151,206,143,221, 61,
+ 97,246,156,117,109,126,210, 16,139, 10,188, 23, 44,115,188, 52,153,231,151, 9,229,234, 24, 39,172,117,228,101, 73,111, 48,224,
+214,237,155, 28,239, 63,103,107,179,205,157,207,142,152,100,123,252,205, 95,125,155,215,222,122,135,159,253,100,159,173,205,117,
+118,239, 63,162,215,235,241,149, 95,251, 26,219, 79,182,249,228,147,187, 36, 81,200, 59, 95,252, 18,223,250,171,191, 97,121,125,
+139,201,100,194,175,255,238,239,241,173,111,126,139,110,156, 50,210, 57,178, 84,196,237, 22,187, 7, 7,116,175,104, 58, 75, 43,
+252,233,159,252, 3,222,255,233,123, 12,122, 61,134, 69, 70, 20,199,252,224,111,191, 79,138,228,205,155,175,241,239,255,221,159,
+115,249,210,101,242, 44,227,209,227,199, 51,239,130,178, 22,229,192, 56, 65,165, 82,158, 60,219,231,238, 71, 63, 39, 31, 13, 17,
+ 66, 33, 80,100,149, 36, 76,219,164,129,100,231,222, 71,228,147, 17,174,217,101,156, 59, 74, 35,137,226,200,147,176, 84, 64,148,
+180,248,202,187, 95,226,206,251,191,192, 20, 25, 97, 20,176,117,121,139,220, 21,160, 37,214,189,156,233,240, 31,210,169,255, 50,
+208,208,153, 39, 50, 6, 39, 11, 63, 6, 68,209,236, 94,160,187,113,141,231,251, 71,188,245,198, 5, 26,137,162,127,124,204, 74,
+167,139, 8, 74, 78, 15,159,240, 23,255,230,125,210,181, 11,220,127,126,204,251, 31,126,200,241,193, 49,163, 65,129,181,158, 87,
+221,207,114,194, 56, 98,148, 87,188,245,238, 87,217,188,180,197,104,120,204,206,227,135, 72,155, 82,230, 25,207,247,119,137, 34,
+205,214,234, 18,189,131,103, 68,113,236, 45, 91, 50,196,212,207, 50,169, 3,170,202, 80,228, 5, 27, 27,107, 20,121,134,192,146,
+132, 1, 97,183,141, 45, 51,158,237, 28,112,176,191, 75,150,231,104, 5,171, 43, 43, 28, 31, 30,242,108,103,135, 40,136, 88, 90,
+ 93,167,189,180, 66, 94, 9,174, 94,187, 73,183,217,196,149, 21,249,120,200, 36,180,132,161,162, 25, 46,211,108,117,233, 44,175,
+ 32,165,226,228,232,136, 7,247,238, 50, 25,246, 88, 91,233,210,105, 37,190,192, 7,190,179,212, 82, 98,157, 79,239, 75,226, 4,
+ 55,158, 48, 25, 13, 81, 74, 16,169,128,149, 78,155,202, 24,130, 72,241,165,183,223,224,224,249, 14,219, 79,119,136,211,152,188,
+240, 99,189, 48,244,207,125,107, 12,178, 22,238, 20,165, 69, 72, 69, 86, 11,216, 42, 43,208, 97, 68,212, 8,235, 52,192, 0, 81,
+227, 69,199,185,247,238, 98, 11,170,163, 67,226, 52,241,177, 67, 14,162, 40,194,150, 21,121, 94,161,162,148,236,100, 56, 75, 78,
+188,121,229, 2,255,252, 79,255, 17,255,135,255,243,255,157, 72, 9,100,160, 25,100, 21, 86, 24,116, 85, 98, 37, 84, 22,198,149,
+ 87, 32, 43,169, 61,174,213, 26,130, 58,182,179,172,163, 54,168,119,141,129, 6, 41, 45, 79,158, 62,199,150, 5,155,171, 43, 30,
+121,106, 12, 66, 58,164,116,216, 74,160,116,133,160, 66,184,170,110, 4, 37,206, 84, 20,121,129,214,194, 31, 36, 42,227,187,230,
+133, 0, 19,107, 61,239,161, 50,118,238,111, 87,178, 46, 58, 1, 66,250, 29,181, 43,202, 5,145, 85,221, 12, 90,143, 55,222,223,
+ 57,224, 7,223,253, 49,195,147, 9,101,105,145, 50, 96,146,231,232, 48,194, 8,137,194, 18,134, 1,163,201,132,110, 55,246,143,
+223,113,189,218,178, 21, 56,141,173, 74, 58,173,148,253,253,103,220,190,253, 22,105,154, 50,122, 56, 32,114, 21, 89,239,148, 56,
+ 12, 81,105, 74, 99,109,133,180,187, 68, 24,198,148,166,168,119,217, 22, 93, 25,156,209, 88,109, 48, 65, 80,219, 73, 61, 80,102,
+ 54,173,181,182, 94, 31,248, 78, 52, 8,106, 49,157,172,119,198,181,123, 65, 43, 53,235,208, 61, 18,118,158,153,238,167,192,243,
+ 48,146,233, 56,123,122,144, 16, 47,185,166, 76,213,241,214, 58,168, 12, 86, 25,132,177,160,106,225,162,240,149,103,198, 81,183,
+231,186,243, 26, 97,107,207, 67,173, 22,246,231,114,166,211,171, 5,109,166,170, 33, 48, 37,212, 93,186, 47,214,211,172,120, 47,
+204,196, 10,132,171, 94, 16, 2, 76,149,246, 82,184,249, 4, 1, 87, 31, 50,168, 29, 20, 83,138,157,123,193, 6,108,107, 98,157,
+169,124, 30, 73, 94, 26,138,178, 34, 47, 74, 95,204,167,171, 8, 41,106,119,129,246,135,158, 89,114,155,255,122,149,113,168,119,
+110, 93,252, 51,175,128,175,187,241,197,174, 92,248,174, 96,222,181, 79,187, 97, 81,171, 75,229, 12,232, 63,253,220,197,156,115,
+185,192,238, 21,117,136,200,226,215,153,125,173,233,235, 11, 57,187, 74,202, 51, 31,179,248, 62,113,238,227, 85,157,144,228,191,
+167,247, 74,122, 62,243,185,201,130,192,159, 26, 61,141,153,171,151, 47,113,176,255,156,195,253, 3,172,113,196, 73,200,147,237,
+103,124,245, 15,126, 15,107, 42, 78,158,238,240, 71,255,240,239,243,253, 31,254, 24, 37,180,167,139,125,122,143,215,110,223,228,
+240,168,207,133,107, 55,248,249,135, 31,113,220, 59,229,209,179,231, 92,191,113,147,193,104,194,205,215,223,228,189,247,223,231,
+ 43,191,254,155, 52,218,203,116,151, 87, 57, 62, 60,100,116,114,204,224,244,132,175,127,229,215, 8,195,144,251,247, 31, 18,171,
+136,215,111,222, 98,105,109,141,222,176,207, 55,126,227, 27,252,187, 63,255,239, 25, 78,198, 51, 86,123,168,188,157,198,201,144,
+225,184,224,249,211,109,220,100, 64,127, 56,194, 74, 13, 42,160,176,154,165,118,135, 43, 43, 41, 31,255,228, 59, 72,105, 25, 91,
+205,246,254, 41,153,161, 78,101,147,132, 65,202,229,203, 55,248,227, 63,252, 67,190,253,231,255,134,227, 3,223, 85, 46, 45, 47,
+145, 59, 67,238,124,230,183, 64,254,210,162,252, 42, 59,227,231,233, 26,166,143, 47, 29,212,226,158, 96,126,170, 15, 66, 65, 16,
+120,149,179, 16, 10, 33, 21,173, 86,155,123,119,238,211,109,182,104, 45, 45,145, 70, 33,205,214, 18,107,235,235, 52, 84,201,238,
+163, 79,185,255,224, 17,255,254,175,127,206,195,231,167,216,180,201,195,163, 62, 71,121,193,216, 56,176,130, 86,146, 50,170, 74,
+ 94,187,125,157,175,124,233,117, 92, 49,228,248,224, 57,195,225, 41,227,209,136,222,233, 41, 90, 10,134,189, 19,150,218, 77, 86,
+151,150,112,206, 50,153,100, 72, 44,113,160, 8,181,164,200,114, 78,143, 14,105, 38, 9,249,176,207,120,112, 90, 91,217, 38,140,
+198, 99,239,171, 14, 67,170,162,100,123,251, 17,143, 31, 61,226,112,239,128, 86,171,205,218,198, 38,198, 66, 89, 57,172, 19,252,
+226, 23,191,160,219,106,146,196, 1,214,249,139,109,218,104, 80, 25,232, 15, 38,116,218,109,170,124, 66, 18,133, 92,220,218, 98,
+127,127,151,124, 60,166,213,104, 32,149,223,167, 89,107, 41,138,114, 78,223, 18, 18,231,224,228,228, 4,132,160,172, 10,175,109,
+168, 59,162, 52,137,185,114,229, 50, 31,124,240, 49, 39, 39, 39,180,219, 77,186,157, 54,129, 14,208, 74,131, 3, 29,106, 38,131,
+190, 39, 15, 74,143, 47,213,161, 38, 77, 83, 90,173, 6, 97,172, 80,161, 34,105,196,126, 12, 29, 4, 80, 11,116, 26,205, 70, 61,
+158,207,145, 14,148, 0, 83,148,216,178,228,180,119,202,225,193, 17,166,178,100,227, 9, 65,232, 35,100,187,157, 37,126,246,179,
+143, 57, 60,233, 81, 56,193,160,240,227,201, 40, 84,228,149,161,172,179,181, 99,237,193, 39, 86,120,169, 86,233, 32, 51,254,114,
+217, 18,130, 72, 66,164, 5, 58, 0, 25,128,212,142,188,204, 49,149, 33, 73, 18, 2,173,106, 10,230, 20, 47, 90, 35,135,241,169,
+ 86, 2, 63, 34,245, 96, 30, 57,215, 23,213,120,102, 95,224,204, 76, 82, 45, 22, 68, 86,162,190, 6, 89,231,144, 78,248, 90, 80,
+121,255,241,116,108,237,172,196,217,128, 59,119, 31,241,237,111,125,143,108, 82, 1,138,178,112, 88, 36,133, 49,180,187,203, 20,
+ 85, 69, 28,105,154,173,148,178,204,208,218,107,129,180,242,247,103, 16,249, 24, 85, 33, 37, 81,156, 98,173, 32, 74,155,180,187,
+ 75,152,170, 98,220, 59, 98, 60, 28,145, 87,150, 66, 72, 46,220,188,201,210,198, 70,237,157,159,239,111,125,135,238,139,150,152,
+118,208,178, 14,122, 82,178, 22, 99,201,133, 36, 53,113,102, 76, 44,132,168,237,106,154, 32,244,222,253,197,248,100,143,134, 85,
+245, 42, 65,212,123,103, 63,225,153,130, 89, 48,182, 30,190,219, 51, 1, 98,243, 68, 54,191, 14,145,114,138,140, 21, 11,194, 44,
+ 59, 27,121, 51,227,166,251,174,216,213,246,177,233,239,231, 63,102,218, 85,219,250,230, 81,194,174,238,160,157,245, 0, 24, 87,
+249,194,110,109,181,240,241,117,218, 95, 93,203,212,116,226, 88, 95,207,212,130,213, 78, 10,255,120, 16, 44,140,242,103,106,122,
+127,208,176,118, 58, 45,153,255, 56,206, 58,140, 1, 83, 89,223,165, 23, 21,227, 73,193, 56, 47, 40, 42, 75,101,234,248,215, 41,
+ 83, 65,201, 89,135,111,141,165,172, 12, 69,229,247,239,234,157,215, 46,253,153, 84,226,236, 24, 91, 76, 9,101, 98, 94,236,229,
+139, 24,193,249,120, 93,190, 80,148,117, 93,244,117, 93, 76,103, 95,179,126,125, 42,158,152,127,158, 90, 64, 21, 78,227, 54, 23,
+255, 93,204,254,205,167,119,249,226,173,228,252, 99,212,194,207,177, 88,240,167, 55, 61, 85,100, 42,141, 49,150, 70, 35,161,221,
+110,240,217,167,119,252, 88,222, 58, 26, 65,200, 47, 62,254,132,127,240,247,255, 33,207,158,236, 82, 74,193,229, 75, 23,184,123,
+127,155, 79,238,220,227,181, 27, 87, 57, 62, 62,225,233,254, 49,119, 31,110, 99,172,229,127,246, 63,255, 19,238,221,127, 64, 28,
+198,136, 80,147, 4, 49,207, 78,142,233,245, 7, 4,113,196, 79,126,242, 99,110, 92,185,204,195,123,119,185,117,235, 54,159,125,
+118,135, 79, 62,187,195,133,205, 13,222,253,210,151,184,121,235, 53,142,135, 61, 90, 75, 29, 62,249,236, 19, 30, 63,126, 92,167,
+239,120,209, 83, 20,196,232, 32,225,198,245,155,148,227, 33,161, 52, 28, 29, 31,145, 89, 7, 65,136, 14, 20, 42, 72,184,118,113,
+139, 85,157,243,244,254,135,140, 42,195,209,168,224,104,152,225,116,140,148,138, 56,140,137,194,148,223,249,157, 63,228,194,202,
+ 18, 63,253,254,119, 72,162,136, 86,171,193,164,200, 16, 74, 81,214,223,247,151,133,183,252, 42,227,247,151,233, 45,206, 20,245,
+ 32,152,141,145,130, 96,186,143,147,117, 88,139,196, 74,229,199,155,166,162, 21, 37,172,111,173,209,110,182, 8,162, 22,151,174,
+223,226, 23, 63,255, 17,207,158, 61,229,147, 71, 7,124,186, 51, 32, 19,146,147, 73, 78,102, 28,102, 26, 92, 3, 4, 97,194,164,
+ 44,176,197,132, 47,189,113, 3, 81,142,216,219,121,194,163, 7,143,217,219, 63, 97,101,101,137,165, 78,155,118,187, 69, 85, 85,
+220,127,240,128,231,207,118,200,134, 61,170,108,132,173, 50,182, 31, 62,228,195,247,127,193,222,179,103,116, 26, 49,197,100,192,
+224,228,144,113,150,131, 10,216,220,186,192,107,111,126,129,205,205, 45, 58,221, 14, 91, 27, 27,172,174,174,177,186,190,133, 19,
+138,193, 56, 99,105,117,157,102,103,137, 48,142, 57, 58, 62,230, 39,239,253,128,188,152,144, 23, 5, 66, 40,154,173, 46, 78, 72,
+ 30,111, 63,225,217,211,109, 30, 61,184,203,253,187,119, 25, 14, 6,116,219,109,174, 94,185, 66,156,196, 52, 26, 13,194, 32,164,
+ 52,134,147, 94,223, 11,220,234,156,101,103, 45,141, 86,139, 48,138,121,250,116,135,193,176, 79,167,211, 66, 41,137,169, 10,223,
+213,200,144,209,104, 76, 24, 6, 36,113, 76, 24, 6,254,185, 36,132, 15, 6,170, 59,161,180,145,122,202,152, 20, 52,146,216, 71,
+ 21,103, 99,194, 58,160, 99, 58, 54,157, 30, 26, 68,221,209, 4, 82,122,223,180, 14,209, 81,140, 51,142,180,217, 70, 69, 41,207,
+182,119,188,119,186,225, 35,111,145, 1, 74, 5,124,239,199, 63,198,133, 49,167,227, 28,128, 68,251, 68,198, 97, 97, 9,148, 38,
+ 9,148, 31,125,214, 30, 94,131,100, 82, 57, 74,235,104, 1,177,148,132,210,213, 69,221, 33,180, 64,105, 73,101, 28,227, 73, 78,
+156,196, 68, 97, 88, 31,232,235,105,160,181, 94,233,239,124,177,169,202,130,170, 44,102,160, 25,137,155, 93,212, 93,229, 9,135,
+202,219, 51,188, 56,169,238, 8,197,212,155,108,124,151,235,140, 47, 20,170,198,155, 90, 3,101, 33,248,230, 95,126,151,159,254,
+228, 99,156, 11,169, 74,139, 19,138, 44, 43,144, 58, 32,175, 42, 90,237, 14,167,189, 30,113,172,105,119,155, 68,113, 64, 94,140,
+233,118, 91, 8, 12, 85,145,225,156,245, 99,127,237,197,125,141,118,135, 81, 86,208,104,119, 72, 27, 13,246,158, 63,161, 42, 13,
+195, 97, 70,123,109,157,245,107, 87,105,173,174,248, 48, 27,124,138,163, 88,240, 85,139, 51,227,247,186, 41,154,238,194,229, 66,
+212,169, 91, 20,188,214,227,119,229, 11,122, 24,132, 68, 97,176, 80,208, 3, 47,216,156, 34,200,103,246,184, 26,139, 90, 23,201,
+185, 76,214,157, 3,150,213, 10, 27, 89, 7,240,212,217, 0,211, 40, 85, 55,251,187,204,249,233,204,248,233, 21,118, 22,206,179,
+112,179,139, 5,221,212, 34, 54,255,249,182,126,191,171, 45,101,166,254, 26,211,189,186,172,215, 13, 98, 90,195, 88,160,226,213,
+169,151, 78,184, 90,103, 87,119,221,117,170,175,183,232,214, 58, 50,231,124,218,175,117, 51,150,252,116, 21, 98,140, 23,185,149,
+165, 37, 47, 42,178,172,168, 71,239, 21,165,113, 84,117,168,140,146,126, 69, 52,173,149, 2,127, 32,168,172, 63, 52, 84,149, 69,
+125,241,245,203,127,166,106, 74,207,244,143,160,234,144,141,121, 23,237, 79, 77,234,133,253,186,127, 16,204,119,240,243,155, 58,
+119, 0, 56, 3,165,153,125,238,217, 61,248,226,247, 83,139, 7,138,115, 63,203,217,151,103, 15, 19,243,195,128,172,247,245,231,
+ 52, 0, 74,123,255,170,115, 20,101,198,213,171, 87,217,222,126,202,254,222, 33,166,172, 24, 79, 50, 38, 39,125, 14,143,122,124,
+245,119,255, 39,252,224,251, 63, 32,160,224,181, 47,188,131, 69,243,248,193,125,178, 44,163,189,178,193,202,198, 22,237, 78,147,
+227,131,231, 12, 6, 3, 2, 37,217,121,242,132, 36,137,232,116, 59, 52, 59, 77, 30, 61,121, 72, 40, 36, 56,203,214,165,203, 28,
+158,158,242,112,251, 9,221,229, 46,127,244,247,126, 31, 83, 85,252,236,253,143,232,141, 71,200, 64,243,195, 31,254,112,118,250,
+215, 58, 32,196, 33,100, 72,148,118,105, 37, 9,121,127, 31,103,114, 78,199, 25,185, 10,188, 15, 20, 75,210,104,242,246,173, 27,
+244,159,124,198,184,119, 68, 25, 52,216, 31,140,201,140, 32, 72, 26, 68, 81, 66, 18, 39,164,105,139, 63,253,211,127,198,243, 71,
+247,249,236,131,159,215,105,110,245,190, 74,107,170,202,204,236, 48,191,220,247, 47, 94, 10, 28, 58, 63, 81,251,149,139,186,142,
+208, 42, 38,144,190,171, 48, 18,178, 98,204,163, 59,159,208, 80,130, 11,151,215, 41,242,146,181, 11, 55, 24, 84,146,143,238,124,
+198,223,190,247, 17,191,120, 60,164,143,162, 16, 22, 99,252,138, 71,214, 74, 90, 35, 28, 85,189,251, 85,182, 36,116, 5,235,157,
+ 6, 71,187,123,124,246,217, 99,246, 14,198,116,218, 49,157, 78,139,139,151,174,176,186,190,201,105,239,148,157,237, 7,148,227,
+ 30,143,239,127,202, 71, 31,188,207,100, 56, 68, 90, 88, 95, 89, 70, 99, 56,220,219, 33,159, 12, 72, 58,203, 92,187,249, 58,183,
+ 94,127,147,253,163, 99,142, 79, 78,125,154, 94, 16, 50, 24,142,177, 78,209,238, 46,211, 94, 90, 97,117, 99,147,180,213, 38, 73,
+ 27, 92,191,121,157, 27, 55,175,176,177,185, 65,154, 52, 73, 27, 93,198,163,156,253,131, 67,214,214,215, 88, 89,106,209,109,166,
+ 92,188,120,145,131,253, 3,126,254,179,159, 51, 26,143,235,204,249, 4,156,224,201,211,103,148,198,146, 52, 26, 40,169,106, 65,
+152, 97,146, 23, 84,149, 37,140,162, 89,147,229,247,186, 94, 57, 95, 84,158, 11,222,237,180, 57, 62, 62,162,217,104,176,212,233,
+ 32,133,164, 40,114, 78, 79, 78,234,195,149,164, 50, 37,214, 20,128, 33, 84,146,124, 48, 36, 27,141, 80, 24,108, 89,224,170,138,
+ 36,246, 86,202, 60,207,200,198, 99,164, 80, 56,227, 24, 14, 70, 76,198, 25, 50, 8, 40, 75,131,214, 33,141, 86,155, 86,103,137,
+245,203,151,136,210, 6,157,165, 21,110,191,249, 14,223,255,225,247,249,244,209, 51, 50,227,109, 87,177,242, 69,103, 88,122, 39,
+ 65, 36,220,172,195,210, 82, 97,145,100,214, 81, 24, 75, 3, 65, 34, 64, 11, 75, 24, 8,100, 32, 16,218,211,219,116, 16, 83, 57,
+193,112, 56, 36, 14, 67,226, 40,240,201,127,194, 91,172, 36,118,118,225,183,149, 47,236,214,122, 14,253, 52, 73,203, 23,245,122,
+ 52, 91,243,191,125, 33,177,245,219, 85, 13, 35,113, 84,101, 85,135, 14,249,107, 86, 85, 25,202,210,241,175,254,213,127,207,119,
+255,230, 39,116, 90, 27, 12, 71,185,183,237, 25, 63,105, 17,245,245, 53, 73, 82, 14,142, 14,105,181, 34,132,180,116,151, 58, 12,
+134, 61,194,192, 91, 46,173, 41,168, 76, 69, 16, 70,104, 29,225,132, 34,140, 18,140, 80, 32, 21,221,181, 85,202, 98,204,100,232,
+181, 27, 27, 87,174,178,121,227, 58,186,153,214, 53,217,206, 83,196,166,123,109, 59,183,114,249, 66,186,224, 99,159,197, 26,207,
+226,206,102, 91,209,169,234, 61, 8,207, 63,135,235,209,176,154, 95,251,103, 22,177,170,242,171, 9,107,102, 99,119, 95, 28, 23,
+147,219, 22, 3,194,252,253, 50, 29,183, 51,109,212,107,251,152,179,190,219,247,252,116, 59, 47,196,179,151,182, 30,165,207,133,
+111,211,223,247,172,183,220, 64, 85,157, 59, 20,248,191,189,172, 5,125,242, 37, 48, 54,183, 88,208,167, 7,151,154,144, 55,179,
+198, 89, 48,214,214,233,108,174,254,246,238,108, 58,107,173, 90,175,140,165,168, 42,138,188,100,146,229,140,198, 57,121, 81, 11,
+228,132, 68,235,105, 60,117, 52, 79,190, 83,114,142,211, 21, 10,135, 64,203,169,103, 83,190, 24,210, 34,167, 41, 71,139,119,246,
+212,235, 57,243,178,191, 60, 80,101,113,148,114, 94, 61,253,178,221,236, 98,145,112,231,236,112, 11, 25,171,243,127,249, 37, 94,
+245,151, 22,163,122,255,236,207,170,146,178,178, 60,217,217,229, 27,191,249, 59, 28, 31,246, 56, 58,216,243, 42,115, 35,185,247,
+209,135,196,203, 43,252,254, 31,252, 1,223,249,246,191,227,198, 23, 90, 8, 41, 89,218,188,192,189, 59,247,201,212, 49, 95,189,
+113,139,189,231,219,180,147, 24,181,181,206,227, 39,207,216, 88, 89,225,195, 79, 62, 70, 7, 33, 27,151, 47,147,164, 13, 46,174,
+174,242,232,225, 67,158, 60,127,198,104, 52,228,141,215, 95, 99,115,125,141,159,127,240, 1, 82, 6,172, 93,216,162,112,134,127,
+255,205,191,240, 86, 23, 4,113, 16, 81, 90,139,208, 17,101, 94,210, 93, 15, 25,103, 61,150,149,226,116, 56,164,130,217,254, 59,
+140,154,172,116, 58, 44, 37, 1,119, 14,119,145, 58, 32, 43, 13,167,163,140, 48,237, 16, 68, 1, 50,148, 20,165,229,234,250, 69,
+174, 92,218,224,131,239,254,247, 40, 12,163,222, 9,221,230, 38,141, 78,147,147,241,192,159,232,221,252,201, 59, 85,138,186, 87,
+ 24, 7,207,253,133,120,249,218,125, 1, 17,251,146,109,186, 91, 80,158, 10, 59,101, 98, 11,134,131, 33,255,250,191,249,151, 68,
+249, 49,205, 27, 91,216,108,131, 60, 87, 4, 73,202,199,247, 31,241,227, 15,238,241,254,246,128,161, 85, 24, 29, 34, 92, 78, 36,
+ 33,148,130,118,179, 65,171,211, 98, 82, 85, 92,187,117,139,189, 39,123,156,238, 61,227, 91,127,243, 51,170, 94, 31, 81, 12, 72,
+ 34,197,250,122, 66,175,215,103, 50, 89,153,193, 27,150,150,150,176,217, 58, 75,237,148,108,220,224,147,207,238,112,113,115,131,
+ 43, 87,174,147,151, 21,198, 85, 4, 67,205,197,205, 75,172, 92,185,197,209,201, 49,221,229,101, 6,189, 94,157,117, 30,208,235,
+ 15, 89,219,188, 64,171,179, 68, 20, 39,140, 38, 25, 75,203, 43,179, 11, 84, 35,141,105,221,184, 72, 18, 37,164, 73,155,214,242,
+ 26,123, 79,159,210,106, 55,176, 46, 67,218, 18,147, 79, 72,155, 77,218,205, 38,215,175, 95, 99, 52, 24,249,195, 99, 32, 73,194,
+ 6, 71,135,167, 44,175,174, 80,230, 21, 34,168, 59,103, 1, 42,212,164,141,148, 52, 77,192, 89, 38,227,145,135, 93, 8,239,104,
+185,125,253, 18,131,147, 67, 30, 60,184, 79,146, 38, 60,124,240,136, 52,142, 89,238,118, 61,207, 62, 74,144, 58,164, 52,214,243,
+168,173,183,110, 13,250, 67,172,149,228,227,146,124,156,209,110, 53, 73,210,132, 42,155, 80, 84, 37,206, 73, 70,163, 17,206, 10,
+116, 16,179,191,127,200, 96, 56,160,217,238,144,196, 17,161, 10, 24, 79,252, 72,218,228, 61, 26,237, 54, 81,179, 67,148, 54,248,
+223,252,239,254,183,124,248, 47,254,215,244,119,142, 48, 14, 38,149,207,138,182, 66, 50,113,160, 10, 67,170, 36, 74,248,139,163,
+ 22, 16,212,249, 43,185,112, 84,194,191, 33, 23,140, 27,190,139, 49, 4,161, 70, 32,120,190,119, 72, 89, 84,108,109,108,120, 76,
+174,112,168,250,176, 99,141,193, 88,111, 5,204,134, 21,167,166,192, 52, 83,170, 48,172,189,233,222,183,110, 43,137, 14,180,207,
+113, 83, 10, 66,141, 43, 53,132, 33,166,168, 80, 65,132,140, 20, 86, 72, 74,107, 40,141,165, 44, 37,251,251,167,228,149,224,184,
+ 63, 70, 74,139, 10, 36,121,101,233,143,198, 44,135, 49, 81, 28,211, 31,143,200,243, 49,198,142,193,133,148,197,132,102,154,112,
+112,176,207,218,146, 15,206,169, 76,137,181,165, 79,241,138, 34,191,199,150,138, 44,159, 96, 77, 73,107,105,157,195,103, 39,132,
+ 97,128, 43, 43, 26,113,130,147, 1, 78,218,185,206,220,129, 11,234,238, 84, 87, 88,163,209,182,222, 85, 59, 53,215, 85, 77,175,
+223, 51, 34,168,245, 33,118,213,252, 57,175,106,165,123,160,188, 87, 90, 46,160,160,157,115, 84,198,167,185, 97,167, 94,237,250,
+ 0, 52, 21,223, 97,231,170,246,105,226,166, 59,187,255,198, 90,132,169,252,110, 90,152, 57,199,127,234, 68,179,115,176,217, 76,
+252,119,142,243, 62,157, 68, 44,106,192, 92,173,227,169, 91,106,127, 64,112,103, 87, 0, 78,184,153, 16,207, 15, 21,166,233,114,
+ 53,123,222, 67, 93,234,251,135, 90,131, 0,214,201,250, 12,106,177, 78,213, 47, 69,237,128, 19, 51, 6,142, 1,156,243, 33, 60,
+101,173,101,201, 42,203, 36, 55,228,165,245,225, 60,245, 74, 36, 8, 52,113, 20,250,117,153,174,155, 89,193,252,123, 59,129, 52,
+ 18, 45,197,180,139,118, 83,188, 46, 82,190,100, 28, 34,206,101,206,214, 74,206, 51,197,216,189, 60, 31,253,124, 97,255, 60,180,
+ 44,224, 5, 9,175,234, 16, 95,129,136,125, 89, 2,220,121, 75,156,227, 44, 34,207, 26, 75, 54, 41,105,173,116,248,226,187, 95,
+228,163, 15,126,204,225,193,200,199,154, 42,195,251,127,251,151, 72, 55,226,107,191,253,123,252,213,183,190, 69, 26,134,252,206,
+ 31,254, 61,122, 89,197,209,254, 1,127,249,205,255,129,165, 36,230,107,239,190,197,205, 75, 27,252,198,151,191,200,113,111,204,
+205, 27,215,216, 61, 60,230,240,228,148,201,112,192,123,143, 30,162,132,160,213,238,240,187,191,245, 13,180, 80, 60,126,252,152,
+ 59,247,238,241, 27,191,245, 91,140,170,156,191,254,235,191,166, 42,203,249,131, 9,136,194, 8,235, 52, 23, 54, 59,244,199,135,
+184,178,100, 43,104,114, 88,148, 8, 37,136, 67,141, 34,164,221,222,228,221,215,223,166,232, 31,146,155,156,220, 58, 14,142, 79,
+ 16, 65,125,186, 11, 37, 81, 43, 36,155,196,252,246,111,253, 62,178,234, 19,139, 49, 49,134,188, 42, 88, 91,234, 48, 9,192, 40,
+111,103,161,178,179,100,162, 57, 30,102, 65, 1, 60,221,175, 77,209,155,139, 92,247,133,221,216,203, 69,113,231, 99, 92, 23,252,
+240, 88,160,196,214,211,158, 70,148,114,101,109,131,167,159, 62, 33,210,150,221,167, 79,217,186,241, 22,143,159, 60,224,241,163,
+135,124,118,255, 9,185, 3, 43, 5,210, 89, 2, 17,178,218, 77, 9,156,225,221,183,223,228,187, 63,124,143, 73, 89,113,122,210,
+103,101,117,157,227,172,194,104,201, 95,255,228, 19, 94,223, 74,185,253,198, 77, 46,222,126,131,221,221,125,198,253, 62,135,135,
+135,172,173, 45, 99,109,133, 17,146, 94,102,200, 10, 71,115,121, 13, 41, 67,170,202, 48, 24, 13,233, 13, 7, 8, 39,201, 10, 71,
+ 89,228, 8, 83,114,188,247,156, 42, 31,211,110, 54,232, 46, 47,147, 54, 90,108,108, 93,152, 93, 16,165,214,156,158, 28,115,114,
+114, 66, 81,148,124,227, 27,223,192, 25, 71,158,151, 24, 59, 70,199, 99,142, 79, 78,136,211,192,231,129, 35, 25, 12,199, 12, 71,
+ 3,172, 49,108,109,109, 16,223,104,146, 13, 79,233,247, 79,217,125,182,207,160, 63, 36,109, 52,104,164, 9, 73, 24,214, 36, 56,
+127, 1,139, 98,141,146,126,226, 3,102, 22,178, 33, 5,216, 98,200,187,239,188, 65,187,213,228,253, 15, 62, 66,169, 8, 33, 21,
+ 78, 56,162, 36, 37,136,188,114, 94, 43, 79, 15,203,199, 19,138,162,240,151,223, 48,161,185,148,120, 37,122, 62,198,140, 10,132,
+246, 86, 41,164, 70,202,128,225,104, 66,171, 25,114, 97, 99,147,125, 37,233, 15,251,108,173, 93,129,170, 98,212,235, 99,170,138,
+138, 24,153, 56,116,216, 64, 52,224,173,219, 87,249, 63,253, 31,255,247,252,211,255,226,191,228,232,228, 4,131,164, 44,253, 85,
+123,104, 10, 80, 26, 87,214,113,148,182,162, 29,134,232,172,194, 10,200,128,170,206, 72,151,206, 33,172, 15,188, 80, 78,160,176,
+ 72, 87,161, 3,255, 59, 30,246, 6,228,165, 97,107, 99,141, 86, 18,130, 43,235,149,131, 64, 9,135, 49,134, 42, 47,153,152, 18,
+ 81,230, 20, 51, 90,151, 7,207, 68, 81,128,214,158,160,102,165,196,150, 1, 65, 24, 33,156, 39,202,137,208, 55, 13,149,169,175,
+167, 72,140, 21, 12, 70, 5,198, 66, 86, 77, 56,220,123,206,230,198, 58, 78, 6,148, 66, 51,177, 80, 21, 5,170,168, 88, 91,239,
+176,188, 20,146, 38, 14, 87,141, 48,101,197,230,250, 6,187,207,159,176,180,212,241, 1, 59,227, 33,113,218, 38,172,159, 53,170,
+ 6,136, 25, 83, 17, 69, 13,162, 36, 69, 5, 18,103,114,100,229, 16, 66, 97,165,159,158,120,229, 63, 72,229,185,253, 66,107,164,
+ 53, 40,171,253,117,231,197, 49, 27,106,225, 26,106,140,153,217,217,168,199,210,114,186, 6,157, 22, 9,231, 41,121,117,164, 27,
+162, 78, 41,155,117,197,206,249,231,172,152,142,176,125, 39,186,120, 13,169,229, 99,245,106,131,121,144,184,144,115,190, 69,157,
+162, 86, 7,140,207, 10,184,125, 73,192,202, 98,113, 18,179, 48, 24, 55,123, 57,181,206, 57, 59,167,182, 33, 60, 8,105, 90,128,
+231, 58,138,121, 45,241,123,126,102, 5,123,218,145,251,141,140,168, 63, 86,204,149, 24,210,130, 85, 32,109, 61,193, 0, 43,235,
+209,187,129,188,116, 76, 10,203,164, 52,254, 49, 45, 21, 82, 11,194, 64,147,198, 33,113, 18,215, 66, 68,253, 66, 96,218,148, 78,
+167,222,125,227,234,159,249,241, 56,179,113,248,249,113,234,226, 46,125,246,246, 57,187,195, 76,196,182,240, 49,175,122,249, 42,
+155,220,236,227,166,251,242,250,228, 55, 35, 19,189,228,243, 62,239,237, 23,222,247,130,213, 77,122,235,210,100,204,237, 91,183,
+ 56, 57, 62,101, 56, 24,131,169, 8,180, 99,117,181,195, 71, 31,125,202,104,144,241,123,191,253,219,220,187,119,151, 52,109,177,
+117,225, 2,101,145,243,229, 47,126,145, 56, 84, 60,186,255,144,163,131, 61, 6,131, 17,143, 31,111,179,251,124,159, 79, 62,185,
+203,100, 50,162,145,164,172, 47,175,178,177,186,206,165,205, 11,108,110,108,210,239, 15,216,222,126,194,215,190,246, 53, 6,163,
+ 49,127,253,189,239, 82,213,148,162, 41, 19,177,170, 42,146, 36,225,194,218, 5,116, 26,208,223,123,206,107,221, 14, 39,253, 62,
+135, 85, 69, 37, 52,206, 42,194, 32,101,185,213,225,237,219,215, 56,222,125,136,115, 5, 71,195, 49,123,253,140, 40, 13, 64, 4,
+168, 40,162,114,146,118,123,149,127,254,159,254,103,156, 62,187,207,193,246, 3,132,117,172,175,175,161,227,144, 97,145, 81,213,
+132, 40, 49,205, 34,158,247,217,231,200,124,175,166, 7,186, 95, 97,175,174,166,163,187,115,150,182, 80,251,241,157,208,126,167,
+174,165,226,210,198, 10,195,147,103, 92,189,188,137,173,224,244,232,128, 79, 63,254,144,191,250,219,159,241,228,104, 64, 41, 66,
+148, 12,105, 37, 49, 27,203,109, 46,109,172,210,140, 67,142, 15,246,107, 60,107,135,229,229, 85,238, 63,124,136,147,138, 73,149,
+131,128,113, 94,241, 47,254,151,255,130,102,119,153,165,149, 53, 54, 47, 92,196, 58,199,157,123,247,216,219,219,103,117,109, 13,
+161, 36,155, 23, 46,176,177,121,137, 39, 59,207, 41, 74,195,113,175,207,218,230, 22, 72,201,193,222, 1, 97, 20, 17,198, 49,199,
+199,199, 52, 27, 45,174, 94,191,142,144, 62, 22, 54, 73, 18,202,178, 96, 52, 26, 81, 86, 37,205,102,147,229,229,101,170,170,196,
+ 90, 67,160,235, 76,120,227, 40,178, 9,187,187, 59,228,217,136,147,163, 3,138,201,132,229,110,151, 52,137,124,178, 26,146, 60,
+203, 24,142, 6,117, 66, 88, 66, 94,102,244,251,167,180, 90, 13,226, 56, 38, 10, 52,113,160, 73, 35,141, 45,115,156,241, 12,244,
+209,112, 76, 54,201,201,139,210,123,149, 5, 40, 29,210,106,119,105,182, 58,124,240,193, 7,132, 97,200,234,250,154, 87,248, 23,
+ 69, 13,159, 81, 53,213,170,194,152,106,182, 58,211, 81, 72,123,115, 29,162,136,254,112,224, 15, 4, 86,224, 80, 68, 81,204,112,
+ 56, 66, 41, 77,158,231,132, 81,192,242, 82,135, 86, 51, 65,107,201,202,198, 6, 74, 11,154,205,148,168,153, 16, 44,119, 65, 43,
+156, 82, 92,186,120,141, 27,183,110,243,239,191,245, 23,104,107,136, 43, 67, 43, 14,201,157, 69, 24,127, 51,245,101, 54, 14, 66,
+ 50, 11,131,170, 34,112,208, 20,130,134,115,132, 90,160, 35,137, 14,167, 22, 86,137, 80,170,222, 67, 7, 72,229,247,253,131, 65,
+ 31,173, 20, 81, 24,213, 86, 79,233,161, 62, 90,251, 14, 8, 31,213, 90, 25,207,146, 47,203, 90,133,108, 37,198,128, 80, 33, 78,
+ 40,156,208, 40,237,105,114, 50, 8,176,194, 71,215,250,108,115,137,181,134,170,114,252,226,231, 31,113,112,120,236,191, 78, 81,
+ 32,157,100,146,149,232, 32,246,209,171,197, 24, 45, 13,166, 26,209,110, 10, 54, 55,215,188,149,173,200,232,180, 91,104, 45, 57,
+ 58, 60, 32,142, 52, 97, 24, 33,164, 38, 78,154, 8, 29,146, 54,155, 76,242, 98, 38,156,171,170,130,209,112, 72,163,213, 66,197,
+ 33,237,149, 21,172,231,180,214,142,174,122,159,238,166, 74,116, 55,155,200,157,191,126, 46, 10, 92,207,215,132,233,222,125,250,
+186, 23,182, 77,139,140,157,227,193,141,169, 81,169,213,108,159, 62,231,159,184, 51, 22,106,199,153, 30,178,254, 25,188, 45,109,
+106,137,243,216,212,106, 38,134,155,237,196,167,249,228, 83,225,155,181,184, 58, 13,205,218, 69, 81,156, 89,192,179,206, 45,117,
+118,102, 67,115,179,183,173,179,179,157,248,140,243,238,196,244, 28,225,253,228,214,205, 10,180, 91,160,207, 81, 31, 0, 22,225,
+105, 78, 44,164,204, 77,179,226,133,160,172, 42,242,194,115, 49, 38,147,140,178,168,252, 40, 93, 43,162, 40,162,145,198, 52,154,
+ 62,151, 34, 77, 19,175, 17,137,194,217,181, 51, 8,194, 89,177,215,103,194, 91,102,133,240,229,193, 44,231,255, 77,184, 87,195,
+104, 88,132,137, 77, 67, 61,156,152,157,195,188,175,117,126, 34, 58, 59,226,159,219,230,156, 59,155,202,230,156,120, 65,141, 41,
+ 94,176,191,137,133, 60,245,179, 9,111, 44,172,136,102, 39, 54, 7, 79,119,158,241,214, 23,190, 76,149, 11, 2,181,237,199, 89,
+197, 0, 81, 90,158,223,191,199,127,119,124,194,239,254,193,239,241,100,231, 25,199,199,167, 28, 29,159,112, 97,125,157,102,167,
+203,215,190,246, 53,158, 60,221,161,209,236,208,153,148,156,244, 71,116, 55,111,250, 88,207,102,147,231,219,143, 56, 60,220,103,
+109,125,147,135,143,159,176,180,178,204,215,126,227,183,248,241, 79,127,204,253, 71,143,106,181,185,168,115,142,245,236,193,148,
+101, 19,130, 48,224,233,222, 54, 75, 8, 26, 66,112,223,228, 20, 90,160, 8,208, 97, 3,137,230,250,197, 11, 60,188,243, 33,123,
+ 59,119, 25, 23, 35,158, 28,101,184, 36, 32, 12, 21, 78, 8,130, 40,165, 18,154, 55,223,124,131, 88,149, 60,188,255, 41, 39,187,
+207,176,214,209,236, 44, 51,174, 74,202,178,242,251, 47,107, 17, 74,176, 24,162, 39,206,119,216,130,255, 63,254,119, 54, 6,179,
+ 14,210,154,205,242,211, 52,229, 11,239,124,145,205,149,132,254,233,152,254,225, 51, 78,159, 63,196,100, 57,113,179,195, 23,223,
+254, 58,221, 56, 33, 27, 30, 96,237,132, 50, 27,115,124,120,204, 31,252,246,111,114,241,242, 85, 12,154,131,227, 30,198, 56, 62,
+125,248,136, 74, 72,134, 56, 66, 37,113, 81,139, 72, 22,100,147,130, 81, 57,193, 42,197,198,133, 75, 28,237,239, 81,213, 42,102,
+100, 72,110, 37,199,195,156,175,124,237, 13,134,147, 33, 43,107, 43,236,238,236,160,162,140,237,237,109,150, 86,150,233, 44,173,
+160, 2, 77,127, 48, 64,168,128,178, 50, 28, 28, 30,112,114,124,136, 82,154,139, 23, 47, 18,199, 33,113,156, 48, 26, 53,249,248,
+163, 15,233,180, 98,207,253,214, 33,215,174, 93, 35, 13, 3, 98, 37,232, 46,173,178,243,116, 7, 87, 25,154,173,136, 36,137, 81,
+ 74,178,191,191,135,210,130, 36, 13, 65, 57,190,244,238, 23,121,252,232, 33, 71,199, 7,148,249,216, 11,104,164,164, 17, 7, 4,
+ 74, 82, 26,203,112,146,177,186,182, 65,160, 67,111, 91, 2,132, 12,144,202,103, 92, 95,185,126,149, 73, 49, 97,103,231, 9, 87,
+135, 87,233,118,218,245,225,210,119, 90, 90,107, 84,236,195,138,172,169, 80, 65,136, 12, 3, 42, 9,201,214, 58,203, 74,146,245,
+250,222,114, 4,190,179, 80, 83, 59, 86,151,170,204,137,130, 0,227, 12,165,112, 20,166, 98,229,230, 13, 6, 7,207, 25,155, 18,
+237, 42,100,144,160, 2,133,235,245,249,199,255,248,239,241,175,254,252, 15,249, 55,255,207,127,205,141, 40,100,236, 44,167,214,
+ 11,140, 42, 4, 85,233, 71,164, 73,225,213,249,126, 14, 49,237,144, 4,198, 76,241,163, 94,212, 36,100, 13, 46,147, 2,161,133,
+ 7,194,212, 69,103,239,248,132, 34, 47, 88, 95, 93, 37, 10, 67,172, 53, 40, 1, 74,122,148,242,244, 48,107,235,177,188,176,130,
+210, 74, 20, 33,165, 85, 56, 2,164,140, 48, 50,192, 72, 69, 85, 25,210, 56,162,189,212, 70,160, 41,138, 9, 14, 75,168, 53,141,
+ 52,193,148, 5, 96,189, 74,125, 60, 65,168, 16,203, 0,173,154,244,135,135, 4,203, 41, 58,118, 12, 7, 5, 82, 94,162,170, 38,
+ 36,113, 72,191,119, 66, 28, 39, 52, 27, 45,242,124, 66,156,164,158, 41, 80,149,184,202,127,205,178,200, 41,139, 2,227, 20, 73,
+171, 69,179,219, 5, 97,169,242, 33,152, 12, 33, 99,164, 86,179, 76,111, 41, 53, 66, 91, 76,165,145,218,160,140,242,158,160, 5,
+ 52,236,249,195,250, 98, 65,159, 22,197,197,169,172,115, 22, 91, 89,159, 62,231,132, 63, 52,212, 44,243,105, 81,247,196, 58, 63,
+193, 16, 98, 10,102,159, 79, 8,196,249,213,156,173, 22,192, 44,102,118, 53,154,225,102, 29,103,104,114,231,225, 51,231, 81,177,
+ 51, 88,205,185,108, 17,231,220,204, 51, 63,175,206,139,227, 97, 89,231,150,248, 7,149,117,110,150,145,226,206,212, 21,129, 91,
+216, 87,250, 62, 77,248, 9, 82,253,184,163,118, 84, 56, 87, 79,174, 43,131,144,101, 93, 48, 61, 45, 79,233, 0, 45, 37, 65,160,
+ 8,195,128, 70, 51, 38,109,132,196,113,228, 15,168,181, 85,208, 24,139, 49, 6, 83,185, 89,237,211,211, 46,251, 87, 98,167,191,
+112,171,199,244,184,249, 62,132,133,144,151,115,121,236, 44,142, 49, 94,117, 80,168, 79, 51, 47,140,206, 63,199, 35,253, 42,242,
+220, 75, 95,175,105,128,179,144, 0,239,138, 97,146,229, 4, 65,202,181, 91, 55,233,245, 14, 8,116, 73, 16, 54, 56, 62,174,252,
+126,247,244,132,255,234,191,254,111,248,202, 87,126,141,219,183,111,209,109,183,177,192,103,159,222, 65, 43,197, 74,167, 73, 49,
+238, 19,234, 16, 81,142, 89, 95,106, 51,232, 29,242,252,201, 3,198,101,197,216, 24, 78,243,140,238,198, 38,143,119,158,240,254,
+ 71, 31, 50, 28, 13,207,140,162,149, 80, 84,166,154, 77, 21, 74, 83,113,127,251, 30, 50,159,176,222,108,242,236,248,132,147,202,
+103, 67,135, 65, 76,144, 54,120,243,250, 13, 26,145,228,103, 63,251, 5, 42, 40, 57,205, 11, 38,206,143,238, 13,150,110,167, 67,
+216, 88,194, 16,242,229,119,222,230,100,255, 1,247, 62,120,143,157,135, 15, 88,217,220,164,176, 5, 89, 89, 32,165, 66, 11, 75,
+ 37, 44, 78,120,161,153, 93, 28, 69, 33,206,250, 50, 95,178,238, 88, 60, 72,189,154,191,127,222,147,186,200,104,166, 54,138,248,
+ 39,152, 64, 81, 20, 37, 65,156, 50, 24, 79,176, 66,163, 67,175,244, 54, 22,126,243,183,126,135,229,141,235, 28, 61,122, 0, 85,
+ 78,163, 17,243,243, 79, 62,225, 55,190,242, 46,105,163,193,246,163,199,200, 48, 37, 12, 99, 86,154, 45,150, 26, 41, 71,163, 33,
+ 89, 89, 50,204, 12, 89,110,216,106,166,100,163, 1, 39, 85,206,254,222, 46,155, 27, 27, 92,190,114, 5, 83, 85, 60,122,244,144,
+231,251, 71,180,186, 43,252,225,223,251, 79,216,220,216, 96, 92, 76,152,228, 19, 84, 16,179,178,190, 73,167,149,146,164, 9, 78,
+ 40,223,133,149, 5,167, 71, 39, 12,199, 19,210, 36,166,219,110, 97, 42,195,209,193, 62,141, 70,211,199,181, 58,203, 87,190,244,
+ 37,180, 18,180, 90, 45,142, 78,142, 9, 67, 69, 28,106,178,241,144, 92, 11,122, 39,167, 20,121,129,117, 13,172, 53, 28, 28, 28,
+227, 42, 71,154,164, 72,225,128,138,202,228, 92,186,180,197,198,218, 50, 90, 74,122,199, 39, 12,135,125, 40, 39,117,124,165,194,
+201,128,209, 56, 39, 78, 18, 2,165,253,133,192, 90,111,125, 9, 67,140,173,184,113,243, 6,215,111, 92,197, 85,198, 35, 94, 67,
+ 77, 85, 24,223,229, 74,225, 39,103, 74, 50, 26, 13,105,133, 1, 74, 11,191,215, 53, 21,113,183, 77, 49,206,113,166, 68,106, 9,
+ 82,178,121,233, 50, 71, 71,135,132, 73,140, 14, 36,214,228,148, 54, 32, 94, 91, 35, 76, 90,136, 64,147,232, 75,100,189, 35, 31,
+ 21, 26,131, 12, 5,163,147,125,154,205, 6,255,244,159,254, 9,223,249,111,255,156,150,142,145,182, 64, 87, 6,161, 20, 10,197,
+184,202,113, 6, 6,121, 65, 16, 37,179, 3,255,116, 76,106,166, 20, 50,108,173,226, 22,245,234,193,119, 70, 74,250, 60,121,225,
+252,116,114,144,149, 84,251,135, 44,119, 59,116,154, 13, 31, 55, 92, 23,247,233, 5, 28, 28, 66,106, 80, 26,131,196, 72,141,145,
+ 26,165, 35, 8, 60,185,173,180,208,238,180,232, 46,119,144, 90, 96, 10, 15, 25, 17, 88,132, 48, 68, 97,128,146, 14, 37, 43, 38,
+101, 70,238, 4, 58,196, 39, 14, 38,138,201,184,207, 64,143,232, 54,187,164,113, 76, 62, 25, 32,169,176, 22,210, 70,155,201,120,
+ 68,150,101, 52, 26, 49, 32,169,170,138, 44, 27,147,132, 49,206, 84,196, 81,128,169, 10,242, 74, 16, 39, 41,221,213, 85,178,193,
+ 9,145,168,176,147, 1, 58,136, 49, 72,172,170,139,186, 86, 88,231, 69,109,214, 24, 92, 96,177,194,204, 56, 34, 83,141,203,116,
+ 39, 59, 93,171,121, 72,140, 31, 43,203,154,142,183, 24,111,235,189,231,178, 86,212,155,121, 48, 76, 85,121,158,194,148,125, 34,
+167,182,217, 23, 19,214,102,241,168,245, 95,214,205, 50, 65,207, 38,170, 77, 11,231,226, 40,221, 89, 55,179,233,213,136,188, 25,
+241,237,204, 14, 87, 44,224,203,103, 32, 26,183, 80,212, 23, 14, 4, 83, 53,194, 52, 99, 94,170, 26,205, 42,102, 81,211,179,175,
+185,112, 42,153,133,155,213,247,151, 47,239,213, 60,153, 78,212,212,188,188, 64, 7, 1, 66, 22,254,159,165,167,127,250,213,169,
+ 38, 78, 34,146, 56, 38,142,189,195, 96, 74,128,181, 53, 7, 97, 22,201, 90, 55,184,250,124,230,249,231, 69,168,190,248,114,118,
+133, 63,251,249,127,135,232,212,151,221,102,254,246,151, 1,254,207, 81,104, 94, 44, 42,226,213,241,171,245, 29, 54, 99,143, 59,
+ 87,199,150,250, 24,206,131,227, 3,186,173, 54, 55,110,222,226,228,232, 57,121, 54, 33,137, 4,121,233,106, 8,146,227, 71, 63,
+254, 17,205,180,193, 27,111,188,201,230,230, 38, 95,255,141,223,100, 60,236,179,179,183,199, 96, 48,100,255,224,152,245,245, 11,
+244,198, 19,174, 92,187, 70, 37, 29,151,182, 46,144, 87,134,135,143, 30,113,247,222, 61,142, 79,142,231,163,152,233, 78,168, 30,
+247, 77,149,232,206,248, 39, 64,158,141, 88,215,154,113, 89,177, 91,148,148, 66, 16, 90,127,226,110, 52, 98,174, 94,218,224,167,
+223,251,107, 84,168,153,152,138, 94,102, 17, 65,224,119,121, 78,161,130,136,102,218, 98,107,235, 10,111,220,188,196,119,254,219,
+255, 11, 39,135, 59,104, 12,217,100, 68,137,193, 40, 1, 6,175, 24,175, 51,158,177,243, 19,249, 11,165,248, 60, 71,249,115, 2,
+ 21,206,255, 45,220,231,125,157, 25,176,193,205,232, 76, 85, 85,113,114,218, 35, 32, 3, 17, 34,100,194, 73, 17,162,226,132,110,
+171,205,225,243, 39,196,202, 80,133, 1, 63,248,209,123,220,184,114,137,171, 55,110,240,224,254, 3,150,151, 87,136, 66, 77,171,
+221,228,245,215,110,177,253,116,155,188, 8,232, 27, 75,150, 85, 60,184,119,159,245,215, 47, 49, 56,122, 78,214,239,179,212, 74,
+ 9,164, 35, 8,189, 5,240,250,141,155, 28, 28, 28,144, 52, 98, 86,150, 58,140, 71, 67,140,128,193,112,194, 96, 60, 33, 81, 1,
+141, 86,135,227,227, 35, 78,251,125,210,102,155,195,163, 99, 28, 2, 21,132,148,185, 35, 27,121,157, 68, 85, 25,198,163, 17,198,
+ 24, 86,150, 87, 57,156,140, 49,149, 65,202, 61,132,132, 48,212,180, 26, 41, 38,207, 24,245, 78, 25, 14,134,244, 7, 67,210,198,
+ 37,198,227, 49,135,123, 71, 92,190,116,217, 91,175,242, 28, 45, 4,101,158, 97, 42,131, 18, 2, 99, 61,178,179,209,108, 19, 72,
+ 24, 14, 7, 76,242,146,246,114, 23,131, 36, 47, 61,203, 58,137, 67, 92,101,200,198, 35, 58, 73,204,104, 60, 65, 8, 65,168, 3,
+ 68,164, 40,203, 28, 99, 75,180, 84, 56,231,163, 34, 21,130, 48, 10,253, 8,222, 25,108,145, 17,198, 1,100, 35,164,142,105, 52,
+ 27,140,203, 1, 78, 42,207,203,178,142,149,205, 13,180, 18,104,145, 80,142,135,216, 80, 17, 54,155,136, 36,133,202, 18, 36, 41,
+102, 50,130,162,194, 77, 50,164, 11,177,147, 1,213,201, 30,175, 95,218, 98,169,211, 38, 82, 9,131,147, 35, 84,125, 1, 44,140,
+161,170,197,113,227,202,210,138,196,188,115,171, 5, 72,126,207,202, 44,112,106,250, 17, 98,161,248, 40,165,235, 78,201,239,155,
+141,144,156, 12, 71,228,101, 65,187,209,160,213, 72, 16,202,179,203,103, 33, 87,210, 19,187,194, 48, 66, 5, 33, 34, 80, 30,194,
+ 34, 45, 65, 18,211,238,248,100, 62,148,168,135,197, 83,171,150,191,173,173, 54,113,102,140, 10, 35,160,196, 88, 65, 26, 53,177,
+ 24,172,201,145, 20,152,202, 97,109, 76, 18, 46, 99,242,194,239,161,171, 18,155, 36, 52, 26, 9,195,225,144,189,221,125,214, 55,
+215,136,145, 4, 73, 74, 85,102,152,170, 36, 10, 2,138, 60, 71,232, 24, 29, 70,116,151,150,217,237, 31,144,157, 30, 48, 72, 82,
+ 58,141,101,108,160,253,232, 91,122,106,159, 80, 22,161, 21,210, 4, 40,107, 17, 14,172, 16,103, 11,171,173,247,198, 82,122,207,
+254, 12,247, 58,151,201, 78, 33, 43,211,103,186,177,213, 25,168,204,140,246,134,173, 19,206,196, 28,197, 90,139,222,108, 29, 18,
+227,236, 60, 80, 69,212,121, 29, 76,187,223, 41, 86,118, 38, 74,155,238,210,235,162,110, 23,179,205,125,177, 61,147,115,190, 24,
+241, 60,141,222, 93,200, 77,247, 77,244,249, 46,127, 26,249,190,192,130,168,121,246,139,130,187, 89, 65, 95,108,100,235,207,153,
+234, 12, 28,212,201,127,211,107,159,215,117, 85,198,214,235,139,233, 99, 77,214,170,251,186,217,171,215, 72,231,215, 34,103, 86,
+221,204,115, 87,244,121, 17,218,171, 68, 78,191, 10, 18,244, 85,138,231,179,175,139, 51,111, 47, 76,219,235,137,193,124,231,125,
+166,104, 44, 70,184, 46,204,134,167, 31,247, 74, 53,252,130, 52, 91,214, 98, 26,123, 46, 60,198, 58,135,181, 21,141, 78,131,221,
+221, 93,186,205, 54, 81, 20,112,116,120,192,242,106,206,163,237, 35, 8, 35,138,188,192, 57, 65, 18, 71,188,247,222,123,252,228,
+ 39, 63, 97,117,121,133,141,205, 77,186,203, 93,218, 91,107,172, 92,123,203, 43, 95,141,225,222,225, 9, 71, 71,167,188,119,247,
+ 30,199,199,135,100, 89,118,230, 48,228,156,123, 73,158,248, 60,142, 79, 73, 65, 83,123, 1,217,147,201,152,177, 16, 72,161,113,
+ 65, 72,212, 72,120,237,234, 37, 62,122,255,199,140,199, 61,130, 56,228,116, 84,146, 57, 65,170, 67,180, 80,196,173, 21,132,142,
+192, 56,126,253, 75, 95, 38,239, 31,208, 59,218, 38, 9, 21,153, 53,116,187, 45, 38,197, 4, 43, 67, 15,137, 48,126,191,229,166,
+112, 90,203,108,207,239,167, 90,246,151,142,223, 29, 47,142,187,206, 31, 8,102, 46,136, 89,103, 63,127, 2,217, 41, 24, 67, 88,
+ 64, 17,198, 17, 81,156,112,255,206, 93,174,223,122,157,103,135, 25,101,122,129,183,111, 92,231,104,119,143,173,173, 53,238,124,
+124,151,143,239,220,165,217,108,113,227,214,109,122,163, 9, 59,123, 7, 60,121,190,203,107,175,191,206,233,104,200,157,251, 15,
+ 80,161,196,148,121,253,132,145,124,243, 91,223,164, 89,188,197,147,199, 15, 24, 78,114, 54,183, 46,146,132,146, 52, 14,201,138,
+156,110,183, 75, 28, 39, 28,238,238,240,209,207,127, 74, 28,167, 36,237, 22, 34,138,136,227, 4,147,151,244, 71, 19,210, 86,135,
+ 10, 15, 60, 90, 93, 91,101,127,127, 31, 76, 65,145, 85, 94,232, 53, 28,146,101, 57,167, 39,167,148,101,201,197,139,151,189,181,
+172, 52, 32, 36,105, 35,194,148, 57,237, 86,147,120, 26,161,170, 2,186, 43,203, 44,175,172, 80,149, 57,221, 78, 7,140, 97, 60,
+ 26,226, 74, 77, 86, 84,180,154, 77,194, 48,164, 42, 75, 80,154,188, 40, 57, 61, 61,165, 42, 75,198, 89, 70, 97, 5, 43,151,110,
+ 16,134, 33, 74, 9, 40, 11,242, 44, 35,137, 35, 6,195, 49,206,180,169,138,137,223,163, 11, 77, 28, 69, 8, 69,157,208, 85,225,
+156, 64, 7, 33, 56, 71, 16, 6,148,101, 78,239,244,152, 86,187, 77,172, 37, 78, 74, 42,211,199, 57, 77, 24, 41, 10,167,136,163,
+152, 32,137,144,218,147,183,132, 41, 8,226, 16,145, 6,136,192, 65,237,183,150, 85,137,178, 21, 34,203,161,172,112, 81, 68, 57,
+ 25, 48, 60, 48,148,131,138,210,193,206, 96,232,175, 7, 14, 10, 83, 97,240,223,211, 72, 75, 85,249,199,138, 16,222, 62,228, 9,
+ 99, 83, 53,181, 92,200,245,157, 70, 89,122,138,165, 14,165, 23, 0, 58,188,117, 73, 9, 31,163, 41, 37,133,115,140,202, 2, 59,
+ 17,196, 97, 68, 28, 9,194,122, 87,169,180,223,203, 75, 29, 16, 68, 1,113, 26,145, 54, 19,154,141,148, 56, 12, 9, 67, 13,194,
+206,248,229, 62,243,218,243,105,133,131,110,167, 81,135,116, 76, 72, 18,191, 67,149,170, 66, 41,139, 49, 25, 74,218, 25,225,110,
+ 50,202,176,109, 75, 80,139, 23,171, 34,199, 41, 72,146,148,241,120,204,120,156,209, 89, 94,161,145, 38, 84,206, 95,244,165,210,
+ 94, 77, 93, 79,187,194, 40,162,211, 72, 56,221,127, 70,144,180, 73, 71, 99,212, 82,130,145, 14,225, 20, 82, 25,176, 62,208, 70,
+105,139,181,218, 71,162,158,139, 92,253,220,137,234, 66,242,166, 91,216,215, 79, 75,230,244, 50,109,169,109,128,211, 11,137,168,
+ 67, 83,156,172, 21,245, 2, 39,253,223,192, 45, 8,221,132,152,254, 37,231, 13,144,117,243,233,222,153, 44,118, 55,247,125,207,
+ 89,236,211, 3,197,252, 90,235,156, 59,215, 88,156,189, 38,249, 14,219,214, 56, 87,175, 76, 23, 83, 17,223, 52,205, 79,107,159,
+ 17,160, 22, 2, 50,164, 56, 43, 34, 23,162,118, 91,205,249,242, 14,176,210, 46, 68,188, 66, 69, 9, 82,214,215, 62,127, 63,248,
+233,144,153, 77, 59,230,117, 66,250, 53,192,116,141,237,166, 28,124,255, 41,182,118, 40,232, 87,103,152,243, 43, 51,190, 95,149,
+ 93,254,242,238,249,252, 62,252,229,183,197,255, 22, 79,135,142,186,147,124, 69,103,254,194,231, 47,252, 46,114, 97, 63,239,106,
+107,140,144,126, 8,228,172, 37, 47, 39,172,109,174,179,187,253,140,155,215,174,162,116, 68,127,100, 24,103,142, 79,158,236,227,
+148,164,170, 12,199, 39, 39, 84,149,223, 15,157,246,122, 28, 28,236, 19, 5,146,202, 66, 97,157,127, 98, 9, 65,229, 60,233,231,
+252,253,234,220, 44,107, 8, 33,164,207, 37,126, 89,135,235, 32,145, 48, 46, 12,125, 41,145, 68,196, 34,196, 68, 1,151,175, 94,
+166,234,159,176,183,187,237, 89,207,227, 49,131,204,160,226, 20,173, 99,226, 48, 34,136, 27, 24, 39, 88, 89, 90,230,246,213,203,
+252,240,187,255, 47,170,172, 71, 28, 73,154,173,150,191, 31,133, 64,168,218, 14, 36,197, 25, 70,181,148,126, 4, 47,167, 91, 10,
+241,106, 30,252,203, 34, 15, 63,239,113, 51, 11,246, 49, 62, 43,184,170, 42,170,170,244,196, 63, 63, 71, 35,208,126,151, 91,150,
+ 37, 81,156,144,151, 57,159, 60,120, 74, 17,172,241,100,183,199,114, 55,165,154,244,216,220, 90,102,235,242,239,243,189,239,191,
+ 71, 94, 24, 94,127,237, 18,123,123,123,124,239, 7, 63,228,100,216, 39, 47, 13, 7,253, 62,113,160,105, 54, 18,242,158,167,245,
+221,223,222, 97,251, 89, 3,108, 65, 32, 44, 39,135,123, 28, 31, 31,179,117,241, 10, 81,218, 36, 12, 52,101, 62,198,148, 25,223,
+249,235,191,102,107,107,131,219,111,190, 69,212,238,128,144,244, 70, 35,214,229, 38, 22,191, 3, 91, 93, 89, 97, 52, 30,162,132,
+160,215, 59, 97,121,105,133,254, 96,136,169, 74, 46,108,109,178,181,185,137, 49,142,123,247,239, 1,130,119,190,248,107,172,172,
+174,114,231,238,167, 60,218,126,130, 45, 11,150, 59,109,110, 93,191,206,133, 11, 23,144,145,166,172, 42,142, 14,143, 80, 86,162,
+ 28, 40,225,152,140,198, 60,219,221,231,202,149, 43,180,181,247,128, 7, 97,204,202,218, 26,237,110,151,195,195, 99, 70,135, 7,
+ 76, 70, 19,198, 69, 73,107,105,153, 64, 90, 2,145, 80,140,135,148,121, 78, 18, 69,244, 78,143, 9, 34, 47,184,137,195, 24, 83,
+ 26, 42,235,125,186, 73, 28,205,159, 75,129, 6, 43, 49,214,135, 33,197,129,194,133, 26,161, 36,163,254, 16, 25, 38, 4,113,131,
+180,213, 65, 69, 30,192,132, 48,216,162,172, 33,222,222,135, 92,245,143, 40, 42,129,176, 16, 33,168, 78,143, 24, 31,157,208,110,
+ 47, 49, 50,138,157,237,199,180,150, 87, 25,143, 5,121, 81,113,216, 31, 16, 3,101,173,122, 6, 31,119,234,156,165, 2,138,170,
+170,245, 58,110,158,187,237,106,190,186,181,243,161,173, 93, 8,216,174, 31,170, 90, 41, 60,174,205,175,179,132,146,117, 58,156,
+191,149,128,182, 14,237,220,124, 93,167, 36, 73, 18,146, 54, 27,164,205,152, 36, 13,137,131,192,219,221,116, 77,169,115,204,194,
+ 70,100, 61, 98,182,206,177,177,177,234, 11,191,242, 96, 91, 36, 56,231, 69,155, 69,225,234,125,115,229,131,112,106, 28,113,187,
+211, 34, 47, 10,140,181,148, 85, 70, 85,131, 81,122,189, 62, 43,235,107, 88, 99,234,136,223,105,238, 54, 68,137,207, 82,111,196,
+ 1, 73, 28,113,106, 13,189,147, 35,210,225,128,230,210,178,255,123,206, 68,195,202,243, 13,148, 23, 42,250,169, 28, 47,168,199,
+ 95, 22,200, 53, 45,190, 30, 23,187, 80,176,103,153,223,117,145, 23, 11, 7, 5, 83,213,244, 55,137,181,117, 34,155,162,254, 89,
+228,236, 58, 63, 31,191,139,217,152,155,218, 17,180, 32,118,127,113,120, 56, 19,180,217, 25,252,101,241,128,114,230,107,215,126,
+242,105,199, 34, 22, 28, 61, 78,120, 54,187,155,122,209,241, 28,122,165, 3,148, 14,113,218,179,232, 61,211,126,177, 51,167, 22,
+194,185,121,170,220, 66, 3,227,157, 67,115,113,162, 53, 22,170,106,166,216,175,234,107,161, 88, 16, 20, 71, 81, 72, 20,134,158,
+199, 47,181,103, 64, 56,191, 75,119,211,223,161,142,178,157,254,157,212, 87,222,186, 62, 87,191,207,216,239,191, 66,177,172,215,
+ 45,175, 4,145,204,162, 92,197,108,196,193,153,127,155, 27,250,103, 74,122,196,130, 95,241,243, 1, 39, 51,228,236, 66,254,187,
+156,126,205,197,183,153,127,204,162,250,112,254,115, 45, 62,232, 28,227,241,152,213,245, 85, 62,254,228, 19,110,221,126, 13,235,
+ 12,205,102,194, 96, 52,161,215, 31, 35,129,188,172,102, 39,207, 40,128, 52, 82, 40,229, 24,142, 75, 10, 99,169,156,163,114,130,
+106,106,147, 88,176, 69,156,241, 41,178, 8,106, 17, 47,245,239, 77, 42, 71, 6, 88,167,145, 42, 32,142, 35,110, 95,218, 98,171,
+147,114,255,179, 95, 80, 81, 50,182,134,222,184, 68,138,128, 36,136,209, 58, 68, 68, 17,205, 72, 32, 84,194,239,254,238,239, 19,
+152, 62,159,252,205,191,243, 23,210,124,130,106, 47,161,210, 14, 81, 28,123,175,227,212,141, 34, 4, 74,168, 41, 40,105,129, 69,
+ 48,127,162, 77,199, 97,110,150,116,196,108, 28, 53, 67, 74,184,197,212,188,133, 0, 31,225, 59,139, 64, 7, 40,225, 89,216,178,
+254,223, 31,182,132,135,199, 88, 3,213,132,227,253,199,236, 61,125,204,100, 48, 34, 31, 79,120,242,100,151, 86,187,139, 83,240,
+ 96,251, 1,131,209,144,175,125,229,235, 72, 39,137,164, 96,181,157,114,101,107,141, 75, 23, 55,121,182,183,199,195,157, 61, 78,
+ 39,185,255,153, 42,131, 40, 42, 4,142, 92, 8,172, 18,252,225,175,127,157, 91,183,222,100,229,242, 13,156,140, 57, 56,236, 51,
+ 25, 14, 17,229,152,231, 15, 63,161, 24,247, 41, 69,196,250,250, 26,215,174, 93, 37,142, 35,226, 36, 97, 48,202,113, 42, 98,169,
+211,228, 96,239, 57,171,203,203,100,147, 49,195,126,143, 73, 54,228,225,195,251, 96, 75,180, 51,188,249,250,109, 2, 29, 82, 89,
+ 71,175, 63,230,218,205,215,249,250, 55,126,155, 27,151, 86,185,116, 97,147,183,191,248, 14,105,163, 77,146, 54,249,163, 63,250,
+ 35,190,244,206,219, 44, 45,181, 57, 61, 60, 96,112,210,227,228,224,216, 31,172,108,197,210,210, 50, 82,135, 52,151, 86,137,147,
+ 20, 33, 4,141, 36,193, 86, 21,194, 73,164, 80,116,151,150, 9,226,136,167,207,158,211,104, 52, 89,233,116, 73,211, 24, 21, 5,
+ 76,202, 49,213,120,132, 14, 98,114, 35,217, 63,234,209,104,117, 80, 74,162,181, 67, 58,203,179,167, 59, 4, 90, 34,149, 47, 0,
+ 40,141, 74, 27, 68, 73,196,160,183,135, 41,115,198,131, 30,227,222, 0,165, 3, 12,146,194, 58,194,164,141, 10, 4,194,142,113,
+147, 19,164,153, 32,109,133, 48, 14,161, 2,138, 94,159,225,254, 51,196,104, 64,104, 5, 39,123, 39,228,227,140, 48, 12,184,243,
+233, 67,118,159, 62, 37, 9, 66,150,215, 47,240,183, 63,253,136,187, 59,123,100, 8, 10,111,141,198,212,220,114, 89, 23, 74, 35,
+ 37, 85, 29, 28,211,144,130, 20, 8,177,196,145, 32,136, 4, 42, 0, 33, 53, 82,251, 92,115, 85, 3,174,230,164, 74,133, 22,158,
+164,167, 23,108, 89, 82, 80, 7,203, 40,132, 82, 53, 14,213, 39,145, 37,105, 72,146, 4, 36,145, 23, 35,106,165,234,224,151, 26,
+118, 5, 53,164,198,135,236,248,127,241,163,213, 31,252,248,199, 32, 13,105,172,144,206, 96, 41,144, 74, 16, 71, 33,163,193, 8,
+173, 44,157, 86, 64,218,140, 80,129, 70, 74,201, 56,203, 22,246,203, 32,180,194, 10, 75,101, 42, 86,215, 86,105,180,154, 12, 39,
+ 57, 82,133, 32, 3,156,138, 16,182,242,250, 24, 83, 50,169, 12,195,209,136,165, 86, 74, 99,105, 13, 84,224,249,249,128,176, 22,
+105,166,236,115,127, 40,168,147,189,253, 36, 99,198, 63,119, 24,103, 48,206,212,120, 93, 59,243,110, 79, 35,101,167, 0, 30,234,
+152,210,217,248,184, 86,148,155,202,103,131, 87,149, 7, 68,205,148,229, 51, 45,141,152,209,215,102, 96,150,154, 39, 98,107,181,
+185,127, 41,102,215,205,133,245,247, 44,173,117,106, 41, 51,142, 51,202,117,235,188,150,196,213, 7, 17, 31, 53, 59,133,204,185,
+217, 53,203, 78, 15,136,245,251,164, 20,179,224, 26, 21,134,232, 48, 66, 69,145,143, 30, 14, 3,164,214,200, 32, 64, 6,254,250,
+ 44,180, 94,232,228,107,168,215,140,140,167,144, 4, 11, 62,123,131, 41, 43,138, 44,103, 50, 26, 51, 30,101,245, 52,216, 32,165,
+ 35,136, 20,141, 52,245,215,156, 56, 34,136, 60,212,103, 74,214,155, 89, 4, 22, 88,242,214,190,180, 83,255, 15, 11,235,248,229,
+193, 29,175,136, 74,253, 15,144, 82,203, 87,236,204, 63,247,251,212,177,118,159,247,243, 76,199, 55,135,135,135, 92,185,122,149,
+239,255,224,251,152,202,210,105,119,249,253,223,249,117,126,248,147,159, 51, 24,103,236,236,157,208,104,132,228,121, 73, 26,135,
+140, 71, 25,205,134,166,213,212,244,199,134,204,250,113,254,116,244, 50, 61, 64,184,151,237,149, 23,100,150,139, 58,139,133,180,
+122, 2,169,145, 50, 34, 12, 18,214, 59, 93, 46, 46,175,240,224,211, 15,177, 78,211, 47, 44,163,162, 68, 7, 9,145, 14,125,192,
+ 71, 85, 16, 71, 13,130, 32,100,105,117,141, 75,155,235,124,250,131,111,162,170,146, 98,148, 99,131,152, 50, 43,105,175,198, 51,
+ 61,196,212,199, 63, 61,232,136,217, 40,108,170,242,116,243,184,195,133, 95,230,151,133,188,156, 5, 15,205,127, 65,255,196,178,
+190, 59,159,158,210,165, 63,116,185,202, 98, 5, 84, 98,194,120, 60,228,248,244,148,227,253, 67,146,102,147,181,181,117,162, 70,
+202,147,135,219,132,129,228,194,214, 38, 0, 43,221, 54,225,205, 43,252,224, 71, 63,224,163,143, 63,228,181,183,222, 98,125,115,
+139,143,238, 63, 70, 66,125,241,118, 52,227,144, 40,110,241,240,228,104,198, 97,119,245,250,165,217,108,112,237,234, 37,218,141,
+132,167, 15,239, 17,134, 1,135, 7,251,136,164,226,143,255,248,127,202,163,199,143, 56, 58, 29,112,177,189,194,214,214, 50, 89,
+ 94, 16,104,191,119, 29,141, 70, 88,107, 56, 57, 57, 33,155,140,248,194,155, 95,160,170, 74,194, 32,100,239,240,132, 40, 74,185,
+127,255, 17,121,101,248,226,151,127,141,103,207,118,168, 58, 33,173, 78,135, 34,207,185,116,233, 34,171, 43, 93,202,124,194,206,
+206,128,209,224,196,175, 95,218, 13,180, 22,156,158,156,178,178,113,153,184,213, 32, 77, 83,156, 84, 28, 31, 30,128, 21,228,101,
+233, 5,120,194, 99,117,173,113, 36,113,147,110,123,137,254,209, 49,131, 86,155,200,116,168,108, 6,182, 64, 83,225, 76, 70, 62,
+156,112,122,112, 72,167,145,144, 73, 75, 18, 72,146, 56, 37, 12, 2, 4, 80,149, 37,133, 49, 36, 74,227,202,138,102,103,153, 75,
+151,111, 83,142, 70, 80, 86,228, 89, 73,152, 44, 65,146,210, 31,103,236, 61,127, 76, 26, 41,218,141, 0,107, 10,100,160,144, 81,
+138, 11, 19, 2, 52, 74,104, 76, 86, 48,177, 32, 74,141,112,138,113,110,184,247,222,251,156, 14, 74,210, 32,226,224,176, 71,145,
+244,104,181,154, 72, 41, 48,204, 5, 69, 98, 81,225,140, 32,175,170, 25,182, 83, 46, 60,179,220,172, 56,212, 13, 0,194,103,169,
+ 27, 11,202,183,122, 66,250, 80, 15,185,144, 30,168,132,207, 88,240, 97, 34,211,242, 54,199,152, 74, 89,235,198,102, 42,233, 57,
+176,107,234,117,246,235,170, 69,198,131,159,115, 53,155, 13, 58,157,132,227,211,156, 40, 14,145,194, 96,132,164,178, 22, 89,239,
+ 89,157, 5, 29,104,194, 40, 4, 28,147,108, 76,229,115,101,209, 73,128, 20,130,102,154,208, 72, 35,132,242, 22,199,209,104, 12,
+ 50,102,156,229,158,143,110,125, 94, 64,145,151, 68,113, 76,179,213,230,232,228,132,221,157, 39, 52, 46,222, 66,117, 34,144, 96,
+133,239, 62,167,182, 42,127,171,234,177,112,173, 86,183,102, 6,116,153, 93,155,220, 66,218,218, 2, 71,126,206,173,224,140,247,
+219, 88, 75,105, 43, 42, 99,235, 76,112,127,223,123,148,183, 79,203,243, 59, 99,102, 4,208,185, 2, 78,128,176, 11,187,233, 5,
+ 21,246,204, 19,255,178,107,233,220,101, 53,229, 54,156,209,126,205,214,185, 51,122, 12,118,186, 18,119,211,221,116, 77,186,155,
+ 98,115,235, 98,173,130, 0, 57, 45,230, 82, 46,236,213,231, 63,147, 19,188, 32,254, 19, 83,167,128,153, 78, 16,252,164,215,212,
+246,188,178, 40,168,202,114, 54, 85,208, 90,215,214,181,136, 40,142, 8,194, 96,102, 33,180,214,250,239, 61, 19,203,177,144, 34,
+ 40,255,227,138,250,226, 69,253, 87, 45,232,175,202, 96,255, 15,249,158,159, 71,146,251,187,124,205,121,247,239, 69,115, 85, 85,
+113,112,112,192,213,107, 55,217,126,244,136,131,131, 3,222, 88, 93,225, 79,254,193, 31,242,139, 15, 62,102,216, 31,209,106,198,
+244,156, 33, 14, 52,185,112,140, 71, 37, 6,203, 82, 39,102, 48, 41, 25,101,211,196, 35,102, 10, 73,193, 89,167,196, 25,251,223,
+ 34, 88,199,205,134, 65, 88,169, 64,249,136,199,164,145,210, 94,238,240,225,167, 31,225,138, 49,253,172,100, 92, 9,156, 12, 17,
+ 65, 92,243,157, 61,250,210,228, 25,101,220,228,107,239,190, 75,126,114,192,254,195,251,216,211, 1, 69,238, 80, 97, 76,179,213,
+ 69, 7,122, 78,134, 2, 76,189, 18, 88,100,200,201, 26,174,224,147,132,188,112, 69, 44, 60, 41,126,149,195,220,252, 99,220,236,
+ 52,108,140, 57,147,252, 55,101, 35, 91,235, 48,202, 80, 97,193, 12, 57, 62,237, 97,156,224,205,119,222,101,255,228,148,103,123,
+ 61, 78,203, 67,110,222,184,198,241,233, 17,131,222, 49,163, 65,143, 73,239,132,241,224, 4,107, 13,247,158,236,242,217,206, 62,
+173, 78,147, 48,212, 20,121, 73, 35,142,184,118,101,147,209,225, 17, 43,203, 43, 60, 27,156, 82, 86, 5, 15, 30, 62, 97,173, 25,
+ 48,204,134,100,147,130,131,131, 67,138,118,155,253,195, 35, 94,187,121, 5, 25, 68, 8,157,250,117, 64,148,178,179,127,194,187,
+ 27, 91,116,187, 29,222,255,249,207,216, 27, 58, 90,205, 22,159,125,246, 25,214, 86, 76, 38, 19, 54, 55,215,105,181,219,236,237,
+ 31, 97,149,230,198,229,235, 4, 58, 66,132, 41,173,118,135,225,176,135,192, 50,206,115, 30, 62,122, 68, 86, 20, 8, 41,137, 3,
+133, 80, 14,147,141, 49,197, 24, 25,104,202,210, 39, 73,201, 64, 51,204, 38,112,122,204,178,116, 4, 65,224,173, 83,206, 71,195,
+234, 32,194, 9, 73, 81, 26,132,146, 68, 82,243,218,235,111,208, 59,220,231,224,217, 83,242,227,125,146, 36, 32, 74, 52, 74, 24,
+132,132, 52,212, 8, 91, 49,236,247, 89, 93,233,210,104,166, 20, 89, 49,243,164,107,165,200,202,194,235, 16,148,194, 88, 72,146,
+ 46, 38,243,182,215, 32,145, 4,141, 54,193,242, 50,205, 36,226,224,209, 39,220,127,255,231, 92,189,184, 73, 24, 40,162,118,155,
+184, 25,161, 90, 93, 48,150,114,239, 25,157,118,151,225, 96,200, 73,127,200,160, 95,176,253,244, 57,207,119,119,113, 68,236,229,
+ 99, 58,221, 46,147, 96,159, 75,155,155, 72,103, 49, 82,188, 18,126, 48,189, 40,215,129,194,117,188,170, 91, 24,169,158, 21, 99,
+ 10,177,112,120,150, 32,164,171, 9,155, 83,142, 6,179, 12,117,191, 14,247,108,244, 25,155,124,154,186, 85,115,195,103,250, 24,
+103,193,201, 89, 69,147,181, 5, 10,225, 15, 14, 86, 64,154,198,172,173,109,114,218,239,163,181,255,126,121,105, 65, 24,202, 98,
+136,192, 18, 6,126,122, 96,141,171,133, 83, 10,165,124, 65,213,218,143, 93,139,124,226,243,203,163,148,201,100, 76,220,234,146,
+ 52, 27, 88,153, 48,201,124,103, 61, 25,143,104, 38, 33, 97,160, 25, 13, 6,172, 46, 45,131, 51,156,238,239,177,210,104,249,131,
+ 31,202,107, 0,132,244,226, 56,177,144, 15,238,230, 33, 40,212,209,166,130,233,235,102, 30, 87, 90, 23,118,129, 15,178,169, 21,
+101,115,143,183, 49, 84,166, 34, 55,198, 23,175,202, 31,150, 68, 29, 20,166,181, 68,217,169,112, 78,212, 33, 37,246,108, 77,145,
+212, 89, 32,139,123,107, 57, 91, 17,138,151, 58,105,236,124,219,226,230, 96, 25, 49,157,156,202, 41, 57,110, 58, 73,117,245,225,
+112, 58, 81,173,127,223, 26, 46, 51, 61,244,248,226,174,124, 65,215, 26, 37,213, 89, 1,223, 20,190,229,206,234,139,112,130,105,
+ 22, 13,194, 79, 72,168,168,173,104, 21,121, 94, 80,148,229, 52, 54, 21,132, 36,138, 3, 26, 13,239,172,137,162,144, 32, 12,234,
+ 76,142, 57, 75, 96, 90,196,173,181, 24,231,127, 39, 45, 4,234, 43,111, 94,251, 51,177,208,173, 73,241,226,248,253,101,187,238,
+105, 52,235, 43,247,226, 47, 41,224,191,140, 36,119,198,167,254,119, 12, 13,249,101, 69, 93, 44,128, 13, 94,246,223, 20, 78,224,
+247,187,150, 60,207, 25, 12,134,108, 93,184, 8, 66,242,209, 7,239,227,140,225,237,183, 94,227,250,213, 11, 44, 45,117,120,244,
+104,135, 40, 20, 40, 5, 81, 44,177,206,162,148,156,243,144,234,199,150,173,255,232,103, 18,131,197,130, 74,112,190, 97,175,199,
+208,211,222, 94, 98,165,223,229,133,113, 68, 26,135,156,158, 28, 96, 77,129, 16,142, 78,154,208, 8, 34, 42, 83,160, 2, 69, 24,
+132, 40, 37,137,226,216,195, 79,226, 54,191,245,181,175,242,217,143,191,207,224,217, 99,108, 54,162,114, 2, 17,183, 89,185,176,
+ 85, 63, 73,168,187,242,179, 20,191,179,194, 70,177,240, 0,125,113,218,240,178,191,211,249,195,222, 89, 77, 5,103, 68,147,182,
+182,148, 88,252, 94,201, 86, 53, 87,220, 22, 30,145,185,177,201,234,250, 22,143,118,118,217, 61, 56,229,176, 55,224,181,219,215,
+185,124,105,147, 34, 27,147,141,199,108,173,118,217,121,242,152,251,219,207,200,157, 32,171, 44,227, 44, 99,115,109, 9, 76,133,
+ 53,150,219,183,175,211, 74, 18,118,182,159, 50,204,115,140,115, 44, 37, 33, 87,214,155,148,217,128,211,147, 99,182,183,159,211,
+235,245,201,178,220, 67, 99,242,146,102,146,162,195, 24,161, 67, 94,123,227,109,150,150, 58, 28,237,239, 50,238,159,210, 72, 18,
+ 26,141, 6, 65,160,152, 76, 38,164,105,138,177,176,191,127,196,164,116,220,120,253, 11, 76,242,146,241,100, 66,210,104, 80, 85,
+ 37,227,225, 0, 37,125,138,218,120, 50, 97, 60, 30,251,168,214,110,155, 36, 84,196,181, 13, 12, 87, 17, 69, 17, 89, 89, 18,196,
+ 17,173,118,139, 70,171, 65,220,136, 9, 2, 69,158,141,145, 66, 50, 26,101,196, 73,138,142, 99,226,110,151,168,219, 37, 76, 83,
+194, 52, 34,141, 2,170,201,152,227,253,231, 12,251, 61,242, 34, 99,156,229,232, 40,197, 10, 77,179,189,196,165,203, 87,232, 13,
+250, 76,242,156, 70,146,210,235,157, 50, 25, 15,105, 52,210,153, 2, 92,214, 65, 74, 85, 89,113,116,112,136, 84,202,231, 39,216,
+202, 31,244,176,164,237, 38,174,170,184,243,225,135,104, 1,166,170, 72, 58, 45,100, 26, 49,216,221,165,236,251,125,254,233,201,
+ 41,187,187,199,140, 39, 21,219, 79,159, 49, 24,141, 41, 42,199, 36, 43, 40, 12,232, 56,101,253,226, 69,190,253,253, 31, 50,169,
+217,221,226, 37,207,105, 41,188, 34, 59, 5, 90, 66,146, 58, 71, 32, 28, 97, 44, 8, 34,252, 8, 94,249,189,177,174,113,166,126,
+205, 16,204, 66, 75,180,244,209,161,179, 0, 40, 37, 9,234,192,168,249, 77, 17, 6,154,112,154, 44,168,124,158,250,148,191, 61,
+ 87, 33, 79,187, 77,234, 24,206,233,229,222, 23,164,147,211, 30,159,124,114,151, 40, 22, 4,129, 15,204, 18,206,145, 77, 74,180,
+128, 78, 59,160,145, 70,196, 81, 68, 16,120, 4,172,172, 69, 84, 74, 43,159, 83, 30, 40,138, 44, 35, 77, 83,242,162,162,217,234,
+208,232,172, 48,202, 42, 31,234, 97, 44,152,138,241,224,148, 64,250,131, 76,239,244,132, 70,154,226,100,136,147, 1, 81,163,225,
+ 53, 69,198,131, 97,140,173,176, 85, 89,115,207,167, 72,212,233,104,221,205, 96, 53,206,212, 42,118, 83,199,219,205, 84,107,204,
+198,218,214, 24,170,178,162,170, 12,121,145, 83, 20, 37, 69,101,234,125,177,155,141,222,221, 57,176,213,220,250,181, 48,232,168,
+ 73,115,178, 30, 93, 11,181, 48,210,174, 51,214,133,170, 71,221,211,247,207,166, 15,117, 14,187,156,142,192, 61,132, 72,214, 31,
+ 43,245, 52,163,125, 26, 32,230, 31, 15, 98,118, 77,156,186,215,124, 49,215, 65,128, 10, 3,180, 14,145, 97,136,210,122,246,253,
+ 56, 51,241,152,130,101,196,188, 8,203,179, 84, 86,172,197,150, 37,101,150, 51, 25, 79, 24, 14,134,140,199,153, 7, 67,213, 89,
+233,141, 70, 99, 6,154, 9, 34, 31,146, 51, 75, 60,149,114,150, 47, 63,251,221,102,135, 15,241,119,235,212, 95, 68, 8,126,206,
+216,253, 87, 96,179,191,236,243, 22, 11,199,171,124,234,159,215,157,159,231,204,159, 69,233,189, 98, 44,239, 94, 20,222, 9,169,
+ 41,178, 9, 15, 31,109,179,190,177,193,173,215,110,115,255,222, 93,238,222,253,148,203, 87,174,240,214, 23,222,161,119,114,130,
+113,208, 27, 14,121,250,124, 31, 29, 4,228, 69,229,193, 11,211, 81,224,212, 50, 40,230,209,129, 66, 74, 92,101,102,234,123,137,
+ 34,212, 1, 81,168, 73,227,152,205,245, 53, 90,205, 38,205,102,131, 88, 7,132,202,119,155, 85, 62,193, 86, 57,137, 22, 72, 42,
+170,201,152,147,222, 0,179, 59, 96, 76,137,146, 33, 82, 70, 32, 67,180, 84,124,229,157,183,201, 79,143, 48,163, 30,161,150,156,
+ 76, 10,140, 82, 92, 88, 91, 67, 6, 1,142,170, 22,159,212, 97, 14,245,207,123,126,154, 32,241, 86, 23, 41, 36,182, 6, 64,136,
+255, 80, 0,205,194,254,171,114, 53, 76,194, 85, 88,235,247,185, 66, 20, 20, 40, 86, 90, 13, 58,157, 14,250,198, 13,164, 12, 56,
+233,143, 73,218, 29, 84,120,194, 86,171,193,238,147,135, 92,186,188,193,181,139,235,188,255,243,143, 56,221,221, 38,203,198, 30,
+124, 97, 45,129,242,118, 17,229, 44, 95,126,251, 13,222,255,232, 62,119,239, 63,224,205, 27,215,144, 74,146, 4, 17,216,146,167,
+251, 71,244,250,125, 98,237,187, 28,225, 42, 70,195,138,215,110, 93,227,254,189, 7,196,161, 38,137, 18,198,253, 30, 78,231,132,
+ 23,182,216,127,246,132, 34, 27, 83,149, 19, 70,253,130,165, 78,139,141,181, 21, 76, 85, 48, 24, 78, 56, 29,140,184,125,251, 45,
+110,220,126,131,195,126,143,162,202,201, 38, 99, 70,227, 49,221, 78,147,102,171,225, 35, 91, 11,203,104, 56,100, 50, 26,210,109,
+ 94, 66, 73,136, 2,237, 17,159,213,132, 34,207,193, 66, 85, 25, 86,214, 87, 89, 89, 93,165,211,109, 16, 54, 83,156, 53,104, 37,
+232,159,244,121,178,189, 77, 81, 22,172,172,173,211,136, 52, 40, 80,177, 36,141, 83,146, 84,161, 92,142, 20,190, 35,159, 88,135,
+ 54, 10,167, 99,134,195,156,113, 86,176,113, 41,164,213, 93,225,228,248,144,172, 40,217,216,220, 96,216,239, 81,230, 57, 81, 28,
+121, 15,186, 9,252, 20,171, 24, 81, 85, 99,156,211, 88, 39,252,110,184, 20,136,202,129,141,184,120,245, 6,249, 96,128, 43, 38,
+ 4,129,226,224,193, 29, 86,243, 33,249,201,136, 88, 69, 28, 30,159,114,116,112,196,233,241,136,225,216,208,105,119,184,118,253,
+ 42,237,165,117, 14, 14,142,216,217,217, 99,127,239,128,139, 55,110,114,109,107,131,147,135,219,152, 26,126,240,130, 45,201, 89,
+ 2,152,119,234, 51, 97,149, 23,169, 77, 53, 54, 74,121,136,135,146, 83, 50, 37,179,177,253,153,116,199, 89,168, 20,103, 83, 30,
+235,232, 99,191,225,117,179,215, 93, 29,238, 98,235,189,128,143,117,102, 30, 70, 82,119,129, 8,223,229,126,225,173,155,252,197,
+ 95, 42,170, 58, 60, 68,105, 95,132, 3,237,136, 18, 77,146,250, 61,173,115,194,243, 2,234, 56,211,162, 40, 25, 14,135, 4, 65,
+ 64, 26,199, 52,146,148,210, 89, 66, 29,242,124,119, 23,226, 14,113,107,133,124,144,213,227,115,195,120, 52, 32,148,150, 64, 75,
+132,173,168,138,140,234,244, 24,157, 54,105,173, 45,123, 75,219, 76,192,101,235, 14,211,205, 58,242,105,122,218,180, 83,199,214,
+ 29, 58,211,174,125,225, 99,157,243,251,242,169,232,213,152, 26,138, 82,249, 21,219,153, 16,147,186,229,153,142,213, 49, 88, 33,
+234, 14,254,108,147, 39,153,194,208,234, 2,166,117,173,145,168, 11,153, 80, 47, 88, 99,231,161, 42,204,220, 52,152,133,152,214,
+233,238,121,193,244,238,106,208,146,135,239,212, 52, 58, 83, 97,169,167,137,114,161, 99, 87,211, 72, 88,127,112,152,206, 96,167,
+186,128, 41, 88,118, 38,140,147,202,139, 54,133,156,221,167,198,121, 96, 76, 85, 86,228, 89, 70,158, 23, 84,198,103,126, 4, 90,
+ 19, 39, 33,141, 52, 33, 77, 19,162, 36,170, 19,249,228, 75,189,252,174,158, 44,251,169,176,197, 34,254,227,199,239, 47,219,173,
+ 47,178,115,255, 46,176,152,207,251,122,159, 87,132,207,115,229,127,149,145,240, 75,119,245,103, 50,225,189, 77,164,172, 10,182,
+159, 60,101,121,185,203,151,191,250, 53,118,158,108, 51,232,247,249,214,183,254, 2,165, 34,110,189,241, 22,151,116,192, 59, 95,
+137,217,219,223,103,111,239,144,131,227, 19, 38,165, 99, 48, 46, 25,229, 5, 69, 81,224,156, 35,144,138, 40, 8,137,163,136,102,
+210,160,211,110,179,190,178,194,114,203,147,162, 54, 86, 87,112,182, 32, 14, 3,194, 64, 49, 26,244, 49,167, 99,154, 74,163, 27,
+ 41, 46, 14, 72,211,152, 40,148,140, 70,125,246,158, 63, 35, 90,238,178, 55, 30, 48, 25,231,181, 53, 66, 2,154, 86,218,226,107,
+239,188,197,163,143,126,129,166, 98, 48, 24,114, 50,201, 88,187,176, 69,123,185,141,169, 31,176, 47,216, 4,234,251,206, 56,247,
+ 82,154,212,116, 66,227,220,231, 41,223, 95,181, 83,159, 27, 51,172,243,214,163,178,242, 79,124, 89, 85,136,210,219,194,172, 19,
+164, 27, 43,148, 69,238,187,222,195, 99,242,194,177,178,182, 65,150, 25,168, 12,199,135, 59,244, 14, 12,169,190, 64,255,232,144,
+163,211, 17, 73, 51,225,234,149,203,228, 15,158, 98,113,148,206,146, 15, 70, 92,187,116,137, 94,191,224,209,222, 99, 84, 24, 34,
+148, 98, 99, 99,139,251,207,183, 57, 26,100,236, 30, 28,177,218, 12, 56, 61, 61, 69, 74,199,107,183,175, 98,138,138,102,218, 96,
+125,117, 5, 37, 65,216, 10,105, 39, 28, 60,185, 79,220,104,208,239,247,216,126,178, 77, 43,138,113,101,206, 96, 50, 98,152,229,
+116, 87, 54,248,181,175,255, 38,235, 27, 87,113, 2,214, 87,215, 25, 14,250, 76,226,144, 97,191, 71,167,211, 38,137, 2,156,181,
+ 76,198, 19,180,128,201,160,135, 18, 80,140, 39, 36,237, 38, 42, 8,105,164, 45, 34, 29, 82, 10, 77,117, 60,164, 42, 12,249,100,
+ 66,166, 29, 26,131,108, 36,196,141,148,163,231,251, 8,107,201,134,125,250,210, 34, 69, 65,212,108, 33,226,168,134,159, 56, 26,
+203, 93, 92,101,185,116,243,150, 39,179,229,254, 62, 95, 14, 27, 60,250,233,207, 88, 90,238,178,178,186, 76,187,213,244, 83, 4,
+ 97,233,180,219,117, 58, 89,133, 41,189,111, 93,106,197,184,127, 66,153,143, 40,148,240,116, 43,101, 9,173, 68, 25, 65, 89,121,
+ 31,242,149,235, 87, 9,147, 16,161,160, 56, 57, 98,114,218,163, 28, 21,156,244, 15, 41,138, 17, 59, 79,182,105, 52,150,104,196,
+ 1,221,213, 37,214,183,214,137, 27, 75,220,126,253, 13, 62,252,232, 14,159,126,252, 49,189,131,125,110, 92,190,200, 47, 30, 62,
+193,204,184,113, 47,245,234, 16, 8,208, 78, 32,103,125,223,220, 93, 50,141,127,214,117, 74,163, 18,178,190,205, 35,153,103,201,
+100, 51, 33,157,239,222,245, 20, 94, 83,167, 70, 6, 74,249,143, 95, 16, 39, 77,199,201, 30,143,106,103, 22, 41, 37,228, 28,182,
+226, 44, 72,207,239, 95, 89,233,112,114,210, 99, 48, 46,104,183,197,255,143,182, 63, 15,178, 45,203,206,251,176,223,222,251,140,
+119,204,155,227,155,199,154,187,186,170,171, 27, 13,160,187,209, 13, 98,224, 4,146,160, 56, 25, 33,202,142,160, 21,146,172,160,
+100,202, 22, 35, 36, 51,108, 82,176,101,138,182,131,182, 34,172,160,109, 42,108,146, 22, 67, 38, 77, 75, 34, 65, 0,196,208, 0,
+129,102, 99,238, 70,117, 87,215,248,230, 57,231,204,155,119, 56,243,217,123,251,143,125,238,205,155,111,170,106, 0,124, 21, 25,
+ 47,235,189,204,151,153,247,158,123,214, 94,107,125,223,239,195,247, 32,244,125,218,173, 54, 97,168,156,195,221, 44,218, 66,221,
+247,150,101, 25,135,135,135, 76,253,128, 94,183,231,242,212,219, 17,203,253,101,242,100,138, 23,180,169,138,124, 94,152, 77, 93,
+ 49, 25, 13, 49,186, 34, 12,124,242, 52,193,215,138,122,122,132,201, 83,108, 16, 53, 66, 51,237,114,200,173,118,249,226,118, 6,
+ 52,105,210,233,230,130,184,102,204, 62, 35,178,105,219,196,205,186, 34, 94,206,132,112, 70, 83,107, 51, 79, 30,211,198, 56, 32,
+144, 93, 88,103, 75,144, 86,206,199,232,139,214,230, 69, 31,182, 83,196, 59,161,163,242,124,188, 32,152,143,190,101, 99, 47,123,
+ 42,188,198, 28,123,231, 49, 11,150, 54, 99, 79, 22,245,230,227, 22,243,217,141,214, 24,221, 56,172,230,195,203,133,245,196, 76,
+237,219,160, 10,197,252,106, 99, 65, 67, 65,179,162,108,126,110, 33,230,158, 45,219, 28,146,140,174,169,170,146, 60,207, 93,174,
+ 66,147,236,231, 41, 73,232,187, 92,122,223,247,241, 2, 31, 79, 57,107, 35, 70, 52, 7,150,153,248,207,233, 20,234,186,162,174,
+106,167,160,175,170,223,191, 80,238,241, 66,251,188, 98,250,113,201,106,207,251,183,159,215,217, 63,175,208,127,215,163,251,249,
+ 40, 77, 97, 76,137,244, 20,121, 90,241,112,107,135,131,209,136, 23,175, 92, 38,242,165,219,181,239, 30,242,187,223,252, 38,227,
+180,192,250,145,243,244, 10,151,134, 54,157,230, 24, 25,208,237, 14, 88,234,117, 88, 93, 30, 16, 72,111,206,176, 54, 85,205,232,
+ 96, 72,103,176,140, 30,238, 67,153, 51,206, 71, 96, 74, 90,107, 3,130, 56,160, 72, 71,248,158,143,148, 5,158, 39, 88, 90,237,
+ 35,149,160, 40,114,186, 43, 61, 42, 33, 25,151,134,112,146, 83, 23,123,120,210, 39, 80, 46, 45,234,139,159,255, 60,217,112,143,
+195,237,135,228,195, 3,210,170, 66,181, 58,156,123,225, 42,149,117,214, 49, 99, 23, 3,114,142,145,186,207,154,118, 44,198, 34,
+242, 60, 47,250,115,175,141,217, 94,157,185,253,197, 24,115,130,251,236, 71, 49, 82, 8,138,188, 36,203, 10,242,170, 34,205, 45,
+249,193, 33,111,189,245, 22, 38, 79,185,117,173,198,146,243,224,206,117,150,151, 34, 14,199, 57, 59,195,156,149, 13,201, 43, 47,
+ 92,230,254,189, 59,120, 81, 68, 93,187,189,213,198,218, 6,219,163, 29, 90,189, 14,231,206,157,231, 32,169,168, 42, 67,107,208,
+102,227,244,121,182,110,189,199,238,254, 24, 63,136, 48,218,242,240,254, 67,246,118, 19,170,188,164,211,141, 57,181,177, 6,166,
+ 66,231, 99, 70, 7, 30,155,123, 7,116, 7,203,140, 14, 15,209, 69,206, 40, 73,120,253,173,207,145,214, 32, 84, 72,105, 36,107,
+171,203,100,211, 67,164,176, 40, 33,104,181, 34,130,192,169,176,181, 53, 40, 41,177, 85, 77, 54, 77,200,166, 41,129,144,174,131,
+147, 18,169, 11, 60, 9,165,209,164,211, 12, 63,156,128,169,169, 83, 69, 62,242,232, 44, 47, 17, 69, 29,132, 53,120, 66, 96,171,
+130,108, 82, 35,109, 65,175, 46,240,219, 45, 84, 28,161,171,146,233,112,130,244, 66,132, 31, 35,140, 69,167, 71,110,204,170, 53,
+159,123,243,117,118,119,183,217,223,188,195,153, 51,167, 81, 66, 80,100, 57,251, 89, 66,183,221,162,174, 43,198,147, 9, 23, 46,
+ 94, 66, 96,168,139,156, 42,203,169, 93,182, 41, 74, 10,200, 50,116, 93, 96,152, 98, 4, 20, 85, 73,105, 2,124,229,113,176, 63,
+ 34,159,166, 20,121, 5, 8,222,126,251,119, 57,181,190,206,229, 75, 23,152, 76,114, 52, 6,105, 75,246, 15,182,201,106,203, 27,
+111,126, 26, 15,203, 71,215,175,241,202,213, 75,120,191,246, 59, 84,181,125,102, 65, 87,178,217,169,219, 38,231, 90,112, 34,154,
+121,177,104,251,190,239,186,245,217,232,189, 97,101,203, 38, 75, 94, 45,100, 78,120,158,114,241,192,158, 71,224,121, 46, 67,126,
+ 30, 71, 58,147, 87,193,226, 92,107,190,207,229,120,173,230,104,116,238,127,195, 40,228,149,151, 95,230, 87,127,245,215,240, 61,
+ 9, 86,224,123,174, 59,243,125,247,245,132,176, 84,117, 69,150,229,148,101,133,148, 19,103, 57,140, 34,124,223, 35, 47, 74, 44,
+ 9,126,224,211, 89, 90,113,235,145, 32, 32, 79,166, 28,238, 29,208,110,119,208,101, 78,158, 78,241,132,161, 44, 50,186,221, 46,
+121, 81, 48,240, 98,210,163, 3, 70, 7,187,116, 54,206,186, 14,118, 22, 39, 59,239,206,205,137, 14,214, 46,136,254, 26,105,185,
+203, 28,159,241,240,171,138, 74,215, 20,245,140,149,110,169,141,105, 38,113,238,181, 62,195, 19, 99,229,241,218, 68, 41,231,249,
+247,132,131, 20, 53,207,195, 19,124,121,207,195,107, 10,186, 23,132, 72,207,137, 65,133,242,142,197,115,246, 56,118,138, 70,245,
+238, 14, 88,141,215,123,238, 91, 55,115, 81,159, 69,206,145,185,243,159,215,104,106,217,116,219, 86, 65,109,231,121,233,199,201,
+117, 11, 5,125, 70,212,107,196,113, 98,150, 13, 43,142, 31,178,185, 54,207,184,207,213,141,141,183,174,107,234,210, 21, 99,221,
+ 8, 59,177, 26,235,201,147,252,150,198, 53,111,180,157,179, 66,102,150, 67, 99, 12, 85, 93,185, 67, 65, 85,163,107,167,233,241,
+ 62,238,198,252,180,142,121,150,204, 53, 59,161,184,166,107,129,185,142,192, 10,251, 68,162,218,227,239, 63,171,240,138, 5, 93,
+252,252,125,251,201, 5,111,207,252,251,103, 6,136, 90,119,163, 53,218,141,229,132,131,100,120,190,196, 22,110,167,109,140,100,
+ 60,205,120,247,131,143, 88, 91, 30,112,233,210,139,172,174,166,220,187,123, 15,187,179,203, 81, 86,145,233, 18, 63,104, 17,199,
+ 93,150, 86, 78,145, 23,181, 67,193, 22, 83,134,155, 5, 82, 11, 76, 61,101,125,176,140,206, 45,171,237, 14,170, 44,145,182,226,
+194,198, 58, 73, 58, 69,170,144, 78,167,139, 12, 44,101,230, 65,123,133,178,244,216,122,180, 73,125,176, 71, 81,104,100, 9,147,
+236, 16,107,107,176, 33, 73, 97,209, 90, 56,101,169,134,183, 94,121,157,207,189,246, 2,111,127,253,231,136, 67, 77,233,149, 32,
+ 42, 78,157, 62,139, 84, 1,194,211, 77,135, 33, 23, 16,176,226,177,117,202,252,217, 61,126,238,231, 88, 96,158,185, 67,159, 79,
+195,236, 66,151,143,120, 2, 54, 35,158, 66, 6,164, 81, 18,123,148, 84,233, 33,101, 54, 70,104, 75, 39,142, 40,138,156,100,120,
+ 64, 57,218,225,197,139,231,233,183,223,226,103,190,250,203,236, 31,142, 57,189,182,204, 11, 47,116,184,251,104,151,123,247,238,
+243,153, 55, 62,197,198,218, 26, 69, 81,176,182,182, 70, 16,132, 92,188, 48,224,238,195,219,124,231, 91, 31, 81,214,240,112,103,
+ 7,133,229,220,234, 50,167,214, 87, 89, 31,124, 31,185,134,163,131, 67, 62,248,246,123, 76,143, 18,148, 23,178,113,238, 37,242,
+ 98,194,230,246, 14,203, 75, 1,217, 56,101,148,150,188,248,234,103, 88, 26,108,240,192,222, 39, 43,114,190,248,163, 63,196, 36,
+ 45, 81, 69, 77,232, 7,136, 50, 97,180,147,128, 45,144,166,164,204, 39, 76,167, 19,150,218, 1, 50,244, 41,210,140,113,146,242,
+225,135,239,177,179,189, 73,232, 27,210,165, 37,150,151, 6,116, 90, 29,116,145, 18,248,146,189,225,152, 59,183,238,114, 54, 75,
+241, 79,175,225,229, 30, 90, 26,166, 71,251, 68, 81,151,189,189, 49,214, 72,170, 92, 99, 77,133, 53, 25, 82, 23,116,203, 62,245,
+ 52, 36, 43, 53,211,164,116,200,221, 90,211,233,116, 8, 90, 49,217,116, 74,224, 11,202,124,194,114,223, 71,170,128,155,183,110,
+113,246,204,121,124, 47,112, 97, 68,184,238,124,121, 53,118,104, 76, 21, 98,133,199,254,222, 30,182, 87, 18, 80, 83, 78,221,168,
+ 50, 8, 3,188,168, 67,220, 13, 9,100, 77,114,120,196, 48,133,233,184,162,204,107,134,147, 17, 55,111,188,195,122, 91,210,245,
+ 2,198,251, 83, 76,145,241,237,111,127,131,238,249, 53,118,139,138,187,143,106, 62,255,185, 47,241,249, 79,191, 66,119,107,155,
+ 94,110,241, 44, 72,229,138,132,156, 53,194,174, 30,162,180, 37, 68, 16, 2, 82, 24,172,180,120, 65, 83, 36,154,252,105, 23,210,
+226,130, 90, 66,223,119,248, 77,165,240, 61,183, 55,119,232, 86, 80, 82,224,121, 14, 41,235, 73, 87, 96, 67, 79, 17,249, 77,193,
+245,154,177,189,180,141,192, 78, 35,208, 11,118,220,153,120, 76,185, 53,149,173,221,168, 90,204, 60,233, 6, 91,151,188,249,153,
+ 79,243,213,175,254, 26,158, 39,145, 94, 72,220,242,177, 86, 99, 76,141,196, 39,244, 34,148,116, 32,153,162, 44, 9,131,192, 89,
+253,165,219,221, 71, 81,136,231,123,172,172,172, 48,158,140,105,247, 6,120,190, 99,208,143, 71, 35, 66, 21,144, 36, 83,210,100,
+ 66, 24,184, 67,201,206,238, 1, 81, 24,145,249, 5, 86, 79,241, 14,246,104, 15, 6, 88, 33, 48,214,217,115,197,140,170, 54, 63,
+164, 24,230,230,219, 70, 16,103, 76, 77, 93, 53, 5,169,210, 84,181,113,111,186,177,172,205,172, 99,218,162, 77, 35,124,117,225,
+242,243,123,141,148,238, 49, 14,124,223, 29,148, 60,199, 94, 56, 25, 8,118, 76,251,148,205,115,163,148,155,226,121,190, 83,160,
+179,208,169,243,216,228, 80, 44, 20,233,249,216,125, 70,170,107,132, 78,179, 53,175, 69,206, 15, 5, 86, 75, 60, 44,218, 72,132,
+145, 14, 74,100,205,220,102,109,197,227, 52, 85,215,181,219, 5,225,253, 92,119, 47,142,189,233, 13, 82, 13,107, 53,162,174, 48,
+ 85, 69, 89,148,100, 69, 73, 89,214,232,218,173, 42,228,204, 97,161,196,252, 92,104,153, 97,110,157, 6, 66,155,227,201,137,174,
+ 53, 85, 81, 82,230, 5,117, 89, 82, 20, 37, 73,154,207, 58,117,203, 83,179, 83,159,163,110,183, 11, 65, 45,179, 88, 60, 33,143,
+177,141,226, 25,251,246, 79,212, 65,219,199, 33, 53, 39,179,187, 63, 9,142,244,169, 66, 57,123,210,212, 38, 22,172, 7, 74,186,
+109,136,108,152,246,206, 14,232, 46,172,249,248, 89, 42,180,134,131,225,152,233,244, 58, 27,171,107, 92,188,116, 25,164, 34, 30,
+103,228,149,165,208,150, 52,175,152, 78, 15, 16,214, 52,169, 89, 62,186, 12,176, 70,208,237,247,233, 44,245,200, 18,139,242, 3,
+ 82, 37, 64,196,220, 62,156,242,112,115,135, 90, 73, 90,123, 9, 90,104,180, 82,156, 94,221,231,149, 83,151,121,245, 83, 47, 18,
+ 44,135, 68, 81, 15,175,244, 40,139, 67,134,201, 62, 55,111, 29,114,120,235, 33,190, 20,212,182,166,211,235,242,149, 47,126, 31,
+ 55,223,255, 6,117,145, 18,132, 6, 43,107,218,157,136,245,181, 85, 36, 2,109,155, 29,255,130,115,196, 46, 68,168,186,199,115,
+ 70, 44,122,172, 27,193, 60, 25,246,112,162, 43,159,101, 35,219,167,131,135,132, 61, 49,176, 58, 41,146,148, 72, 97, 80, 82,147,
+ 77, 15, 48, 85, 73, 94,104,130,238, 26,155, 15,239, 99,170,156, 95,219,121,200,206, 11,151, 57,125,241, 42,185, 86,236, 30,229,
+148,213, 62, 47,190,112,149, 87, 94,238,130,144,236,238,237,242,234,235,175,115,255,222, 3,178,178, 36, 73, 82,206,174, 12,232,
+181,218,124,235,131, 27,212, 65, 64, 73, 69,128, 37,148,146,241,209, 33,126,232,145,107, 15, 47,110,115,230,204, 41,246,212, 30,
+175,189,249, 5,240, 91,148,197,136,124,188,205,189,251,219, 88, 33,185,242,202,167,105,119,150,201,243,130,238,234, 6,203, 81,
+155,222,234, 89, 70, 15, 55,137,162,128, 98, 58,226,240,193, 77,148,208,244,250, 29, 74,237,180, 3,117,150,112,235,163, 15, 92,
+212,237,116,194,112,154, 99,107, 77,224, 73,238,220,185,193, 78, 24,208,107,117, 24,116,251,116, 91, 49, 86, 90, 30,110,238,112,
+227,214, 29,246,119,183,216,223, 90,229,252,198, 26,237,216,167,150, 22,233,197,236, 29, 36,156, 61,127,153,254,160,135, 31, 24,
+194, 16,148, 46, 40, 39, 99,180, 10,217,220, 61, 66, 5, 49, 97, 20,129,174,240, 76, 13,190,135,173, 42,106, 93, 32,117, 14,182,
+102,208,235,178,189,115, 68,154,230,156, 57,125, 26,165,124,132,231, 59, 46, 67,153, 83,150, 53,126, 20, 51, 88, 93,163,211,237,
+146,229, 19, 54, 55,135,180,195,160, 57, 12, 10, 58, 75, 78,164, 38, 84, 69, 54, 26,115,176, 95, 98, 76, 72,150,103,220,184,246,
+ 17,235,203, 29,206, 14, 58,236,236, 76,184,113,247, 1,247,223,255, 22,210, 76,121,248,155, 21, 63,252, 19,127,138,247,174,125,
+139, 95,252, 87,223,226,223,255,159,254,121, 94, 58,123, 17,243,112,151,192, 19,140, 43, 59,183,119,206,189, 36,214,226, 3,109,
+ 43, 8, 48,168,230,192,233,249, 2, 95, 57, 22,130, 43,222,222,188,128,184, 78, 93, 54,157,177,239,138,250, 66,119,174,148,112,
+161, 56, 74,225,251,146,208,243, 8, 2,255,248, 0,224, 9,100, 19,115,234,186,239,153,250,219, 28, 19,173,172,152,251,136,133,
+112,194, 50, 7,189,114, 74,233, 75,151, 47,178,188,178,194,193,225,161,251, 88, 41, 9, 61,133,174,116, 83, 59,221,194, 63,140,
+ 34,172, 53,132,161, 19,206,185,216, 83,195,210, 82,215,169,165,203, 28, 79,133,132, 97, 76,109, 96,154, 37,148, 85, 69,154,164,
+ 76,198, 83,234,170,164, 44, 44, 81, 20,114,247,222, 3, 46, 95,186,194,209,120, 10, 65, 1,251, 17,131,245, 85,252,184,229,198,
+232,186, 65,182,218,227,159, 71, 10, 48,194,117,143,218, 84,232,202,165,247, 85,101, 77, 85,105,106,109,155, 4,187,153,239,156,
+ 38, 76,199, 21,115,151, 92,214, 8,221,154,201,136,106,220, 5,158,146, 4,158,215, 60,174, 22,185, 80,212, 23, 39,122,199,177,
+172,199,188,120,169,164,131,101, 53,246,183,199,239, 65, 39,128, 57, 66, 52, 60, 17,231, 68, 16, 13,113,205,206,199,237,179, 90,
+ 44,221,250,193, 26,164,146, 88,237, 78, 19,194,136,199, 16, 34,143, 37,174,205, 19, 91, 30, 11,148, 17, 11, 46,167,230,123,192,
+ 2,181,198,150, 5,117, 81,144,101, 5,105, 90,144, 23,181,195, 69,131, 19, 99,134, 1,126,232, 8,134,110, 16,177,144, 0,103,
+155,188, 89, 26, 81,119, 93, 83, 21, 37, 69, 86,144,167, 25, 89, 94, 50, 57, 46,234,207, 31,123, 63,107,156,122, 50, 1,109,241,
+ 99,142,207, 7,207,218,137,127,220,232,253,187,241,191,127, 55,251,250,231,126,238,194,110,253,216,230, 38, 23, 10,211, 73,140,
+226,222,222, 30, 31,237,237, 53,113,150, 33, 74,122,116,130,136,186,212, 88, 33,241,195,144,192,119, 59,220,202, 10, 42, 11, 73,
+154,178,157,108, 81,105,159, 86, 43,198,107,251, 12, 86, 79,113,106,101,153, 55,175, 92,165, 29, 69, 88, 91, 35,108,129,169,198,
+ 80,142,201, 39,143, 56, 74, 70,136,251, 9,168, 8,107,125, 98,175,162, 18,138, 23,174,190, 69, 86, 73,246,222,223, 71, 82,209,
+137, 21,173,208,240,246,237, 15, 48,133,225,254,104,159,100, 50,226,226,197,203, 4,113,212, 4,182,240,196,228, 99, 14,231,121,
+ 26, 6, 86, 60,182, 50,121,202,116,231,120,100, 38,156,112,136, 5,134,191, 56, 38,234,205,195, 7, 22,174,157,217, 62, 83, 72,
+231, 37, 71,212,140, 38, 19,103,183, 74, 75,178, 97,142,231,121, 76,211,154,131,105,206,230,239,126, 68,231,163,123,180,219, 45,
+122,145, 36,140, 98,190,245,238, 45, 94,255,244,139, 92,188,112,145, 48,106, 83,215, 53,203, 43, 43,188,247,254,251,220,125,176,
+197,133,157, 11,228, 70, 99,164,160,170,171,102,250,162, 57, 76,166,236,236, 31, 48,232, 68, 20, 86,145,166, 41,248,146,206,242,
+ 50,126,187,197,225,100,194,160,235,211, 10,214,152, 30, 37, 8, 17,179,182,118,133,241,100, 72,187,165, 8, 60, 15,105, 75,198,
+ 7,219,216, 98, 76, 93, 21, 12, 19,205,193,246, 67, 6,253, 14, 58, 11,153,100, 25,203,107, 27, 8,157,241,240,238, 29,238, 92,
+ 75, 49,149,166,213,221,160,191,212, 71, 88,197,214,214, 67, 36,134,126,167,197, 67, 1,173, 40, 38,108,181, 25, 79, 19,188,208,
+ 67,219,154, 71,219,155,152, 42,231,252,185, 51,200,184, 79, 59,236,178,185,123,135,163, 36,225, 13,255, 83,156, 57,179,238,216,
+212, 66,243,112,107,155,238,202, 6,163,241, 8, 99,198, 44, 45, 45, 17, 72,137,205,115,231,139,174, 12,105, 54,193,247, 44, 81,
+219,197,184, 10,109,185,126,237, 58,105,146,160, 60,201,250,218, 26,221, 78, 11,223,247,208, 85, 73,145, 36,128,229,197,151, 95,
+ 66,232,146,108, 50,162, 46,114,210, 36, 97,117,109,141, 78,111,137,209,116,196,209,209,144,163, 97, 66, 93, 7, 36,233,148,143,
+174,125,135,182, 15, 23, 87, 95,226, 40,183,252,194,219,239,243,222,239, 94,163, 91, 22, 44,183, 20,253, 65,135,127,241,143,126,
+153,191,240, 19, 63,198,127,241,119,255, 41,255,240,167,126,134,255,227, 95,253,143, 56,191,210,167,213,246, 16,163,227,160, 17,
+ 23,220, 97,144, 22, 98, 32, 22, 2,223,184,189,122,160,104,160, 57, 77,151,231, 9, 60, 95, 17, 4, 30, 97,224, 19, 6, 46,218,
+215, 87,238,166,169,164,131,202, 72,233, 20,238, 82, 54,163,112,207,141,223,125,213, 64,101,212,177,178,125,214, 77, 46,198, 76,
+ 63,254, 26,112,100, 54,211,160,118, 77, 19,126,162,176,182, 70,121, 1, 95,254,242,231,249,167,255,236,231,169,170, 28,140,194,
+243, 66,124,229,227, 9,213,120,228,157, 71, 60, 12, 67, 60,165,208, 90, 55,130,185,146,209,104,140,239,249, 60,122,180,201,210,
+242, 58,211,201,148,184, 31, 50, 60, 60,164, 44, 74,114,149, 82, 20, 57,117,149,163,148,224,232,112, 31, 41,160,170, 10,178,188,
+ 32,104,197, 4,195, 33, 59, 55,111,209, 91, 93,163,183,188, 66, 86, 85,243, 17,180, 20,179,215,175,251,127,173,221,152,189, 40,
+106,202,162,162,168, 42,234, 74,163, 13,110, 95,174,143,129, 49,179,218, 5,242, 68,188,245,204,117, 48, 91,113, 72, 41,240,149,
+ 68, 41, 15,165, 44, 82,152,231, 78, 89, 79,174,255, 22,132,106, 31, 87,212,103, 45,136,104,216, 4,246,216,105, 51,235, 47,236,
+ 76,204,108,164, 11,162,177, 10, 43, 21,182, 97,103, 24,183,236, 62,150, 28,137,197, 49,252,115,162,166,143,185, 48,205,222, 95,
+ 55, 0, 30, 67, 89, 86, 20, 89, 78,158,231, 78,228,214,248,206,131, 48, 32,140, 34, 55,245,242,221,122,235,132, 85,111,222,190,
+ 59, 24, 79, 85,107,202,178, 34, 75, 11,178,204,185, 90,146, 52, 67,189,245,234,165,159,148,143,161,238, 22, 49,177,207,235,124,
+197, 51,199,223, 98,193, 19, 42,158,171,124,127,158,111,125,177,184, 62, 15, 42,243,120,222,251, 39, 45,238,143,255,185,209,199,
+182,140,153,181,173,172,221,152,169, 94,224, 17, 43,233,108, 62,190,239,147,164, 9,202,243,232,117,150,156,133,194,243,209, 22,
+210, 60, 35, 47,107,151, 8, 86,148, 72,191,133,140, 66,186, 43, 61,194,110,159,118,119,141,238,160, 75,153,143, 72,143,246, 56,
+120,116,159,195,251, 31,113,248,232, 22,117,153, 51,232,250,136,241, 22,175,188,249, 5,222,250, 67,127,148,239,251,210, 23,185,
+241,225,135,252,187,127,229,175,242, 23,255,189,255,144, 56,140, 40,146,146,191,254,191,255, 47, 57,216, 63,226,215,127,243, 55,
+ 64,192,155,175,189,129, 87,103, 12, 90,150, 60,211,248, 94, 64,171,213, 98,227,244, 25,144, 18, 35, 45, 86,186, 23,239,113,167,
+ 46,142, 19,136,102,235,147, 89,156,221, 9, 15,232, 12, 33,185,200, 95,126,242, 69,167,102, 54,144,102,103, 57,219, 81,158,200,
+ 95,110,126,247, 60,239,184,115,242, 60,162, 48, 64, 73,192,106,146, 52, 99,176,186, 78,171,219,231,229,151, 95,101,154,166,140,
+106,193,254,180,164,170, 42,150, 90,110, 10,210, 94, 90,101,237,204, 25,199, 99,215,134,118,187,227,240,187,198,112,239,254, 3,
+210,162,226,193,214,142,243,188,207, 22, 93,205,139, 92,104, 77,104, 10,166,251, 7, 28, 30,142,184,123,111,139,209,100, 74,119,
+176, 14, 94,132, 23,120, 88, 61, 69, 1,145, 31,146, 21, 37,103,206,157,231,104, 60, 68, 9,131,169, 75, 38, 71, 7,248,210, 80,
+ 76,143,152, 28,238,160,116,194,112,239, 17,163,131, 29, 38,227, 17,101,145, 83,149, 57,233,116, 76,183,219,118,171,148,186,166,
+221,234, 50,157, 78, 80, 74, 56,208,205,238, 30,113, 28,163,107, 67, 20,181, 64,121, 8, 21,224,251, 1,218, 64,167,211,163,221,
+238,226,135, 49,119, 31,238, 16, 4, 33,151, 46,159, 39, 77, 71,124,248,193,187, 28,238,237, 81,103, 37, 82, 73,250,131, 37, 86,
+ 79,157, 97,237,204, 25,190,243,246,219,152,170,162, 72,166,148,233,132, 98, 58,164,152, 78,169,242, 20, 99,107, 38, 73, 66,146,
+ 87,132,173, 30, 27, 27, 27, 8, 33,216,218,124, 68,187, 21,209,239,118, 26, 59,151,231, 80,175, 70,147,231, 46, 18,212,247,125,
+150,215,214,157,237, 10, 40,138, 18,173, 45, 55,110,220,163, 21, 15, 48, 6,222,121,231,155, 8, 81,242,242, 11, 23,104,121, 45,
+126,235,198, 62,255,175,175,254, 22, 85, 97, 8, 13, 76, 10,141, 95, 9,122, 49, 28, 30, 37,156,126,245, 28,191,243,254, 29,126,
+224,205,215,232, 32,249,149,119,222,103, 63, 45,155,162,126, 92,112, 2,160, 39,160, 43, 4, 93, 4,161,178, 68, 1,180, 90, 10,
+ 63,132, 32, 86,142,254, 22,197,196, 97, 76, 28,133, 4,129, 79, 20, 6, 4,161, 71, 16,184, 93,185,231,201,121, 33,247, 61, 53,
+247,138, 59,235,219,236,205,141,223, 61,223,155,255,191,106, 48,161,178, 9,226, 16, 18,103,113,154,113,105, 77, 53,143,175, 85,
+194,117,151,198,214,104, 93,113,234,204, 89,222,249,214,219,120,202, 52, 19, 49, 67, 20, 70,243,123,207, 60,251,161, 73,227,170,
+171, 10, 41, 21, 88,168,181,158,211,214,122,253,101,218,221, 30, 65,212,230,230,237, 59,206,179,239, 41,166,211, 49, 90,151, 72,
+ 44,155, 91, 15, 57,119,238, 44, 85, 85,145,151, 25, 81, 20, 33,180,161,156, 38, 76, 71, 19,124,165, 26,197,189,158,143,217,235,
+170,158,231,190, 23,165, 27, 21,231,121, 77, 81, 86,212,181, 67, 95, 59,117,251,140, 12,199,220, 18, 59,183,140, 41,133, 31, 4,
+ 4,129,187, 78,252, 89,214,183,175,154,105,137,187, 79,200,185,175,255, 41,247,255,134,234,167, 26,232,139,242, 60,119,143,117,
+164,154, 70, 17, 46, 62,118, 74,187,176,120, 95,104, 50,237, 19,218,135,121,226,153,117,221,240,204,122,231, 82,211,124,164,239,
+187,232, 97,207,119, 76,144, 5,161,223, 60, 45,206, 30,195,185,108,163, 27,114,193, 72,206,129, 80, 21, 25,211,241,148,201,100,
+ 74,150,185,162, 14,182,137, 87,109,211,238,180,136,226,216, 89,232,124,207,197,188,206,181,249,199, 99,107,163, 93, 65, 79,211,
+156, 52,205, 72,179,140, 44, 47,152, 38,153,235,212,173, 93,160, 49, 61, 54,228,254,100, 15,216, 83,246,170,198,206,119,180, 79,
+ 43,230, 31,215,129, 63, 45,122,245,241,204, 93,196,226,174,221,206, 79, 79,207,234,252, 63,201,116, 64, 45, 32,104,133,116,169,
+ 60,162,217,233, 47,118,183, 82, 57, 59, 67,187,219,193, 34,152,102, 5, 7,195, 35,140,144, 68,189, 30, 27,231,206, 98,149, 71,
+ 89,105,198,211, 41, 89,145, 51,222,219,193,238,151, 72, 19,210,107,173,209,239, 41, 34, 79,242,165, 31,254,179,188,242,210,139,
+252,242, 63,255,199,188,254,198,167,248,183,255,151,255, 43,160,228,239,252,111,255, 42,237,245,151,248,220, 87,126,156,149,142,
+226,239,255,221,191,207,112,100,104, 13, 46, 66,120,138,223,248,237,247,249,247,135, 19, 60, 17,224,171, 8, 33, 32,240, 34, 46,
+156,187,200,141,119,110, 49,157, 76,232,116,122, 28, 30,142, 88, 74, 75, 58,125,223,217,107, 16, 79,213, 55,156, 56,237, 62,197,
+109, 96,159,209,161, 31, 43, 85,221,233,121,241,144, 53, 19, 37, 45, 78, 56,172, 53,142,242,181,112, 32,155, 11,148,148, 36,144,
+ 62, 54,240, 8,219, 93,234,202,176,178,178,198,185,243,231, 89, 94, 91,229,149,113,193, 55,190,253, 30, 55,223,127,135,218,192,
+ 43, 47,189,202,168,146, 44,111,156, 37, 12, 20,123,219, 91,220,189,119,159,189,189, 3,242,178,100, 52, 77, 81,158, 71,228,249,
+148,198,193, 68, 66, 41,241,164, 79,169, 11,231,239,173,125,118, 15,247, 25, 78,106, 50, 3,231,206, 47,227,249,109,124, 63, 38,
+157, 30, 33, 67, 67,161, 19,202,122, 76,101, 70,228,197, 14,129, 50,232,172, 96, 58, 57,100, 60, 25, 81,167, 71,164,211,132, 34,
+155,178,190,188,132, 48, 21,123,123,251,140,167, 5,253,229, 37,194,131, 3, 90,157, 30, 23, 46, 92,160,174, 13,147,201,148,131,
+225,152,149,213, 53, 38, 73,130, 82,138,115,231,175,242,232,193, 67,122,237, 14,239, 62,184,199,234,250,128,186,214, 84,218, 16,
+199, 45,142, 14,167,220, 44,238,113,233,226, 5, 86, 87, 86,121,251,155,223,160, 63,104,241,210, 11,151,233, 93, 58,135,143,135,
+212,134,233, 36,229,198,157,187,188,254,105,197,233, 51,103,249,236,155,111,112,255,206, 29,210,233,132, 97,154,144,101, 35, 48,
+130,110,167, 75,171,235, 66,106,142,210,148,164, 24,114,233,252, 69,206,157, 61, 77, 93, 23, 78, 40, 87,149, 14,134, 18, 6, 24,
+109, 9,124,159, 97,158, 83,229, 25, 97, 16, 16, 26,139, 21,146,195,225, 17,121,150, 50,158, 20,172, 44,159, 37,203,107,190,243,
+238,183, 57, 26,237,115,254,236, 42, 8,193,158, 81,252,131,159,255, 26,187, 89,205,196,106,144,130,101, 33,153,102, 53, 81, 0,
+123, 55,238,243,250,155, 63,128,146, 30, 59,187, 71, 44,175,157, 37,246, 98,148, 25,185, 14,182, 65,100, 98, 4,190,181, 68, 82,
+224, 97,240,172,192,151,182,129,186,152,121,220,170,167, 92,225,142, 67,103, 23, 13, 67, 55, 74,247,253,227,131,230, 44,225, 74,
+ 53,221,152,148,174,219,247,125,213,116,154,238,207, 60,239,228,193, 84, 44,224,147, 17,246, 24,144, 34, 26,214,248, 76, 45,222,
+120,184, 49,110,247,142,180,244, 58, 1, 95,252,194,231,248,173,223,250, 77,148,148, 84,101, 73, 38, 19,176, 46,108,166, 29,196,
+142,111, 95, 59,194,152, 39, 21,166,185, 6,178, 60,167,172, 28,153,109,134, 85, 61, 26, 14,121,244,240, 17,131,193, 10,210,104,
+146,201,152,229, 65,143,253,131, 93,116, 93, 49, 88,234,179,191,191, 79,173, 75,132,213, 36,163, 35,238,239, 15, 89, 61,117, 6,
+164, 96, 80,157,166,183,186,140,105,178,185,171,178,162, 42,107,215, 81, 22, 21,101, 89, 83, 86,150, 74, 67, 93,187,181,220,108,
+127,110, 27, 57,187, 43,230,205, 10,173,137, 14,149,158, 90, 16, 44, 54,218, 3,217, 76, 4,100,179,202,104, 8,125, 79,211,110,
+205,217,112,115,209,222,236,222,212, 84,169,199,166,193, 79,212, 22, 97,177, 82, 52, 99,113,225,248, 64, 52, 49,127,200,249,191,
+101,103,157, 55, 98, 33, 93, 77,156, 76, 90,155, 59, 30,204,177,237, 90, 60, 57,189, 62, 73,195,113,206, 8, 99,106,172,169,168,
+171,146, 34, 43,201,211,156,170,168, 92,222,134, 16, 72, 79, 57,251, 90, 43,196, 11,220,225, 69,121,206,151,110,102,107,167,230,
+176, 40,172,179,196,205,172,210,198, 58,242,254, 76,160, 88,107,253, 52,245,187,125,166, 47, 93,124, 12,158,245, 15,130, 56,247,
+221,118,217,243,223,155, 34, 97,191,139,177,251,227, 63,159, 60, 97,219, 18,115, 53,173,120,140,248,102,155, 29,143,242, 61,130,
+ 40,226,238,189,135,180,122, 3, 46,188,112,137,170,214,108,237, 28,240,112,251, 22,147,220, 49,153,123,189, 14,131,213, 13, 46,
+ 92, 58,203,237, 59,215,249,195, 95,249, 19,124,239, 27, 95, 98,116,120,151,159,253,197, 95,224,251,126,232,223,228,212,153, 13,
+126,245, 87,254, 21,239,124,112,151,189,169,192,234,154, 78,220,226,155,191,243,219,124,233, 7,126,132,101,213,229,236,169, 21,
+ 54,239,222,134,105, 70, 91,133, 28,236,237, 51, 25, 30,130,177, 72,161,192, 90,238, 63,216,226,194,159,254, 49,110,190,247,117,
+ 4, 21, 69,154,210,105,117,201,178,156,238, 82,220,220,104,228, 51,227, 84,231,197, 93,216, 19,118,145,231, 21,244,185, 82,117,
+177, 19, 87, 51,160,131,156,199, 10, 46,198, 32,206,198,239,243,241,156,156,117, 64,146,192,147, 72, 17,115,176,183,203,237,219,
+119,225,214, 61,190,245,237,119,249,226, 15,254, 32, 85,158,178,182,212,101,240, 61,159,229,214, 71, 31, 48, 41,225,244,185,139,
+164,101,205,240,104,202,230,246, 46, 55,175, 93, 35,136, 2,164, 23, 96,165,203,186, 14, 60, 31, 81, 85, 14,217, 25,132,248, 66,
+ 50,170, 43,170, 90,179, 59, 76,121,237,204, 89,244,131, 7,108,116,123,248, 97,140, 49,134,228,232,128,233,209, 33, 58, 50,180,
+195, 10, 41,114,172, 78, 56, 58,120, 72,236,119,209,149,165, 76, 71, 28,108, 63,160,215,186,140,178, 53,186, 42, 25, 14,199, 46,
+ 13,173,179, 66,103,165,195,135,215,110,240,214,231, 46, 96, 45,108,110,237, 51, 73, 75,162,246, 18,149,174,184,126,251, 1, 65,
+ 24,147, 76, 18,140,217,195, 23,150,209, 97, 65, 85, 21, 28, 28,222,163,219,109, 51, 26, 37, 84,149,192,243, 5,186, 54,220,190,
+179,205,234,160,205, 96,185, 77, 85,245,121,112,247, 1,151, 47,156, 39,157, 36, 92,185,120, 5, 25,121,100,186,226,131,247,222,
+103,127,103,135,149,165, 1,103, 78,173, 83,100, 41, 73, 58,229,112, 40,168, 43, 75, 82,212,156,221, 56,195,133,171, 87,248,214,
+123, 31,113,243,163,247,177,218,162,155,209,173,203,113,223, 37,244, 4, 81,232,211,106,183, 40, 11,137,169, 74,226, 78, 23, 33,
+132,227, 36,104,195,131,135, 15,241,165, 66,121, 29, 62,186,118,147,189,131,125, 38,227, 61,206,156,217, 96,169,215,163,182, 45,
+254,254, 47,254, 38, 31,236, 30,209,246, 66, 86,207,157,101,247,209, 35,214,145, 84,166,162, 46,160,221,181, 28,221, 29,242,218,
+249, 85,146, 73, 78,112,169, 79,191, 29,211,178, 6,131, 37,109,108, 65, 18, 75, 4, 68, 64,128, 69, 42,139, 31, 73,252, 8,164,
+103, 81,190,179,159, 5,202,173,191,130, 38, 69, 45,240,189, 6, 26,115, 12,157, 17,243,188,139, 25, 76, 11, 36, 6, 37, 20, 82,
+205, 4, 90, 52,104, 83,209,116,240,222,137,107,125, 70,163, 59, 46, 60,110,231,233,240,177,210,137,252,180, 65,250,142,215,168,
+ 77,197,151,190,248,121,222,253,206,183, 27, 92,168, 96, 50,153, 16,248, 33,198,119, 0, 26,229, 5,212,117,141, 82,174,241,247,
+188, 0,207, 11, 8, 2,193, 36, 77, 8,252,144,178, 44, 9,252,128, 7,247, 54, 41,139,130,170, 44,144, 90, 83,228, 41, 66,118,
+121,244,232, 1, 75,253, 30,202,147,148, 85,137,167,156,187, 98, 60, 25, 83, 27, 77,146, 78, 49, 91,219,104, 11, 85, 85,209,234,
+245, 26, 69,123, 77, 93,215,205,200,189,166,172, 12, 85,109,155,253,185,105, 2,168,236, 44,199,214, 77, 46,213,226, 99, 34, 78,
+ 68,133, 50, 27,195,207, 24,178,214, 52,123,116,199,218, 63,153,218,189,160,177, 89,144, 54, 47, 54,158,159,168,169,108, 42,190,
+152, 99, 56, 26, 46,127, 67,169, 19,230,184,224,207,254,110, 86,196,109,243, 38, 22,111,252,143,241, 59,236,162,145,237, 25,129,
+ 86,110, 50,224,184,250,186, 44,169,202,130, 34,205, 40,178,156,186,170,231, 56, 88,229, 73,194, 56, 36,140, 34,252,176,225,254,
+123,106, 46, 28,158,147,112,140,179, 43,138, 74, 56, 34,167, 84, 72,233,185, 87,132,144,104, 3,149,214, 46, 79,253, 88,224,244,
+252,189,250, 39,165,183,125,183,191,158, 53,130,127,252,228,245,188,169,129, 88,124, 18,158,211,133,126, 28,110, 86, 44,236,123,
+ 31,255,239,241, 52, 27, 99, 12,173, 86, 76,167,219,226,254,230, 54,183,110,223,227,212,198, 6, 97, 24,241,202, 11, 47,240,214,
+247,124,129,247, 63,188, 70, 85, 85,156,191,112,133,238,160,205,183,190,245, 54, 15, 54,247,184,112,102,132,169, 43, 70,195, 29,
+246,239,189,131,170,206,176,214,130, 95,123,231, 61, 62,124,255, 26,166, 46, 49,133, 97,243,254,109, 70,247,111,179, 42,214, 56,
+123,102,192, 71,239,191,205,214, 71, 31,160,140,102,125, 99,137,107,215,190, 69,150, 14,137, 34,159, 44,203, 56, 56, 58, 36,108,
+117, 80, 65, 64, 59, 14,216,221, 25,114,230,220, 37, 52, 21,179,140, 59, 97,213,252,194,156, 63, 22,143, 77, 67,172, 93, 44,244,
+ 79, 90,137, 30, 79,242,123,188,168, 31,143,221,189, 19,222,211,227,148,164,147, 69,221,107, 58,167, 40, 10,231, 55,200,205,157,
+125,138,134, 96,134,177,236, 28, 13,121,235,141,215,185,122,106,153,183,223,221,226,165, 55, 63,207, 36, 41,104,103, 37,183,110,
+221,226,230,157, 59,156, 90, 29, 32, 61,143,188,168,232,132, 49, 66, 42,170,218,160,171, 10,163, 28, 90, 50, 47, 50,132, 23, 96,
+ 17, 84, 66,114,148,101, 28,140,224,165,151, 78, 19, 68, 17,219, 71, 41,227,225, 46,173,229, 62, 58,217, 99, 56, 42,160,227,130,
+ 60,178, 35,216,123,116,128, 47,246, 8,164,165,168, 82,148,168,153, 30, 29, 2,138, 48,104,147,100, 37,105,234, 14, 15, 69,106,
+185,183,157,210,187,183, 67,158,101,196,113,139, 36,183,220,188,123,207,117, 62, 26,194,208, 82, 22, 5,117,169,169, 43,195,160,
+237,209,110,249,156, 59,191,206,218,202, 10, 74,121,206,182, 98, 33,138, 98, 30,237, 12,185,127,127,147, 7,187, 35,150,250, 7,
+ 4,126,192,230,118,130,180,150,237,253,132,254, 82,139,201,116,196,107,175,188,204,209,254, 62,129, 39,185,116,233, 2, 90,215,
+244,250, 61,226,184,197,210,210, 58, 31,126,116,141,251, 15,182, 81, 81,155, 75, 23, 46,243,254,251,119,184,126,253, 6,117,145,
+ 50,232,119, 41,146, 41,189,118,204, 36,205, 57,200, 51,122,253, 30,158,231, 83,213,154,233, 36, 97,105,121,149,118, 28, 97,132,
+228,149,151, 95,165, 46, 42,182,247, 70,220,188,113, 11,235,105,124,207,146,231, 41,189,179, 23,184,185,155,240,179,191,254, 46,
+214,192,171, 47, 93,224, 31,253,211,255, 47,127,237,127,253,147, 92,251,185,127,193,107,107, 17,161, 41,144,161,199,209,157,123,
+124,230,133,179, 12,143,246, 40,124,201, 90,183,205, 25, 95,144, 25, 65,165, 53,149,128,200, 10, 58, 66,208, 50, 16, 73,139, 84,
+224,133, 2, 63,146,168, 16,148,175,240,252, 0,223, 11, 9,188,144,192,115,112,167,192,247, 9,125, 15,207, 63, 46, 60, 2, 57,
+ 31,255, 42, 41,143, 57,231,194, 52,150,170, 99, 16,205,227, 43, 65,113, 34,236,200,237,206,103,217,225,206,120,236, 97,133, 11,
+217, 17, 2,180,174, 29,246, 20, 75,191,215,226, 71,127,248, 43,252,226, 87,191,234,198,179,218, 32, 35,167, 1, 72,211,148,118,
+ 91,224,123, 97, 51,169,169,209,218, 41,185,103, 17,176, 8, 65, 20,197,248,190,207,246,230,102, 19,150,162,121,112,231, 54,131,
+ 65,143,219,183,111, 49, 28, 30,112,250,212, 26,117, 93, 48,153,140, 16, 66, 33, 85,192,189,205,135, 46, 82,180, 21,115,239,250,
+ 53,214,142,142,184, 92,191,200,217,176,213, 8,225,106,138,170,162,170, 52, 85,101,209,181,235,208,107, 61,163,100, 10,247,115,
+ 41,183,186,152,145,217,102,135,242,121,103, 62,211, 29, 52,202,125,119,200,153,121,222, 77,115,128, 18, 96,229, 83, 11,227, 19,
+187,191,231,212,141, 39,118,234, 79,104,130,152,123,254,141, 49,238, 48,103,236, 92,255, 99,133,108,214, 15, 98,230, 85,108, 66,
+174, 30, 47,230, 60,145, 92,119, 12, 77, 19,141,184,120,193, 53,212,120,210,235,178,164,204, 50,178,212, 65,165,172,118,226, 56,
+225,249,196,173,144, 86,187, 69, 20, 71, 4,161,235,214,165,242, 26,197,253,241,189, 19,227, 84,242,212,117, 99, 21,212,148, 85,
+ 73, 94, 20,110,162, 82, 85, 20,101,125,220,169,159, 44,160, 79, 25, 77, 63,102, 65,146, 79, 20, 97,158, 67, 25, 19,223, 85,113,
+127,218,232,253, 89, 66,187,199, 15, 1,150,231,140,245,159, 2,149,155, 37,143, 45, 46, 29, 78, 20,248,199, 39, 24, 11,197, 76,
+249, 46,126,178,219,235,242,169,254, 42,157, 86,155, 47,125,225,139,220,191,255,136,111,126,251, 93, 66,169,136,148,207,193,214,
+ 30,213,106,206, 65,149,209,138, 58,236,236,238,177, 59, 60, 32,240,115, 14,139,156,143, 30, 62, 32,247, 20, 50,140, 24, 30, 29,
+114,235,189,111,209,243, 37, 42,153,176,185,121,159,189,221, 45, 86,122,130, 83, 23, 47,112,243,222, 14, 97,167,203,224,212, 6,
+ 97,183, 77,146, 77, 72,243, 49,210,171,209,178, 98,255,232,128, 66,151, 36, 69,225, 44,111,186,230,225,189,123,180,123,109,150,
+ 87, 58, 39, 25,244,226, 57,167,220, 39,222,127, 54,197, 79, 46,140,220,149, 60, 86,187,250,190,127,162,208, 47, 62,142,162,137,
+193, 61, 89,212, 37,190,239,225,249, 1, 7,195, 33,211,172,224, 51,159,251, 30,238,220,188,197, 71, 31,125,196,246,221, 45,170,
+116,202,235,175,190,204,103, 62,243, 38,119,247, 38,172,116, 87,216,220,188,199, 59,239,190,131,242, 3, 70,163, 17,113, 24, 82,
+149, 25, 85,158,225,121, 30,105, 93, 80,105,237,132, 48, 13, 12,163, 40, 50, 12, 2, 63, 12,185,120,105, 3, 38,187, 76,142,134,
+ 24, 43,120,112,144,210,235, 7,244,130, 26,207, 20,140,134, 19, 38,123,208,107,199, 28, 14, 43,108,125,200,250, 90, 72, 86,142,
+144,161, 15, 66, 58,196,105,105, 40,202, 9,181, 81,236, 31,100,156,111,175,176,115, 56, 34,205, 45, 7, 71, 57, 82,194, 36, 27,
+113,106,125,131,157,157, 17, 86, 57,235, 88,150, 78, 17,158, 96,109,169,197,213, 75, 27, 92, 62,127,154,149, 65,151,229,193, 18,
+ 81, 28, 59,212,102, 81, 33,164,199,229,171, 87, 41,138,146, 71,247,239,241,246,123, 31,241,206,187, 55,184,183, 61,114,190,115,
+160,253,240,144,165,150,194,199,112,184,125,192,197,139, 27,140, 39, 71,124,248,209, 50,173, 86,196,247,126,207,247,162, 75, 67,
+ 58,173,240,189,128, 7,247,238,208,233, 45,193,254,152, 51,235,167,216,195, 16,199, 17, 89,158,179,187,179,205, 75, 47, 92,225,
+165, 23,175,224, 53, 20,182,186,214, 76,146,148,189,253, 67,118,183,119, 56,115,230, 12, 69,158,209, 10, 91, 76,166, 67,170, 90,
+208, 27, 44, 83,218, 12, 91, 31, 82, 87, 25,147,180,230,191,253,217,175, 51, 45, 28,253,237,253, 91, 55,249, 27,255,233, 95,227,
+230,237,123,108,151, 21, 43,189, 24, 41, 42,170, 90, 98,199, 41, 43,129,225,214,225, 35, 14,166, 67,214,150, 6, 44,121,130, 88,
+250, 12,167, 25,194, 66, 91, 72, 58, 72, 98,171,241, 45, 40, 31,164, 15, 42,144, 4,145, 71, 24, 5, 4, 65,216, 88,217,220,117,
+232, 55,157,122, 16,184,189,184,179, 74,169,249,157,204, 21, 24, 11,168,230, 90,181,141,157,169,233,222, 23,196,113, 79, 22,149,
+230,198,210,132,159, 96,108,227, 43,174,157,139,198, 19, 88,131, 83,109, 55, 66, 83,173,107, 94,127,243,117, 62,248,224,125,238,
+220,185, 79,183,219, 33,138, 98,130, 32,160, 46,114,151, 87,208,234, 97, 13,206,206,153, 78,233,118,187,232,218,221,175,166,211,
+ 4,207, 31,178,180, 60,101,111,127,159,188,112, 80, 19,229, 75,194, 40,228,222,189, 59,244,123, 61,122,189, 30,251,251,251, 84,
+ 69,137, 84, 62,251,251,251,236, 13,135, 20, 53,200, 86,159, 86,187, 75,167,187,196, 52,201,121,240, 96,139,181,181,117,170,202,
+184, 34, 94, 27,106,237, 32, 50,198,186, 25,137, 35,171,113,236,245,111, 18,234,132, 20,115, 45,130,131,120, 53,200,220, 6, 32,
+ 51,211, 96,205, 82,222,176,245,113, 60,235,124,186, 97, 23, 58,243,133,194, 57, 47,166, 79,169, 40,207, 88, 15,158,200, 91,183,
+ 44, 24,198,143,213,245,243, 14,125, 30,196,178,216,192, 29, 55,114, 39,114, 57, 30, 31,104, 47,150,133,197,204,246,230,125, 71,
+142,171, 40,203,130, 60,115,111,186,110, 30, 79, 33, 8, 66,159, 86, 59,166,213,110, 17,182, 98,188, 48,112,235, 74, 33,209,179,
+245,124,243,195, 27,227,118,243,101, 81,144,103, 57,105,146,146, 36, 41, 69, 89,186,233, 74,229, 14,126,222, 44,141,102,182, 38,
+144,139, 39,131, 5,182,187,108, 44, 80,199,211, 8, 49, 15, 79, 56, 81, 4, 79, 20,247,199, 31, 14,113,194,166,246, 73, 59,252,
+ 69, 68,222,199,141, 95,212, 99, 31,251, 56,118,118,254, 92,136, 25,113,221,141,217,177, 46,222,241, 36,154,125, 97,246, 46,103,
+118, 2,220,137,183, 65, 70, 10,107,217, 88, 95,231,104,148,208,138, 67,222,254,230,239,176,188,178,202,214,246, 22,121,153, 98,
+148,101,127,188,205,169,100, 21,240, 80, 86, 33,171,140,241,193, 45, 34, 95,226, 35, 57,220,185,206, 75,231, 6,132,237, 1, 37,
+ 17, 34, 59,228,220,198, 57,166, 47,189, 73,245,219,223,164,127,170, 77,119, 99,137,157, 95, 29,178,253, 96,135,159,253,153,255,
+ 31,215, 63,122,143,155, 55,239,240,127,249,191,253, 61,246, 15, 39, 28, 36, 71,152,192,163,172, 42,166, 73, 69, 59, 92, 97, 88,
+111, 99,180, 97,124,116, 0, 86, 99,244, 5,172,106, 50,125, 79,244,233, 79,203, 39,150,199,238,126,123, 18, 28, 59, 95, 37, 46,
+ 68,232, 42, 49,139,173,148,243, 23,252, 98,167, 62,239,112, 56,190,102, 28,173,203,107,246,107, 78, 60, 19, 4, 62,105,105,121,
+180,185,195,238,206, 62, 55,131, 27, 92,121,225, 10,185, 16, 76,222,189,201,157,221, 41, 71,249, 13, 94, 46, 60, 46, 94,185,204,
+189,251,119,249,157,111,126,131, 32,246,233,117, 58, 4,128,153,230, 44,251, 10,163, 36,217,180,196, 8, 65, 13,248,141,143,191,
+ 18, 2,227, 11,148, 54,156, 13, 67,162,170,166, 28,215,236,238,214,224, 9, 6, 27, 49,120,112,255,238, 30, 93, 43, 49, 9, 24,
+165, 56, 40, 50,172, 82,172,172, 13, 40,117, 74, 85,123,120, 97,155, 73,233, 68,102, 43,107, 29, 70,163, 3, 70,147, 20,229, 89,
+210,209, 33,245, 56, 97,117,169, 71, 43, 94, 97, 60, 61,164, 42, 75,134,251,251,244, 58, 29,242, 36, 39,240, 5,161, 18,156, 63,
+183,202,139,175, 92,225,234, 11, 23,104, 69, 1, 82,107,252,198,214, 82,107,205,112, 50,225,112, 56, 34, 41, 43,242, 52,163, 99,
+ 51,222,124,101,131,239,253,204, 37,110,222,216,226,231,126,243, 67,110,237,143, 24,213,138, 60, 13, 88, 82, 21,173,113,202,189,
+ 59,247, 41,173,100,227,236, 69,118,247, 14,249,218,175,252, 26,167,214,150,233, 45, 13, 24, 37, 41, 15, 54,183, 57, 24, 79, 89,
+219, 56,227,212,182,182, 34,157,140,185,250,226, 75,180, 95,122,153,195,225, 1, 90,120,120, 18,170,218,165,109, 21, 69, 73,153,
+231, 32, 20, 66,122,224,183,152,214,130, 68,123,136,160, 69,111,229, 20,123,195, 45,116,150,131, 47,249,234,219,215,120,231,222,
+ 8, 3,228,210, 80,151,146,255,246,159,255, 60, 90,192,154,182,212,129, 97,185, 35,169,166, 5,195,137, 34, 86, 45,250, 75, 49,
+113, 16,210, 9, 91, 40,171,168,107,237,144,176, 82,208,177, 16, 91,131, 47, 12, 97, 0, 97, 27,130, 16, 66, 95, 46,216,215, 60,
+188, 64, 33, 61,217, 56,199,164, 27,107, 42,209,216,211,100,115,175, 88,136, 9,158,145,232,230,240, 26, 55,181, 83,184,235,219,
+221, 14,154,244,174,102,127, 62,179, 74, 27,235,178,221,133,177, 72, 93, 53,200, 16,235, 82,194,132,117,119, 25,161,154,172,119,
+144, 70,226, 99,248,145, 31,249, 17,254,233,127,255, 63,224, 7, 49, 82, 40, 52, 16,117, 20, 82, 4,196, 97, 11, 33, 44,157, 78,
+136, 49,154,170,206,168, 74, 67, 85,228,160, 13, 71, 71, 99,118,118,247,248,190, 47,124,129,225,100, 76,187,221,225,229, 87,175,
+160,139,154,135, 15, 30,226,123,224,121,146,173,237, 45,192,199,232,154, 59,247,239,147,217,128,176,189, 76, 86, 7,248, 58,226,
+254,238, 17,253, 82, 48, 48, 49,163,201, 35,148, 18,172,174,175,128, 54,104, 42,116,179,138,243, 60,217,132,177, 40,152,233, 22,
+230,175,111, 23, 81, 58, 91,181, 33, 22, 1, 64, 52,130,175,102,143,109, 42,208, 22,137,158,131, 2,231,137,106,179,251,248, 44,
+ 63,164,153,156, 32, 5, 86, 10,140, 20,120, 56,102,190,155, 72,219, 39, 90, 14, 97,143,109,209,243,134,116,161,217,159, 39,118,
+202, 5,202,221,220, 89,193,201,251,221,220,247,214, 8,107,141, 65, 24,215, 32, 8, 43,155,175, 47,142,113,179,243,189,191,155,
+216, 56,129, 92, 73,157, 87,148,105, 73, 94,214,148, 90, 99,133,117, 44,132,200,195,143, 3,100,224, 33,131, 0,225,185, 38,193,
+ 52,185,176, 51, 18,158,214, 53,198, 84, 84, 89, 78,149, 37, 20, 73, 58,135, 58, 85, 53, 84, 13, 87,223, 87,222,239,141, 40,247,
+113,227,242,143, 3,195, 28,143,173,126,111,163,251,103,145,233,158,183, 38,248,184,136, 80,241,148,166,222, 46, 62,169, 79,227,
+ 89, 9, 71, 66,210,117,205,100, 60, 98,185,215,231,238,195, 77,150, 87,215, 72,146, 41,135,135,251,148, 69, 70,150,165,236, 31,
+ 28, 80, 86,238,137, 78,178, 41, 85,149,211,235, 46,209,110,183,153, 76,134,236, 31,108,227,133, 10, 21, 72,190,250,203, 63,199,
+222, 43, 87, 73, 15,247,105,213, 21,127,247,111,253, 77, 90,173,144,189,237,125, 36, 62, 63,251,143,255, 9,167, 78,173,243,198,
+ 11, 87,217,158, 20,100, 81,140,151,250, 84, 70,162,100,200,131,205, 93,206, 92,188,202,245,247,190,205,210,210, 10,147, 81,234,
+ 70,106,101, 69,216, 14, 92, 44,172,144,159,140,239,255,180,238,253, 57,207,199,211, 86, 36,179,110, 92, 52,184,196,217, 65,205,
+ 83, 2, 79, 53, 84, 47, 37,137,148, 68, 9,197,187, 31,125,192,193,246, 46,129, 80,220,248,240, 6,143, 30, 62,226,236,229, 43,
+252,208, 31,249, 81,174, 93,191,129,180, 22,207,243,121,112,231, 46, 15,239,220,101,173,211, 33,175, 28,128, 65, 40, 15, 21,182,
+ 48,190,162, 52, 53,147, 60,161,106,190,174,215,172, 13,102,168, 69, 37, 64, 97, 56,218, 57,160, 40,106, 14, 74,203,122,183,197,
+ 82, 38, 8,234,154, 42, 55, 28, 86, 21,177,144,196,177,135,150,138, 51, 23,207, 98,172,179, 7, 69, 97, 72,183,219,161,219, 83,
+180,194, 54,113,224, 19, 69, 43, 40,207,137,208,246,183, 15, 81, 6, 46, 94, 57, 71,110, 44,129,167, 24,111,103, 76, 68, 70, 29,
+134,236, 15,167,180,164,224,202,133, 85, 94,122,241, 42,203,107,171,136,176,205,238, 40, 97,247,112,200,157,251,143,216,220,222,
+103, 56, 74, 73,139, 10, 83,107,206,158, 63,199, 75, 47, 92,102,235,250, 71,156,107, 75,190,244,217, 23,249,222, 79, 95,228,213,
+151, 46,241,139,191,241, 14, 63,255,141,143,120, 56, 45, 56,144,112, 88, 8,186, 67,193,114, 55,228,237,183,175, 19,196, 1,123,
+ 7,251,124,234,234, 25, 46,156,215, 92,186,122,149,254,218,105,118,246, 14, 48, 70,227,251, 30, 73,158,147, 74,120,248,224, 62,
+103,206,158, 33, 80,138,107, 31,125, 72,232, 73,166,147, 49, 75,253, 37,234,170, 98, 58, 30, 83, 27, 88, 90, 62, 98,237,212, 89,
+202,218,146, 79, 71,248,109, 31, 91, 79, 81,229,148, 52,133,180,213,225, 95,190,123,147, 68,231, 40,161, 29, 93, 84,216, 70,180,
+ 20, 33,100, 65,220,175,185,176,226,145, 71,134, 97, 10,165,182,220,184,191,205, 31,106,119,233,174,109, 32,252,128,122,154,208,
+145, 2, 79, 64, 91, 24, 66, 1,190, 15, 81, 87, 17,183, 92,170, 85, 16, 52, 94,244,198,138,230, 55, 59,244, 89, 39,233, 41, 57,
+183,171, 73,197,220, 70, 57, 19,246,138,121, 76,178, 99,125, 31, 23,119,121,194,194,182,248,126,227, 48,114, 93,166,177,160, 27,
+152,203, 28,188,232,196,103,110, 55,238,138,157,169,103,153,228,150, 51,167, 78,241,253, 95,248, 2,191,249,155,191, 77,191, 55,
+160, 44, 43,252,192, 67,226, 99,180,193, 83,150, 86, 20, 82,213, 53,121, 94,224, 7, 45,164,231, 64, 54, 65, 16,144,102, 41,167,
+206,158,225,204,153, 13,146, 52, 65, 42, 15, 97, 37,127,241, 47,254, 69,110,221,186,206,237,187, 55,168,140, 37,207, 11,164,240,
+217,217,155, 64,220,161,165, 74,194,184,164, 28,142, 48, 2,140, 12, 49,140,136,194, 16,165, 36, 69,181,205,217,179,103, 8,130,
+144, 60,207,209, 74, 59, 29,145, 82, 78, 80,232,169, 5,109,129,152,119,234,114, 22,108, 34,196,177, 88, 86, 90,172,148,110, 58,
+103, 13, 70, 55,170,245, 38, 31,221, 88, 57, 27,112, 44,236,171, 79,180,192,243,195,212,140,169, 97,165,108,120, 89,226, 41, 99,
+240,231,235,128,236,227, 45,255, 49, 91,235,233, 28,148,134,166, 55,119,252,204, 80,216,115,142, 61,115, 11, 29, 11,226, 62,163,
+107,234,170,164, 42, 29, 33, 48,205,114,106,173, 27, 41,130,154,147, 2,163, 40, 34, 8, 92,135, 46, 16,205,181,100,230,212,199,
+186,118, 26,135,170,202,201,211,140,116,154, 48, 25, 79,153, 76,147,198,113,226,166, 52, 78, 40,234,127,119, 69,253,147, 20,230,
+ 79, 82,220,127,175, 62,242,223, 11,114,246,169,186,128,217,190,228, 99, 10, 61,243,209,207,211, 66,102,142,167, 8,101, 85,128,
+ 53,140, 39, 35,134,163, 33,201, 52, 33,138, 2,166,147, 17, 82, 24,119,115,240, 20,182,212, 88, 12,163,209,136, 91,183,110,113,
+235,134, 19, 34,221,123,120,143,239,124,243, 27, 84, 89, 70, 89,229,220,189, 59,162,156,110,115,249,212, 41,126,224,251,191,159,
+213,149, 1,189, 65, 15, 35, 60,242,218, 69, 42,164,197,148,221,237,219,172, 3,163, 81,129, 41, 53, 34,240,144,194,227,218,173,
+219,252,153, 63,250, 3,252,234,207,255, 52,201, 36,165,213,238, 80, 25, 77, 94,148, 4,237,176, 81,141, 62,198,104,127, 82, 51,
+247, 68, 31,255,201, 10,190,125, 34,112,224,196,227, 54,139,181,156,189, 40, 23,118,242, 66, 56, 33,216,157, 91,183, 57,125,250,
+ 44, 75,237, 22,183,110,126, 68, 86, 86,188,251,157,247,185,244,154,224,205, 55,223,164, 46, 11,118, 30, 62, 98,103,107,139, 58,
+207,137,253, 0, 79, 26, 38,101,193, 97, 90,224,251, 33, 71,121,198, 52, 77, 41,154, 49, 91, 32, 5, 45, 47,192, 52, 62, 81,217,
+ 64,179,242,178, 68, 99,153,214,150, 3, 41, 24, 31,101,188,214,238,225,215,154, 90, 67,237, 73, 10,109,232,198, 62,203,203, 3,
+ 52,150,209,100, 2,198,178,186, 54,192,154,154,229, 65,143,100,146, 80,226, 83,150, 41,158, 50, 36,147,148,118, 43,102, 50, 77,
+ 88, 90, 93,226,222,163, 77,146,209, 4, 99, 4,195,170,230, 40,157,210,247, 5, 87, 78,111,240,210,139, 87,232,118,186, 76,179,
+138,155,239,222,228,219,239, 95,231,206,246,144, 73, 89,207,111,116,224,198,113, 47,156,123,137,255,224, 63,251, 91,252,187,127,
+254,127,196,240,254,125,210,163, 33,159,253,226,139,188,254,234,171,252,248, 15,188,201,114, 71,242, 75,223,186,201,189,189,156,
+157, 28,242,160,197,120,191, 32, 28,142, 89,234,123,224,133,228,132,132,189,101, 14,198, 46,234, 84, 91,195,246,206, 54,175,190,
+242, 10,254,242,128,163,195,125, 38,147, 49,123, 59, 91,156, 59,119,150,208, 87, 4,189,142, 11,120,241, 61,146,241, 8, 33,192,
+247, 61,234,170,100, 50, 30, 35,188,128,218,122,140,234,146, 73,145, 16,162,201, 85,151, 27, 59,154,135,195, 9, 66, 25,151, 19,
+ 2, 88,105,177, 40, 60, 13,171, 29,203,133,243, 33, 81, 54,193,250, 18,225, 1,190, 96,146,164,228,149, 6, 63,192, 11, 99,194,
+ 73, 66,208,168,221, 35, 1,113, 4,113, 91,208,234, 5, 78,221, 30, 6,132,190, 34, 10,125,194,208, 39,108,172, 84,158,239, 17,
+ 6, 65,131,121,149,120, 13, 29, 78, 52,194,216,217, 88,214,217,171, 26,109,145,181, 39,136,150,162,185,227,203, 5,128,146, 56,
+110, 7,143, 25, 15,194,204,239, 57,198,104,102,203,122, 93, 59, 27,154, 39, 29, 5, 77, 42,209,228,139,215, 88, 97,121,227,141,
+ 55,216,221,217, 99,123,107, 23,169, 36, 85,165,137,252,160,201,243, 22, 84,101,137, 31,198,236, 29,140,233,175,244,240, 98,119,
+112,146, 94, 64,158, 23,236,237,108,211, 95,234,210,235,245,208, 6,138,188,196, 8,201,167, 62,253,105,240, 36,191,248,203,191,
+138,242, 58,236,110,237,179, 63, 44, 81, 85,142,106, 27,142, 38, 83, 36, 62, 94, 16,145, 63,218,102, 60,205, 24, 44, 13,232,118,
+218, 76,146, 20,172,164,213,138,105,119, 58,116,151, 92, 51, 80,235,186,177,154,185,157,186, 84, 51,151,192,241,154,237, 56, 77,
+108, 65,119, 32, 92,232, 14, 6,215,177, 35, 26,184,139,104, 72,173,226,177,130,107,231,108, 11, 33,154, 3,151,176,115,251,173,
+157,233,116,236, 39, 95, 33,158,172, 5,226,100, 70,137,253,152, 58,240,148,183, 89, 33,159, 21,120,187,192,221,182,198,161,192,
+117, 89, 83,230, 37, 89,154, 81, 85,174, 0,207,234,134,187, 62,253,121,195, 99, 27, 78,253,220, 86,221, 8, 22, 29,193,175,162,
+ 44, 10,178, 52,101, 58, 73, 24, 79,166, 36, 73, 78, 85,187,207,145,194,101, 8, 40,165, 62,174,168,139,223, 87,167,254,180,200,
+ 86,219,216, 25, 30, 47,198, 79,132,202, 63, 39,153,237,187, 21,232, 61,213,114,240,172, 2,181, 40,186, 56, 49,190,127,242,123,
+154,139,194,148,162,170, 10,170,170, 66, 73,193,185,243,231,121,225,234, 85,146,233,148,218, 24, 60, 37,185,125,235, 38, 8,197,
+100, 60, 69,107,195,181,235, 35,167, 40,142, 3, 46,156,190, 64, 63,140,216, 88, 89,102,105,208, 35, 12,125,202,116,138,210,154,
+237,241, 1, 91,163, 45,234, 50,163,229, 7,212,121,201,248,240,128,181,213,152,218,100,212,182,205,246,163, 45,231,157,164,198,
+243, 12,119, 30,222,101,249,236, 95,224,252,197,171, 20,163, 9,211,163, 49,247, 30,221,115,254, 82,227, 86, 44,198,216,103,218,
+255,158,167,129, 56,126, 60,196, 83, 21,159,207, 42,232,243,142, 93, 46, 30, 6, 23, 56, 3,205,233,219,143, 2,250, 43, 43,252,
+198, 55,127,135,229,126,143,165,165, 37,142,118,246,104,245,150, 16, 69, 69, 58, 28, 18,199, 17,198,104,142,198, 71,238,243, 76,
+133, 31, 40,168, 4,133,214,140,138, 4, 97,181,251, 90, 82, 16, 69, 17,212, 21, 26, 73, 13,152,230, 64, 97,177, 76,171,138,229,
+ 48,112,127, 14,248,113,139,173, 44,193,139, 3, 70,149,225,194,185, 21,234,209,152,149, 83, 27,132,173,152,251,143, 30,146,231,
+ 21,237, 56,162,214, 2,101, 53,201,100,132,209,150,201, 36, 33, 73, 38, 72, 41, 73,167, 57, 65, 52,224,236,229, 11, 36, 7, 7,
+120, 85, 77,169,107, 50,223, 35, 43,106,148,144,116, 98,159,139, 23,207, 18,197, 49,219, 7,135,252,238,141, 91,220,222, 25, 49,
+ 46, 52, 37,130, 90,136,121, 78,183, 16,110,227,251,171,191,246, 27,252,241, 63,253,231,152, 28,236,176, 82,215,248,155, 21,245,
+ 47,125,132, 30, 11, 46, 92,189,192,231,222,120,145,203,231,214,249,103,191,248, 13,222,125, 48, 33,177, 26, 25,134,180,253,154,
+ 51,103,214, 88, 94,238,179,127,184,207,251,215,111, 19,199, 46, 17,112, 48, 24,224,121, 62,105,150, 98,235, 26,165, 20, 89,154,
+ 18,250,138, 60, 77, 8,123, 29, 60,207,195, 88, 75,150,229,132, 97, 4,184,200,201, 78,167,139,239,251,164, 69,141,106, 47,179,
+187,255,128, 81,154, 19,166, 25, 94,107,141,239,188,253, 62,153,177,232,121,119,165,193, 42,164, 9,104,219,146,243, 29, 75, 71,
+ 25, 42, 27, 51,169,106, 50,235,225, 71,109, 94,125,225, 37,206,172,174, 83,158, 75,233,182, 91,100,135,194,141,219, 21,132, 33,
+180,219,130,168,235, 19,181,124, 90, 97,139, 40, 8, 9,124,233,114,220, 67,159, 40, 10, 9,195,160, 9,101,113, 30,244,153,218,
+218, 83,202, 89, 87,165,116,168, 84,173,143,193, 83,130,199, 66, 70,196, 44,254,227, 9,161, 41,243,206,241,120, 93,103,165,179,
+ 76, 41,229,205, 25,224,198, 58, 17,155, 80,198,249,172,133, 68, 74,237,190,190, 54, 32, 44, 95,249,202,151,249,229,175,254, 50,
+123,251,135, 46,193, 44,112,118,175, 32,244, 49,104, 10, 3,211,220,112,243,189,107, 68,113,135, 65,127,137,184, 19,210,239,119,
+233,117,123,212, 69,198,214,163, 17,103,207,157,199,139, 35, 39,152,242,125,222,248,204, 91,228, 90,240, 79,254,187,159,227,225,
+131, 49, 70, 74, 58, 94, 76, 90,104,172,173,232,181, 91,104, 43,168, 43,195,206,222, 33,251, 7, 71,196,113, 72,183,221,161, 42,
+107,214, 86, 87,209,181, 5, 90, 44, 45,117, 9,130,128,188,200, 93,183,222, 68,149, 74,117,108,101, 21, 51,253, 76,211, 81,207,
+139,251, 44,235, 65, 58,206,175,197,121,176,157, 48,177,201, 5,183, 46,107,220, 90,129, 53, 26,225,205,214,128,170,177, 22, 51,
+ 79, 64,155,239,190,197,147,162,186,231, 21,244,199, 91,244,249,138,213,206, 18, 53,237, 2, 60,220,158,152,192, 31,239,248, 23,
+212,237, 98,241,235, 52,133, 94, 27,108, 93,161,171,138,186,104,104,111, 89, 65,217, 20,105, 48,243,200,222,217,184, 94, 27,141,
+173, 29, 39, 95,215, 78, 24, 57,139,177,213,117, 77, 85, 86,205, 30, 61,103,154,100, 76,166,206,151, 62,183, 19, 54, 66,227, 48,
+ 8, 29,251,253,153, 62,191,231,128,102, 62,174,184, 62,175, 99,183, 11, 69,242, 89, 93,251,243,146,216,158,182,103,127, 90, 8,
+201, 83, 11,251,204,131,253,216,148,193, 26,243, 84,139,215,252, 52,198,211, 97, 43, 0, 97, 24,114,254,220, 89,172,149,124,207,
+231, 63,207,191,252,149,175, 81, 27,205,181, 27,183, 17, 82,144,107,131, 31, 69,132, 97,200,250,218,128, 94,183,139, 39, 20, 81,
+ 16, 64, 93, 18,216,154,100,111,155,123,187,155, 76,215, 6,180,218, 45, 20,146, 80,120, 4, 97,204,218,250, 26,117,153, 17, 5,
+ 1, 86, 27,178, 94,151,178, 58,162, 29,120, 28,165, 16,183, 99,146,170, 66,138, 18, 93,167,236,238,237, 16,180, 59,200, 32,198,
+243, 53,210, 43,136,219, 61,116, 51,252, 22, 11, 48,134,103, 58, 10,236,239,113,132, 98,159,173, 76,117, 47,122,154,142,200,206,
+133,114, 44, 32, 21, 63,188,121,139,107,183,111, 50,201, 51, 38,105,198,214,158,194, 42, 65,128, 71,251,240,136,177,242,121,127,
+103,139,110,183, 67, 16,135,164, 69,206, 56,207, 32, 53, 72,161, 28, 45, 14,129, 39, 29, 46, 52,244, 60, 23, 5, 89, 89, 10, 91,
+185, 24, 72,225, 49, 83,161,100,214,144, 40,193,210,114,159,124, 56, 69, 26,131,215,246, 57,164, 70,251,146,241,116, 74, 47,240,
+ 28, 29, 48,138,121,180, 51,162, 29,194,202,160,207,209,112,204, 96, 41, 32, 75, 11,198,227,132,213,181,101,146,244,128,110, 43,
+ 70, 32,153,228, 5,189,158,199,100,123, 23,207, 15, 25,231, 5, 59, 89,133, 4, 6,158,228,234,185, 13,226,200,231,131,235, 55,
+185,187,187,207,131, 81,202,176,178, 24, 33,209, 77, 1,153,221, 90,108,131,172,172,171,154,253,189, 7, 88, 79, 51, 2,138, 74,
+ 98,134, 30,191,250, 75, 31,176,177, 59,228,135,190,252,105, 46,117,187,252,232, 43, 23,145,250, 46,239,239, 37, 28,165, 22,218,
+146,164,200,233, 21, 33,151,175,188, 64, 16, 4,100, 73, 66, 86,106,228,100, 74,224,249,140, 70, 35,250,109,103,171, 57,215,239,
+ 83,150, 57, 97,224, 97,173,101,119,111, 31, 33, 61,198,211,196,133,102, 24,219, 40,181,115,186, 97,135, 56,110,225, 85, 6,145,
+ 14,201,143,246, 8,131,128,195,188,230,254,225, 17,181,138,155,241,152, 70, 89,141,176,130,208,194,197,174,229,135, 63,219, 37,
+ 27,105,240,207,146,249, 37,137,153,114,245,202, 43,188,246,185, 43,156, 91, 30, 48,221,223,227,252,217,117, 70, 91, 15,136, 36,
+116, 91, 18, 47,132,168, 27, 16,119, 29, 66, 53, 84,161, 27, 99,206,109,107,178, 25,197,187,162, 46,155,113,174, 20, 52, 49,170,
+199,162, 46,139,117, 4, 49,115,220,125, 49,119,102,204,155,237,133,224,143,217,238,221, 62,134, 51, 21,200, 6, 5, 43,140,117,
+ 69, 92,184,165,173,231, 5,199, 5, 66,219,249,142,223,243,148,219,187, 26,135,147,254,202, 15,252, 0,191,240,139, 95, 37, 43,
+ 11, 20,224, 43,143, 90, 27,178,170,162,146, 1,239, 92,127,128,198,227,226,229, 85, 10,235,145, 22, 6, 47, 41, 89, 89,245, 16,
+ 42,196,152,130,189,221, 29, 86, 87, 78,161, 4,142,239,223,142,248,220, 91,111,177,183,159,241,247,255,155,159, 33,110, 71, 24,
+ 36,227, 73, 74,233, 91,116, 9, 89, 89,178,180,178,236, 20,248,141, 74, 95, 73,197,112,164,152, 76, 83, 58,237, 22,253, 81,196,
+232,168, 75, 16, 6,172,175,175, 17,183,226,102,117, 97, 93,113,247,212,194, 52,206,137,206, 84,211, 77,155, 70,123,228,138,184,
+ 69,122, 62,101, 45,208, 86, 35, 2,133, 41, 43,180,133,178, 46, 81,248,110,244, 46,132, 83,232,203, 0,132,135,182,224,207,252,
+226,226,164, 30,104,102, 67, 19, 79,177,190, 61,123,130,123,162, 8, 60,166,123, 59,190, 7, 90,219,140,215, 57, 46,230,214,204,
+246,231,118,206,121,159,239,233, 27,230,188,235,210, 43,202,204,137,218,138,162,164,104,132,108,178,201, 76,119,171,162,227,137,
+131, 53, 6,211,164,221, 25, 61, 35,208,185,224,151,178, 40,201,210,156, 36, 73, 25, 79, 82,166,105,142,174,181, 3,250, 40,133,
+ 31,184,131,108, 16, 4,199,157,250,211, 20,238,255,186,127,125, 82, 15,251, 31,244, 47, 49,139,207, 59,230, 26, 62, 93,113, 57,
+ 59, 0, 60, 38,189, 92, 28, 25,207,198, 40, 2,248,214,183,223,229,209,230, 33,158,239,211,237,247,249,212,107, 47, 19,134, 62,
+ 73, 81, 49,154, 78,201,242,156, 52,157,178, 59, 61, 66,152,134, 76,103, 52,175,191,112,137, 23, 95,121, 1, 95, 88, 58,189, 14,
+ 66,121,148,185,198,179, 62, 75,189, 54, 65,168, 24, 38, 41,187, 59,123, 84, 69, 73,232, 89, 44,154, 73, 61,101,100, 98,114,163,
+208,194, 96,109,134, 39, 67,242,188,192,138,144,165,229, 13,174,223,223, 97, 58, 73,233,246,150, 8,162,150, 75,159,211,245,220,
+189,240,123,141,169,125,222,112,231, 89,135,189,185,211, 96, 14,172, 57,249,247,117, 93,115,227,250,117,190,248,133, 47,178,181,
+187, 77,150, 36,220,191,255,136,172,172, 9,163, 22, 86, 8,142, 38, 99,246, 15, 15, 81,161, 59,233, 6,161, 79,141,102,120,152,
+226,251,238,223, 12,176,172,244, 98,170,162, 98,146, 22,115,206,189,187,175,168,249,129,114,105,169,207,104,116,196,118,146,179,
+ 46, 61,122,173, 54, 85, 93,208, 10, 66,116, 85, 51,232,199, 20, 73,193, 97, 81,210,233, 78, 88, 81, 17,145,175,232,118,218, 12,
+ 15, 71,116, 99, 31,163, 35,198,227, 9,190, 31,145,166, 53,121, 1,161, 15, 71,135, 21,167, 47,159, 71,120, 62,133,177,108, 62,
+216,102, 98,156,152, 37, 86,240,217, 23,207,114,250,204, 10,105,158,242,104,127,200,163, 81,206,176,130, 90,138, 19, 98,196,153,
+120,231,196,141,202, 10,188, 10,150, 61,133,213,112,246,211,159,226,236,167,174,242,247,254,201, 63, 33,166,226,181,179,103,137,
+ 91, 1, 95,121,227, 2,217, 55,174,115,109, 88,179,151, 24,190,125,115,143,228,116,206,121, 35,217,216, 88, 39, 73, 50,170,170,
+ 70,174,173,146,154, 28,107, 12,237, 40,166,215, 95,230, 96,111,135, 86,228,147,164, 25,105,150, 83, 25, 67, 50, 77,231, 49,161,
+198, 88,188, 32, 4, 47,198,111, 45, 17, 68, 1, 70, 87,248,249,132,190,167,136, 58, 45,118,239,110, 17,232,156, 0, 69, 5, 40,
+ 99,136, 45, 72, 81, 51,136, 5, 63,246,133,243,124,250,165, 46,195, 29,184,240,218,151,104, 15,119,185,244,217, 37,218, 81, 72,
+232, 73,100, 93,184,157,241,153,117,110,198,130, 94,232, 19,134, 22,191,227, 19,116, 34, 90, 97, 76,203,143, 8, 2, 71,139, 11,
+155,209,186,239, 57, 52,172,211,188,200,121,178,218, 12, 42,229, 82, 1,157, 26,189,169, 51,115, 91,175,105,178,183, 93,103, 40,
+143, 59,204, 57, 0, 69, 55,221,227, 44,244, 68,156, 88,204, 30,239,220,221, 13, 92,235, 6,138, 35, 36, 22,229,172, 72,118, 38,
+200, 83,184, 69, 4,212,117, 73, 28,249,252,240, 31,250, 65,190,254,235,191, 65, 58, 77,157,143,222,243,168,240,120,247,250, 93,
+ 70,133, 96,117,109, 29, 47, 90, 34,234,244,137,218, 29,162,110, 11,225,181, 17, 50, 32,201, 15,155, 96,144, 3, 4, 10,233, 9,
+218,180,241,195, 14,127,236, 71,191,140,231,133,252,131,127,252,207, 41,178,148,180, 16,244, 91,146, 34, 41, 8, 91, 30, 71, 71,
+ 7,120,210,119,235,196,162,192, 90,203, 52, 73,208, 90, 19,199, 17,235,131, 62,182, 54, 40, 79,146,231, 37, 43, 43,203,172,172,
+174, 16,197,145, 43,122,114, 97,189, 38, 23,225, 30, 2,213,132,162,204, 80,167, 6,139, 17, 30,211, 50,231,254,195, 77,110,223,
+190,199,225,254, 8,180,165,215,233,209,138, 66, 86, 6, 61,206,159, 63, 77, 47,140, 49, 66,225, 9,151,170,166,236,241, 98,228,
+ 68, 19,119, 76,100,253, 68, 26,170,239,190, 86,125,204,250,113,102,213, 53,110, 15,174,235,138, 42,111,186,244, 36,165, 40, 10,
+234, 90, 35,133,211, 3,205, 72,123,243,209,187,157,141,221,205,156, 66,103, 27,107,100, 93, 85,228, 89, 70,158, 21, 76,167, 41,
+ 73,146, 81,150,122,174, 99, 8,131,128, 40,242,137, 35,231,117, 63,209,169,219, 79,108, 62,251,131, 41,232,207,203, 76,255,215,
+ 86,204,231, 8,212,199,246,228,143, 55,168,139,227,148,199,148,226, 79,250,179, 37,126, 43,230,181,215, 94,161,211,221,162,215,
+ 95,102,154,164,236,239,239,185, 48,140,218,146,228, 5,189,126, 7, 79,106,144,146,126,183, 15,218,146, 76, 70, 68,157,144,118,
+183, 69,168, 4,126, 24,112, 52,201,200, 18,205, 82, 55,198,168,154, 66,151, 84, 10,252,149, 85,138,180, 70,245,123, 4, 45,197,
+178,172,121, 33, 94,102,245,101,195,219, 55,190,195,205,187,239, 34,144, 4,170,205,205, 27,155,156, 62,115,129,235,223,249,160,
+137, 44,116,207,110, 85,107, 60,121, 60,181,152,191, 0,254,128, 31,243,167, 21,116, 99, 12, 86,202,103, 30, 36,124,225, 17, 74,
+143,223,250,245,223, 66,249,138,239,255,222,207,241,210,229, 43, 76,178,154, 73, 86, 97,109,201, 7, 31,188, 71,133,225,224,240,
+112,238,192, 48, 89,233,196, 61,218,208, 10, 3,190,255, 51,159,226,223,249,183,254, 2,119,110,220,224,191,249, 71,255,140,131,
+ 73, 70,220,142,217, 62, 26,147,214,213,220,201,161,139, 20, 97,106, 42, 1, 91,147,132,141, 94, 15, 81, 11,116,161, 57,183,188,
+132, 68,241,104, 47,161,163, 4,183,239, 60, 66, 5, 33, 86, 43,198,163,148,186, 40, 81,198,176, 87,215, 28, 14,115,206, 94,108,
+211,237,175,176,179,239,108, 93, 82, 73, 90,126,196,254,120,202, 65,150, 51,198, 82,214,208,149,138,171, 27,109, 94,122, 97, 29,
+131,225, 59, 31,220, 96,148, 25, 38,181,161,146, 46, 55, 89, 88,221,136,118,196,211,237,132, 86, 33,172,166, 47, 20, 75,194, 16,
+116, 44,127,234,223,252, 83,252,212,207,255, 20,211, 2,126,225,253, 27,172,246,125,206, 71,150, 23,150, 67,118,199,150,163,218,
+103,168,107,238,236, 78, 41,178,187,140,142,198,156, 57,125,138,170,168,184,117,243, 14, 47,188,112,149, 86, 39,102,239,240,136,
+ 48, 90, 7,169,216,217,221,199, 83,146,168, 21, 19,197,109,186,189, 37, 76,173,241,252, 16,223, 15, 8,227, 54,210,115,191, 91,
+ 25,240,112,154,179, 61, 44,208, 38, 64, 91,193, 70,175,224,207,127,190,195,214,161,224,163,131, 2, 35,219, 92, 30,156,161,215,
+ 83, 92, 62,223,227,205, 11, 33,121, 49, 66,245,206,242, 96,235, 16, 47, 20,232,108,138,167, 13,173,206, 26,195,163,125,218, 43,
+ 3,186,171, 75, 68,177, 34,142, 60,226,174,135,106, 7,248, 81, 72,228,181,105,121, 33, 94,232, 53,193, 45,178,137,182,117,251,
+254, 32, 8,230,249,232, 82, 58,129,151, 53, 6,164, 90, 88,253, 52, 80, 18, 99,154,238,218,145,206,142, 41,150, 6,107,196, 60,
+238,114,230,153, 54,198, 32,156, 79,237,100,114,151,153,173,230, 84, 51, 26, 93,160, 95,206, 70,254,179, 2,176, 48,169, 50, 66,
+ 80, 27, 77,167,221,230, 7,190,244, 37,126,247,155,111, 51, 26,141, 17,192, 71,119,183,185,118,231,144,160,183, 65,105, 61, 14,
+134, 19, 44, 30,101,105,217,221, 59,228,250,245,155,188,242,210, 21, 58,221, 21,170,108,159,201,100,130, 20,138, 40,246,169, 14,
+ 50,226,118, 69,212,178,124,229, 43,159,103, 82,215,252,215,255,240,103, 72,178,138, 42,169, 24, 44,117, 64,149,216, 50, 69, 88,
+151, 98,183,180,180, 68,146,166,136,102,119, 94,153,154, 64, 56,173,193,233, 51,167, 57, 26,142,157, 61, 43, 47, 88, 89, 89,165,
+183,220,195,247,220,186,193, 44,218,139, 23, 89, 22, 77, 81,215,192,209,209,136, 95,254, 87,191,197, 79,255,220,175,112,227,222,
+ 3,166,121,141, 48,138,192, 11,232,180,218, 92, 58,127,142,183,222,124,157,219,219, 67,206,174,118,121,237,149, 23, 88, 93,233,
+ 32,133,231,184, 2, 11, 80,149,121, 13, 89,152, 38,219,167,172, 74,159, 63, 88,180,159,224,131, 78,234,138, 26, 52,215, 99,159,
+122,108, 59,171,203,146, 34,203,201,146,148,178, 40,209,250, 88, 32, 28, 4,129,243,163,123, 30,202,243,230, 86,236,121,116,239,
+236, 96,160,157,125, 45,203, 82,210, 36, 97, 58,201, 72,167, 41, 69, 81, 97, 44, 4, 82,225,249, 14,125,220,138, 66,162, 56, 36,
+ 12, 67,212,231, 94,187,240,147,178,241,110, 44,176, 91,142, 79,182, 60, 37, 79,123,126, 17,219, 57, 59,119,150,253,250,180,241,
+244,211,118,235,143, 63,144,139, 31,251, 56,108,230, 89,123,251, 79,162,188,127,226,207,197, 99,102, 59,187,248,188, 53,123,140,
+185,218, 80, 83, 84, 53,101, 93,163,181,105, 78,244, 13,175,188,185,105, 56, 28,165,154,251, 97,183,182,182,184,113,243, 54,135,
+135,251,152,170,164, 29, 69,132, 81, 15,109, 21, 90, 10,164,239, 44, 32,121, 94, 48,205, 10,146,170, 38,110,247, 89, 93, 59, 67,
+127,176, 78,167,191, 78,216, 89, 33,236,175,209, 90, 59, 69,171,211,103,146, 85, 24,169,240,162, 16, 21,121,200, 64,145,151, 5,
+105, 82,112,243,198, 61,172,242, 57, 28, 79,152,166, 21,120, 45,218,189,101, 46, 93,186,200,155,159,186,202, 7,239,188,131,173,
+ 42,130,208, 39,136, 67,164,239,200, 78,199,193, 45, 98,145,206,112, 98, 63, 36,143,165,111,199,234,207,121,204,161,120,234,212,
+194, 29,114, 92,102,248,140,218,165, 22,224, 51,204,197, 72, 13,134, 81,186,157,144,106,132, 54, 59, 59,123,188,251,209,117,138,
+186,230,209,195, 7,236,108,111, 83, 22, 37, 74,121,220,122,116,151,189,221,125,222,124,229,101,166,163, 49,121, 89,147,213,154,
+ 73, 94, 35, 53,188,241,210, 21,254,242,191,253, 63,225,223,250,243, 63,206,203, 87, 47,240,198, 27,159,230, 75, 95,254, 34,223,
+247,125,223,195,159,254,211,127,130,105,146,114,237,246, 29, 76, 35,106,242,173,165, 43, 36,149,177, 84, 8,210,170, 38, 8,125,
+186,145, 79, 91, 57,107, 82, 89, 84,164,165,166, 86,150,210,104, 58, 97, 72, 53,206,241,149,219,199,230,121,197,169,139,103, 88,
+ 62,181, 76, 8,196,161,199,242,169, 13,202, 60,103,165,187,196, 4,203,245,173, 61, 34,223,199, 22, 53,129, 39,248,212,165, 37,
+150,187, 17,191,253,206, 29, 30,238, 38, 76, 75, 77,102,172,251,190, 0,105,155, 65,146,120,204, 9, 58,123,147, 22,139,100,201,
+214,188,226, 73,178,173,109,110,252,210,215, 25, 31, 78,153,234,148, 47,127,254, 20,239, 92,223,231, 48, 43,233, 4,154, 0,203,
+118,102, 24,225, 58,199, 58, 55,244,186, 17, 81, 32, 88, 90,234, 17,197, 81,195, 26, 7,141, 37, 77, 11,162,184,135,144, 33,221,
+238, 82,179,115, 23,180,226,152, 78,183,143,192,162,117, 73, 93, 87,148,101,197,100,154,178,178,178, 78,212, 25,176,191,191,207,
+157,187,247,176, 6,146,163, 35,206,174,172,178,214,233,176, 28, 24, 94,218,232,112,101, 57,102, 41,204, 81,213, 24,116, 77, 94,
+ 10, 14,199, 25,198, 86,180, 34,133,194, 58, 53,112,220, 70, 70,109, 14,167, 57,147,195, 29,246, 54,111,211,237,119,136,219, 49,
+ 81, 20,209,142, 98,226, 32, 34, 12,124,130,224, 56,180, 37,240, 61,134, 7,251, 68, 65, 64,167,221,198, 83,162,225,142,207,162,
+ 86,103, 72,226,198,117,225, 29, 99, 95,143, 85,237,114,158, 7, 39,132,117,100,185,230,240, 46,103, 62,108, 37, 17,141, 69, 14,
+121,236,170,152, 99, 71,109,243,118,108,252, 4,219,136,243,148, 56,246, 93, 53,207,169, 49,134,178,114,187,212,208,247, 25,172,
+ 44,147,106,203,183, 62,124,192,239,188,179, 3,126,140, 10, 2,164,112,252,248,180,168, 25,167, 5, 42,136,169,234,146,118, 59,
+160,223,239,178,180,188,198,180, 48, 8, 63,166,170,220, 56,247,232,112, 68, 93,129,181, 5, 87, 47,159,227,202,149, 75,220,184,
+187,201,246,112, 66, 94,185,194,145, 78, 19,146, 36, 35,244, 61, 66, 79,129,173, 73,178,132,162, 44,230, 56,210,162,118,118, 44,
+ 4,140,142, 70, 20,121, 65,149,231,152,162,194,179, 78, 71,224,135, 33, 40,137,109, 2,112,220,218,195, 96,165, 34,183,138,175,
+253,214,183,248, 91,255,229,255,131,255,254,103,127,133,173,253, 67,178,202, 98, 16, 24, 33,208,214,144,150, 5,219, 7,123, 92,
+187,125, 27,233, 7, 96, 21, 71,227,148,131,225,132, 86,111,224,174, 63,233, 14,243, 46, 2,183, 41,175,198,130,149,115, 75,218,
+ 19,173,152, 61,134,160,139, 70,177,110,102, 30,167, 38,100, 10,163,155,195,155, 70,204, 57,252,238,160, 39,148, 66, 41, 7,133,
+177,205,189,202, 34, 23,130,190,154,177,123, 93, 82,231, 25, 69, 90, 48, 29, 79,152, 78, 82,138,188, 68, 91,103,109,140, 67,143,
+ 86, 59, 34,142, 35,130, 40,112, 78,135, 6,136, 99,106,131,169, 12,186,121, 78,234,178,162,200, 10,210, 52, 39, 73, 75,146,164,
+ 36,205, 75,140, 53,115,237, 72, 28, 7, 14, 92,211, 10, 8, 91,238,223, 84,159,125,245,194, 79,206,118,230, 39, 11,102,131, 77,
+125, 28,159,186, 88, 64, 23,212,203, 98, 1,213,250,180, 98,251,100, 65,126,190, 37,234,227,138,250,199, 5,189, 60,149, 58,244,
+ 4,155,247,241,231,220,160,103,145,118,149,166,172,106,202,230,119,173,221,232, 72, 10,231,207,156, 21,245, 57, 75, 90, 10,124,
+ 63, 68,121, 30, 91, 59,219,110, 52,236,251,116,218,109,202, 74, 32,195,136,202,130,244, 98, 6,189, 13, 58,173, 13,186,189, 51,
+156,189,252, 18, 65, 39, 2,169,152, 36, 9,195,209, 17,183,110, 93,227,240,104,151, 52, 29,113, 52, 28,241,246,183,191,197,165,
+139,231, 56,125,122,149, 86,164,216,222,122,200, 15,255,161, 31,226,242,197,211,124,248,254, 55,249, 19,127,230,199, 88, 89, 91,
+227,218,205, 7,248,241, 18,126,208, 97,125,253, 12,127,248,143,126,133, 91, 55,111,130, 54,196,237, 22,185,201,233,246, 90,212,
+ 85,190,104,218,124,198, 20,221,156, 68,239,216,227, 64,132,103, 21,245, 69,127,250,226,255, 47,170,219,141,117,188,234,185,111,
+ 84, 48,103,236, 23, 69,193,123, 31,124,192,193,104, 76, 16, 4,116,219,109, 90,113, 68, 81,148,236, 30, 28,242,104,119, 7,105,
+ 32, 80,138,188, 40, 73,203,146,172,172, 17, 82,241,249, 79,191,206, 95,249,119,254, 18,159,126,245, 5,150,122, 45, 71, 13,243,
+ 61, 78,157, 57,195, 75, 47,191,196,229, 43, 23,121,241,197,151,249,234,191,252, 26,163,233, 20, 33, 32, 22,138,181, 86,135,188,
+ 40,230, 66,185,178, 44,137,125,143, 78,164,176,182, 98,169,215, 99,146,228, 72, 95,144,164, 37,171,189, 46,201,120,130, 23, 8,
+ 58,203, 61,140, 54,108, 92, 56,133,161, 32,182, 37,189,110,196,164, 72,152,140, 38,180,194,136,123,195, 49, 71,147, 28,145, 87,
+244,162, 24, 60,205,217, 21,159,195,225,152,111, 61, 24, 51,205, 45, 93, 41,136,141,160,237,249, 84,214, 82, 9, 87,180,149,145,
+ 14,233,107,143,139, 4,246, 24,135,220,182,134,215, 37,108, 68,208, 33, 71, 11,143,137, 41,249,193,207,173,241,242,167,222,226,
+ 23,126,243, 22,158, 16,132, 6,118, 19,205,212, 66,109, 21,161,178, 40,107,136,164,164,200, 11, 14,135, 99,166, 89,198,112, 56,
+100,121,109,141,165,165,101,132, 84, 20, 89,129,174, 43, 60, 97,193, 58,126,117,153,166,248, 74, 80,151,110,202,225, 41,137,174,
+107,140,214,172,111,172, 83,228, 25,183,111,223, 64, 88,203,189,219,247, 24,141,142,220, 1, 55, 75,241,171, 49,117,121, 8, 85,
+ 74,167, 21, 17, 4, 17,202,143,104,119, 98,250, 75,109,150, 7, 75,172, 46, 47, 19,183,219,180,186, 3,114, 13,126,212,102,239,
+209, 93,146,163, 29,226, 56, 38,142, 34, 90, 81, 76,236, 7, 68, 65,224,172,108,179,124,238,192, 35,244, 3, 58,157, 22,157,118,
+219,121,213,103,248, 97,217, 36,175,121,202,253,153, 82, 40,207,145,208,102,225, 44,243,107,117,126, 77, 51,183,181, 9, 41,231,
+ 62,108,165,142, 67, 75,102,217, 16, 82, 28,143,132,221,245,236, 49,203,249,126, 28, 47,106,173, 89, 92,231,206,167,134, 85,229,
+ 64, 37,194, 90, 60,223, 35,106,119,201, 42,143,223,125,247, 17,219,195,140, 78, 55,160, 27,121,132, 18,166,211, 12,107,160,221,
+106,209,239,182, 9, 26,198, 67,220,233,145, 20,154,168,213, 65, 24, 67, 50, 30,115,116, 56, 36,207,115,210,100,140, 68,211,142,
+ 67,190,239, 11, 95,224,189, 27,119,216, 59, 58,114, 89,235, 69, 77,213, 76,186, 90,113, 72,154, 78, 27, 54,187, 43,148,181,214,
+ 20,101, 73, 94,228, 36,105, 74, 50,157,162,171, 18, 83,214,100, 73, 66, 50,157, 82, 20, 5,194, 83,132,113,212,208,249,220,190,
+221, 8,197, 48, 41,248,191,255,189,127,196,255,245,239,254, 67,238,108,238, 82, 91, 49,111, 27,230, 69,209, 13,230,177, 88,202,
+186, 98,115,107,135,201, 40,165,221, 29, 96, 9,248,232,198,109,162,184, 67,171,221, 37, 10, 34,119,232,106,130,110, 88, 80,205,
+ 47,138,162,237,226,182,124,129, 57,107,230,222,114, 59,247,160, 31,115,221, 45, 86,187,107,218,217, 19,221,170, 68,121, 30, 66,
+ 45,132,202,136, 38,211,221, 90, 96,134,131, 45, 40,210,148,116,154, 50, 29, 39,228, 89, 78, 85,107, 44, 22,233, 9,226, 56, 32,
+138, 99,130, 48, 64,121,142, 26,103,140,161,170,106,170, 82, 83, 21, 21,117, 89,185,110,191,170, 41,202,146,178,212,228, 69, 69,
+ 86,214,110,189,162,164,115,120,132, 62,113, 28,210,106,199, 4, 81,232, 14, 10,193, 66, 81,127,154,194, 92, 46, 20,251,167, 21,
+117,113,162,168, 31,191, 24,158, 87,136, 31,175,168,207,235,194,255, 32,138,250,227, 93,186,125, 92, 67,192, 73, 0,191,110, 20,
+135,117,237, 10,122, 81,214,148,181,203, 15,158,125,173, 89, 81,119,182, 25, 15,223,243,241,154,128,151,178,172,185,127,255, 33,
+173,184, 69,191,215,103, 48, 88,166,191,180, 70,216,234,224,199, 17,173,118, 12,104,246, 14,182,152,230, 99,202,116,140, 29,143,
+185,119,235, 54,103,207,158, 71,133, 49,147,194,112, 56, 46, 89,217,184,192,103, 63,247, 38,105, 62,225,251,191,248, 5,254,216,
+143,255, 41,214, 78,159,225,253,143,174,241, 71,254,204,159,161,211,139,185,118,227,125,150,214, 79, 49, 46,106,174,223,126,136,
+ 10, 58,196,173, 30, 82,250,252,241, 63,254,135, 26, 36, 35,104, 83,113, 56,218,231,194,249, 83, 76,199,135,243, 19,238,227,202,
+208, 19, 65, 21,199,146,186,121, 49,127, 90, 81, 95, 68,195, 46,226, 98, 23, 11,252,172,168,219,199, 56,251,238,198,225,222,223,
+219,219,229,237,111,189,141,242, 2, 94,127,233, 21,206,174,175, 19,122, 62,126, 24,115, 56, 73,232,246,250,120,210, 99, 52,157,
+226,183, 90, 76,139, 2,163,107,206, 46, 47,243, 31,255,229,255, 25,167,215, 87,136,163,128, 48,244, 8, 66, 31,233, 7, 13, 71,
+217, 67, 72,201,202, 96,133,157, 71,219,188,251,206,187,206, 39, 92, 27,218, 81,192,218,114,159, 34,207,145,214,208,142,124,234,
+188,192,148, 37,189, 94,139,188, 41,198,105, 90, 16, 7, 46, 26, 54,138, 37, 37, 21,253,245, 37,138,162, 66,120, 80,102, 71, 12,
+ 34, 69, 50, 25,178,189,123,192,209, 97, 65,111,208,231,168,132,195,253, 17,129,180, 24, 5,190, 39,232, 8,184,179, 59, 97, 55,
+119,193, 36,171, 74,178,100, 33,246, 20, 19, 93,147, 75,199,165,158,171,107,155, 81,166, 93,196, 87, 90, 67, 23,120, 93, 8,214,
+ 58,150,238,138, 37,209,150, 67, 99,121,237,149, 30, 63,242, 71,190,204,111,189,183,201,253,237,148,110,183,141, 46, 10,166,165,
+164, 16, 10,101, 13,190, 49,148,147,140,100,146, 33,148, 15,202,227,202,203,175, 32,172, 96, 58,153,160,235,156,178, 24, 99,170,
+ 4, 83,103, 84, 89, 70, 58, 25, 51, 26,238, 49,220,219,162, 72, 39, 14,185, 42,192, 19,141, 90,217,143,185,112,233, 18,219,155,
+ 15,233,117, 35,164, 40,192, 36,108,172,182, 88, 91,109,177,180,212,163,219,237,186,155, 82, 20, 53,157,143, 34, 10, 67, 58,157,
+ 86,211,105,135,132, 81,139,168,221, 67, 6, 49, 65,220, 97,124,176,197,112,119,147, 40, 12,136,195,208, 21,243, 70,104, 20, 53,
+221,121, 16, 6, 4, 77,118,122,187, 21, 59, 66,161,114,163,120,207,115,172,119,169,148, 75, 37,155, 5,179,204, 72,104, 11,252,
+246,197,123, 26,182, 97,205, 47,164, 10,206,175,103,213,100,110, 47,222, 19, 79, 76, 24,197, 60, 91,220, 24,230, 4, 49, 26, 23,
+ 3, 51,226, 26,199,212, 48,107, 44,117,165,155,200,108,131, 18,130, 56,104, 83,100, 5, 31,221,217, 33,205, 43, 20,134,170, 40,
+201,147,140, 65,183, 67,160, 28,107, 33, 10, 34,124, 63,160,213,138,177, 22,246,247,118,233,196, 62,189, 78,196,116, 60, 36, 43,
+115,202,170,196,234,154,253,221, 29,178, 44,103,227,236, 89, 62,184,121,143,229,245, 85,130, 40, 96, 50, 73, 9,226,134,104,102,
+ 45,186, 40,240, 4,136,134, 99, 31,248, 94,147, 96, 89,187,191,175, 53,181, 54, 24,171,201,203, 12, 99, 12,217, 52, 65, 90,104,
+183,218,120,158,143, 70,114,127,111,194,255,230, 63,255,219,252,244, 47,126,157,164,168, 92,135, 43,101,179, 8,125,250,196,214,
+ 54,129, 49,227,113,194,131,135,155,212,198,178, 50, 88, 99, 60, 74,184,115,251, 33,129,223, 97, 48, 88,113,160, 22,171, 49,212,
+174, 17,105,238, 79,243,164,201,167,221,235, 27, 97,154,104, 14, 83,114,214,180,104,237, 58,126, 99,176, 13,111,192, 54, 97, 51,
+ 66, 74,119, 31,105,138,186,104,138,250,172,168, 88,107, 78,168,221,167,147, 41,201, 52, 37, 47, 74, 55,249, 53, 6,207,147,132,
+126,128, 31, 56,150,130, 83,252,219,102, 42, 92, 53,201,119,117,115, 29,185,111, 85, 55, 57,245,174, 22, 85, 24, 83, 55,249, 3,
+174, 83,111,181, 35, 23, 6, 19,185,209,187,231,121,127,176, 69,253, 89, 99,247, 79, 26,206,242,113,135,129,223,111, 81, 63,105,
+ 63,120, 10,112,198, 52, 23,106,229,248,199,174, 75,119, 35,120,109, 78, 22,117,207,243, 8,195,208,117, 3,205,137, 95, 8,199,
+156,110,181,218,156, 61,123, 30, 33,157,122, 58,205,199, 76,178, 33,123,195,237, 6, 52, 16, 82, 87, 22,229,135,108,172,159,231,
+133,203,111,176,181, 63,230,207,254,196,255,152,203, 47,190, 74, 85, 9,148,240,249,129,239,255, 1,226,118,196,163,205, 45,110,
+223,189,207,181,235, 55,121,240, 96,155,180,208,188,243,157,143,248,246,187, 55, 89,217,120,145,180,242,153,102,134,173,237, 61,
+ 38,163, 3,138,228,144, 59, 55,223,225, 95,252,119,255,136, 95,252,231,255, 3, 55, 62,120,151,213,229, 30,161, 39, 72,167, 99,
+183,102,176,134,197,216,194,197,149,199,241, 72,233,147, 23,245,197, 46,125, 49,157,237,241,162, 62,155,238, 28,163,101,155,143,
+149,138,186, 46,185,117,231, 54, 7,251, 99,116,154,225, 91, 75, 24, 4,168, 40,100,152, 36,244,123, 3,214,215, 79,177,189,191,
+207, 97, 50,166,172, 43, 66, 33,249,247,254,226, 79,240,169, 23,175, 16, 5, 30, 81,228,198, 80, 94,224, 35,253,230, 69,232,121,
+ 40,169,216,186,255,128,150,231,179,253,112,147, 42, 47,121,233,133,203,188,246,202, 85,190,240,153,151,105,139,154,149,126,139,
+ 55, 95,125,129, 87, 47,109,208,111,121, 76, 38, 83,118, 15, 18,162, 86,140, 82,130,100, 90,224,251,146,179,103, 6,196,237,128,
+184, 21, 50, 28, 38,140,134, 19, 98, 95,176,220,239,146,166, 41,211,105,225, 4, 43,173, 14, 15,246,198, 12,194, 22, 71, 73, 74,
+ 41, 13,189, 86, 7, 95, 27, 30,140, 42, 66, 63,198, 55,134,182,181,180,125,201,160, 31, 51,202, 75,114, 51,147, 96, 53,126,232,
+ 25,120, 99,230,145,198, 34, 13,172, 11,197, 43, 50, 64,149, 26,124,193,126,110,153,248,240,185,207, 15,120,241,213,211, 76, 68,
+143,159,249,218, 7,132, 49, 12, 2,205, 81,106, 24, 11,139,178,150,192, 90,214,122, 29,206,156, 58, 77,127,101,149,243, 87, 46,
+ 81, 91,215, 41,182,162,144,186, 74,240,188,138, 64, 89, 2, 9, 65,163,212, 61,125,250, 20, 97, 24,176,190,190,222, 36,134, 85,
+128, 91, 39,137,160,195,217,115, 23,136, 91, 45,246,246,118,240,164, 70, 87, 83, 48, 41, 43,131, 37, 46, 94,188,204,250,250, 58,
+221,110, 15,111,118,115, 4, 60,229, 0, 78,182,214, 20,101, 65, 85, 25,144, 62, 65,220,161,172, 53,233,104,159,253,173, 7,180,
+227,102,220,238,249, 78,245, 30, 52,133, 60,240,231,239,251,158, 55,143, 69,150,194, 1,103, 92, 81,110,174, 69,142, 89,238, 51,
+187,213,252,239,164, 88, 24,209,186,195,237, 44,181,145,197,226, 47,165, 67,166, 10,117,236,102,183, 98, 94, 80,102,230, 43,151,
+ 98, 38, 30,195,151, 31,175, 46,101,115, 16, 56,254, 0,225, 14, 0,238, 78,142,168, 52,186,172,240,253,136,131,225,136, 91,155,
+ 99,198,121,197,254, 56, 39, 43, 13, 27,167, 86, 81,194, 16, 71, 1, 81, 20, 16,199, 33,237, 56, 34,110,119,152, 76,198, 72, 97,
+232,182, 92, 54,247,238,193, 33,181,182, 76,134, 71, 72,171,217, 63,216, 35,173, 53,155,135, 35,222,191,245,144, 81,154, 55, 17,
+211, 26,139, 98,125,101,153, 65,187, 75,153,165, 4,190, 34, 10, 35,132,176,120, 74,146, 23,121,115,127,108,162, 88, 77, 9, 82,
+163,132,196,228, 21,101,150, 83,100, 57,210,243, 24,142,167,252,229,255,228, 39,121,251,189,107,212, 72,199,243, 21, 14,215, 44,
+229, 83,114, 37, 30,171, 5,149,169,201,138,140,173,237,109,246, 15, 14, 88, 93,221,192,247, 90,220,191,191,205,222,193, 33,203,
+ 43,203,132,145,143,165, 70, 10, 61,191,209, 47, 38,118,206,168,108,115,253,152, 49, 46,172,178,217, 95, 99,220,232,220, 54,145,
+183, 24, 39, 82, 51,141, 96,109, 38, 0,124,178,168,203,249,164, 69, 24,247, 92, 21, 89, 78, 50, 77, 25,143,167,100,105, 78, 85,
+ 85,212,198, 77,102,102, 86,203, 32, 60,222,169,207,121, 29,205,117,229, 86,185,199, 35,249,178,170,201,138,146, 36,203,201,178,
+140,186,174, 17,205, 65, 53,138, 3,218,237,118,163,122,119,202,119, 33,196,211,125,234, 31, 7,144,121,106,145, 22,207, 87,180,
+ 63,110,113,250,110,116, 89,143,139,234, 30, 23,216, 61, 77,120,245,248,199, 60,237,231, 89,180,193, 61,238, 77, 63, 30, 17, 47,
+ 20,183, 5, 65,217, 19, 95,175, 25,211,221,190,118,131, 7, 15,119,168,106,203,249, 11,231,169, 12,248,126,151, 83,171, 3,180,
+ 58,160,223, 63,205, 27,175,189,197,221,219,247, 41,234,154, 75,151, 46, 49, 30, 30,144,235,130, 95,248,149,159,103, 56, 60,224,
+212,234, 26,113, 16,242,246,183,126,135,254, 96,137, 23, 95,124, 3, 97, 45,166,170,168,107, 77, 93,249,212, 53,156, 59,125,150,
+ 94, 43,166,221,110, 17,248, 30, 95,120,249, 50, 59,155,247,249,232,253,239,144,167, 19,214, 7,203,116,123,125,164,242, 88, 90,
+ 90,230,224,112,159, 7,155, 15, 26,159,246,243, 19,134,158,182, 30, 89,140,100,125,246,227,234, 16,154, 66,186,100, 43,132, 89,
+152,144, 44,200,100, 23, 14, 4,179,235,173,219,235,211,110,119, 88, 25, 88,162, 48,162, 42, 11,118,182, 70,140,235,138,237,189,
+ 35, 30,153, 45,148,231,163, 34,159,184, 21,147,165, 41, 63,248,253,223,203,231,223,120,221, 17,198,102, 89,215,158, 43,228,136,
+102, 95,106, 32,203, 51,222,255,206,183,185,119,243, 54, 63,248,189,159,227,203, 95,252, 18,251,195,125, 14,247,238, 67, 54,100,
+ 37,212,100, 71, 35,178,157,130, 86,191,195,114,203, 35,241, 44,221, 94,200,221,209,136,211,131, 46,203, 65,151, 44,201, 28,232,
+ 36,244,217,124,176,199,229, 75, 87,120,112,247, 33, 59,155, 35,172,241, 88, 95, 93,166,172, 74,234,218, 98, 38, 57,190, 31, 56,
+161,140,128,164,180,216,225, 4, 43, 44, 90,131, 53, 57, 45,165,144, 72,214, 7, 93,254,216, 31,253, 33,142,126,234,231, 24, 30,
+165,104,100, 19, 16, 97,231,251,221,185,224,170, 41,246, 3,169, 72,132, 65,214, 1,229, 81,192,118, 85, 16,158,173,240,163, 8,
+ 21,180,121,225,106, 23, 29, 70,220,221,203,184,218,182, 4, 82,160, 12, 4,158,160,219,246, 9,219, 1,211, 50,229,202,197, 87,
+169,209, 32, 12,166,174,216,223, 31,177,178,220,162, 44, 11,140,213, 8, 63, 68,160,232,116,123, 88, 21, 18,246, 66, 76,232,115,
+229, 83, 87, 8,188,128, 86,220,161, 44, 53,227, 2, 62,122,255, 35, 94,127,235, 45, 66, 63,226,253,239,252, 22,107,203, 75,132,
+ 34,199,151,224, 53, 60,246,193, 96,141,162, 40,153,102, 25,101,161, 27,239,174,160,168,106,164, 23, 96,144,212,198, 98,180, 38,
+ 77, 50, 76, 93, 57,176,140,239,187,195,180,239, 17,120,126,147,211,173,240, 61,183, 15,247,154,209,186,148,224, 9,217,240,218,
+105,174,199,227,235,110, 22, 89, 42,173,125, 98, 15, 55, 7,147, 8, 39,118, 51,166,129,133,204,212,219,198, 98,106,141, 82, 94,
+ 67, 13,179, 78, 48, 39,103,175, 11, 3, 10, 4, 10,107, 68,147,165,173, 49, 22,188, 89, 4,177,105, 14,212,178,129, 38, 27,219,
+192, 87,220, 4,208,177,209, 29, 59, 94,152,138,216,215,188,118,229, 12,143,118,199,124,112,152,145, 11,193,186, 31,144, 10, 31,
+105, 13,113,153,177, 44, 90, 24,157, 97,234, 18, 37, 90, 4,126, 64,167,219, 98,253,204, 6,185,129,237,195, 9, 82,248,212, 89,
+ 66, 28, 10, 54,247, 71,236,235, 3, 70,211, 41, 37,206,130,231, 1,195,188, 98,156, 31,178,119, 48,228,194, 82,151, 83,107, 75,
+ 20,186,134, 60,197,243, 67, 87,220,154,233, 69,150,185,112,146,209,196,112, 48, 12, 24,117,143, 56,127,234, 12,166,214,206, 70,
+106, 13, 81,127,137, 83,203, 43,220,188,117, 15,172,165, 50,218,133,193, 72,133, 69,159,136, 78,125,252,126,100,140,193, 10,235,
+108,127, 69,197,141, 59,215, 25,143, 71,252,217, 31,255,179,244,186, 61,174,221,124, 64, 82, 20,124,229,203,159,165,215,245,156,
+101,146,153,195, 97, 70,101,211,115,122, 31, 77,247,143,177,206, 90, 56, 27,183, 55, 95,203,145,113,204, 28, 7,126,194,241,244,
+248, 84,102,134, 9, 23, 18,211,228,165,235,170,164, 46, 42,178, 52, 37,203,114,178,178,116,205,160, 0,223, 83,196,161,179, 53,
+135, 97, 83,128,229,108, 86,225,244, 57, 8, 11,210,125,125,151, 91, 95,187,176,150,188, 36,203,220, 1,129,166, 97,242,125,159,
+ 40,140, 92,156,112, 51,181,154,137, 46,159,218,169, 63,109,164,254,212, 78, 93, 62,185, 83,255,228,152, 86,251,137,246,239,223,
+ 45,161,238, 89,202,234,197, 4,183,199,119,234,115, 88, 74, 67,121,170,203,106,222,169,207,198,239,110,167,238,254, 9,247,160,
+186,157,250,140, 51,173, 60, 5, 6,178,172,100, 56, 28,209,238,116, 89, 59,125,134, 78,175,207, 96,229, 12, 47,188,250,105,182,
+246, 14,169,106,205,195,123,247, 56, 58,218, 35, 43, 70, 28,236,111,163,179,140, 79,191,250, 42,177, 31,114,106,245, 20,157,214,
+128, 32,232,209,234,172,208,107,183,105, 5, 49,129,244, 25,116,251,244, 90, 93,234,188, 96,208,237,115,229, 84,143, 79, 93,234,
+177, 18, 75, 90,182,164, 30,237, 19,214, 37, 47,159, 63, 71,212,196,244, 73,207,195, 11, 67,231,137,173,106,142,142, 70,160,220,
+133,248,180,135,245,132,146,119,225, 1, 51,230, 24,188, 96,236,201,206,254,137,184, 85, 79, 62,217,161, 31,191, 58,230,227,119,
+ 55,198, 20,243,221,164, 31,134, 72,229,179,189,119, 64, 24,132,116, 58, 49, 78, 84,107, 73,210,148,179,103,207,144, 38,137, 27,
+253,153,154, 64,193, 79,252, 27,127,146,203,167, 55, 28, 71,191,229, 19,181, 98,194, 56,198,247, 93,218,145, 64, 32, 12,124,248,
+157,107,220,188,246, 62,191,251,219,191, 73, 93,106,231, 41,174,114,198,251, 15,209,211, 67, 90,161,162,221,106,225, 9,203,209,
+254, 30, 27, 43, 3, 14, 14,198,140, 43,195,195,164,164, 21, 5,116,124,133, 41,115, 86,215, 86,137,131,152,100,156, 32, 61,159,
+195,221, 33, 73,166,121, 48, 42, 17, 65,155,225,222, 20, 63,106,131, 39, 73, 42,205, 97,146, 51,169,107, 74, 4,133,182,244, 2,
+197,165,203,103, 81, 29,159,182, 31, 33,210,146,126,109, 16,121, 66,216,241,217,154,166,140,140,160, 34,196, 72, 15,221,136,114,
+204,124, 62,108, 89, 18,150,203,161, 36, 80, 6,188,128,212, 74,118, 49, 92,125,101,192,235,175,191, 70,171,125,137,221, 3,248,
+234,191,250, 22, 73, 90,162, 11, 87,154,106,171, 88,237,120,244, 98,159,193,160,199, 96,109,149,176,221,118,209,164,210, 21, 40,
+ 95, 9,116, 93, 19, 5, 49,117,109,248,212,235,175,115,241,202, 21, 46, 92,188,204,185,203, 87, 56,117,238, 60,221,165, 21,214,
+ 79,159,165,183, 52,160,210, 22, 33, 37,203,131, 21,150,151, 87, 56, 26, 39,172,174,159, 65, 55, 9,157, 23,207, 95, 96,101,121,
+133,186, 9, 10,193, 42,130,208,197,162,250,158,114, 49,165, 42, 68, 27,199, 16,232,244, 7,180,186, 75, 8, 63,194, 90,193,209,
+254, 38,217,248,176, 73, 89,115,157,122,232, 53,212, 56,175, 65,194,122, 46, 59,221, 83, 30,126, 35,206,156, 89,216,132,116, 69,
+121,118, 63,147, 66, 28,103, 84, 72,123, 2, 36,117, 2, 7,203,113, 42,155, 20,174,163, 23, 51,203,161,144, 77,225,158,225, 97,
+155, 44, 9,225, 80,199,194,226, 60,199, 85, 77, 85,214,152, 90,187,136,228,217,247, 49,203, 23, 95,176, 41,206,196,116,162, 9,
+150,209,218, 5,232,140, 39, 19, 38,211, 20, 83, 90,198, 73, 77, 90,186, 48,148,181,149,101,124, 15,150,251, 45,150, 58, 33,177,
+ 47, 48,117,141, 23, 68,140, 39, 9,131,229, 21,162, 86, 23,235,197, 68,253,117,100,208, 37,201, 74,182,247, 15,121,116, 56,230,
+219, 55,183,121,116, 88, 80, 90,136,162, 8,107, 44,169,117, 8,223, 64, 74,164,182, 76,243,156,164, 42,161,214,120, 77, 55, 89,
+215, 46,168, 6, 99,168,203, 98,254,250, 54,198,146,101, 5, 73,154,204, 71,253,232,154, 31,251, 99, 63, 74, 43, 12,184,115,251,
+ 46,101, 85, 29,143,197,191, 27,195, 77,179, 18,156,166, 83, 30,110, 62, 98,109,109,131, 40,238,144,229, 37,155,155,155,156, 63,
+123,142,192,247, 27,129, 91,141,105,240,172,117, 89, 81, 87, 21,117,179,171,174, 11, 87,120,171,162,164, 42,221,155,174,102,251,
+243, 70, 40,103, 12, 88,189, 48,126,111,200,121, 77,135, 46, 61, 23, 82, 35,165, 59,120,155,218,253,187, 69,214, 32, 92, 71, 83,
+166, 73, 74,150,149, 84,181, 27,167,135,190, 34,142, 34, 7, 68,106,172,108,179,157,255, 9,134, 94, 83,195,170,162, 36, 77,156,
+ 31,125,154,100,164,153, 91,111,168, 70, 59,209,110,187, 85,110,171, 21, 19,134,110,164, 47,149,194, 24,243, 49, 68, 57,241,252,
+206,253,105,132,158,103, 21,241,167,209,225,158, 70,251,249,184,247,159,101, 85, 16,143,165,245,124,210, 73,195,226,231,204, 78,
+240,166,121,161, 90, 51, 67, 0,138, 99,248,140, 56,249,115,206,212,178,179,177, 92,167,221,230,202,165,203,244, 87,214, 57, 24,
+ 29, 49,201, 82,146,124,151,247,239,188,207,210,218,105,170,220,178,212, 95,165, 21,196,248, 65, 64,165, 45, 81,212, 97,208,237,
+208,243, 21,171,221, 46,129,167, 40,242, 2, 43, 32, 23, 22, 97,106,138, 52, 67,228, 25,121, 50,129,116, 66,232, 89,202, 68, 50,
+ 60,212,104, 35, 73,210,146,178,246,160, 53, 96, 98, 52,217, 96,131, 58,205, 33, 10,152,232,138,105, 86, 34,181, 70,120,146,218,
+ 86,104, 52,202,202,103, 62, 30,207,125,248, 62, 38,230,240,105,148,185, 39,236,139,226,164, 77,196,117, 65,112,247,254, 35,110,
+ 63,216, 68, 9,193, 82,236,115,102,181, 71, 43,138,232, 6,146,213,149, 37, 70,195, 67,180,129, 64, 72,250,253, 1,103, 79,173,
+ 59,142,119,208, 32, 64, 3,223,165,231,121, 18, 79, 72, 48,150, 27,215,174,115,237,253,235,236,239,238,209,110,199, 32, 52, 89,
+ 50,197, 86, 25, 58, 25,145, 7,208,238,172,227, 73,205,193,209,136, 36,171,120,255,195,187,180,123, 3,250,129, 66, 28,109, 49,
+ 60, 72, 56,119,113,131,210,207, 24,101, 37, 81,167, 79, 33, 36,249,225, 46,166,174, 16,190,207,168,172,249,224,209, 1, 87,250,
+203,236, 28,236,177, 34,218, 68,113,135,145,153, 82, 56,222, 31, 53, 26,237, 11,250,161,207,198,233, 21,234,210,195, 63, 3,193,
+248,144,205,131, 61,252, 65,196,165, 65,155,228, 48,167, 16, 53, 82,128,175, 4,161, 39,233,181, 91,116, 90, 17,203,253, 22, 23,
+219, 45,206,183, 98, 58,162, 38, 14, 67,182, 38, 7,172,234, 14, 66, 30,241,207,254,217,215, 24, 13,191,134, 8, 35, 62,119,169,
+195,173,135,154,116,148, 18,251,150,115,202,227,204,250, 41,194, 80, 80, 91,205,242,233,179,132,173, 14,182,200, 8,189, 0,227,
+213,164,101,202,242,202, 26,237,184,205,133,115,103, 88,234,183, 89, 89,233,187,131,108, 24,209,237,245,153, 38, 83,252, 32,194,
+214,110,167, 90, 87, 5,195,244, 1, 97,103,153,245,139, 47, 33,148,226,252,149,151,169,139,156,202,102,196,113,155, 32, 44,200,
+178, 97,131,211, 52, 13,227, 65,161, 77, 77, 86,104, 64, 81,155,154,188,168, 9,202, 26, 79, 22,212, 86, 54, 78, 10, 87,184, 93,
+241,118, 29,251,172,160, 43,213,248,209, 27,125,134, 39, 29,141,173, 9, 95,127,194,105, 51,123,173,107,109, 65, 59,145,230,236,
+ 26,116, 28,115,133,197, 52,187, 86,131,105,240,164, 2, 7,150, 17,158,116,171, 58, 91, 99,204, 44,156, 72, 34,240, 28,250, 66,
+ 59,254, 69, 61, 27, 79, 87, 37, 70, 27,180,242,176,129, 19,193, 9,137, 35,236, 89,135, 72,157,237, 81,133,144, 8, 5,182,150,
+ 24, 25, 98,189,138,184, 21, 17,123,150,229, 80,240,169,165,144, 78,153, 50,174, 74,246,239,221,101,237,181, 43,244,218, 93, 34,
+ 63, 32, 84,138, 86,232,130, 91, 70,227, 41,225,193,152,160,181,132, 12,150, 8,123,138,171, 27, 87,121,245,141,207,241,175,190,
+246, 47,249,206,195,175,115,144, 24,202,230,222,166,155,172,116,163, 4,133,181, 76, 53, 8, 93, 17, 26, 67,158,106,170, 48, 71,
+ 8, 73,171,219,165,221,105, 81,215, 21,117,153,227,171, 38,155, 92, 11,138, 82,131,202, 41,109, 77, 90,164,148,217,148,108, 52,
+ 36, 59,218,227,207,253,240,247,241,214,167, 94,225,111,254, 87,255, 79,238,238,236,146,107,139, 80,158, 43,252,207,187, 71, 91,
+ 57, 15,129,154,173,164,182,119,119,249,169,127,241,211,252,241, 63,250, 39,185,114,241, 50, 69,161,249,245,223,248, 54, 95,249,
+226,103,241, 69,133,174,167,152,186, 66, 87,204, 65, 46, 70,155,249,120,221,189,239,132,121,226, 68,100,244,236, 16,103,155,196,
+190, 69, 24,215, 66, 2,155,177, 32, 27,139,174,209,115,132,235,204,147,158,103, 5, 85,169,155,245, 68, 77,224, 43,180,241,154,
+181,110,229, 64, 61,139, 24, 93,117,172,233, 48,198, 64,221,124,159,198, 77,121,156,208, 78, 52,177,187,174, 75, 15,103,196, 68,
+207, 59, 30,227, 55,215,182,247,113,129, 39,207, 31, 91, 47,168, 10,197, 98,177,158, 39, 12, 62,118,227,230,132, 5,224,121,133,
+247,113,113,246,179,208,177,139,127,254,228,136, 95, 60,181, 51,127,218,207,227,132, 25,102,254,187,123, 59,238, 74,159, 23, 18,
+224,108, 90, 2,169, 60,148,239,243,224,209, 35, 42, 60,226,126,159,246,210, 42,210,239, 83, 91, 69, 85,107,150,251,203,248, 86,
+144,142,143,216, 59,216, 5,155, 19,213, 7, 28,141,129,184,195,114,120,137,131,163,140,160,213,162,208,154, 32,106, 17, 71, 62,
+194,104,202,162,160,180,134,168,215,165,180, 53,247,118,199,124,180,121,200,225,209,144,113,154, 48, 74, 18,146,178, 96,156, 78,
+ 73,146, 12,146, 2, 47, 80,108,156, 90, 99,173,223,166, 23,122, 40, 91, 99,168, 27,181,238,179,215, 28,207, 60,188,217,143,225,
+ 12,204, 93, 34,246, 24,225,104, 23, 56,250,141,149,206, 88,211, 36, 86, 25,199,114,110,178,135,151,250, 61,247, 28, 8,200,171,
+138, 44, 47,232, 4, 1,253,200, 39,157, 30,129,112, 10,117,109, 13,221,211,107,180,226,134,108,229,169, 38,233,200, 71,121, 65,
+ 35,146, 18,220,189,117,131,221, 71,247,217,121,120, 31,101, 5,253,254, 18, 73, 90,160,203, 41, 59, 15,238,177,183,117,192,203,
+175, 92,160,168, 42,146, 60,229,204,169,117, 14,176,212,181, 96,227,252, 5,138,221, 17,177, 20, 4, 66,176,187, 63,228,165, 43,
+231,240, 3, 24, 77, 70,248,173,152,233,184, 68,123,146,172, 50, 4,221, 30, 66, 72,198,117,141,241, 60, 90,157, 30,126,187, 67,
+107,148, 81,212, 6, 93, 57,107, 76,166, 13,121,146,210,107,135,132,113,128,234,132,172,157,191,196, 32, 56,135,180,134,139, 50,
+228,139,181, 65, 6, 18, 83, 23, 4, 30,132,202, 34,155,113,172, 53,154,201, 40, 33,201, 39, 72, 95, 48,214, 57,155,233, 30,213,
+200, 67, 84, 6,227,213,196, 65,132,242, 11, 60,149,115,245, 84, 68,182, 26,146, 78, 39, 44,247, 87, 80, 97, 11, 63, 80,244, 6,
+ 61,206, 95,184, 0, 6,234, 52,193,164, 83,172,244,104,181,251,156, 59,119,137, 86, 20, 51, 30,143, 16, 88,210,116,202,185,115,
+103,200,203, 18, 63, 8, 89, 89, 93,195, 98,169,203,146, 60,241, 17, 85, 65, 39, 12,200,117,194,104,239, 17,253,181,243, 12, 86,
+151, 41,175, 92,101,114,184, 71, 93, 36,164, 89,197, 52,201, 56,123,102, 3,223, 23, 84, 85, 69,154, 89,144, 62,227,100, 74,173,
+ 33,136, 44, 97, 90, 16,245, 45,121,150, 51,158,186, 28,247, 93, 95, 17, 6,190,179, 73,122,199, 98, 55, 79, 74,148, 39, 92, 23,
+ 57,119,253, 29,239,203,143,239, 53, 51,127,121, 35, 94,179,110,114, 33, 27,194, 91, 93, 55,196, 56, 37,155, 68,182,102, 60,110,
+102, 49,193,141,199,188,185,134,235,218,156,196,201,206,243, 90,220,205,222, 83, 18,163, 45,101,211, 13, 90,235, 10,231, 60, 44,
+ 70, 55, 72,217,197,215, 12, 78,188, 37,155,175, 45,149,219,227, 6,113,140, 31, 6, 88, 91,209, 22, 25,167, 60, 75,207, 19, 88,
+ 93,179,222,239,163,243, 18,219,118,253, 89, 16,120,228, 85,205,131,205, 29,240, 34,106, 43, 57,119,241, 10,190, 23,184, 3, 82,
+ 16,241,133, 31,249, 49,202,104,153,107,255,224,255,131,173, 82,132,192,117,214, 66, 56, 20,142,128,194, 88,124, 41, 49, 82, 49,
+206, 43, 68,101, 16,114,138,145,146,179,167, 87,137,227, 0,172,239,210,212, 68,128,182, 10,161, 36,149,174,201,243,148, 72, 9,
+ 90,190,123, 27, 85, 83,140,174, 56,123,254, 10,127,235,175,253,207,249,235,127,251,239,112,237,254, 22,149, 54, 88, 36, 82,216,
+147,170,245, 19, 34,168,197, 40, 53, 87, 88,106,171, 25, 77,199,252,210,175,124,149, 63,255,167,255, 28,231, 78,157,102, 50, 41,
+184,118,227, 1,231, 79,247,160,204, 48,101,147,104, 87, 85, 96, 27,206,190,177,141, 24,205,204,239, 67,190,167,240, 27,193,179,
+242, 84, 99,121, 4, 37,103,209,169,141, 88, 18,129, 21, 53,210, 54, 14, 30,221,220,183,106, 67,145, 23,228,137,115, 4, 76,167,
+ 41,105,150,147, 23, 5,121, 81,160,155,112,159,178,170,201,202, 18,148,179,239, 25, 99,221,215,243, 21, 74, 58,116,177,109, 44,
+128,122,126, 13, 55,147, 79,229,116, 35, 88,219, 8,228,130,227,108, 3,207,111, 14,161,199,117,204,123, 46,234,149,103,243,215,
+143, 31,116, 49,223,151, 26,251,100, 97, 63,142, 54, 60, 86,133,218,103, 6,222,139,167, 56,173,196, 83,196, 20, 60, 55,133,231,
+217,133, 73,204,127,174, 39,219, 75,225, 94,236, 52,123, 28, 23,158,215, 92, 72,174,179, 56, 22,186,200,121,202,217, 28, 98, 33,
+124,148,244,136,194,144, 23, 95,126, 17, 47,232, 64,208, 34, 47,157,146,114,124,180, 79,149, 85,232,209, 17, 74, 8,166,147, 17,
+117, 85,208,110,133,196, 94,151,192, 15,168,165, 98, 47, 41, 40,181, 38,221,217,166, 40, 10, 48,150,162,172, 56,154, 78, 25,142,
+ 71, 76, 19,103, 29, 73,210, 41, 85,145, 34,132, 70, 96, 49,186, 34, 8, 66,132,133,208,143,104,133, 45,252,216,195, 23,134, 83,
+145, 36,246, 52, 70,184,200, 63,165,157,176,103,177, 81,127,218,243,252,184,222,224,241,147,209, 83,119, 97, 51,139,200,236,125,
+ 99, 49, 86, 59, 15,105,163,126,119, 68, 63,179, 32, 48, 50,115, 33,209,139, 87,206,115,227,194,105, 30,110,238, 98, 52, 24, 45,
+ 72, 39, 19,218, 10,142, 38, 41, 42,136, 48, 86, 81,151, 5,237,118,203,133, 68, 8,133,240,125,100, 16,184,130,238,249,248,210,
+ 99,111,235, 1,223,254,230,111,163,139,156, 7,183,222,163,179,180,130,198,146,140,143,208, 89,202,206,230, 35,174, 92,121,129,
+195,195, 67,242,124,204,234, 90,159,110,216, 97,100,106,192,103, 60, 62,162, 21, 74,186, 74,162, 17,100,198, 80,150, 57, 45,105,
+153, 38, 41,173, 86,151,163, 36, 96,191, 46, 56,119,229, 69,206,182,186, 60,124,244,136,135,123, 59,172,118, 99,214,207, 94, 32,
+155,140,217, 8, 36,133,180,148, 66, 19, 8,159,170,182, 12,211,156,190,174,137,170, 17,211,163, 9,165,178,236, 42, 65, 24,250,
+ 24,235, 40, 38, 97, 32,169,171,140,192,179, 20,202,130,169, 8, 60, 15, 93,213, 76, 39, 5, 74, 42,210, 86,136, 65, 51,240,218,
+ 76,252, 20,171, 12, 81,171, 69,187,221, 33, 43, 74,138, 81,130, 87, 39,172,246, 86,176, 43,203,180,122,107,104,235,145,101, 41,
+231,206,159, 35, 27,143,156,135,222,148, 36, 85,193,218,250, 25,250, 75, 61, 52,154,178, 72, 89, 91,238,145, 76, 70,196,126,155,
+ 34,203,233,244,251,212,117,221,248,145, 5, 94,168,136,166, 1,170, 84,232, 60,193, 51, 32,178, 35, 14, 55, 43,162,165,117, 86,
+ 79,157,161, 53, 88, 37, 27,238,179, 82,150,140,146, 20,141, 64, 89,139,242, 3, 76, 90, 82, 86, 2, 99, 27,241,145, 12, 8,226,
+ 46, 94, 24,179,127, 52,114,152,210,158, 91,119,121, 74, 18,122, 30,158,175,240,149,196,151,194, 21,116, 65,147, 41, 48, 43,230,
+199, 59,116,105,221, 74, 97,174, 19, 49,205,117,111, 4, 88,133,213, 18,109, 45, 18,131, 49, 18,101,105,174, 77,139,149,118, 30,
+ 64, 4,242,248, 62,166,155,123,146, 60,134,201, 24,109,209,104,132,116, 34, 48,109,192,212,198,141,125,171,122,254,122,210, 82,
+162, 61,183,162,178,218,209, 13,153, 57,220,140,105,226, 61, 37,138, 26, 95, 26, 60, 37,200, 11, 77, 86, 11,188, 94, 15, 81,106,
+ 84, 82, 35, 70, 21,235, 23,151,233,118, 98, 98,229, 64, 56,194,151,132,237,136, 71, 91, 9,223,252,206,117,106, 25,146,231, 83,
+166, 71,187, 92,185,252, 2, 71, 69,136,245, 54,176, 42,228, 7,127,248,143,208, 31, 12,248,233,159,251, 5,238,111,110,177,123,
+ 56, 36, 45,220,138,160,153, 81,144,152,154,105, 86, 99,164,199,161,213,100,147,130,196, 30, 17,182,125, 6, 58, 68, 97,209, 22,
+194,200, 35, 8, 66,183,154,171, 53,182,214, 40, 63, 32, 43, 10,166, 69,129,242,187,148, 69,206,116,231, 62,189,165,101,254,179,
+255,240, 47,241, 95,252,157,255, 55,239,223,219,162,178, 51,191,183, 70, 41,137,209,122,161,182, 88, 12,181, 11,127,121,236,158,
+ 95,155,138,221,195, 45,190,246,107,191,196, 79,252, 27, 63, 65, 24,132,220,122,176,131,181,154,174, 41, 17,101, 74, 90,231,212,
+186,154, 7,163,104, 99,209,198, 96,172,115, 35,120, 74, 18,248, 30, 97, 24, 16, 7,126, 19,250,163,240,125,137,239,187,123, 85,
+ 93, 55,223,143, 52,120,181, 65,170, 10,252, 38,113, 82, 42,116,109,200,146,140, 52, 73, 25,143, 38,140,166, 41,147,172, 32, 73,
+115,178,172,108,170,141, 66,200, 26, 67,137, 54, 80,107, 75, 21,106,162, 40, 32,192,161,140,133, 53,200, 6,104,236,174,205,102,
+180,111,108,163,215,114,215,138,239,121,196,161,115,127, 4,202, 57,175,164,240,220, 68,201, 26, 12, 60,157,253,254, 73, 68,107,
+207, 27,133, 63,173,243,123, 82,200,246,251, 67,198,254,129,227, 77,127, 31,191,164,176, 4,162,230,104,127,159,221,189, 3,132,
+ 23, 50, 78, 50,210,210,162, 81,244,186,203,212, 73,226,186, 74,161, 49, 82,144,219, 2, 25, 24,198,117,206,214,253,187,205,133,
+145, 80,150, 37,101,153, 99,180,179, 47, 8, 93, 55, 79,181,123,169,245, 59, 62,107,253, 54,151,214, 61,250,209,128,141,193,128,
+188,168,209, 40, 52, 62,155,219, 7,212,181, 96,101,125,131,229,245, 1,197,116, 66,167, 21, 80,154, 10,107,220, 13, 72, 26,225,
+174,155, 63,112,148,226,241,184,221, 44,176,244,229, 2, 69,206,206,181, 20,178,249,115, 78,164, 30,245, 58, 29, 58,173, 24, 9,
+ 46, 46, 54, 77, 25, 44,181,240,165, 98,111,107, 31, 29,182, 24,172,172, 51, 30, 29,178,178,188,140,167,188, 6, 96, 19,224,171,
+208,121,144,165,165,204,166,124,253,107,191, 74,145, 22,124,248,222,251, 76,179,148,193,198,105,116, 85, 16,248,138,225,193,132,
+151,174,158,163, 40,115,178, 82,112,243, 81, 70, 29,244,241, 66,201,157,173,156, 80,149,172, 40, 31, 35, 96,181,167, 56,152, 84,
+108,108,172,115,231,225, 14, 47,156, 93,166,178, 62,104, 69,161, 21,221,238, 18,171,131, 1,211, 36,165, 35, 45,178,219,166,223,
+138, 72, 70, 19, 2,105,241,173,166, 37, 12, 5, 6,116,129, 52, 80,166, 83,242,105, 4,181,194, 19, 80, 22,110,119,233,251, 62,
+121, 89, 98,140,166, 29, 7, 40,105,104, 69, 30,113,224,209,138, 98,194, 32,196, 40, 77,224, 57,245,108, 81,102, 20,121, 9, 56,
+ 56, 74,127,121,153,149,213, 85, 44,130,157,189, 67, 90,177,162, 61,232, 82,171,152,168,187,140, 85, 49,251, 71, 9,167,207,158,
+ 39, 47, 42, 36,150,178, 40, 9,124,159,193,202, 42,113, 43, 70, 97, 41,242,148,184, 21,162,164,165,211,142,168,203, 2, 76,133,
+169, 51,242,105,206,232,208,163,183,182,140,182, 37, 66,213,248,177, 4,237,145,231, 21,166, 40, 24,141, 82,218, 6,194, 56,164,
+215, 27,176,212,191, 66,111,101, 29,217, 91,229,250,251,191, 75, 39,128, 80,105,202,202, 48, 29, 79,241,149,207,249, 75,151, 24,
+ 77, 18,150, 7,125, 38,163, 33,221, 86,155,118, 28, 51,221,189,235,110,186,202,197,245,134, 13,250,213, 83,141, 58, 93, 54,126,
+234, 5, 75,218,137,236, 6,187,232, 17,159, 5,119,208,140, 55,155,238, 92, 58,124,169,110,178,207, 79, 34,140,197, 9,135,140,
+157, 11, 22, 57,161, 37,178,141,138, 90,107, 77,109,204, 19,247, 52,207,243, 48,198,144,231, 57, 66,137, 6, 70,211, 28, 26, 22,
+217,243,205,228,111, 6, 35,202,179, 18, 37,125,226,184, 77,187,107,208, 3, 77, 81, 12, 89, 89, 91,193, 10,139, 31,120,132,161,
+243, 60,203,160,197,222,193, 22,247,182, 14,121,241,197,148,206,133, 53,108,149,146,140, 14, 88,187,252, 42, 15,135, 71,136,176,
+ 75,165, 53,159,125,227,117,222,124,249, 60, 70,151, 28, 29,236,179,187,185,201,141, 59,247,185,126,119,139,237,195, 49,219,251,
+135, 28, 77, 10, 74, 83,147, 43, 73,106, 45,219,147, 18,245, 96,143,151,207,159,130,162, 36, 79, 82, 78,157,241,144,109, 65,212,
+106, 97, 76, 72, 41, 61, 84, 16, 82, 34, 57, 76, 74, 16,153,115, 53,148, 5,181, 53, 12,214,207,241,159,255,181,255,136,255,244,
+127,247,127,230,230,230, 30,229, 66, 66,155,157, 89, 3,159, 24,177, 62,121,175, 55,192,181,155,215,249,250,215,127,133, 31,255,
+147,127,138, 78,111,137,205,173, 29, 46,109,172, 49, 25,151, 28,141, 15,169,117,233,154, 35,235, 10,250,226,191,231, 44,102,206,
+235,157, 71,225,188,176, 7, 77, 81, 7,129, 54, 77, 51,215,120,213,101,147, 37, 79,195, 39,168,107, 67,154, 53, 76,246,241,148,
+163, 73,194,120,154,145,165, 57,101, 89, 35,165, 68, 27,199, 63,169,117,141, 53,181, 19,232, 97,231,145,181, 82,186,137,165,240,
+ 36, 90, 27,202,178,116, 92,129, 52,165,200,115,116, 93, 97,173,153,107,185,194, 48, 32, 8,188,121,190, 61,194,204,149,252,194,
+ 24, 87,212,191, 91, 21,250, 83,119,215,207, 65,141, 62, 77,249,254,244, 56,188, 79, 86,172,159, 53,114,255,189,226, 75,127,223,
+ 72, 84,107,144,166, 66,218,154, 60,155, 16,181,221, 9, 78, 53, 68,181,186, 76,169,202,140, 36, 29,147, 21, 5,135,163, 35,210,
+ 60, 33,207, 83,202,186,166,172, 29, 7, 30,163, 9,149, 36, 84,130, 94, 39,102, 99,109,157,165,150,135, 48, 21, 85,145,210, 14,
+ 61,214,250, 45, 62,245,226, 37,178,201, 33,201,100, 76, 85,164,196, 94, 68,187,191,198,222, 81,134,239, 11,198,201,152,190,233,
+208,139,215, 81, 65, 31, 99,106,108,165,169,140,113, 35,182,127, 13, 60,224,197, 21,134, 49, 98, 65, 4,226, 20,167,179,157,209,
+ 92, 96, 39, 45, 82,207, 70, 81,141, 39, 83,131,239,121,124,207, 91,159,101,111,103, 31, 83,150, 8, 83, 49,157, 78, 89, 95, 89,
+ 98, 99,165, 71,233,119,200,234,138,201,104, 66,224,135,115,134,188, 39, 61, 36, 78, 44,165,108,205,175,124,237, 95,242,254,187,
+239, 18,201,144, 7,247,182,216, 56,189,129,177,134, 44,157, 82,100, 9,189, 78,140, 39, 44, 15,182,183, 56, 24,215, 8, 60,222,
+185,190,195,173,251,135, 4,181, 37, 48, 37,173, 56, 33,108,121, 68,182, 98, 16, 67,175, 19,113,116, 0,155,163,148,193, 96,157,
+ 44,211,236, 12,167,244, 58, 93,170, 60, 35, 48, 53,103, 87,150, 24, 7,146,225,225, 17,215,110,222, 38,192,176,178, 54,160,149,
+164, 24, 36,121, 94,207,215, 17,163,225, 1, 83,233,158,235,170, 42,221, 90,192,166, 40, 79,208,235,181, 92, 54,188,130,118,187,
+195, 96,169,199, 82,183,131,175, 20,166,174,201,166,123, 12,143, 14, 73,178, 4,109,192,247, 35, 78,159, 59,195,218,234, 41,172,
+149,140, 38, 83, 54, 78, 95,224,124,171, 79, 77,192,206, 48,229, 96,156,226, 69,150,229,193, 10, 85,161,201,146, 28, 93, 21,172,
+173, 12, 8, 67,133, 54,150,118, 43,162, 19, 7, 20,162, 34, 8, 20, 82,184, 49,225, 40, 25,179,183,179,205, 57,255, 20,237, 94,
+159,108,114,196,210,250, 50, 65,232,209,234,180,168,173,139, 86, 21, 53,120,190,207,169,254, 50, 70, 42, 34,169,169,147, 67,188,
+238, 42,209, 96,131,179, 47, 42, 74,173,217,125,112,139, 48, 14, 24, 30, 78, 25, 44,175, 49,154,140,233,117, 98,210, 52, 37, 79,
+ 39,232,202, 32,194,128, 51, 27,103,184,189,115, 27, 95, 10,124,233,246,229,202, 81,212,241,154, 8, 7, 49,115, 37,219,227,130,
+ 62,179, 34,205, 67, 54,102, 25,221,139, 66, 80,123, 28,218, 97,140, 65,227,212,234, 70, 59, 37,189,242,229,137,233,159,174,205,
+124,165, 40,149, 60,161, 23, 17, 11, 7, 5, 99,204,124,175,142, 21, 40,233, 70,187, 66, 8,151,125, 93,107,242, 52, 71,251,190,
+211, 9,248,254, 28, 95,109,102,235, 42,225, 33,132,161,174,114,124, 63,164,211,237,177,127,148,225,133, 33, 81,175, 75,191,178,
+ 72, 95,114,235,246, 77, 86, 90, 30,233,114,155,115,151,207,147,150,154,251,155,251, 40, 4,105,150,113,116,116,200,217,149, 62,
+131, 94,155,229,142, 79,166, 45,239,223,121, 68, 16,119,145, 43, 93,122,158,135,180, 25,103,206, 12,248,252, 70,132,248,158, 23,
+168,241,153,148,176, 59, 74,217, 60, 24,115,243,222, 35,222,187,179,197,195, 71,155,236,239,186, 44,137, 91,247,118,176, 18,178,
+ 66, 35,251, 25,203, 24, 12,146,168,213, 37,108, 53,254,127,207,105, 13, 38,105, 78, 38, 13, 81,232,147,167, 41,226, 96,135,149,
+211,231,249,175,255, 79,127,157,191,244,191,248, 27,220, 63, 56,162,178, 51,162,162, 56,206, 80,255, 24,130,171,181, 80, 99,249,
+141,111,252, 38,127,228, 15,127,133,151,207, 92,226,104,120,128,106, 15, 16,121, 77,100, 44, 55,110, 94, 39,203, 82,140,173, 1,
+139, 18,238,185, 83, 56,139, 98, 24, 6,116,202,152,170,172, 40,130,192,113, 15, 2, 73,224,185,239, 69,107, 61,183, 38,202, 38,
+225, 71, 10,217,192,107, 4,165,214,100,121, 65,146,102, 76,147,148,113,146, 48,158, 56,148,171,174, 13, 74,121,212,214, 82, 91,
+ 77,101,106, 7,181, 49,199, 59,243,186,174,168,202,210,165,182, 73,137, 54,150, 44,205,153, 78, 18,166, 73, 66,150,229, 13,141,
+ 14,103,153,246, 92,190,193, 12,156,132, 56,222,237, 91,109, 78, 10,229,158, 86, 32,221, 11, 65, 60,183, 67, 62,238,192,158, 12,
+ 61,249,253,134,183,124, 55,159,243,123,233,240,159,202,156,127, 86, 54,252,220, 74,244,244,209,189,149,138,176,221,161,213, 27,
+ 32,253,136,200,135,221,189, 33,247, 30,220,100, 52, 73,169,106, 77,217,144,133,132, 16, 8,107, 27, 15,172, 83,154, 6,202,208,
+110, 71,172,245,123,116, 99,159,181,229, 30, 75,189, 22,201,104,155, 48,244,105,183, 54, 8, 60, 73, 43,244,136,219, 49, 89, 34,
+233,245,150,216,219, 25,113,250,244, 57,150,215,206,114,106, 29, 46, 95,188,204,141,219, 55,201,138,140,233,116, 76,145, 38,156,
+ 61,115,154,196, 20, 46,161, 12,176, 74, 44, 56,208,159,167,105,176,223,125, 97,119, 77, 7,152,227,108,117, 33,205, 60,234, 85,
+138,198, 6, 98,102,116, 57,195,108,226,134,116,143,203, 82,175,235,132, 42, 74,145, 21, 5,113,224, 51, 28, 39,172,172,172,241,
+222,237, 77,108,216,198,147,138,193,210, 82,195, 7,112, 47, 56,223,243,145, 64,150, 36,124,244,254,187,152,178, 38,183,130,207,
+124,230,115,180,186, 17,119,238,221, 99, 50, 26, 98,139, 4,107,106, 30,109,237, 83,215,138,216, 90,162,192,217,141, 38,121,141,
+ 80, 62,157, 56,102,127,152,112,174, 53, 96,165, 31, 35, 39, 37,202,212,180, 58, 29,118,135, 9, 37, 83,150,151,215,248,210,151,
+191,194,119,190,243, 14,187,251,123, 44,247, 90,232,170, 64, 72,200,141,229,197,171,151,184,125,243, 54,125,235, 58, 47,154, 67,
+149, 81, 10,227,133, 24, 83, 97,138,154,189,233, 8, 79, 9, 42, 13, 42,112,215, 71, 93, 87,248,126,200,202,202, 18,203,253, 54,
+113,224, 83,155,146, 60, 47, 40,179,156, 60, 61,164,172,114,252,192,167, 29,196, 44, 45,175,209,237, 46,227,251, 49,163,113,130,
+144, 1,113,103,137,218,250, 36, 89, 77,187,187,196, 81, 82,227, 55,235,137,209,120,130, 31, 6,156, 59,123,214, 69, 0,135, 30,
+ 43,131, 62,189,182,135, 39, 52,135,219, 35, 14,118,198,244,218, 17,237, 40, 34,240, 21, 2,152, 78, 18,162,160, 69,103,105,137,
+ 42, 45,144,190, 66,202, 0,161, 66,188, 72, 50, 8, 91,180,186, 75,100,121, 65, 94,150, 84,233, 16,223,243, 81,113, 76,105,192,
+163,166,221,106,113,233,242,139,216,170,192,243, 34, 76, 93,178,187,121, 7, 93, 87,108,172,175, 32, 61, 71, 9,147, 86, 83,151,
+185, 59, 48, 73,133,191,160,104, 87,114,166,100,127, 76, 65,108, 31,103,116,207,151,213, 79,218,214, 16,243, 53,154, 49,141,255,
+191,201, 60,183,243,188, 22, 55,250,181,122,102,115,117,215,175, 53,156,200, 79,159,195,149, 22, 68,159, 90,235,185,144,238, 24,
+ 19,171, 26, 11,148,118,247, 86,123,172,122,158,189,238,116,109,155,233,147,243, 69,207, 0, 56,113, 28, 51,173, 45, 81,203,249,
+172,247,134,123, 36,117, 74,215,239,241,240,225,144, 81, 54, 69, 70,203,220,127,180,141,231,123, 76, 39, 9,195,195, 33,253, 80,
+ 48, 62, 58,100,105,125,153,115,171, 27,124,116,103, 27,233, 71,236,142, 10,212,160, 69,145, 66,167,213, 33,240, 36,170, 78,177,
+ 54, 37,240, 60,186,171, 45,206, 47,183,120,235,226, 10,127,230,251,223,226,240,104,194,163,189, 61, 62,188,115,151, 95,123,231,
+ 67,110, 60,220,103, 82, 25,174, 61,220,227,197,211,107, 44, 7, 93, 20,138,216,243,104,135, 18,207, 86, 8, 83,146, 91,103,239,
+155,230, 5,117, 93,209,173, 74,140,174, 88, 94, 89,227,191,250,155,127,141,191,242,159,253,109,238,109,239, 80, 90,176,162, 17,
+ 15, 10,187,248,148, 61,165,249, 18, 32,156,218, 59, 55, 5, 63,245,211, 63,197, 11, 87, 47,115,245,234, 85,210,194,176,118,238,
+ 50,155,119, 43, 94,254,244,103,249,246, 59,223,230, 96,111, 7, 41, 52,158,176,120,202,162,132, 3, 18,149, 77,214,189, 54,150,
+168,210, 20, 69,229, 58,117,207, 61, 55,149,174,169,155,143,153,129,160,132,105, 10,190,133,178, 33,237, 57, 31,121, 78,146, 23,
+142,223, 80, 58,144,141, 16,181, 75,221, 83, 2, 79, 9, 38,158,164, 29, 59,213,122, 28, 7,206,150, 22,249,238, 53,162, 20,218,
+ 24,178, 44,103, 58, 77,157,130, 62,119,152, 94, 23,173,234,205, 15,142,117,237, 32, 52,218, 88,180,117,120, 89,163, 13,198, 56,
+107,226,179, 85,227,246,233, 65, 38,207,235,144,159,214, 69, 63,203, 71, 46,254, 53,133,136, 60, 45, 58,246, 89,105, 59, 79, 0,
+114, 56,153, 2,180,136,141,124, 12, 75,180, 16, 38, 32,209,194,195,143, 3,186, 75, 53,135,163, 9,211, 36,229,250,141, 27,100,
+121,137,193,141,200,132, 39, 49, 6, 90, 81, 27,105, 45, 85, 86, 52,234, 93, 55,130,107, 43, 73, 44, 44, 27, 75, 93, 34, 79,144,
+ 28,238, 81,213, 41,173,184,239,118,132, 42,100,176,113,150,222,250, 89,198, 57,140,134, 71,168, 94, 72,229, 69, 36,149, 97,146,
+ 37,148, 69, 65, 50, 25,177,187,191,143, 14,198,212,101, 73, 82,228,196, 75, 29,108,232,110, 16,152, 69,183,248, 39,123, 92,103,
+157,207,227,165,254,137,155,168,177,104, 92, 71, 35,173,116,217,208,230,248,177, 52,104,164,180,184,193,132,235,212,103,193, 22,
+198, 24, 12, 53,158,239, 17,183,218, 60,216,220,102,169,211,193,132, 30,163, 52, 67,166, 41,157,118,204, 81, 97,232,118,186,148,
+101, 69,173, 53,202,147,110,156, 41, 44,158, 82,108,239, 30,208,105,247,233, 95, 93, 70,224,145, 76, 19,110,221,188,206,100, 50,
+ 65, 88, 75,160, 20,117,145,177, 60, 88, 98,111, 63,165, 21, 66, 86,106, 58, 81, 64,174, 43,194, 56, 98, 63,153,240,218,149, 13,
+142,166, 71, 12,186, 45, 66,207,112,184,127,132, 81, 1,211,210,208, 69, 17, 72,193,189,155, 31,146,140, 15, 9,122,109,174,223,
+218, 1, 33,168,140,227,151,223,186,247,128,110,183, 67,146,166,244,250, 61,138,163, 4, 83, 87,120,113,139,131,188, 32,212,150,
+ 72, 42,116,101,241,164,194, 87,142, 58, 83,102,150, 48, 48, 8,105,177,166, 34, 73, 70,164,147, 26,163, 75, 55,249, 51, 22,173,
+ 43,167, 70,143, 90,116,187, 75,180,187, 75, 8,225, 83,148,134, 44,175, 64,122,148,149,133,192, 3, 79,146,229, 37,113,220, 66,
+ 42,137,169, 75,186,157,152,213,181, 13,130,208,167,221, 10, 56,189,182,194,234,114,143,110,203,167,223,137,248,204,167, 95, 37,
+155, 30,177,187,189,137, 41, 75,103,233,145, 2, 95,121,120, 42,196,247, 34,176, 30,202, 11,209,165,198,160,192, 86,128,165,170,
+114,172,173, 65,151,232, 82, 83, 38, 37, 82, 8,114, 27, 18,183,122,248, 66,160,189,128, 36,203,105,245, 7, 20, 89, 66,183,223,
+ 35, 73, 18, 86,215,214, 17, 42,192,243, 5, 97,171,131, 20, 78,140, 23, 46,192,140,230,201, 86,141, 36, 67,201,197,113,185, 93,
+120,157, 54, 64,151,198,190,249,248,107,221, 54, 83, 37, 39,130, 58,190, 55, 24, 99,154,131,167,105, 26, 22, 53,247, 61,195, 76,
+177,174, 65,136,249, 72,119,102, 81, 43,202,146, 60,203,136,194,214,252,243,103,223,239,241, 84, 83,160,141, 43,248,181, 49,160,
+205,188,161,176, 51,132,105,173,231,196,186, 48, 10,105,181, 32,142,114,188, 52, 71, 69, 33,158, 49,100, 85,194,233, 51, 27,156,
+ 94, 94,226,244,234,128, 92, 23,236, 62,218, 36, 27, 13,209,117, 69, 81, 20,228, 69, 73,146, 21,236, 30, 14, 89, 62,220,167,237,
+197,132,158, 96,146,102,172,174,109,144, 90, 73,180,114,145,247,183,238, 19, 92, 92,166,101, 44, 45, 81,224, 55,230,187,192,186,
+215,106, 29, 20,116, 67,159,193,210, 58,231,206, 46,243,198,167, 95,229,206,230, 33,215,239, 62,224,195,107,183,184,191,185, 79,
+ 45, 2,132, 10, 16, 54, 32, 18,138,149,126, 68,149, 85,164,181,161,210, 53, 71, 19,232,183, 35, 68,154,225,123, 30,137, 18, 12,
+206,246,248,155,255,201,127,192,127,252, 55,254, 15,236, 38, 57,249,124,140, 40, 62,166,169,104, 32, 50, 74, 80, 27,248,214, 7,
+ 31,242,224,225, 38,175,189,250, 58, 55,110, 95, 99,249,211,159,102,227,244, 89, 30,110,110, 98, 68,192,151,255,208, 31,230, 27,
+191,253,235, 20,217, 24, 99, 44,190,106,158, 79, 81,163,148, 19, 50, 86,149,110, 28, 22, 18, 37, 93,119, 94,213, 85,179,143,111,
+168,128,214,137,231, 12, 2,173, 13,149,214,148,117, 77, 81,212, 20, 85, 69, 94, 22,212, 90, 83,215, 78, 97,111, 26,149,189,139,
+106,117, 26,137,184, 33, 40,182, 98,151, 97, 16,197, 1,129, 31,160,164, 19, 83,231,101, 65,146,185,188,244,170,170, 80,210, 35,
+240, 29, 75,160,170,106,138,162,116,171, 75,227,214, 21,149,214,232,133,162,174,222,122,229,252, 79, 62,147,244,246,156,155,252,
+ 83, 41,112,207,241,143,159,124,123,140, 70,247,137,121,241, 79, 39,207, 61,219,107,253,248,199,136,103, 66,108,142,163,239,154,
+157, 88,131, 64,172,106, 7, 2,208,198, 1, 36, 28,251,189,161, 88,133,206,163,238, 80,177,142, 52, 20,197, 49,237, 86,204,246,
+230, 67,168, 51, 54,150, 91,248, 88, 86,151,122,132,126,128,244,124,180, 21, 40, 21,224,135, 49,161, 31,186,156,103, 41,105,183,
+219,180, 90, 45,218,157, 14,211, 44,113,153,196,190,143, 70, 81,105, 73, 94, 24, 38,211,156,187,247, 30,113,253,250, 45,238, 62,
+216,100,235,224,144,164,206,185,187,249,128, 97, 54,101,119, 60,194, 6, 1,147, 82, 19,134, 29,210, 36,163,221,110, 19,183,219,
+ 78,109,219, 48, 14, 62,238,185, 21,139,110,134,185, 79,125,134,111,228, 68,110,250,113, 32,134,156,219, 52,102, 90,151,227, 8,
+ 91, 39, 62,156,125,222,140,169, 61,219,133,130,219,143, 10, 64, 42,143,193,234, 42, 15, 55, 55, 9,219, 29, 30,236, 13, 25,103,
+ 37,161,173,144, 74,161,241, 88, 30, 44,163,203,156,183,222,252, 20,237, 86, 72,208, 14,137, 91, 17, 74,122,124,253, 87,190, 78,
+145, 85, 8,225,177,181,189, 73,145,167,164,211, 49, 81, 24,210, 10,125,202, 52, 33, 25,141, 25,141, 10, 70, 73, 77, 90,106,142,
+ 42,195,168,212, 20,198,210,233,196,232,178,160,211, 13,168,117,197,116,152,211,138, 35, 74, 35, 32,108, 17,182,122,172, 47, 15,
+ 56,216,188,143, 40,166, 8, 93,131, 21,164,101, 77,169, 33,106,197, 24, 43,232,119, 99, 94,121,225, 2,187, 91,155,244,186, 45,
+ 14,142, 18, 74, 44,163,188,160,210,134, 88, 91,148, 85,232,218,193, 48,148,148,196, 97, 64, 20, 41, 90,237, 16, 93,215, 76,199,
+ 99,178,116, 10,166, 70, 87, 5, 86, 87, 88, 91,227, 43,233, 34, 28,195,136, 48,238, 98,172, 71, 93, 75,106, 45, 41, 43,205,193,
+112,200, 52,171,156,141,206, 42,106, 35, 40,203, 18, 79, 74, 34, 95, 17, 70, 62, 66, 10,206,159, 63,135,146,150, 44, 57, 34, 79,
+ 70,148,101,142,239, 41, 90,113, 68,191,215,101,125, 99,157,149,229, 21, 6,131,101,150, 87, 87, 8,162,176,193, 13, 40,138,186,
+ 2, 41, 48,218, 80,102, 5,186,206,169,170,146,170, 42, 16, 2,170, 34,199, 19, 22,223, 19, 40, 63,230,119,190,241, 30, 85,101,
+ 56,117,238, 2, 69, 94, 82,100, 41,253,126,135,100,114, 68, 85, 38, 92,184,112, 17, 33, 21,113,187, 67, 89,105, 58,157, 46, 82,
+249, 36,135,123,248,194, 52, 54, 54, 7,218,240,148, 63,183,243,204, 17,174,179,208, 21,129,227, 31,204, 57, 9, 51,114,161,187,
+222,102,161, 44, 51,154,156,108,118,234,199,231, 2,251,216,225, 93,158, 32,149,205,236,109,182, 1,201, 44, 2, 76,102,172,112,
+107, 4, 39,163,163, 22,179, 16,102,240, 39, 7, 97,145, 98, 70, 39,147,205,148, 96,150,211,109,169,181, 97,154, 22,238,192,214,
+ 80,220,168, 42,116, 85,146,219,138,184, 19, 17, 74,197, 82,175, 79,167,219, 65,231, 5,211,180,102,115,103,232,188,204,177,143,
+231,123, 88, 20,190, 39, 89,221, 56,195,205, 7,123, 72, 63, 38,203, 50,242, 50,103,237,212, 41, 76, 19,187,170, 76,129,103, 43,
+144, 10,173, 2,132,148,248,210, 66, 40,241, 98,151, 91,223,109,183, 89,237,245, 57,181,212,227,210,202,128,171,231,207, 16,183,
+ 66, 30, 62,122,228, 14, 52, 81,136, 39,192, 84, 37,113, 43,102, 90, 84, 88,160, 40, 74,132,146, 14,200, 84, 22, 78,127, 80,228,
+156, 90, 93, 38,140, 90,188,253,238, 53, 74,251, 20, 86,251, 51,126,121,194, 97, 86,173,116, 24, 85,105, 4,111,125,250, 77,172,
+209,140, 70, 67,122,157, 14,113,167,203,215,190,254,107, 92,188,116,133,211,167, 78,177,191,183, 3, 77, 56,151, 21, 78,220,109,
+141, 91,123,104,173,169,170,202, 41,213,243,146,255, 63,109,255,245, 36, 89,150,231,119, 98,159,115,206, 61, 87,185, 10,153,145,
+ 58,171, 42, 75,181,168, 22, 51, 61, 2,211, 24,204,130, 24, 0, 3,177,182,160, 88, 26,215, 8, 35, 31,200, 63,128,102,124, 32,
+ 31, 97,198, 71, 62,242,129, 15, 52,174,237, 3,105,220, 93,236,114,185, 32,176, 52, 18, 3, 16,192,204, 96, 48,221, 35, 90, 76,
+139,234, 82, 89, 85, 41, 66,135,203, 43,143,224,195,185,215,221, 35, 43,179,186,122, 6,180, 50,183,136,140,242,240,136,112,191,
+126,126,191,223,247,247, 21, 69, 85,179, 44, 42, 86, 69,205,170,172, 89,149, 21,203,162, 98, 90,148,204, 87, 5,243,101,193, 98,
+ 85,176, 88,149, 20, 69, 96,187,215,157, 65, 88,240,176, 9,123,124,219,249,159,180,198,210, 90, 71, 99, 28,214,121,140,243,225,
+107, 77,112, 45,173,170,134,197,162, 96,182, 92, 49, 91,172, 88,150,193,229,207,123,144, 34,234,200,160,193,139,223, 57,135,105,
+205, 26,250, 47,171,134,178,170, 41,171,230, 58, 81,238,179,189,144,224,101,129,243,159,153,134, 63, 71, 43,254, 34,232,228,243,
+140, 79,254, 50,112,250,139, 72,124,155,251,108,150,201, 61,121,235, 69,242,180,235,150,183,219, 70, 44, 47,213,196, 33,113,200,
+142, 51,175, 48,152, 98,202,222, 32,194,212, 21,123,145, 98, 60, 24, 50, 85, 6,235,106,116,146, 96, 68, 96,140, 70, 30,170,197,
+ 28, 99, 12, 87,171,154,101,219,242,233,249, 25,166,173, 73, 18,137, 38, 48,123,243, 44,103,144,164,140,242,148, 27,187,187,188,
+118,247, 21,118, 6, 25,183,110,220, 32, 25, 36, 44,138, 21, 50, 78,105, 93,132,210, 3, 62,125,124, 74, 93, 25, 30,127,252, 8,
+107,234, 32,197,232, 33,198, 62, 63,250,255, 31,123,245,110, 82,151, 82, 6,171,203,231,154, 52,215, 51,159,251, 56, 75,233,240,
+ 62, 76, 69,173,113, 72, 29,225, 60,140,119, 38,164,195, 33, 31,124,252, 4,219, 53, 17,101, 99, 24,166, 67,218,162, 98, 62,155,
+161,104,105,219, 54, 92,244, 18, 60,150, 79, 62,249,132,249,178, 36, 77, 6, 84, 85, 25,154, 0,223, 50, 25, 14, 89,173,150,124,
+242,201, 35,154, 85, 65, 91, 52, 44, 11, 65, 97, 60, 37, 17, 51,103,131, 36, 71, 88, 46,151, 11, 52,142,170,109,144,120,150,203,
+ 22, 47,106, 38, 55,246,248,217,179, 75,142,238,189,202,135,239,253,140,119, 94,185,201, 64, 52,156, 94, 76,105,100,196,170, 50,
+ 36,113, 30, 28,199, 4,164,145,100,118,121,140,150,150, 73, 22,113,251, 96,192, 39,231, 11, 26, 75,151,122, 5,177, 3,213,255,
+253,206, 6,195,147,198, 5,104,222,123, 98, 13,210, 74, 26,105, 80,194,226, 59,158,142,215, 18,165,193,137,134, 56,181, 68,222,
+135,192, 9,116,208,143, 11,197,170, 44, 73,198,158, 36, 73, 72, 7, 41,198, 26, 76,219, 80, 46,167,232, 52,227,237,251,247, 56,
+ 59,125, 70, 91,175, 24,101,154,166, 48, 44, 23, 83, 76, 91, 17, 43, 65, 36,198, 93, 19, 17,206, 8,165, 37,173,111,240, 88,124,
+ 91,226,156, 36,202, 84,231,207,175,176,149,195, 59, 67,219, 58,116, 20, 97, 76,133, 76, 6, 36, 73,194, 31,253,241,247,248,167,
+191,251, 93,190,245, 75,191, 66,148, 77,184,115,235, 54,131, 60,225,252,217,199, 28,236,141,152, 95, 62, 69, 39, 9, 22, 65,109,
+108, 8,215, 49, 54,152,156, 0, 73,156,172,243, 5, 84, 20,109, 10,114,183, 22,147, 29,225,104,123, 90,239,217,238,129,135,102,
+113,174, 13, 16,120,231,221,174,122, 67, 25,209, 59, 40,218,224, 0,231,122,137,149, 64, 74,191,150, 85, 5,215,183,205, 98,210,
+123,183,142,212,220,232,223, 67,145, 55,173,217,138, 90, 13,231,135,181,157, 66, 72,138,224, 72,183,101,200,212,155, 55, 33, 5,
+194, 89,156, 13,201,144,105,150,145,102, 37, 8, 24, 13, 51, 86,117, 70,101, 29,205,106, 25, 76, 86, 76,104, 34,150,203, 2,165,
+ 37,131, 84,243,165, 55, 94,227,147,227, 25,109,211, 34, 85,140, 33, 98,186,170,120,118, 54, 99,255,106,201,124, 58,229,206,238,
+109,206,175,166, 12,227, 29,158, 62,250,128,219,247,238,115, 53, 59, 35,145, 6, 95,175, 80,113,140,211,161, 65,210,214,116, 46,
+141, 26, 8,206,141, 89, 22, 49,153, 36,220,186, 49,224,214,116,194,205,163, 29,222,122,245, 46,223,253,193,143, 57,126,246, 12,
+125,239, 14, 66,106, 62,248,243,247,120,240,250,195,192, 88, 23,146,101, 25,178,218,119, 71, 3,150,101,203, 48, 41, 88,158, 60,
+230,119,126,235,215,248,253,239,253,136,127,251,195,159, 97,191, 32,225, 71,116,198, 48,189, 35,219, 31,126,231,143,249, 27,191,
+249, 91,124,227,107, 95,229, 7, 63,250, 33, 59,227, 33,203,162,226,183,255,230,223,228, 63,255,207,255, 11,126,249,235,239,176,
+183,119,131,203,147,167,107,164,196,117,153,229,214, 90,148,220,248, 5,248,206,230,215, 88, 27, 52,252, 62,172, 16,157,247,180,
+216,110, 39, 30,214, 44, 97, 66,238,206, 62, 31, 86,172,206,133,137, 38,172, 24,109,199, 78,183,120, 39, 49,214, 0, 53,173,113,
+ 84, 85,203, 50, 42,131,140, 18, 73,107, 12,181,105,105, 76,139,245, 14, 29,105, 76,228, 17,168, 46, 9,206, 5,111,139, 56, 32,
+103,214,121, 90,107,105,109,135, 32, 56,135,250,230,219, 15,254, 81,232, 68,197,214,174,169, 51, 68,232, 40, 40,108,193,209,107,
+ 88, 26,185,214,103,126,145, 73,187, 23,199,191, 40, 56, 97,219,117,108,123,114,127,254,235, 47,131,214,175, 55, 0, 47,147,180,
+125, 22,123,216, 46,250,190,183, 7,180, 97,223,101, 91, 75,107, 76,103,215,103, 3, 11,178,219,177,125,102, 82,143, 21,145,238,
+ 15,152,240, 98,206,175, 46, 41,138,101, 23, 17, 24, 28,155,138,178, 96,182, 44,176, 34,188,161,235,213,156,114,181, 96,182,152,
+ 83, 86, 5,117, 93,210,212, 13,222, 90,198,131,156,131,253, 67, 30,190,242, 37, 30,190,242, 22,175,221,127,157,215, 94,125,155,
+219,119, 94,227,254,189,215,184,117,243, 54,123, 59, 19,226, 72, 32,124, 19, 38, 57, 15,231, 87, 83,140, 51,188,247,222,143, 56,
+ 63,159,242,233,227,143, 81,145,103, 52,206,194,239,226, 35,240,186,211,164,246, 76, 96,185, 9, 37, 20,155,169,123,205, 50,237,
+236, 74,195, 69,221,105,208,183,159,255,222, 15,187, 35,186,244,123,117,191,109,187,219,221,250,176, 5, 41,100,183, 55,188,110,
+191,216, 55, 6, 18,197,209,209, 77, 26, 99, 56,187,186,162,113,129,120,180, 40,107, 18, 45,195,155, 81,192, 87,223,121,135,155,
+ 71,135,164, 73,132,117,142,223,255,215,191, 79, 26, 39,204,102, 83, 22,179, 43,172, 41,241,214, 96,171,146, 85,121,193,114,117,
+197,114, 89,115, 57,133, 74, 38,156, 25,199,212,121, 10, 1,153, 84, 8, 37,168,189, 9,186,231, 88,115,152,197, 88,215, 48, 57,
+ 58, 96, 94, 54,212,171, 6, 89, 22, 20,171,146, 69,213,114,103,119,135,123, 7, 67,198,153, 37,141, 64, 16,177, 88,150, 40, 5,
+117, 85, 50,189,156, 35, 85,196,197,249,156, 44,209,100,145, 68,227, 17,214,227,157, 32,137, 34,188, 15,111,122,175, 36, 94,122,
+ 84,228,137, 36,248, 86,224,170, 48,197,183, 6,202, 66, 81,173, 28,202, 11, 26, 39,168, 26, 79, 20,103, 68,113,138,144, 26,231,
+ 21,117,235,105,156,224,244,114,134,206, 71, 28,221,186, 67, 20, 39,172, 86, 75,140,169,169,234, 21,214, 91, 30,190,250, 42,203,
+233, 21,171,217,148, 88,194,124, 62,197, 24, 67,181, 90, 81,175,230,184,186, 64,218, 18, 45, 45, 66, 56,100, 36, 88,204,103, 68,
+ 8, 76,219,226,189,197,217, 22, 45, 21,113,148, 32,165,166,110, 42,164,109, 16,214,163,148, 70,185, 26,237, 27, 42,171,249, 79,
+255,235,127,197, 31,252,225,159,177,155, 73,142,246, 6,164,195, 33,251,183,110, 99,125,139,107, 86,236,223,126,149,186,117, 72,
+149,128,206, 17,201, 78, 40,132,171, 41,205,242,138, 36, 78,136,226, 4, 21,233,224,146,168, 55,159,171, 78,207, 45, 35,141,140,
+ 52, 74,107,148,142, 59,159,238,192, 88, 14, 1, 26, 42,124, 77,202,117,140,102,159,184, 21,166,231, 64,128,114, 62, 56,186,225,
+ 55,122, 97,223,235,164,101, 23,125,219, 77,118,214,118, 7,118,119,192,123,231,105, 58, 7,185,170, 40, 49,214, 32,149, 10, 81,
+159,157,135, 60, 42,236,202,149, 14, 13, 10, 74,225,133, 32,210,113,208, 37,235, 32,205, 84, 42, 9,200,158, 13,133, 66,105,152,
+ 76, 70,212,214,241,209,211,243,192,255, 0,116,228, 25, 38,138, 36,130, 52,141,209,217,144, 85,105, 88,150, 45,247,238,191, 22,
+ 32,222, 72, 34,109, 48, 77,186, 88,182, 44,219,240,123,156, 60,123,134,232, 26,153, 69, 81,176, 51, 72,193, 25, 70,195, 17, 90,
+107,148, 80,129,144,230, 93,183,238,114,212,157,139, 92, 93, 55, 56, 15, 73,146, 48, 24, 12, 24, 13,115, 14,118,199,152,182,225,
+244,236, 28,175, 18, 62,121,118,206,253,123,247,209, 66,145,116,153,235,198, 54, 1, 85,241,130,193, 48, 71, 43, 79,170, 28, 95,
+122,227, 13,254,213, 31,126,143,210,118,113,204,222,246,241,244,155,168,236,231,112,228, 30,209, 0,168,219, 32, 33,251,202, 87,
+190, 74,146,100, 44,139,146,162, 40, 24, 15, 7, 52, 85,193,233,233, 41,217, 96,196,254,205,219, 92, 94, 93, 2,193,222, 21,239,
+ 48,206,208,154,224, 30, 90, 27, 71,211, 77,207,109,231, 38,106,187,162,105,187, 41,219,217, 78, 30,103,131, 68, 46, 76,228, 30,
+227,108,215, 48, 4,182,187,117, 6,231, 76,199,175,216,248,204,219, 46,226,187,110, 2, 79,166,168,106,150,101,201,170, 44, 40,
+235, 58, 24,215,244,166, 57,157,175, 71,176,143,237, 33,120, 67, 81, 53, 44, 87, 21,171, 85,197,170,108, 40,203,134,162,168, 80,
+223,124, 59,216,196,250,107,148,232,141, 77,236,245,194,185, 85,248,187,201,247,243,130, 85, 62, 47,121,237,249,148, 54, 62, 39,
+ 56,230,243,166,248,207,203, 88,255,188,157,251,139,100, 88, 88,183, 9,185, 55,129, 32,209,154,176, 55,177,221,139, 39,248,108,
+ 81,143,116, 32, 49,200, 14,166, 51,173, 97,185, 90, 50,155, 77, 73,210, 4,135,167, 44, 43,102,243, 21, 6,193,229,188,160, 40,
+ 42,176, 6,213,161, 0,163,209,136,241,112,200,141,253, 61,222,122,253, 53,238,221,190,205,112, 48, 96, 52, 30, 98, 77,201,124,
+122,206,108,113,197,179,211, 99,102,243, 75,138,229,101, 48,182,104, 45,182,173,217, 59,220,229,236,234,138, 69,217, 50, 28,238,
+ 49, 30,236,114, 99,255, 6,123,187,187,104, 29,100, 95,190, 11, 84, 93,103, 13,139,151,191,102,219, 67,143,191,230,250,230,159,
+ 67, 64, 36, 66,201,181, 76,141,173,116,164,235,132,165, 78, 32,209, 27,101,110, 93, 83, 61, 91,185, 55,251,113, 93,196,113, 28,
+199, 24,107,120,255,163, 71,225,160,141, 18,118,119, 38,196,145, 66, 41,201,120, 60,225,230,205, 3, 94,123,112,155, 81,158,242,
+222, 79,223,227,248,233, 51,210, 56,102, 62,189,162,169, 75, 22,179, 75,202,170, 96, 86, 76,241,179, 57, 73,229, 57,191,172, 57,
+182,240,180,181,212,128, 13,249, 28,196,214,145, 72,137,115,158,253, 81,198,249,180,228,112,152,128,111, 25,237,238,114,117,181,
+ 64, 57,129,244,142,186, 53,120,173,144,110, 73, 22,195,238,206,132,189,221, 9,195, 81,130,146,142,197,116, 69, 26, 39, 76,139,
+166,139,149,117,148,101,203,254, 48,167, 89,148,196,120, 74, 5, 42, 2, 73,216,165, 71, 34, 34, 38, 4,180,180,181,167,106, 4,
+198, 72, 90, 33,153, 85,158,139,169,163,174, 5,203,165,161, 40,130, 83, 86, 8,154,208,120,169,113, 94, 82, 55,150,211,139, 41,
+ 34,138, 25,141,119, 17, 42, 98, 54, 95,208,182, 13, 87, 87,151, 44, 22, 11,222,120,237,117, 98, 37,168,139, 57,174, 89,210,148,
+ 75,164, 55,156,157, 28,243,241,227, 99,222,123,255, 35,202,213, 18,233, 44,105,172,201, 59, 57,153,180,142,139,243, 11, 76,219,
+128,179,212,117,133,115,142, 52,201, 80, 82,225, 92,131, 45,150,196, 74, 99, 60, 8,215, 32,156, 97, 86,194, 63,254,239,254,128,
+ 91, 55,239,242,149,135,247,216,223, 25,145, 12,135,129, 88,154,106,158, 61,126, 68,146, 79,130, 76, 77,199,160, 18, 26,235,208,
+194, 83, 79, 79, 81,222, 6,232, 93, 7,146, 95,159,133,222,127,140,226,104,221, 88,174,139,120, 20, 33, 58,227,142,254,235, 66,
+ 6, 39, 47,157,132, 98, 25,233,120,157, 19,160,250,108,117, 21, 33,149,238,180,209,157,140, 41, 10,246,176,206,249,181,124,206,
+119,137,142,206,185,173, 93,252,150, 35,101,119,232,247,239, 15,217, 71,189,234,168,107, 58, 54,183,158, 0,181,206, 44, 80, 17,
+ 73,150,161,180, 70, 72, 73, 28,199, 44,150, 51,118,247,118, 56, 60, 60,228,244,252,130,203,249,138, 79,159,158, 80,172,230,236,
+140, 18, 30,190,122,151, 36,146,232, 44, 67,198, 57,211,162,161, 54,112,112,176, 79, 30, 11, 98,217,146,105,193,120,239,128, 71,
+207, 46, 89,212,142,225,104, 18,208, 15, 29, 81, 86, 53, 42,210,212,171, 5,247,111,221,192, 52, 37,145, 12,186,241, 40,214, 88,
+103,200, 7, 57,113,156,116,206,102, 49,113, 28,175,205,124,172, 13, 41,100,177,142,201,135, 3,170,166,225,253,143, 62,225,228,
+252,138, 7,119,239, 16, 43,133, 18, 16,105,133,177,109,112, 3,116, 30, 29,107, 98, 45, 72,132,229,245, 55,222,164,242,154, 63,
+249,209,123,244,218, 5,255,162, 93,225, 86,133,247,207,125,253,242,242,146,183,223,124,155,251,247, 31,240,238,123,239,241,229,
+183,191,196,249,217, 41,187, 59, 19, 62,248,232, 67,140,117,196, 89,206,238,100,196,229,229, 69,199, 30,183, 29, 84,238, 49,222,
+135,253,185,221,114,158,235, 94,219,141,194,199,175, 33,251,254,245,182,221,180,239, 58,115, 27,219,125,127,120, 12,214, 14,165,
+235,235,195, 19,118,242,157, 99,156,233, 87,190,198,225,108,215, 52,154, 45, 52, 96,221,120,132,102,163,172, 55,140,251,229,170,
+160, 40,107,138, 50,124,237,165,240,123,207,100,126,145, 22, 93,108, 89,165,190,200,210,245,231,195,229, 47,215,178,255,101,201,
+115,207, 67,239,207,175, 12, 94,202,166,124,225,138, 64,126,161,223,105,141,103,116,247,211, 58, 98,119,119,151,147,147,103,156,
+156,157,227, 12, 40,161,200,178, 24,233, 53,122, 48,160,113,146, 97, 22, 82,222, 46, 46,167,104, 29,209, 84, 37,103,103,103, 84,
+203, 37, 81,167,201,189,123,255, 46, 89,172,184,119,251, 22,195,201, 14,113, 58,228, 96,103,194, 40,145,140,178,140, 68, 74,198,
+ 3,144,218,227,117,206, 96,110,105, 91, 77, 45, 64,170,146,200, 91,124,235,144, 81, 26,156,138,164,197, 9,211, 73,125,228,139,
+149, 10,207,169, 26,182, 27,159, 23,189,194,107, 66, 81,111,165,248, 2, 91,206,107,178,159, 78,250,102,157, 67, 56,219,125,175,
+236, 76, 67, 4, 10,135,236,126,214,171,247,238,241,215,126,253, 91,124,240,232, 99,164, 30,113,126,242,140,182, 44,152,140, 6,
+ 92,205,102,252,147,127,250, 79,249,229,111,188, 77, 44,225,207,255,236, 7, 12,243, 33,143, 63,126,196, 32,203, 88,181, 53, 31,
+127,252, 49, 77,181, 2, 91,177, 55,156,112,190,178, 92, 22, 32,149, 6,233, 40,164,101,132,100, 79, 72,246,156, 96,172,135, 44,
+149,229,201,124,193,101,236,249,209,178,228, 77,173, 41,230, 75, 70, 89,198,188, 90, 48,153, 28, 80, 57, 88,186,150,201,193, 8,
+145, 36,252,240, 39,159,242,240,225,109,242,168,225,225,173,148,189,244, 6,143,143,151, 12, 99, 13, 14,134, 89, 74, 93, 86, 40,
+ 39, 56,204, 19,164,112,220, 61, 28,243,228,211,115,226, 8,140,129,198,130,119, 18,229, 99,132,104,105, 61,180, 94, 81,183,134,
+133,119,120,175,200, 74,203,209, 72,112,123, 71, 97,157,229,242,114, 69,101,192,171, 5, 73, 58,225,224,240, 22,113,150, 97,125,
+208,249,151, 69, 77, 81,150,148,101,137,181,150, 7,119,239, 49, 72, 50,150,243, 75,202, 98,134,179, 13,214, 57, 62,249,240,152,
+119,223,123,202, 69, 13,173,131,227,203,160,183,157,205, 23,252,242, 87,223, 98,127,156, 49, 24,142, 72,148, 98,186,152, 81,170,
+176, 87,111,155,150, 52, 73,201,178, 28, 45,192, 10, 40,203, 2,146, 28,223,180,160, 4, 85, 19,156,212,126,245, 91,223,226, 27,
+ 95,121,133,233,229, 49,137,214,180, 77,201,104,156, 17,233, 4,156, 65,235,136,213,170,192,122,139,198, 99,171, 21,229,114, 70,
+ 26, 73, 34,181,177,195,236,209,157, 77,124,234,117,203,226, 62,251,188, 31, 66,250,224, 14,133, 39, 81, 97,247,110,173,237,242,
+ 7,130,226, 2, 17, 58,201, 78,130,220, 65,178, 13,116,166, 46,161,142, 4, 66, 85,200, 91, 17, 72, 84,135, 74,117,102, 51,214,
+ 6,212,171, 51,112,137,116, 28,188,194,149, 70,233, 4,157, 36, 68, 73, 76, 20,199,161,201, 96,147,213, 30, 37, 91, 3, 73, 36,
+ 58,155,227, 8, 21,107,226, 44,225,134, 61, 34,203, 50,206,207, 46,121,248,218, 3, 86,149,225,143,254,228, 93,238,220,206,249,
+213, 95,249, 6,187,131, 44, 40, 40, 84,204,213,101,197,170,243, 25,176,182, 10,154,108,101, 25, 12,134, 8,103,137, 35,133, 83,
+ 2,103, 13,198,180, 8, 41, 41,234,146,221,253, 67, 46, 79, 46,152,151,134,195,193, 8,233,106,156,179,228,121,142, 82,146,166,
+105,214, 78,162,190,155, 62,131,163,153,196, 56,135,117,130,201,120,132, 19, 18,132, 70,234, 4,248, 49,143, 30, 61,226,225,131,
+ 7,100,105, 28,200,150, 73,138,113, 14, 61,200,185,156,205,144, 34, 39,145,142,217,249, 51,254,167,255,195,191,203,255,237,159,
+253,115,206,139, 22,107,229,115, 85,187,127,157, 94,206,157,155, 47,230,252,127,254,249, 63,231,245,215,223,224,230,205, 91,252,
+238,191,248, 93,254,246,223,250,109,222,127,255, 61,190,244,165, 47, 83, 86, 13,255,252,119,127,151,255,205,255,250,127,197,227,
+ 79, 63,161,169,203,238,241,252, 86, 25,176,155, 48,175, 45, 39,204,254,124,235, 11,124,144,239,134, 9,221,185,237, 38,207, 95,
+251,184, 93, 79, 59, 79, 29,236,250,220,235,234,159,227,133,245, 84, 56,129,113,142,214, 70, 52,205, 38,155,192, 19,174, 55,211,
+161, 69, 61,145,111,109, 19,251, 82,121,215,203,164,110,235,169,254,197,123,115,241,115, 44, 72,183,229, 82,127, 81,189,249, 95,
+ 70,182, 38,186, 96,250,107, 18,148,231,168,221, 27,213,139,216,146,186,189,216, 89,173,135,233,250,239,243,120, 70,227, 9,111,
+189,253,101,236,143,127, 68,154, 68, 68,120,218,214,115,124, 81, 82,172, 22,212, 70, 98,202, 18, 37, 5,141, 49,100,113, 76, 58,
+ 24,113,243,181,215, 24, 15,114,210, 56, 14,161, 13, 55,110,146,198, 17,163, 44, 39,138, 83,140, 19, 84, 5, 40,227,192,204,184,
+106, 47, 57,121,214,146,165, 67,158,156,205,249,244,217, 21, 63,125,247, 61, 48, 53, 71,123,138,139,203, 25, 94, 13, 57,188,245,
+ 10,174,179,189,116,210, 93, 35, 0,125, 33,123,216,109, 69,196, 75,154,192, 94, 15,236,241, 47, 68, 95,164,220, 76,233, 61, 52,
+239,172,195,120,137,148, 1,154, 18,194, 99,145,200,142,148,232,132,231,157,183,223,226,246,209, 13,254,213,239,125, 23, 87,149,
+ 72,239, 88, 21, 5,201, 96,192,217,179, 25,127,248,189,159,242,245,215, 30,112,252,233, 83, 70,163, 33, 2, 79, 50, 30,178, 59,
+153,176,183,179, 67, 91,106,104, 75,126,242,209, 25,211, 74,208, 68,154,149, 9, 7,120,100, 33,151,144, 8, 79, 19, 75,206, 92,
+193,188, 10,251,236, 73, 29,209,150, 53,245,110,134,181, 37,119,110,223,102, 53, 43, 56,189,184, 96, 81,215, 52,120,158,124, 50,
+ 71,221,144,236,236,238,240,147, 31,127,194,221,219, 3, 84, 36,136,163,156,183,223,184,195,199,207,158,114,113,177, 66,120,203,
+ 32,139,152,205,102,140, 82, 13,206, 34,102, 5,247,198, 25,131,124,192,233, 85,193,233,162,162,113, 21,145, 18, 76,164, 71,155,
+208, 50,182,128,147, 2,107, 37,141,112, 76, 14, 50,146,212,211,182, 48, 95, 57, 6,187, 25, 7, 71, 55,104, 93,132, 65,176,187,
+119,192,211,147, 19, 70,121, 68,107,195,225,139,119,124,237,171, 95,193, 52, 45, 87,231,231,204, 23,151, 92, 45, 46,184,152,205,
+120,122,177,228,241, 73, 73,101, 5,181, 16, 56, 28,243, 39, 83, 46,202,154,218, 25, 70,195,156, 87, 15, 71, 12,243, 43,134, 7,
+ 71,212,197, 10, 25, 69, 29, 81, 12,150,179, 25,137,142, 80,145, 39, 75,227, 48, 97, 8, 1,145,198,123,199,197,229, 28,231, 28,
+ 73, 28, 49, 26,239, 32, 58, 41, 24, 38, 64,211, 8, 69, 83, 87, 16,103, 8,165,195,106,162,173, 56,125,250,136, 84,208,105,114,
+195,196,188,205,126, 95,239,161, 59, 14,135,115,193, 85,171,143, 82, 21, 82,224,188,192,185,176,165, 21, 82,160,163, 40, 56,115,
+ 37,201,154,240,102, 76,208, 14, 11, 92,167, 7, 14, 16,123, 20, 43,240,225,177,149,128, 40,210,180,117,189,206,216, 14,107,206,
+205,174,189,255,121, 72, 80, 50,130,110, 10,142,146,152, 56, 77, 72,179,140, 56, 73, 80,177, 94, 51,221, 5,225,239,235, 11,128,
+148, 10,226, 94,206,214,189, 63, 91,195,206,193, 62,206, 88,132, 18,236,237,141,249,230, 55,190,138,243, 45,227, 73,198,141,195,
+ 9,195, 56,166,105, 44,142,132,214, 52, 84,141, 67,170,152,249,124, 65, 66, 68, 54,144, 88,211,118,171,136,176, 66,177,166, 97,
+ 60, 30,113,124,122, 65,150, 13, 56, 59, 57, 99,152, 14,120,122,177, 32, 83, 57, 59,153, 96,103, 48, 34,201,114,132,168,201,178,
+156,162, 88, 5, 51, 23, 44, 82, 70,196,137, 14, 18, 76,107,192, 71,104, 36,142, 60, 32,110,226,117,134,121,206,119,255,228,123,
+124,250,233, 99, 94,121,112,143, 76,167,157, 2,163, 98, 85,149, 68, 50, 40, 8,146, 56, 69,152,154,216, 21,220,221, 31,113,177,
+ 56, 14,121,229,126, 59, 8,106,125,106,188,148,225,228,129,239,253,249, 15,248,254, 15,127,192,183,126,233,151,249,227,239,126,
+135, 63,254,147, 63,229, 55,126,253,175, 16, 39, 25,127,250,103,223,103, 48, 24,241,224,149,135,188,245,229,119,248,222,159,124,
+167,103, 2,175, 79,174, 53,176,255,220, 89,183, 65, 40, 89, 95,107,155, 2,239,215, 86,232,206,250, 53,218,232,185,142,130,175,
+173,178, 61, 91,214,184,215, 19, 66,183, 11,187, 16,162,115,161,115,212, 98, 99,122,180, 38,118,247,190, 8, 94,172,127, 7,245,
+245, 55,239,254,163,151, 77,182,207,231,169,191,128, 83,246,133, 72,110, 47,102,184,115,157, 53,253, 18, 38, 60, 95,128,129,255,
+ 69, 27,130, 23, 69,182,110,119, 85,116,158,190,214,133, 93,186,177,225,214,118, 31,173,117,107,246,251,154,245,174,187,196,182,
+ 46,111,186,127, 92,235, 28, 77,219,114,113, 53,165, 40,150, 1, 10,158, 46,137,211, 28, 33, 19, 38,187,123,236, 76, 38,236,239,
+ 77,184,113,120, 64,170, 99,156,109, 57,216,223, 39,142, 34,150,139, 37, 82, 10, 78, 78,159, 98,155,146,186, 92,112,122,246,140,
+217,124, 74, 93, 46,168, 86, 87,164,113, 65, 85, 60,197, 54,134,197,172, 33, 73,246, 56, 62,187,224,244,244, 17, 7,135,154,253,
+ 93, 65, 62, 76, 48, 64,148,228,120, 25,173,119,231,188,100,197,209, 31,116,242,186,178,241, 26,204,248,252, 69,183, 14, 38,232,
+155, 4,252,203,227,112,123, 27,207,117, 66,149,216, 24,128,248, 48,225,120,239, 54,175, 73, 71, 72, 25,230, 25,111,220,187,203,
+ 43, 55,247, 81,174, 37,138, 34,206,231, 43,106, 15,127,246,163,119,185,115,112,128,182, 45,121,150,114,176,191, 71, 89,174,194,
+190,218, 24,170,229, 18,191, 50,124, 48, 45,120,108, 61, 75,107,201,101, 68,234, 61,169, 20, 33,254,212,123, 22,206, 97,187, 3,
+196,122,208,232,240, 70,179,134, 60, 17,204,174,174,104, 90,135, 74, 6, 24, 66, 52,102, 92,195,114, 94,114,235,238, 1, 73,226,
+ 57, 63, 94, 82, 55, 18, 82,141,165,226,230,126, 70, 26,135, 67, 35, 73,116,216,183,122,130, 23,188,143, 24,141, 71, 44,202, 10,
+163, 52,211,178,162, 21, 14, 41, 29, 89,228, 73,165,199, 11,203,104, 71,163, 83, 69, 85,183, 76, 50,184,117, 24,177, 51, 26,178,
+179,187, 71, 62, 74, 25,237,236,144,100, 35,118, 15,111,132,125,173,148,232, 56,198, 56, 79, 89, 85,164, 89,202,107,175, 60,192,
+152,150,217,213, 37,213,114,193,229,236,146, 71, 79,142,249,201,163, 41, 79,102, 45, 83,167,168, 72,105,165,192, 8, 65,139,103,
+ 90, 4,227,159, 72,180,220,216, 29, 17,199, 17, 94, 8, 98, 29,138, 69,164, 52,186, 59,212,165,148,228,121, 74, 44, 69, 48,222,
+ 32,194, 54, 53, 77,221,176, 50,154, 89,233,185,113,120, 68, 93,149, 76, 38, 35, 6,131,140, 44,209,104, 45,185,186,188, 8,206,
+ 89, 94, 80,182,158, 88,107,206,158,124,140, 41,231,196, 50,200, 20,149,138,214,193, 27,170,211,236,174,213, 22,178, 11,197, 80,
+178,219,155,203, 13,207, 99,157, 3, 44,144,170,219,105, 75, 73, 20, 71, 33,198, 87,134,143,253,245,187,134,234, 59, 20, 64,105,
+141,142, 19, 34, 29, 82,176, 34, 29,246,248,253,125,195,249, 44, 64, 73,100,191,167,143,194,247,232, 56, 76,231,105,158,147,100,
+ 25, 81,146,160,226, 56,192,238, 73,152,214, 67,138, 72,248,121,189,218, 69,196, 49, 40, 25, 52,234, 82,132,253,123,164,153, 93,
+205,144, 82, 18,167, 25, 82, 69,220,186,125,196,206,206,128,209, 48, 11,206,138, 34, 97,190,106,185,154,215, 28,159,206, 40,138,
+134,247,222,125,151,197,197, 41,222, 86,100,249,144,120,184,203,201,180, 66, 38, 57,198,122,180, 78,104,140, 35,207, 7,120,231,
+200,242, 33,243,217,148, 91, 7, 19, 82, 97, 48,109,141,247,138, 52, 31,146,143,198, 12,242,160,208, 73,210,132,241,100,180,134,
+194,189,247,129,157,221,241,166,156,245, 84, 93,254,119,146,230, 60,250,232, 17,194, 11,242,193, 32, 52, 49,206, 34,156, 13, 42,
+ 14, 37,201,226,168,107,140, 36,217, 96,194, 31,127,255,199, 88, 23, 92, 52, 17,155,148,251,109, 10,247,243, 50,173, 62,152,167,
+109, 91,150,203, 5, 95,253,242, 59,124,237,107, 95,227, 31,255,151,255, 5,247,238,221,229,205,183,222,230,254, 43,175,242,107,
+191,254,235,236,239,237,113,184,191,207,135, 31,188, 79, 89,174,240, 29,169,119, 61,181,139,151,172,131,187,194,109,157, 93,243,
+ 42,174,185,104,250,235, 72,130,232, 72,225, 91,174,231,159,153,252,175,173,128,121, 46, 39, 99, 43, 68,198,174,161,254,110,191,
+239, 54, 60, 39,183,245, 24,234, 27,111,221,251, 71, 47, 39,185,189, 56, 78,181,255,127,159,183, 83,127, 17,241,237,249,199,254,
+ 60,249,217,207,133,188,191,128,123,221, 47,100,114,227,125, 23,167,187,145,180, 89,107,131, 79,175, 13, 4, 5,235,194, 14, 57,
+ 82,138, 56,214,225,214,201,217, 98,173, 3,251,182,243,141, 55, 29, 20, 87, 87, 13,171,197,130, 68,107,118,119,119,208, 58, 33,
+201,134,129, 12,163, 68, 32, 83, 93, 93, 50,159, 77, 3, 51,185, 88,177, 92, 46,104,219, 26,173, 21, 73, 98,240,118,193,225,126,
+206,120,146, 48, 24, 40,134, 3, 79, 18, 21,164, 81, 67,181,152,177,186, 90,112,252,228,140,214,120,172,112,236,238, 15,201,115,
+133,111, 27,110,222,190, 79,235, 35,106, 7, 94,168, 23,216, 9,189, 40,114,151,181,209,142,223,186, 96,214, 23,208, 53, 11, 76,
+185, 85,212,197,122,167,254,252, 99,110, 26,183,109,149,193,214, 27,214, 19,118,115,222,108,117,193,129,117,218,167,137, 71,145,
+ 98,119, 50,228,238,173, 35,132,138, 56, 62,191,164,108,130,142, 84,182, 13,223,254,213, 95,198, 58,131,214,130, 79, 30,125,200,
+ 40,207,248,209, 15,127,204,116, 54,229,248,170, 96,190,178,232, 40,166,241,193,135, 93, 9,184, 63,220,101, 71, 39,152,214,112,
+ 37, 28, 75, 28,141,247,180, 30,116,224, 67,147,167, 17,121, 34,169, 86, 13, 58, 75,153, 87,150, 91,119,110,177, 42,150,236, 68,
+ 9,141,181,248, 68,112,112,184, 71, 44, 29,139, 69,201,147,139,130,210, 89,118,118,119,144, 74, 48, 72, 99,148,112,236,237,142,
+ 89,174,106,230,165,229,188,177,232, 68, 97,188, 99,190, 44,241, 14,118, 99,201, 94, 12,183, 14,134,232, 84, 17, 43, 56,186,149,
+179, 51,137, 72,163,136, 97, 34,121,112,111, 76,164, 53,181,177, 24, 15,198, 75,170,214, 4, 15,124, 41,105,219, 96,242,209,180,
+ 13,163,201,152,225,104,128,105,107,170,114,201,229,229, 9,214, 20, 52,109,203,229,180,228, 98, 22, 76,137,250,226,231, 59,246,
+ 46, 66, 98,113, 20,165, 33,166,229,230,254,152, 97,150,226, 92, 64,161,158, 29,159,226,124,136,205, 77,179, 12, 33, 5,163,241,
+ 16,229, 29,197,170,198,138, 8,211,148,248,182,197, 71, 67, 38,135,247, 80, 82,146,231, 3,162, 72, 49, 25,230,212,213,146, 56,
+137, 49,214,177, 90, 44,113, 81,140, 37, 98, 49,157,113,252,201, 7, 12,116, 8,106,137,162,144, 70, 37,213,134, 92, 41, 59, 98,
+ 38, 66, 4,130,220, 22,233, 77,118,187,243,112, 50,203,110,250,246, 91,169, 88,221,254, 90, 74,148,140,130,247,118,119,247, 40,
+138, 16,157,165,171,140, 84, 96, 32,199, 61,100,222, 49,239, 59, 41, 93,127, 31,165, 2, 49, 47,210, 49, 58, 78,136,147, 4,157,
+164,232, 52, 37,201, 50,146, 52, 67, 39, 41,145,142,137,162, 24,149,132,162,237, 5, 97, 95,175, 20, 34, 82,161, 89,232,136,115,
+200, 8,162, 40, 20,124, 17,225,157,231,242,236, 2, 47, 20,181, 9,112,107,158,103,193,202, 87, 41, 36, 17,166, 5, 45, 19,172,
+151, 28,159, 93,241,241, 39,143,121,245,193, 93,246,198, 25,206, 84, 60,126,118, 70, 52,220,195,197, 67,106, 23,136, 36,195,209,
+136,170,105,187,129,198,144, 14, 39, 84, 85,193, 78, 38, 25,199,161,161,149, 81,204,124, 62,167,173,107, 34,173,209, 73, 76,146,
+ 36, 40, 41,137,147,152, 56, 78,200,243,148, 52,137,215, 40,104,120,126, 52,197,114, 21, 28, 51,133,230,227,143, 62,102, 56, 28,
+ 50,154,140, 72,147, 8, 76,139,146,132,115, 46, 78, 66,227,134,224, 87,127,229, 87,104,154,138,179,227, 51,202,162,222,148,242,
+190,232, 10,127,125,183,238,183,253, 52,194,121, 62,159,207,121,245,254,171,188,241,198,235, 28,159, 28,243,222,123,239, 17, 39,
+ 41,119,238,222, 67,199, 9,206, 88, 62,250,240,125,238,223,189,205,179, 39,159, 34,241, 72, 9,113,151, 49,160,187, 8, 95,221,
+133, 6, 73, 33,215,177,185,215, 98,168,251, 97,199,117,193, 47,221, 74, 39,164,169, 69, 93, 12,117,119,139,212, 70,121,209,173,
+129, 66,147, 26,194,123,162,245,215, 69,248,188,147,105,246,134, 75,108,197, 97,111, 36,154, 27,249,177,232,220,248, 62,191,168,
+ 35, 62,103, 42, 22, 47,156,212, 95,154,205,126,237, 49,174, 55, 4,159, 87,208, 95,148,204,246, 69,253,199,159,191,125,238,253,
+187, 14, 41, 76,234,157,182,176,211,169,247,250, 66,119,109, 82, 15, 68,185,245,212, 30,105, 84, 96,189, 5,249,131, 7,235,130,
+ 55,112, 85, 20, 68, 66,160,165,164,105, 29,151,243,101, 64, 1, 76,195,213,229, 57,243,217, 28, 65, 8,115,240,206, 34,165,224,
+240, 96,159,253,253, 61, 18, 45,144,206, 16, 73,207,225,193, 1, 73, 28,209, 54, 5,203,233, 41,237,162,102,246,108,206,236,252,
+140, 40,242,164,131,152, 87,223,120, 72,146,142, 80,164, 84,133, 96,119,255, 46,103,151, 11,108,199,236, 21,235,247,132,223,172,
+ 22, 94,128,166,108, 19,229,182,187,192,207, 48,223, 63, 51,169,111,138,250,139, 16,152,107, 25,235, 66,210,191, 85,186, 69,230,
+250, 13,187, 22, 43,116, 82, 15,239, 5, 13,129,165,172, 35,201,237, 91,183,185,119,247, 46, 7,187, 59,248,170, 96,122,121,201,
+151,222,122,141,243,139, 83,150,203, 25, 59,227, 17,207, 30, 63,230, 7,223,255,128, 73,158,114,121, 81, 48,119,158,101,107,185,
+ 61, 25,177, 35, 66, 44,227,194, 91,158, 85, 5, 53,158, 2,135,118,130,129, 8, 19, 82,229, 12, 75, 25,118,177,123,163, 36, 4,
+ 67, 88,137,215, 9,101, 91,115,176, 59, 64, 69,142,105,211,208, 74, 77, 89,148,188,122,123,128,162,162,105, 60, 79,174, 60,143,
+206, 23,236,238,238,177, 51,204, 48,197, 18,219,212,236,236, 12,145, 2, 92, 99,200,148,197,213, 45, 17,144,197,154,129,214,200,
+198,210,122,199,180,178, 52,181,101,152, 27,226,216,115,208, 93, 15,198, 22,212,109,203,254,225, 33,217, 96, 4, 82,177, 90, 21,
+ 28, 28,222,160,172,202,206, 44,195,114,243,230, 77,100,164,130,110, 28, 75, 89, 44,152,207, 46, 48,166, 32, 75, 83,198,249, 16,
+ 87,149,196,206,242,224,112,200,157,253,148,166,168, 66, 3,235,187,169,214,123, 68, 99, 56, 28, 37,236, 12,243,144,124, 38, 20,
+198,194,116, 54, 95,239,148, 17,130,209,100, 12,198, 82, 44, 43,234,214,226,154, 10,211, 52, 76, 11,203,222,209, 3,188,247,232,
+ 36, 38,203, 82,134,131, 24,211, 84, 8, 41, 89,150, 37,182,105,209,217,152,211,203, 25,255,238, 15,126,143,221, 44, 34, 85, 16,
+ 71, 97,178,141,244,102, 50, 15, 83,247,182, 55,194, 70, 18,182,109,244, 18,174,101, 7, 88,132, 0,165, 4,206, 25,116,164, 73,
+ 98,189, 81,171, 16,138,190,236,208, 67,213,253, 28,191, 38,198,234,112,232,198,122, 93,124,251,247,125, 20,233,176, 43,215, 93,
+ 58, 96, 28,119, 83,122, 70,156,164, 68,113,130,142, 99, 84, 28,135,162,173, 20, 68,170,243,183,149, 8,185, 33,177, 6, 72, 95,
+130, 80,120,165,130,132, 76,134, 70,188, 94,149,172,150, 5,113,154, 97,157, 32, 78, 82,148, 14,150,161,193, 56, 5,118,198,187,
+228,105,196,197,229, 21, 79, 78,206,112, 2, 94,127,120,159,135, 15,142,120,251,205, 7,164,163,125, 30, 29, 79, 57,155, 87,236,
+ 31,221, 33,207, 7, 88,235, 88,174, 10,132,240,148,197,130,225,238, 33,231,231,167,220,221, 31,177, 63, 80,100,113,130,208, 41,
+ 77,211,226,156,165, 44, 75,234,170,194,180,109, 72, 25, 83,225, 57, 22, 34, 88, 60,103,105,194, 32, 31, 16,199,233, 90,119, 63,
+155, 87,184,214,225,173,231,211,199, 79, 56,188,113, 64,158,198,220,186,113,192,108,122,134,214, 26,135, 64, 71, 26,215,182,100,
+113,204, 32,205,185,115,243, 6,171,178,226,242,106, 22,194,182,214,147,224,231, 24,169,116,235, 79,107, 29,182,177,252,210, 47,
+125,147,123,119,239,242,143,255,241,127,197,227, 39, 79,104,109,144, 26,126,248,254,123,124,250,241,135,129,220,154,166,156,157,
+ 30,163, 4,221,173,111, 28,187, 92,129, 62,182,204,119,241,173,136,107,131, 71, 95,228, 69,119, 93,134, 34,222,165, 8,110,173,
+140, 34,213,249, 37,200, 77,193,142,148, 90,127,236,111,235,244, 65, 41,215,206,137, 61,178,173,186,226,223,223,119,219, 39, 37,
+ 92,143, 42,192,239,189,124,233, 51,112,195,231, 26,202,188,124, 82, 23, 47, 41, 22,215, 27,134,173,136, 68,196,181,207,229, 22,
+100,177,109,108, 35, 94,246, 74,110,237,180,253,103,194, 98,182, 37,121,159,229,196, 93,255,188,123,209,214,147,122, 7,193,111,
+ 49,224,133, 8, 19, 99,172, 35,226, 56, 10,209,125, 81, 68,172,187, 3,165, 79,172,179,126,205,126,188,188, 56,167, 44,150, 44,
+230, 11,180,210, 84,181, 9, 69,202, 54, 20,197,138, 52,137,137,227, 12, 80,212,109, 77, 26, 71, 8, 23, 12, 70,166, 87, 51,242,
+124,194,193,193, 29, 6,195, 93,178, 60, 99,181,152,130,169,176,165,163, 89, 90,246,246,115,118,246,115,110,220, 62, 34,206,134,
+ 76, 23, 13,171,210, 16,235, 9,163,201, 30, 23,151, 23,212,214,224,187,245,128, 92, 79,210,221,115, 45,215,244, 1,132,112,168,
+126, 2,223, 58,244,228,182,124,177,187, 48,251, 11, 56, 82,146, 40,146,221, 84, 37,187,238, 52, 28, 56,253,243, 19, 58, 87, 21,
+ 2, 19,186,207,163,238, 66,143,162, 64, 10, 12, 31,101,184,111,164,214, 23,175,232,166, 72, 39,100, 96,147,118, 77,216,209,225,
+ 1, 59,195,140,119,222,126,133,111,127,235,155,156, 95,156,115,117,117, 65, 42, 36,171,233,156,239,253,232,103,204, 86, 13,198,
+194,121,109, 41, 61,164, 42, 34,106, 26, 82, 28,214,195,204, 25,140,135, 88, 40,108,119,144, 87,206, 82,226,176, 74, 96,100,176,
+237, 84,214, 49, 25, 36,204,231, 21,249,120,204,233, 98,137,141, 64,197, 96,156, 97, 94, 24, 82, 5, 89,234,201, 82,141,109, 29,
+138,136,162,114,124,116,124,197,194, 88,238, 62,184, 75,170, 35, 46, 79, 47,144,214,178, 59,208,228, 90, 18,203, 62, 68, 36, 2,
+ 4,113, 12, 6, 71,150, 69, 28,238, 13, 2, 51, 89,133,169,106, 50,158,112,227,198, 1,121, 62,160,110, 45,187,251, 7,160, 20,
+141, 13,146,156, 36,209,232, 88,177,179, 51,217,188,158, 2,218,170,164,173, 42,188, 51, 84,229, 42, 28, 20,206,225,218,154,195,
+ 73,198,171,119, 14,130, 55,248,172, 64,116,196,159,200,123, 18,224,238,254,144,195, 73,206,206, 56, 39,142,130,157,238,104, 50,
+225,209, 39,143,209,157,255,126, 20,135,169,166,173, 91,102,179, 5, 77,221, 2,142,162, 44,153, 47, 91,226,124,130,140, 99,156,
+ 53, 12, 7, 41,216,150, 88, 43, 90,235,168,234, 22,103, 44, 69,235,249,111,254,233,255,155,167, 79,159,113,184,191,199,100,144,
+161, 35,209, 29,134,106, 51,137,116,236,118,213, 49,221,233,246,229,219,230, 71,253,199,222, 9, 81, 42, 21,118,237, 61,217, 78,
+200,245,185, 19,206,177,238, 49,214, 14,112,161,153,149, 29,116, 31,162,124, 59,104, 95,116,166, 49, 82, 33,186, 41, 93, 70, 49,
+ 82,107, 84,172, 81, 81, 68,148,164, 1,170,215,157,116, 45,214,235,162, 30, 88,248,155,223,161,255,253, 69,231, 39, 47,149,134,
+ 40, 56, 80,246, 97, 34,229, 98,133,107,131, 94,188,172, 27,140, 11,146,168,166,173,241, 30,110,221,190, 19, 12,146,202, 5,103,
+ 23,151,156, 95,205,104, 77,195,104,148,144,196, 30,173, 21, 98,116,131, 21, 41,232, 1,113,146,161, 35, 69,211,212,196,113,198,
+124,177, 36,141,195, 20, 94,172, 10,114, 45, 57, 26,165,184,182, 66,165, 89,224,176, 36,193,124,198, 57, 31, 8,141,214, 6,153,
+ 91,107,137,227, 56, 68,133, 70,225, 26,150, 74,145,198, 9,177,214, 32, 53,117, 93, 81,215, 13, 87, 23,151,216,186,100,111,111,
+ 72,150,107,170,186,130, 14,137,144,162, 95,117,165,188,250,234, 43,224, 28,183,143,110, 16, 9,193,201,233, 69,144,120,193,117,
+247, 44,191, 5,116, 75,209, 7,135, 2,112,121,121,197,235, 15,223,224,173, 55,222,226,252,228,132,147,167,159,208,150,115, 78,
+158,126,196,197,217, 41,121,150, 33,145,236,238,238, 82, 22, 5, 69, 89,116,158, 7, 91,245,198,187,245,227,173, 37,189,157,132,
+ 45, 24,214,116, 65, 49, 93,100,110,104, 2,194,153, 26,154,196,222,210,216,175,207,216,222,222,184,175,113,242,154, 33,219, 54,
+200,212,203,132,251,141,169,188,118,102,198,145, 10,105,109,113, 24, 50,251,226,190,222,169, 63,175, 37, 95,135,140,138,151, 77,
+235, 98,187, 18,188,116,127,254, 34,173,185, 20, 34,100, 20,119,255,109,191,193,250,212,162,205,147,202,102, 79,225,251, 2,190,
+185,255,250,141,233,183,229, 87,207,181, 1, 66, 92, 43,238,222,191,200, 55, 47,176, 25,233,204, 2,174, 21,245,206,246,207, 90,
+ 11,248, 32,105,211,161,219,143, 34,133,142,163,174,112, 69,244,215,193,134, 61,105,169,170,130,233,236,146,201,120,200,112, 48,
+228,252,244,138,186, 49,136, 72, 34, 53,196, 73,130, 49,193, 53, 46,203, 50, 34,105, 49,117, 65, 44, 61, 69, 93,144, 15, 71,140,
+247, 14,113, 2,148,114, 20,203,115,134, 3, 65, 85, 20, 88, 11, 71,183,111, 32,164, 96, 85,150, 60, 61, 62, 35,202, 71,196,131,
+ 9,141,113, 36,137,160, 46, 23, 20,101,129, 23,221, 68,176,214,138,139,117, 71,170,164, 32,146,116, 30,197, 93,167, 41, 67,214,
+111,223, 45,246,176,144,142,228, 86,193, 86, 36,177, 34,214,253, 45,132,170, 36,113,184,197,177,234, 62, 87, 36, 90,145,232,168,
+187, 41,226, 72,174, 63,198, 58, 60, 86, 28, 73,146, 88,145,198,225,190,186,235,100,131,219,156,193, 89,211,173, 17,100, 96,224,
+182, 37,135,187, 35, 92, 85,241,225, 7, 31, 48, 26,231,232,170,229, 39,223,255, 25,159,206,150, 44,188, 96, 86, 58,206,157, 39,
+209, 26,107, 77,152,138, 71, 99,170,142,153, 90,122,207,220, 57,140,135,214,123,172, 12,200,128,235, 94, 71, 39,160,109, 29,177,
+ 15,214,176,101,211, 48,216, 25,241,233,197,140,189,221, 29,110,238, 31,176,147,165, 76,167, 43, 22,133, 99,188,187,199, 56, 83,
+228, 84,104,219, 50,173, 28,159, 44, 42,126,118,114,133, 74, 99, 94,123,112, 7,105, 61,173,105, 88, 20, 53, 66, 10, 98, 21,225,
+ 45,104,237,176,190,225,246,173,140, 84,123, 60, 45,249, 40,163,168, 13, 66, 4, 19, 22,239, 21, 89,150,113,124,122, 70,213, 90,
+ 80, 17,135, 71, 71,196,113,140, 20,158,178, 44,153, 77,167, 68,145,196, 25,131,244, 14, 83,215, 72, 15,137, 78,112, 62,104,140,
+145, 48,222,233,246,162, 82, 49,189, 90, 48,208,146,221, 44,129,178, 97,172, 4,123,105,196,173,131, 1,195, 92, 17,107,201, 48,
+209, 88,111, 73,243,140,167,199,167, 88, 75, 72,145,114, 45,121,170,209, 42, 97,185,172, 16,222, 83,155,150,162,113, 24,227, 89,
+ 22, 21,147,221, 61,202,213,156,209, 32,195,152, 22, 47,228, 90, 91,123, 57,157,242,255,252,127,253, 46,171,218, 80, 89,137,245,
+130, 27,251,187, 12, 34, 31,228,116, 34, 92, 7,107,219,213,174,217, 19,114, 35,169, 92, 23,248, 45,203, 85,223,249,185, 43,165,
+214, 73, 91,170,135,209, 59,243,154, 62, 21,173,127, 12,223,125, 45, 76,223,138, 40, 14,136,156, 95, 15, 34,114,227,233,160, 58,
+136, 92, 42,100,191,111,143,162,181, 78, 94, 40,137,212,186,147,182,133, 9,221,211, 57,206,173, 35,194,131, 43,159, 16, 34,152,
+ 47, 65, 40,142, 82,133,221,186,144,204, 47, 46, 73,100, 20,224,238, 44, 70, 70,129,245,223, 90,195,141,155, 71, 65,251,220, 54,
+120,231, 56, 59, 95,112,113,185,160, 44, 86, 33,154, 89, 0, 34,230, 95,253,233,123, 28,188,242, 38, 86, 68,140,135, 3, 34, 1,
+ 90, 41, 80,193, 94, 56,236,214,106, 84, 28, 51,202,114, 30,222,220, 97,156, 41,166,171,130, 85,177, 98, 50,158, 80, 85, 53,174,
+147,178, 54, 77, 75, 89,213, 24,227,184,186,152, 81,148, 53, 85,211, 6,149,141, 16,224, 2, 65,211,135, 49, 19,165, 35,218,178,
+ 98,126,113,206,238,206,128,108,156,112,113, 53, 39, 77, 6, 8,111,209,202,179,183,183, 67,164, 53,123,123,187,236,140,134, 76,
+180,228,230,254, 14,187,163, 17, 79,159,157, 81, 54, 77,112,170,148, 93,202,221, 26,129,239,124, 53,182,248,116, 94, 8, 86,203,
+130, 95,255,214,175,241,218,253,251,252,232,207,190,195, 36,245,236, 14,194,117, 80,150, 21, 81, 20,147,166, 35,134,147, 29, 78,
+ 78, 78,240,180,235, 97,213,227,240,210,111,209,243,186,167,200,155, 80,212,157,199, 88,191, 14,200,146,235, 60,130,205,138,104,
+157, 83,208, 87,154,126, 5,185,110, 60,187,234,191,101, 71, 46,186,161,170, 91,130,118,215, 93, 55, 52,169,240, 49,142,194, 64,
+ 25,175,207,207,184, 43,234,234,122, 81,255,204,199,159, 59,125, 63,183,103,127, 41, 41,238, 5,147,252,207,209,165,191, 92, 30,
+247,115,224,247,191,128,244,173,103, 45,250, 32, 8,188, 54,169,183,207,105, 9,251, 8,197, 48,169,235,245,238, 68,119,147,195,
+ 6,210, 15,146, 3,231, 28,117, 93, 50,157, 94, 48,200, 19,154,186,101, 85, 84,136, 40, 66,167, 49,168, 16,242, 96, 93, 48,231,
+ 79, 18, 77,154, 68,184,182, 13, 5, 51, 5, 29,123,246,246, 70,236,239,143,200, 50,197,229,217, 41,229,170, 64,160,136, 68,194,
+251,239, 62,101,185,108,152, 45,174,208,131,132,201,222, 93,156,159,224,172, 65, 43,193,116,122, 73, 89,215, 88,161,240, 94,110,
+144,144,190,179, 84, 98,189,227, 81, 81,208,211,134,207,229, 90, 54,164,186, 29, 78, 20, 5,163, 29, 29, 73,146, 14,173,136,117,
+180, 70, 46,250,206,241, 90, 97,215, 42, 88,147,198, 58, 20,244,245,247,108, 16,143,117, 83,208, 55, 0,235, 70, 73, 5, 56, 12,
+ 66,214, 61, 96,141, 33,141, 53,194,135,136,213,178, 40,104,138, 42,168, 4,134, 41, 63,250,211, 63,229,114,186,196,196,146,121,
+ 27,214, 32, 18, 23,118,102,137, 98,110, 44,211,170,102,110, 12,165,247,180,157,126, 95, 69, 33,190,210,109,173,107,156,216,200,
+ 80, 76,107,208, 82, 97,140, 37,213, 41,177,212, 60, 59,189, 32, 79,115,226, 40,102,144,101,120,111, 40,150, 75,238,221,190,137,
+ 19, 37,113,214,144,226, 17, 6, 22,181,227,241, 85,201, 39,151, 51, 38,135,123, 28, 29,236,144, 38, 14,233, 13,174, 14,197,183,
+169, 91,118,247, 82,100,162,185,156,149, 44, 11,195,124,209,176, 90,121,148,116,156,157, 94, 49,155,206,112, 82,112,239,149, 87,
+137,147, 60, 24,191,212, 77,103,218, 35,193,193,217,217, 57,251,187,251,129, 8, 38,163, 53,161,203,121,143, 84,221,138, 68, 10,
+146, 52,197, 58, 71, 81, 20, 20,101,133,146, 14,165,130, 10, 97,255, 96,194,141,131, 17,194,215,196,202,146, 37, 10,233, 3,188,
+217, 24, 67,150, 5, 27,226, 40, 82,184, 62,235,221,121,156, 13,111,211,197, 98, 30, 10, 25, 17,173,151,140, 38, 59,140,242,156,
+ 60, 75,104,219, 38, 52,205,206,113,114,122,198, 7,159, 60,230,227,103, 39,172, 42,139, 84, 17,139,233, 37,119,143,246,152,228,
+ 9,186, 75,176,146, 82,109,246,234, 29,105, 78, 72,113, 77,122,219, 23,253,254,125,216,195,242,189,131,228,134,104, 23, 2, 52,
+100,151,158,230, 1,209,105,201, 3,209,174,103,208,247,198, 52,172,237, 93,251,251,171,222,221, 78,200,141,193,205,218,159, 62,
+236,224,133,220,216,191, 34,229,122, 24, 90,219, 41, 75,177, 97, 65,119, 13, 10,170,187,111, 71,234,107,234,154,229,213,140, 44,
+ 73, 41,203,138, 36, 77, 3, 91, 95, 74,210, 36, 99,114,112,192,167, 31, 61,194,182, 22,124,196, 98, 97,120,244,201, 51, 30,125,
+252, 9,109, 85,161,188,228,211,143, 79,248,238,159,127,196,215,126,233, 87,208,113, 74, 93,148, 12, 6, 25,170,115, 37, 59,187,
+184,100, 52, 24,144,166,225, 53,204, 99, 69, 84, 94, 33, 77, 73,182,179,195,222,222, 62,109,211, 82,108, 77,236, 61,175, 96,144,
+ 15, 40,203,154,198, 24,156,247, 76,167, 83, 22,139, 69,231,215,177,226,244,114,198,162,168,152, 47, 11,148,210, 44,231, 75,210,
+ 44,231,147, 39, 1,233,201,146,152, 65, 26, 35,156,101, 50, 26,144,101, 57,249, 96,200,238,206,132,157, 76, 48, 76, 20,187,227,
+ 33, 7,251, 59, 60,121,118,194,162,108,240,196, 93,193, 19,235, 90, 30, 86,139,190, 27, 70,195, 0,115,122,114,202,195, 87, 95,
+229,205,215, 31, 50,189, 60,229,244,228, 41, 89,170,137,162, 4,169, 52, 77,109,209, 58,230,224, 96,159,229, 98, 70, 89,172,214,
+138,134,126, 54,236,253, 51,172,237, 76,102,140,233, 36,124,110, 29,205,218, 79,224, 61,129,178, 47,216,155, 85, 99,255,120,242,
+185,113,124, 11,250, 94,175, 23, 58,187,224,174,217,236,149, 74, 97, 66,239,208,225,126, 50,143, 59,219,228,174, 6, 69, 74,110,
+ 36,109,127, 89,233,216,231, 69,175,254, 34,137,108,219,240,254, 95, 36, 22,213,255,130,236,247, 95,188, 29,248,249,125,198,243,
+ 13, 77,150,101, 72, 41, 41,203, 37,163,193, 14, 96,169,170,146,209, 48, 9,161, 39, 70,160,181,166,105, 27, 90,211, 34,243, 12,
+161, 99,116,156, 98,205,156, 68, 75,166,151,207, 88, 46,207, 57,216,223, 71,170,140,182, 81, 20,171, 25,153, 16,220,186,243, 42,
+109,179, 36, 25,120,222,120,243, 75,156, 79, 45,229,170,232,118, 61,253,133, 33,187,195,214,227, 4,215,248, 13, 82,244,126,217,
+161, 11,220,112,144,196,218, 34,215,251,206, 86, 87,136, 64, 58,234, 67, 44, 58,153,154,220, 34,126,244, 23,241,122, 47, 37,122,
+107,206,254,107,106,253,184, 27, 22,252, 6,218,239,191,207, 57,143, 49,158, 6,131,244, 62,216, 71,122, 79, 26, 37,220, 60, 60,
+100, 57,187, 34,114, 57,167,207, 30,243,224,214,109,138,249, 21, 63,248,209,247,241,222,176,127, 52,100, 49,109,168,219, 26, 33,
+ 36,147, 46,246,178,150,142, 10, 48,210,227,145,108, 98,223,183,152,172, 91,116,194,126, 81,100,133,167,192,227, 90, 67,174, 34,
+218,233,130,131,253, 67, 46,139, 21, 31, 60, 57, 97,127,144,115,255,246, 77,134,121, 66, 49,191,224,170,178, 12, 70,187,180,118,
+197,157,125,193, 32, 83,184, 83,195,167, 21,156,175, 12,255,250,199,143,120,117, 55,227,245,163, 29, 84,234,137, 92,137,173, 44,
+137, 4, 83,183,148,117, 75, 28,199, 12, 82, 69,154,198, 12, 6, 57, 66, 73,210, 60, 99, 48, 24, 98,132,101,182, 88,160, 84, 72,
+120, 18, 30,164, 8,123, 75, 33, 60,105,154,208, 84,213,186,144, 69, 58, 66,106, 21,156, 7,173, 9,154,106,225, 89, 44,230,157,
+209,143, 38,203, 98,138,217, 28, 33, 60,123,147, 28,169, 21, 10,139,136, 36,117, 89, 82, 44, 83,166, 40,188,240, 52,214, 48, 30,
+237, 83, 87, 37,105, 18, 81,139, 64,164, 44,138,146, 36,202,104,186, 16, 24,215, 57,113, 41, 9, 90, 4,217,152, 86,193, 17, 80,
+197,154,162, 88,241,241,147,167,252,249,207, 62,226,228, 98, 78, 58,156,160, 59, 88,251,211,147, 51,110,238,189,134,246,144, 2,
+198, 89, 4, 10,213, 21,112,107,109,135, 50,200, 46, 87, 32, 88,186,186,174, 97,145, 34,234, 98, 82, 85,183, 46,114, 93,184, 87,
+ 55, 89,119,205, 66,104,230, 85,215, 16,136,117,178,155,186, 70, 80,242, 91,228,225,235, 7, 85, 47, 73,235,215, 3,235,207,165,
+236, 52,240, 93,172,106,111,155,172,228, 90,246, 41,232,201,126, 97, 42,239,211, 12, 69,159,207,238,109,112,153, 20, 2,157,198,
+104, 99,104,170, 6,128,166,110,185,115,255, 62,197,108,129,148, 1, 97, 88,213, 13,195,241, 8,173, 35, 30,127,114,204,222,110,
+198, 56, 77,249,233, 15,223, 39,209, 57,182,110, 24,236,236, 83, 10,168,234, 10,111, 13,168,208,136, 15, 70, 67,202,114,202, 96,
+178, 75, 93, 87,232,189, 4,239, 13,151,151,151, 72,169, 24, 15, 71,236,239,239,119, 41,130,102, 61, 16,149,101,201,238,222, 30,
+ 23, 87,151, 24,235, 80, 81,140, 20, 4,115,159,198,146,101, 41,205,249, 21,198, 89, 26,107, 65, 68,252,244,167, 31, 49,222, 31,
+243,250, 27,183,144,190,166,105, 42, 90, 87, 51,159,207,145, 82,179,183,223, 32, 5, 12, 6, 49,119,212, 4,173, 32,146,142, 72,
+252, 38,255,247,127,249,239,248,240,116, 70,233,195,107, 29, 38, 89,123,109,106,119, 29,161,206, 11,207,127,251, 79,255, 9, 95,
+255,202,151,248,229, 95,253, 53, 62,120,239,199, 20,149, 97, 55, 19,172, 86, 75,146, 76,208, 52, 21, 85, 85,240,240,225, 67, 78,
+ 79,159,134,148, 60,194,115,239,187, 29,125,112,147, 13,200,109, 47, 35,179,107, 73, 89, 71,196, 92,251, 34,116,106, 30, 28,194,
+201,205,235,127, 77,250,214,101, 97,172,125, 59,122,172,161, 27, 42,122,214,123,247,239,174,141, 92,123, 27,244, 10, 16,221, 25,
+113, 73,217, 5, 16,123,241,217, 73,253,250, 78, 93,188,208, 6,246, 69, 12,118, 33, 94,126,223, 23,147,240, 94,190,123,223,232,
+247, 94,180,207,223,182,178,245, 47, 44,234, 47,139,125,221,206, 63,126, 81, 59,176,113,149,219, 4,186, 24,227,104,140,237,118,
+234,225, 77, 25, 69, 17, 73, 28,135, 73,189,155, 54,183, 39,117, 16,215, 67, 98,188,229,226,226, 28,103,234, 46,240, 33,194, 9,
+ 73, 54, 24,210, 90,139, 55,130,229,170,198, 58, 72,211,132,189,189, 29,156,113,204,103, 43,156, 49, 28, 30,222,232, 88,198, 57,
+120,197,173,155,247,185,184, 88, 50,159,150,124,245, 43, 95,230,232,104,143, 56, 22, 60,120,240, 10,251,251,183,168,154,208,186,
+ 90, 23,236, 70,151,139, 25,243,213, 2,219, 17,206,100,207,210, 84,226, 58,251,178,131,119, 2,228, 30, 72,184, 27,248,189,251,
+ 92, 9,226, 72,160, 35,129,238,160,248, 13,116,174, 58, 72, 94, 6, 70,171,222,124,174,181, 90,195,245,122,107,103,174, 35,217,
+133,147,116, 80,126, 47, 19,140, 58,146, 72, 96,234,117,217,201, 65, 26,118,184,187,203,193,206,152,213,108, 74, 91,149,232, 72,
+ 82, 21, 43,206,159, 62,229,241,167, 39,120, 37,152,215,150,171, 69, 67,227, 33, 79, 83,110,103, 9, 30, 75,233, 60,133, 3, 35,
+ 4,206, 75, 4,221,129, 44,197, 90,110,178, 33,116,208, 65,124, 42,120, 62, 11,104,133,160,116, 14, 39, 5,141,115, 28,221,187,
+205,213,124, 78, 89, 86,228,131, 12,180, 96, 48,158,112,113, 53,103,144, 12, 24, 36, 3, 80, 13,135, 7, 67, 82, 4,170,134,178,
+ 53, 84, 30, 46, 11,203,179,171, 2,161,130, 4, 74,105,129, 23, 30,231, 64, 43,141,173, 90, 48, 22,225, 61, 69,177,164,172, 86,
+ 88,223,178,172, 22, 44, 86, 11,156,179,116, 52, 66,164,240, 44,230, 87,148,229, 2,227, 90,140,173, 81,194,227,109,141,146,142,
+178, 92,208, 52,101,240, 63,183,129,113,108,141, 9, 28,146, 78, 58,228,157, 69, 11, 21, 98, 67,141,167, 92, 21,172,230, 43,138,
+101,133,105, 44,137,214,100,121, 70,156, 68,221,110, 47,102,181, 12,147,141,245,134, 52, 77, 72,147, 44, 76, 52, 54,120,233,123,
+ 33, 25, 12, 39,120, 20, 89,158,133,251, 58, 71, 89,213, 56, 20,211,101,193,191,249,131, 63,228,124, 94,224,164, 38, 78, 51,170,
+186, 66, 71, 18,211,212,220, 60,186, 73,172, 4,105, 28, 93, 35, 94,110, 27,205, 8, 37,215, 40,139,144, 98, 61,197,247,178,164,
+245, 68, 45, 55,251,240, 72,235,110, 39,222, 77,227, 29, 74, 21,166,172,160,113,143,186,199, 9,239,145,237,159,191, 77,198,219,
+178,216, 22, 98, 75,108, 21,236,147, 67, 40,226,150, 4, 84,201,181, 33,231, 38,178,186,155,137,122,187, 90,252, 90, 85, 2, 96,
+234,134,166,170,104,155, 6,103, 60, 85, 85,225,188, 39, 31, 14, 24, 76,118,184, 60, 63, 91,159,105, 42, 82,196,105,198,159,124,
+255,207,105, 91,195, 95,255, 15,126,137,193, 32, 67,107,197,178,178,188,242,198,219,236,221, 56, 2, 33,104,154,154,209,112,208,
+253, 30,125,184,146, 39,138, 19, 18, 5, 95,121,245,136,221, 97, 66, 60,154, 48, 26,141, 72,146, 4,231,108,176,135,117,225,156,
+ 76,210,132, 56, 78,214, 62, 2,190,243, 21,216,158, 32,173,247, 68, 58,102,190, 92,118,215, 85,201,147,199, 79,121,245,213,215,
+217,217, 25, 50, 26,196,216,182, 34, 86,132,189,190,142,137,227, 20,157, 36,196, 89, 26,166, 82, 21, 38,246, 97, 18,115, 99, 50,
+102,113,126,193,229,114,137, 17, 33,208,197,111,177,224,221, 86, 38, 59, 8,230,243, 25,247,239,223,227,245,135,175,114,113,118,
+198,114,190,192, 54, 53,131, 65,142,247,130, 56, 13,202,132,253,131, 3,158, 61, 59,166,174,106,132,183, 93, 77,112,157,227, 92,
+128,219,173,181, 97,213,177,150,150,109,138,180,184,230,200, 41,186,179, 51, 12, 76,194,135, 72,171,237,198,111,123, 15,188,217,
+177,247,141,227,117,226,151,128,117, 96, 81,212, 21,244,168,147, 83,171,206,173,175,103,195,191, 20,126,223, 38,202,189, 28, 78,
+231, 11, 23,234,107, 63,227,231,232,223,123,226,202,139,153,245, 98, 93, 52, 95, 56,169, 11,126,174, 77,236,243, 83,123,111, 14,
+240, 60, 81,110,147,212,102, 2,251,189, 51,172,233,119,234,113,172,215, 58,245,235, 69,253,122,140,163,119,142,166, 46, 40, 87,
+ 11, 76,219,146,164, 3,134,147, 93, 90, 15,117, 99,104,107,240,196,164,217,136,180,115,153, 59,216, 59,192, 26, 65,156, 12,184,
+121,251, 30, 73, 58,164, 42, 27,210, 56, 67, 71, 49, 31,124,240, 33, 69, 81,243,202, 43,247, 25,141, 19,238,222, 61, 34, 77, 70,
+193, 70,180, 40, 64,118, 46,114,109,205,124,126,197,213,124,134,239, 73, 44,162, 47,210,172, 25,158, 61,219,178,255,183,146,116,
+ 23,230,214,126, 72,110,164, 24,129,165,185,197,242,236, 97, 71,169, 66,177, 87, 91,123,119,181,217,191, 71, 29, 99, 55,138,250,
+239,103, 35,249, 80, 1,242,143,162,240,245,190,251, 12, 94,202,208,122,193,100, 52, 65, 1,139,203, 11,202,229,140, 44,137,240,
+166,229,236,228, 41,243,203, 41,139, 85,201, 89,105, 56, 89, 90,148, 23, 40, 31,138, 94,166, 34,166, 85, 67,131,192, 0,134,158,
+215,225,215, 74,128,151,129, 48,253,212,238, 36, 88,225,177,128,145,176,108,106,156, 51, 28,238, 12,105,203,138,229,114, 69,150,
+107,118,247,119, 40,202, 18, 97, 20,203,105,197,248,112,130,243, 5, 67,229, 25, 9, 9,141,193,120,207,194, 43, 26, 39,185, 90,
+213, 76,203, 6,226, 24,149, 38,120, 25, 19,197, 67,172,241, 44, 22, 13, 77,109, 2, 59, 91,121, 60, 6, 99, 27,164, 80, 52, 69,
+ 77,177, 88,177,156,205, 40,150, 11,218,182, 10, 50, 73, 83,211, 26,131,242, 30, 83,215, 44,103, 51,202,213,138,186, 42,105,170,
+154,213, 98,133, 20, 18, 37,161,173,235, 16,207,187, 92,134,130,107, 28,179, 89, 69, 85, 25,146, 36,172, 65,156,181, 68,145,194,
+122, 24,140,242,192,187,136, 4, 82, 40,164,140,152,207,103, 24,103,136, 99,205,100,180, 67, 83, 7, 57,157,117, 6,144, 36,201,
+ 0,165,131,212, 75, 69, 33, 94,178,108, 13,151,203,130,127,252,255,248, 39, 44,107,131,210,113, 96, 97, 75, 73,146,164,120,103,
+105,155, 22,132,228,254,237, 27,196,194, 6,194,153,138,214, 41,107,125,184,139,236,174,195, 0, 73,234, 77, 52,235, 11,224,119,
+239,253,250,190, 98,171,240,211,187,187,173,253, 51,228,150,118, 93,117, 59,211, 45,232,116, 27, 70,237, 11,122, 47, 57,146, 91,
+ 60,159,109,134,253, 26,126, 15,197,194, 91, 27,110,158,181,195,220, 6,249,220, 56, 85, 90,235, 16,214, 17, 9,137, 49, 14, 25,
+105,178,209,136, 56,205, 72,178, 12,235, 28, 85, 29,144,145,193, 48,200, 11,223,122,227, 21,254,202,111,188,195, 91,111, 61,228,
+246,157,219, 32, 20,139,162, 97,184,179,199,104,111,159,214, 89,134,131, 1,182,109,113,214, 19,199, 1, 77,212, 90, 32, 34,141,
+111, 43,190,250,224, 6, 90, 88,230,125, 70,120, 29,162, 64, 71,227, 17,163,221, 29,146, 52, 13, 67,137,119, 84,117, 69,221, 54,
+ 33,202,119, 48, 8, 73,109, 90, 17, 71, 81, 72, 32,140, 53, 66,107,230,211, 25,171,249,138,170, 44,113,214,114,116,107,143, 36,
+ 17,100,113,216, 13,143, 6,121,119,142, 10,246, 15,143,152, 21, 21,147,157, 29,164, 15,182,193,121, 18, 49, 78, 52, 55, 70, 49,
+103,103, 23, 76, 87, 21,109,103,142,217, 35,146,193, 90, 54,164, 30,122, 66, 19, 57,159,205,248, 43,191,254,235,236, 78,118,248,
+211, 63,253, 83, 38,195,148, 52,209, 68,145, 6, 33, 25, 12,135,161, 57,145,154,213, 98,138, 86, 46,156,137, 91,210, 50, 37,195,
+234,210,173,147, 43, 55,254, 29,120,223, 69, 19, 75, 18,173, 73,147,152, 44, 13,171,133, 36,214,235, 53,101, 18,199,235,218, 17,
+190,166,137,147, 40,220, 71,107, 98, 29,135, 33, 81,111,166,112,181,182,237,238,206,234,109,191,134,238, 28, 70,108,154, 72,245,
+181, 55,238,252,163,237,240,142,235,201,107,226,223, 91, 81,255,108,179,240,121,137,108,254, 11,233,207,191,232,164,254, 69, 18,
+224,124,231, 63, 78, 47,105,187, 86,212,131,164,205,190,180,168,235,206,124, 70,109,180,218,126, 99,161, 26, 32,170, 37,197,114,
+134, 53,142,170, 6, 71, 20,220,179,100,140,105, 5,117, 11, 42,210, 24,107,217,219,221, 99,152,143, 80, 50,165, 50, 30, 84,140,
+115, 1, 42, 30,142,114,210, 76,210,154, 5, 71, 55, 15,201,146, 9,210, 43, 38,195, 93, 46,206, 47,130, 53,104,101,184,113,116,
+135,203,217, 28,124,203,114,113,197,170, 44,176,221, 14, 74,138,142, 1,223, 65,221,253,197, 43,183, 58, 75,185, 38,110,200, 13,
+ 99,179, 99, 13,175,239,187, 53,201, 92, 43,250, 91, 59,250,232, 57,137,135,236, 80,129,117,243,176, 70, 11,250,199, 13, 69,189,
+135,233,251, 55, 77,211, 52,164,249, 14,222, 56,154, 98,197,163,247,127,198,238,100,200,199, 31,189,207,217,233, 51,234,170,228,
+228,233, 5,113, 62,228,227, 69,205,210,121,134, 82,147,248,160, 64, 88, 24, 67, 37,160, 21,146,186,151, 48, 10,143, 23,238,243,
+215, 70,253,250,161, 31,222,125,152, 6,113,221, 10,162,106, 72,140,225, 27,111,190, 66, 53,159, 83, 86, 37,137, 86,236,141, 39,
+156,157,156, 49, 30,143,136,227,132, 97, 62, 66,120,131,181, 43, 6,169, 68, 59, 71,217, 58,140, 3,135,166,176,150,243,178,230,
+108,217,114, 85, 26,158, 76, 75,150, 22, 84,150, 5, 91, 82,231,200, 19,141, 22, 2, 87,183,148,133, 5, 43, 41,151, 21,171,121,
+ 65, 93, 53, 33, 93, 76,202,160,117,246,130,186,172, 89, 94,206, 88,205,150, 84,203,138,170,172, 41, 87, 85, 88,205, 88,131,240,
+142,213,114,201,106,185, 36, 79,147,142,223,144, 48, 24,164,120, 90,100,231,220, 37,149,196, 57, 65, 89, 89,198,147, 1, 89,170,
+145,157, 36, 80,201,136,198,154,192,191,144,162, 91, 7,164,120, 92,167, 92, 80, 32, 34,116,156,162,162, 8,143,164,106, 90, 42,
+227,249,189,127,247, 93,222,253,240, 99,140, 15,236, 96,211, 6, 27,214, 88,107,218,214, 32,101, 68, 81, 55, 60,188,123,196,120,
+ 16,161,132, 92, 23,237, 72,117,140,223, 40, 90, 75,222,122, 72,114,219,113, 46,138,116,103,204,210,249,190, 71,113, 88, 87,116,
+147,105, 88, 5,109, 79,221,126, 51,145,119, 19,251,102,231, 46, 55, 72, 78,103,122,211,189, 89, 58,214,181,216,144,158,164,186,
+ 38,165,245,130,245,190, 21,239,176,109,139,183,174,115,167,237, 88,246, 29, 33, 88,116, 86,168,222,134, 16, 35,219,180,212,171,
+ 18,211, 26, 16,146,124, 56,162,237,214, 23,113,150,145,164, 9, 73,150, 81, 20, 43,218,166, 14,182,179, 29, 58,230,132, 69,233,
+ 4,165, 83, 22,139, 10, 84,194,193,157,187, 44,171,154, 72, 41,156, 9, 73,111, 30, 69,235, 12, 69,177, 12, 49,205, 77,201,151,
+239, 29,176, 55, 74, 25,239, 31,132,248,230, 52, 93, 15, 42,171,229, 18, 41, 4,105,150,145,231, 57,249,206,152,193,104,136,177,
+109,144, 85, 90,195,116,122, 21,164,111,132,220,111,169, 53, 82, 72,180, 16, 68, 66, 50,155, 94,113,231,222, 13,242,129, 38,142,
+ 4,206,212,104, 29,118,244,222, 11,134,163, 17,197,170, 64, 9,193,104, 50, 92,203, 13,181,130,131,157, 33,135,131,148,147,227,
+ 83,206, 86, 13, 70, 0, 62,234,106,150,223,210,175, 7, 40,123, 54,155,114,239,246, 93,190,250,165,175,240,244,241, 19,102,231,
+ 79, 72,226, 64,132, 12,205,234, 24,239, 5, 7, 7, 7, 44,103, 83, 98,229,136, 59, 2,112,239, 67, 18, 69, 29,177, 18,137, 19,
+162,155,220,123,219,216,112,189,103,137, 38, 79,117,200, 74,207, 50,134, 89, 74,158,167, 12,178,148, 44, 77, 72,179,152,180, 43,
+246, 89,150,132, 91,247,239, 60,217,106, 2,180, 70,119, 63, 79,178,221, 60,116,151,153,236, 24,246, 93,237,246, 93,163,105,189,
+ 11, 59,245, 23,249,183,255,251,180,109,253, 76, 17,126,206, 26,246,179,197,217, 93, 91, 84,191,200, 74,246,243,246,237, 47,179,
+182,253,188, 44,245,107,237,196,150,117,223, 47,180, 90,127,193,186, 65,118,221,121,154, 13,136,227,140,186,108, 67, 32, 70,212,
+ 34,164,198, 52,142,157,201, 62, 66, 85, 44,139,146,157,221, 49, 58,138, 65,104,170,122,133, 65,242,225,199, 79, 25,164, 17, 89,
+236,241,110,137, 16, 3,178,161,231,193,221, 27, 80,167, 44,151,176, 88, 8,134,163, 29, 46,167,167,212,149,229,236,120,198, 98,
+118, 73,158,245, 90, 86,215,217,101,138,142, 61, 42,131,223,250,115,174, 70,235,110,164, 35,138,136, 53,138,209, 65,212,242,229,
+ 90,255,235, 22,194,215,205, 32,174, 57,209, 93, 11,124,225, 57,169, 97,120,147,172,191,151, 0,229,230,249, 0,131, 70,196,138,
+103,143, 62,228,232, 96, 31,233, 93,103,168,114,202,124, 90,178, 90, 89,202,133,161,180, 14,131, 32,209, 9, 67, 41,185, 50, 13,
+ 75, 1, 13,146,198, 7,120,174,239,230,123,133, 76, 80, 62,189,120, 53,227,164, 71,248, 16, 89, 27, 9, 80, 14,146, 72,113,235,
+112,143,175,191,122,155, 47,191,114,159, 27,187,187,188,127,231,136,223,253,189,239, 80, 92,206,160,108, 57,186,181,139,142,225,
+241,163, 51,238,222, 60, 34, 29,239, 16, 31, 90,226,178,101,148,165,232,203,138,143,206, 27, 46,140,101,129,192, 18,216,247,171,
+ 38, 76,149,103,101, 75, 94, 54,220, 27, 15, 80, 74,211, 24,137,240,193,207,189,108, 91, 34, 21, 14,253,166,241, 36, 14,242, 97,
+ 66,150,140,113, 2,150,197,146,229,229, 12, 87, 26, 76, 21,252, 5,134,163, 8,148, 67,106,201,106,182,100,126, 57, 71,134,161,
+136,170, 40,177, 86,146, 13,146, 80,124,157, 37, 73, 36,214, 58,188,133,214, 4,111,239,217,116, 65,154, 0, 62, 33,213, 80, 20,
+117,128, 47,163, 64, 18, 91, 46, 23,228,233,168,123, 62, 55, 19,176,119,225, 61,221,180,150, 85,213,114,190, 88,241,231, 63,125,
+ 23,165, 19,106, 99, 72,117,152,112, 80,193,206, 84, 72,137, 74, 18, 22,101,205, 79,222,255,144,155,191,252, 38, 82, 71,221,164,
+ 18,109,236, 55, 5,200, 40, 48,171,123, 28, 83, 74,185,190,194,164, 80,107, 89,154, 68,173,127, 23,219,187,153,245,122,206,206,
+124,219, 58,177,182,152, 21,235,216, 84,183, 33, 13,111, 37, 56, 95, 31,128, 54,123,208, 94,133,115,205,157,179,135,226,187,201,
+182,143, 63,238, 35, 13,189,181,235, 68, 54,225, 67, 35,133, 11,129, 34, 74, 40,154,170,238, 60, 35, 4,113,102,105, 76, 75, 22,
+141, 66,163, 33, 33, 27, 13,184,157,189, 66, 57, 91, 80, 45, 11, 34, 29,209,182, 21, 85, 45,104,188,192,203,136, 52,141, 57, 95,
+ 45, 88, 45,151,236,238,238,129, 53, 84,214,128,147,196,217,128,243,171,115,146, 36, 93,175, 19, 86,101,197, 66,128,107,131,199,
+123,164, 53, 59,187,187, 56,107,169,234, 26,169, 36,199,207,158,145,164, 9,105, 26,147, 13,114,118,118,199,200,104, 31,211,182,
+232, 72,210, 84, 53,210, 0,109, 67,177,152,225,108,141, 84,158,209, 40,101, 60,202,195,107, 97, 45, 58,137,104, 10, 75, 81, 20,
+196, 81,204,104,156,224,141, 97, 24, 71, 44,230, 87, 12, 6, 9,201,112,132, 21,130, 49,129, 80,252, 87,223, 9,147,248,213, 63,
+251,183,188,123, 85, 98,187,213, 34,120,108,119,238,132,233,213, 83,181, 13,255,228,191,251,103,124,243, 43,239,240,237,111,255,
+ 53,254,175,255,231, 63,101, 52, 26, 32, 84,132,169, 91, 22,243, 25, 90,167, 32, 20,247, 31, 60, 96,117,169,112,182,197,117,233,
+109,198,134,204,246,162,168, 17, 85, 13,117,219,177,223, 93,231, 36, 39, 58, 94, 74,194, 40, 75, 25, 14, 7, 12,242, 60, 32, 22,
+ 81, 88,171, 4,141,187, 95,219,203,186, 46,196,106,157,242,215,203,229, 58,100,184,105, 26,138,178,164,138, 2, 82,212,182,110,
+147, 0,103,196,218, 89,207,246, 10,144, 46,211, 32, 10,184, 69,119, 82,247, 31,187,176, 15,255, 28, 12,254,178, 80,151,237, 41,
+253, 69, 59,244, 23, 21,112,215,127,191,247,207,177,233, 61, 10,217, 29,246, 27,226,193,245, 2,240,242,130, 43,253,117, 1,250,
+243,141,128, 23, 47, 46,252,189,127,238,181,157,120,160, 55,172, 53, 18,215, 27,137, 77,119,191,230, 31,248,231, 67, 1,187, 92,
+ 52,233, 72,243, 28,165,115, 68, 84, 49, 26, 4, 95,232,214, 57, 20, 10, 99,194,139,147,196, 17,229,114, 69, 51,217,101,229, 74,
+100, 20,113,180, 55,230,201,227, 39,120, 99, 41,234, 21,220, 72,192, 90, 98,169,153, 62,187,224, 96,148,147,140, 71, 44, 76,197,
+ 64, 75,116,154,226, 23,103,192, 5,162, 58, 3, 57, 96,181, 92, 97,141, 71, 70, 97,218,183, 42, 92,252, 17, 91,246,184, 46,120,
+ 92, 7,217, 94, 32, 67, 9, 1,194,129,144,221,107,228, 29,253, 96, 27, 26,150, 30,170,116, 72, 25, 24,162, 82, 8,112,129,108,
+231, 44,221,222, 62, 60,134, 20, 30,229,192, 11,187,158,134,214,175, 67, 39, 5,233,137,124, 65,250, 35, 49, 86, 32,163, 1, 55,
+ 14,111,241,147, 31,255,148,163,253, 29,246, 39, 41,174, 46,120,242,201, 19, 76, 93, 49,159,149,184, 70, 32, 99,205, 85,217, 34,
+128, 55,246,198,136, 69, 73,107, 60,158,136,185,107,215, 57,205,107, 83,170,245,235,221, 59,144, 57,188,112, 29, 33,185, 47, 26,
+ 10,132, 15, 16,190,128,123,147,140,111,189,113,159,119,222,120,149, 27,187,227, 32,129,241, 6,229,167,188,243,230, 33,131,252,
+ 87,249,215,223,253, 49,103,211, 2, 61, 76,240, 10,246,239,222,231,221,247, 63, 69,137,154,175,127,237, 30,122, 92,227,210,146,
+175, 14, 18,142, 38, 21,239, 63, 91,240,116, 5, 23, 22, 26,239, 49,194,118, 90, 39,199,194,194,123,211, 2, 45, 4,105, 36,200,
+ 19, 69,170, 51,118, 85, 8, 14,169,155, 22,231, 36, 67, 3, 3,167, 48,101, 69,219, 56, 22, 87, 37,203,185,193, 89, 71, 28, 69,
+ 32, 45,174, 67, 74,234,170,133, 38,164, 63,201, 36,162,114, 6, 29, 7, 79,148, 98, 86,134,164,168,214,145, 15, 50, 86,109, 73,
+154,107,242, 97,152,214,151,203,130,189,189, 49,158, 24, 39, 20,101, 83, 4,251, 83,165,214,141, 79,181, 92, 17,235, 20,161, 98,
+132,148, 56,223,144,167, 57,202, 75, 86,181,226,227, 89,193,127,246, 95,255,183,140, 4,248,182,162,168, 43, 6,233, 17, 74, 43,
+150,171,130,225, 56,101, 56, 24, 80,215, 53,249,104,200,251,207, 46,121,120, 81,240,214,221, 61,116, 20, 8,104, 50,138,131, 79,
+ 11, 97, 53,161, 58,233, 87, 39, 74,223,242,189,160,211,148,111,229, 28,116,230, 30, 30,143, 13,139,152,245,245,168, 59, 29,126,
+ 79,150, 12, 38, 52, 98,235,204,146, 32,251,218,238, 63, 67,150,245,190, 35,196,121,186,120,225,112,177,245,208,104,136,250, 36,
+144,248,250,130, 64,167,149, 18, 29, 33,202, 6,217,148, 80, 10, 99,195, 85,107,172, 35,137, 98,180, 80,172,102,115,162, 52, 65,
+ 43,181,241,161, 39,172,177,146, 52, 65, 39, 49,222, 24,218, 89,139,214, 57,117, 91,179,179, 51, 97, 60,202,120,116,118,140, 83,
+ 17,173, 11,153,230,216, 10,163,131,127,254,206,104,128,115, 26, 91, 89, 82,173, 57, 43, 10,234,170,101,160, 75,146, 44,167,170,
+106,242,225,128, 85, 85,146, 36, 41,163,241,136,187,175,188,130,177, 45,243,171, 43,102,207, 78, 16, 34, 88,193,142,198, 99, 70,
+ 59,123, 8,239,152,205,166,140, 35,133,111,198, 84,139,130,103, 10,106, 41, 65, 68, 88, 31, 81, 55, 21,122,144,211, 58, 79, 91,
+ 54,228,106, 78,178,179,139, 23, 10,167,192,182,142,101, 81, 33,149,102,144,229, 36,120, 42,233, 73,148,226,219,226, 45,202, 98,
+197,255,225,159,125,135, 39,181,193, 19, 3, 10, 41,236,230, 28,239,182,182,143, 30,127,194, 31,124,247,143,248,157,191,254, 55,
+184,251,202, 87,184,188,248,152, 27,169,100,119,119,159,106,185,160, 25,236, 97, 76,176,202, 29,169, 91, 56, 51,195,183, 21,214,
+ 6, 84,109, 89,183, 68, 17, 40,233,145,222,225,173,166,109, 67, 82,102,164, 36, 89,162, 24,100, 49,227,241,144,241,104,192,120,
+152,175,157,246, 88,175,127, 68, 40,238, 91,231,110,127, 51, 46,240,105,172,181,212, 77, 67,209,161, 41, 66,214,225,108,165,164,
+ 49,225,122,108,109,200, 87,112,141, 65, 43,133, 48,110,237,230,167,190,254,198,198, 81,238, 69,240,250,139, 12,102, 54,112,189,
+255, 92,146,220,207,131,193, 63, 15,241,252,121,246,179,127,209, 9,154,151,248,213,251, 13, 94, 30, 66, 70,186,232,213,222,120,
+166,237,188,223, 63, 11,191,135,253, 71,188, 5,251, 93, 67, 1,156,199,121,139,247,146,139,243, 75,138,178, 8,251,158, 40,200,
+ 94,234,218,178,170, 12,198,181,100,121,202,206,206,152, 68,107, 76,219,146, 37, 49,113, 20, 49,189,188, 34,142, 4,216,138, 65,
+174,144,222,226, 90, 56, 59, 89,112,117,213,112,243,193, 67, 86,101,141,105, 27,164, 16,204,166, 51, 22,203, 5,117, 85,114,126,
+121, 65, 99, 61, 6,137,113,116,242,155, 16, 80, 33, 59,200, 80, 74,185,153, 82,253, 38,213,202, 95,179,135,117,207, 57,244,185,
+107,107,139,107,100,196,160,240,236,186, 82,191, 54,106,112, 29,227,211,246, 18, 17, 31, 90, 38,199,115,174,117,189, 35,159, 21,
+ 88, 43,200,210, 17,166,181,156,158,156, 96,154,130,203,243, 99, 30,127,252, 33, 39,199,207,152, 47,106,206, 46,106,132, 21, 40,
+161,168,187, 1, 92,227,104, 90,195, 10,207,212, 57, 42, 33, 94,218, 10, 74, 31,138,118, 39, 26,238,250,223,110,157,128,101, 32,
+ 60,175,223,220,227, 63,252,173,111,241,119,191,253, 75,188,117,231,144,161,242,200,182, 4,111,131,231,181, 7,103, 28, 59, 59,
+123, 60,124,237, 21,202,114,206,244, 98, 69, 83, 73,226, 76,178,179, 63,224,217,217, 57,109, 43, 56,186,121, 19,161, 12,222,213,
+ 56,215,146, 15, 98,242, 84, 99, 26, 67,219,134,215,196, 57,133,240, 9, 30,129, 21, 22,131,163,114,142,162, 53, 44, 74,195,172,
+106, 89, 89, 71, 41, 21,141,138, 40,156,167, 17, 18,163, 52, 87,101,205,229,170,102, 94, 57,226,124,136,113, 4, 91,217,186,233,
+ 26,227,136,114, 97,144, 22,234,218,209, 52, 80,149,142, 68,128,183,129, 60, 24,117,123,186,214, 90,150,149,197, 19,194, 87,202,
+162, 37,137, 37, 89,150, 32, 4,152,182, 97, 54,155,177,191,179,135,183,134, 97,158,163, 85, 68,211,180, 32, 4,249, 96,200,170,
+ 40,216,217, 61, 0, 4, 79,159, 29,243,127,252, 63,253,167,188,251,254,199,140,119,119, 73,179,132,209, 48,167,109, 61, 58, 78,
+200, 7, 3,154,182,237,154, 75,168,170, 26, 21,197,204,166, 87,188,253,218,125,146, 40, 88,121,170, 72,175, 9,150, 74,199,107,
+130,154,120,126, 29,180, 37, 43, 90,239,215,183,228,112,162,131,197,165,220,184, 29,174,207, 7,185,165,248,232, 36,102,162,111,
+ 70,197, 70,119,124,221, 53,132,235,182,201,235,253,252, 86, 56, 84, 7,185,111, 95,143, 82,201,117,155,176,150,208,245, 9,110,
+ 81,212,145, 26,131,193, 73,164, 53,198, 89,144,130,108, 56, 88,191,247,164, 82,172, 86, 43, 78,159, 29, 35,133,100, 60, 26, 19,
+ 39, 25, 69, 89, 49,155, 45,184,186,154,113, 54, 45,240,233,132,253,163,219,180, 85,129,169,235,144,190,151,166, 72, 41, 89, 46,
+171, 64,128,139, 61, 55, 15,198,236, 14,115, 50, 25,145,229, 41, 73,158,226,241,232, 56, 34, 73, 98,156,119,204,166, 83,148, 20,
+140,199, 99, 38, 7, 7, 8, 88, 59,206, 77, 47, 47, 89,204,231, 56, 28,227,193,144, 60,205,137,210,140,101, 85, 7,111,130,179,
+ 75,178,113,198, 32, 19,100, 17, 20,117,203,106,177, 96, 24, 43, 38,147, 29,178,201, 1,214,219, 78, 19,223,224,189, 39, 75, 19,
+ 86,171, 37,249, 32, 71,120, 79, 20, 75, 14,111, 28, 32,154,134,159,126,116, 76, 73, 32,177,110, 56, 13, 91, 13,151,243, 84,171,
+130, 95,250,250, 55,185,123,235, 22,223,249,206,191, 37,207,195,170,167, 88, 53,180, 86, 48,222,221, 69,120,195,120, 16, 51,200,
+ 35, 6,185, 38,213,154, 88, 39, 72, 21,246,245,194,247,246,217,116,117,193, 16, 69,138,225, 32, 15,153, 12,147, 49, 59,227, 17,
+ 59,147,112, 27,141, 71, 12, 70, 3,242,193,128,193, 32, 15,235,138, 65, 70, 62,200,201,178,140, 52,207,200,243,192,143, 72,211,
+164,115, 42, 85,107,204,218,247, 12,249, 46, 17, 46,216,105,247,126, 40,126, 77,118, 53, 93,100,184,250,218,235, 47,103,191,191,
+136,176,246,124, 38,250, 53, 11,208, 95,208,191,253,139,134,181,252, 34, 69,253,229,172,121, 54,123,175, 95,164,168,219, 23, 23,
+245, 36,214, 36, 73, 16,252,199,113,132, 86,209,214, 78,253,250,239, 99,156, 67,120,193,229,213,148,233,213, 37, 58, 86,193,196,
+ 70,105,154,214, 81, 59,199, 96,148,161,227,136, 52, 77, 48, 77,205,106, 49, 35,141, 53,179,171, 5,109, 29, 52,216, 59,147,140,
+201, 48,195,181,158,166,240, 20, 5, 24, 50,188, 76,248,232,209,199, 68, 82, 16, 75,201,249,217, 5, 79,159, 30,131, 20,228,163,
+ 9,201, 96,196,108,185,162,237,119,174, 98,195,102,239,167,228,222,216,163,223, 25,186,245,222,153, 53, 11,244,229, 24,201,245,
+204,164,237, 52,190,207,198,186, 94, 15, 60,216, 32,254, 91,200,136,144, 97,122, 70, 33,133,230,234,106, 70, 83, 55,156,159, 62,
+163,169,150, 44,166,103,148,203, 25,243,217,146,227,147, 26,169, 52, 89, 28, 83,148, 13, 86,134,233,165, 53,142, 86,120,230,194,
+ 51, 23,159,137,128,120,238,183,239, 34, 21, 67,246,107,176, 6,197, 17, 11,199,131,189, 17,255,224, 55,190,202,223,251,171,191,
+196,173, 97, 76,108, 43,148,173,137, 68,112, 23, 20, 74, 6,211, 41, 23,252,183, 5, 16,107,199,131,123,251,180,171, 21,167,199,
+ 51, 78,206, 79,217,191,117, 64, 54, 9, 54,168,243,101,201,238,222, 33,113, 42,240,194,146,197, 17, 90, 88,118,135, 9,137,244,
+120,227,240, 70,224,136,194,206, 95, 58,144, 27,189,188, 71, 82, 75, 88,121, 88, 90,207,210, 56,230,173,229,108, 81,115,177,170,
+104,162,152,165,243,204,107,131,147, 49, 68, 49,198, 67,221, 56, 86,149, 65,199,113, 88,241, 56,137, 78, 18,148, 86,152,214,130,
+ 3,219,130, 64, 5,197,135,131, 36,143,209,177, 68, 68,144, 36, 81, 32, 85,105,201,104,148,146,196,154,186, 92,241,236,201,105,
+240, 44,136,100,144,222, 9, 79,221,148,232, 56, 38, 78,114,172,145,232, 56, 99,182,188,228, 95,255,139,255,142,199, 63,253, 8,
+ 12,156,172,106, 38, 71,135, 72, 83, 3, 81,120,175,180, 38, 56,135, 57,199, 96, 48,160,110, 26,242,241, 46,103, 23, 87,236,141,
+135,220, 60,220, 35, 18, 30,221, 21,229,224,191,174,215,133, 58,138,244,122, 79,222,107, 51,123, 38,188,236, 12,104,122,109,123,
+176,155,141, 58,253,123,180,214, 61, 59,231, 59,125, 58, 27, 45,185,216,192,239,107,131,171,107,158, 86, 27,139, 48,209, 25,104,
+109,127,237,218,217, 35,174,147,105,233, 88,241,162,107,164,232, 96, 99, 31,112,123,164, 82,152,166,165,109,218,224,145,144,231,
+200, 40,194,225,195,254,123, 43,144, 74, 9,133,105, 13,214, 24,166, 87, 51,132,144,164,249,128, 52, 27,176,152, 23,156, 79, 75,
+106,145,242,214,151,223, 65,250, 16, 63,171,162,152,198, 58, 26, 99, 80,113,130,247, 22, 45, 61, 55, 15, 38,208,148,228, 73,196,
+108,181, 2,160,109, 67,130,161,148, 50,144,126,147, 4, 41, 37,171,213,146,213, 98, 65, 62, 26, 49, 24,141, 40, 86, 43,170,170,
+ 34,207,115,108,107, 89,205,151, 52,117,205,213,108,202, 98, 89, 80, 20, 21,198, 56,226, 44, 38, 75, 96,152,105,154,214,162,148,
+ 98,146,105, 34,157,144, 79,118,195,207,136, 19,144, 34, 64,254, 81,112,221,180,192,120, 56,192, 75, 79, 28, 9,238,239,238,115,
+242,244,152,143,174,230, 52,107,212,217, 95, 43,234,194,195,106,177,224,222,221,123,188,249,218, 67, 62,250,232, 3,140,105, 88,
+ 45, 86, 44,230, 5,198,194,100,103, 23, 4, 36,137, 96,127,111, 72,162,233,148, 58, 81, 87, 30, 58,210,174,117, 52,214, 82, 53,
+ 45,117,221,160,164,100, 52, 28,132, 66, 62, 30, 49,233,138,250,100, 60,102, 48, 30,145, 13, 6, 93,176, 79, 74,156, 38,235,143,
+113,154, 4, 5, 65,154,144,164,241,186,160,247,196, 78,235, 66,142, 72,107, 66,150,122,211,134,143,182, 31,158, 58,195, 52,227,
+ 58,181,150, 53,168,175,189,113,247, 31,189, 60, 28,101, 91,175, 44,126,110, 81,255, 60, 15,247,151, 73,201, 94,148,228, 37,197,
+203,154,136,191,228,164,254,146,162,126,173, 17,176, 97,199,211,135,186, 60, 95,212,123,214,109, 31,232, 18, 38,117, 77,220,153,
+ 89,188,184, 89, 8,172, 85,129,228,252,226,140, 44, 11,100, 8,225, 32,210, 9, 45,130, 56,209,100,105,202, 32,207,169,203,146,
+ 44,137,185,113,176,143,244,146, 60, 77, 41,171, 21,163, 97, 26, 96, 70, 23,209,148,146,233,172,194, 43,205,227,167,199,216,166,
+230,254,205, 3,180, 55,152,186,198, 57, 71, 60, 24, 48,217, 59, 96,182, 44,185,154, 47,131,180, 70, 10,164,244, 29,171, 93,173,
+147,173, 16,215, 53,227,207,251, 48,110,199,229,174, 3, 89,174,197,209,190, 36, 12, 81, 60,159,211,190,113,254,195,139, 78,139,
+187,206,211,233, 14, 75,141, 20, 17, 55, 14,111,113,113, 49, 11, 18, 60, 60, 79, 31,189,207,217,179, 79, 80, 52,216,182, 70,250,
+176, 16,118, 46, 98,222, 26, 86, 56, 86,214, 35, 68, 68,237, 29, 13, 80,116, 50,180,207,187,106,188,144,184,206,186, 83, 4, 96,
+153,195, 44,230,183,191,245, 37,254,193,111,253, 50,175, 31,140, 81, 77, 65,134, 71,121,215,201, 1,117,215, 4,132,189,173, 64,
+ 7,215, 51, 28, 74, 84, 20,243,199,196, 81,197,112, 28, 51,157,151, 92,205, 91,162, 44,227,214,157,155,156,156, 94,208,212, 17,
+249, 32, 37, 77, 83,132,177, 68,190,229, 96,103,200,120,160, 25,231, 2,229, 29,109, 27,236, 64,125,183,138, 16, 34, 90,123,132,
+ 91, 60, 94,132, 74,239, 59,239,112, 11, 52,198, 49, 91,213,204,202,134,202,194,162,110,169,157,199,199, 41, 70,199, 24,165,144,
+177, 70,200,132,218, 88, 86,166,101,217, 24,100,172,145, 42,193,155, 64,248,145,145, 98, 94, 52,140, 38, 25,214,182,228, 73, 68,
+150, 4, 31,243,166, 49, 40,105, 81,194, 81, 44,151,120,219, 34, 33,144,132,178, 12, 25, 9,100, 36, 25, 12, 71,196,113, 78, 81,
+ 52, 40, 37,121,250,236, 67,142, 63,253, 9,186,108,168, 11,207,133,241,232, 81, 78,130,197,185,224,177, 30,236, 95,195, 1,106,
+173, 37,210, 17,179, 85,195,238,193, 17, 39,199, 79,153, 12, 50,246,118, 39,168, 14,214,150, 74,135,194,183, 21,226, 34, 35, 5,
+178,119, 68,148, 91,156, 13,127,205,225,146, 45,216,189,247,144,223, 86,230,172, 37, 34, 66, 96,251,221,159, 16,244,237,109,111,
+247,138,216, 50, 24,233, 25,239,221,215, 55,232,230,166,225,239, 19,199,214, 19,125,127, 31,221, 59, 82,186, 77,202,156, 8,112,
+109, 20,105, 78,143, 79,136,147, 52, 72,223,186,124,243,225,206,206, 90, 75,239, 17, 72, 25, 81, 22,171, 64, 46,109, 91,140,241,
+ 92, 94, 6,183, 55, 37, 52,151,203,154,167, 87, 43, 86, 85,203,237,163, 27, 28,236,239, 34, 85, 76,146,229,196,137,198, 11, 65,
+ 81,150, 12,243,140, 97, 28,113,180, 63, 38,194,224,132, 39, 31, 13,201, 6,249,218,116,198, 57,135, 82,129, 16, 24,199, 26,188,
+103,181, 88, 96,219,150,253,163, 35,246, 14, 14,194, 74, 70, 74,172,179, 88, 31,138,147,105, 12, 23, 87, 83,142,143, 79,137,243,
+132, 97, 22,145, 72, 75,221, 26,164, 20,236,228, 9,145,142,217,187,113,135, 59,119,110, 81, 55, 53, 85,211,160,147,132,217,114,
+193,209,237, 91,124,244,232, 17,187, 7,187,164, 90, 18,123, 67, 38,224,112,127,151, 31,191,255, 9,231,203, 58, 16,231,158,155,
+ 57,164, 16, 56,239,168,203,138,175,189,243, 14, 59,147, 9,223,253,195,127,199, 48,203,137,181,166,110, 90,146, 52,103, 56, 28,
+ 34,148,231,206,237,125,148, 12, 6, 94, 81, 71, 62,177, 93, 45,104,140,165,106, 13,101,213, 4, 52, 73, 10,198,131,156,221,241,
+136,157,241,128,201, 36, 20,246,193, 56, 60,103,186, 75,232,139,186,155,210,186,251, 92,111,110, 58,234, 72,194, 98, 29,113,109,
+218, 0,197,215,117, 75, 85, 55, 84,117, 19,138,186,219,202,117,119,118,109,132, 99,157,187, 94,212, 63, 11,195,251,207,132,113,
+ 60,191, 83, 23,226, 5, 6, 34, 95, 0,134,255,252,148,176,151, 59,205,125, 30, 10,240,153, 72,208, 45, 77,235,118,151,253, 34,
+247,186, 77, 96,137,197,174, 19,218,174,179,223,123, 2,151,238,164, 7,189,129,126, 18,235,181,164,237,249,223, 47, 68,138,186,
+ 96,104, 32, 36, 87,211, 11,132,112, 12,242, 12, 44, 33,110,178, 49, 56,231, 73,146, 12,103, 61,197,106,133,179,150,213,114,129,
+ 18, 17,145,142,153, 45,151, 24,103,104,154,150,217,108,133,179, 10,215,237,156,188, 11,110, 95,195, 68,160,133, 5,103,153, 46,
+ 86,144,100,168, 56,101,190, 44, 40,234, 38,236,231,186, 9,189,135, 27,149,138,214, 83,250, 90,126,243,188, 84,103, 45,249,218,
+112, 31,214,207,161,216, 50, 74,190,166,217,189, 62,169, 32,196, 22, 87,129, 77,250,219, 86,120,139,243,221,132,132, 70,136,152,
+241,104,151, 36, 78, 40,150, 51,126,252,231,223,163,232, 38,116,225, 60,203, 85,197,249,101,193,233,172,101, 89, 55, 92, 88, 75,
+ 33, 5, 70,132, 64, 12, 25, 73, 42,107,177,128,245,242,243,209, 29,161, 9,243,169, 39,245,142,175, 63, 56,226, 31,254,206,183,
+249,230, 43,135, 36,109,129,180, 14, 37, 68,231, 3, 45, 16, 74,135, 38, 64, 70,225,220, 23, 50,164,106, 9,129,148, 45, 74,148,
+ 44,174, 30,131, 95,160,226,154, 52, 78,152, 78, 11,170,194, 51, 25, 31,176, 51,217,227,252,242,156,214, 56,156, 9,161, 37, 73,
+172,105,235, 21, 82,181, 8, 95,177,191,175,217,223,141, 49,141,165,105, 61,222,107,188, 83, 93, 49,233,184, 40,190,215,176,250,
+206, 73,171, 51,176, 8, 76,200, 16, 60,129,160,180,134,105, 85,113, 89,150, 44,157, 97, 89, 55,168, 52, 69,101, 41,243,182,161,
+ 0, 22, 77,139,149, 10,225, 29,198, 91,172,146,120, 45, 72,179,148, 44,137, 72,165,164,173, 91,164,138,209, 17, 40,225,112,182,
+ 13,114, 27, 15,145,148,224, 45,163,241,160, 43, 58,154,209,120, 7,132,162, 88, 21,148,197,140,247,222,251, 51, 82,213,146, 3,
+139,171,134,165,133, 69, 93,179,179, 51, 38, 82, 33,137,205, 58, 71, 28, 39, 20, 69,129, 82,138, 36, 73, 67,147,214, 26,188,135,
+249,124,206,195, 87,239,147,165,113, 88, 35, 69, 27,232, 61,142,147,107,222,236, 27,200, 61, 90, 59,122,169,158, 25,184, 37,173,
+ 93, 55,169,114,147,221,208,231, 13,248,174, 8,175, 29,225, 58,207,246,245, 84, 46,187,235,122, 75, 82,212,135,181,176,157,161,
+ 32,214,105, 23, 29, 73,179, 43,244,221,180, 30, 6,130,126,242,234,245,247,106, 61,185, 75,169,104,235, 38, 64,175,157, 70,220,
+ 58,199,104,103,167,123,235,201,245,251, 55, 82,138,197,114, 65,154,100,193, 10, 53, 78, 89, 44,151,184,214,114,124, 62,231,120,
+ 86,112,118,121,197,120,144, 33, 37,212,181, 33,203, 7,228,121,198,222,254, 46, 58,142,201,146,148, 81, 22, 19, 43, 75,158, 75,
+136, 21,113,150,130, 82, 65,123,222, 37,177,233, 40,162,109, 67, 20,114, 93,215,157, 44, 78,211,148, 37, 42,138,200, 71, 35,242,
+ 60, 99,180, 59, 98,180, 51, 38, 75, 98, 92,107, 88,204, 87,156, 95, 78,137,210,152, 60, 22,196, 88,202,166,193,154,150, 97, 34,
+ 73,210,140,124,188,139, 20,150,253,131,125,242,225,144,233,108,218,161, 19, 57,117, 83,227, 20,140,210,148,196,131,163, 37, 27,
+166,164, 66,240,189,159,126,204,202,186,205, 74,102, 91, 3,142, 96, 58,159,241,246, 91,111,241,240,213, 87,249,225,247,191, 79,
+172, 37,251,187, 99, 16,160,227,140,157,221, 3, 26,211,112,243,198, 14,137, 10,129, 78,222, 11,156,181,212,109, 67,221, 24,170,
+ 38, 24, 68, 21,101, 69, 89, 85, 72, 33, 24,228, 25, 59,221, 46,125, 60, 26, 48, 24,229,100,121, 78,156,166,161,145,238, 86, 63,
+ 33, 38,248,250,231, 66,117,122,246,238,154,180, 38,248,234, 87, 85, 77, 89, 55,148,101, 77, 81,134,162,222,116, 33, 99, 97,181,
+ 27,112,248, 32,175, 11,133,254,133, 69,125,155,184,246,249,182,175,219, 83,176,120, 41, 81,238,139, 78,210,219, 69,253,101, 83,
+ 60,159, 99, 46,243,115,101,108,226,197,191,219, 53, 6,124,167, 83,183,182,247,126,247,157, 69,172,127,161,164, 45,142, 67, 12,
+235,139,224,247,237, 29,177,237, 94,128,203,203, 75,138, 98,201, 32, 13, 54,163,109,235, 89,150, 45, 66, 40, 60,138,186,106, 89,
+ 46,139,238, 32,130,186,174,200,134, 35, 44,146,195, 27,183, 65, 70, 44,150, 5, 81, 20,227,165,196,106, 65, 62, 26, 80,213, 43,
+134,131,132,233,213, 5, 94, 69,156,207,150,120,157,240,232,211,167,148, 77, 75,221,182,120, 92, 87,204, 33,234,108, 48,101,111,
+185, 41,196,245,195,174,243,168, 94, 23,235,181, 95,113,111, 82, 33,182,178, 2, 84, 39,177, 16,235,255,183,125,152,137, 53,195,
+152,107, 1, 62,215,205,132,130, 30,216,122, 65,158,237, 32,124,196,227,199, 79,120,247, 39, 63,230,242,226, 24, 33, 12,159,126,
+242, 9,171,210,240,232,211, 25,211,101,203,101,225,152, 89,104,181, 98,230, 60, 37,158,214, 65, 75, 8,101,105, 58, 71, 38,225,
+163,112,144,190,108,167, 46, 5,202, 27,118,180,228,239,252,202,151,249,251,191,241, 13,118, 35,131,106,139, 78,142,163, 59, 29,
+178,216, 2,235,187,181,133,216,124,238,112, 72,101,169, 86,151,212,229, 12,137,197,154,154, 97,230, 25,229, 9,171, 89,205,197,
+217,156,225, 48, 99,103, 63,163,109, 29, 42, 74,120,242,236,148,221,253, 27,168, 88, 99,109,203, 32,141,136,104, 72,148,229,198,
+206,144,157, 60, 11,236,116, 99,214, 86,185,194,135, 5,133,184,110,199,116,237,249, 12,245, 61,200,137,156, 12, 19,166,241,158,
+ 40,137,169,141, 97,182, 92, 82, 11, 71, 35, 5,173,146, 16,135, 32,145,210, 57,174,154,150,133,113,180, 94, 49, 30, 12,184, 58,
+155, 81, 23,150, 85,213, 32,112,220,186,117,136,192, 82, 21, 5,109,109,176,173, 65,210,146,101, 57,145, 78,209,201,128,193, 96,
+ 66, 81,172, 48,166,230,217,147, 15,144,174, 68,171,128,187,148, 69, 67,181,106,153,149, 13,141,138,216,223,221, 9, 33, 50, 74,
+ 81,148, 21,131,193, 32,196,160, 74, 65,158,196,148,171,130,210,120,146,225,152, 36,137,121,112,239,230, 90, 42, 41,187,137, 89,
+117,230, 45,219, 94,239,107,127,109,177,217,185,139, 45, 19,155,190,152,175, 39,233,109, 11, 79,217,161, 75,157,161,202,186,136,
+247,239, 3,185,109, 11,218, 77, 88,207, 79,253,215, 10,124,103, 1, 26, 76, 32,144,244, 90,122,177,134,222,173,177,235, 92,113,
+ 0, 99, 3, 68,238,141, 5, 47,152, 47, 22, 65,151, 94,148, 72, 41, 25,100, 89,152,240,197, 6,253, 82, 42,162,109, 26,154,186,
+161, 40, 74,162, 40,102, 58, 95, 80, 46, 87, 44,234,150,103, 87, 43,222,251,232, 19, 30,220,191,141,105,107, 26, 99, 41,139,138,
+ 98, 49, 71, 42,137,214, 49, 89,154, 49,204, 51,246,247, 50,118, 15, 50,198,251,187,164,195, 33,233, 32, 39,138,117,151,100, 23,
+214, 29,233, 96, 16,204,127,122,148,161, 27,124, 86,203, 37,214, 26,210,209, 40,216, 97, 75, 72, 84,132,118,146,114, 89,178, 40,
+ 43,106,107, 73,148, 39,139, 60, 78, 10,172, 53, 76,178, 24,173, 99,210,209, 14,174, 45, 41,202, 21,198,182, 28,221,190, 69,211,
+214,216,182, 37,142, 35, 78, 79, 78,217, 25,239,161,163, 8,167, 44,210, 27,246,134, 35, 30, 63, 62,225,227,211, 25,117,207,125,
+ 88, 43, 13,194, 25,108,130,223, 43,223,252,218, 55,240,198,240,225,207,126, 76,150, 42,242, 65, 70, 85, 27,146,116,132,214, 9,
+187,147,148, 36, 10,164, 56,107, 61,109,107,168,234,154,162,170, 67, 65,175, 91,138,178,166,172,106,132, 16, 12,178,148,241, 32,
+ 99, 60, 76,201,243,140, 52, 75, 73,178,148, 40,209,248,174,177, 20,124,150, 60,222,155,209,120,191, 89,253,214, 85, 77, 89,214,
+ 44, 87, 37,171,238, 86, 84, 21,101, 55,169, 27, 99, 55, 60,164,158,100,215,185, 44,254, 66, 69,253,179, 19,243,117,246,251,203,
+138,249, 47, 60,169,123,126,238, 78,253,249, 72,214,151,237,210,175,155,222,124,241,162, 30, 44, 1,251, 61,133,235, 36, 61,215,
+119,234, 61,252,254,178,162,190,153,212,219,110,183,238, 41,170, 21,197,114, 65,158,166, 36, 58,193, 26,129,136, 82, 76, 11, 82,
+165,168, 40, 33, 73, 51,100,164, 25,141,134, 12,134, 41,113, 58, 64,168, 1,113, 54,226,252,242, 18,112,100,105,204,172, 42, 16,
+121,198,178,170,120,118,252, 12,239, 13,101, 85, 82,123,137,204,134,140, 39,251,200,206,201,201, 24,211, 37, 7,133, 20, 34,169,
+ 20,146,254, 96,234,139, 53,215, 76,126,158,123, 21,175,113, 39,174,235,123,123, 56,241,185,100,196, 23,185, 3,250,205, 30,221,
+247, 16,146, 11,120,188,113, 30, 68,140,115, 2,137,102, 60, 24,241,228,241, 35,254,224,247,255, 29,195, 97, 68,237, 20,239,126,
+120, 73,227, 35, 22, 70,115,101, 97,137, 96,225, 61,166,155,152,133, 87, 24,160,149, 14,167,232, 92,227,228,231, 22,245,196, 59,
+238, 78, 50,254,147,191,245,109,126,249,213,155,228,182, 64, 57,139,148, 26,131,196,171,142, 84,133, 15,147,105,247,121,159, 92,
+231,188,195, 43,176, 24,156,171, 40, 86, 83,112, 45,194,129,179, 2,218, 22,105, 11,246,119, 98,226,196,241,248,233, 49,159, 60,
+185, 96, 52, 76, 25,142, 39, 60, 62,185, 96, 81, 89, 84,148,178, 51,158,144,233,132,213,229, 2,217,134,195,110,156,123, 14,247,
+ 19,172,179, 84, 45, 52, 46,216,246,110, 55, 24,189,145,164,151,157,102, 21,127, 61,119,218,175,135, 62,172,243, 12,242, 28,165,
+ 37, 86,120,140, 20, 24, 15,171,170,165,244,224,135, 3, 78,139,154,194,130, 5, 6,217,144,200, 43,170,162,165,105, 29, 89,170,
+ 25,143, 51, 36,142,186, 42,104, 27, 67, 93, 25,178, 84, 48,217,217, 65, 69, 3,164,204,201,242, 33,239,189,247, 46,222, 87,152,
+106, 74,222,189, 30,149,247,212,101, 67, 59,109,104,157,228, 89,211, 18, 73,207,100, 52, 98, 48, 24,144,164, 25, 89,150,145, 36,
+ 9, 81, 20,177,147,197,140,135, 67,244,112,151,171, 85, 77, 85, 44, 41,230,151,188,241,240, 65, 48,198,233, 34, 46,183,145, 34,
+ 47, 8,251,114, 17, 84, 2, 61, 4,190,137,212,220,216, 21,203,126, 42,222, 26, 78,188,115,107, 13,250,118,228,235, 38,110,120,
+195,182, 23,235, 4, 57,185, 5,189,111,116,239,125,197, 21,126,179,170,242,226,250,185,233, 59,147,170,186,109,176,198,172,127,
+158,117, 14,111, 93,247,119, 70, 52,198, 16,197,154,166,170,113,214,173,221, 45,123,157, 78,175,119,143,181,230,242,234, 10,165,
+162,144,130,231,225,242,244,140,202,120,254,205,119,191,199, 79, 62,252,144,251,119,238,176,191, 55,161,170, 91,172,245, 20,139,
+ 25,203,213,146,147,179, 83,180, 78, 73,180,226,198,126,206, 96, 32,186,252,247,173, 4, 60, 21, 28, 9,171,162,160,109,106,128,
+ 96,136, 19,199,120, 31, 92,239,178, 44, 99, 54,155, 82,153,134,193,120,136, 23, 14, 97, 12,178,113, 76,175, 22, 28,159, 93,178,
+170,107,134,169, 34,143, 5,198,121,154,186,102,119,152, 48, 24,141,184,117,239, 21,246,247,194,164,111,186,216,215,253,189, 61,
+202,213, 18,173, 20,139,171, 41, 58,203,136, 70, 3,148,179,164,194, 33, 34, 73,150,164,252,217, 15,222,231,194,184, 77,155,219,
+123, 13,200,128,148,204,102, 83,190,246,229,119,120,237,238, 93,254,228,143,126, 15,173,109, 87,212, 45,142,132,209, 96, 76,170,
+ 61, 55,246, 6, 56,219,224,172,163,110, 29,101, 29,138,120,213, 89, 57, 23, 85, 77, 81, 86, 72,130,115,229,120,152, 49, 26,164,
+228,121, 78,146, 5,195, 37,169,187, 8, 93, 1,146,141, 20,173, 87, 61,244,132,106,239,125,240, 71,105, 91,234,178,102,181, 42,
+ 88, 45, 75,138, 85,201,178,168, 88, 85, 53, 85, 93,135,130,238, 54,196,100,231, 58,141,150, 15, 36, 58,245,206,235,119,174, 69,
+175, 94, 15,116, 17,159,137, 47,101,219,156,254,218,156, 32,215,182,250,222,139,173, 13,235,154, 37,242,210, 91, 15,249,246, 42,
+ 67,249,115,246,233, 47,211,171,111,119, 63,159,151, 17,223, 67, 49, 82,108, 88, 47, 65,209,228, 67, 81, 95, 79,235,207, 77,234,
+157, 77,172,238,118,234,105, 28,135, 20, 50, 29, 12, 46, 94,180, 83,239, 25,140,166,219,213, 71,145, 98, 58,189, 2, 79,208,119,
+ 14, 71,180, 22, 34, 29,129, 80, 12,199, 99,226, 36,166,105,234,110, 93,231,152, 95,205,248,232,201,199,156,159, 60, 98,185, 92,
+ 16,105,195,238, 88,241,214,155,111,242,215,126,227, 87,249,181, 95,122,135,191,247,183,254, 58,223,252,198, 87, 24, 14, 51,140,
+128,116, 48,192, 70, 57,101,219, 48, 91, 76,193, 27, 36, 62, 24,132, 8,181, 62,216,182,237,126,251,116,187, 80,112,221, 53,168,
+ 28,191,117, 41, 62,247,156,111,103,173,111, 51,227,157,219,252, 63,107, 93,136,163,117, 93,214,113,215, 56,245,187, 33,231,194,
+ 68,124,235,214, 3, 46, 47,102, 28, 63,125,198, 31,255,201, 31, 51,159,205,240, 66,240,195,159, 29, 51, 43, 59,200,214, 58, 74,
+231,169,240, 24,194, 20,218, 19, 97, 92, 23,194,210,235,142, 55,235,132,144, 22, 37,144, 33, 34, 50,228,188,145, 8,193, 47,191,
+122,147,255,249,223,251, 45,142,134, 49, 73, 0,236, 1,137,237, 82,184,164,236,104,124,129, 30,209,177, 81, 3,153,176,117, 22,
+227, 4,214,169,224,246,102,166,180,213, 12, 5,120,235,169,170, 6,211,152, 46,115,186, 34, 77, 44, 71,251, 3,238,223,220,231,
+147, 39,167,156, 93, 92,240,198,219, 95,225, 98, 86,114, 57, 47,248,244,217,148, 69,233,120,112,239, 62,213,106,133, 55, 13,131,
+ 44, 38, 17,158,221, 97,198,173,189, 29, 34,227, 40,171, 96, 70,225,133, 15,156, 32,185, 53,137,174,189,162,251, 38, 74,108, 49,
+ 69,229, 58,156,102,119,188, 19,156,213,144,200, 46,165,172,169, 13,181,245, 44, 26,131,139, 36,181,113,204, 87, 21, 94, 39, 8,
+157,176, 59,152,176, 92, 85,224, 26,118, 38, 9, 90,120, 76,221, 18,233, 24,132, 33,201, 50,188,143, 81, 42,230,238,157, 91,184,
+118,201,236,234, 49,131, 52,236,184, 17,158,178,169,168,235,138,213,178,161, 50, 80, 26,203,210,133,247,198, 32,141, 25,164, 25,
+ 66, 72,140,135,124, 52,102, 58,155,162,227,132,166,106,113,214,177,123, 48,225, 63,251,191,252,151,124,227, 43,111,113,239,240,
+ 8,105, 93,128,252,117,104, 84, 69,183,110,113,178, 19,149, 90,191, 14,197, 8,201,108, 42,228,152,139,237, 66,189,149, 63,220,
+ 29,192, 27, 23,184, 45, 72,191,135,196,165,216, 56,145,110, 69, 59,175,175,183,109, 51,172,222, 11,197,119,187, 82,228,150,187,
+156, 8,137,108,221,227,211, 17,163,188,115, 88,179,113,184,236,211, 35,101,164,120,118,124,130, 71,146,166, 57,109,107,201,243,
+ 60, 88,144,122,183, 78,185, 84,221,153,190, 88, 46,113, 22,150,171,130,203,203, 41,171, 85, 9, 14, 62,250,240, 17, 73,146,178,
+183,183, 31, 32,248,170, 0,231,201, 7, 17,214, 54, 92, 94,206,168,171,138, 97, 46, 57, 60,200, 2, 60, 28,233,110,221, 19,172,
+120, 35,173,136,242,152,178, 44,169,150, 5,210,123,116,164,200, 39, 35, 84,162,105,218, 0,199,207,102, 83, 50, 21,119, 46,126,
+ 14,215, 84,204, 47,230,124,242,244,156,214, 90, 6,169, 34,214, 2,103, 91,218,186, 98,144, 13, 25, 77,118,120,248,250,235,100,
+131,140, 36,201,208, 58, 97, 50,153,208,214, 53,131, 60, 65, 71, 2,215, 58,202,166,101, 52, 25, 33, 59,194, 88,217,180, 40, 36,
+139,217,146,159,126,114,134, 1,156, 10,207,171,236,207, 8, 9,109, 83, 51,201,199,124,237, 75,239,112,117,118,206,197,197, 9,
+105,154,162,162,152,162,168,217, 63,216, 67,107,201,254,222, 24, 65, 11,174,161, 53,193,216,171,174,107,170,186,161,108, 12,171,
+178,162, 40, 67, 83,147,167, 89,128,222,135, 89, 55,169,119,141,105,172,215,198, 69, 98,107,168,233,189, 64,250,143,222,134,215,
+188,109, 26,170,170,162, 40, 66, 49, 95, 22, 69, 87,212, 27,234,186,193, 88,115,109,167,238,125,112,185,180,107,248,253,245,151,
+ 79,234,159, 45,220,215,139,187,120,238,223,235,251,111, 89, 29,246,111,166,141,239,204, 11,138,186,184, 94,224,175,237,108,127,
+142,164,237, 69,208,251,203, 26,130,235, 80,229, 38, 86,118, 19,237,234,215,197,204, 62, 63,169,119,217,232,155,148, 54,221, 37,
+146,169,245,110,233, 58, 9,135,181, 89,191,237,166,163, 16,130, 16,118,243,211,217, 34,236, 98,116,208, 85,206, 87, 5,101, 93,
+113,113,117,201,229,229, 5, 85, 93,178, 92, 46,168,234, 2,233, 96,231,104,143, 91, 7, 57, 55,111,222,227,224,112,192,193,110,
+202,254,222, 77,138,171, 11, 14,246,198,212,245,138,221, 27, 7,236, 29, 30,240,213,111,254, 50,183,110,221,230, 63,254,135,255,
+ 75, 94,121,237, 53, 62,254,232,125,102,211,203,144, 84,118,237, 0,219, 72,181,251,104,193,141, 9,141,251,140,105,140,223,126,
+158, 62,115,115,107, 40,168, 47,210,174, 99,111,134,228,174, 80,192,141, 11,171, 13,103,125,247,220,122,188, 11,154,253,131,195,
+187,120, 98,148,138,200, 58,137,199,157,251,175,240,198,151,190,202,183,126,245,215,248,242, 55,127,141,183,191,242, 85,246, 15,
+247,113,120,150,171, 5,198,154,112,224,118,246, 31, 78,110, 77,168,107,242,254,150, 21, 83, 55,197, 70,120, 70,145,226, 55,191,
+254, 38,255,209,111,124,157,180, 45,193, 6,197,131, 35,200,237,124,111,204, 67,104, 72, 60, 2,235,193, 56,176, 34,240, 33, 12,
+ 14,235, 34,108,171, 80,180,216,230, 10,225,151, 8, 7,214,122,106, 83,227, 8,127, 59, 40,132,243, 72, 87, 35,221,130,189,189,
+ 29,188,181, 28, 63, 61, 14,222,219, 81,204,241,217, 37,109, 71,198,210,145,102,188,123,192,229,197,146,114, 85,147, 73,201, 56,
+106,121,237,214,152,189,221, 29, 48, 53,109, 99, 54, 41,131,221, 11, 26,118,236, 91,174,144, 91, 77,122, 15,211, 59,231, 48,173,
+ 97,111, 50, 33,145, 18, 25, 76, 43,240, 54, 88,142, 90, 2,247, 34, 85,193,230,179,245,130,227,217, 28, 23, 41,198,183,142,168,
+156,224,244,120,193,252,170,226,242, 34, 52,189, 81, 44, 25, 14, 7, 56, 39,201,243,148, 36, 22, 60,123,250, 65, 48, 77,242, 30,
+132,198, 59,131, 51, 45,173,113, 20,214, 81, 20, 65, 90,247,204, 58,180,142, 56,220,217, 97,152,101,232, 36, 11,110,105, 73,130,
+206, 82,218,166,229,112, 48, 1,103, 57,157,158,179,106, 27,174, 78, 78,249,141,175,255, 18, 31,254,244,167,100,147, 1, 42, 13,
+ 4,203, 8, 29,146,232,226,224,210,168,163,112, 77, 9, 21,133,228,180,238,128, 53,157, 17,140,232,162, 92,233,200,118,190,103,
+163,119,206,250,253,254, 27,217, 5, 34,172,165,106,215,226,188, 59,182,122,199,186,239,249, 61,221,107, 67, 87,208, 55,112, 97,
+ 23,131,172, 2,252,207, 86, 68, 56, 29,140,106,140,233,114,186,101,167, 99, 14,242,174,214,132,166,179,105, 44,243,197,138, 72,
+ 71, 12,242,180, 99, 80,136, 53,122, 36,149, 12,178,206,162, 66, 8,201,233,217,148,139,139, 75, 22, 87, 51,148,208, 68,233,136,
+100, 48,100,185,156, 82,151, 69, 88, 33,217,138, 72, 43,156, 15, 70, 63, 55,246,134,220,186, 49, 10, 32,136,247, 52, 69, 69,181,
+ 92,225,189, 69,106,137, 74, 53,233,112, 64, 83,214, 36, 58,194,180, 45, 50,137,208,195,140, 56,139, 65,120,114, 29, 97, 87, 13,
+ 73,150,227,101,139,240, 13,139,139, 57,239,127,114, 78,107, 76,104,248,148,195,182, 21, 88,207,104,178,203,254,225, 33,247, 30,
+220, 69, 8,193,213,197,148,159,189,251, 62,211,171, 41,105,150, 16,199,138, 65,158, 96,140,103, 62,157,178, 55,153, 16,233,136,
+198,122,126,246,238,251,148,171,130,221,201,152,159,188,255,152,105,211, 98,132,196,163,136,186,247,179,235,164,140, 87, 23, 87,
+252,230,111,252, 22,131, 36,227,207,255,252, 7, 76, 38, 99,240,130,170, 44,217, 59, 56, 64,169,136,253,189, 29,180, 52,224,170,
+ 32,125,171, 44,117, 21,136,123, 85, 99, 88,149, 53, 69, 89,227,189, 39,207, 50, 70,163, 1,163,225,128, 44,203,200,210,140, 56,
+137, 55,150,196,244, 1, 91,158,107,122,159, 94,175,110, 29,182,181,180,117, 77, 85,133, 9,125,177, 42, 88,116, 69,189,172, 90,
+234,166, 89, 15, 68,126, 27, 13,222,178, 78,127, 97, 81,255, 5, 44,226,190,112, 94,218,207, 99,176, 95,203, 96, 23,159,255,125,
+ 95, 4,206,255,162,172,249,231, 19,219,252, 75, 38,245,182,155,212,251,162,174,227, 0,193,111, 34,239,212, 53, 34,225,166,168,
+187,110,215, 17,164, 58,214, 56,156, 19,172,138,138,178,108,153,205,195,126, 60,210, 49,117, 99,113, 94,128, 8,241,158,113,156,
+146,229, 67, 34, 52,175,127,245, 29,108,219,242, 55,255,246,127,200,239,252,253,191,207, 98,190,224,127,251,191,251,223,243,233,
+167,143,249, 91,255,131,255, 17, 71,119, 31,224,100,194,173,135,111,211, 24, 73,217, 10,246, 15,110, 50,187,186,228,221,159,254,
+136,243,211,227,181, 46, 93,108, 21, 55,216,138,170,191,150, 34,180, 41,234,107,215,163,173,143,125,193,118, 61, 17,176,155,186,
+109,183,223,177,207,221,204, 86, 54,125,107,109,144,156,173,111,150,241,120,143, 91,183, 31,144, 12,119, 66, 34, 85,156,114,116,
+235, 54, 22, 73,148,230,232,116,192,104, 56,196, 59,203,100, 56,224,238,157, 59,236,239,238, 51,159, 47, 40,202,114,253, 6,121,
+145,132, 67,118,251,231,144,216, 37,144,222,113, 99, 24,243,119,127,253, 27,124,243,193, 45,100, 83,226,156, 9, 97, 13, 34,120,
+109,123,225,215, 36,168,158,132,226,131, 56, 2,219, 49,246,173,131,214, 90,156,151, 56,235,240,118, 5,110,137,164, 5, 47,105,
+ 27, 67, 99,218, 53, 19, 90, 74,137,243, 14, 33, 3,233, 70,216,150, 65, 44,216, 31,167, 68,222, 18,235,136, 52,207, 17, 58,165,
+169, 44,243,105,205,249,180,100,114,112, 68,148,196, 52,109, 77, 26, 89, 82,109, 24, 15, 26,238,221, 24,177,151,231, 68, 54,162,
+105, 77,199,128,119, 29, 20,223,111,220,221,154, 64,215,163, 19,158,144, 64,102,140,193,182, 13, 7,147, 33,137,142,176,117,133,
+213,138,182,107,140, 18, 4,153, 80,104, 4,227,241,136,139,229,146,211,170,226,195,179, 41,199,243,146,218,198, 72, 57,224, 98,
+218,176,170, 37,195,161,102, 56, 28,226,240, 28, 29,237,179,156, 95,160, 68, 96,201, 71,145, 14,178,177,174,169,109,219,160,141,
+175, 43,199,162,114,156, 88, 79, 99, 44, 89,154,113,120,120, 20,214, 3, 2,154,178,164, 88, 44, 40,102, 51,234,162,226,217,201,
+ 41,203,186,230,198,209, 1,143,222,251,136,183, 30, 62,228,149,251, 55, 72, 6,113,136, 16,150, 42, 24,187, 8,129,151, 30, 33,
+ 20, 74,110,133,189,108,179,202, 59,132,110,163, 39,239, 96,230,206, 66,185, 15, 96, 17, 82,118, 95,223, 36,111,120,191,217,175,
+111,136,118,155,104, 86,177,101,170,116, 77, 35,210, 77,249,190,183,153, 93,107,215,253,166,239,148,162,187,190, 66, 33, 95,203,
+ 75, 17, 56, 33,136,227,152,217,116, 78, 20,133,108,123,231, 12,195,209,168, 11,164, 81,235,159,225,156, 67, 71,154,166,105, 89,
+ 44,150, 44,203,134,171,249,138,170,117, 60, 62,185, 96,120,120,147,175,253,210,183,120,118,242,140, 31,255,248,199,120, 4,139,
+229,156,198,184, 80, 64,234,154,166, 90,176, 51,202,152,140,114,218,166, 97,122,126,137,109,219,160,217,238,154,148, 72,199, 68,
+ 82, 82, 45, 87, 40,165, 48,222,162,226,160,172,137, 98,205,124,122,133, 48, 14,165, 21, 82,123,168, 27, 22,151, 43,126,246,209,
+ 83,140,179,228,153, 66, 71, 30,107,130,207,198,112, 56,230,232,230, 13, 14, 15,246, 16, 29,188, 92,148, 21,214, 11,102,243, 37,
+ 77,211,160, 84, 68,172, 83, 78,143, 79, 24, 79,198,164, 73, 66, 85, 22,148,171, 10,225, 61,113,146,114,118, 49,231,195,167,231,
+212, 66,225, 93, 63,212,249, 53,116, 82, 85, 53,175,220,123,192,221, 91, 55,249,248,163,247,112,182,237,224,113, 65,217,212, 28,
+ 30, 30,146,104,193, 40, 87,224,106,154,214, 82,213,142,166, 9, 59,245, 48,169, 55,235,162,158,165, 41,227, 65,206,104,152,145,
+103, 41, 89,150,146,164,155, 73,221,109,203, 24,217, 10,252,114, 46,188, 47,140,195,152,150,182, 14,251,244,213,178,100,177, 90,
+177,234,224,247,178,110,214,122,125,215, 55,139,215,102,210, 23, 20,245,159, 71,114,187,246,181,151,166,157,125,126,148,233, 23,
+241,101, 23, 47, 48,188,249,133,204,107,254, 2, 82,184, 23, 21,117,179, 93,140,140,187, 94,212,181, 38,214,155,164,156,104, 43,
+ 52,226,179, 22,170, 54,216,251,117,143,227,189, 36,207,134,104,157,226, 61,212, 77,203,213, 98,197,120,178,139,113,240, 43,191,
+242, 87, 56,216,191,193, 87,191,250, 53,254,193,127,255, 63,230,233,147, 99,254, 39,255,179,255, 5,113,164,185,113,235, 46,127,
+229,219,127,149,223,251, 87,191,199,127,240,219,127,135,143, 63,254, 16, 21,103,140,118,118,249,244,241, 19,118, 15,239, 48,189,
+154, 81, 27,193,206,104,194,124,122,201,187, 63,249, 17,151, 23,167,155,215, 76,200,235, 42,109,191, 97,166, 59,215,177,210,183,
+ 98, 5,221,122,250,118,107, 51,153, 96, 40,211, 21,114,107, 55,249,194,214,127,182,168, 91,183,126, 46, 91, 23,138,122,211, 61,
+ 23,206, 9,132,212,188,245,246, 87, 80, 81, 66, 89, 85,100,105,194, 48,207, 41,203,114, 93, 88,151,171, 21,145,148,148,171,144,
+ 92,167,149,226, 96,111,159,195,253, 3,116, 20,115,126,113, 30,246,143,207, 71,225,110,101, 20, 71, 64,236,225,141,163, 29,254,
+246,175,125,141,163, 76,162,155, 21,206, 27, 44, 65,182,212, 90,139,237,242,148,122,131, 28,211, 27, 62, 32,214,176,187,113, 62,
+ 56, 96,121, 48,206,225,109, 77, 36,106, 34, 89, 35, 9,127, 87,211,218, 48, 49,109, 17,181,220, 58,226,213,161,176,104, 97,145,
+174,102,156, 41,178, 68,177,183,183, 75,219,180, 56,211, 53, 25, 81,194,207, 62,121,198,217,172, 36,201, 50,116, 28,116,173,180,
+ 11,148,179,140,146,152,123, 71,135,220,220,223, 37,137, 5, 96,130, 87,124,191,142, 34, 48,167,197,246,254,189,223, 47, 10,104,
+ 27, 67,219,180,236,140,134,104, 37,105,156, 9, 57,221, 82,144, 33, 73, 61,236, 77, 38,160, 35,174,230, 75, 60, 17, 86, 4,249,
+ 92, 81, 86,104, 45,112, 2,230,141,101,148, 68,228, 89,204,112,152, 48, 28,104,112, 21,194,219, 46, 79,160,139, 57,197,227,189,
+196, 89, 69, 83, 67, 83, 90,202,178,229,204, 9, 26,235,216,219, 63,100,111,111,151,166, 88,113,121,122,194, 39, 31,125,200,163,
+ 15, 62,224,217,179,103, 28, 63,125, 70, 89, 55,236,222,184,193,141,155,183,216,223, 61,224,207,254,244,207,248, 7,127,255,191,
+135,212,157,123,161, 80, 72,165,145, 90, 35, 84,184,118,162, 72, 95, 75, 72,243,157,217,139,138,130, 74, 98,173, 15,151,172,237,
+144,215,174, 12,106,243,218,173, 35, 94,251, 32, 24,250,221,122, 39,135,148,114, 75,230,198, 38,216,101,155, 97,175,122, 35, 27,
+185,241,141,247,219,241,218, 33, 27, 1, 41,187,230,215,224, 58, 20,198,110,229,197,199,113,194,108, 58,235,200,106,129, 57,159,
+ 15, 6,235, 34,209, 19, 85,141,177, 36,113,140, 49,134,147,139, 57, 69,213, 96, 17, 60, 57,155,113, 81,212,252,143,255,147,127,
+200,223,250,187,191,131,115,150, 63,250,227, 63,230,253, 15,222,231,106, 58,103, 85, 6,242,215,249,201, 51,254,205,191,252,151,
+252,246,223,248,171, 40, 60, 77, 85,162,148, 98,180, 31,248, 58, 77, 85,135,134, 77, 71, 20,179, 25, 89,158,177,106, 74, 84,172,
+187,176,157,144,146,103,139, 26,107, 13, 58,145,248,186,102,113,177,226,167, 31, 60,161,197,145,106,143, 18, 38, 20, 85, 33,153,
+ 12, 39, 28, 30,238,179,183,187,139,114, 14,103,161,106, 12,131,193, 8,235, 61,243,249, 18,107, 29,123,187,187, 92, 94,156, 51,
+ 24,134, 0,153,213,178,160, 92, 21,220,188,121,147,209, 32,103,185,156,243,227,247, 30,227, 34, 77,217,174,219,162,160,180,233,
+138, 97,177, 92,241,215,126,243,219, 20,139, 57, 31,190,247, 30,131, 36, 97,119,103,194,170,172,184,121,243, 22,182,173,216,219,
+201,145, 88, 76,107,168, 42, 67,213,116, 59,245,237, 73,221,121,178, 36, 9, 59,245, 97,190, 46,234,113, 26,100,160, 72, 21,222,
+115,142,141,166,183, 91, 89,210,241,138,108,107, 48, 77, 67, 93, 85, 84, 69,197,114, 85,176, 88,149, 44, 87, 21,171,162,162,106,
+ 26,154, 14,153,235,109,101,183,139,122, 95,111,162,151, 21, 56,239,253,103, 10, 99,159, 82,118,237,176,124,193,196, 43, 68, 23,
+153,249, 5, 9,114,159,181,145,125,225,204,245, 66,111,250,127,191, 94,245,254,165, 9, 93,107,246,247,115, 65, 31, 47, 66, 44,
+158,143,122,237, 45, 39,165,216, 4,222, 11,161,216,217,221,231,238,189, 7, 12,134, 57,171,170,225,149,215,191,204, 31,125,247,
+123,188,246,250,155,204,231, 11,102,179, 5, 81, 52, 98, 85,150, 88,167,200,178, 49, 79,158, 62, 1, 98,154, 86, 80, 55, 45,195,
+241,144,103,199, 79,185,115,231, 22, 77, 93, 48, 28,143,112,117,129, 86,154, 98, 85, 96, 59,251,192,237,125,185,235,157,238, 58,
+ 91, 93, 33, 61,162,219,131, 95, 95, 83,132, 93,244,117,169,161,219, 34,195,247,236,226, 77, 12,166, 18,178,131,248,197,139,215,
+ 17,194,175,253,245,189, 11, 51,204,151, 30,188,142,142, 18,138,229,130,189,221, 9,243,233,148,179,233, 37, 55,142,142,144, 78,
+ 48, 93, 45, 57,152,140,184,156,206,137, 4, 36,121,222, 73, 14, 29,123,227, 49, 95,125,235, 77,226, 88,243,211,247,223,227,114,
+ 54, 11, 26,238, 45,102,152, 39, 76,109,210,195, 59,119,110,242, 43, 15,239,145,215,225,144, 41,180, 71,216, 24, 44, 91,161, 52,
+221,245,219, 49,143,187,127,117,186,104,214, 36, 21, 7, 24,161,112,109,141, 50, 75,210,212,134,184,211,174, 65, 82, 74,163, 59,
+ 40,213, 99,177,174, 69, 10,133,195,224,186,225, 76, 9, 79, 26, 11,156, 93, 97,219,130,182, 45,185, 59, 30, 82,196,158, 85,233,
+145, 89, 10,201, 33, 23,179,146, 79, 47, 90, 46,230,138, 73,230,120,243,238,125, 6, 89,132, 51, 37,101,125,201,209, 48,102, 50,
+ 28,242,229, 87, 15,120,124, 94,112,124,185,226,248,252,138, 85,229, 8, 63, 93, 5, 93,125,183,104,241,128,241,224,112, 92,174,
+106,204,147, 83,246, 39, 67,114, 98, 98,215,160,144, 36,145, 98,156, 15,200,118, 38,188,251,228,113, 64,149,157, 35, 19,154, 44,
+210, 40, 95,144,250,134, 47,191,181,203, 43,247,239,114, 56, 62,228, 75,111,190,202, 71, 31,252,128,182, 89,146, 68, 30,173, 36,
+ 74, 4,232,218, 11,143,148, 81, 55,161,118,146, 35,225,209,194,179,171, 37,151, 77,104,254,222,125,239, 3, 98, 87,161,157,103,
+152,229, 28, 29,222, 32,210, 17,251,251, 71,236,220,184,197,206,209, 17, 63,254,233, 79,121,248,165,175,240,179, 31, 52,124,255,
+221,247,121,231, 75,175, 16,171,176, 47, 55,222,161,101, 40,240, 1,105,233,214,102, 34,218,188, 63,215,171, 55,185,198,120,194,
+244,173,186,140,110,143,232,165,112,222, 7,200,190,143,215,148, 98,189,162,147,219,197,187, 63,159,252,214,154,177,227,114,160,
+212,134, 20,231, 55, 52,163, 53, 42,224, 59,200, 94, 10,188, 11,131, 67,158,231,129,231,208, 65,174,189, 13,168,148,146, 44,203,
+216,217,157,112,113,121, 73,219, 10,174,174, 2,239, 96,178, 59,193, 90, 3,182, 69,202, 16, 11,237,140,101, 50, 30,113,184,191,
+199,201,233, 5, 69,177, 98, 48,204,249,244,211, 51,206, 78, 79,121,248,240, 30,127,251,239,252, 29,190,254,245,111,112,113,122,
+202,163, 71, 31,243,228,228,132, 39,143, 31, 35,219, 18, 81,173,184,186, 90,113,235,230, 46,105,158,179,152, 94,113,254,244, 41,
+147,253,125,178,193, 8,188,167, 93, 46,137,148,162, 44, 11,132,132,186,109, 72, 71, 3,132,115,164,131, 12,147, 44,169,170, 10,
+124,220,165,167, 89,154,182, 70, 68,129,231, 17, 69, 10,111, 36, 90,118,217,238,121,190, 38, 15,226, 61,203,229,146, 40,245,148,
+101,197,120, 52, 33,142,162,192,137, 73, 98, 76,211, 2,130, 85, 81, 2, 48, 24,228,156, 29, 63,227,254,173, 61, 94,187, 53,226,
+ 86,126,139, 63,248,225,187, 52,221,107,209,111, 65,188,128,247, 63,254,128,227,139, 11, 30, 60,124,139, 63,253,206,119,194,218,
+209,181,224, 90,234,186, 34,209, 49,117,235,136,116,183, 19, 23,254, 51,174,167,225,124,117, 91, 94, 28,215, 87,147,206,187,160,
+162,233,190,223,187,109, 36,180,187,218,156,197,123, 27, 16, 98, 99,105,219,118,157, 20,218,135,137, 57,203,154,171,132,191, 30,
+241,189,253,179,163, 95, 36,140,229, 69,193, 42, 47, 50,150,233, 3,224,123,227, 1,190, 64,129,190,254, 57,215,152,245, 63, 47,
+204,229, 47,107, 78,243,252, 54, 65, 8,241, 25,147, 26,241, 60, 27,252, 57, 51,150,231,131, 97,174, 61, 55,235, 53,175, 8, 49,
+247, 93,131,160,148,226,198,141, 67,230,139, 25,111,191,253, 54,143, 30, 31,179,191,127,192,197,197, 21,247,238,191,194,241,201,
+ 15,112, 62, 34, 31,228,156,157,158,179, 51,222,225,123, 63,248, 14,166,170,136,145, 76, 47, 47, 25, 13, 50,190,247,131, 31,241,
+237,111,255, 58,190, 94, 50, 72, 19,202,171, 99,200, 14,120,252,233, 39, 68, 50,152,163,208,133, 95,108, 38, 56, 16,206,175,109,
+ 15, 63,155,208,183,213,196,188,128,155,192,115,126,253, 97,130,144, 68, 93,244,234, 70,238, 38,175,175, 34, 16, 97,191,236, 61,
+ 2,201,100, 52,224,254,253,123, 40, 33,217, 29, 13, 40,231, 23,180,229,138, 91, 7,187, 44,102,151,212,173, 37,137, 34,188,109,
+152,207,166, 72, 4,109, 93,146,101, 57,141,177,224, 28,210,121, 30,220,190,203,104, 56,230,195,143, 31,241,225, 39,143,104,172,
+217,106,182, 60, 18,193,195,123, 55,121,120,243, 8, 83, 20,148,210,224, 98, 48, 78, 18,137, 22,233,237, 58,155, 56,138, 20,180,
+ 33, 79,185, 55,215, 88,251,135, 91,183, 70, 58,188,135,210, 58,164,111, 73,109,133,214, 10, 5,216,110,130,147, 74, 32,108,119,
+104, 3, 66,152, 64,228,235,210,157,172,143,176, 34, 76,141, 66, 88, 34, 97, 16,110,142,171, 10, 38,145, 38, 31, 71,136,180, 97,
+ 52,202,185,127,231,128,227,147, 25, 74,197,120,235,248,193,123, 83,178, 20,190,252,214, 17,227, 97,206,108,118, 73,108, 13,185,
+ 18,140,110,141,120,245,104,151,233,242,128,199,103, 51, 62, 61,157, 50,171, 90,106,211,239,246, 93, 55,181, 75, 28,138, 22,199,
+180,110, 40,206,174, 24,166,154, 56,209,164,105,136,164,188,164, 97,246,244, 99,166,182,198, 37, 2,221,128,112, 45, 19,223,242,
+218, 97,196,175,188,121,196,183,190,246, 22,175, 61,124, 72, 97, 99,222,251,224,103,180,213,146, 44,238,174, 47, 28, 86,216,144,
+ 52, 37, 66, 26,152,151, 10, 25, 39, 68, 73, 66, 54,202, 73, 23, 21,183, 60, 8, 34, 78,143, 79,248,251,127,239,119,120,245,230,
+ 46, 67,173, 16,196, 8, 33,153, 47,231, 44, 86, 21, 66, 41,170,162,228,173,215, 95,199, 57,203,175,254,198,111,240,189, 31,255,
+140, 47,191,245, 6,194,139,110,103, 30,209, 26,131,142,130,102, 90,118,175,161,135, 77,163,217, 49,220,189,236,243,209,123, 91,
+152,141, 84, 64, 70, 97,186,234,137,106,219,166, 53,125,184, 81,191, 37,247,107,214,124,119,136,175, 97,125,133,112,226, 51, 10,
+144,254, 12, 88,243, 87, 92, 80,143, 56, 31, 46, 47,239, 29, 82, 69, 36, 89,142, 80, 65, 3,238,125,103,246,226, 66,113,216,217,
+153, 80, 86, 37,206,121,180,142, 57, 62, 62, 33,201, 83, 84, 36,105,171,134, 36, 77, 16, 14,180, 10,215,229,209,193, 14, 23, 7,
+187,124,244,193, 35, 18, 1, 89, 36, 57,126,252, 9, 23, 39,183,241,206, 16, 73, 73,158,102,252,218,175,252, 10, 42,141,209, 73,
+204,201,227,167,252,232,143,191,203,179,227,115,110, 30, 78, 24,236,236, 34, 35,201,124,122,197, 98, 54,131,217, 50,172, 33,177,
+100,105,130, 7, 10, 91,135, 54,216,117, 90,106,103,200,119, 38, 44, 31,207,113,182, 5,103,112,198, 80,214, 37,121, 50, 36, 73,
+ 34,188, 11, 77,246, 32,201,145, 82,146,166, 89,144,247, 17, 8,130, 73, 18, 83,181, 13,145,138, 88,206,230, 68,163, 1, 56, 23,
+188,244, 9, 57, 19,117,211,208, 90,139,113, 6, 47, 5, 81,172,184,181, 63,102,120,231, 62,231,243, 25, 63,249,248,113,112,250,
+239,206, 67, 47, 28,149,169,249, 55,127,248,111,249,143,254,230,239,112,243,246, 61,102,231,159,144,229, 17,222, 41, 86,203, 37,
+123,123,183,104, 26, 67,166,123,251,104,183,110,236,232,149, 48, 91, 14,154,155,146,176,149, 23,210,147,227, 88, 51,228, 94, 88,
+248,189,181, 56, 99,177,157,221,107,107,108, 32,105,183,129,179,178,134,220, 63, 11, 71,110,194,132,224,231, 23,245,207,155,132,
+ 95, 84,148,175,199,111,109,166,251,231,139,251,243,133,250,218,228, 45,252,181,204,244, 23, 62,254, 47,184,103,255, 34,233,110,
+219, 19,183,248,130, 51,189,223,218,109,188,124, 95, 47,174,117,119,224, 16,210, 81, 54, 5,231,151,167, 12,242,224, 98,116,124,
+252, 3, 94,127,243, 29, 62,126,124,204,120,178, 23,228, 21, 94,178,127,176,199,217,217, 41,111,222, 61,160, 88, 92,112,117,242,
+140, 73, 26,243,244,209, 71,220, 58,188,201,191,184,248,125,226, 36,161, 46,150,120,239, 88,206, 47, 57,216,185,201,217,217,146,
+ 97,150, 6,136, 7,137,247,118,141,129, 8,191,209, 54,111,192, 23,255,156, 57,126, 56,228,250, 46,244,133,207,187,236,229, 66,
+ 2,239, 21, 72,143,242,138,176,214, 12, 4,182,117, 66,149,151, 24, 47, 17, 74,224,172, 65,122,207,151,222,122, 3,103, 26,116,
+ 28,179, 90, 46, 56,216,159,176, 90,206,153, 47,231,193, 29,171, 92,146,143,198,156,159, 95, 48, 24,228, 36,177,198,251, 17,197,
+ 98, 73, 18, 39, 24, 91, 17,199, 17,198,122, 38,249,144, 55, 94,125, 13,165, 20,239,125,244, 1,198,154, 16,175,137,231,181,195,
+ 67, 14,243,140,243,249, 5, 11,229, 73,116,132,116, 26,209, 42, 18,229,137,132, 33,114,161,240, 6,105, 34,157,124,209,135,192,
+144, 8,164, 11,158,244,190, 99, 72, 89,231,104,156, 70,216,146, 52,181,193, 13,202,248, 80,247, 9,211,136,138, 52,222,128,117,
+ 33,133, 11,103,182, 36, 17, 6, 39, 4,109, 7,225,250, 72, 32,173, 71, 88,131,107, 13, 73,156,208,174, 78,209,104, 36,154,251,
+227, 12, 34,207,178, 48, 20,177,227,100,190,226,217,119,150,236, 79, 50,190,252,198, 61, 50, 97, 17,174,166, 88, 94, 16, 11,197,
+158, 20,140,111,229,252,242, 91,247, 57,155,175,120,118,118,201,229,116,201,116, 89,177,106, 44, 69,235, 48, 91, 23,180,195, 83,
+120, 71, 43, 4,133,179, 68,174, 65,182, 33,162, 21,227,209, 30,142, 98,193, 48, 81,188,243,234,136, 95,255,210, 93,222,121,235,
+ 45,110,220,124,200,201,101,205, 7, 31,125,159,197,226,140, 60, 81, 8,215, 34,108,159, 8, 72,135, 4, 5, 3, 38, 25, 41, 84,
+ 18,145,142, 6,236, 8,141,138, 52,135,171, 21, 89,165,248,254,233,156, 63,255,243, 31,242,224,230, 95, 37, 31, 78, 88,172, 12,
+ 79,159,158, 48, 28, 15,112, 58, 34,206, 98,154,186, 32, 75,198, 24, 44,231,151, 51,190,246,229,111, 80,183,130, 60, 82,232, 88,
+ 99,165, 12, 57,211,221, 36, 36, 68,180,150,161,209, 5,174,244, 9, 94, 33,178,178,251,189,100,136,174,164, 99,119,179,118,124,
+243,159,145,217,250,237,227, 98,155,167,210, 93, 55,222,153,181, 2,193,175,163, 49, 55, 42,141,254,190,178,147, 84, 72,225,214,
+252, 27,225,253,154,148, 43,132, 88, 75,251,154,166,193, 59, 11, 98, 19, 4,115,116,116,131,211,211,243,176, 30,116,142,199, 79,
+158,112,239,238,109,156,183,180, 77,211, 21, 9,143, 18,144, 72,184,181,191,195,155, 15,238,240,233,227,239,241,214, 43,247,177,
+197,130, 15,127,242, 99,110,223, 62, 34,214, 41,231,199,199, 8,231, 73, 92,198,124, 53, 35, 31, 14,121,229,225, 91,204,167,115,
+156,247, 20,179, 25,131,221, 33, 81,172, 56, 61, 62,167,174, 13,247,111,221,198, 53, 43, 76,221, 18,231, 57,210,134,226, 43,122,
+199, 51,111, 81, 81, 20,194, 79,154, 6,109, 12, 77,219, 4, 68,193, 59,172,109, 81, 42,236,170, 27,221,172, 35,118,173, 13, 69,
+125,177, 92,117,196,216, 37,227,225, 16, 25, 65, 30, 71, 96, 13,109,211,172,207, 44,183,101,227,221, 75, 53,165,179, 36,190,225,
+111,254,230,175,243,254,227,255, 42,172,208, 92,151,117, 65,120,190,255,236,135,223,231,239,254,246,223,225,181,215,223,228,247,
+ 63,254, 41,187,109, 78, 20, 15,169,202, 50,168, 65,154, 22,134,241,181,236, 19, 41,122,191, 14,121, 13,145,124, 17,198,188, 46,
+184,130,117,212,174,240,108, 18,250, 58,146,156, 91, 59,153,118, 69,189,237,110,221, 42,206, 90,187, 62,203, 55, 76, 40,177,101,
+209,249, 5, 38,245,151,197,149,126,145,168,211, 53, 60,189,229, 36,246,178,233,252, 51, 19,252,115, 59,251, 23, 53, 0,127,145,
+233,252,101, 5,125, 77, 14,123, 30, 73, 23, 27,239,243,207,112, 4, 60,159,129, 61, 94,244,183,121,191,121, 1, 5,253, 1, 34,
+186, 83,221,178, 88,204,201,210,140,197,124,206,106,177, 32,137, 99, 86,171, 21,101, 89, 34,133,100,181, 92,114,243,198, 17, 79,
+ 62,125,196,235, 55,119, 81,190,225,236,217, 39, 76,134, 57, 63,254,225, 15, 57,252,107,223,230,244,244, 18,107, 96, 54,189,194,
+185,166,115, 28,115, 44,103, 51,148, 11,198, 32,219,171, 2,255, 18,155,220, 30, 33, 89, 79,224, 91, 48, 97,255,247,250,173, 11,
+ 41, 16,130,122, 33, 98, 32,248,133, 14,182, 43,244,125,174,122, 31,101,137,192,162, 49,214, 65, 20, 49, 30,100,236, 78, 70,204,
+167, 23, 92, 25,195,222,222, 94,216, 67, 35,137,163, 32,149, 73,135,195,224,154, 21,167,156,156,156,177, 90, 45, 24,230, 3,132,
+ 16,212,109, 3, 29,113,200, 90,194,238, 84, 73, 30,190,250, 16, 29,107,222,253,217,187, 56,107,120,112,243, 22, 15, 38, 3, 90,
+ 87, 83, 43, 71,137, 67,123, 73, 92, 91, 98,111,168,165, 69, 41,223,177, 84,131,214, 55, 4,238, 72,148,181, 8,225,145, 77, 27,
+230, 56,185, 81,121, 24,235,176,222, 16,217,146,209,126, 10,174, 10,111, 97,231,183, 5, 77, 29,138, 17,225, 76,224, 40,244,146,
+ 22,101,193, 10, 31,164,126, 74,117, 6, 60,174,203,187,143, 16, 30, 6,145,192,154, 18,100, 77,219, 46,240, 78,162,180,102,252,
+230,109,158,157, 38,172, 86, 48, 24,236,242,123,223,249,144,209, 64,241,229, 55,111, 49, 24,140,112, 85,129, 45, 87,204, 46,159,
+177, 60,125,198, 96, 50,225,141, 93, 77, 51,217,165,176, 17,165,129,243, 89,201,249,108,193,162,172,104,154,150, 36,146,164, 78,
+161,107, 79, 36, 29,185, 18, 12,116,204, 80, 71,136,129,101, 56, 84,188,122,119,196, 43,247,238,113,235,224, 6,183, 14, 15,216,
+191,117,155, 63,251,240, 17, 79,166,115,116, 57, 37, 81, 14,111,204,250,192,235,255,126,185,222,103, 43,148,208,168,200, 19,231,
+ 25,101,227, 65, 9,170,203, 57,222,199,196,194,177, 90, 45, 89, 46, 11,236,206, 46,198, 7,121,102, 20, 39,100, 58, 34,201, 18,
+150,243, 25, 46, 15,129, 50,117, 83,115,114, 62,195,189,246, 10,174,147,234,201, 40,184,119,121, 23,166, 93,215,217,110, 6,168,
+ 60,236,208,125, 71,138,236, 97,245, 62, 64,197, 91,215,161,224, 98,189, 59,151, 62, 16, 28,165,148, 27,103, 69, 64,250, 14,218,
+127,206,200, 70,136, 45, 34, 84,215,244,175,225,120,239,215, 83,125,223, 89,123,215,201, 45,165, 66,168, 14, 57, 91,115,124, 66,
+ 99, 34,163, 8, 45, 4,222,152,245,225,239,187,117,218,141, 27, 55, 56, 62, 57, 37,138, 98,164,144,156,159, 95,112,120,176,191,
+ 38,251,246,219,134, 52, 86, 12,243,152, 27,251,187,188,249,250,171,204, 93,204,189,187,119,137,133,103,118,126, 78, 60, 24,178,
+191,179,195,217,201, 49, 35, 59, 97, 48, 25,211,182, 45, 34, 10,141,151,247, 48,222,219,193,123, 67,146,231,220,123,248, 26, 77,
+213, 98,235, 10,239, 97,177, 90,146, 88, 67, 58, 25,132, 21,153, 49,168, 72,161, 85, 4,141, 33, 73, 34,108,211,160,140, 13, 48,
+189, 8,102, 51,206, 74, 44,182, 75,120,244, 84,117, 29,164,125,109,139, 23,130, 69,177,226,106,182,192,186,128,252,214, 77, 13,
+ 46, 20, 62, 29, 69,100,113, 28,100,154,198,130,148,129,223,227, 45, 74,107,146, 44,227,232, 96,151,252,198, 17,227, 60,165, 92,
+ 53,244,158, 90,253, 81,118,113,113,201,187,239,191,199,131,251,247,137,243,140,186,110,208, 4,228, 96,190, 88, 96, 14,242,206,
+ 75, 94,116,150,192,178, 35, 93,138,142, 47,242, 25, 28,119, 99, 7,117,125,225,189, 46,250,219, 81,215,189,106,200,154,237,130,
+110, 3,105,110, 93,212,221,186, 78,189,216,146,123,243,239,232,139, 58,191,109,195,224, 61,124,203, 11, 32,113,177, 69, 76,186,
+166,105,247,108,197,169,242,194,157,253, 54, 61, 63,232,213,197, 90, 63,187,173, 5,253,188,232,213,207, 51,191,241,226,197,223,
+217,203,185,232,211,119,156,219, 42,210,174,139, 78,164, 43,150, 91, 28, 3, 33,122, 48,230,165,127,139, 16, 2,215,191,121,197,
+ 38, 30, 86, 10, 9,182,165,169,107,202, 85,193,211,143, 31, 49,201, 19, 86,203, 75,156,111,152,207, 47, 56,216, 25,113,118,242,
+ 9, 7,163,155,252,236,131,255, 47, 85,253, 14, 41,158,199,143, 62, 98, 48, 28,112,242,248, 19,174,102,223,162,188,188, 98,249,
+244, 9, 77, 49,133,213,105,144,121,181, 37,170,158,209, 10, 75, 83,214, 33,209, 71,117, 69,187,143,146,220,138,109,124,222,116,
+ 72, 73,191, 49,148, 17, 27, 66, 93, 56,168,196,218, 52, 70,116, 65, 25, 10,137, 70, 16, 17, 58, 88, 37, 21, 74, 40,116, 7, 91,
+ 43, 41,187,162, 30,220,236,172,243,140, 7, 49,245,252,140,129,214, 76, 43,139,109, 29,151,103,231, 28,221, 56,164, 44, 11,234,
+170, 64, 71,146,197,213, 5,243,229,130, 76,199,164,122, 64,107, 44, 85,211, 96,157, 71,201, 16, 4, 18, 71, 10, 99,131, 72, 93,
+171,132, 7,119, 30,208, 46, 87, 92, 93,158,176, 63,212,172,204,170, 27, 71,195,225, 44,112, 88, 97,176, 17,120, 37,240,145,192,
+ 9, 27, 14,116,103, 17,222,160,108,180,158,218,193, 62,151,246,183,185,166,134, 56, 38,145, 68,168,240,220, 40, 17, 97,188,197,
+ 71, 96,171,118,157,235,173,132, 70, 58,137,112,193, 96,169,238, 7, 54,239,193,182,161,121,232, 44,195,109,219,160,132,198,137,
+ 8, 17, 37, 24,231,186, 92, 97,137,198,227,150,167,220, 31,198,136,113,130,136, 29, 55, 14, 94,227, 71, 31, 61,227,191,249,131,
+159,241,246, 43,135,164,206,176, 59,136,153,236,238,147, 68,193, 53,207, 90, 71, 83,172,216,207, 34,108, 36, 24,103,150, 91, 34,
+194,140, 38,148, 85, 96,233, 71, 64, 18, 57,178,200,145, 68, 53,251, 59, 57,131, 76, 51, 24,230,220,188,117,192,120,146,147,100,
+251, 72,189,131, 31, 30,242,232,233, 25,167,159,126, 8,205,130,178,184, 36,157,140, 66,177,140,100, 8,254, 80,225, 26,178, 62,
+188, 86, 1,100,247,228, 73, 76,107, 20,205, 32,162,172, 64, 69, 51,204,170, 96,146,104,166, 39,103, 92, 29, 79,185,127,120, 27,
+225,107, 4, 21, 24, 24,231, 57,190,109, 72,117,196,106, 89,176,179,191, 79, 18, 55,204,202,150,147,249,146, 52,206,137, 37, 68,
+174, 5, 37,113,113, 26,136,110,184, 96,197,185,245,250, 41, 25,225, 59,221,250,218,104, 70, 8, 84,164, 59, 69, 71,192,116, 69,
+159, 85,237,183,172, 96,251,179,161, 91, 21,246,252,141, 30, 82,239,237,164,125,159,124,232, 2,119,162, 71, 9,144,178,243, 82,
+232,179, 46, 66,211,128, 20,200, 36,134,214,116, 69, 45, 52, 71,189,221,172,148, 2, 21, 71,152,214, 32, 68,248,221, 28, 30,169,
+ 20,119,238,221,230,244,236, 28, 37, 34,202,162, 97, 54, 43,200,243,172, 35,246,129,140,163,255, 31,107,231,217, 35, 89,146, 94,
+231, 39,204, 53,233,203,118, 87,251,158,153,229,206, 82, 67,129, 2, 41,174, 0,126, 89,254, 0, 9,144,126,182, 8,154,221, 89,
+106,199,187,158, 54,213,229,211, 93, 27, 70, 31, 34,238,205,204,106, 55, 43,237, 0, 5,244, 20,186,203,100,221,138,120,205, 57,
+207, 33, 69, 50, 28, 85,140,167, 67, 14, 78,142, 57,218,123,132, 28, 14, 40,150,151,248, 85,205,129, 78, 88,173,231, 40,237,104,
+138, 18, 45, 53,214,120,246,166, 99,178,196,209,214, 45, 73,166, 65,196, 66, 69, 75,146, 73, 78, 50, 74,113,237, 0,125, 48,237,
+139,120, 76,139, 18, 18, 95, 53, 65, 29,230, 27,132,111,208, 13,216,198,115,189, 88,178, 46, 86,204,102, 99, 70,217,128,170, 89,
+ 96,189, 64,165, 25,251, 7, 7, 97,215,236, 12, 22,201,197,197, 53, 6,133, 74,242, 32, 24,116, 14,169,160,105, 67,129,147, 9,
+135,114,109, 88,109, 38, 41, 94, 10,108, 83, 65, 85,179,242,154, 86, 42,102,153,226,175, 30,158,112,254,213,243,240,123,142, 11,
+241,184, 78, 96,156,225,223, 62,255, 87, 62,249,239,255,131,147,135,159,114,245,243,215,204, 38, 5,215, 55, 23,228,147,156, 85,
+ 49, 4, 63,140,182, 70, 13, 50, 32, 94,149, 16,104, 33,208,194,247,206,162,224, 47, 17,193,238,186,109, 43,101, 51,189,243,236,
+ 90,133,165,143,171, 42, 31, 18,223,108, 15, 60,139, 34, 93,103, 99,200, 81,231,101,241,111, 52,146,219,247,154,254,165,227,235,
+219, 59,117,239,119, 7, 13,239,203, 78,191,189, 23,247,189,134,233,255, 95,228,246,151,218,167,223, 14, 45,233,157,132, 91,222,
+236,247,141,226,111,119,234,239, 10,200,145,114,183, 0,112,214, 5, 10, 92, 81,113,116,112,196,197,217,107, 38,163, 1,215, 23,
+231,140,135, 3,230, 55,151,220,125,244,132,114,189,228,250,250,156, 44, 81,156,190,122,198,253, 59, 39,156,190,252,137,249,229,
+ 37, 26,199,247, 95,126,129,175, 43,174,127,254, 30, 95,175, 16,245,154,166, 42,177,150, 88,213,111, 56,225,155,239,211,191,231,
+245, 20, 59,180,185,174,211,238,172, 92,206,197, 3,138,160,238, 15,220, 30,143, 87,126,131,123,239,244,214,221,222,144, 77,146,
+159, 82, 2, 83,175, 81,126,134,173, 27, 18,160, 92,205,153,237, 77,105,202,146,155,171,107,148, 78, 89,175,214, 24, 27,112,164,
+206, 85, 28,223,185,203,213,245, 77,232,194,132,196,251,224,111, 22, 66, 81, 46,214,225, 82,140, 35,173, 39,143, 31, 99,235, 53,
+ 69, 81, 34,124,136, 14, 13,236,116,139, 54,161, 51, 40, 68,131,214,157,189,184,139, 91, 13,157,181, 82, 46, 6,125,185, 29, 26,
+225,142,152, 84, 38, 28,230, 97,111, 41,164,198,118,101,158, 8, 74, 91, 31, 49,111,225, 53,151, 72,153, 32,101,139, 84, 33, 28,
+198,251, 77, 84,157,113,174,127, 70,124,204,212, 14, 95,115, 44,162,226,170, 68, 75,133, 16, 22,111, 75,164,183, 40,175,200, 82,
+201, 63,252,230, 33,147, 92, 34,244,128,155, 69,201,179,159,151,224, 44,199,211,140,163, 81,194,131,253, 17,123,195, 28, 47, 18,
+ 28,208, 82,224,189, 5,229,152, 78, 4, 16, 72, 85,169,134, 68, 89,198,131,148,201, 56,101,111, 54,227,254,253,251, 76,166, 51,
+ 90,227, 73,210, 9, 94, 40,190,251,241, 75,170,245, 53,216, 37,195,180, 69,232,113,188,124,130,224, 76,117,163,202,142,199,174,
+ 18, 16, 10,229, 19,132,213,100,153, 38,111, 37,217,176,101,124,247, 16,245,172, 38,183,142,124, 24,232,121,235,170,164,172,215,
+172,150, 11, 70,119,198,164,105, 74, 85,213,100, 89, 32,206, 57, 23,200,105, 66, 42,126,248,249, 37,247,143,255,154,134,240,179,
+208, 74, 98,125,139,240,250,205,137, 98, 7,143,233, 85,237, 27, 10, 29,221, 51, 42, 4,214,155,254,176, 18, 91,222,243,119,165,
+ 73,110,176,195,113, 57,222,235,130, 58,130,162,221,141, 38, 20, 98, 11,231, 33,250,173, 76, 80,234,107,100, 95, 56,135,202, 58,
+ 16, 19,227,199,143,193, 82,200, 96, 77, 28,140,134,220,149,119,120,241,243, 43,188,247,188,124,249,138,227,227, 67,246, 15, 14,
+ 34, 27,220, 33,132,103, 52, 30,161,179,156,241,116,159,209,221,187, 60,126,252,148,139, 83,137,169,214, 52,206, 51,217,219,227,
+234,250, 18, 33, 4, 55,151, 87, 28, 28, 28,113,115,125,201,157, 7, 67,202,186,100,224, 71,136, 68,134,108,129,173,213,163, 16,
+130, 52,203, 67,224,114, 20,184, 73,209, 77, 50, 60,222, 88,108,107,208, 73, 70,213, 86,156, 95, 92,208, 52, 13,206, 26, 4, 81,
+131,224, 61, 90, 4, 34,156, 49, 13,206,180,148,141,165,181, 6,148, 98,177,152,179,184, 58,103,156, 73, 82,173,169,235, 10,103,
+108, 88, 87, 52, 13, 89,146, 80, 52, 21,137, 82, 76, 6, 67, 26, 19,108,199,179,201, 24, 83, 87,252,227,223,255, 23,254,227,199,
+ 83,230, 85, 29, 9,147, 61,144,156, 47,190,250,130,197, 63,253, 19, 39, 39, 39, 60,255,250,143,232,196, 50, 73, 20, 77, 93,115,
+117,125, 67,243,224, 24,239, 69, 23,252, 23,169,154, 50,230,104,108, 66,131,250,181,249,123,118,182,254, 45, 19,223,221,168,235,
+ 24,165,106, 67,215,110,141,197,110,197, 91,127,232, 63,253,161, 49,250,251, 20,231,191, 68,161,190, 43, 16,217,126,200,253, 95,
+ 72,177,206, 95,236,227,236,196, 33,238,248, 0,253, 95,228,107, 20,183,118, 48, 97,252,100, 41,214, 5,179,241,132, 97,150,240,
+211,203,103, 28,156, 60,228,230,234,146, 71,247,159,242,252,187,239,120,122,231,144,225, 48,163, 88,223,176, 55,155,112,113,241,
+130, 59,251, 83, 92,187,230,250,244, 5,163, 68,115,254,252, 57,162,109,120,249,221,215, 20,151,175,176,179, 67,202,170,192, 20,
+ 77,175,118, 15,138, 99,191,133,171,220, 21, 36,190,115,213, 17,167, 38,155, 46, 94, 6,187,151,148,120,103,250, 7,209, 56,131,
+178, 18, 47,193, 57, 17,223,108,188,220,229,142,232, 80, 74, 79, 91,174, 41, 22,151, 20,203, 5,249, 96,130, 18, 83,234, 34,120,
+ 81,199,147, 25,243,197, 10, 17, 73,125,121,146, 49,153, 78,169,170,130,182,174, 66, 20,165,177, 8,149,144,102, 57,109, 99, 2,
+ 2, 87, 64,150,104, 4,142, 84, 13,152,205,102, 92,158,189, 38, 79, 20,180, 6,161, 4,173,105,144, 74, 4,101,176,119,164, 73,
+160,176, 73, 17,194, 48,148,148,224,235, 48, 86,147, 30, 41, 93,159, 57,191, 1,125,138, 24, 69,105,248,245, 71,247,208, 82, 96,
+ 35,173,174, 43,106, 36, 14, 37,125,111, 11,236,236, 85,170,213,241, 99, 5,216, 77,247,172,133,139, 60,142,136,165, 8, 10,225,
+232,201,237, 10, 76, 25,166,213, 33,239, 28,144,210,163,125, 13, 86,144,139,150,223,126,114, 68,105, 20,167, 67,205,252,112,194,
+217,162,228,231,179, 75,150, 45,156, 94,157,115, 48,204, 24,103, 34,250,234,161,109, 29,163, 97,194,120,152, 98,218, 18, 79,232,
+196,108,219,130,202, 64, 15,200,198,251,136,100, 76, 81, 43,132, 72, 89,175, 27,230,203, 83,174,111,206, 80,162, 33,147, 6,172,
+ 67,144,224,172, 15,204,118,228, 6,203, 42, 58, 54,122,160, 38,122, 23, 10,198, 60, 79,105,189,166,182, 65, 40,116, 84,214, 52,
+175, 46, 67,100,107,174, 89,212,107,238, 29, 30, 49,191,153,135,142, 84, 6,218, 64, 85,215,148, 77,205,120, 60,101, 54,155, 33,
+181,228,244,234,146,207,191,125,198,103,191,126, 10,137,100,164, 28,137,112,224, 37, 66,167, 17,241, 76,100, 13, 56,164,151, 72,
+173,183,194,135,182, 14,230,174,240, 20,201, 45, 1,172,232, 33,159, 27,135,144,220, 28,206, 91, 80, 43, 47,101, 24,242,137, 46,
+248, 58, 20, 58,222,219,126, 29,215,141,253, 3, 17, 80,246,254,116,175,162,192, 88,138, 80,160, 90,135, 51,166,215, 61, 8,165,
+194, 86,117, 11, 83,223,182, 45, 74,107, 14,143,143,120,249,242, 37, 30,207,233,235,215, 8, 41, 57, 60, 60, 68,225,209,198,209,
+164, 25, 22,197,116,255, 0,148, 38, 31, 14, 24,140, 39, 44,173, 69, 8,205,195,199, 15,131, 86,164,105,194,115, 96, 91,188,179,
+ 76,247,246, 25, 78,166, 24, 95,163,253,102, 61,231,108,232, 29,149,212,225, 87,220,250,157,134, 79,106,141,183, 6, 15,100,105,
+ 74, 34, 37,171,186,230,230,242, 10, 1,225,242,118, 41,120,195, 40,207, 24, 14, 50,242, 44,165,174, 26,156,183,220, 44, 87,209,
+ 50, 40, 16,206,146,231, 41,131, 52, 76, 95,150, 55,107,134,131, 65, 16,152,121, 79,166, 36,149,179,248,186, 70, 9,205,217,217,
+ 41,185,148,100, 90,163,128, 7,135,251,252,245,147,251,252,219,215, 63, 80,223, 58,210, 23,203, 21, 95,124,243, 53, 79,143,142,
+ 73, 6, 35,140,107, 88, 44,150, 40,157,176,200, 37,243,197,138,201, 40, 3,239,122,160, 83,215, 4,116, 69,235,110,170,229,219,
+111,247,157,145,123, 28,199,191,237, 66,183,182,179, 17,219, 24,218,226,223, 41,198,126,227, 82,191,109, 69,219,254, 71,183, 57,
+235,183,187,116,241,150,209,252, 59,139, 4,255, 97,139,219, 27,159,243,255,225,226,220,254, 58,223,120, 49,197,251, 69,119,111,
+223, 80,248, 91,170,185,219,175, 9, 59,123,146,247,126,125, 93, 7,183,165, 12,247, 24, 90,211,226,173,101,113,115, 5,182, 33,
+213,130,171,139,107,154,163,187,212,213, 10,103, 42,246,166, 51,230, 55,151, 60,152,229,188,124,249, 2,211, 20,248,118, 69, 57,
+191, 64,154,154,243,151, 47, 17,198,177,184,188,128,182,192, 86, 75,240,142,117,177,238,187, 17,231,123,157,100, 47, 23,216,134,
+ 92,109, 48,213,193,167,219,117,230, 93,122,144,234,213,238, 49,241, 74,200, 64, 83,179, 29, 41,207,210, 24,135,199,145,110,169,
+ 58,117, 28, 85,117,194,186,208,117,120, 52, 13,213,106,142,111,214,180,180, 56,103,200,211,132, 60,145, 72, 28,214,180, 12,178,
+140,245,186, 32, 85,146, 98,185, 64, 40, 73, 34, 65,102, 9,109,162, 89, 23, 53,165, 13,234,208,245,170,160,108, 26,116,154,147,
+104,141,113,146,131,131,163, 16,126,225, 26, 76,219, 96,155, 22,239,131, 55, 91,250, 20,239, 29,117,171,240, 46, 12,206,100,180,
+ 30,117,151, 38,120,148, 14,218,128,206,235, 45,162, 14,195, 57, 75, 91,213, 76, 70, 31, 33, 69, 64,199,134, 75, 61,240,106,125,
+ 79, 84, 12,235, 22,143,235,125,198,206,219,184,161,234,132,136,225, 96,240, 46, 20, 68, 2,143, 82, 93, 1, 40, 67, 39,227, 92,
+ 4, 49,135,177,177,210,138, 84,117, 81,165, 14,231, 42,132,107,201,132,100,239, 40,101,209,122, 30,204, 38,156, 78, 18, 94, 94,
+172, 88,213,130,186, 82,164,171, 5,182,109,201,147,132, 81,150,177,186, 94,115, 57, 47, 80, 2,164, 76,194, 56, 90, 56,100,166,
+217, 31, 28,224,146, 9,175,231,107, 50,221,224,141,227,102,126,142,144, 53, 74, 5,244,176, 21, 97,156,109,241,104, 45,122,251,
+235, 78,170, 99, 12,132, 23, 66,162, 85,130, 80, 26, 33, 82,172,132,214, 11, 74, 60,119,239,223,163, 92,183,168,241,136,162, 42,
+ 57, 78, 52, 69, 85,146, 38, 65, 40,102,140, 65, 39, 9, 58,181, 12, 6,195,128,204, 52,150,147, 59, 71, 36,105,202,231, 95,255,
+192,201,195,199,228,195, 1,178, 41, 73, 50,209,163,113,149,146,155,217,148,183, 81,184, 22,198,222, 97,226, 18, 87, 98, 29, 80,
+198,111, 39, 81,110,159, 27,162, 23,252,117,127,238, 45, 82, 81,188,230,133,140,107,187, 77, 48, 12, 46,124, 14,108,252,123, 46,
+174, 26, 69, 32,198, 9,223,237,234,163, 55,222,249, 72,179, 11,197,166,143,188,131,109,171,166,237,192, 37,125,177, 28,136,126,
+143,159, 60,142,204,125,248,241,167,159, 72,210,148,189,189,125,156, 51,212,198,179,172, 45,227,189,187, 52, 50,163,174, 42, 38,
+179,125,234,198, 4, 44,233,186,228,206,201, 9, 87, 23, 23, 12,242, 1,211,201,148, 27, 4,167, 23, 55,220,123,120, 72,154,133,
+ 51,171, 11,111,234, 9,146,209, 69,227,227, 58,206,123,143, 55,109,111,117,117,214, 50,200,114, 92, 83,210, 20, 21,151,151,151,
+ 56,167,130, 19,195, 91, 18,173, 34,226, 88,160,117, 74,221,180,212,109,205,205,124,201,170,172, 73,179,140, 65,158,161, 49,164,
+ 74, 98,234,154,170, 44, 56,216,223,199,182, 13, 94, 73,218,182,162, 42, 10,154,178,162,170, 91,158,189,120,205, 32,207, 24,102,
+ 57,197,106,193, 64,122, 62,125,116,194, 87, 63, 62,167,174,154,158,186,232,227,239,243, 31,254,248, 57,159,253,207,255,197,221,
+ 7, 15,248,254,219, 47, 72,135, 21,117, 94,114,113,102,121,254,226,140, 79,127,245,164,127, 60,182, 51, 0,164,216,141,247,221,
+209, 90,253, 25,140,182,205,197, 30, 47,243, 91,124,144,247,221, 47,219, 91,118,253, 46,171,218,219,178,198,111, 95,248, 31,186,
+200,223, 45,110,123,123, 2,220,187,198,254,239,178,197,189, 79, 0,247, 86, 17, 94,119, 40,255, 2,193,222,198, 59,176, 27, 5,
+251, 46, 84,237,135,194,101,118, 57,211, 91, 57,206, 66,210,180, 45,197,122,197,252,250,138, 52,203,105,202, 53, 77, 85, 80,174,
+ 87,216,182,161,169,215, 12,210, 28, 83,215,152, 90,211, 84, 21,197,170, 32, 85,142, 76,183, 12,114,197,249,249, 57,123,123,146,
+178,106, 73,146,140,211,211, 87, 8,185, 31, 30,134,232,135,237, 66, 77,132,163,127,223,110,221,226,145, 94,198,113,249, 46,198,
+ 87,198,162,168, 59,156,164,220, 68, 5,134,157,160,236, 31,190, 16,126,211, 6,116,168,181, 40,173, 66, 52,103,236,208,113, 2,
+173, 60, 10,203,245,229, 37,152, 18,169, 21,249,168, 65,120,199,104,118, 68, 83, 23, 40, 5,203,197, 53, 74, 40,234,170, 33,201,
+ 18, 50,157, 83,196, 27, 51, 28,132,129,180, 50, 26, 13,153,207, 23,228,105, 66,107, 27, 90, 27, 32, 42,163,201,148,117, 89,161,
+124, 67,158,165, 36, 89, 66,219, 84,168, 84,163,148,192,154,182,215, 7,180,214,160,108, 80,105,219, 72,246, 18, 2,234,218,199,
+ 12,117, 21, 82,144, 98,101,222, 54, 53,153, 20, 28,204,114,164,111, 81, 74, 97,141,136, 5,142,195, 69,165,123,208,105, 4, 16,
+141,139,227,212,144,228,234,251, 50,193,119, 56,208,110, 84, 26,211,187,122, 74, 84,212, 37, 40,161,130,160, 47, 73, 3, 84, 38,
+238,134, 37, 32,125,224,127,163, 66,103, 58, 83, 45,251,153,228,193, 40,229,179, 71,143, 40, 93,206,207,175,175,104, 76,141, 66,
+177,156,175, 72,146,140,225,100,134,109, 91,156,177,180,181,161, 40,215,180,198, 34,179,150,233,186, 65,103, 5, 89, 38, 57, 63,
+127,133,162, 1, 12, 89, 18,214, 28, 66, 37, 32, 19,172,209,160,194,247,215,253,186,134, 58, 94,246, 92,134, 16,160, 34, 17, 90,
+163, 85,134, 64,147,225, 25,142,114, 70, 66,210,150,142,187,143, 31, 50, 60, 60,166, 82, 50,250,185, 37, 69, 85, 49,172,234,144,
+ 76, 40, 36, 77,211, 50,153,104,132,212, 44,150, 43,244,133,102,186,127,128, 74, 71,252,233,155,103,148,235, 3,254,234,225, 33,
+ 2, 71,150, 6,176,137,142, 89,229,157, 85, 77,244,226, 77,181,217,143,239,172, 4,217,217,153,203,109, 20,246, 54, 41,206,135,
+117, 73,127,176,198,238, 43, 14,102,122, 17,169,144, 91,129, 82,253,199,140,231, 70,180,254,137, 24,244, 18,186,244,216,217, 27,
+ 11,194,135,120,223,206,188, 20,207, 38,105, 68, 88,175, 25,211, 39, 46, 90, 60, 58, 85, 60,253,228, 99, 94,190,120, 73, 99, 90,
+ 94,189, 62,163,110, 90,246,102, 7,220,172, 27, 26, 82, 70,163, 41,190,117, 44,230,215, 32, 4, 39,247,238,243,195,247,223,113,
+250,250,140, 79, 63,253,132,229, 98,137,115, 33, 55, 60,205, 6,188,124,125,198,175, 42,208, 3, 69,154,110,242, 60,148,210, 72,
+233,113,241, 2,239,194,133,132,214,193,110,102, 29, 74,120, 18,173, 73,210,148,122, 49,103, 57,159,115,254,250, 2,185,119,191,
+ 15,183,113,214,162,133, 66, 42, 77,107, 60, 22,199,171,179,115,170,198,177, 88, 44,200, 7, 57,195, 44, 65,227,184,119,112, 66,
+ 85,174, 67,252, 46, 14,219,182,120, 31,166,134,235,117,136,116, 45, 91,207,233,213,146, 39, 31,125,138, 49,142,225,112,194,226,
+230,156,167,247,142,153, 12,114,174,171,134, 91,230, 51,126,122,241,156,162,173, 57,188,119,159, 47,190,248, 19,117, 85, 81, 23,
+ 37, 2,207,235,243,107, 62,254,248, 81,152,192, 73,185,123,119,137,109,207,248, 27,179,245,173, 80, 43,241,166,183,106, 59,233,
+ 52, 22,136,187,232,109,215,123,218, 63,212,132,246,150,182, 55,216,222, 31,176,144,237,236,198,223, 33,164,123, 43,221,109,231,
+255, 63,172,178,127,219,110,254,109, 35,227, 15, 5,186,236,252,123,241,238,170,169,243, 16,238, 92,208, 91, 72,191,119, 1,122,
+186,185,219, 47, 25,141,116, 35,248, 0, 56, 81,125, 23, 38,165,164, 44, 66,122,219,253, 39, 79, 41,150, 55,224, 12,235,197,156,
+193, 32,101,121,115,197,112, 48, 98,113,125,131,244, 67,234,162,101,117, 83, 49, 26,230,204, 23,175,152,206,198, 92, 95,174, 73,
+235,148,239,159,189,230,228,222,148,124, 48,101, 93,102,100,121, 0, 89,236,132,115,138, 55,189,142,221, 51,231,162,143, 57, 48,
+196, 5, 82,111,228,239,178,227,229,139, 78, 64, 24,154, 10, 41, 36, 22,130,133, 41,178,238,187, 12,122,105, 36, 74,134, 28,107,
+165, 84, 44, 44, 36, 9,160, 83, 40,218,154, 73,166,201,178, 12,108, 67,185,190,198,122, 71, 58, 58, 96, 56, 24,160,181, 36, 79,
+ 51,112, 3,164, 18,172,203,134,166, 42, 80, 73,142,109, 91, 6, 89, 78, 89,213,220, 92, 95, 49, 26,229, 97, 45, 80, 24, 60,142,
+186,110,201,243, 33,149,243, 92, 92, 47, 72,148,100,152,106, 6,169, 98, 58, 26,162,147, 64, 58, 75, 34,160,196, 89, 29,198,163,
+ 34,116,115, 74, 73,156,179, 32, 44, 74,105,180, 22, 49,123, 62, 28,228, 90, 37, 28, 79, 82, 6,105,200, 23,111,157, 3,161,227,
+248,204, 96, 93, 11, 94,245,137,127,155,103,105,115,113,171, 56,194,115,193,114,143, 19, 97, 60,188,161,253,133,169,138,150, 33,
+ 16, 69,136,168,184, 85, 10,165, 18,180, 78,251,231,207, 25,131,183, 38, 74,113, 36,194,121,116, 83,129,179, 12, 85, 67,226, 20,
+159,221, 29,208, 38,147,120, 8, 30,147,232, 64,226, 90,175,214, 76, 38, 99,188,131,197,124,206,197,213, 57,143, 31,159, 48, 25,
+229,184,182, 96, 93, 86, 72, 95, 35, 68,141,179, 38,230,199,131, 67, 97, 93, 80,146,135, 61, 35,177,112,233,138,153,205,159, 65,
+ 69,248, 76, 20,120, 73, 65,146, 42, 50, 36,114,109,145,249,128, 50, 11,132,191, 59, 7,119, 25,231, 99,202,186, 66,103, 57,117,
+211, 34,171,154, 89,228,124,183,198, 4,128,211,222, 30,147,201,140,253,189,125,206,206, 47,248,246,219, 31,152, 95, 95,130, 23,
+ 60,190,127,135, 3, 21, 28, 4,206,249,224, 25,223, 66,179,118,209,194,157, 2,222, 58,183, 51,181,146, 66,246,200,118, 27,139,
+174,254, 32,222, 58, 76, 58, 1,176,148,170,239,180, 2, 59, 62,248,205,195,103,218,196,175,122, 21, 38, 86, 62,242, 26,112,193,
+ 50, 8,190,167, 82,246, 22, 60, 37,250,181, 79,167, 83, 9,157,190, 71, 8, 23, 98, 97,189, 38,213, 73,252, 91, 14,161, 82,144,
+146,199, 79,159,112,117,121,205,124,190,224,217,243,231, 92, 47, 74,174, 10, 79, 54, 59, 98, 94, 52, 60,126,112,159,166, 46, 57,
+ 61,187,224,227,143, 62, 65, 75, 73,146,167,252,248,253, 15, 76,166, 83, 22,139, 37,199,119,238, 83, 87, 13, 74,231,124,241,229,
+ 51,126,247,187,207,240,126,213, 39,147,120,231, 66,216,139, 12,209,180, 97, 20,110,251, 24, 92, 39, 37,182,173, 81, 8, 92,107,
+169,214, 5,231,103,231,180,117, 69, 46,130,213,179,181, 6,225, 58,124,171,162,170, 91,206,111,174,185,188, 89,134,220,112,239,
+ 24,141,134, 92,157,157,242,240,238, 17, 82,120,188,181,164, 73,130,183, 21, 78, 56,108, 3, 42,213,212,198,112,122,126,197, 55,
+207, 78,145,195, 25,217,112,128, 74, 51,234,186, 65, 10, 24,106, 73,162,211, 55,218, 92, 47,161,172,107,254,240,199,255,224, 31,
+254,246,111, 25,205,246, 89, 45,151,164, 82, 50, 24,142, 49, 46, 52, 76,233,214,221, 35,227,219,238,157,182, 61, 78,167,231,186,
+227, 92, 95, 60,184, 45, 4,247,155, 59,245,120,137,119, 29,186,219, 85,201,191, 43,200,108,123,236,175,127,145,231,252, 29, 59,
+243,219,234,247,219, 29,240,159, 19,193,250, 54, 81, 93, 63,222,126,163,243,125,119, 71,252,190, 53, 66,191, 54,120,151, 53,111,
+171,186,242, 59,246,131, 15,239,224,111, 95,234,111, 47,110,216,216, 32, 98,231,213,237, 28, 87,171, 21, 90, 4,149,108, 91,149,
+164, 42,167,170, 10,142, 15, 15, 88, 46, 22,220, 59,184,195,233,179,151, 52,163, 49,206, 8,156, 85, 97,164, 53,212, 12, 71,119,
+ 40,202,215, 28,222, 57,193,122,195, 71,159, 62, 97,189,170,241, 85,194,104, 10, 69, 85,243,253,179,111, 99,117, 29,191, 47, 47,
+222,254, 2,136,240, 32, 18,253,231,194,196,252, 61,185,177,248,109,132,118,155, 2, 74, 18, 15,199, 14, 59,235, 28,222, 5,212,
+110,107,226,197,216,161, 58,145, 88, 41,144,195, 33,180, 41, 22,207,186,168,152, 76, 70,224, 26,230, 55, 23,136,178,230,240,206,
+ 3,172,177, 56, 41,104,234, 10, 15,180,198,145, 38,138,214,182,161,147,104,215, 64,216,131,183, 54,236,247,243, 60,165,172,154,
+ 32,216, 65,176,183,119,196,243,235, 27, 42,235, 89,151, 13, 73, 9, 87,203, 50,192, 54,178,132,113,166, 24,164, 58,224, 87,195,
+214, 53,174, 74,194, 84, 66, 73,223,139, 97, 68, 20,231,133, 98,204,115,239,100,136, 32,236,243, 93,228,192, 91,103,113,222,108,
+186, 47,239,240,222, 68,123, 81, 80,222,122,111,227,243,227,122,172,171,144,160,147,104, 28,217, 74,209,235,158,147, 52, 73, 72,
+146, 20,173, 21, 74, 71,229,182,232,216,244, 97,143,235, 44,200,122,137, 3, 26, 20, 75, 47,240,164, 72,227, 72,156, 65,214, 37,
+ 42, 90,148,146, 52, 39,145, 13,179,125, 73,122,178, 23,145,169, 32,213, 61, 90,115,140,107, 45,174,109,240,141,192, 9, 69, 93,
+121, 90,239, 17, 54,160,113,133, 22, 52,182, 6, 74, 18,173,208, 62,199,123,221,123,168,119,138,122, 73,191,103, 23, 66, 5, 90,
+ 91, 28,183, 6, 86,178,227,244,250,138,102,152, 80,181, 53,199, 22,206, 95,189,198,198,174, 90, 39, 58,144,208, 70, 99,180,210,
+177, 75, 12,151,104, 85, 86, 44,174,111,184,127,247,132,182,108, 40, 43,203, 87, 63,156,114,113, 83,241,217,227, 41, 15, 14, 71,
+164,121,138, 74, 37, 50, 6,180,120,182,216,239, 91,150,219,141, 55, 61,218,151,162, 75,100,251,236,184,109, 95,186,221, 76, 72,
+ 69, 4,196, 16, 62,159,143,135,122, 28,151,247, 21,244, 54,106,214,198,247, 59,136,232,174,222, 93,209,243,230,183,153,160,194,
+133, 0, 26, 66,193, 25,156, 6,146, 44, 77, 55,184,100,224,248,248,152,201,120,194,243, 23,175,248,241,217,115,174,234,132,189,
+ 7,191, 70,249,132,213,106,201,195,251,119,121,121,250,138, 23, 47,126,230,238,241, 33,175, 78, 95,133,108,240,241,136,214, 58,
+ 94,159, 95, 48, 26,206,152,238,221,229,230,250, 25,175,207, 23,220, 57, 74,241, 62,140,224, 93,219, 6, 20,177, 78,194,100, 66,
+ 8,124,235,240,198,198, 72, 91,141,183, 45,222,134,223, 15,219, 26, 94,189,120,201,193,225, 1, 23,101,137,101,218, 23, 69,206,
+ 5,177,221,243, 87,175,153,175, 87,120, 21, 38, 53,195,225,128,170, 44, 25, 13, 6, 28,236,207,112,198,160,113, 8,103,112,222,
+ 96,188,195,122,112, 62,197,120,207,179,103, 63,243,167,111,126,230,240,163,207,112, 72,156,144, 84,198, 50, 30, 12,152, 74,141,
+ 78,146,216,180,108,203,133, 67, 36,235,239, 63,255, 3,191,253,251,191,231,233,199,159,240,167,127,253,103,152,132,159,213,124,
+177,226,252,236,130, 71,119,199,187, 23,130,216,118,103,177,181, 23,183, 59, 35,116,209, 77,112,252,230, 57,232,166, 52,221,159,
+157,117, 49,193,210, 97,157,141, 54, 54,215,167, 95,190,237, 50,239,223,196,230,255,181,247,219, 8, 81,113,107,111,252,230,212,
+222,111,117,120,219,250,247, 55,162, 78,125, 64,223,201,237, 76,225, 91, 31,243, 93, 2,188,157, 34, 65, 8, 92, 63, 6,143,196,
+ 39,215,133,109,244, 31,181, 55,246,203,173, 69,113,223,144,118,163,227,248, 11,189,179,199,232,188,102, 62,170,127,125,176, 13,
+ 56,100,200,172,246,193,143, 42, 98,116,159,187, 29, 2, 19,171,230,136,240,221,161,226,117,163,153, 78,152, 38, 17, 17, 90, 96,
+209, 66, 96, 99,182,179,151, 18,153,104,218,170,160, 92,173,240, 6, 84, 54, 96, 93, 87, 60,202,135,204, 87, 43,134,105,194,157,
+195,125,188, 82,124,244,201,175,201, 71, 3,158,124,244,119, 12, 7, 35, 38,179,187,220,220,120,178,116,192,183,223,125, 73, 81,
+173,152, 30,222,225,186,146, 72,165, 73, 7, 73, 88,211,181,126, 39,200,226,109, 21, 74,119, 41,123, 39,227,229, 19,121,229, 90,
+198,221,169,136, 62,106,177,197, 62, 8,145,174, 68, 4,172, 36, 4, 86, 56, 39, 67,232,139,216,222, 47, 57,132, 15, 41, 83,131,
+193, 8,161,160,117, 13, 82, 67,109,192, 85, 5, 50,205,104,150, 55, 20, 73,202,104,186, 79, 85,149,193,110, 36, 37,121,158,176,
+ 46, 43,154,186,198, 24, 79,146,230,172,203,154,182,105,177, 46, 4,135,212,117,217, 99,187,171, 98,197,222,100, 66, 34,101,216,
+ 99,199, 3,188,118, 17, 30, 99,106, 46,215,225,199,175, 54, 56,110,116,196,197, 38, 74,144, 42, 72,164, 32,145,138, 68,202, 40,
+ 58, 12,202,131,255,116, 50, 70,197,143, 7,193,255,220,122,139,117, 2,225,117,175, 43,232,126,209,125, 23, 93, 25,133, 69, 29,
+111,223,187,208, 9, 74,233, 16, 42,252,158, 41, 29, 98,114,181,146,164,105, 74,154,102, 33,226, 87, 42,148, 20,225,112, 18, 18,
+231,130, 96, 79,120,143,245, 50, 90,226,170, 16, 32,100, 37,206,107,140,113, 33, 81, 80, 73,180, 81, 40,111,113,190,198,218,150,
+ 52,211, 72, 26, 82,175,208, 36, 1, 6, 20,231,196, 6,131, 21, 22,164, 11,108,245, 54,184, 31,140, 15,107, 11, 37, 99,138,157,
+143, 59,243, 62, 17, 15,140, 13, 0, 24, 29, 35, 75, 59, 90,130,142, 33, 41,198,122, 26,227, 88, 87, 13,151,101,201,124, 85, 32,
+135, 67,180, 74,162,143, 89, 49,222,155,177, 92,174,163,226, 95,209,180,134,166,109, 25,140,198,212,109,131,175, 29,147,189, 41,
+ 66, 75,234,186,225,206,201, 93,206, 47,175, 24,207, 14, 40,141,227,219,179,138,203,210,242, 87,143, 79,152, 8,144,202, 5, 62,
+ 59, 46, 70, 68,235, 45, 75, 42,125, 20,102, 47,156, 19,190, 91,137,199, 2,192,111,124,206, 91,183,130, 23,187,205,132,239,246,
+224,116,152,225,221, 24, 99,188, 11,235,139, 40, 34, 12, 77,182,219,156, 87, 91,172, 14,239, 58,156,236, 38,174,213, 69,214,133,
+212, 58,128, 75, 92, 92, 11,233, 36,132,218,160, 17,110,133,118, 53, 90,194,209,157,123,124,115, 90, 51, 62, 60, 98, 56,154,208,
+ 24,139, 78, 19,170,166,225,232,232,152,249,245, 53,119,142,142,130,166, 79, 10,174,174,230, 76,166, 51,170,170, 70, 39, 18,148,
+ 37,205, 39,252,235,191,127,199,239,126,247,183,228,153, 35,145, 30,169,116,127,174, 58,103,195,121,166, 36,206,152, 16, 63, 28,
+163,102, 49, 53,184,146,245,186,226,114,225,121,250,233,223,241,252, 15,127, 8, 49,162,198,161,132, 32, 27, 12,144,105,202,213,
+197, 57, 66,133,241,125, 85, 55, 36, 2,172,169,248,232,193, 9,218, 6,168,143,151, 32, 48, 56,211, 68, 43,170,199, 91,131, 18,
+154, 31, 95, 94, 97,213, 40,196,202, 42, 29, 92, 64, 77,129,222,159,112,113,117,202,205, 98, 78,174, 4,141,245, 88, 17, 0,174,
+194,133, 2,252,252,234,154, 31,158,189,224,183,255,237, 31,249,252,159,255, 55,131,209,136,225, 48,167, 44, 75,138,162,194,203,
+ 67,132,168, 99,213, 70, 95,232, 7, 12,114,247, 99,140, 23,177,117,145,123,224,226, 3, 20,138,187, 96, 31,234,154,199,112,198,
+110,132,113, 49, 47,195,211, 7,101,185, 91,157,250, 91,167,194, 91,119,169,222, 30, 31,221, 6,144,236,198,165,190,125, 92,251,
+ 78,159,122, 47, 22,136,106, 65, 41,222,184,208,183,133,109,239, 26,225,187, 45,129,217, 54,101, 78,110,137, 28,250,113,178, 8,
+ 29, 98,247,142, 91, 8,144,254, 79, 59,123,245,126, 26,176, 29,133, 71, 15, 9,233, 42,186,109,212,235, 46, 60, 96, 3,116,121,
+171, 27, 96,187, 11,192,199,113, 13,253,232, 70,197,213, 68,162,147,240, 3,173, 91,134,249,132,100, 50,129,100,200,104, 60,102,
+ 58, 25,147, 13, 7,204,246,247,184, 60, 59, 99,152,103,220, 20, 75,218,243, 20,127,182, 64,103, 11,134,131, 17, 45,130,123,143,
+ 30, 81,123,199,143,167,103,124,247,226,146, 23,207,159, 51,202, 83,108, 71, 50,243,219,131,248,183,241, 18,194,251,109,247,160,
+121,143,242, 2,235, 29,214, 73,148, 10,151,159, 86,162, 47, 82,136, 63,227,110,231, 39, 69, 60,156,148,192, 74,129,243,114, 3,
+247, 17, 18, 97, 3,165,172,105,107, 50,169, 16, 50,163, 53, 13,169,151, 24,235, 16, 85,133,210, 9,166, 92, 83, 74,133,206, 71,
+120, 47,153,207,231, 36, 73, 74, 91,215, 28, 29, 30,240,226,244,140,182, 46, 73,132, 96, 81, 22,232, 36,197, 52, 53, 74, 72,140,
+ 51, 36, 82, 35,188, 96, 60,200, 25, 15, 50,138,170,236,213,201, 34,166,183,201, 29, 42,160,136, 86,118, 79,107,160,197, 81,198,
+ 87, 68, 9,129,242, 54,136,201,226, 75,165,164,103,144,228, 1, 68,227, 84, 28,177,182,113, 32, 34,241,214, 99,108, 19,148,230,
+ 59,207,120, 24,251,123, 97,131,127,221,171,254, 98,113,222, 96, 76,131,140, 84, 52, 45, 53, 90,167, 36, 93, 26,160, 78,194,234,
+ 70, 8,116,236,208,132, 4,175, 85,220,211, 59, 26, 15,141,115,216,166,196,183, 14,107, 36, 94,232,160, 52, 23, 30,161, 12,169,
+206, 72,108, 66, 98,147,200, 29, 8, 69,152,183, 81,216, 40,227,239,144, 80,120,229,176, 54, 52,134,218,233, 48, 61,113,129, 4,
+230, 84,152,104, 56, 7,202, 7, 85, 54, 50,142,162,241,125,170, 93,168,120,219, 48,150,118, 33, 32,167,117,146, 85,221,114,185,
+ 88,115, 83, 86,228,249, 8,173, 83,198,227, 49,121,158, 7, 63, 48,208, 70,240,207,104, 56, 10,147,152,225,128,203,171, 75, 30,
+ 60,120,136,117,150, 85,177, 2, 9,198, 56, 70,227, 9, 15, 7, 15, 67, 76,102, 89, 82, 25,195,245, 10,116, 50,224,233,189, 61,
+246,180, 10, 46,137, 36, 64, 67,136,132,175,238,128,246,110, 51,177, 19, 91, 97,232,242,125, 33, 87,126,119,197,215,189,223,221,
+178,209,245,218, 32,231, 17,214, 69,245,122,156,106,225,251,120, 74,239,216,106, 90,182, 2,152,226, 25,231, 35, 68,199,119,205,
+186, 16, 36, 34, 6,216, 8, 1, 82,163, 51,137,198, 96,188,193,225,248,249,245, 37,201,228,152,195,187,143, 48,166,101, 60, 72,
+ 88,175,215,193,125, 33, 36,101, 21, 38, 97,135, 71,199,204,151, 75,214,235,130,217,108,143, 52, 75, 64, 88,170,122, 73, 54, 24,
+176, 88,102,156,190, 94,243,209, 71, 19, 28, 5, 74,201, 30,153,221,227,238,149,138,186,156,216,202, 8,129,240, 6, 91, 21, 92,
+ 94,206, 25,239,159, 48,189,255, 49,230,247,191, 15,130, 74, 2,245, 49, 75, 83,172,247, 20, 77, 69, 83, 53, 12,135, 25,185, 86,
+184,166,226,254,157, 3, 6,137,198,182, 13, 65, 70, 27,146, 17,133, 13,197,181,181,150,170, 53, 44, 87, 37,231, 55, 5, 39,143,
+127,205,122,177, 38, 63, 60, 36, 4,175, 58,138,186,165, 50,130,182,110, 56, 24, 15,185, 92, 21, 88,215,177,247,195,143,218,120,
+193,191,252,251,231,252,205,175,126,197,131, 71, 15,177, 66,132,100, 73,211,176, 90, 23, 81, 51,179,157, 81, 34, 98,140,238,174,
+181,217, 89, 27, 59,239,192,115,247,206, 5, 54,129,219,140,215,183, 21,239,125,135,110,108, 79,143, 51,221,191,119,191,220,206,
+ 22, 59,117,255, 94,219,218,135,130, 88,222,166, 60,247,209, 30,196, 22, 56,198,251,219, 29,191,127,167,199,253,151,236,166,223,
+ 53,174,239,152,243,183, 91, 81,225,119, 29,232,111, 13, 94,121, 75,126,248,135,119,229,187,182,132,183,125,253,226,214, 40,178,
+183, 66,196, 0,148, 4,129, 78, 51,146,209,148, 44, 27,130, 74,193, 11,202,117,193, 15, 47,126,102,111,127,159, 69, 93, 5,196,
+232, 32, 67,143,199, 20,235, 53, 63, 93, 92,114, 61,191,225,242,122,193,229,249, 5, 90, 65, 85, 44, 56,191,153,211, 10, 73,227,
+ 4,222, 90,158, 62,188,207,193,116,220,135,113,250, 15,112,112,195,247, 19, 5, 99,182,123,240, 4,214, 10,148, 52,104,165,112,
+ 58,172, 15,116,244,245,122,191, 97,197,135, 51,103, 3, 16,234,169,125, 17,216, 35,226, 5, 89,172, 87,168, 44, 97, 52,206, 33,
+ 9,123,105,178, 33,109, 83, 69,139,148,199, 53, 21, 78,138,176,215,138, 99,179,253,233,148,117,177, 98, 50, 72,105,141, 99, 93,
+148,172,151,215,100,249, 40,178,191, 85,200, 37,182, 45, 66,104,134,131,140,167, 79, 30,241,249, 23, 95,246, 19, 29, 33,192,198,
+226, 80,197, 61,148,218, 98,252,203, 32, 60, 14,172,250,152,114, 38, 58, 81,148,240,161, 72, 18,158,225,104,208, 79, 52,140, 49,
+155,196, 59, 65, 64,117,182,237, 86,114,150,232, 93, 15, 74,235,168,150, 22, 8,169,163,144, 44, 92,172, 82, 6,177,162,214, 9,
+ 90,105, 18,157,144,232, 4,173,117,124, 83,253, 72,222,198, 36, 61, 29, 87, 42,253, 68,192, 89,156, 53,180,141,195,152,144, 21,
+222, 90,131,245, 45, 82,213, 56,149, 98,146,140, 70,102,148, 74,145,103,121,128,149,100,158, 84, 91,146, 52,137, 62,115,133,194,
+225,164,194,235, 12,188, 64,182, 45,109, 27, 62, 79, 39, 28,148, 82,208, 8, 19,199,173, 65,244,212, 37,254, 89, 7,202,121,116,
+ 18, 52, 36,141,245,212,222,177,108, 28, 23,139,146,103,167, 87,100,227, 61,172, 23,140, 38, 19,234,186, 9,221,139, 49,104, 29,
+114,189,165,144, 44,151,203,222, 79, 62,157,206,168,235,154,182,109,153,238, 79, 25, 14,198,220,212, 55, 44,151, 75, 14, 15,143,
+112,206, 83, 22, 37, 39, 39, 83,180,146, 60,123,117,201,235,243, 75, 30,221, 63,228,227, 39, 39,100, 64,146, 4,225,166,247, 54,
+ 90,205, 84,116, 36,116, 35,250, 93,157,141, 82,234, 23,179, 50,188,140,226,210,109,162,156, 16, 97, 28, 31,117, 56, 98,135, 26,
+231,223, 0, 64,117,105, 98,157, 38,201,197, 17,174,236, 53, 1, 27, 52,170, 80, 93,100, 72,240, 70,106, 9, 36, 41,173, 28,112,
+181,110, 89,154, 20,135,100, 62,191,161,174,107, 70,163, 17,214, 90,150,203, 37,247,238,221, 99, 49,159,243,234,213, 43,158, 60,
+121,194,124,177,192,123,207,245,245,117, 72, 93, 43, 10,238,220, 57,166, 42, 13,195,225,148,203,171, 53,147,137,228,232, 48, 69,
+138,224, 51,199,111,105, 39, 60, 32, 66,245, 47,189, 0,211,224, 45,212,141,229,122,177,228,232,248,136,215,243,171, 48, 1, 49,
+150,170,174, 73, 7, 41, 69, 81,160, 7, 37,139,197,146,233,100,204, 48,203, 48, 85,193,193,254, 30,163,193, 96, 3,232,145, 58,
+156, 97, 86,128,149,224, 4,222,107, 46, 22,107,254,244,205, 15,236, 29, 28, 51, 28,142, 56, 60, 56, 36, 77,115,148,240,164, 73,
+138,244,130,139,179,115,134, 89,198,127,254,205,175,248,253, 87,223,114,186, 88, 99,253, 86,216,148,135,103, 47,158,179, 40,214,
+252,230,179,207,248,241,155,175, 88, 23, 5, 77,211,112,113,113, 25,184,242,183,226,169,251, 6,212,237, 70, 80,119, 23,186, 53,
+129, 55,225,227,212,214,217,205,174,220,185, 16,199,109,141,161,109, 91,218, 72,145, 51,214,246, 73,152,239, 8,149,190,117, 87,
+109,218, 88,253, 33, 96,204,219,118, 71,155,110,188, 63,194,241, 59,157,243, 38,218,113,219,235,221,113, 31,186, 11,227,189,152,
+217, 63,211,155,222, 95,168, 78,188, 49, 98,239,230,254,127,206,165,254,198,238,226, 29, 47,232,109, 29,221,219,191,151,141,162,
+118, 91, 53,217,237, 26,149, 18, 24, 37,105, 16,248, 52,231,193,147,143,184, 46,106,214,203,146,159,207,207,249,227,183,223,176,
+ 90, 46, 88, 45,230,148,101, 17,148,202,214,177, 55, 25, 81, 85, 53,101,107,153,142,198, 28,239, 79,208, 89,134, 72, 20,121, 62,
+162, 89, 87, 56,107,169,234, 10, 41, 39, 65,212, 18,181, 64,126, 75,141,251,198,234, 99, 75, 56, 24,183, 29,225,253, 54, 92, 32,
+ 97, 84, 20,242,146,141,243,113, 84,173,250, 52, 73,181,245, 58,116, 10,121, 29, 45, 64, 46,124,195,164,194, 97,109, 19,213,187,
+138,253,217, 4,103, 91,202,216,177,180, 85, 9,222,224, 90, 71,109, 26,176, 6, 45,114,234,166,198,122,199,226,230,134,217,254,
+ 1,169, 20,180,165,229,206,193,140, 87,103,151, 28, 29, 29,225,240,212,109, 69,219, 88,154,198,227,165,100,111, 56, 96,150,165,
+172,171, 58,216,153,122,225, 74,120, 51,132,108,116, 29, 15,115,189, 85, 12, 42,235,123,100,174,117, 93, 87,226,201,114,205,104,
+152,199,177,142,192,218,184, 31, 99, 35,136,243, 4,225, 80, 63,150,139,110, 14, 41, 33, 17, 73, 0, 90, 8,221, 11,141,132, 82,
+ 64,210,115,247,149,212, 81,164,167,118, 46,116,173, 59, 5,174,194, 73,143, 49, 46,136,247,180, 68,182,209,148,232, 67, 29,104,
+234,160,236,111,113, 72, 21,244,201,165,107, 81, 73, 75,150, 91,188, 36, 16,251,202, 1,123,147, 17,195, 65,206, 72, 8, 68,119,
+177, 11, 21,133, 79, 1,235,217,217,150,164, 76,104, 90, 3,214, 0,170,239, 54, 60, 6, 47, 20, 78,132, 85,130,212, 30,229, 2,
+189,203, 90,168,173, 99,101, 44,175,174,214, 44, 74,135, 17, 41,139,139, 75, 30, 63,121,130,144, 10, 99, 12, 82, 74,140, 49, 52,
+ 77,195,112, 56,164, 40, 75,246,102,123,140,199, 99, 94,159,159,145,231,195,254,239,172,150, 5,147,241,140,225,112, 72,221, 52,
+ 92, 94, 93, 50,157,132,248,206,233,116,140,243,240,227,179,107,148, 82, 92, 44, 95, 50, 47, 26,126,243,241, 3,166, 35, 77,166,
+187,192, 29, 25,215, 8, 81,108,134,220, 4,247,136,110,106,248,238,243, 80, 68,129,155,235,222,215,117,112,241,121,216, 30,163,
+211,175,191,194,104,192,111,249,145,118, 0, 57,125,162, 99,164,221, 69, 90, 29, 66, 32,124, 64,203, 74,165, 17, 46, 92, 30, 66,
+ 73,108,208,243, 35,172,199, 24, 88, 84,130, 87,215, 13, 87,107,152,237, 77, 98,112,139,160,109, 42, 4, 97, 7,191, 94,173,152,
+ 78, 38,188,122,245,138, 97,204,161, 48,214,161,117,184, 60, 7,131, 1,203,197,146,225,104,194,108,118,192,106,117,195,151, 95,
+ 62,231,191,254,246,215, 12,210, 48,153,147,189, 10,208,245, 92,251,141, 10,205, 97, 26,203,205, 77, 73,209, 88, 10, 87, 96, 92,
+ 84,235, 91, 71,221,180,216, 84,147,102, 42, 10, 86, 13,166,109, 57,127,189,224,201,189,187, 76, 71, 67,188,179, 84,145, 25,223,
+ 56, 75,213,182,225, 59,117, 33, 53, 50, 73,115,190,251,233, 53,167,151, 75,238, 63,189,143, 78, 18,154,186, 70,107, 77, 58, 28,
+ 32, 77,131,113,150,239,191,254,154,189, 60,227,233,189, 59,156,157, 95,112, 62, 95, 5,145,175,146,241,103, 15,139, 98,197,255,
+249,242, 43,254,230, 87, 79,249,238,235,175,185,186,158,227,157,225,112,111,188,147,133,238,183, 38, 20,221,125,105, 99,202, 90,
+ 72, 88,107, 49,109, 27, 8,128,113, 60, 79,252, 59,206,110,186,116, 99, 44, 77,221,208, 52, 45,117,211,246, 43, 38, 99,108, 88,
+ 95, 58,222,107,239,190, 45,148,251,191, 3, 0, 97,118, 36, 17, 24,195, 73,139, 0, 0, 0, 0, 73, 69, 78, 68,174, 66, 96,130,
0};
diff --git a/source/blender/editors/gpencil/Makefile b/source/blender/editors/gpencil/Makefile
index 9bc5f491a83..f3e781a0369 100644
--- a/source/blender/editors/gpencil/Makefile
+++ b/source/blender/editors/gpencil/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2007 Blender Foundation
# All rights reserved.
diff --git a/source/blender/editors/gpencil/drawgpencil.c b/source/blender/editors/gpencil/drawgpencil.c
index 2b26f4a295d..4b8c58a5308 100644
--- a/source/blender/editors/gpencil/drawgpencil.c
+++ b/source/blender/editors/gpencil/drawgpencil.c
@@ -32,7 +32,7 @@
#include <math.h>
#include <float.h>
-#include "MEM_guardedalloc.h"
+#include "BLO_sys_types.h"
#include "IMB_imbuf_types.h"
@@ -43,12 +43,11 @@
#include "DNA_scene_types.h"
#include "DNA_screen_types.h"
#include "DNA_space_types.h"
+#include "DNA_view3d_types.h"
-#include "BKE_blender.h"
#include "BKE_context.h"
#include "BKE_global.h"
#include "BKE_gpencil.h"
-#include "BKE_sequencer.h"
#include "BKE_utildefines.h"
@@ -59,6 +58,7 @@
#include "ED_gpencil.h"
#include "ED_sequencer.h"
+#include "ED_view3d.h"
#include "gpencil_intern.h"
@@ -167,8 +167,8 @@ static void gp_draw_stroke_point (bGPDspoint *points, short thickness, short sfl
co[1]= (points->y * winy) + offsy;
}
else {
- co[0]= (points->x / 100 * winx);
- co[1]= (points->y / 100 * winy);
+ co[0]= (points->x / 100 * winx) + offsx;
+ co[1]= (points->y / 100 * winy) + offsy;
}
/* if thickness is less than GP_DRAWTHICKNESS_SPECIAL, simple dot looks ok
@@ -268,8 +268,8 @@ static void gp_draw_stroke (bGPDspoint *points, int totpoints, short thickness,
glVertex2f(x, y);
}
else {
- const float x= (pt->x / 100 * winx);
- const float y= (pt->y / 100 * winy);
+ const float x= (pt->x / 100 * winx) + offsx;
+ const float y= (pt->y / 100 * winy) + offsy;
glVertex2f(x, y);
}
@@ -308,10 +308,10 @@ static void gp_draw_stroke (bGPDspoint *points, int totpoints, short thickness,
s1[1]= (pt2->y * winy) + offsy;
}
else {
- s0[0]= (pt1->x / 100 * winx);
- s0[1]= (pt1->y / 100 * winy);
- s1[0]= (pt2->x / 100 * winx);
- s1[1]= (pt2->y / 100 * winy);
+ s0[0]= (pt1->x / 100 * winx) + offsx;
+ s0[1]= (pt1->y / 100 * winy) + offsy;
+ s1[0]= (pt2->x / 100 * winx) + offsx;
+ s1[1]= (pt2->y / 100 * winy) + offsy;
}
/* calculate gradient and normal - 'angle'=(ny/nx) */
@@ -456,8 +456,8 @@ static void gp_draw_stroke (bGPDspoint *points, int totpoints, short thickness,
glVertex2f(x, y);
}
else {
- const float x= (float)(pt->x / 100 * winx);
- const float y= (float)(pt->y / 100 * winy);
+ const float x= (float)(pt->x / 100 * winx) + offsx;
+ const float y= (float)(pt->y / 100 * winy) + offsy;
glVertex2f(x, y);
}
@@ -735,25 +735,44 @@ void draw_gpencil_view2d (bContext *C, short onlyv2d)
/* draw grease-pencil sketches to specified 3d-view assuming that matrices are already set correctly
* Note: this gets called twice - first time with only3d=1 to draw 3d-strokes, second time with only3d=0 for screen-aligned strokes
*/
-void draw_gpencil_view3d_ext (Scene *scene, ARegion *ar, short only3d)
+
+void draw_gpencil_view3d_ext (Scene *scene, View3D *v3d, ARegion *ar, short only3d)
{
bGPdata *gpd;
int dflag = 0;
+ rcti rect;
+ RegionView3D *rv3d= ar->regiondata;
/* check that we have grease-pencil stuff to draw */
gpd= gpencil_data_get_active_v3d(scene); // XXX
if(gpd == NULL) return;
+ /* when rendering to the offscreen buffer we dont want to
+ * deal with the camera border, otherwise map the coords to the camera border. */
+ if(rv3d->persp == RV3D_CAMOB && !(G.f & G_RENDER_OGL)) {
+ rctf rectf;
+ view3d_calc_camera_border(scene, ar, rv3d, v3d, &rectf);
+ BLI_copy_rcti_rctf(&rect, &rectf);
+ }
+ else {
+ rect.xmin= 0;
+ rect.ymin= 0;
+ rect.xmax= ar->winx;
+ rect.ymax= ar->winy;
+ }
+
/* draw it! */
if (only3d) dflag |= (GP_DRAWDATA_ONLY3D|GP_DRAWDATA_NOSTATUS);
- gp_draw_data(gpd, 0, 0, ar->winx, ar->winy, CFRA, dflag);
+
+ gp_draw_data(gpd, rect.xmin, rect.ymin, rect.xmax, rect.ymax, CFRA, dflag);
}
void draw_gpencil_view3d (bContext *C, short only3d)
{
ARegion *ar= CTX_wm_region(C);
+ View3D *v3d= CTX_wm_view3d(C);
Scene *scene= CTX_data_scene(C);
- draw_gpencil_view3d_ext(scene, ar, only3d);
+ draw_gpencil_view3d_ext(scene, v3d, ar, only3d);
}
/* ************************************************** */
diff --git a/source/blender/editors/gpencil/editaction_gpencil.c b/source/blender/editors/gpencil/editaction_gpencil.c
index dff0839b5bd..d76e5fcf17c 100644
--- a/source/blender/editors/gpencil/editaction_gpencil.c
+++ b/source/blender/editors/gpencil/editaction_gpencil.c
@@ -31,23 +31,9 @@
#include <stddef.h>
#include <math.h>
-#include "MEM_guardedalloc.h"
-
#include "BLI_math.h"
#include "BLI_blenlib.h"
-
-#include "BKE_global.h"
-#include "BKE_utildefines.h"
-#include "BKE_blender.h"
-#include "BKE_fcurve.h"
-#include "BKE_gpencil.h"
-
-#include "BIF_gl.h"
-#include "BIF_glutil.h"
-
-
-
#include "gpencil_intern.h"
#if 0 // XXX disabled until grease pencil code stabilises again
diff --git a/source/blender/editors/gpencil/gpencil_buttons.c b/source/blender/editors/gpencil/gpencil_buttons.c
index c051678b86b..87a9c3cd52f 100644
--- a/source/blender/editors/gpencil/gpencil_buttons.c
+++ b/source/blender/editors/gpencil/gpencil_buttons.c
@@ -30,7 +30,6 @@
#include <stdlib.h>
#include <stddef.h>
-#include "MEM_guardedalloc.h"
#include "BLI_math.h"
#include "BLI_blenlib.h"
@@ -41,15 +40,12 @@
#include "BKE_context.h"
#include "BKE_global.h"
#include "BKE_gpencil.h"
-#include "BKE_utildefines.h"
#include "WM_api.h"
#include "WM_types.h"
#include "RNA_access.h"
-#include "BIF_gl.h"
-#include "BIF_glutil.h"
#include "ED_gpencil.h"
@@ -164,7 +160,7 @@ static void gp_drawui_layer (uiLayout *layout, bGPdata *gpd, bGPDlayer *gpl)
/* frame locking */
// TODO: this needs its own icons...
icon= (gpl->flag & GP_LAYER_FRAMELOCK) ? ICON_RENDER_STILL : ICON_RENDER_ANIMATION;
- uiItemR(subrow, &ptr, "frame_lock", 0, "", icon);
+ uiItemR(subrow, &ptr, "lock_frame", 0, "", icon);
uiBlockSetEmboss(block, UI_EMBOSS);
@@ -194,11 +190,11 @@ static void gp_drawui_layer (uiLayout *layout, bGPdata *gpd, bGPDlayer *gpl)
/* color */
subcol= uiLayoutColumn(col, 1);
uiItemR(subcol, &ptr, "color", 0, "", 0);
- uiItemR(subcol, &ptr, "opacity", UI_ITEM_R_SLIDER, NULL, 0);
+ uiItemR(subcol, &ptr, "alpha", UI_ITEM_R_SLIDER, NULL, 0);
/* stroke thickness */
subcol= uiLayoutColumn(col, 1);
- uiItemR(subcol, &ptr, "line_thickness", UI_ITEM_R_SLIDER, NULL, 0);
+ uiItemR(subcol, &ptr, "line_width", UI_ITEM_R_SLIDER, NULL, 0);
/* debugging options */
if (G.f & G_DEBUG) {
@@ -212,7 +208,7 @@ static void gp_drawui_layer (uiLayout *layout, bGPdata *gpd, bGPDlayer *gpl)
/* onion-skinning */
subcol= uiLayoutColumn(col, 1);
uiItemR(subcol, &ptr, "use_onion_skinning", 0, "Onion Skinning", 0);
- uiItemR(subcol, &ptr, "max_ghost_range", 0, "Frames", 0); // XXX shorter name here? i.e. GStep
+ uiItemR(subcol, &ptr, "ghost_range_max", 0, "Frames", 0); // XXX shorter name here? i.e. GStep
/* additional options... */
subcol= uiLayoutColumn(col, 1);
diff --git a/source/blender/editors/gpencil/gpencil_edit.c b/source/blender/editors/gpencil/gpencil_edit.c
index fb72ec8f3b4..e0d257ca3bf 100644
--- a/source/blender/editors/gpencil/gpencil_edit.c
+++ b/source/blender/editors/gpencil/gpencil_edit.c
@@ -47,20 +47,13 @@
#include "DNA_view3d_types.h"
#include "DNA_gpencil_types.h"
-#include "BKE_armature.h"
-#include "BKE_blender.h"
#include "BKE_context.h"
#include "BKE_curve.h"
-#include "BKE_global.h"
#include "BKE_gpencil.h"
-#include "BKE_image.h"
#include "BKE_library.h"
#include "BKE_object.h"
#include "BKE_report.h"
-#include "BKE_utildefines.h"
-#include "BIF_gl.h"
-#include "BIF_glutil.h"
#include "WM_api.h"
#include "WM_types.h"
diff --git a/source/blender/editors/gpencil/gpencil_ops.c b/source/blender/editors/gpencil/gpencil_ops.c
index d9bd43cc851..b6b2675e6c8 100644
--- a/source/blender/editors/gpencil/gpencil_ops.c
+++ b/source/blender/editors/gpencil/gpencil_ops.c
@@ -29,8 +29,9 @@
#include <stddef.h>
#include <stdio.h>
-#include "BLI_blenlib.h"
+#include "BLO_sys_types.h"
+#include "BLI_blenlib.h"
#include "WM_api.h"
#include "WM_types.h"
diff --git a/source/blender/editors/gpencil/gpencil_paint.c b/source/blender/editors/gpencil/gpencil_paint.c
index abee15990d1..083a90efb25 100644
--- a/source/blender/editors/gpencil/gpencil_paint.c
+++ b/source/blender/editors/gpencil/gpencil_paint.c
@@ -40,7 +40,6 @@
#include "BKE_context.h"
#include "BKE_global.h"
#include "BKE_report.h"
-#include "BKE_utildefines.h"
#include "DNA_object_types.h"
#include "DNA_scene_types.h"
@@ -69,6 +68,9 @@ typedef struct tGPsdata {
ScrArea *sa; /* area where painting originated */
ARegion *ar; /* region where painting originated */
View2D *v2d; /* needed for GP_STROKE_2DSPACE */
+ rctf *subrect; /* for using the camera rect within the 3d view */
+ rctf subrect_data;
+
#if 0 // XXX review this 2d image stuff...
ImBuf *ibuf; /* needed for GP_STROKE_2DIMAGE */
@@ -272,8 +274,14 @@ static void gp_stroke_convertcoords (tGPsdata *p, short mval[], float out[], flo
/* 2d - relative to screen (viewport area) */
else {
- out[0] = (float)(mval[0]) / (float)(p->ar->winx) * 100;
- out[1] = (float)(mval[1]) / (float)(p->ar->winy) * 100;
+ if(p->subrect == NULL) { /* normal 3D view */
+ out[0] = (float)(mval[0]) / (float)(p->ar->winx) * 100;
+ out[1] = (float)(mval[1]) / (float)(p->ar->winy) * 100;
+ }
+ else { /* camera view, use subrect */
+ out[0]= ((mval[0] - p->subrect->xmin) / ((p->subrect->xmax - p->subrect->xmin))) * 100;
+ out[1]= ((mval[1] - p->subrect->ymin) / ((p->subrect->ymax - p->subrect->ymin))) * 100;
+ }
}
}
@@ -705,8 +713,14 @@ static void gp_stroke_eraser_dostroke (tGPsdata *p, int mval[], int mvalo[], sho
}
#endif
else {
- x0= (int)(gps->points->x / 100 * p->ar->winx);
- y0= (int)(gps->points->y / 100 * p->ar->winy);
+ if(p->subrect == NULL) { /* normal 3D view */
+ x0= (int)(gps->points->x / 100 * p->ar->winx);
+ y0= (int)(gps->points->y / 100 * p->ar->winy);
+ }
+ else { /* camera view, use subrect */
+ x0= (int)((gps->points->x / 100) * (p->subrect->xmax - p->subrect->xmin)) + p->subrect->xmin;
+ y0= (int)((gps->points->y / 100) * (p->subrect->ymax - p->subrect->ymin)) + p->subrect->ymin;
+ }
}
/* do boundbox check first */
@@ -762,10 +776,18 @@ static void gp_stroke_eraser_dostroke (tGPsdata *p, int mval[], int mvalo[], sho
}
#endif
else {
- x0= (int)(pt1->x / 100 * p->ar->winx);
- y0= (int)(pt1->y / 100 * p->ar->winy);
- x1= (int)(pt2->x / 100 * p->ar->winx);
- y1= (int)(pt2->y / 100 * p->ar->winy);
+ if(p->subrect == NULL) { /* normal 3D view */
+ x0= (int)(pt1->x / 100 * p->ar->winx);
+ y0= (int)(pt1->y / 100 * p->ar->winy);
+ x1= (int)(pt2->x / 100 * p->ar->winx);
+ y1= (int)(pt2->y / 100 * p->ar->winy);
+ }
+ else { /* camera view, use subrect */
+ x0= (int)((pt1->x / 100) * (p->subrect->xmax - p->subrect->xmin)) + p->subrect->xmin;
+ y0= (int)((pt1->y / 100) * (p->subrect->ymax - p->subrect->ymin)) + p->subrect->ymin;
+ x1= (int)((pt2->x / 100) * (p->subrect->xmax - p->subrect->xmin)) + p->subrect->xmin;
+ y1= (int)((pt2->y / 100) * (p->subrect->ymax - p->subrect->ymin)) + p->subrect->ymin;
+ }
}
/* check that point segment of the boundbox of the eraser stroke */
@@ -850,7 +872,8 @@ static tGPsdata *gp_session_initpaint (bContext *C)
/* supported views first */
case SPACE_VIEW3D:
{
- //View3D *v3d= curarea->spacedata.first;
+ View3D *v3d= curarea->spacedata.first;
+ RegionView3D *rv3d= ar->regiondata;
/* set current area
* - must verify that region data is 3D-view (and not something else)
@@ -865,6 +888,12 @@ static tGPsdata *gp_session_initpaint (bContext *C)
return p;
}
+ /* for camera view set the subrect */
+ if(rv3d->persp == RV3D_CAMOB) {
+ view3d_calc_camera_border(p->scene, p->ar, NULL, v3d, &p->subrect_data);
+ p->subrect= &p->subrect_data;
+ }
+
#if 0 // XXX will this sort of antiquated stuff be restored?
/* check that gpencil data is allowed to be drawn */
if ((v3d->flag2 & V3D_DISPGP)==0) {
diff --git a/source/blender/editors/include/ED_armature.h b/source/blender/editors/include/ED_armature.h
index 52db36e188d..6055b9eecb3 100644
--- a/source/blender/editors/include/ED_armature.h
+++ b/source/blender/editors/include/ED_armature.h
@@ -78,12 +78,12 @@ typedef struct EditBone
short segments;
} EditBone;
-#define BONESEL_ROOT 0x10000000
-#define BONESEL_TIP 0x20000000
-#define BONESEL_BONE 0x40000000
+#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 0x80000000 /* 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))
@@ -102,7 +102,7 @@ void ED_keymap_armature(struct wmKeyConfig *keyconf);
void ED_armature_from_edit(struct Object *obedit);
void ED_armature_to_edit(struct Object *ob);
void ED_armature_edit_free(struct Object *ob);
-void ED_armature_deselectall(struct Object *obedit, int toggle, int doundo);
+void ED_armature_deselectall(struct Object *obedit, int toggle);
int ED_do_pose_selectbuffer(struct Scene *scene, struct Base *base, unsigned int *buffer,
short hits, short extend);
@@ -140,7 +140,7 @@ void undo_push_armature(struct bContext *C, char *name);
void ED_armature_exit_posemode(struct bContext *C, struct Base *base);
void ED_armature_enter_posemode(struct bContext *C, struct Base *base);
int ED_pose_channel_in_IK_chain(struct Object *ob, struct bPoseChannel *pchan);
-void ED_pose_deselectall(struct Object *ob, int test, int doundo);
+void ED_pose_deselectall(struct Object *ob, int test);
void ED_pose_recalculate_paths(struct bContext *C, struct Scene *scene, struct Object *ob);
/* sketch */
diff --git a/source/blender/editors/include/ED_gpencil.h b/source/blender/editors/include/ED_gpencil.h
index 0003cea8147..6c5a0cc3bf3 100644
--- a/source/blender/editors/include/ED_gpencil.h
+++ b/source/blender/editors/include/ED_gpencil.h
@@ -72,7 +72,7 @@ void ED_operatortypes_gpencil(void);
void draw_gpencil_2dimage(struct bContext *C, struct ImBuf *ibuf);
void draw_gpencil_view2d(struct bContext *C, short onlyv2d);
void draw_gpencil_view3d(struct bContext *C, short only3d);
-void draw_gpencil_view3d_ext(struct Scene *scene, struct ARegion *ar, short only3d);
+void draw_gpencil_view3d_ext(struct Scene *scene, struct View3D *v3d, struct ARegion *ar, short only3d);
void gpencil_panel_standard(const struct bContext *C, struct Panel *pa);
diff --git a/source/blender/editors/include/ED_lattice.h b/source/blender/editors/include/ED_lattice.h
new file mode 100644
index 00000000000..bebd6c5f3ab
--- /dev/null
+++ b/source/blender/editors/include/ED_lattice.h
@@ -0,0 +1,33 @@
+/**
+ * $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) 2008 Blender Foundation.
+ * All rights reserved.
+ *
+ *
+ * Contributor(s): Blender Foundation
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+struct Object;
+
+void free_editLatt(struct Object *ob);
+void make_editLatt(struct Object *obedit);
+void load_editLatt(struct Object *obedit);
diff --git a/source/blender/editors/include/ED_mesh.h b/source/blender/editors/include/ED_mesh.h
index 43c11206bbe..564fe04ca4d 100644
--- a/source/blender/editors/include/ED_mesh.h
+++ b/source/blender/editors/include/ED_mesh.h
@@ -147,7 +147,7 @@ struct UvVertMap *EM_make_uv_vert_map(struct EditMesh *em, int selected, int do_
struct UvMapVert *EM_get_uv_map_vert(struct UvVertMap *vmap, unsigned int v);
void EM_free_uv_vert_map(struct UvVertMap *vmap);
-void EM_add_data_layer(struct EditMesh *em, struct CustomData *data, int type);
+void EM_add_data_layer(struct EditMesh *em, struct CustomData *data, int type, const char *name);
void EM_free_data_layer(struct EditMesh *em, struct CustomData *data, int type);
void EM_make_hq_normals(struct EditMesh *em);
@@ -209,16 +209,19 @@ int editface_containsEdge(struct EditFace *efa, struct EditEdge *eed);
short sharesFace(struct EditMesh *em, struct EditEdge *e1, struct EditEdge *e2);
/* mesh_data.c */
+// void ED_mesh_geometry_add(struct Mesh *mesh, struct ReportList *reports, int verts, int edges, int faces);
+void ED_mesh_faces_add(struct Mesh *mesh, struct ReportList *reports, int count);
+void ED_mesh_edges_add(struct Mesh *mesh, struct ReportList *reports, int count);
+void ED_mesh_vertices_add(struct Mesh *mesh, struct ReportList *reports, int count);
-void ED_mesh_geometry_add(struct Mesh *mesh, struct ReportList *reports, int verts, int edges, int faces);
void ED_mesh_transform(struct Mesh *me, float *mat);
void ED_mesh_calc_normals(struct Mesh *me);
-void ED_mesh_material_add(struct Mesh *me, struct Material *ma);
+void ED_mesh_material_link(struct Mesh *me, struct Material *ma);
void ED_mesh_update(struct Mesh *mesh, struct bContext *C, int calc_edges);
-int ED_mesh_uv_texture_add(struct bContext *C, struct Scene *scene, struct Object *ob, struct Mesh *me);
+int ED_mesh_uv_texture_add(struct bContext *C, struct Scene *scene, struct Object *ob, struct Mesh *me, const char *name, int active_set);
int ED_mesh_uv_texture_remove(struct bContext *C, struct Object *ob, struct Mesh *me);
-int ED_mesh_color_add(struct bContext *C, struct Scene *scene, struct Object *ob, struct Mesh *me);
+int ED_mesh_color_add(struct bContext *C, struct Scene *scene, struct Object *ob, struct Mesh *me, const char *name, int active_set);
int ED_mesh_color_remove(struct bContext *C, struct Object *ob, struct Mesh *me);
#endif /* ED_MESH_H */
diff --git a/source/blender/editors/include/ED_screen_types.h b/source/blender/editors/include/ED_screen_types.h
index c55dafa6f51..c5abd5465d7 100644
--- a/source/blender/editors/include/ED_screen_types.h
+++ b/source/blender/editors/include/ED_screen_types.h
@@ -68,13 +68,21 @@ 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 */
+} AZEdge;
+
/* for editing areas/regions */
typedef struct AZone {
struct AZone *next, *prev;
ARegion *ar;
int type;
/* region-azone, which of the edges */
- short edge;
+ AZEdge edge;
/* internal */
short do_draw;
/* for draw */
diff --git a/source/blender/editors/include/ED_view3d.h b/source/blender/editors/include/ED_view3d.h
index bb4a7543d90..f5a84aa4c19 100644
--- a/source/blender/editors/include/ED_view3d.h
+++ b/source/blender/editors/include/ED_view3d.h
@@ -51,7 +51,7 @@ struct ViewContext;
/* for derivedmesh drawing callbacks, for view3d_select, .... */
typedef struct ViewContext {
- Scene *scene;
+ struct Scene *scene;
struct Object *obact;
struct Object *obedit;
struct ARegion *ar;
@@ -72,7 +72,7 @@ typedef struct ViewDepths {
float *give_cursor(struct Scene *scene, struct View3D *v3d);
-void initgrabz(struct RegionView3D *rv3d, float x, float y, float z);
+int initgrabz(struct RegionView3D *rv3d, float x, float y, float z);
void window_to_3d(struct ARegion *ar, float *vec, short mx, short my);
void window_to_3d_delta(struct ARegion *ar, float *vec, short mx, short my);
void view3d_unproject(struct bglMats *mats, float out[3], const short x, const short y, const float z);
@@ -101,10 +101,11 @@ void viewline(struct ARegion *ar, struct View3D *v3d, float mval[2], float ray_s
void viewray(struct ARegion *ar, struct View3D *v3d, float mval[2], float ray_start[3], float ray_normal[3]);
int get_view3d_cliprange(struct View3D *v3d, struct RegionView3D *rv3d, float *clipsta, float *clipend);
-int get_view3d_viewplane(struct View3D *v3d, struct RegionView3D *rv3d, int winxi, int winyi, rctf *viewplane, float *clipsta, float *clipend, float *pixsize);
+int get_view3d_viewplane(struct View3D *v3d, struct RegionView3D *rv3d, int winxi, int winyi, struct rctf *viewplane, float *clipsta, float *clipend, float *pixsize);
int get_view3d_ortho(struct View3D *v3d, struct RegionView3D *rv3d);
void view3d_get_object_project_mat(struct RegionView3D *v3d, struct Object *ob, float pmat[4][4]);
void view3d_project_float(struct ARegion *a, float *vec, float *adr, float mat[4][4]);
+void view3d_calc_camera_border(struct Scene *scene, struct ARegion *ar, struct RegionView3D *rv3d, struct View3D *v3d, struct rctf *viewborder_r);
/* drawobject.c itterators */
void mesh_foreachScreenVert(struct ViewContext *vc, void (*func)(void *userData, struct EditVert *eve, int x, int y, int index), void *userData, int clipVerts);
@@ -159,8 +160,8 @@ 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]);
-struct ImBuf *ED_view3d_draw_offscreen_imbuf(struct Scene *scene, struct View3D *v3d, struct ARegion *ar, int sizex, int sizey);
-struct ImBuf *ED_view3d_draw_offscreen_imbuf_simple(Scene *scene, int width, int height, int drawtype);
+struct ImBuf *ED_view3d_draw_offscreen_imbuf(struct Scene *scene, struct View3D *v3d, struct ARegion *ar, int sizex, int sizey, unsigned int flag);
+struct ImBuf *ED_view3d_draw_offscreen_imbuf_simple(Scene *scene, int width, int height, unsigned int flag, int drawtype);
void view3d_clipping_local(struct RegionView3D *rv3d, float mat[][4]);
diff --git a/source/blender/editors/include/UI_icons.h b/source/blender/editors/include/UI_icons.h
index 6a139b124a6..3e8420df7eb 100644
--- a/source/blender/editors/include/UI_icons.h
+++ b/source/blender/editors/include/UI_icons.h
@@ -345,8 +345,8 @@ DEF_ICON(ICON_MESH_UVSPHERE)
DEF_ICON(ICON_MESH_ICOSPHERE)
DEF_ICON(ICON_MESH_GRID)
DEF_ICON(ICON_MESH_MONKEY)
-DEF_ICON(ICON_MESH_TUBE)
-DEF_ICON(ICON_MESH_DONUT)
+DEF_ICON(ICON_MESH_CYLINDER)
+DEF_ICON(ICON_MESH_TORUS)
DEF_ICON(ICON_MESH_CONE)
DEF_ICON(ICON_BLANK610)
DEF_ICON(ICON_BLANK611)
@@ -362,16 +362,16 @@ DEF_ICON(ICON_META_PLANE)
DEF_ICON(ICON_META_CUBE)
DEF_ICON(ICON_META_BALL)
DEF_ICON(ICON_META_ELLIPSOID)
-DEF_ICON(ICON_META_TUBE)
+DEF_ICON(ICON_META_CAPSULE)
DEF_ICON(ICON_BLANK625)
/* PRIMITIVES */
DEF_ICON(ICON_SURFACE_NCURVE)
DEF_ICON(ICON_SURFACE_NCIRCLE)
DEF_ICON(ICON_SURFACE_NSURFACE)
-DEF_ICON(ICON_SURFACE_NTUBE)
+DEF_ICON(ICON_SURFACE_NCYLINDER)
DEF_ICON(ICON_SURFACE_NSPHERE)
-DEF_ICON(ICON_SURFACE_NDONUT)
+DEF_ICON(ICON_SURFACE_NTORUS)
DEF_ICON(ICON_BLANK636)
DEF_ICON(ICON_BLANK637)
DEF_ICON(ICON_BLANK638)
diff --git a/source/blender/editors/include/UI_interface.h b/source/blender/editors/include/UI_interface.h
index 93e91d02599..54a627da2da 100644
--- a/source/blender/editors/include/UI_interface.h
+++ b/source/blender/editors/include/UI_interface.h
@@ -135,7 +135,7 @@ typedef struct uiLayout uiLayout;
#define UI_MAKE_RIGHT 8192
/* button align flag, for drawing groups together */
-#define UI_BUT_ALIGN (15<<14)
+#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)
@@ -146,14 +146,16 @@ typedef struct uiLayout uiLayout;
#define UI_BUT_ANIMATED (1<<20)
#define UI_BUT_ANIMATED_KEY (1<<21)
#define UI_BUT_DRIVEN (1<<22)
-#define UI_BUT_INACTIVE (1<<23)
-#define UI_BUT_LAST_ACTIVE (1<<24)
-#define UI_BUT_UNDO (1<<25)
-#define UI_BUT_IMMEDIATE (1<<26)
-#define UI_BUT_NO_TOOLTIP (1<<27)
+#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<<28) /* used to flag if color hsv-circle should keep luminance */
-#define UI_BUT_COLOR_CUBIC (1<<29) /* cubic saturation for the color wheel */
+#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
@@ -249,6 +251,9 @@ int uiGetRoundBox(void);
void uiRoundRect(float minx, float miny, float maxx, float maxy, float rad);
void uiDrawMenuBox(float minx, float miny, float maxx, float maxy, short flag, short direction);
void uiDrawBoxShadow(unsigned char alpha, float minx, float miny, float maxx, float maxy);
+void uiDrawBox(int mode, float minx, float miny, float maxx, float maxy, float rad);
+void uiDrawBoxShade(int mode, float minx, float miny, float maxx, float maxy, float rad, float shadetop, float shadedown);
+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
@@ -678,8 +683,8 @@ void uiTemplateAnyID(uiLayout *layout, struct bContext *C, struct PointerRNA *pt
char *proptypename, char *text);
void uiTemplatePathBuilder(uiLayout *layout, struct bContext *C, struct PointerRNA *ptr, char *propname,
struct PointerRNA *root_ptr, char *text);
-uiLayout *uiTemplateModifier(uiLayout *layout, struct bContext *C, struct PointerRNA *ptr, int compact);
-uiLayout *uiTemplateConstraint(uiLayout *layout, struct PointerRNA *ptr, int compact);
+uiLayout *uiTemplateModifier(uiLayout *layout, struct bContext *C, struct PointerRNA *ptr);
+uiLayout *uiTemplateConstraint(uiLayout *layout, struct PointerRNA *ptr);
void uiTemplatePreview(uiLayout *layout, struct ID *id, struct ID *parent, struct MTex *slot);
void uiTemplateColorRamp(uiLayout *layout, struct PointerRNA *ptr, char *propname, int expand);
void uiTemplateHistogram(uiLayout *layout, struct PointerRNA *ptr, char *propname, int expand);
@@ -687,7 +692,6 @@ void uiTemplateWaveform(uiLayout *layout, struct PointerRNA *ptr, char *propname
void uiTemplateVectorscope(uiLayout *layout, struct PointerRNA *ptr, char *propname, int expand);
void uiTemplateCurveMapping(uiLayout *layout, struct PointerRNA *ptr, char *propname, int type, int levels, int brush);
void uiTemplateColorWheel(uiLayout *layout, struct PointerRNA *ptr, char *propname, int value_slider, int lock, int lock_luminosity, int cubic);
-void uiTemplateTriColorSet(uiLayout *layout, struct PointerRNA *ptr, char *propname);
void uiTemplateLayers(uiLayout *layout, struct PointerRNA *ptr, char *propname,
PointerRNA *used_ptr, char *used_propname, int active_layer);
void uiTemplateImage(uiLayout *layout, struct bContext *C, struct PointerRNA *ptr, char *propname, struct PointerRNA *userptr, int compact);
@@ -733,7 +737,8 @@ void uiItemMenuEnumR(uiLayout *layout, struct PointerRNA *ptr, char *propname, c
void UI_buttons_operatortypes(void);
/* Helpers for Operators */
-void uiAnimContextProperty(const struct bContext *C, struct PointerRNA *ptr, struct PropertyRNA **prop, int *index);
+void uiContextActiveProperty(const struct bContext *C, struct PointerRNA *ptr, struct PropertyRNA **prop, int *index);
+void uiContextAnimUpdate(const struct bContext *C);
void uiFileBrowseContextProperty(const struct bContext *C, struct PointerRNA *ptr, struct PropertyRNA **prop);
void uiIDContextProperty(struct bContext *C, struct PointerRNA *ptr, struct PropertyRNA **prop);
diff --git a/source/blender/editors/interface/Makefile b/source/blender/editors/interface/Makefile
index 115740a8403..7b5d4e60fbd 100644
--- a/source/blender/editors/interface/Makefile
+++ b/source/blender/editors/interface/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2007 Blender Foundation
# All rights reserved.
diff --git a/source/blender/editors/interface/SConscript b/source/blender/editors/interface/SConscript
index 09868345fc4..81964a661a4 100644
--- a/source/blender/editors/interface/SConscript
+++ b/source/blender/editors/interface/SConscript
@@ -4,7 +4,7 @@ Import ('env')
sources = env.Glob('*.c')
for source in env.Glob('*_api.c'):
- sources.remove(source)
+ sources.remove(source)
incs = '../include ../../blenlib ../../blenfont ../../blenkernel ../../makesdna ../../imbuf'
incs += ' ../../makesrna ../../windowmanager #/intern/guardedalloc ../../gpu'
@@ -17,6 +17,6 @@ if env['WITH_BF_INTERNATIONAL']:
defs.append('INTERNATIONAL')
if not env['WITH_BF_PYTHON']:
- defs.append('DISABLE_PYTHON')
-
+ defs.append('DISABLE_PYTHON')
+
env.BlenderLib ( 'bf_editors_interface', sources, Split(incs), defs, libtype=['core'], priority=[110] )
diff --git a/source/blender/editors/interface/interface.c b/source/blender/editors/interface/interface.c
index 38c11e507cc..4f9393fb862 100644
--- a/source/blender/editors/interface/interface.c
+++ b/source/blender/editors/interface/interface.c
@@ -41,15 +41,10 @@
#include "BLI_dynstr.h"
#include "BKE_context.h"
-#include "BKE_idprop.h"
#include "BKE_library.h"
-#include "BKE_screen.h"
-#include "BKE_texture.h"
-#include "BKE_utildefines.h"
#include "BKE_unit.h"
#include "BIF_gl.h"
-#include "BIF_glutil.h"
#include "BLF_api.h"
@@ -758,7 +753,10 @@ void uiDrawBlock(const bContext *C, uiBlock *block)
/* widgets */
for(but= block->buttons.first; but; but= but->next) {
ui_but_to_pixelrect(&rect, ar, block, but);
- if(!(but->flag & UI_HIDDEN))
+ if(!(but->flag & UI_HIDDEN) &&
+ /* XXX: figure out why invalid coordinates happen when closing render window */
+ /* and material preview is redrawn in main window (temp fix for bug #23848) */
+ rect.xmin < rect.xmax && rect.ymin < rect.ymax)
ui_draw_but(C, ar, &style, but, &rect);
}
@@ -813,7 +811,13 @@ static void ui_is_but_sel(uiBut *but)
break;
case ROW:
case LISTROW:
- if(value == but->hardmax) push= 1;
+ /* support for rna enum buts */
+ if(but->rnaprop && (RNA_property_flag(but->rnaprop) & PROP_ENUM_FLAG)) {
+ if((int)value & (int)but->hardmax) push= 1;
+ }
+ else {
+ if(value == but->hardmax) push= 1;
+ }
break;
case COL:
push= 2;
@@ -1239,11 +1243,13 @@ int ui_is_but_unit(uiBut *but)
if(but->rnaprop==NULL)
return 0;
-
+
unit_type = RNA_SUBTYPE_UNIT(RNA_property_subtype(but->rnaprop));
-
+
+#if 0 // removed so angle buttons get correct snapping
if (scene->unit.flag & USER_UNIT_ROT_RADIANS && unit_type == PROP_UNIT_ROTATION)
return 0;
+#endif
/* for now disable time unit conversion */
if (unit_type == PROP_UNIT_TIME)
@@ -1355,7 +1361,14 @@ void ui_set_but_val(uiBut *but, double value)
RNA_property_float_set(&but->rnapoin, prop, value);
break;
case PROP_ENUM:
- RNA_property_enum_set(&but->rnapoin, prop, value);
+ if(RNA_property_flag(prop) & PROP_ENUM_FLAG) {
+ int ivalue= (int)value;
+ ivalue ^= RNA_property_enum_get(&but->rnapoin, prop); /* toggle for enum/flag buttons */
+ RNA_property_enum_set(&but->rnapoin, prop, ivalue);
+ }
+ else {
+ RNA_property_enum_set(&but->rnapoin, prop, value);
+ }
break;
default:
break;
@@ -1448,6 +1461,23 @@ static double ui_get_but_scale_unit(uiBut *but, double value)
}
}
+/* str will be overwritten */
+void ui_convert_to_unit_alt_name(uiBut *but, char *str, int maxlen)
+{
+ if(ui_is_but_unit(but)) {
+ int unit_type= RNA_SUBTYPE_UNIT_VALUE(RNA_property_subtype(but->rnaprop));
+ char *orig_str;
+ Scene *scene= CTX_data_scene((bContext *)but->block->evil_C);
+
+ orig_str= MEM_callocN(sizeof(char)*maxlen + 1, "textedit sub str");
+ memcpy(orig_str, str, maxlen);
+
+ bUnit_ToUnitAltName(str, maxlen, orig_str, scene->unit.system, unit_type);
+
+ MEM_freeN(orig_str);
+ }
+}
+
static void ui_get_but_string_unit(uiBut *but, char *str, int len_max, double value, int pad)
{
Scene *scene= CTX_data_scene((bContext *)but->block->evil_C);
@@ -1770,9 +1800,11 @@ static void ui_free_but(const bContext *C, uiBut *but)
}
if(but->func_argN) MEM_freeN(but->func_argN);
if(but->active) {
- /* XXX solve later, buttons should be free-able without context? */
+ /* XXX solve later, buttons should be free-able without context ideally,
+ however they may have open tooltips or popup windows, which need to
+ be closed using a context pointer */
if(C)
- ui_button_active_cancel(C, but);
+ ui_button_active_free(C, but);
else
if(but->active)
MEM_freeN(but->active);
@@ -2533,8 +2565,10 @@ uiBut *ui_def_but_rna(uiBlock *block, int type, int retval, char *str, short x1,
}
}
}
- else
+ else {
+ printf("ui_def_but_rna: property not found: %s.%s\n", RNA_struct_identifier(ptr->type), propname);
str= (char*)propname;
+ }
/* now create button */
but= ui_def_but(block, type, retval, str, x1, y1, x2, y2, NULL, min, max, a1, a2, tip);
diff --git a/source/blender/editors/interface/interface_anim.c b/source/blender/editors/interface/interface_anim.c
index 4108e1c8532..2a30a36ffe0 100644
--- a/source/blender/editors/interface/interface_anim.c
+++ b/source/blender/editors/interface/interface_anim.c
@@ -3,7 +3,6 @@
#include <stdlib.h>
#include <string.h>
-#include "MEM_guardedalloc.h"
#include "DNA_anim_types.h"
#include "DNA_scene_types.h"
@@ -12,7 +11,6 @@
#include "BLI_listbase.h"
#include "BLI_string.h"
-#include "BKE_animsys.h"
#include "BKE_context.h"
#include "BKE_fcurve.h"
@@ -116,74 +114,50 @@ void ui_but_anim_autokey(bContext *C, uiBut *but, Scene *scene, float cfra)
}
}
-void uiAnimContextProperty(const bContext *C, struct PointerRNA *ptr, struct PropertyRNA **prop, int *index)
-{
- ARegion *ar= CTX_wm_region(C);
- uiBlock *block;
- uiBut *but;
-
- memset(ptr, 0, sizeof(*ptr));
- *prop= NULL;
- *index= 0;
-
- if(ar) {
- for(block=ar->uiblocks.first; block; block=block->next) {
- for(but=block->buttons.first; but; but= but->next) {
- if((but->active || but->flag & UI_BUT_LAST_ACTIVE) && but->rnapoin.id.data) {
- *ptr= but->rnapoin;
- *prop= but->rnaprop;
- *index= but->rnaindex;
- return;
- }
- }
- }
- }
-}
-
void ui_but_anim_insert_keyframe(bContext *C)
{
- /* this operator calls uiAnimContextProperty above */
+ /* this operator calls uiContextActiveProperty */
WM_operator_name_call(C, "ANIM_OT_keyframe_insert_button", WM_OP_INVOKE_DEFAULT, NULL);
}
void ui_but_anim_delete_keyframe(bContext *C)
{
- /* this operator calls uiAnimContextProperty above */
+ /* this operator calls uiContextActiveProperty */
WM_operator_name_call(C, "ANIM_OT_keyframe_delete_button", WM_OP_INVOKE_DEFAULT, NULL);
}
void ui_but_anim_add_driver(bContext *C)
{
- /* this operator calls uiAnimContextProperty above */
+ /* this operator calls uiContextActiveProperty */
WM_operator_name_call(C, "ANIM_OT_driver_button_add", WM_OP_INVOKE_DEFAULT, NULL);
}
void ui_but_anim_remove_driver(bContext *C)
{
- /* this operator calls uiAnimContextProperty above */
+ /* this operator calls uiContextActiveProperty */
WM_operator_name_call(C, "ANIM_OT_driver_button_remove", WM_OP_INVOKE_DEFAULT, NULL);
}
void ui_but_anim_copy_driver(bContext *C)
{
- /* this operator calls uiAnimContextProperty above */
+ /* this operator calls uiContextActiveProperty */
WM_operator_name_call(C, "ANIM_OT_copy_driver_button", WM_OP_INVOKE_DEFAULT, NULL);
}
void ui_but_anim_paste_driver(bContext *C)
{
- /* this operator calls uiAnimContextProperty above */
+ /* this operator calls uiContextActiveProperty */
WM_operator_name_call(C, "ANIM_OT_paste_driver_button", WM_OP_INVOKE_DEFAULT, NULL);
}
void ui_but_anim_add_keyingset(bContext *C)
{
- /* this operator calls uiAnimContextProperty above */
+ /* this operator calls uiContextActiveProperty */
WM_operator_name_call(C, "ANIM_OT_keyingset_button_add", WM_OP_INVOKE_DEFAULT, NULL);
}
void ui_but_anim_remove_keyingset(bContext *C)
{
- /* this operator calls uiAnimContextProperty above */
+ /* this operator calls uiContextActiveProperty */
WM_operator_name_call(C, "ANIM_OT_keyingset_button_remove", WM_OP_INVOKE_DEFAULT, NULL);
}
diff --git a/source/blender/editors/interface/interface_draw.c b/source/blender/editors/interface/interface_draw.c
index 0dd333dc387..cf6970dc59f 100644
--- a/source/blender/editors/interface/interface_draw.c
+++ b/source/blender/editors/interface/interface_draw.c
@@ -35,7 +35,6 @@
#include "BLI_math.h"
#include "BKE_colortools.h"
-#include "BKE_global.h"
#include "BKE_texture.h"
#include "BKE_utildefines.h"
@@ -49,6 +48,7 @@
#include "UI_interface.h"
+/* own include */
#include "interface_intern.h"
#define UI_RB_ALPHA 16
@@ -77,7 +77,7 @@ int uiGetRoundBox(void)
return roundboxtype;
}
-void gl_round_box(int mode, float minx, float miny, float maxx, float maxy, float rad)
+void uiDrawBox(int mode, float minx, float miny, float maxx, float maxy, float rad)
{
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}};
@@ -147,7 +147,7 @@ static void round_box_shade_col(float *col1, float *col2, float fac)
/* linear horizontal shade within button or in outline */
/* view2d scrollers use it */
-void gl_round_box_shade(int mode, float minx, float miny, float maxx, float maxy, float rad, float shadetop, float shadedown)
+void uiDrawBoxShade(int mode, float minx, float miny, float maxx, float maxy, float rad, float shadetop, float shadedown)
{
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}};
@@ -254,7 +254,7 @@ void gl_round_box_shade(int mode, float minx, float miny, float maxx, float maxy
/* linear vertical shade within button or in outline */
/* view2d scrollers use it */
-void gl_round_box_vertical_shade(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}};
@@ -372,7 +372,7 @@ void uiRoundRect(float minx, float miny, float maxx, float maxy, float rad)
glEnable( GL_LINE_SMOOTH );
glEnable( GL_BLEND );
- gl_round_box(GL_LINE_LOOP, minx, miny, maxx, maxy, rad);
+ uiDrawBox(GL_LINE_LOOP, minx, miny, maxx, maxy, rad);
glDisable( GL_BLEND );
glDisable( GL_LINE_SMOOTH );
@@ -398,7 +398,7 @@ void uiRoundRectFakeAA(float minx, float miny, float maxx, float maxy, float rad
/* draw lots of lines on top of each other */
for (i=passes; i>=(-passes); i--) {
- gl_round_box(GL_LINE_LOOP, minx, miny, maxx, maxy, rad+(i*raddiff));
+ uiDrawBox(GL_LINE_LOOP, minx, miny, maxx, maxy, rad+(i*raddiff));
}
glDisable( GL_BLEND );
@@ -420,13 +420,13 @@ void uiRoundBox(float minx, float miny, float maxx, float maxy, float rad)
}
/* solid part */
- gl_round_box(GL_POLYGON, minx, miny, maxx, maxy, rad);
+ uiDrawBox(GL_POLYGON, minx, miny, maxx, maxy, rad);
/* set antialias line */
glEnable( GL_LINE_SMOOTH );
glEnable( GL_BLEND );
- gl_round_box(GL_LINE_LOOP, minx, miny, maxx, maxy, rad);
+ uiDrawBox(GL_LINE_LOOP, minx, miny, maxx, maxy, rad);
glDisable( GL_BLEND );
glDisable( GL_LINE_SMOOTH );
@@ -711,7 +711,7 @@ static void draw_scope_end(rctf *rect, GLint *scissor)
/* outline */
glColor4f(0.f, 0.f, 0.f, 0.5f);
uiSetRoundBox(15);
- gl_round_box(GL_LINE_LOOP, rect->xmin-1, rect->ymin, rect->xmax+1, rect->ymax+1, 3.0f);
+ uiDrawBox(GL_LINE_LOOP, rect->xmin-1, rect->ymin, rect->xmax+1, rect->ymax+1, 3.0f);
}
void histogram_draw_one(float r, float g, float b, float alpha, float x, float y, float w, float h, float *data, int res)
@@ -772,7 +772,7 @@ void ui_draw_but_HISTOGRAM(ARegion *ar, uiBut *but, uiWidgetColors *wcol, rcti *
glColor4f(0.f, 0.f, 0.f, 0.3f);
uiSetRoundBox(15);
- gl_round_box(GL_POLYGON, rect.xmin-1, rect.ymin-1, rect.xmax+1, rect.ymax+1, 3.0f);
+ uiDrawBox(GL_POLYGON, rect.xmin-1, rect.ymin-1, rect.xmax+1, rect.ymax+1, 3.0f);
glColor4f(1.f, 1.f, 1.f, 0.08f);
/* draw grid lines here */
@@ -841,7 +841,7 @@ void ui_draw_but_WAVEFORM(ARegion *ar, uiBut *but, uiWidgetColors *wcol, rcti *r
glColor4f(0.f, 0.f, 0.f, 0.3f);
uiSetRoundBox(15);
- gl_round_box(GL_POLYGON, rect.xmin-1, rect.ymin-1, rect.xmax+1, rect.ymax+1, 3.0f);
+ uiDrawBox(GL_POLYGON, rect.xmin-1, rect.ymin-1, rect.xmax+1, rect.ymax+1, 3.0f);
/* need scissor test, waveform can draw outside of boundary */
@@ -1052,7 +1052,7 @@ void ui_draw_but_VECTORSCOPE(ARegion *ar, uiBut *but, uiWidgetColors *wcol, rcti
glColor4f(0.f, 0.f, 0.f, 0.3f);
uiSetRoundBox(15);
- gl_round_box(GL_POLYGON, rect.xmin-1, rect.ymin-1, rect.xmax+1, rect.ymax+1, 3.0f);
+ uiDrawBox(GL_POLYGON, rect.xmin-1, rect.ymin-1, rect.xmax+1, rect.ymax+1, 3.0f);
/* need scissor test, hvectorscope can draw outside of boundary */
glGetIntegerv(GL_VIEWPORT, scissor);
@@ -1147,7 +1147,7 @@ void ui_draw_but_COLORBAND(uiBut *but, uiWidgetColors *wcol, rcti *rect)
glColor4fv( &cbd->r );
glVertex2fv(v1); glVertex2fv(v2);
- for( a = 1; a < sizex; a++ ) {
+ for( a = 1; a <= sizex; a++ ) {
pos = ((float)a) / (sizex-1);
do_colorband( coba, pos, colf );
if (but->block->color_profile != BLI_PR_NONE)
@@ -1164,19 +1164,8 @@ void ui_draw_but_COLORBAND(uiBut *but, uiWidgetColors *wcol, rcti *rect)
glDisable(GL_BLEND);
/* outline */
- v1[0]= x1; v1[1]= y1;
-
- cpack(0x0);
- glBegin(GL_LINE_LOOP);
- glVertex2fv(v1);
- v1[0]+= sizex;
- glVertex2fv(v1);
- v1[1]+= sizey;
- glVertex2fv(v1);
- v1[0]-= sizex;
- glVertex2fv(v1);
- glEnd();
-
+ glColor4f(0.0, 0.0, 0.0, 1.0);
+ fdrawbox(x1, y1, x1+sizex, y1+sizey);
/* help lines */
v1[0]= v2[0]=v3[0]= x1;
@@ -1232,6 +1221,7 @@ void ui_draw_but_COLORBAND(uiBut *but, uiWidgetColors *wcol, rcti *rect)
}
}
glEnd();
+
}
void ui_draw_but_NORMAL(uiBut *but, uiWidgetColors *wcol, rcti *rect)
@@ -1248,7 +1238,7 @@ void ui_draw_but_NORMAL(uiBut *but, uiWidgetColors *wcol, rcti *rect)
/* backdrop */
glColor3ubv((unsigned char*)wcol->inner);
uiSetRoundBox(15);
- gl_round_box(GL_POLYGON, rect->xmin, rect->ymin, rect->xmax, rect->ymax, 5.0f);
+ uiDrawBox(GL_POLYGON, rect->xmin, rect->ymin, rect->xmax, rect->ymax, 5.0f);
/* sphere color */
glMaterialfv(GL_FRONT, GL_DIFFUSE, diffn);
@@ -1595,13 +1585,13 @@ void ui_dropshadow(rctf *rct, float radius, float aspect, int select)
glColor4ub(0, 0, 0, alpha);
alpha+= 2;
- gl_round_box(GL_POLYGON, rct->xmin - a, rct->ymin - a, rct->xmax + a, rct->ymax-10.0f + a, rad+a);
+ uiDrawBox(GL_POLYGON, rct->xmin - a, rct->ymin - a, rct->xmax + a, rct->ymax-10.0f + a, rad+a);
}
/* outline emphasis */
glEnable( GL_LINE_SMOOTH );
glColor4ub(0, 0, 0, 100);
- gl_round_box(GL_LINE_LOOP, rct->xmin-0.5f, rct->ymin-0.5f, rct->xmax+0.5f, rct->ymax+0.5f, radius);
+ uiDrawBox(GL_LINE_LOOP, rct->xmin-0.5f, rct->ymin-0.5f, rct->xmax+0.5f, rct->ymax+0.5f, radius);
glDisable( GL_LINE_SMOOTH );
glDisable(GL_BLEND);
diff --git a/source/blender/editors/interface/interface_handlers.c b/source/blender/editors/interface/interface_handlers.c
index f617cc4ae8d..5bcde844d45 100644
--- a/source/blender/editors/interface/interface_handlers.c
+++ b/source/blender/editors/interface/interface_handlers.c
@@ -44,7 +44,7 @@
#include "BKE_idprop.h"
#include "BKE_report.h"
#include "BKE_texture.h"
-#include "BKE_utildefines.h"
+#include "BKE_unit.h"
#include "ED_screen.h"
#include "ED_util.h"
@@ -243,6 +243,20 @@ static int ui_is_a_warp_but(uiBut *but)
return FALSE;
}
+/* file selectors are exempt from utf-8 checks */
+static int ui_is_utf8_but(uiBut *but)
+{
+ if (but->rnaprop) {
+ int subtype= RNA_property_subtype(but->rnaprop);
+
+ if(ELEM3(subtype, PROP_FILEPATH, PROP_DIRPATH, PROP_FILENAME)) {
+ return TRUE;
+ }
+ }
+
+ return !(but->flag & UI_BUT_NO_UTF8);
+}
+
/* ********************** button apply/revert ************************/
static ListBase UIAfterFuncs = {NULL, NULL};
@@ -1542,7 +1556,8 @@ static void ui_textedit_begin(bContext *C, uiBut *but, uiHandleButtonData *data)
int i;
for(i=0; data->str[i]; i++) {
if(!isascii(data->str[i])) {
- data->str[i]= '\0';
+ /* no stripping actually: just convert to alt name */
+ ui_convert_to_unit_alt_name(but, data->str, data->maxlen);
break;
}
}
@@ -1573,6 +1588,15 @@ static void ui_textedit_begin(bContext *C, uiBut *but, uiHandleButtonData *data)
static void ui_textedit_end(bContext *C, uiBut *but, uiHandleButtonData *data)
{
if(but) {
+ if(ui_is_utf8_but(but)) {
+ int strip= BLI_utf8_invalid_strip(but->editstr, strlen(but->editstr));
+ /* not a file?, strip non utf-8 chars */
+ if(strip) {
+ /* wont happen often so isnt that annoying to keep it here for a while */
+ printf("invalid utf8 - stripped chars %d\n", strip);
+ }
+ }
+
if(data->searchbox) {
if(data->cancel==0)
ui_searchbox_apply(but, data->searchbox);
@@ -2172,26 +2196,47 @@ static int ui_do_but_EXIT(bContext *C, uiBut *but, uiHandleButtonData *data, wmE
}
/* var names match ui_numedit_but_NUM */
-static float ui_numedit_apply_snapf(float tempf, float softmin, float softmax, float softrange, int snap)
+static float ui_numedit_apply_snapf(uiBut *but, float tempf, float softmin, float softmax, float softrange, int snap)
{
- if(tempf==softmin || tempf==softmax)
- return tempf;
+ if(tempf==softmin || tempf==softmax || snap==0) {
+ /* pass */
+ }
+ else {
+ float fac= 1.0f;
+
+ if(ui_is_but_unit(but)) {
+ Scene *scene= CTX_data_scene((bContext *)but->block->evil_C);
+ int unit_type = RNA_SUBTYPE_UNIT_VALUE(RNA_property_subtype(but->rnaprop));
+
+ if(bUnit_IsValid(scene->unit.system, unit_type)) {
+ fac= (float)bUnit_BaseScalar(scene->unit.system, unit_type);
+ if(ELEM3(unit_type, B_UNIT_LENGTH, B_UNIT_AREA, B_UNIT_VOLUME)) {
+ fac /= scene->unit.scale_length;
+ }
+ }
+ }
- switch(snap) {
- case 0:
- break;
- case 1:
- if(tempf==softmin || tempf==softmax) { }
- else if(softrange < 2.10) tempf= 0.1*floor(10*tempf);
- else if(softrange < 21.0) tempf= floor(tempf);
- else tempf= 10.0*floor(tempf/10.0);
- break;
- case 2:
- if(tempf==softmin || tempf==softmax) { }
- else if(softrange < 2.10) tempf= 0.01*floor(100.0*tempf);
- else if(softrange < 21.0) tempf= 0.1*floor(10.0*tempf);
- else tempf= floor(tempf);
- break;
+ if(fac != 1.0f) {
+ /* snap in unit-space */
+ tempf /= fac;
+ softmin /= fac;
+ softmax /= fac;
+ softrange /= fac;
+ }
+
+ if(snap==1) {
+ if(softrange < 2.10) tempf= 0.1*floor(10*tempf);
+ else if(softrange < 21.0) tempf= floor(tempf);
+ else tempf= 10.0*floor(tempf/10.0);
+ }
+ else if(snap==2) {
+ if(softrange < 2.10) tempf= 0.01*floor(100.0*tempf);
+ else if(softrange < 21.0) tempf= 0.1*floor(10.0*tempf);
+ else tempf= floor(tempf);
+ }
+
+ if(fac != 1.0f)
+ tempf *= fac;
}
return tempf;
@@ -2244,7 +2289,7 @@ static int ui_numedit_but_NUM(uiBut *but, uiHandleButtonData *data, float fac, i
if(ui_is_but_float(but)) {
fac *= 0.01*but->a1;
tempf = data->startvalue + ((mx - data->dragstartx) * fac);
- tempf= ui_numedit_apply_snapf(tempf, softmin, softmax, softrange, snap);
+ tempf= ui_numedit_apply_snapf(but, tempf, softmin, softmax, softrange, snap);
#if 1 /* fake moving the click start, nicer for dragging back after passing the limit */
if(tempf < softmin) {
@@ -2337,7 +2382,7 @@ static int ui_numedit_but_NUM(uiBut *but, uiHandleButtonData *data, float fac, i
}
else {
temp= 0;
- tempf= ui_numedit_apply_snapf(tempf, softmin, softmax, softrange, snap);
+ tempf= ui_numedit_apply_snapf(but, tempf, softmin, softmax, softrange, snap);
CLAMP(tempf, softmin, softmax);
@@ -4210,6 +4255,7 @@ static int ui_but_menu(bContext *C, uiBut *but)
static int ui_do_button(bContext *C, uiBlock *block, uiBut *but, wmEvent *event)
{
+ Scene *scene= CTX_data_scene(C);
uiHandleButtonData *data;
int retval;
@@ -4263,7 +4309,7 @@ static int ui_do_button(bContext *C, uiBlock *block, uiBut *but, wmEvent *event)
return WM_UI_HANDLER_BREAK;
}
/* reset to default */
- else if(event->type == ZEROKEY && event->val == KM_PRESS) {
+ else if(ELEM(event->type, ZEROKEY,PAD0) && event->val == KM_PRESS) {
if (!(ELEM3(but->type, HSVCIRCLE, HSVCUBE, HISTOGRAM)))
ui_set_but_default(C, but);
}
@@ -4778,7 +4824,7 @@ static void button_activate_init(bContext *C, ARegion *ar, uiBut *but, uiButtonA
button_activate_state(C, but, BUTTON_STATE_WAIT_FLASH);
}
-static void button_activate_exit(bContext *C, uiHandleButtonData *data, uiBut *but, int mousemove)
+static void button_activate_exit(bContext *C, uiHandleButtonData *data, uiBut *but, int mousemove, int onfree)
{
uiBlock *block= but->block;
uiBut *bt;
@@ -4788,7 +4834,8 @@ static void button_activate_exit(bContext *C, uiHandleButtonData *data, uiBut *b
button_activate_state(C, but, BUTTON_STATE_EXIT);
/* apply the button action or value */
- ui_apply_button(C, block, but, data, 0);
+ if(!onfree)
+ ui_apply_button(C, block, but, data, 0);
/* if this button is in a menu, this will set the button return
* value to the button value and the menu return value to ok, the
@@ -4803,7 +4850,7 @@ static void button_activate_exit(bContext *C, uiHandleButtonData *data, uiBut *b
}
}
- if(!data->cancel) {
+ if(!onfree && !data->cancel) {
/* autokey & undo push */
ui_apply_autokey_undo(C, but);
@@ -4836,7 +4883,8 @@ static void button_activate_exit(bContext *C, uiHandleButtonData *data, uiBut *b
but->active= NULL;
but->flag &= ~(UI_ACTIVE|UI_SELECT);
but->flag |= UI_BUT_LAST_ACTIVE;
- ui_check_but(but);
+ if(!onfree)
+ ui_check_but(but);
/* adds empty mousemove in queue for re-init handler, in case mouse is
* still over a button. we cannot just check for this ourselfs because
@@ -4845,7 +4893,7 @@ static void button_activate_exit(bContext *C, uiHandleButtonData *data, uiBut *b
WM_event_add_mousemove(C);
}
-void ui_button_active_cancel(const bContext *C, uiBut *but)
+void ui_button_active_free(const bContext *C, uiBut *but)
{
uiHandleButtonData *data;
@@ -4855,7 +4903,99 @@ void ui_button_active_cancel(const bContext *C, uiBut *but)
if(but->active) {
data= but->active;
data->cancel= 1;
- button_activate_exit((bContext*)C, data, but, 0);
+ button_activate_exit((bContext*)C, data, but, 0, 1);
+ }
+}
+
+/* helper function for insert keyframe, reset to default, etc operators */
+void uiContextActiveProperty(const bContext *C, struct PointerRNA *ptr, struct PropertyRNA **prop, int *index)
+{
+ ARegion *ar= CTX_wm_region(C);
+ uiBlock *block;
+ uiBut *but, *activebut;
+
+ memset(ptr, 0, sizeof(*ptr));
+ *prop= NULL;
+ *index= 0;
+
+ while(ar) {
+ /* find active button */
+ activebut= NULL;
+
+ for(block=ar->uiblocks.first; block; block=block->next) {
+ for(but=block->buttons.first; but; but= but->next) {
+ if(but->active)
+ activebut= but;
+ else if(!activebut && (but->flag & UI_BUT_LAST_ACTIVE))
+ activebut= but;
+ }
+ }
+
+ if(activebut) {
+ if(activebut->rnapoin.data) {
+ /* found RNA button */
+ *ptr= activebut->rnapoin;
+ *prop= activebut->rnaprop;
+ *index= activebut->rnaindex;
+ return;
+ }
+ else {
+ /* recurse into opened menu */
+ uiHandleButtonData *data= activebut->active;
+ if(data && data->menu)
+ ar = data->menu->region;
+ else
+ return;
+ }
+ }
+ else {
+ /* no active button */
+ return;
+ }
+ }
+}
+
+/* helper function for insert keyframe, reset to default, etc operators */
+void uiContextAnimUpdate(const bContext *C)
+{
+ Scene *scene= CTX_data_scene(C);
+ ARegion *ar= CTX_wm_region(C);
+ uiBlock *block;
+ uiBut *but, *activebut;
+
+ while(ar) {
+ /* find active button */
+ activebut= NULL;
+
+ for(block=ar->uiblocks.first; block; block=block->next) {
+ for(but=block->buttons.first; but; but= but->next) {
+ ui_but_anim_flag(but, (scene)? scene->r.cfra: 0.0f);
+
+ if(but->active)
+ activebut= but;
+ else if(!activebut && (but->flag & UI_BUT_LAST_ACTIVE))
+ activebut= but;
+ }
+ }
+
+ if(activebut) {
+ if(activebut->rnapoin.data) {
+ /* found RNA button */
+ return;
+ }
+ else {
+ /* recurse into opened menu */
+ uiHandleButtonData *data= activebut->active;
+ if(data && data->menu)
+ ar = data->menu->region;
+ else
+ return;
+ }
+ }
+ else {
+ /* no active button */
+ return;
+ }
}
}
@@ -4921,7 +5061,7 @@ static void ui_handle_button_activate(bContext *C, ARegion *ar, uiBut *but, uiBu
if(oldbut) {
data= oldbut->active;
data->cancel= 1;
- button_activate_exit(C, data, oldbut, 0);
+ button_activate_exit(C, data, oldbut, 0, 0);
}
button_activate_init(C, ar, but, type);
@@ -5079,7 +5219,7 @@ static int ui_handle_button_event(bContext *C, wmEvent *event, uiBut *but)
postbut= data->postbut;
posttype= data->posttype;
- button_activate_exit(C, data, but, (postbut == NULL));
+ button_activate_exit(C, data, but, (postbut == NULL), 0);
/* for jumping to the next button with tab while text editing */
if(postbut)
@@ -5183,7 +5323,7 @@ static void ui_handle_button_return_submenu(bContext *C, wmEvent *event, uiBut *
if(menu->menuretval != UI_RETURN_OK)
data->cancel= 1;
- button_activate_exit(C, data, but, 1);
+ button_activate_exit(C, data, but, 1, 0);
}
else if(menu->menuretval == UI_RETURN_OUT) {
if(event->type==MOUSEMOVE && ui_mouse_inside_button(data->region, but, event->x, event->y)) {
@@ -5197,7 +5337,7 @@ static void ui_handle_button_return_submenu(bContext *C, wmEvent *event, uiBut *
}
else {
data->cancel= 1;
- button_activate_exit(C, data, but, 1);
+ button_activate_exit(C, data, but, 1, 0);
}
}
}
@@ -5357,20 +5497,44 @@ int ui_handle_menu_event(bContext *C, wmEvent *event, uiPopupBlockHandle *menu,
if(event->val==KM_PRESS) {
but= ui_but_find_activated(ar);
if(but) {
- if(ELEM(event->type, DOWNARROWKEY, WHEELDOWNMOUSE))
- but= ui_but_next(but);
- else
- but= ui_but_prev(but);
+ /* is there a situation where UI_LEFT or UI_RIGHT would also change navigation direction? */
+ /* UI_TOP and UI_DOWN are inconsistant - should be UI_UP and UI_DOWN or UI_TOP and UI_BOTTOM */
+ if( ((ELEM(event->type, DOWNARROWKEY, WHEELDOWNMOUSE)) && (block->direction & UI_DOWN)) ||
+ ((ELEM(event->type, UPARROWKEY, WHEELUPMOUSE)) && (block->direction & UI_TOP))
+ ) {
+ /* the following is just a hack - uiBut->type set to BUT and BUTM have there menus built
+ * opposite ways - this should be changed so that all popup-menus use the same uiBlock->direction */
+ if(but->type & BUT)
+ but= ui_but_next(but);
+ else
+ but= ui_but_prev(but);
+ }
+ else {
+ if(but->type & BUT)
+ but= ui_but_prev(but);
+ else
+ but= ui_but_next(but);
+ }
if(but)
ui_handle_button_activate(C, ar, but, BUTTON_ACTIVATE);
}
if(!but) {
- if(ELEM(event->type, UPARROWKEY, WHEELUPMOUSE))
- bt= ui_but_last(block);
- else
- bt= ui_but_first(block);
+ if( ((ELEM(event->type, UPARROWKEY, WHEELUPMOUSE)) && (block->direction & UI_DOWN)) ||
+ ((ELEM(event->type, DOWNARROWKEY, WHEELDOWNMOUSE)) && (block->direction & UI_TOP))
+ ) {
+ if(ui_but_first(block)->type & BUT)
+ bt= ui_but_last(block);
+ else
+ bt= ui_but_first(block);
+ }
+ else {
+ if(ui_but_first(block)->type & BUT)
+ bt= ui_but_first(block);
+ else
+ bt= ui_but_last(block);
+ }
if(bt)
ui_handle_button_activate(C, ar, bt, BUTTON_ACTIVATE);
diff --git a/source/blender/editors/interface/interface_icons.c b/source/blender/editors/interface/interface_icons.c
index 02586a86d1e..499c676bf6f 100644
--- a/source/blender/editors/interface/interface_icons.c
+++ b/source/blender/editors/interface/interface_icons.c
@@ -47,23 +47,19 @@
#include "DNA_brush_types.h"
#include "DNA_object_types.h"
#include "DNA_screen_types.h"
-#include "DNA_userdef_types.h"
#include "RNA_access.h"
#include "RNA_enum_types.h"
#include "BKE_context.h"
#include "BKE_global.h"
-#include "BKE_image.h"
#include "BKE_icons.h"
-#include "BKE_brush.h"
#include "BKE_utildefines.h"
#include "IMB_imbuf.h"
#include "IMB_imbuf_types.h"
#include "BIF_gl.h"
-#include "BIF_glutil.h"
#include "ED_datafiles.h"
#include "ED_render.h"
@@ -1031,11 +1027,11 @@ static int ui_id_brush_get_icon(bContext *C, ID *id, int preview)
EnumPropertyItem *items;
int tool;
- if(ob->mode & OB_MODE_SCULPT) {
+ if(ob && (ob->mode & OB_MODE_SCULPT)) {
items = brush_sculpt_tool_items;
tool = br->sculpt_tool;
}
- else if(ob->mode & (OB_MODE_VERTEX_PAINT|OB_MODE_WEIGHT_PAINT)) {
+ else if(ob && (ob->mode & (OB_MODE_VERTEX_PAINT|OB_MODE_WEIGHT_PAINT))) {
items = brush_vertexpaint_tool_items;
tool = br->vertexpaint_tool;
}
diff --git a/source/blender/editors/interface/interface_intern.h b/source/blender/editors/interface/interface_intern.h
index cb8130573fe..3873c5c9092 100644
--- a/source/blender/editors/interface/interface_intern.h
+++ b/source/blender/editors/interface/interface_intern.h
@@ -103,7 +103,7 @@ typedef enum {
#define UI_PANEL_MINY 70
/* uiBut->flag */
-#define UI_SELECT 1
+#define UI_SELECT 1 /* use when the button is pressed */
#define UI_MOUSE_OVER 2
#define UI_ACTIVE 4
#define UI_HAS_ICON 8
@@ -356,6 +356,7 @@ extern void ui_set_but_vectorf(uiBut *but, float *vec);
extern void ui_hsvcircle_vals_from_pos(float *valrad, float *valdist, rcti *rect, float mx, float my);
extern void ui_get_but_string(uiBut *but, char *str, int maxlen);
+extern void ui_convert_to_unit_alt_name(uiBut *but, char *str, int maxlen);
extern int ui_set_but_string(struct bContext *C, uiBut *but, const char *str);
extern int ui_get_but_string_max_length(uiBut *but);
@@ -440,10 +441,6 @@ extern void ui_draw_aligned_panel(struct ARegion *ar, struct uiStyle *style, uiB
/* interface_draw.c */
extern void ui_dropshadow(rctf *rct, float radius, float aspect, int select);
-extern void gl_round_box(int mode, float minx, float miny, float maxx, float maxy, float rad);
-extern void gl_round_box_shade(int mode, float minx, float miny, float maxx, float maxy, float rad, float shadetop, float shadedown);
-extern void gl_round_box_vertical_shade(int mode, float minx, float miny, float maxx, float maxy, float rad, float shadeLeft, float shadeRight);
-
void ui_draw_gradient(rcti *rect, float *rgb, int type, float alpha);
void ui_draw_but_HISTOGRAM(ARegion *ar, uiBut *but, struct uiWidgetColors *wcol, rcti *rect);
@@ -456,7 +453,7 @@ void ui_draw_but_IMAGE(ARegion *ar, uiBut *but, struct uiWidgetColors *wcol, rct
/* interface_handlers.c */
extern void ui_button_activate_do(struct bContext *C, struct ARegion *ar, uiBut *but);
-extern void ui_button_active_cancel(const struct bContext *C, uiBut *but);
+extern void ui_button_active_free(const struct bContext *C, uiBut *but);
extern int ui_button_is_active(struct ARegion *ar);
/* interface_widgets.c */
diff --git a/source/blender/editors/interface/interface_layout.c b/source/blender/editors/interface/interface_layout.c
index 77551fbf211..e268120fa07 100644
--- a/source/blender/editors/interface/interface_layout.c
+++ b/source/blender/editors/interface/interface_layout.c
@@ -38,9 +38,7 @@
#include "BKE_context.h"
#include "BKE_global.h"
#include "BKE_idprop.h"
-#include "BKE_library.h"
#include "BKE_screen.h"
-#include "BKE_utildefines.h"
#include "RNA_access.h"
@@ -919,8 +917,15 @@ void uiItemFullR(uiLayout *layout, PointerRNA *ptr, PropertyRNA *prop, int index
if(layout->root->type == UI_LAYOUT_MENU) {
if(type == PROP_BOOLEAN)
icon= (RNA_property_boolean_get(ptr, prop))? ICON_CHECKBOX_HLT: ICON_CHECKBOX_DEHLT;
- else if(type == PROP_ENUM && index == RNA_ENUM_VALUE)
- icon= (RNA_property_enum_get(ptr, prop) == value)? ICON_CHECKBOX_HLT: ICON_CHECKBOX_DEHLT;
+ else if(type == PROP_ENUM && index == RNA_ENUM_VALUE) {
+ int enum_value= RNA_property_enum_get(ptr, prop);
+ if(RNA_property_flag(prop) & PROP_ENUM_FLAG) {
+ icon= (enum_value & value)? ICON_CHECKBOX_HLT: ICON_CHECKBOX_DEHLT;
+ }
+ else {
+ icon= (enum_value == value)? ICON_CHECKBOX_HLT: ICON_CHECKBOX_DEHLT;
+ }
+ }
}
slider= (flag & UI_ITEM_R_SLIDER);
@@ -950,7 +955,7 @@ void uiItemFullR(uiLayout *layout, PointerRNA *ptr, PropertyRNA *prop, int index
uiDefButR(block, ROW, 0, name, 0, 0, w, h, ptr, identifier, -1, 0, value, -1, -1, NULL);
}
/* expanded enum */
- else if(type == PROP_ENUM && expand)
+ else if(type == PROP_ENUM && (expand || RNA_property_flag(prop) & PROP_ENUM_FLAG))
ui_item_enum_expand(layout, block, ptr, prop, name, 0, 0, w, h, icon_only);
/* property with separate label */
else if(type == PROP_ENUM || type == PROP_STRING || type == PROP_POINTER) {
@@ -978,7 +983,7 @@ void uiItemR(uiLayout *layout, PointerRNA *ptr, char *propname, int flag, char *
if(!prop) {
ui_item_disabled(layout, propname);
- printf("uiItemR: property not found: %s\n", propname);
+ printf("uiItemR: property not found: %s.%s\n", RNA_struct_identifier(ptr->type), propname);
return;
}
@@ -991,7 +996,7 @@ void uiItemEnumR(uiLayout *layout, char *name, int icon, struct PointerRNA *ptr,
if(!prop || RNA_property_type(prop) != PROP_ENUM) {
ui_item_disabled(layout, propname);
- printf("uiItemEnumR: enum property not found: %s\n", propname);
+ printf("uiItemEnumR: property not found: %s.%s\n", RNA_struct_identifier(ptr->type), propname);
return;
}
@@ -1006,7 +1011,7 @@ void uiItemEnumR_string(uiLayout *layout, struct PointerRNA *ptr, char *propname
if(!prop || RNA_property_type(prop) != PROP_ENUM) {
ui_item_disabled(layout, propname);
- printf("uiItemEnumR: enum property not found: %s\n", propname);
+ printf("uiItemEnumR_string: enum property not found: %s.%s\n", RNA_struct_identifier(ptr->type), propname);
return;
}
@@ -1227,7 +1232,7 @@ void uiItemPointerR(uiLayout *layout, struct PointerRNA *ptr, char *propname, st
prop= RNA_struct_find_property(ptr, propname);
if(!prop) {
- printf("uiItemPointerR: property not found: %s\n", propname);
+ printf("uiItemPointerR: property not found: %s.%s\n", RNA_struct_identifier(ptr->type), propname);
return;
}
@@ -1240,7 +1245,7 @@ void uiItemPointerR(uiLayout *layout, struct PointerRNA *ptr, char *propname, st
searchprop= RNA_struct_find_property(searchptr, searchpropname);
if(!searchprop || RNA_property_type(searchprop) != PROP_COLLECTION) {
- printf("uiItemPointerR: search collection property not found: %s\n", searchpropname);
+ printf("uiItemPointerR: search collection property not found: %s.%s\n", RNA_struct_identifier(ptr->type), searchpropname);
return;
}
diff --git a/source/blender/editors/interface/interface_ops.c b/source/blender/editors/interface/interface_ops.c
index 20752099814..bcde54f473a 100644
--- a/source/blender/editors/interface/interface_ops.c
+++ b/source/blender/editors/interface/interface_ops.c
@@ -39,7 +39,6 @@
#include "BLI_math_color.h"
#include "BKE_context.h"
-#include "BKE_utildefines.h"
#include "RNA_access.h"
#include "RNA_define.h"
@@ -69,7 +68,7 @@ static int eyedropper_init(bContext *C, wmOperator *op)
op->customdata= eye= MEM_callocN(sizeof(Eyedropper), "Eyedropper");
- uiAnimContextProperty(C, &eye->ptr, &eye->prop, &eye->index);
+ uiContextActiveProperty(C, &eye->ptr, &eye->prop, &eye->index);
return (eye->ptr.data && eye->prop && RNA_property_editable(&eye->ptr, eye->prop));
}
@@ -229,9 +228,9 @@ static int copy_data_path_button_exec(bContext *C, wmOperator *op)
int index;
/* try to create driver using property retrieved from UI */
- uiAnimContextProperty(C, &ptr, &prop, &index);
+ uiContextActiveProperty(C, &ptr, &prop, &index);
- if (ptr.data && prop) {
+ if (ptr.id.data && ptr.data && prop) {
path= RNA_path_from_ID_to_property(&ptr, prop);
if (path) {
@@ -267,7 +266,7 @@ static int reset_default_button_poll(bContext *C)
PropertyRNA *prop;
int index;
- uiAnimContextProperty(C, &ptr, &prop, &index);
+ uiContextActiveProperty(C, &ptr, &prop, &index);
return (ptr.data && prop && RNA_property_editable(&ptr, prop));
}
@@ -280,7 +279,7 @@ static int reset_default_button_exec(bContext *C, wmOperator *op)
int index, all = RNA_boolean_get(op->ptr, "all");
/* try to reset the nominated setting to its default value */
- uiAnimContextProperty(C, &ptr, &prop, &index);
+ uiContextActiveProperty(C, &ptr, &prop, &index);
/* if there is a valid property that is editable... */
if (ptr.data && prop && RNA_property_editable(&ptr, prop)) {
@@ -336,7 +335,7 @@ static int copy_to_selected_button_poll(bContext *C)
PropertyRNA *prop;
int index, success= 0;
- uiAnimContextProperty(C, &ptr, &prop, &index);
+ uiContextActiveProperty(C, &ptr, &prop, &index);
if (ptr.data && prop) {
CollectionPointerLink *link;
@@ -362,7 +361,7 @@ static int copy_to_selected_button_exec(bContext *C, wmOperator *op)
int index, all = RNA_boolean_get(op->ptr, "all");
/* try to reset the nominated setting to its default value */
- uiAnimContextProperty(C, &ptr, &prop, &index);
+ uiContextActiveProperty(C, &ptr, &prop, &index);
/* if there is a valid property that is editable... */
if (ptr.data && prop) {
diff --git a/source/blender/editors/interface/interface_panel.c b/source/blender/editors/interface/interface_panel.c
index 61694b859c5..9d22f3c5212 100644
--- a/source/blender/editors/interface/interface_panel.c
+++ b/source/blender/editors/interface/interface_panel.c
@@ -43,7 +43,6 @@
#include "BKE_context.h"
#include "BKE_screen.h"
-#include "BKE_utildefines.h"
#include "BIF_gl.h"
#include "BIF_glutil.h"
diff --git a/source/blender/editors/interface/interface_regions.c b/source/blender/editors/interface/interface_regions.c
index 2f19ab6698a..50b85360196 100644
--- a/source/blender/editors/interface/interface_regions.c
+++ b/source/blender/editors/interface/interface_regions.c
@@ -38,11 +38,7 @@
#include "BLI_ghash.h"
#include "BKE_context.h"
-#include "BKE_icons.h"
-#include "BKE_report.h"
#include "BKE_screen.h"
-#include "BKE_texture.h"
-#include "BKE_utildefines.h"
#include "WM_api.h"
#include "WM_types.h"
diff --git a/source/blender/editors/interface/interface_style.c b/source/blender/editors/interface/interface_style.c
index f12b8aeeca5..03676ae5e06 100644
--- a/source/blender/editors/interface/interface_style.c
+++ b/source/blender/editors/interface/interface_style.c
@@ -38,12 +38,8 @@
#include "BLI_rect.h"
#include "BLI_string.h"
-#include "BKE_context.h"
#include "BKE_global.h"
-#include "BKE_utildefines.h"
-#include "BIF_gl.h"
-#include "BIF_glutil.h"
#include "BLF_api.h"
diff --git a/source/blender/editors/interface/interface_templates.c b/source/blender/editors/interface/interface_templates.c
index e2c033bd68d..e0f57a259b5 100644
--- a/source/blender/editors/interface/interface_templates.c
+++ b/source/blender/editors/interface/interface_templates.c
@@ -30,18 +30,15 @@
#include "DNA_scene_types.h"
#include "DNA_userdef_types.h"
-#include "DNA_windowmanager_types.h"
#include "BLI_string.h"
#include "BKE_colortools.h"
#include "BKE_context.h"
-#include "BKE_icons.h"
#include "BKE_global.h"
#include "BKE_library.h"
#include "BKE_main.h"
#include "BKE_texture.h"
-#include "BKE_utildefines.h"
#include "BKE_report.h"
#include "ED_screen.h"
@@ -72,68 +69,6 @@ void uiTemplateHeader(uiLayout *layout, bContext *C, int menus)
else ED_area_header_switchbutton(C, block, 0);
}
-/********************** DopeSheet Filter Template *************************/
-
-void uiTemplateDopeSheetFilter(uiLayout *layout, bContext *C, PointerRNA *ptr)
-{
- Main *mainptr= CTX_data_main(C);
- ScrArea *sa= CTX_wm_area(C);
- uiLayout *row= layout;
- short nlaActive= ((sa) && (sa->spacetype==SPACE_NLA));
-
- /* most 'generic' filtering options */
- row= uiLayoutRow(layout, 1);
-
- uiItemR(row, ptr, "only_selected", 0, "", 0);
- uiItemR(row, ptr, "display_hidden", 0, "", 0);
-
- /* object-level filtering options */
- row= uiLayoutRow(layout, 1);
- uiItemR(row, ptr, "display_transforms", 0, "", 0);
-
- if (nlaActive)
- uiItemR(row, ptr, "include_missing_nla", 0, "", 0);
-
- /* datatype based - only available datatypes are shown */
- row= uiLayoutRow(layout, 1);
-
- uiItemR(row, ptr, "display_scene", 0, "", 0);
- uiItemR(row, ptr, "display_world", 0, "", 0);
- uiItemR(row, ptr, "display_node", 0, "", 0);
-
- if (mainptr && mainptr->mesh.first)
- uiItemR(row, ptr, "display_mesh", 0, "", 0);
- if (mainptr && mainptr->key.first)
- uiItemR(row, ptr, "display_shapekeys", 0, "", 0);
- if (mainptr && mainptr->mat.first)
- uiItemR(row, ptr, "display_material", 0, "", 0);
- if (mainptr && mainptr->lamp.first)
- uiItemR(row, ptr, "display_lamp", 0, "", 0);
- if (mainptr && mainptr->tex.first)
- uiItemR(row, ptr, "display_texture", 0, "", 0);
- if (mainptr && mainptr->camera.first)
- uiItemR(row, ptr, "display_camera", 0, "", 0);
- if (mainptr && mainptr->curve.first)
- uiItemR(row, ptr, "display_curve", 0, "", 0);
- if (mainptr && mainptr->mball.first)
- uiItemR(row, ptr, "display_metaball", 0, "", 0);
- if (mainptr && mainptr->armature.first)
- uiItemR(row, ptr, "display_armature", 0, "", 0);
- if (mainptr && mainptr->particle.first)
- uiItemR(row, ptr, "display_particle", 0, "", 0);
-
- /* group-based filtering (only when groups are available */
- if (mainptr && mainptr->group.first) {
- row= uiLayoutRow(layout, 1);
-
- uiItemR(row, ptr, "only_group_objects", 0, "", 0);
-
- /* if enabled, show the group selection field too */
- if (RNA_boolean_get(ptr, "only_group_objects"))
- uiItemR(row, ptr, "filtering_group", 0, "", 0);
- }
-}
-
/********************** Search Callbacks *************************/
typedef struct TemplateID {
@@ -440,7 +375,7 @@ static void template_ID(bContext *C, uiLayout *layout, TemplateID *template, Str
}
if(id->lib == NULL && !(ELEM4(GS(id->name), ID_GR, ID_SCE, ID_SCR, ID_TXT))) {
- uiDefButR(block, TOG, 0, "F", 0, 0, UI_UNIT_X, UI_UNIT_Y, &idptr, "fake_user", -1, 0, 0, -1, -1, NULL);
+ uiDefButR(block, TOG, 0, "F", 0, 0, UI_UNIT_X, UI_UNIT_Y, &idptr, "use_fake_user", -1, 0, 0, -1, -1, NULL);
}
}
@@ -505,7 +440,7 @@ static void ui_template_id(uiLayout *layout, bContext *C, PointerRNA *ptr, char
prop= RNA_struct_find_property(ptr, propname);
if(!prop || RNA_property_type(prop) != PROP_POINTER) {
- printf("uiTemplateID: pointer property not found: %s\n", propname);
+ printf("uiTemplateID: pointer property not found: %s.%s\n", RNA_struct_identifier(ptr->type), propname);
return;
}
@@ -566,11 +501,11 @@ void uiTemplateAnyID(uiLayout *layout, bContext *C, PointerRNA *ptr, char *propn
propType= RNA_struct_find_property(ptr, proptypename);
if (!propID || RNA_property_type(propID) != PROP_POINTER) {
- printf("uiTemplateAnyID: pointer property not found: %s\n", propname);
+ printf("uiTemplateAnyID: pointer property not found: %s.%s\n", RNA_struct_identifier(ptr->type), propname);
return;
}
if (!propType || RNA_property_type(propType) != PROP_ENUM) {
- printf("uiTemplateAnyID: pointer-type property not found: %s\n", proptypename);
+ printf("uiTemplateAnyID: pointer-type property not found: %s.%s\n", RNA_struct_identifier(ptr->type), proptypename);
return;
}
@@ -609,7 +544,7 @@ void uiTemplatePathBuilder(uiLayout *layout, bContext *C, PointerRNA *ptr, char
/* check that properties are valid */
propPath= RNA_struct_find_property(ptr, propname);
if (!propPath || RNA_property_type(propPath) != PROP_STRING) {
- printf("uiTemplatePathBuilder: path property not found: %s\n", propname);
+ printf("uiTemplatePathBuilder: path property not found: %s.%s\n", RNA_struct_identifier(ptr->type), propname);
return;
}
@@ -631,12 +566,8 @@ void uiTemplatePathBuilder(uiLayout *layout, bContext *C, PointerRNA *ptr, char
#include "DNA_object_force.h"
#include "BKE_depsgraph.h"
-#include "BKE_DerivedMesh.h"
-#include "BKE_global.h"
#include "BKE_modifier.h"
-#include "BKE_object.h"
#include "BKE_particle.h"
-#include "BKE_report.h"
#include "ED_util.h"
@@ -698,13 +629,13 @@ static int modifier_can_delete(ModifierData *md)
return 1;
}
-static uiLayout *draw_modifier(uiLayout *layout, Scene *scene, Object *ob, ModifierData *md, int index, int cageIndex, int lastCageIndex, int compact)
+static uiLayout *draw_modifier(uiLayout *layout, Scene *scene, Object *ob, ModifierData *md, int index, int cageIndex, int lastCageIndex)
{
ModifierTypeInfo *mti = modifierType_getInfo(md->type);
PointerRNA ptr;
uiBut *but;
uiBlock *block;
- uiLayout *box, *column, *row, *col;
+ uiLayout *box, *column, *row;
uiLayout *result= NULL;
int isVirtual = (md->mode & eModifierMode_Virtual);
char str[128];
@@ -732,65 +663,31 @@ static uiLayout *draw_modifier(uiLayout *layout, Scene *scene, Object *ob, Modif
}
else {
/* REAL MODIFIER */
- uiLayout *split;
-
- split = uiLayoutSplit(box, 0.16, 0);
-
- col= uiLayoutColumn(split, 0);
- row = uiLayoutRow(col, 1);
-
+ row = uiLayoutRow(box, 0);
block = uiLayoutGetBlock(row);
uiBlockSetEmboss(block, UI_EMBOSSN);
-
/* Open/Close ................................. */
- uiItemR(row, &ptr, "expanded", 0, "", 0);
+ uiItemR(row, &ptr, "show_expanded", 0, "", 0);
/* modifier-type icon */
uiItemL(row, "", RNA_struct_ui_icon(ptr.type));
-
uiBlockSetEmboss(block, UI_EMBOSS);
-
- /* 'Middle Column' ............................
- * - first row is the name of the modifier
- * - second row is the visibility settings, since the layouts were not wide enough to show all
- */
- col= uiLayoutColumn(split, 0);
-
- row= uiLayoutRow(col, 0);
- uiLayoutSetAlignment(row, UI_LAYOUT_ALIGN_EXPAND);
-
- block = uiLayoutGetBlock(row);
-
/* modifier name */
uiItemR(row, &ptr, "name", 0, "", 0);
- if (compact) {
- /* insert delete button at end of top row before splitting to second line */
- uiBlockSetEmboss(block, UI_EMBOSSN);
- if (modifier_can_delete(md))
- uiItemO(row, "", ICON_X, "OBJECT_OT_modifier_remove");
- uiBlockSetEmboss(block, UI_EMBOSS);
-
- split = uiLayoutSplit(box, 0.17, 0);
- col= uiLayoutColumn(split, 0);
- uiItemL(col, "", 0);
- col= uiLayoutColumn(split, 0);
- row = uiLayoutRow(col, 1);
- }
-
/* mode enabling buttons */
uiBlockBeginAlign(block);
/* Softbody not allowed in this situation, enforce! */
if ( ((md->type!=eModifierType_Softbody && md->type!=eModifierType_Collision) || !(ob->pd && ob->pd->deflect))
&& (md->type!=eModifierType_Surface) )
{
- uiItemR(row, &ptr, "render", 0, "", 0);
- uiItemR(row, &ptr, "realtime", 0, "", 0);
+ uiItemR(row, &ptr, "show_render", 0, "", 0);
+ uiItemR(row, &ptr, "show_viewport", 0, "", 0);
if (mti->flags & eModifierTypeFlag_SupportsEditmode)
- uiItemR(row, &ptr, "editmode", 0, "", 0);
+ uiItemR(row, &ptr, "show_in_editmode", 0, "", 0);
}
if ((ob->type==OB_MESH) && modifier_couldBeCage(scene, md) && (index <= lastCageIndex))
{
@@ -808,12 +705,10 @@ static uiLayout *draw_modifier(uiLayout *layout, Scene *scene, Object *ob, Modif
uiItemO(row, "", ICON_TRIA_DOWN, "OBJECT_OT_modifier_move_down");
uiBlockEndAlign(block);
- if(!compact) {
- uiBlockSetEmboss(block, UI_EMBOSSN);
- if (modifier_can_delete(md))
- uiItemO(row, "", ICON_X, "OBJECT_OT_modifier_remove");
- uiBlockSetEmboss(block, UI_EMBOSS);
- }
+ uiBlockSetEmboss(block, UI_EMBOSSN);
+ if (modifier_can_delete(md))
+ uiItemO(row, "", ICON_X, "OBJECT_OT_modifier_remove");
+ uiBlockSetEmboss(block, UI_EMBOSS);
}
@@ -848,7 +743,7 @@ static uiLayout *draw_modifier(uiLayout *layout, Scene *scene, Object *ob, Modif
uiBlockClearButLock(block);
uiBlockSetButLock(block, ob && ob->id.lib, ERROR_LIBDATA_MESSAGE);
- if (!ELEM4(md->type, eModifierType_Fluidsim, eModifierType_Softbody, eModifierType_ParticleSystem, eModifierType_Cloth))
+ if (!ELEM5(md->type, eModifierType_Fluidsim, eModifierType_Softbody, eModifierType_ParticleSystem, eModifierType_Cloth, eModifierType_Smoke))
uiItemO(row, "Copy", 0, "OBJECT_OT_modifier_copy");
}
@@ -867,7 +762,7 @@ static uiLayout *draw_modifier(uiLayout *layout, Scene *scene, Object *ob, Modif
return result;
}
-uiLayout *uiTemplateModifier(uiLayout *layout, bContext *C, PointerRNA *ptr, int compact)
+uiLayout *uiTemplateModifier(uiLayout *layout, bContext *C, PointerRNA *ptr)
{
Scene *scene = CTX_data_scene(C);
Object *ob;
@@ -898,7 +793,7 @@ uiLayout *uiTemplateModifier(uiLayout *layout, bContext *C, PointerRNA *ptr, int
for(i=0; vmd; i++, vmd=vmd->next) {
if(md == vmd)
- return draw_modifier(layout, scene, ob, md, i, cageIndex, lastCageIndex, compact);
+ return draw_modifier(layout, scene, ob, md, i, cageIndex, lastCageIndex);
else if(vmd->mode & eModifierMode_Virtual)
i--;
}
@@ -964,12 +859,12 @@ static void constraint_active_func(bContext *C, void *ob_v, void *con_v)
}
/* draw panel showing settings for a constraint */
-static uiLayout *draw_constraint(uiLayout *layout, Object *ob, bConstraint *con, int compact)
+static uiLayout *draw_constraint(uiLayout *layout, Object *ob, bConstraint *con)
{
bPoseChannel *pchan= get_active_posechannel(ob);
bConstraintTypeInfo *cti;
uiBlock *block;
- uiLayout *result= NULL, *col, *box, *row, *subrow;
+ uiLayout *result= NULL, *col, *box, *row;
PointerRNA ptr;
char typestr[32];
short proxy_protected, xco=0, yco=0;
@@ -1014,7 +909,7 @@ static uiLayout *draw_constraint(uiLayout *layout, Object *ob, bConstraint *con,
/* open/close */
uiBlockSetEmboss(block, UI_EMBOSSN);
- uiItemR(row, &ptr, "expanded", UI_ITEM_R_ICON_ONLY, "", 0);
+ uiItemR(row, &ptr, "show_expanded", UI_ITEM_R_ICON_ONLY, "", 0);
uiBlockSetEmboss(block, UI_EMBOSS);
/* XXX if (con->flag & CONSTRAINT_DISABLE)
@@ -1061,33 +956,25 @@ static uiLayout *draw_constraint(uiLayout *layout, Object *ob, bConstraint *con,
show_upbut= ((prev_proxylock == 0) && (con->prev));
show_downbut= (con->next) ? 1 : 0;
-
- /* Code for compact Constraint UI */
- if (compact) {
- subrow = uiLayoutRow(box, 0);
- }
- else {
- subrow = row;
- }
- uiLayoutSetOperatorContext(subrow, WM_OP_INVOKE_DEFAULT);
+ /* enabled */
+ uiBlockSetEmboss(block, UI_EMBOSSN);
+ uiItemR(row, &ptr, "mute", 0, "", (con->flag & CONSTRAINT_OFF) ? ICON_MUTE_IPO_ON : ICON_MUTE_IPO_OFF);
+ uiBlockSetEmboss(block, UI_EMBOSS);
+
+ uiLayoutSetOperatorContext(row, WM_OP_INVOKE_DEFAULT);
/* up/down */
if (show_upbut || show_downbut) {
uiBlockBeginAlign(block);
if (show_upbut)
- uiItemO(subrow, "", ICON_TRIA_UP, "CONSTRAINT_OT_move_up");
+ uiItemO(row, "", ICON_TRIA_UP, "CONSTRAINT_OT_move_up");
if (show_downbut)
- uiItemO(subrow, "", ICON_TRIA_DOWN, "CONSTRAINT_OT_move_down");
+ uiItemO(row, "", ICON_TRIA_DOWN, "CONSTRAINT_OT_move_down");
uiBlockEndAlign(block);
}
- /* enabled */
- uiItemR(subrow, &ptr, "enabled", 0, "", 0);
-
- uiLayoutSetOperatorContext(row, WM_OP_INVOKE_DEFAULT);
-
/* Close 'button' - emboss calls here disable drawing of 'button' behind X */
uiBlockSetEmboss(block, UI_EMBOSSN);
uiItemO(row, "", ICON_X, "CONSTRAINT_OT_delete");
@@ -1114,7 +1001,7 @@ static uiLayout *draw_constraint(uiLayout *layout, Object *ob, bConstraint *con,
return result;
}
-uiLayout *uiTemplateConstraint(uiLayout *layout, PointerRNA *ptr, int compact)
+uiLayout *uiTemplateConstraint(uiLayout *layout, PointerRNA *ptr)
{
Object *ob;
bConstraint *con;
@@ -1142,7 +1029,7 @@ uiLayout *uiTemplateConstraint(uiLayout *layout, PointerRNA *ptr, int compact)
return NULL;
}
- return draw_constraint(layout, ob, con, compact);
+ return draw_constraint(layout, ob, con);
}
@@ -1150,7 +1037,6 @@ uiLayout *uiTemplateConstraint(uiLayout *layout, PointerRNA *ptr, int compact)
#include "DNA_lamp_types.h"
#include "DNA_material_types.h"
-#include "DNA_texture_types.h"
#include "DNA_world_types.h"
#define B_MATPRV 1
@@ -1250,7 +1136,6 @@ void uiTemplatePreview(uiLayout *layout, ID *id, ID *parent, MTex *slot)
/********************** ColorRamp Template **************************/
-#include "BKE_texture.h"
typedef struct RNAUpdateCb {
PointerRNA ptr;
@@ -1546,7 +1431,6 @@ void uiTemplateVectorscope(uiLayout *layout, PointerRNA *ptr, char *propname, in
/********************* CurveMapping Template ************************/
-#include "BKE_colortools.h"
static void curvemap_buttons_zoom_in(bContext *C, void *cumap_v, void *unused)
{
@@ -1909,7 +1793,7 @@ void uiTemplateColorWheel(uiLayout *layout, PointerRNA *ptr, char *propname, int
float softmin, softmax, step, precision;
if (!prop) {
- printf("uiTemplateColorWheel: property not found: %s\n", propname);
+ printf("uiTemplateColorWheel: property not found: %s.%s\n", RNA_struct_identifier(ptr->type), propname);
return;
}
@@ -1940,31 +1824,6 @@ void uiTemplateColorWheel(uiLayout *layout, PointerRNA *ptr, char *propname, int
uiDefButR(block, HSVCUBE, 0, "", WHEEL_SIZE+6, 0, 14, WHEEL_SIZE, ptr, propname, -1, softmin, softmax, 9, 0, "");
}
-
-/********************* TriColor (ThemeWireColorSet) Template ************************/
-
-void uiTemplateTriColorSet(uiLayout *layout, PointerRNA *ptr, char *propname)
-{
- PropertyRNA *prop= RNA_struct_find_property(ptr, propname);
- uiLayout *row;
- PointerRNA csPtr;
-
- if (!prop) {
- printf("uiTemplateTriColorSet: property not found: %s\n", propname);
- return;
- }
-
- /* we lay out the data in a row as 3 color swatches */
- row= uiLayoutRow(layout, 1);
-
- /* nselected, selected, active color swatches */
- csPtr= RNA_property_pointer_get(ptr, prop);
-
- uiItemR(row, &csPtr, "normal", 0, "", 0);
- uiItemR(row, &csPtr, "select", 0, "", 0);
- uiItemR(row, &csPtr, "active", 0, "", 0);
-}
-
/********************* Layer Buttons Template ************************/
static void handle_layer_buttons(bContext *C, void *arg1, void *arg2)
@@ -2002,7 +1861,7 @@ void uiTemplateLayers(uiLayout *layout, PointerRNA *ptr, char *propname,
prop= RNA_struct_find_property(ptr, propname);
if (!prop) {
- printf("uiTemplateLayer: layers property not found: %s\n", propname);
+ printf("uiTemplateLayer: layers property not found: %s.%s\n", RNA_struct_identifier(ptr->type), propname);
return;
}
@@ -2021,7 +1880,7 @@ void uiTemplateLayers(uiLayout *layout, PointerRNA *ptr, char *propname,
if(used_ptr && used_propname) {
used_prop= RNA_struct_find_property(used_ptr, used_propname);
if (!used_prop) {
- printf("uiTemplateLayer: used layers property not found: %s\n", used_propname);
+ printf("uiTemplateLayer: used layers property not found: %s.%s\n", RNA_struct_identifier(ptr->type), used_propname);
return;
}
@@ -2107,12 +1966,6 @@ static void list_item_row(bContext *C, uiLayout *layout, PointerRNA *ptr, Pointe
/* list item behind label & other buttons */
sub= uiLayoutRow(overlap, 0);
- if(itemptr->type == &RNA_ShapeKey) {
- ob= (Object*)activeptr->data;
- if(ob->mode == OB_MODE_EDIT && !(ob->type == OB_MESH))
- uiLayoutSetEnabled(sub, 0);
- }
-
but= uiDefButR(block, LISTROW, 0, "", 0,0, UI_UNIT_X*10,UI_UNIT_Y, activeptr, activepropname, 0, 0, i, 0, 0, "");
uiButSetFlag(but, UI_BUT_NO_TOOLTIP);
@@ -2141,7 +1994,7 @@ static void list_item_row(bContext *C, uiLayout *layout, PointerRNA *ptr, Pointe
else if(RNA_struct_is_a(itemptr->type, &RNA_SceneRenderLayer)) {
uiItemL(sub, name, icon);
uiBlockSetEmboss(block, UI_EMBOSS);
- uiDefButR(block, OPTION, 0, "", 0, 0, UI_UNIT_X, UI_UNIT_Y, itemptr, "enabled", 0, 0, 0, 0, 0, NULL);
+ uiDefButR(block, OPTION, 0, "", 0, 0, UI_UNIT_X, UI_UNIT_Y, itemptr, "use", 0, 0, 0, 0, 0, NULL);
}
else if(itemptr->type == &RNA_ShapeKey) {
ob= (Object*)activeptr->data;
@@ -2196,14 +2049,14 @@ void uiTemplateList(uiLayout *layout, bContext *C, PointerRNA *ptr, char *propna
if(ptr->data) {
prop= RNA_struct_find_property(ptr, propname);
if(!prop) {
- printf("uiTemplateList: property not found: %s\n", propname);
+ printf("uiTemplateList: property not found: %s.%s\n", RNA_struct_identifier(ptr->type), propname);
return;
}
}
activeprop= RNA_struct_find_property(activeptr, activepropname);
if(!activeprop) {
- printf("uiTemplateList: property not found: %s\n", activepropname);
+ printf("uiTemplateList: property not found: %s.%s\n", RNA_struct_identifier(ptr->type), activepropname);
return;
}
diff --git a/source/blender/editors/interface/interface_widgets.c b/source/blender/editors/interface/interface_widgets.c
index 8cd42b271a9..08ce130a300 100644
--- a/source/blender/editors/interface/interface_widgets.c
+++ b/source/blender/editors/interface/interface_widgets.c
@@ -28,7 +28,6 @@
#include <stdlib.h>
#include <string.h>
-#include "MEM_guardedalloc.h"
#include "DNA_screen_types.h"
#include "DNA_userdef_types.h"
@@ -39,7 +38,6 @@
#include "BKE_context.h"
#include "BKE_curve.h"
-#include "BKE_global.h"
#include "BKE_utildefines.h"
#include "RNA_access.h"
@@ -1422,8 +1420,7 @@ static void widget_state(uiWidgetType *wt, int state)
VECCOPY(wt->wcol.text, wt->wcol.text_sel);
- if (!(state & UI_TEXTINPUT))
- /* swap for selection - show depressed */
+ if(state & UI_SELECT)
SWAP(short, wt->wcol.shadetop, wt->wcol.shadedown);
}
else {
@@ -1440,6 +1437,11 @@ static void widget_state(uiWidgetType *wt, int state)
wt->wcol.inner[2]= wt->wcol.inner[2]>=240? 255 : wt->wcol.inner[2]+15;
}
}
+
+ if(state & UI_BUT_REDALERT) {
+ char red[4]= {255, 0, 0};
+ widget_state_blend(wt->wcol.inner, red, 0.4f);
+ }
}
/* sliders use special hack which sets 'item' as inner when drawing filling */
@@ -1454,12 +1456,16 @@ static void widget_state_numslider(uiWidgetType *wt, int state)
/* now, set the inner-part so that it reflects state settings too */
// TODO: maybe we should have separate settings for the blending colors used for this case?
if(state & UI_SELECT) {
+
if(state & UI_BUT_ANIMATED_KEY)
widget_state_blend(wt->wcol.item, wcol_state->inner_key_sel, blend);
else if(state & UI_BUT_ANIMATED)
widget_state_blend(wt->wcol.item, wcol_state->inner_anim_sel, blend);
else if(state & UI_BUT_DRIVEN)
widget_state_blend(wt->wcol.item, wcol_state->inner_driven_sel, blend);
+
+ if(state & UI_SELECT)
+ SWAP(short, wt->wcol.shadetop, wt->wcol.shadedown);
}
else {
if(state & UI_BUT_ANIMATED_KEY)
@@ -1640,6 +1646,10 @@ void ui_draw_but_HSVCIRCLE(uiBut *but, uiWidgetColors *wcol, rcti *rect)
float centx, centy, radius;
float rgb[3], hsv[3], hsvo[3], col[3], colcent[3];
int a, tot= 32;
+ int color_profile = but->block->color_profile;
+
+ if (but->rnaprop && RNA_property_subtype(but->rnaprop) == PROP_COLOR_GAMMA)
+ color_profile = BLI_PR_NONE;
radstep= 2.0f*M_PI/(float)tot;
centx= (float)(rect->xmin + rect->xmax)/2;
@@ -1658,7 +1668,10 @@ void ui_draw_but_HSVCIRCLE(uiBut *but, uiWidgetColors *wcol, rcti *rect)
/* exception: if 'lock' is set
* lock the value of the color wheel to 1.
* Useful for color correction tools where you're only interested in hue. */
- if (but->flag & UI_BUT_COLOR_LOCK) hsv[2] = 1.f;
+ if (but->flag & UI_BUT_COLOR_LOCK)
+ hsv[2] = 1.f;
+ else if (color_profile)
+ hsv[2] = linearrgb_to_srgb(hsv[2]);
hsv_to_rgb(0.f, 0.f, hsv[2], colcent, colcent+1, colcent+2);
@@ -1886,11 +1899,8 @@ static void ui_draw_but_HSV_v(uiBut *but, rcti *rect)
float rgb[3], hsv[3], v, range;
int color_profile = but->block->color_profile;
- if (but->rnaprop) {
- if (RNA_property_subtype(but->rnaprop) == PROP_COLOR_GAMMA) {
- color_profile = BLI_PR_NONE;
- }
- }
+ if (but->rnaprop && RNA_property_subtype(but->rnaprop) == PROP_COLOR_GAMMA)
+ color_profile = BLI_PR_NONE;
ui_get_but_vectorf(but, rgb);
rgb_to_hsv(rgb[0], rgb[1], rgb[2], hsv, hsv+1, hsv+2);
@@ -1952,6 +1962,9 @@ static void widget_numbut(uiWidgetColors *wcol, rcti *rect, int state, int round
float rad= 0.5f*(rect->ymax - rect->ymin);
float textofs = rad*0.75;
+ if(state & UI_SELECT)
+ SWAP(short, wcol->shadetop, wcol->shadedown);
+
widget_init(&wtb);
/* fully rounded */
@@ -2225,7 +2238,9 @@ static void widget_numslider(uiBut *but, uiWidgetColors *wcol, rcti *rect, int s
VECCOPY(outline, wcol->outline);
VECCOPY(wcol->outline, wcol->item);
VECCOPY(wcol->inner, wcol->item);
- SWAP(short, wcol->shadetop, wcol->shadedown);
+
+ if(!(state & UI_SELECT))
+ SWAP(short, wcol->shadetop, wcol->shadedown);
rect1= *rect;
@@ -2249,7 +2264,9 @@ static void widget_numslider(uiBut *but, uiWidgetColors *wcol, rcti *rect, int s
widgetbase_draw(&wtb1, wcol);
VECCOPY(wcol->outline, outline);
- SWAP(short, wcol->shadetop, wcol->shadedown);
+
+ if(!(state & UI_SELECT))
+ SWAP(short, wcol->shadetop, wcol->shadedown);
/* outline */
wtb.outline= 1;
@@ -2304,6 +2321,9 @@ static void widget_textbut(uiWidgetColors *wcol, rcti *rect, int state, int roun
{
uiWidgetBase wtb;
+ if(state & UI_SELECT)
+ SWAP(short, wcol->shadetop, wcol->shadedown);
+
widget_init(&wtb);
/* half rounded */
diff --git a/source/blender/editors/interface/resources.c b/source/blender/editors/interface/resources.c
index 4b02e4b1e65..c250cdb1284 100644
--- a/source/blender/editors/interface/resources.c
+++ b/source/blender/editors/interface/resources.c
@@ -998,6 +998,10 @@ void init_userdef_do_versions(void)
strcpy(U.tempdir, tmp?tmp:"/tmp/");
}
+ if (U.autokey_mode == 0) {
+ /* 'add/replace' but not on */
+ U.autokey_mode = 2;
+ }
if (U.savetime <= 0) {
U.savetime = 1;
// XXX error("startup.blend is buggy, please consider removing it.\n");
@@ -1511,11 +1515,6 @@ void init_userdef_do_versions(void)
if (U.v2d_min_gridsize == 0) {
U.v2d_min_gridsize= 35;
}
-
- /* Single Column UI Value */
- if (U.propwidth == 0) {
- U.propwidth = 200;
- }
/* funny name, but it is GE stuff, moves userdef stuff to engine */
// XXX space_set_commmandline_options();
diff --git a/source/blender/editors/interface/view2d.c b/source/blender/editors/interface/view2d.c
index 9a88a52d4b4..14ec7c6d0d6 100644
--- a/source/blender/editors/interface/view2d.c
+++ b/source/blender/editors/interface/view2d.c
@@ -44,7 +44,6 @@
#include "WM_api.h"
#include "BIF_gl.h"
-#include "BIF_glutil.h"
#include "BLF_api.h"
diff --git a/source/blender/editors/interface/view2d_ops.c b/source/blender/editors/interface/view2d_ops.c
index a5ed57a9ee8..de1b26e987b 100644
--- a/source/blender/editors/interface/view2d_ops.c
+++ b/source/blender/editors/interface/view2d_ops.c
@@ -34,7 +34,6 @@
#include "BLI_blenlib.h"
#include "BKE_context.h"
-#include "BKE_utildefines.h"
#include "RNA_access.h"
#include "RNA_define.h"
@@ -42,7 +41,6 @@
#include "WM_api.h"
#include "WM_types.h"
-#include "BIF_gl.h"
#include "ED_screen.h"
diff --git a/source/blender/editors/mesh/CMakeLists.txt b/source/blender/editors/mesh/CMakeLists.txt
index 5f75ceb34ef..4145f251a64 100644
--- a/source/blender/editors/mesh/CMakeLists.txt
+++ b/source/blender/editors/mesh/CMakeLists.txt
@@ -34,7 +34,7 @@ SET(INC
)
IF(WIN32)
- SET(INC ${INC} ${PTHREADS_INC})
+ LIST(APPEND INC ${PTHREADS_INC})
ENDIF(WIN32)
BLENDERLIB(bf_editor_mesh "${SRC}" "${INC}")
diff --git a/source/blender/editors/mesh/Makefile b/source/blender/editors/mesh/Makefile
index 8ae40e1b957..be57f72329a 100644
--- a/source/blender/editors/mesh/Makefile
+++ b/source/blender/editors/mesh/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2007 Blender Foundation
# All rights reserved.
diff --git a/source/blender/editors/mesh/editface.c b/source/blender/editors/mesh/editface.c
index e36035081ce..fc92598591a 100644
--- a/source/blender/editors/mesh/editface.c
+++ b/source/blender/editors/mesh/editface.c
@@ -44,21 +44,12 @@
#include "DNA_object_types.h"
#include "DNA_scene_types.h"
-#include "BKE_brush.h"
-#include "BKE_customdata.h"
-#include "BKE_depsgraph.h"
#include "BKE_DerivedMesh.h"
-#include "BKE_displist.h"
#include "BKE_global.h"
#include "BKE_mesh.h"
-#include "BKE_object.h"
-#include "BKE_texture.h"
-#include "BKE_utildefines.h"
-#include "BKE_customdata.h"
#include "BKE_context.h"
#include "BIF_gl.h"
-#include "BIF_glutil.h"
#ifndef DISABLE_PYTHON
diff --git a/source/blender/editors/mesh/editmesh.c b/source/blender/editors/mesh/editmesh.c
index a63f4995acc..ff2fad3f551 100644
--- a/source/blender/editors/mesh/editmesh.c
+++ b/source/blender/editors/mesh/editmesh.c
@@ -32,8 +32,11 @@
#include "MEM_guardedalloc.h"
-
+#include "DNA_scene_types.h"
+#include "DNA_object_types.h"
#include "DNA_key_types.h"
+#include "DNA_meshdata_types.h"
+#include "DNA_modifier_types.h"
#include "BLI_blenlib.h"
#include "BLI_math.h"
@@ -41,24 +44,15 @@
#include "BLI_dynstr.h"
#include "BLI_rand.h"
-#include "BKE_cloth.h"
+#include "BKE_DerivedMesh.h"
#include "BKE_context.h"
-#include "BKE_customdata.h"
#include "BKE_depsgraph.h"
-#include "BKE_DerivedMesh.h"
#include "BKE_global.h"
#include "BKE_key.h"
-#include "BKE_library.h"
#include "BKE_main.h"
#include "BKE_material.h"
#include "BKE_mesh.h"
-#include "BKE_modifier.h"
-#include "BKE_object.h"
#include "BKE_paint.h"
-#include "BKE_pointcache.h"
-#include "BKE_softbody.h"
-#include "BKE_texture.h"
-#include "BKE_utildefines.h"
#include "ED_mesh.h"
#include "ED_object.h"
@@ -1532,6 +1526,11 @@ static int mesh_separate_exec(bContext *C, wmOperator *op)
if(retval) {
WM_event_add_notifier(C, NC_GEOM|ND_DATA, base->object->data);
+
+ // XXX: new object was created, but selection wasn't actually changed
+ // need this for outliner update without adding new ND. nazgul.
+ WM_event_add_notifier(C, NC_SCENE|ND_OB_SELECT, scene);
+
return OPERATOR_FINISHED;
}
return OPERATOR_CANCELLED;
diff --git a/source/blender/editors/mesh/editmesh_add.c b/source/blender/editors/mesh/editmesh_add.c
index 6cb6695cebc..7dac8a465fa 100644
--- a/source/blender/editors/mesh/editmesh_add.c
+++ b/source/blender/editors/mesh/editmesh_add.c
@@ -47,11 +47,8 @@
#include "BKE_context.h"
#include "BKE_depsgraph.h"
-#include "BKE_global.h"
#include "BKE_library.h"
#include "BKE_mesh.h"
-#include "BKE_object.h"
-#include "BKE_utildefines.h"
#include "BKE_report.h"
#include "WM_api.h"
@@ -1268,7 +1265,7 @@ static char *get_mesh_defname(int type)
case PRIM_PLANE: return "Plane";
case PRIM_CUBE: return "Cube";
case PRIM_CIRCLE: return "Circle";
- case PRIM_CYLINDER: return "Tube";
+ case PRIM_CYLINDER: return "Cylinder";
case PRIM_CONE: return "Cone";
case PRIM_GRID: return "Grid";
case PRIM_UVSPHERE: return "Sphere";
@@ -1303,7 +1300,7 @@ static void make_prim_ext(bContext *C, float *loc, float *rot, int enter_editmod
scale= ED_object_new_primitive_matrix(C, obedit, loc, rot, mat);
dia *= scale;
- depth *= scale;
+ depth *= scale * 0.5f;
make_prim(obedit, type, mat, tot, seg, subdiv, dia, depth, ext, fill);
@@ -1362,7 +1359,7 @@ static int add_primitive_cube_exec(bContext *C, wmOperator *op)
/* sqrt(2.0f) - plane (diameter of 1.41 makes it unit size) */
make_prim_ext(C, loc, rot, enter_editmode, layer,
- PRIM_CUBE, 4, 0, 0, sqrt(2.0f), 1.0f, 1, 1);
+ PRIM_CUBE, 4, 0, 0, sqrt(2.0f), 2.0f, 1, 1);
return OPERATOR_FINISHED;
}
@@ -1424,7 +1421,7 @@ void MESH_OT_primitive_circle_add(wmOperatorType *ot)
ED_object_add_generic_props(ot, TRUE);
}
-static int add_primitive_tube_exec(bContext *C, wmOperator *op)
+static int add_primitive_cylinder_exec(bContext *C, wmOperator *op)
{
int enter_editmode;
unsigned int layer;
@@ -1442,16 +1439,16 @@ static int add_primitive_tube_exec(bContext *C, wmOperator *op)
return OPERATOR_FINISHED;
}
-void MESH_OT_primitive_tube_add(wmOperatorType *ot)
+void MESH_OT_primitive_cylinder_add(wmOperatorType *ot)
{
/* identifiers */
- ot->name= "Add Tube";
- ot->description= "Construct a tube mesh";
- ot->idname= "MESH_OT_primitive_tube_add";
+ ot->name= "Add Cylinder";
+ ot->description= "Construct a cylinder mesh";
+ ot->idname= "MESH_OT_primitive_cylinder_add";
/* api callbacks */
ot->invoke= ED_object_add_generic_invoke;
- ot->exec= add_primitive_tube_exec;
+ ot->exec= add_primitive_cylinder_exec;
ot->poll= ED_operator_scene_editable;
/* flags */
@@ -1460,7 +1457,7 @@ void MESH_OT_primitive_tube_add(wmOperatorType *ot)
/* props */
RNA_def_int(ot->srna, "vertices", 32, INT_MIN, INT_MAX, "Vertices", "", 2, 500);
RNA_def_float(ot->srna, "radius", 1.0f, 0.0, FLT_MAX, "Radius", "", 0.001, 100.00);
- RNA_def_float(ot->srna, "depth", 1.0f, 0.0, FLT_MAX, "Depth", "", 0.001, 100.00);
+ RNA_def_float(ot->srna, "depth", 2.0f, 0.0, FLT_MAX, "Depth", "", 0.001, 100.00);
RNA_def_boolean(ot->srna, "cap_ends", 1, "Cap Ends", "");
ED_object_add_generic_props(ot, TRUE);
@@ -1501,7 +1498,7 @@ void MESH_OT_primitive_cone_add(wmOperatorType *ot)
/* props */
RNA_def_int(ot->srna, "vertices", 32, INT_MIN, INT_MAX, "Vertices", "", 2, 500);
RNA_def_float(ot->srna, "radius", 1.0f, 0.0, FLT_MAX, "Radius", "", 0.001, 100.00);
- RNA_def_float(ot->srna, "depth", 1.0f, 0.0, FLT_MAX, "Depth", "", 0.001, 100.00);
+ RNA_def_float(ot->srna, "depth", 2.0f, 0.0, FLT_MAX, "Depth", "", 0.001, 100.00);
RNA_def_boolean(ot->srna, "cap_end", 0, "Cap End", "");
ED_object_add_generic_props(ot, TRUE);
@@ -1590,7 +1587,7 @@ static int add_primitive_uvsphere_exec(bContext *C, wmOperator *op)
return OPERATOR_CANCELLED;
make_prim_ext(C, loc, rot, enter_editmode, layer,
- PRIM_UVSPHERE, RNA_int_get(op->ptr, "rings"),
+ PRIM_UVSPHERE, RNA_int_get(op->ptr, "ring_count"),
RNA_int_get(op->ptr, "segments"), 0,
RNA_float_get(op->ptr,"size"), 0.0f, 0, 0);
@@ -1614,7 +1611,7 @@ void MESH_OT_primitive_uv_sphere_add(wmOperatorType *ot)
/* props */
RNA_def_int(ot->srna, "segments", 32, INT_MIN, INT_MAX, "Segments", "", 3, 500);
- RNA_def_int(ot->srna, "rings", 16, INT_MIN, INT_MAX, "Rings", "", 3, 500);
+ RNA_def_int(ot->srna, "ring_count", 16, INT_MIN, INT_MAX, "Rings", "", 3, 500);
RNA_def_float(ot->srna, "size", 1.0f, 0.0, FLT_MAX, "Size", "", 0.001, 100.00);
ED_object_add_generic_props(ot, TRUE);
diff --git a/source/blender/editors/mesh/editmesh_lib.c b/source/blender/editors/mesh/editmesh_lib.c
index a5c6a3e5a02..d34cca0d358 100644
--- a/source/blender/editors/mesh/editmesh_lib.c
+++ b/source/blender/editors/mesh/editmesh_lib.c
@@ -967,13 +967,13 @@ static void update_data_blocks(EditMesh *em, CustomData *olddata, CustomData *da
}
}
-void EM_add_data_layer(EditMesh *em, CustomData *data, int type)
+void EM_add_data_layer(EditMesh *em, CustomData *data, int type, const char *name)
{
CustomData olddata;
olddata= *data;
olddata.layers= (olddata.layers)? MEM_dupallocN(olddata.layers): NULL;
- CustomData_add_layer(data, type, CD_CALLOC, NULL, 0);
+ CustomData_add_layer_named(data, type, CD_CALLOC, NULL, 0, name);
update_data_blocks(em, &olddata, data);
if (olddata.layers) MEM_freeN(olddata.layers);
diff --git a/source/blender/editors/mesh/editmesh_loop.c b/source/blender/editors/mesh/editmesh_loop.c
index 373a4e60cdb..682fbca5072 100644
--- a/source/blender/editors/mesh/editmesh_loop.c
+++ b/source/blender/editors/mesh/editmesh_loop.c
@@ -51,13 +51,7 @@ editmesh_loop: tools with own drawing subloops, select, knife, subdiv
#include "BKE_context.h"
#include "BKE_depsgraph.h"
-#include "BKE_displist.h"
-#include "BKE_global.h"
-#include "BKE_library.h"
#include "BKE_mesh.h"
-#include "BKE_object.h"
-#include "BKE_report.h"
-#include "BKE_utildefines.h"
#include "PIL_time.h"
diff --git a/source/blender/editors/mesh/editmesh_mods.c b/source/blender/editors/mesh/editmesh_mods.c
index f952820c1f0..7316e24ce65 100644
--- a/source/blender/editors/mesh/editmesh_mods.c
+++ b/source/blender/editors/mesh/editmesh_mods.c
@@ -55,14 +55,9 @@ editmesh_mods.c, UI level access, no geometry changes
#include "BKE_context.h"
#include "BKE_displist.h"
#include "BKE_depsgraph.h"
-#include "BKE_DerivedMesh.h"
-#include "BKE_customdata.h"
-#include "BKE_global.h"
#include "BKE_mesh.h"
#include "BKE_material.h"
#include "BKE_paint.h"
-#include "BKE_texture.h"
-#include "BKE_utildefines.h"
#include "BKE_report.h"
#include "IMB_imbuf_types.h"
@@ -82,7 +77,6 @@ editmesh_mods.c, UI level access, no geometry changes
#include "ED_view3d.h"
#include "BIF_gl.h"
-#include "BIF_glutil.h"
#include "mesh_intern.h"
@@ -2548,7 +2542,7 @@ void MESH_OT_select_linked_pick(wmOperatorType *ot)
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
RNA_def_boolean(ot->srna, "deselect", 0, "Deselect", "");
- RNA_def_boolean(ot->srna, "limit", 0, "Limit by Seams", "");
+ RNA_def_boolean(ot->srna, "limit", 0, "Limit by Seams", "Limit selection by seam boundries (faces only)");
}
@@ -2637,7 +2631,7 @@ void MESH_OT_select_linked(wmOperatorType *ot)
/* flags */
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
- RNA_def_boolean(ot->srna, "limit", 0, "Limit by Seams", "");
+ RNA_def_boolean(ot->srna, "limit", 0, "Limit by Seams", "Limit selection by seam boundries (faces only)");
}
@@ -4456,7 +4450,7 @@ void vertexnoise(Object *obedit, EditMesh *em)
}
else {
float tin, dum;
- externtex(ma->mtex[0], eve->co, &tin, &dum, &dum, &dum, &dum);
+ externtex(ma->mtex[0], eve->co, &tin, &dum, &dum, &dum, &dum, 0);
eve->co[2]+= 0.05*tin;
}
}
diff --git a/source/blender/editors/mesh/editmesh_tools.c b/source/blender/editors/mesh/editmesh_tools.c
index 4477f375aab..eadf0ca120f 100644
--- a/source/blender/editors/mesh/editmesh_tools.c
+++ b/source/blender/editors/mesh/editmesh_tools.c
@@ -37,8 +37,6 @@ editmesh_tool.c: UI called tools for editmesh, geometry changes here, otherwise
#include <math.h>
#include <float.h>
-#include "MEM_guardedalloc.h"
-
#include "BLO_sys_types.h" // for intptr_t support
#include "DNA_meshdata_types.h"
@@ -47,6 +45,8 @@ editmesh_tool.c: UI called tools for editmesh, geometry changes here, otherwise
#include "DNA_scene_types.h"
#include "DNA_key_types.h"
+#include "MEM_guardedalloc.h"
+
#include "RNA_define.h"
#include "RNA_access.h"
@@ -59,19 +59,13 @@ editmesh_tool.c: UI called tools for editmesh, geometry changes here, otherwise
#include "BLI_heap.h"
#include "BKE_context.h"
-#include "BKE_customdata.h"
#include "BKE_depsgraph.h"
#include "BKE_global.h"
#include "BKE_key.h"
-#include "BKE_library.h"
#include "BKE_mesh.h"
-#include "BKE_object.h"
-#include "BKE_utildefines.h"
#include "BKE_bmesh.h"
#include "BKE_report.h"
-#include "BIF_gl.h"
-#include "BIF_glutil.h"
#include "WM_api.h"
#include "WM_types.h"
@@ -1038,7 +1032,7 @@ void MESH_OT_spin(wmOperatorType *ot)
RNA_def_boolean(ot->srna, "dupli", 0, "Dupli", "Make Duplicates");
RNA_def_float(ot->srna, "degrees", 90.0f, -FLT_MAX, FLT_MAX, "Degrees", "Degrees", -360.0f, 360.0f);
- RNA_def_float_vector(ot->srna, "center", 3, NULL, -FLT_MAX, FLT_MAX, "Center", "Center in global view space", -FLT_MAX, FLT_MAX);
+ RNA_def_float_vector_xyz(ot->srna, "center", 3, NULL, -FLT_MAX, FLT_MAX, "Center", "Center in global view space", -FLT_MAX, FLT_MAX);
RNA_def_float_vector(ot->srna, "axis", 3, NULL, -1.0f, 1.0f, "Axis", "Axis in global view space", -FLT_MAX, FLT_MAX);
}
@@ -1145,7 +1139,7 @@ void MESH_OT_screw(wmOperatorType *ot)
RNA_def_int(ot->srna, "steps", 9, 0, INT_MAX, "Steps", "Steps", 0, 256);
RNA_def_int(ot->srna, "turns", 1, 0, INT_MAX, "Turns", "Turns", 0, 256);
- RNA_def_float_vector(ot->srna, "center", 3, NULL, -FLT_MAX, FLT_MAX, "Center", "Center in global view space", -FLT_MAX, FLT_MAX);
+ RNA_def_float_vector_xyz(ot->srna, "center", 3, NULL, -FLT_MAX, FLT_MAX, "Center", "Center in global view space", -FLT_MAX, FLT_MAX);
RNA_def_float_vector(ot->srna, "axis", 3, NULL, -1.0f, 1.0f, "Axis", "Axis in global view space", -FLT_MAX, FLT_MAX);
}
@@ -2947,6 +2941,13 @@ void esubdivideflag(Object *obedit, EditMesh *em, int flag, float smooth, float
}
}
+ //third pass: unhide edges that have both verts visible
+ //(these were missed if all faces were hidden, bug #21976)
+ for(eed=em->edges.first; eed; eed=eed->next){
+ if(eed->v1->h == 0 && eed->v2->h == 0)
+ eed->h &= ~1;
+ }
+
// Free the ghash and call MEM_freeN on all the value entries to return
// that memory
BLI_ghash_free(gh, NULL, (GHashValFreeFP)MEM_freeN);
diff --git a/source/blender/editors/mesh/loopcut.c b/source/blender/editors/mesh/loopcut.c
index 703f3cd425f..13538a6f218 100644
--- a/source/blender/editors/mesh/loopcut.c
+++ b/source/blender/editors/mesh/loopcut.c
@@ -51,7 +51,6 @@
#include "BKE_context.h"
#include "BKE_depsgraph.h"
#include "BKE_scene.h"
-#include "BKE_utildefines.h"
#include "BKE_mesh.h"
#include "BIF_gl.h"
@@ -60,7 +59,6 @@
#include "IMB_imbuf_types.h"
#include "ED_screen.h"
-#include "ED_util.h"
#include "ED_space_api.h"
#include "ED_view3d.h"
#include "ED_mesh.h"
@@ -254,7 +252,7 @@ static void ringsel_find_edge(tringselOpData *lcd, const bContext *C, ARegion *a
{
if (lcd->eed) {
edgering_sel(lcd, cuts, 0);
- } else {
+ } else if(lcd->edges) {
MEM_freeN(lcd->edges);
lcd->edges = NULL;
lcd->totedge = 0;
@@ -280,6 +278,8 @@ static void ringsel_finish(bContext *C, wmOperator *op)
em->selectmode &= ~SCE_SELECT_FACE;
CTX_data_tool_settings(C)->selectmode= em->selectmode;
EM_selectmode_set(em);
+
+ WM_event_add_notifier(C, NC_SCENE|ND_TOOLSETTINGS, CTX_data_scene(C));
}
DAG_id_flush_update(lcd->ob->data, OB_RECALC_DATA);
diff --git a/source/blender/editors/mesh/mesh_data.c b/source/blender/editors/mesh/mesh_data.c
index 53da24fa455..d1c6ff4c4ae 100644
--- a/source/blender/editors/mesh/mesh_data.c
+++ b/source/blender/editors/mesh/mesh_data.c
@@ -39,10 +39,8 @@
#include "DNA_view3d_types.h"
#include "BKE_context.h"
-#include "BKE_customdata.h"
#include "BKE_depsgraph.h"
#include "BKE_displist.h"
-#include "BKE_global.h"
#include "BKE_image.h"
#include "BKE_library.h"
#include "BKE_material.h"
@@ -159,7 +157,7 @@ static void delete_customdata_layer(bContext *C, Object *ob, CustomDataLayer *la
}
}
-int ED_mesh_uv_texture_add(bContext *C, Scene *scene, Object *ob, Mesh *me)
+int ED_mesh_uv_texture_add(bContext *C, Scene *scene, Object *ob, Mesh *me, const char *name, int active_set)
{
EditMesh *em;
int layernum;
@@ -169,22 +167,25 @@ int ED_mesh_uv_texture_add(bContext *C, Scene *scene, Object *ob, Mesh *me)
layernum= CustomData_number_of_layers(&em->fdata, CD_MTFACE);
if(layernum >= MAX_MTFACE)
- return OPERATOR_CANCELLED;
+ return 0;
- EM_add_data_layer(em, &em->fdata, CD_MTFACE);
- CustomData_set_layer_active(&em->fdata, CD_MTFACE, layernum);
+ EM_add_data_layer(em, &em->fdata, CD_MTFACE, name);
+ if(active_set || layernum==0)
+ CustomData_set_layer_active(&em->fdata, CD_MTFACE, layernum);
}
else {
layernum= CustomData_number_of_layers(&me->fdata, CD_MTFACE);
if(layernum >= MAX_MTFACE)
- return OPERATOR_CANCELLED;
+ return 0;
if(me->mtface)
- CustomData_add_layer(&me->fdata, CD_MTFACE, CD_DUPLICATE, me->mtface, me->totface);
+ CustomData_add_layer_named(&me->fdata, CD_MTFACE, CD_DUPLICATE, me->mtface, me->totface, name);
else
- CustomData_add_layer(&me->fdata, CD_MTFACE, CD_DEFAULT, NULL, me->totface);
+ CustomData_add_layer_named(&me->fdata, CD_MTFACE, CD_DEFAULT, NULL, me->totface, name);
+
+ if(active_set || layernum==0)
+ CustomData_set_layer_active(&me->fdata, CD_MTFACE, layernum);
- CustomData_set_layer_active(&me->fdata, CD_MTFACE, layernum);
mesh_update_customdata_pointers(me);
}
@@ -200,7 +201,7 @@ int ED_mesh_uv_texture_remove(bContext *C, Object *ob, Mesh *me)
CustomDataLayer *cdl;
int index;
- index= CustomData_get_active_layer_index(data, CD_MTFACE);
+ index= CustomData_get_active_layer_index(data, CD_MTFACE);
cdl= (index == -1) ? NULL: &data->layers[index];
if(!cdl)
@@ -213,7 +214,7 @@ int ED_mesh_uv_texture_remove(bContext *C, Object *ob, Mesh *me)
return 1;
}
-int ED_mesh_color_add(bContext *C, Scene *scene, Object *ob, Mesh *me)
+int ED_mesh_color_add(bContext *C, Scene *scene, Object *ob, Mesh *me, const char *name, int active_set)
{
EditMesh *em;
MCol *mcol;
@@ -226,8 +227,9 @@ int ED_mesh_color_add(bContext *C, Scene *scene, Object *ob, Mesh *me)
if(layernum >= MAX_MCOL)
return 0;
- EM_add_data_layer(em, &em->fdata, CD_MCOL);
- CustomData_set_layer_active(&em->fdata, CD_MCOL, layernum);
+ EM_add_data_layer(em, &em->fdata, CD_MCOL, name);
+ if(active_set || layernum==0)
+ CustomData_set_layer_active(&em->fdata, CD_MCOL, layernum);
}
else {
layernum= CustomData_number_of_layers(&me->fdata, CD_MCOL);
@@ -237,11 +239,13 @@ int ED_mesh_color_add(bContext *C, Scene *scene, Object *ob, Mesh *me)
mcol= me->mcol;
if(me->mcol)
- CustomData_add_layer(&me->fdata, CD_MCOL, CD_DUPLICATE, me->mcol, me->totface);
+ CustomData_add_layer_named(&me->fdata, CD_MCOL, CD_DUPLICATE, me->mcol, me->totface, name);
else
- CustomData_add_layer(&me->fdata, CD_MCOL, CD_DEFAULT, NULL, me->totface);
+ CustomData_add_layer_named(&me->fdata, CD_MCOL, CD_DEFAULT, NULL, me->totface, name);
+
+ if(active_set || layernum==0)
+ CustomData_set_layer_active(&me->fdata, CD_MCOL, layernum);
- CustomData_set_layer_active(&me->fdata, CD_MCOL, layernum);
mesh_update_customdata_pointers(me);
if(!mcol)
@@ -288,7 +292,7 @@ static int uv_texture_add_exec(bContext *C, wmOperator *op)
Object *ob= CTX_data_pointer_get_type(C, "object", &RNA_Object).data;
Mesh *me= ob->data;
- if(!ED_mesh_uv_texture_add(C, scene, ob, me))
+ if(!ED_mesh_uv_texture_add(C, scene, ob, me, NULL, TRUE))
return OPERATOR_CANCELLED;
return OPERATOR_FINISHED;
@@ -422,7 +426,7 @@ static int vertex_color_add_exec(bContext *C, wmOperator *op)
Object *ob= CTX_data_pointer_get_type(C, "object", &RNA_Object).data;
Mesh *me= ob->data;
- if(!ED_mesh_color_add(C, scene, ob, me))
+ if(!ED_mesh_color_add(C, scene, ob, me, NULL, TRUE))
return OPERATOR_CANCELLED;
return OPERATOR_FINISHED;
@@ -717,6 +721,7 @@ static void mesh_add_faces(Mesh *mesh, int len)
mesh->totface= totface;
}
+/*
void ED_mesh_geometry_add(Mesh *mesh, ReportList *reports, int verts, int edges, int faces)
{
if(mesh->edit_mesh) {
@@ -731,33 +736,39 @@ void ED_mesh_geometry_add(Mesh *mesh, ReportList *reports, int verts, int edges,
if(faces)
mesh_add_faces(mesh, faces);
}
+*/
-void ED_mesh_calc_normals(Mesh *me)
+void ED_mesh_faces_add(Mesh *mesh, ReportList *reports, int count)
{
- mesh_calc_normals(me->mvert, me->totvert, me->mface, me->totface, NULL);
+ if(mesh->edit_mesh) {
+ BKE_report(reports, RPT_ERROR, "Can't add faces in edit mode.");
+ return;
+ }
+
+ mesh_add_faces(mesh, count);
}
-void ED_mesh_material_add(Mesh *me, Material *ma)
+void ED_mesh_edges_add(Mesh *mesh, ReportList *reports, int count)
{
- int i;
- int totcol = me->totcol + 1;
- Material **mat;
-
- /* don't add if mesh already has it */
- for(i = 0; i < me->totcol; i++)
- if(me->mat[i] == ma)
- return;
-
- mat= MEM_callocN(sizeof(void*)*totcol, "newmatar");
+ if(mesh->edit_mesh) {
+ BKE_report(reports, RPT_ERROR, "Can't add edges in edit mode.");
+ return;
+ }
- if(me->totcol) memcpy(mat, me->mat, sizeof(void*) * me->totcol);
- if(me->mat) MEM_freeN(me->mat);
+ mesh_add_edges(mesh, count);
+}
- me->mat = mat;
- me->mat[me->totcol++] = ma;
- if(ma)
- ma->id.us++;
+void ED_mesh_vertices_add(Mesh *mesh, ReportList *reports, int count)
+{
+ if(mesh->edit_mesh) {
+ BKE_report(reports, RPT_ERROR, "Can't add vertices in edit mode.");
+ return;
+ }
- test_object_materials((ID*)me);
+ mesh_add_verts(mesh, count);
}
+void ED_mesh_calc_normals(Mesh *me)
+{
+ mesh_calc_normals(me->mvert, me->totvert, me->mface, me->totface, NULL);
+}
diff --git a/source/blender/editors/mesh/mesh_intern.h b/source/blender/editors/mesh/mesh_intern.h
index 6db2a3f211d..fcd1eb40a02 100644
--- a/source/blender/editors/mesh/mesh_intern.h
+++ b/source/blender/editors/mesh/mesh_intern.h
@@ -71,7 +71,7 @@ void MESH_OT_separate(struct wmOperatorType *ot);
void MESH_OT_primitive_plane_add(struct wmOperatorType *ot);
void MESH_OT_primitive_cube_add(struct wmOperatorType *ot);
void MESH_OT_primitive_circle_add(struct wmOperatorType *ot);
-void MESH_OT_primitive_tube_add(struct wmOperatorType *ot);
+void MESH_OT_primitive_cylinder_add(struct wmOperatorType *ot);
void MESH_OT_primitive_cone_add(struct wmOperatorType *ot);
void MESH_OT_primitive_grid_add(struct wmOperatorType *ot);
void MESH_OT_primitive_monkey_add(struct wmOperatorType *ot);
diff --git a/source/blender/editors/mesh/mesh_ops.c b/source/blender/editors/mesh/mesh_ops.c
index 9eac347c893..9e071aa4a21 100644
--- a/source/blender/editors/mesh/mesh_ops.c
+++ b/source/blender/editors/mesh/mesh_ops.c
@@ -29,7 +29,6 @@
#include <stdlib.h>
#include <math.h>
-#include "MEM_guardedalloc.h"
#include "DNA_object_types.h"
#include "DNA_scene_types.h"
@@ -39,9 +38,6 @@
#include "BLI_editVert.h"
#include "BKE_context.h"
-#include "BKE_global.h"
-#include "BKE_mesh.h"
-#include "BKE_utildefines.h"
#include "RNA_access.h"
@@ -79,7 +75,7 @@ void ED_operatortypes_mesh(void)
WM_operatortype_append(MESH_OT_primitive_plane_add);
WM_operatortype_append(MESH_OT_primitive_cube_add);
WM_operatortype_append(MESH_OT_primitive_circle_add);
- WM_operatortype_append(MESH_OT_primitive_tube_add);
+ WM_operatortype_append(MESH_OT_primitive_cylinder_add);
WM_operatortype_append(MESH_OT_primitive_cone_add);
WM_operatortype_append(MESH_OT_primitive_grid_add);
WM_operatortype_append(MESH_OT_primitive_monkey_add);
diff --git a/source/blender/editors/mesh/meshtools.c b/source/blender/editors/mesh/meshtools.c
index 47b7b89ff7a..7cef819a795 100644
--- a/source/blender/editors/mesh/meshtools.c
+++ b/source/blender/editors/mesh/meshtools.c
@@ -44,7 +44,6 @@
#include "DNA_meshdata_types.h"
#include "DNA_object_types.h"
#include "DNA_scene_types.h"
-#include "DNA_view3d_types.h"
#include "BLI_math.h"
#include "BLI_blenlib.h"
@@ -54,20 +53,15 @@
#include "BLI_threads.h"
-#include "BKE_blender.h"
#include "BKE_context.h"
#include "BKE_depsgraph.h"
+#include "BKE_deform.h"
#include "BKE_DerivedMesh.h"
-#include "BKE_customdata.h"
-#include "BKE_global.h"
-#include "BKE_image.h"
#include "BKE_key.h"
#include "BKE_library.h"
#include "BKE_main.h"
#include "BKE_mesh.h"
#include "BKE_material.h"
-#include "BKE_object.h"
-#include "BKE_utildefines.h"
#include "BKE_report.h"
#include "BLO_sys_types.h" // for intptr_t support
@@ -191,12 +185,7 @@ int join_mesh_exec(bContext *C, wmOperator *op)
/* Join this object's vertex groups to the base one's */
for(dg=base->object->defbase.first; dg; dg=dg->next) {
/* See if this group exists in the object (if it doesn't, add it to the end) */
- for(odg=ob->defbase.first; odg; odg=odg->next) {
- if(!strcmp(odg->name, dg->name)) {
- break;
- }
- }
- if(!odg) {
+ if(!defgroup_find_name(ob, dg->name)) {
odg = MEM_callocN(sizeof(bDeformGroup), "join deformGroup");
memcpy(odg, dg, sizeof(bDeformGroup));
BLI_addtail(&ob->defbase, odg);
diff --git a/source/blender/editors/metaball/Makefile b/source/blender/editors/metaball/Makefile
index d971ec9b412..c28ef59e9db 100644
--- a/source/blender/editors/metaball/Makefile
+++ b/source/blender/editors/metaball/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2007 Blender Foundation
# All rights reserved.
diff --git a/source/blender/editors/metaball/mball_edit.c b/source/blender/editors/metaball/mball_edit.c
index eb344b1e5fe..80cea4eea1c 100644
--- a/source/blender/editors/metaball/mball_edit.c
+++ b/source/blender/editors/metaball/mball_edit.c
@@ -43,11 +43,9 @@
#include "RNA_define.h"
#include "RNA_access.h"
-#include "BKE_utildefines.h"
#include "BKE_depsgraph.h"
-#include "BKE_object.h"
#include "BKE_context.h"
-#include "BKE_library.h"
+#include "BKE_mball.h"
#include "ED_screen.h"
#include "ED_view3d.h"
@@ -105,54 +103,12 @@ MetaElem *add_metaball_primitive(bContext *C, float mat[4][4], int type, int new
ml->flag &= ~SELECT;
ml= ml->next;
}
-
- ml= MEM_callocN(sizeof(MetaElem), "metaelem");
-
- ml->x= mat[3][0];
- ml->y= mat[3][1];
- ml->z= mat[3][2];
- ml->quat[0]= 1.0;
- ml->quat[1]= 0.0;
- ml->quat[2]= 0.0;
- ml->quat[3]= 0.0;
- ml->rad= 2.0;
- ml->s= 2.0;
- ml->flag= SELECT | MB_SCALE_RAD;
-
- switch(type) {
- case MB_BALL:
- ml->type = MB_BALL;
- ml->expx= ml->expy= ml->expz= 1.0;
-
- break;
- case MB_TUBE:
- ml->type = MB_TUBE;
- ml->expx= ml->expy= ml->expz= 1.0;
-
- break;
- case MB_PLANE:
- ml->type = MB_PLANE;
- ml->expx= ml->expy= ml->expz= 1.0;
-
- break;
- case MB_ELIPSOID:
- ml->type = MB_ELIPSOID;
- ml->expx= 1.2f;
- ml->expy= 0.8f;
- ml->expz= 1.0;
-
- break;
- case MB_CUBE:
- ml->type = MB_CUBE;
- ml->expx= ml->expy= ml->expz= 1.0;
-
- break;
- default:
- break;
- }
+ ml= add_metaball_element(mball, type);
+ copy_v3_v3(&ml->x, mat[3]);
+
+ ml->flag |= SELECT;
mball->lastelem= ml;
-
return ml;
}
diff --git a/source/blender/editors/object/CMakeLists.txt b/source/blender/editors/object/CMakeLists.txt
index 56f144ce63c..b16b50f10ba 100644
--- a/source/blender/editors/object/CMakeLists.txt
+++ b/source/blender/editors/object/CMakeLists.txt
@@ -42,7 +42,7 @@ IF(NOT WITH_PYTHON)
ENDIF(NOT WITH_PYTHON)
IF(WIN32)
- SET(INC ${INC} ${PTHREADS_INC})
+ LIST(APPEND INC ${PTHREADS_INC})
ENDIF(WIN32)
BLENDERLIB(bf_editor_object "${SRC}" "${INC}")
diff --git a/source/blender/editors/object/Makefile b/source/blender/editors/object/Makefile
index 7c081355ed5..4694653b115 100644
--- a/source/blender/editors/object/Makefile
+++ b/source/blender/editors/object/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2007 Blender Foundation
# All rights reserved.
diff --git a/source/blender/editors/object/SConscript b/source/blender/editors/object/SConscript
index f4a476474e4..d4e6cec6986 100644
--- a/source/blender/editors/object/SConscript
+++ b/source/blender/editors/object/SConscript
@@ -19,6 +19,6 @@ if env['OURPLATFORM'] in ('win32-vc', 'win32-mingw', 'linuxcross', 'win64-vc'):
incs += ' ' + env['BF_PTHREADS_INC']
if not env['WITH_BF_PYTHON']:
- defs.append('DISABLE_PYTHON')
+ defs.append('DISABLE_PYTHON')
env.BlenderLib ( 'bf_editors_object', sources, Split(incs), defs, libtype=['core'], priority=[35] )
diff --git a/source/blender/editors/object/object_add.c b/source/blender/editors/object/object_add.c
index 67cae8d4155..40b7df72f1c 100644
--- a/source/blender/editors/object/object_add.c
+++ b/source/blender/editors/object/object_add.c
@@ -49,12 +49,10 @@
#include "BKE_constraint.h"
#include "BKE_context.h"
#include "BKE_curve.h"
-#include "BKE_customdata.h"
#include "BKE_depsgraph.h"
#include "BKE_DerivedMesh.h"
#include "BKE_displist.h"
#include "BKE_effect.h"
-#include "BKE_global.h"
#include "BKE_group.h"
#include "BKE_lattice.h"
#include "BKE_library.h"
@@ -67,9 +65,7 @@
#include "BKE_particle.h"
#include "BKE_report.h"
#include "BKE_sca.h"
-#include "BKE_scene.h"
#include "BKE_texture.h"
-#include "BKE_utildefines.h"
#include "RNA_access.h"
#include "RNA_define.h"
@@ -180,10 +176,10 @@ void ED_object_add_generic_props(wmOperatorType *ot, int do_editmode)
RNA_def_property_flag(prop, PROP_HIDDEN);
}
- RNA_def_float_vector(ot->srna, "location", 3, NULL, -FLT_MAX, FLT_MAX, "Location", "Location for the newly added object.", -FLT_MAX, FLT_MAX);
+ RNA_def_float_vector_xyz(ot->srna, "location", 3, NULL, -FLT_MAX, FLT_MAX, "Location", "Location for the newly added object.", -FLT_MAX, FLT_MAX);
RNA_def_float_rotation(ot->srna, "rotation", 3, NULL, -FLT_MAX, FLT_MAX, "Rotation", "Rotation for the newly added object", -FLT_MAX, FLT_MAX);
- prop = RNA_def_boolean_layer_member(ot->srna, "layer", 20, NULL, "Layer", "");
+ prop = RNA_def_boolean_layer_member(ot->srna, "layers", 20, NULL, "Layer", "");
RNA_def_property_flag(prop, PROP_HIDDEN);
}
@@ -200,7 +196,7 @@ static void object_add_generic_invoke_options(bContext *C, wmOperator *op)
RNA_float_set_array(op->ptr, "location", loc);
}
- if(!RNA_property_is_set(op->ptr, "layer")) {
+ if(!RNA_property_is_set(op->ptr, "layers")) {
View3D *v3d = CTX_wm_view3d(C);
Scene *scene = CTX_data_scene(C);
int a, values[20], layer;
@@ -218,7 +214,7 @@ static void object_add_generic_invoke_options(bContext *C, wmOperator *op)
values[a]= (layer & (1<<a));
}
- RNA_boolean_set_array(op->ptr, "layer", values);
+ RNA_boolean_set_array(op->ptr, "layers", values);
}
}
@@ -239,8 +235,8 @@ int ED_object_add_generic_get_opts(bContext *C, wmOperator *op, float *loc, floa
*enter_editmode = TRUE;
}
- if(RNA_property_is_set(op->ptr, "layer")) {
- RNA_boolean_get_array(op->ptr, "layer", layer_values);
+ if(RNA_property_is_set(op->ptr, "layers")) {
+ RNA_boolean_get_array(op->ptr, "layers", layer_values);
*layer= 0;
for(a=0; a<20; a++) {
if(layer_values[a])
@@ -260,7 +256,9 @@ int ED_object_add_generic_get_opts(bContext *C, wmOperator *op, float *loc, floa
if(v3d && v3d->localvd)
*layer |= v3d->lay;
- if (RNA_property_is_set(op->ptr, "view_align"))
+ if(RNA_property_is_set(op->ptr, "rotation"))
+ view_align = FALSE;
+ else if (RNA_property_is_set(op->ptr, "view_align"))
view_align = RNA_boolean_get(op->ptr, "view_align");
else
view_align = U.flag & USER_ADD_VIEWALIGNED;
@@ -307,6 +305,8 @@ Object *ED_object_add_type(bContext *C, int type, float *loc, float *rot, int en
if(enter_editmode)
ED_object_enter_editmode(C, EM_IGNORE_LAYER);
+ WM_event_add_notifier(C, NC_SCENE|ND_LAYER_CONTENT, scene);
+
return ob;
}
@@ -495,7 +495,7 @@ void OBJECT_OT_camera_add(wmOperatorType *ot)
static EnumPropertyItem prop_metaball_types[]= {
{MB_BALL, "MBALL_BALL", ICON_META_BALL, "Meta Ball", ""},
- {MB_TUBE, "MBALL_TUBE", ICON_META_TUBE, "Meta Tube", ""},
+ {MB_TUBE, "MBALL_CAPSULE", ICON_META_CAPSULE, "Meta Capsule", ""},
{MB_PLANE, "MBALL_PLANE", ICON_META_PLANE, "Meta Plane", ""},
{MB_CUBE, "MBALL_CUBE", ICON_META_CUBE, "Meta Cube", ""},
{MB_ELIPSOID, "MBALL_ELLIPSOID", ICON_META_ELLIPSOID, "Meta Ellipsoid", ""},
@@ -505,7 +505,6 @@ static EnumPropertyItem prop_metaball_types[]= {
static int object_metaball_add_exec(bContext *C, wmOperator *op)
{
Object *obedit= CTX_data_edit_object(C);
- MetaBall *mball;
MetaElem *elem;
int newob= 0;
int enter_editmode;
@@ -527,9 +526,7 @@ static int object_metaball_add_exec(bContext *C, wmOperator *op)
ED_object_new_primitive_matrix(C, obedit, loc, rot, mat);
elem= (MetaElem*)add_metaball_primitive(C, mat, RNA_enum_get(op->ptr, "type"), newob);
- mball= (MetaBall*)obedit->data;
- BLI_addtail(mball->editelems, elem);
-
+
/* userdef */
if (newob && !enter_editmode) {
ED_object_exit_editmode(C, EM_FREEDATA);
@@ -830,7 +827,8 @@ static int object_delete_exec(bContext *C, wmOperator *op)
DAG_scene_sort(bmain, scene);
DAG_ids_flush_update(bmain, 0);
- WM_event_add_notifier(C, NC_SCENE|ND_OB_ACTIVE, CTX_data_scene(C));
+ WM_event_add_notifier(C, NC_SCENE|ND_OB_ACTIVE, scene);
+ WM_event_add_notifier(C, NC_SCENE|ND_LAYER_CONTENT, scene);
return OPERATOR_FINISHED;
}
diff --git a/source/blender/editors/object/object_bake.c b/source/blender/editors/object/object_bake.c
index 6261c33a6f7..f81e73faf73 100644
--- a/source/blender/editors/object/object_bake.c
+++ b/source/blender/editors/object/object_bake.c
@@ -48,8 +48,7 @@
#include "BKE_global.h"
#include "BKE_image.h"
#include "BKE_main.h"
-#include "BKE_object.h"
-#include "BKE_utildefines.h"
+#include "BKE_multires.h"
#include "BKE_report.h"
#include "RE_pipeline.h"
@@ -65,6 +64,7 @@
#include "WM_api.h"
#include "WM_types.h"
+#include "ED_object.h"
/* ****************** render BAKING ********************** */
@@ -139,6 +139,12 @@ static void init_bake_internal(BakeRender *bkr, bContext *C)
{
Scene *scene= CTX_data_scene(C);
+ /* flush multires changes (for sculpt) */
+ multires_force_render_update(CTX_data_active_object(C));
+
+ /* get editmode results */
+ ED_object_exit_editmode(C, 0); /* 0 = does not exit editmode */
+
bkr->sa= biggest_image_area(CTX_wm_screen(C)); /* can be NULL */
bkr->main= CTX_data_main(C);
bkr->scene= scene;
@@ -227,11 +233,11 @@ static void bake_update(void *bkv)
static void bake_freejob(void *bkv)
{
BakeRender *bkr= bkv;
- BLI_end_threads(&bkr->threads);
finish_bake_internal(bkr);
- if(bkr->tot==0) BKE_report(bkr->reports, RPT_ERROR, "No Images found to bake to");
+ if(bkr->tot==0) BKE_report(bkr->reports, RPT_ERROR, "No valid images found to bake to");
MEM_freeN(bkr);
+ G.rendering = 0;
}
/* catch esc */
@@ -254,6 +260,10 @@ static int objects_bake_render_invoke(bContext *C, wmOperator *op, wmEvent *_eve
{
Scene *scene= CTX_data_scene(C);
+ /* only one render job at a time */
+ if(WM_jobs_test(CTX_wm_manager(C), scene))
+ return OPERATOR_CANCELLED;
+
if(test_bake_internal(C, op->reports)==0) {
return OPERATOR_CANCELLED;
}
@@ -271,6 +281,7 @@ static int objects_bake_render_invoke(bContext *C, wmOperator *op, wmEvent *_eve
WM_jobs_callbacks(steve, bake_startjob, NULL, bake_update, NULL);
G.afbreek= 0;
+ G.rendering = 1;
WM_jobs_start(CTX_wm_manager(C), steve);
@@ -324,7 +335,7 @@ static int bake_image_exec(bContext *C, wmOperator *op)
}
BLI_end_threads(&threads);
- if(bkr.tot==0) BKE_report(op->reports, RPT_ERROR, "No Images found to bake to");
+ if(bkr.tot==0) BKE_report(op->reports, RPT_ERROR, "No valid images found to bake to");
finish_bake_internal(&bkr);
}
diff --git a/source/blender/editors/object/object_constraint.c b/source/blender/editors/object/object_constraint.c
index ee1c7df0409..f5d87df10a1 100644
--- a/source/blender/editors/object/object_constraint.c
+++ b/source/blender/editors/object/object_constraint.c
@@ -51,7 +51,6 @@
#include "BKE_main.h"
#include "BKE_object.h"
#include "BKE_report.h"
-#include "BKE_utildefines.h"
#include "BIK_api.h"
#ifndef DISABLE_PYTHON
@@ -806,8 +805,10 @@ static int constraint_delete_exec (bContext *C, wmOperator *op)
/* there's no active constraint now, so make sure this is the case */
constraints_set_active(lb, NULL);
+ ED_object_constraint_update(ob); /* needed to set the flags on posebones correctly */
+
/* notifiers */
- WM_event_add_notifier(C, NC_OBJECT|ND_CONSTRAINT, ob);
+ WM_event_add_notifier(C, NC_OBJECT|ND_CONSTRAINT|NA_REMOVED, ob);
return OPERATOR_FINISHED;
}
diff --git a/source/blender/editors/object/object_edit.c b/source/blender/editors/object/object_edit.c
index 18da264336e..78404959dff 100644
--- a/source/blender/editors/object/object_edit.c
+++ b/source/blender/editors/object/object_edit.c
@@ -34,7 +34,11 @@
#include "MEM_guardedalloc.h"
-#include "IMB_imbuf_types.h"
+#include "BLI_blenlib.h"
+#include "BLI_math.h"
+#include "BLI_editVert.h"
+#include "BLI_ghash.h"
+#include "BLI_rand.h"
#include "DNA_armature_types.h"
#include "DNA_curve_types.h"
@@ -43,57 +47,38 @@
#include "DNA_material_types.h"
#include "DNA_meta_types.h"
#include "DNA_property_types.h"
+#include "DNA_scene_types.h"
+#include "DNA_object_types.h"
+#include "DNA_meshdata_types.h"
#include "DNA_vfont_types.h"
-#include "BLI_blenlib.h"
-#include "BLI_math.h"
-#include "BLI_editVert.h"
-#include "BLI_ghash.h"
-#include "BLI_rand.h"
+#include "IMB_imbuf_types.h"
-#include "BKE_action.h"
#include "BKE_anim.h"
-#include "BKE_armature.h"
#include "BKE_constraint.h"
#include "BKE_context.h"
-#include "BKE_customdata.h"
-#include "BKE_blender.h"
-#include "BKE_cloth.h"
#include "BKE_curve.h"
-#include "BKE_displist.h"
#include "BKE_depsgraph.h"
-#include "BKE_DerivedMesh.h"
-#include "BKE_effect.h"
#include "BKE_font.h"
-#include "BKE_global.h"
-#include "BKE_group.h"
#include "BKE_image.h"
-#include "BKE_key.h"
-#include "BKE_lattice.h"
#include "BKE_library.h"
#include "BKE_main.h"
#include "BKE_material.h"
#include "BKE_mball.h"
#include "BKE_mesh.h"
-#include "BKE_nla.h"
#include "BKE_object.h"
#include "BKE_paint.h"
-#include "BKE_particle.h"
#include "BKE_pointcache.h"
#include "BKE_property.h"
-#include "BKE_report.h"
#include "BKE_sca.h"
-#include "BKE_scene.h"
#include "BKE_softbody.h"
-#include "BKE_subsurf.h"
-#include "BKE_texture.h"
-#include "BKE_utildefines.h"
#include "BKE_modifier.h"
#include "ED_armature.h"
#include "ED_curve.h"
#include "ED_mesh.h"
#include "ED_mball.h"
+#include "ED_lattice.h"
#include "ED_object.h"
#include "ED_screen.h"
#include "ED_util.h"
@@ -954,14 +939,15 @@ void special_editmenu(Scene *scene, View3D *v3d)
static float weight= 1.0f;
{ // XXX
// XXX if(fbutton(&weight, 0.0f, 1.0f, 10, 10, "Set Weight")) {
- int a= lt->editlatt->pntsu*lt->editlatt->pntsv*lt->editlatt->pntsw;
- BPoint *bp= lt->editlatt->def;
+ Lattice *editlt= lt->editlatt->latt;
+ int a= editlt->pntsu*editlt->pntsv*editlt->pntsw;
+ BPoint *bp= editlt->def;
while(a--) {
if(bp->f1 & SELECT)
bp->weight= weight;
bp++;
- }
+ }
}
}
diff --git a/source/blender/editors/object/object_group.c b/source/blender/editors/object/object_group.c
index b0a6c6471a2..f000485466f 100644
--- a/source/blender/editors/object/object_group.c
+++ b/source/blender/editors/object/object_group.c
@@ -29,7 +29,6 @@
#include <string.h>
-#include "MEM_guardedalloc.h"
#include "BLI_blenlib.h"
@@ -39,11 +38,9 @@
#include "BKE_context.h"
#include "BKE_depsgraph.h"
-#include "BKE_global.h"
#include "BKE_group.h"
#include "BKE_main.h"
#include "BKE_report.h"
-#include "BKE_scene.h"
#include "ED_screen.h"
diff --git a/source/blender/editors/object/object_hook.c b/source/blender/editors/object/object_hook.c
index fefefae586c..75e22d5356f 100644
--- a/source/blender/editors/object/object_hook.c
+++ b/source/blender/editors/object/object_hook.c
@@ -43,7 +43,6 @@
#include "BKE_action.h"
#include "BKE_context.h"
-#include "BKE_customdata.h"
#include "BKE_depsgraph.h"
#include "BKE_main.h"
#include "BKE_mesh.h"
@@ -51,7 +50,6 @@
#include "BKE_object.h"
#include "BKE_report.h"
#include "BKE_scene.h"
-#include "BKE_utildefines.h"
#include "RNA_define.h"
#include "RNA_access.h"
@@ -193,13 +191,14 @@ static int return_editlattice_indexar(Lattice *editlatt, int *tot, int **indexar
static void select_editlattice_hook(Object *obedit, HookModifierData *hmd)
{
- Lattice *lt= obedit->data;
+ Lattice *lt= obedit->data, *editlt;
BPoint *bp;
int index=0, nr=0, a;
-
+
+ editlt= lt->editlatt->latt;
/* count */
- a= lt->editlatt->pntsu*lt->editlatt->pntsv*lt->editlatt->pntsw;
- bp= lt->editlatt->def;
+ a= editlt->pntsu*editlt->pntsv*editlt->pntsw;
+ bp= editlt->def;
while(a--) {
if(hmd->indexar[index]==nr) {
bp->f1 |= SELECT;
@@ -315,7 +314,7 @@ static int object_hook_index_array(Object *obedit, int *tot, int **indexar, char
case OB_LATTICE:
{
Lattice *lt= obedit->data;
- return return_editlattice_indexar(lt->editlatt, tot, indexar, cent_r);
+ return return_editlattice_indexar(lt->editlatt->latt, tot, indexar, cent_r);
}
default:
return 0;
diff --git a/source/blender/editors/object/object_intern.h b/source/blender/editors/object/object_intern.h
index 38777722605..4dc5532e975 100644
--- a/source/blender/editors/object/object_intern.h
+++ b/source/blender/editors/object/object_intern.h
@@ -131,11 +131,6 @@ void OBJECT_OT_hook_reset(struct wmOperatorType *ot);
void OBJECT_OT_hook_recenter(struct wmOperatorType *ot);
/* object_lattice.c */
-void free_editLatt(struct Object *ob);
-void make_editLatt(struct Object *obedit);
-void load_editLatt(struct Object *obedit);
-void remake_editLatt(struct Object *obedit);
-
void LATTICE_OT_select_all(struct wmOperatorType *ot);
void LATTICE_OT_make_regular(struct wmOperatorType *ot);
diff --git a/source/blender/editors/object/object_lattice.c b/source/blender/editors/object/object_lattice.c
index 52f779748fa..9f82a1209cf 100644
--- a/source/blender/editors/object/object_lattice.c
+++ b/source/blender/editors/object/object_lattice.c
@@ -45,7 +45,8 @@
#include "BKE_key.h"
#include "BKE_lattice.h"
#include "BKE_mesh.h"
-#include "BKE_utildefines.h"
+
+#include "BLI_listbase.h"
#include "ED_screen.h"
#include "ED_view3d.h"
@@ -63,12 +64,16 @@ void free_editLatt(Object *ob)
Lattice *lt= ob->data;
if(lt->editlatt) {
- if(lt->editlatt->def)
- MEM_freeN(lt->editlatt->def);
- if(lt->editlatt->dvert)
- free_dverts(lt->editlatt->dvert, lt->editlatt->pntsu*lt->editlatt->pntsv*lt->editlatt->pntsw);
-
+ Lattice *editlt= lt->editlatt->latt;
+
+ if(editlt->def)
+ MEM_freeN(editlt->def);
+ if(editlt->dvert)
+ free_dverts(editlt->dvert, editlt->pntsu*editlt->pntsv*editlt->pntsw);
+
+ MEM_freeN(editlt);
MEM_freeN(lt->editlatt);
+
lt->editlatt= NULL;
}
}
@@ -77,47 +82,51 @@ void make_editLatt(Object *obedit)
{
Lattice *lt= obedit->data;
KeyBlock *actkey;
-
+
free_editLatt(obedit);
-
+
lt= obedit->data;
actkey= ob_get_keyblock(obedit);
if(actkey)
key_to_latt(actkey, lt);
- lt->editlatt= MEM_dupallocN(lt);
- lt->editlatt->def= MEM_dupallocN(lt->def);
-
+ lt->editlatt= MEM_callocN(sizeof(EditLatt), "editlatt");
+ lt->editlatt->latt= MEM_dupallocN(lt);
+ lt->editlatt->latt->def= MEM_dupallocN(lt->def);
+
if(lt->dvert) {
int tot= lt->pntsu*lt->pntsv*lt->pntsw;
- lt->editlatt->dvert = MEM_mallocN (sizeof (MDeformVert)*tot, "Lattice MDeformVert");
- copy_dverts(lt->editlatt->dvert, lt->dvert, tot);
+ lt->editlatt->latt->dvert = MEM_mallocN (sizeof (MDeformVert)*tot, "Lattice MDeformVert");
+ copy_dverts(lt->editlatt->latt->dvert, lt->dvert, tot);
}
+
+ if(lt->key) lt->editlatt->shapenr= obedit->shapenr;
}
void load_editLatt(Object *obedit)
{
- Lattice *lt;
+ Lattice *lt, *editlt;
KeyBlock *actkey;
BPoint *bp;
float *fp;
int tot;
-
+
lt= obedit->data;
-
- actkey= ob_get_keyblock(obedit);
+ editlt= lt->editlatt->latt;
+
+ if(lt->editlatt->shapenr) {
+ actkey= BLI_findlink(&lt->key->block, lt->editlatt->shapenr-1);
- if(actkey) {
/* active key: vertices */
- tot= lt->editlatt->pntsu*lt->editlatt->pntsv*lt->editlatt->pntsw;
+ tot= editlt->pntsu*editlt->pntsv*editlt->pntsw;
if(actkey->data) MEM_freeN(actkey->data);
fp=actkey->data= MEM_callocN(lt->key->elemsize*tot, "actkey->data");
actkey->totelem= tot;
-
- bp= lt->editlatt->def;
+
+ bp= editlt->def;
while(tot--) {
VECCOPY(fp, bp->vec);
fp+= 3;
@@ -126,30 +135,30 @@ void load_editLatt(Object *obedit)
}
else {
MEM_freeN(lt->def);
-
- lt->def= MEM_dupallocN(lt->editlatt->def);
- lt->flag= lt->editlatt->flag;
+ lt->def= MEM_dupallocN(editlt->def);
- lt->pntsu= lt->editlatt->pntsu;
- lt->pntsv= lt->editlatt->pntsv;
- lt->pntsw= lt->editlatt->pntsw;
+ lt->flag= editlt->flag;
+
+ lt->pntsu= editlt->pntsu;
+ lt->pntsv= editlt->pntsv;
+ lt->pntsw= editlt->pntsw;
- lt->typeu= lt->editlatt->typeu;
- lt->typev= lt->editlatt->typev;
- lt->typew= lt->editlatt->typew;
+ lt->typeu= editlt->typeu;
+ lt->typev= editlt->typev;
+ lt->typew= editlt->typew;
}
-
+
if(lt->dvert) {
free_dverts(lt->dvert, lt->pntsu*lt->pntsv*lt->pntsw);
lt->dvert= NULL;
}
-
- if(lt->editlatt->dvert) {
+
+ if(editlt->dvert) {
int tot= lt->pntsu*lt->pntsv*lt->pntsw;
-
+
lt->dvert = MEM_mallocN (sizeof (MDeformVert)*tot, "Lattice MDeformVert");
- copy_dverts(lt->dvert, lt->editlatt->dvert, tot);
+ copy_dverts(lt->dvert, editlt->dvert, tot);
}
}
@@ -161,9 +170,9 @@ void ED_setflagsLatt(Object *obedit, int flag)
BPoint *bp;
int a;
- bp= lt->editlatt->def;
+ bp= lt->editlatt->latt->def;
- a= lt->editlatt->pntsu*lt->editlatt->pntsv*lt->editlatt->pntsw;
+ a= lt->editlatt->latt->pntsu*lt->editlatt->latt->pntsv*lt->editlatt->latt->pntsw;
while(a--) {
if(bp->hide==0) {
@@ -184,8 +193,8 @@ int select_all_exec(bContext *C, wmOperator *op)
if (action == SEL_TOGGLE) {
action = SEL_SELECT;
- bp= lt->editlatt->def;
- a= lt->editlatt->pntsu*lt->editlatt->pntsv*lt->editlatt->pntsw;
+ bp= lt->editlatt->latt->def;
+ a= lt->editlatt->latt->pntsu*lt->editlatt->latt->pntsv*lt->editlatt->latt->pntsw;
while(a--) {
if(bp->hide==0) {
@@ -206,8 +215,8 @@ int select_all_exec(bContext *C, wmOperator *op)
ED_setflagsLatt(obedit, 0);
break;
case SEL_INVERT:
- bp= lt->editlatt->def;
- a= lt->editlatt->pntsu*lt->editlatt->pntsv*lt->editlatt->pntsw;
+ bp= lt->editlatt->latt->def;
+ a= lt->editlatt->latt->pntsu*lt->editlatt->latt->pntsv*lt->editlatt->latt->pntsw;
while(a--) {
if(bp->hide==0) {
@@ -257,7 +266,7 @@ int make_regular_exec(bContext *C, wmOperator *op)
if(ob) {
lt= ob->data;
- resizelattice(lt->editlatt, lt->pntsu, lt->pntsv, lt->pntsw, NULL);
+ resizelattice(lt->editlatt->latt, lt->pntsu, lt->pntsv, lt->pntsw, NULL);
}
else {
ob= CTX_data_active_object(C);
@@ -355,21 +364,21 @@ typedef struct UndoLattice {
static void undoLatt_to_editLatt(void *data, void *edata)
{
UndoLattice *ult= (UndoLattice*)data;
- Lattice *editlatt= (Lattice *)edata;
- int a= editlatt->pntsu*editlatt->pntsv*editlatt->pntsw;
+ EditLatt *editlatt= (EditLatt *)edata;
+ int a= editlatt->latt->pntsu*editlatt->latt->pntsv*editlatt->latt->pntsw;
- memcpy(editlatt->def, ult->def, a*sizeof(BPoint));
+ memcpy(editlatt->latt->def, ult->def, a*sizeof(BPoint));
}
static void *editLatt_to_undoLatt(void *edata)
{
UndoLattice *ult= MEM_callocN(sizeof(UndoLattice), "UndoLattice");
- Lattice *editlatt= (Lattice *)edata;
+ EditLatt *editlatt= (EditLatt *)edata;
- ult->def= MEM_dupallocN(editlatt->def);
- ult->pntsu= editlatt->pntsu;
- ult->pntsv= editlatt->pntsv;
- ult->pntsw= editlatt->pntsw;
+ ult->def= MEM_dupallocN(editlatt->latt->def);
+ ult->pntsu= editlatt->latt->pntsu;
+ ult->pntsv= editlatt->latt->pntsv;
+ ult->pntsw= editlatt->latt->pntsw;
return ult;
}
@@ -385,11 +394,11 @@ static void free_undoLatt(void *data)
static int validate_undoLatt(void *data, void *edata)
{
UndoLattice *ult= (UndoLattice*)data;
- Lattice *editlatt= (Lattice *)edata;
+ EditLatt *editlatt= (EditLatt *)edata;
- return (ult->pntsu == editlatt->pntsu &&
- ult->pntsv == editlatt->pntsv &&
- ult->pntsw == editlatt->pntsw);
+ return (ult->pntsu == editlatt->latt->pntsu &&
+ ult->pntsv == editlatt->latt->pntsv &&
+ ult->pntsw == editlatt->latt->pntsw);
}
static void *get_editlatt(bContext *C)
diff --git a/source/blender/editors/object/object_modifier.c b/source/blender/editors/object/object_modifier.c
index a54ed9bd239..7cf24d5d07d 100644
--- a/source/blender/editors/object/object_modifier.c
+++ b/source/blender/editors/object/object_modifier.c
@@ -43,7 +43,6 @@
#include "BLI_string.h"
#include "BLI_path_util.h"
-#include "BKE_action.h"
#include "BKE_curve.h"
#include "BKE_context.h"
#include "BKE_depsgraph.h"
@@ -61,7 +60,6 @@
#include "BKE_object.h"
#include "BKE_particle.h"
#include "BKE_softbody.h"
-#include "BKE_utildefines.h"
#include "RNA_access.h"
#include "RNA_define.h"
@@ -144,6 +142,7 @@ ModifierData *ED_object_modifier_add(ReportList *reports, Main *bmain, Scene *sc
int ED_object_modifier_remove(ReportList *reports, Main *bmain, Scene *scene, Object *ob, ModifierData *md)
{
ModifierData *obmd;
+ int sort_depsgraph = 0;
/* It seems on rapid delete it is possible to
* get called twice on same modifier, so make
@@ -176,13 +175,13 @@ int ED_object_modifier_remove(ReportList *reports, Main *bmain, Scene *scene, Ob
if(ob->pd)
ob->pd->deflect= 0;
- DAG_scene_sort(bmain, scene);
+ sort_depsgraph = 1;
}
else if(md->type == eModifierType_Surface) {
if(ob->pd && ob->pd->shape == PFIELD_SHAPE_SURFACE)
ob->pd->shape = PFIELD_SHAPE_PLANE;
- DAG_scene_sort(bmain, scene);
+ sort_depsgraph = 1;
}
else if(md->type == eModifierType_Smoke) {
ob->dt = OB_TEXTURE;
@@ -199,6 +198,10 @@ int ED_object_modifier_remove(ReportList *reports, Main *bmain, Scene *scene, Ob
DAG_id_flush_update(&ob->id, OB_RECALC_DATA);
+ /* sorting has to be done after the update so that dynamic systems can react properly */
+ if(sort_depsgraph)
+ DAG_scene_sort(bmain, scene);
+
return 1;
}
@@ -455,6 +458,21 @@ static int modifier_apply_obdata(ReportList *reports, Scene *scene, Object *ob,
BKE_report(reports, RPT_ERROR, "Cannot apply modifier for this object type");
return 0;
}
+
+ /* lattice modifier can be applied to particle system too */
+ if(ob->particlesystem.first) {
+
+ ParticleSystem *psys = ob->particlesystem.first;
+
+ for(; psys; psys=psys->next) {
+
+ if(psys->part->type != PART_HAIR)
+ continue;
+
+ psys_apply_hair_lattice(scene, ob, psys);
+ }
+ }
+
return 1;
}
diff --git a/source/blender/editors/object/object_ops.c b/source/blender/editors/object/object_ops.c
index ddbc0dd133a..ef68d5507d3 100644
--- a/source/blender/editors/object/object_ops.c
+++ b/source/blender/editors/object/object_ops.c
@@ -29,7 +29,6 @@
#include <stdlib.h>
#include <math.h>
-#include "MEM_guardedalloc.h"
#include "DNA_object_types.h"
#include "DNA_scene_types.h"
@@ -38,8 +37,6 @@
#include "BLI_blenlib.h"
#include "BKE_context.h"
-#include "BKE_global.h"
-#include "BKE_utildefines.h"
#include "RNA_access.h"
#include "RNA_define.h"
@@ -393,25 +390,25 @@ void ED_object_generic_keymap(struct wmKeyConfig *keyconf, struct wmKeyMap *keym
if(do_pet) {
/* context ops */
kmi = WM_keymap_add_item(keymap, "WM_OT_context_cycle_enum", OKEY, KM_PRESS, KM_SHIFT, 0);
- RNA_string_set(kmi->ptr, "data_path", "tool_settings.proportional_editing_falloff");
+ RNA_string_set(kmi->ptr, "data_path", "tool_settings.proportional_edit_falloff");
// Object mode
if (do_pet == 1) {
kmi = WM_keymap_add_item(keymap, "WM_OT_context_toggle", OKEY, KM_PRESS, 0, 0);
- RNA_string_set(kmi->ptr, "data_path", "tool_settings.proportional_editing_objects");
+ RNA_string_set(kmi->ptr, "data_path", "tool_settings.use_proportional_edit_objects");
} else { // Edit mode
kmi = WM_keymap_add_item(keymap, "WM_OT_context_toggle_enum", OKEY, KM_PRESS, 0, 0);
- RNA_string_set(kmi->ptr, "data_path", "tool_settings.proportional_editing");
+ RNA_string_set(kmi->ptr, "data_path", "tool_settings.proportional_edit");
RNA_string_set(kmi->ptr, "value_1", "DISABLED");
RNA_string_set(kmi->ptr, "value_2", "ENABLED");
/* for modes/object types that allow 'connected' mode, add the Alt O key */
if (do_pet == 3) {
kmi = WM_keymap_add_item(keymap, "WM_OT_context_toggle_enum", OKEY, KM_PRESS, KM_ALT, 0);
- RNA_string_set(kmi->ptr, "data_path", "tool_settings.proportional_editing");
+ RNA_string_set(kmi->ptr, "data_path", "tool_settings.proportional_edit");
RNA_string_set(kmi->ptr, "value_1", "DISABLED");
RNA_string_set(kmi->ptr, "value_2", "CONNECTED");
}
diff --git a/source/blender/editors/object/object_relations.c b/source/blender/editors/object/object_relations.c
index ceba2ad3997..2a0289ca8b3 100644
--- a/source/blender/editors/object/object_relations.c
+++ b/source/blender/editors/object/object_relations.c
@@ -69,7 +69,6 @@
#include "BKE_sca.h"
#include "BKE_scene.h"
#include "BKE_texture.h"
-#include "BKE_utildefines.h"
#include "WM_api.h"
#include "WM_types.h"
@@ -173,8 +172,8 @@ static int vertex_parent_set_exec(bContext *C, wmOperator *op)
else if(obedit->type==OB_LATTICE) {
Lattice *lt= obedit->data;
- a= lt->editlatt->pntsu*lt->editlatt->pntsv*lt->editlatt->pntsw;
- bp= lt->editlatt->def;
+ a= lt->editlatt->latt->pntsu*lt->editlatt->latt->pntsv*lt->editlatt->latt->pntsw;
+ bp= lt->editlatt->latt->def;
while(a--) {
if(bp->f1 & SELECT) {
if(v1==0) v1= nr;
@@ -422,6 +421,9 @@ static int parent_clear_exec(bContext *C, wmOperator *op)
CTX_DATA_BEGIN(C, Object*, ob, selected_editable_objects) {
+ if(ob->parent == NULL)
+ continue;
+
if(type == 0) {
ob->parent= NULL;
}
@@ -570,8 +572,8 @@ static int parent_set_exec(bContext *C, wmOperator *op)
Object workob;
/* apply transformation of previous parenting */
- object_apply_mat4(ob, ob->obmat);
-
+ /* object_apply_mat4(ob, ob->obmat); */ /* removed because of bug [#23577] */
+
/* set the parent (except for follow-path constraint option) */
if(partype != PAR_PATH_CONST)
ob->parent= par;
@@ -1033,7 +1035,7 @@ static unsigned int move_to_layer_init(bContext *C, wmOperator *op)
int values[20], a;
unsigned int lay= 0;
- if(!RNA_property_is_set(op->ptr, "layer")) {
+ if(!RNA_property_is_set(op->ptr, "layers")) {
CTX_DATA_BEGIN(C, Base*, base, selected_editable_bases) {
lay |= base->lay;
}
@@ -1042,10 +1044,10 @@ static unsigned int move_to_layer_init(bContext *C, wmOperator *op)
for(a=0; a<20; a++)
values[a]= (lay & (1<<a));
- RNA_boolean_set_array(op->ptr, "layer", values);
+ RNA_boolean_set_array(op->ptr, "layers", values);
}
else {
- RNA_boolean_get_array(op->ptr, "layer", values);
+ RNA_boolean_get_array(op->ptr, "layers", values);
for(a=0; a<20; a++)
if(values[a])
@@ -1110,6 +1112,8 @@ static int move_to_layer_exec(bContext *C, wmOperator *op)
/* warning, active object may be hidden now */
WM_event_add_notifier(C, NC_SCENE|NC_OBJECT|ND_DRAW, scene); /* is NC_SCENE needed ? */
+ WM_event_add_notifier(C, NC_SCENE|ND_LAYER_CONTENT, scene);
+
DAG_scene_sort(bmain, scene);
return OPERATOR_FINISHED;
@@ -1131,7 +1135,7 @@ void OBJECT_OT_move_to_layer(wmOperatorType *ot)
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
/* properties */
- RNA_def_boolean_layer_member(ot->srna, "layer", 20, NULL, "Layer", "");
+ RNA_def_boolean_layer_member(ot->srna, "layers", 20, NULL, "Layer", "");
}
/************************** Link to Scene Operator *****************************/
@@ -1888,7 +1892,7 @@ void OBJECT_OT_make_single_user(wmOperatorType *ot)
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
/* properties */
- ot->prop= RNA_def_enum(ot->srna, "type", type_items, 0, "Type", "");
+ ot->prop= RNA_def_enum(ot->srna, "type", type_items, SELECT, "Type", "");
RNA_def_boolean(ot->srna, "object", 0, "Object", "Make single user objects");
RNA_def_boolean(ot->srna, "obdata", 0, "Object Data", "Make single user object data");
diff --git a/source/blender/editors/object/object_select.c b/source/blender/editors/object/object_select.c
index 3c86c135914..fa9a97f4e74 100644
--- a/source/blender/editors/object/object_select.c
+++ b/source/blender/editors/object/object_select.c
@@ -44,7 +44,6 @@
#include "BLI_string.h"
#include "BKE_context.h"
-#include "BKE_depsgraph.h"
#include "BKE_group.h"
#include "BKE_main.h"
#include "BKE_material.h"
@@ -52,7 +51,6 @@
#include "BKE_property.h"
#include "BKE_report.h"
#include "BKE_scene.h"
-#include "BKE_utildefines.h"
#include "BKE_deform.h"
#include "WM_api.h"
@@ -637,7 +635,7 @@ static int object_select_by_layer_exec(bContext *C, wmOperator *op)
short extend;
extend= RNA_boolean_get(op->ptr, "extend");
- layernum = RNA_int_get(op->ptr, "layer");
+ layernum = RNA_int_get(op->ptr, "layers");
if (extend == 0) {
CTX_DATA_BEGIN(C, Base*, base, visible_bases) {
@@ -675,7 +673,7 @@ void OBJECT_OT_select_by_layer(wmOperatorType *ot)
/* properties */
RNA_def_boolean(ot->srna, "extend", FALSE, "Extend", "Extend selection instead of deselecting everything first.");
- RNA_def_int(ot->srna, "layer", 1, 1, 20, "Layer", "", 1, 20);
+ RNA_def_int(ot->srna, "layers", 1, 1, 20, "Layer", "", 1, 20);
}
/************************** Select Inverse *************************/
diff --git a/source/blender/editors/object/object_shapekey.c b/source/blender/editors/object/object_shapekey.c
index 2a0fca19be4..7b1ab933e28 100644
--- a/source/blender/editors/object/object_shapekey.c
+++ b/source/blender/editors/object/object_shapekey.c
@@ -47,18 +47,12 @@
#include "DNA_scene_types.h"
#include "DNA_object_types.h"
-#include "BKE_action.h"
#include "BKE_context.h"
-#include "BKE_curve.h"
#include "BKE_depsgraph.h"
-#include "BKE_global.h"
-#include "BKE_ipo.h"
#include "BKE_key.h"
#include "BKE_library.h"
#include "BKE_main.h"
-#include "BKE_mesh.h"
#include "BKE_object.h"
-#include "BKE_utildefines.h"
#include "BLO_sys_types.h" // for intptr_t support
diff --git a/source/blender/editors/object/object_transform.c b/source/blender/editors/object/object_transform.c
index ba9a03194ac..5214676331c 100644
--- a/source/blender/editors/object/object_transform.c
+++ b/source/blender/editors/object/object_transform.c
@@ -43,12 +43,10 @@
#include "BKE_context.h"
#include "BKE_curve.h"
#include "BKE_depsgraph.h"
-#include "BKE_global.h"
#include "BKE_main.h"
#include "BKE_mesh.h"
#include "BKE_object.h"
#include "BKE_report.h"
-#include "BKE_utildefines.h"
#include "RNA_define.h"
#include "RNA_access.h"
@@ -57,7 +55,6 @@
#include "WM_types.h"
#include "ED_armature.h"
-#include "ED_curve.h"
#include "ED_keyframing.h"
#include "ED_mesh.h"
#include "ED_screen.h"
@@ -71,7 +68,16 @@ static int object_location_clear_exec(bContext *C, wmOperator *op)
{
Main *bmain = CTX_data_main(C);
Scene *scene = CTX_data_scene(C);
- KeyingSet *ks= ANIM_builtin_keyingset_get_named(NULL, "Location");
+ KeyingSet *ks;
+
+ /* get KeyingSet to use
+ * - use the active KeyingSet if defined (and user wants to use it for all autokeying),
+ * or otherwise key transforms only
+ */
+ if (IS_AUTOKEY_FLAG(ONLYKEYINGSET) && (scene->active_keyingset))
+ ks = ANIM_scene_get_active_keyingset(scene);
+ else
+ ks = ANIM_builtin_keyingset_get_named(NULL, "Location");
/* clear location of selected objects if not in weight-paint mode */
CTX_DATA_BEGIN(C, Object*, ob, selected_editable_objects) {
@@ -130,7 +136,16 @@ static int object_rotation_clear_exec(bContext *C, wmOperator *op)
{
Main *bmain= CTX_data_main(C);
Scene *scene= CTX_data_scene(C);
- KeyingSet *ks= ANIM_builtin_keyingset_get_named(NULL, "Rotation");
+ KeyingSet *ks;
+
+ /* get KeyingSet to use
+ * - use the active KeyingSet if defined (and user wants to use it for all autokeying),
+ * or otherwise key transforms only
+ */
+ if (IS_AUTOKEY_FLAG(ONLYKEYINGSET) && (scene->active_keyingset))
+ ks = ANIM_scene_get_active_keyingset(scene);
+ else
+ ks = ANIM_builtin_keyingset_get_named(NULL, "Rotation");
/* clear rotation of selected objects if not in weight-paint mode */
CTX_DATA_BEGIN(C, Object*, ob, selected_editable_objects) {
@@ -273,7 +288,16 @@ static int object_scale_clear_exec(bContext *C, wmOperator *op)
{
Main *bmain= CTX_data_main(C);
Scene *scene= CTX_data_scene(C);
- KeyingSet *ks= ANIM_builtin_keyingset_get_named(NULL, "Scaling");
+ KeyingSet *ks;
+
+ /* get KeyingSet to use
+ * - use the active KeyingSet if defined (and user wants to use it for all autokeying),
+ * or otherwise key transforms only
+ */
+ if (IS_AUTOKEY_FLAG(ONLYKEYINGSET) && (scene->active_keyingset))
+ ks = ANIM_scene_get_active_keyingset(scene);
+ else
+ ks = ANIM_builtin_keyingset_get_named(NULL, "Scaling");
/* clear scales of selected objects if not in weight-paint mode */
CTX_DATA_BEGIN(C, Object*, ob, selected_editable_objects) {
diff --git a/source/blender/editors/object/object_vgroup.c b/source/blender/editors/object/object_vgroup.c
index ff48e7e349a..76af8feda82 100644
--- a/source/blender/editors/object/object_vgroup.c
+++ b/source/blender/editors/object/object_vgroup.c
@@ -50,13 +50,8 @@
#include "BKE_customdata.h"
#include "BKE_deform.h"
#include "BKE_depsgraph.h"
-#include "BKE_DerivedMesh.h"
-#include "BKE_displist.h"
#include "BKE_global.h"
-#include "BKE_lattice.h"
#include "BKE_mesh.h"
-#include "BKE_paint.h"
-#include "BKE_utildefines.h"
#include "BKE_report.h"
#include "RNA_access.h"
@@ -78,7 +73,7 @@ static Lattice *vgroup_edit_lattice(Object *ob)
{
if(ob->type==OB_LATTICE) {
Lattice *lt= ob->data;
- return (lt->editlatt)? lt->editlatt: lt;
+ return (lt->editlatt)? lt->editlatt->latt: lt;
}
return NULL;
@@ -88,7 +83,7 @@ bDeformGroup *ED_vgroup_add_name(Object *ob, char *name)
{
bDeformGroup *defgroup;
- if(!ob)
+ if(!ob || !ELEM(ob->type, OB_MESH, OB_LATTICE))
return NULL;
defgroup = MEM_callocN(sizeof(bDeformGroup), "add deformGroup");
@@ -174,7 +169,7 @@ int ED_vgroup_give_parray(ID *id, MDeformVert ***dvert_arr, int *dvert_tot)
int i=0;
Lattice *lt= (Lattice *)id;
- lt= (lt->editlatt)? lt->editlatt: lt;
+ lt= (lt->editlatt)? lt->editlatt->latt: lt;
*dvert_tot= lt->pntsu*lt->pntsv*lt->pntsw;
*dvert_arr= MEM_mallocN(sizeof(void*)*(*dvert_tot), "vgroup parray from me");
@@ -208,7 +203,7 @@ int ED_vgroup_give_array(ID *id, MDeformVert **dvert_arr, int *dvert_tot)
case ID_LT:
{
Lattice *lt= (Lattice *)id;
- lt= (lt->editlatt)? lt->editlatt: lt;
+ lt= (lt->editlatt)? lt->editlatt->latt: lt;
*dvert_arr= lt->dvert;
*dvert_tot= lt->pntsu*lt->pntsv*lt->pntsw;
return TRUE;
@@ -537,18 +532,8 @@ float ED_vgroup_vert_weight(Object *ob, bDeformGroup *dg, int vertnum)
}
void ED_vgroup_select_by_name(Object *ob, char *name)
-{
- bDeformGroup *curdef;
- int actdef= 1;
-
- for(curdef = ob->defbase.first; curdef; curdef=curdef->next, actdef++){
- if(!strcmp(curdef->name, name)) {
- ob->actdef= actdef;
- return;
- }
- }
-
- ob->actdef= 0; // this signals on painting to create a new one, if a bone in posemode is selected */
+{ /* note: ob->actdef==0 signals on painting to create a new one, if a bone in posemode is selected */
+ ob->actdef= defgroup_name_index(ob, name) + 1;
}
/********************** Operator Implementations *********************/
@@ -1356,7 +1341,7 @@ static void vgroup_assign_verts(Object *ob, float weight)
EditMesh *em = BKE_mesh_get_editmesh(me);
if(!CustomData_has_layer(&em->vdata, CD_MDEFORMVERT))
- EM_add_data_layer(em, &em->vdata, CD_MDEFORMVERT);
+ EM_add_data_layer(em, &em->vdata, CD_MDEFORMVERT, NULL);
/* Go through the list of editverts and assign them */
for(eve=em->verts.first; eve; eve=eve->next){
@@ -2082,6 +2067,8 @@ static int vgroup_do_remap(Object *ob, char *name_array, wmOperator *op)
vgroup_remap_update_users(ob, sort_map_update);
ob->actdef= sort_map_update[ob->actdef];
+
+ MEM_freeN(sort_map_update);
return OPERATOR_FINISHED;
}
@@ -2091,7 +2078,7 @@ static int vgroup_sort(void *def_a_ptr, void *def_b_ptr)
bDeformGroup *def_a= (bDeformGroup *)def_a_ptr;
bDeformGroup *def_b= (bDeformGroup *)def_b_ptr;
- return strcmp(def_a->name, def_b->name);
+ return BLI_natstrcmp(def_a->name, def_b->name);
}
static int vertex_group_sort_exec(bContext *C, wmOperator *op)
diff --git a/source/blender/editors/physics/CMakeLists.txt b/source/blender/editors/physics/CMakeLists.txt
index be826654311..49f20bb9ed0 100644
--- a/source/blender/editors/physics/CMakeLists.txt
+++ b/source/blender/editors/physics/CMakeLists.txt
@@ -41,7 +41,7 @@ IF(WITH_OPENMP)
ENDIF(WITH_OPENMP)
IF(WIN32)
- SET(INC ${INC} ${PTHREADS_INC})
+ LIST(APPEND INC ${PTHREADS_INC})
ENDIF(WIN32)
BLENDERLIB(bf_editor_physics "${SRC}" "${INC}")
diff --git a/source/blender/editors/physics/Makefile b/source/blender/editors/physics/Makefile
index e9260b66087..9ffc3a5b372 100644
--- a/source/blender/editors/physics/Makefile
+++ b/source/blender/editors/physics/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2007 Blender Foundation
# All rights reserved.
diff --git a/source/blender/editors/physics/particle_edit.c b/source/blender/editors/physics/particle_edit.c
index d491b1a9731..132533fc123 100644
--- a/source/blender/editors/physics/particle_edit.c
+++ b/source/blender/editors/physics/particle_edit.c
@@ -3573,7 +3573,7 @@ static void brush_edit_apply_event(bContext *C, wmOperator *op, wmEvent *event)
RNA_collection_add(op->ptr, "stroke", &itemptr);
RNA_float_set_array(&itemptr, "mouse", mouse);
- RNA_boolean_set(&itemptr, "flip", event->shift != 0); // XXX hardcoded
+ RNA_boolean_set(&itemptr, "pen_flip", event->shift != 0); // XXX hardcoded
/* apply */
brush_edit_apply(C, op, &itemptr);
@@ -4151,6 +4151,13 @@ static int clear_edited_exec(bContext *C, wmOperator *op)
DAG_id_flush_update(&ob->id, OB_RECALC_DATA);
}
}
+ else { /* some operation might have protected hair from editing so let's clear the flag */
+ psys->recalc |= PSYS_RECALC_RESET;
+ psys->flag &= ~PSYS_GLOBAL_HAIR;
+ psys->flag &= ~PSYS_EDITED;
+ WM_event_add_notifier(C, NC_OBJECT|ND_PARTICLE|NA_EDITED, ob);
+ DAG_id_flush_update(&ob->id, OB_RECALC_DATA);
+ }
return OPERATOR_FINISHED;
}
diff --git a/source/blender/editors/physics/particle_object.c b/source/blender/editors/physics/particle_object.c
index ba5d1ee5250..e364a881601 100644
--- a/source/blender/editors/physics/particle_object.c
+++ b/source/blender/editors/physics/particle_object.c
@@ -595,6 +595,7 @@ static int disconnect_hair_exec(bContext *C, wmOperator *op)
disconnect_hair(scene, ob, psys);
}
+ DAG_id_flush_update(&ob->id, OB_RECALC_DATA);
WM_event_add_notifier(C, NC_OBJECT|ND_PARTICLE, ob);
return OPERATOR_FINISHED;
@@ -638,7 +639,8 @@ static void connect_hair(Scene *scene, Object *ob, ParticleSystem *psys)
point= edit ? edit->points : NULL;
if(psmd->dm->deformedOnly)
- dm= psmd->dm;
+ /* we don't want to mess up psmd->dm when converting to global coordinates below */
+ dm= CDDM_copy(psmd->dm);
else
dm= mesh_get_derived_deform(scene, ob, CD_MASK_BAREMESH);
@@ -703,8 +705,7 @@ static void connect_hair(Scene *scene, Object *ob, ParticleSystem *psys)
}
free_bvhtree_from_mesh(&bvhtree);
- if(!psmd->dm->deformedOnly)
- dm->release(dm);
+ dm->release(dm);
psys_free_path_cache(psys, psys->edit);
@@ -734,6 +735,7 @@ static int connect_hair_exec(bContext *C, wmOperator *op)
connect_hair(scene, ob, psys);
}
+ DAG_id_flush_update(&ob->id, OB_RECALC_DATA);
WM_event_add_notifier(C, NC_OBJECT|ND_PARTICLE, ob);
return OPERATOR_FINISHED;
diff --git a/source/blender/editors/physics/physics_fluid.c b/source/blender/editors/physics/physics_fluid.c
index 23f604d8c12..f411f92d395 100644
--- a/source/blender/editors/physics/physics_fluid.c
+++ b/source/blender/editors/physics/physics_fluid.c
@@ -77,7 +77,6 @@
#include "LBM_fluidsim.h"
-#include "BIF_gl.h"
#include "ED_screen.h"
@@ -563,7 +562,6 @@ static void export_fluid_objects(ListBase *fobjects, Scene *scene, int length)
if(verts) MEM_freeN(verts);
if(tris) MEM_freeN(tris);
- if(fsmesh.channelVertices) MEM_freeN(fsmesh.channelVertices);
}
}
diff --git a/source/blender/editors/render/CMakeLists.txt b/source/blender/editors/render/CMakeLists.txt
index 2ecdc14a497..d494355a1e9 100644
--- a/source/blender/editors/render/CMakeLists.txt
+++ b/source/blender/editors/render/CMakeLists.txt
@@ -22,24 +22,23 @@
FILE(GLOB SRC *.c)
SET(INC
+ ../include
../../blenfont
../../blenkernel
../../blenlib
../../blenloader
../../gpu
../../imbuf
- ../include
- ../../../../intern/guardedalloc
- ../../../../extern/glew/include
../../makesdna
../../makesrna
- ../../python
../../render/extern/include
../../windowmanager
+ ../../../../intern/guardedalloc
+ ../../../../extern/glew/include
)
IF(WITH_QUICKTIME)
- SET(INC ${INC} ../../quicktime ${QUICKTIME_INC})
+ LIST(APPEND INC ../../quicktime ${QUICKTIME_INC})
ADD_DEFINITIONS(-DWITH_QUICKTIME)
ENDIF(WITH_QUICKTIME)
@@ -48,7 +47,7 @@ IF(WITH_OPENMP)
ENDIF(WITH_OPENMP)
IF(WIN32)
- SET(INC ${INC} ${PTHREADS_INC})
+ LIST(APPEND INC ${PTHREADS_INC})
ENDIF(WIN32)
BLENDERLIB(bf_editor_render "${SRC}" "${INC}")
diff --git a/source/blender/editors/render/Makefile b/source/blender/editors/render/Makefile
index 85b70172e0a..510e5372e22 100644
--- a/source/blender/editors/render/Makefile
+++ b/source/blender/editors/render/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2007 Blender Foundation
# All rights reserved.
diff --git a/source/blender/editors/render/render_internal.c b/source/blender/editors/render/render_internal.c
index b5392f6dede..083202e5a03 100644
--- a/source/blender/editors/render/render_internal.c
+++ b/source/blender/editors/render/render_internal.c
@@ -38,7 +38,6 @@
#include "DNA_scene_types.h"
#include "BKE_blender.h"
-#include "BKE_colortools.h"
#include "BKE_context.h"
#include "BKE_global.h"
#include "BKE_image.h"
@@ -46,9 +45,7 @@
#include "BKE_main.h"
#include "BKE_multires.h"
#include "BKE_report.h"
-#include "BKE_scene.h"
-#include "BKE_screen.h"
-#include "BKE_utildefines.h"
+#include "BKE_sequencer.h"
#include "WM_api.h"
#include "WM_types.h"
@@ -403,7 +400,7 @@ static int screen_render_exec(bContext *C, wmOperator *op)
Render *re= RE_NewRender(scene->id.name);
Image *ima;
View3D *v3d= CTX_wm_view3d(C);
- Main *mainp= G.main; //BKE_undo_get_main(&scene);
+ Main *mainp= CTX_data_main(C);
int lay= (v3d)? v3d->lay: scene->lay;
if(re==NULL) {
@@ -418,13 +415,17 @@ static int screen_render_exec(bContext *C, wmOperator *op)
BKE_image_signal(ima, NULL, IMA_SIGNAL_FREE);
BKE_image_backup_render(scene, ima);
+ /* cleanup sequencer caches before starting user triggered render.
+ otherwise, invalidated cache entries can make their way into
+ the output rendering. We can't put that into RE_BlenderFrame,
+ since sequence rendering can call that recursively... (peter) */
+ seq_stripelem_cache_cleanup();
+
if(RNA_boolean_get(op->ptr, "animation"))
RE_BlenderAnim(re, mainp, scene, lay, scene->r.sfra, scene->r.efra, scene->r.frame_step, op->reports);
else
RE_BlenderFrame(re, mainp, scene, NULL, lay, scene->r.cfra);
- //free_main(mainp);
-
// no redraw needed, we leave state as we entered it
ED_update_for_newframe(C, 1);
@@ -434,6 +435,7 @@ static int screen_render_exec(bContext *C, wmOperator *op)
}
typedef struct RenderJob {
+ Main *main;
Scene *scene;
Render *re;
wmWindow *win;
@@ -558,22 +560,24 @@ static void image_rect_update(void *rjv, RenderResult *rr, volatile rcti *renrec
static void render_startjob(void *rjv, short *stop, short *do_update, float *progress)
{
RenderJob *rj= rjv;
- Main *mainp= G.main; //BKE_undo_get_main(&rj->scene);
rj->stop= stop;
rj->do_update= do_update;
rj->progress= progress;
if(rj->anim)
- RE_BlenderAnim(rj->re, mainp, rj->scene, rj->lay, rj->scene->r.sfra, rj->scene->r.efra, rj->scene->r.frame_step, rj->reports);
+ RE_BlenderAnim(rj->re, rj->main, rj->scene, rj->lay, rj->scene->r.sfra, rj->scene->r.efra, rj->scene->r.frame_step, rj->reports);
else
- RE_BlenderFrame(rj->re, mainp, rj->scene, rj->srl, rj->lay, rj->scene->r.cfra);
-
- //free_main(mainp);
+ RE_BlenderFrame(rj->re, rj->main, rj->scene, rj->srl, rj->lay, rj->scene->r.cfra);
}
static void render_endjob(void *rjv)
{
+ RenderJob *rj= rjv;
+
+ if(rj->main != G.main)
+ free_main(rj->main);
+
/* XXX render stability hack */
G.rendering = 0;
WM_main_add_notifier(NC_WINDOW, NULL);
@@ -612,6 +616,7 @@ static int screen_render_modal(bContext *C, wmOperator *op, wmEvent *event)
static int screen_render_invoke(bContext *C, wmOperator *op, wmEvent *event)
{
/* new render clears all callbacks */
+ Main *mainp;
Scene *scene= CTX_data_scene(C);
SceneRenderLayer *srl=NULL;
bScreen *screen= CTX_wm_screen(C);
@@ -628,6 +633,14 @@ static int screen_render_invoke(bContext *C, wmOperator *op, wmEvent *event)
/* stop all running jobs, currently previews frustrate Render */
WM_jobs_stop_all(CTX_wm_manager(C));
+ /* get main */
+ if(G.rt == 101) {
+ /* thread-safety experiment, copy main from the undo buffer */
+ mainp= BKE_undo_get_main(&scene);
+ }
+ else
+ mainp= CTX_data_main(C);
+
/* cancel animation playback */
if (screen->animtimer)
ED_screen_animation_play(C, 0, 0);
@@ -638,6 +651,12 @@ static int screen_render_invoke(bContext *C, wmOperator *op, wmEvent *event)
/* flush multires changes (for sculpt) */
multires_force_render_update(CTX_data_active_object(C));
+ /* cleanup sequencer caches before starting user triggered render.
+ otherwise, invalidated cache entries can make their way into
+ the output rendering. We can't put that into RE_BlenderFrame,
+ since sequence rendering can call that recursively... (peter) */
+ seq_stripelem_cache_cleanup();
+
/* get editmode results */
ED_object_exit_editmode(C, 0); /* 0 = does not exit editmode */
@@ -657,7 +676,7 @@ static int screen_render_invoke(bContext *C, wmOperator *op, wmEvent *event)
RNA_string_get(op->ptr, "layer", rl_name);
RNA_string_get(op->ptr, "scene", scene_name);
- scn = (Scene *)BLI_findstring(&CTX_data_main(C)->scene, scene_name, offsetof(ID, name) + 2);
+ scn = (Scene *)BLI_findstring(&mainp->scene, scene_name, offsetof(ID, name) + 2);
rl = (SceneRenderLayer *)BLI_findstring(&scene->r.layers, rl_name, offsetof(SceneRenderLayer, name));
if (scn && rl) {
@@ -668,6 +687,7 @@ static int screen_render_invoke(bContext *C, wmOperator *op, wmEvent *event)
/* job custom data */
rj= MEM_callocN(sizeof(RenderJob), "render job");
+ rj->main= mainp;
rj->scene= scene;
rj->win= CTX_wm_window(C);
rj->srl = srl;
diff --git a/source/blender/editors/render/render_opengl.c b/source/blender/editors/render/render_opengl.c
index 524e36b3fc9..7833f93b3b5 100644
--- a/source/blender/editors/render/render_opengl.c
+++ b/source/blender/editors/render/render_opengl.c
@@ -40,19 +40,11 @@
#include "DNA_scene_types.h"
#include "DNA_object_types.h"
-#include "BKE_blender.h"
-#include "BKE_object.h"
#include "BKE_context.h"
-#include "BKE_global.h"
#include "BKE_image.h"
-#include "BKE_library.h"
#include "BKE_main.h"
-#include "BKE_mesh.h"
-#include "BKE_multires.h"
#include "BKE_report.h"
#include "BKE_scene.h"
-#include "BKE_screen.h"
-#include "BKE_utildefines.h"
#include "BKE_writeavi.h"
#include "WM_api.h"
@@ -124,6 +116,17 @@ static void screen_opengl_render_apply(OGLRender *oglrender)
rr= RE_AcquireResultRead(oglrender->re);
+ /* note on color management:
+ * looked into how best to deal with color management here and found heres how it should work.
+ *
+ * OpenGL materials etc are color corrected, so a float buffer from the graphics card is
+ * color corrected, without running any conversion functions.
+ *
+ * With color correction disabled blender expects the rr->rectf to be non-color managed so
+ * just do a direct copy from the byte array to the rectf with no conversion too.
+ * notice IMB_float_from_rect has the profile set so no conversion is done.
+ */
+
if(view_context) {
GPU_offscreen_bind(oglrender->ofs); /* bind */
@@ -141,11 +144,8 @@ static void screen_opengl_render_apply(OGLRender *oglrender)
GPU_offscreen_unbind(oglrender->ofs); /* unbind */
}
else {
- ImBuf *ibuf_view= ED_view3d_draw_offscreen_imbuf_simple(scene, oglrender->sizex, oglrender->sizey, OB_SOLID);
- IMB_float_from_rect(ibuf_view);
-
+ ImBuf *ibuf_view= ED_view3d_draw_offscreen_imbuf_simple(scene, oglrender->sizex, oglrender->sizey, IB_rectfloat, OB_SOLID);
memcpy(rr->rectf, ibuf_view->rect_float, sizeof(float) * 4 * oglrender->sizex * oglrender->sizey);
-
IMB_freeImBuf(ibuf_view);
}
diff --git a/source/blender/editors/render/render_preview.c b/source/blender/editors/render/render_preview.c
index 901bd8ce8fd..71bee8c5b08 100644
--- a/source/blender/editors/render/render_preview.c
+++ b/source/blender/editors/render/render_preview.c
@@ -64,13 +64,8 @@
#include "BKE_icons.h"
#include "BKE_library.h"
#include "BKE_main.h"
-#include "BKE_texture.h"
#include "BKE_material.h"
#include "BKE_node.h"
-#include "BKE_world.h"
-#include "BKE_texture.h"
-#include "BKE_utildefines.h"
-#include "BKE_brush.h"
#include "IMB_imbuf.h"
#include "IMB_imbuf_types.h"
@@ -86,7 +81,6 @@
#include "WM_api.h"
#include "WM_types.h"
-#include "ED_datafiles.h"
#include "ED_render.h"
#include "ED_view3d.h"
@@ -554,8 +548,8 @@ void ED_preview_draw(const bContext *C, void *idp, void *parentp, void *slotp, r
newrect.ymax= rect->ymin;
if(parent) {
- ok = ed_preview_draw_rect(sa, sce, parent, 1, 1, rect, &newrect);
- ok &= ed_preview_draw_rect(sa, sce, id, 1, 0, rect, &newrect);
+ ok = ed_preview_draw_rect(sa, sce, id, 1, 1, rect, &newrect);
+ ok &= ed_preview_draw_rect(sa, sce, parent, 1, 0, rect, &newrect);
}
else
ok = ed_preview_draw_rect(sa, sce, id, 0, 0, rect, &newrect);
@@ -796,7 +790,7 @@ void BIF_view3d_previewrender(Main *bmain, Scene *scene, ScrArea *sa)
lay |= v3d->lay;
else lay= v3d->lay;
- RE_Database_FromScene(re, scene, lay, 0); // 0= dont use camera view
+ RE_Database_FromScene(re, bmain, scene, lay, 0); // 0= dont use camera view
rstats= RE_GetStats(re);
if(rstats->convertdone)
@@ -1005,8 +999,8 @@ static void shader_preview_startjob(void *customdata, short *stop, short *do_upd
sp->do_update= do_update;
if(sp->parent) {
- shader_preview_render(sp, sp->parent, 1, 1);
- shader_preview_render(sp, sp->id, 1, 0);
+ shader_preview_render(sp, sp->id, 1, 1);
+ shader_preview_render(sp, sp->parent, 1, 0);
}
else
shader_preview_render(sp, sp->id, 0, 0);
diff --git a/source/blender/editors/render/render_shading.c b/source/blender/editors/render/render_shading.c
index 9fd0074b9f1..debd13c8d99 100644
--- a/source/blender/editors/render/render_shading.c
+++ b/source/blender/editors/render/render_shading.c
@@ -52,7 +52,6 @@
#include "BKE_report.h"
#include "BKE_scene.h"
#include "BKE_texture.h"
-#include "BKE_utildefines.h"
#include "BKE_world.h"
#include "IMB_imbuf.h"
@@ -817,6 +816,7 @@ static int save_envmap(wmOperator *op, Scene *scene, EnvMap *env, char *str, int
ImBuf *ibuf=NULL;
int dx;
int retval;
+ int relative= (RNA_struct_find_property(op->ptr, "relative_path") && RNA_boolean_get(op->ptr, "relative_path"));
if(env->cube[1]==NULL) {
BKE_report(op->reports, RPT_ERROR, "There is no generated environment map available to save");
@@ -843,6 +843,9 @@ static int save_envmap(wmOperator *op, Scene *scene, EnvMap *env, char *str, int
if (scene->r.color_mgt_flag & R_COLOR_MANAGEMENT)
ibuf->profile = IB_PROFILE_LINEAR_RGB;
+ /* to save, we first get absolute path */
+ BLI_path_abs(str, G.sce);
+
if (BKE_write_ibuf(scene, ibuf, str, imtype, scene->r.subimtype, scene->r.quality)) {
retval = OPERATOR_FINISHED;
}
@@ -850,6 +853,9 @@ static int save_envmap(wmOperator *op, Scene *scene, EnvMap *env, char *str, int
BKE_reportf(op->reports, RPT_ERROR, "Error saving environment map to %s.", str);
retval = OPERATOR_CANCELLED;
}
+ /* in case we were saving with relative paths, change back again */
+ if(relative)
+ BLI_path_rel(str, G.sce);
IMB_freeImBuf(ibuf);
ibuf = NULL;
diff --git a/source/blender/editors/screen/CMakeLists.txt b/source/blender/editors/screen/CMakeLists.txt
index 6bbd1112d05..f7dfd81dba9 100644
--- a/source/blender/editors/screen/CMakeLists.txt
+++ b/source/blender/editors/screen/CMakeLists.txt
@@ -22,19 +22,19 @@
FILE(GLOB SRC *.c)
SET(INC
+ ../include
../../blenfont
../../blenkernel
../../blenlib
../../imbuf
- ../include
- ../../../../intern/guardedalloc
../../makesdna
../../makesrna
../../windowmanager
+ ../../../../intern/guardedalloc
)
IF(WIN32)
- SET(INC ${INC} ${PTHREADS_INC})
+ LIST(APPEND INC ${PTHREADS_INC})
ENDIF(WIN32)
BLENDERLIB(bf_editor_screen "${SRC}" "${INC}")
diff --git a/source/blender/editors/screen/Makefile b/source/blender/editors/screen/Makefile
index 23c9d130eec..2ab35a32888 100644
--- a/source/blender/editors/screen/Makefile
+++ b/source/blender/editors/screen/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2007 Blender Foundation
# All rights reserved.
diff --git a/source/blender/editors/screen/SConscript b/source/blender/editors/screen/SConscript
index 6efb2617a18..61f3429521d 100644
--- a/source/blender/editors/screen/SConscript
+++ b/source/blender/editors/screen/SConscript
@@ -11,10 +11,10 @@ incs += ' #/intern/guardedalloc #/extern/glew/include'
defs = ''
if env['OURPLATFORM'] == 'linux2':
- cflags='-pthread'
- incs += ' ../../../extern/binreloc/include'
+ cflags='-pthread'
+ incs += ' ../../../extern/binreloc/include'
if env['OURPLATFORM'] in ('win32-vc', 'win32-mingw', 'linuxcross', 'win64-vc'):
- incs += ' ' + env['BF_PTHREADS_INC']
+ incs += ' ' + env['BF_PTHREADS_INC']
env.BlenderLib ( 'bf_editors_screen', sources, Split(incs), Split(defs), libtype=['core'], priority=[105] )
diff --git a/source/blender/editors/screen/area.c b/source/blender/editors/screen/area.c
index a97f8f128b9..d0361c5fa01 100644
--- a/source/blender/editors/screen/area.c
+++ b/source/blender/editors/screen/area.c
@@ -40,7 +40,6 @@
#include "BKE_context.h"
#include "BKE_global.h"
#include "BKE_screen.h"
-#include "BKE_utildefines.h"
#include "WM_api.h"
#include "WM_types.h"
@@ -48,6 +47,7 @@
#include "ED_screen.h"
#include "ED_screen_types.h"
+#include "ED_space_api.h"
#include "ED_types.h"
#include "ED_fileselect.h"
@@ -343,6 +343,8 @@ void ED_region_do_draw(bContext *C, ARegion *ar)
else if(at->draw) {
at->draw(C, ar);
}
+
+ ED_region_draw_cb_draw(C, ar, REGION_DRAW_POST_PIXEL);
uiFreeInactiveBlocks(C, &ar->uiblocks);
@@ -467,29 +469,31 @@ static void area_azone_initialize(ScrArea *sa)
#define AZONEPAD_ICON 8
static void region_azone_edge(AZone *az, ARegion *ar)
{
- if(az->edge=='t') {
- az->x1= ar->winrct.xmin;
- az->y1= ar->winrct.ymax - AZONEPAD_EDGE;
- az->x2= ar->winrct.xmax;
- az->y2= ar->winrct.ymax;
- }
- else if(az->edge=='b') {
- az->x1= ar->winrct.xmin;
- az->y1= ar->winrct.ymin + AZONEPAD_EDGE;
- az->x2= ar->winrct.xmax;
- az->y2= ar->winrct.ymin;
- }
- else if(az->edge=='l') {
- az->x1= ar->winrct.xmin;
- az->y1= ar->winrct.ymin;
- az->x2= ar->winrct.xmin + AZONEPAD_EDGE;
- az->y2= ar->winrct.ymax;
- }
- else { // if(az->edge=='r') {
- az->x1= ar->winrct.xmax;
- az->y1= ar->winrct.ymin;
- az->x2= ar->winrct.xmax - AZONEPAD_EDGE;
- az->y2= ar->winrct.ymax;
+ switch(az->edge) {
+ case AE_TOP_TO_BOTTOMRIGHT:
+ az->x1= ar->winrct.xmin;
+ az->y1= ar->winrct.ymax - AZONEPAD_EDGE;
+ az->x2= ar->winrct.xmax;
+ az->y2= ar->winrct.ymax;
+ break;
+ case AE_BOTTOM_TO_TOPLEFT:
+ az->x1= ar->winrct.xmin;
+ az->y1= ar->winrct.ymin + AZONEPAD_EDGE;
+ az->x2= ar->winrct.xmax;
+ az->y2= ar->winrct.ymin;
+ break;
+ case AE_LEFT_TO_TOPRIGHT:
+ az->x1= ar->winrct.xmin;
+ az->y1= ar->winrct.ymin;
+ az->x2= ar->winrct.xmin + AZONEPAD_EDGE;
+ az->y2= ar->winrct.ymax;
+ break;
+ case AE_RIGHT_TO_TOPLEFT:
+ az->x1= ar->winrct.xmax;
+ az->y1= ar->winrct.ymin;
+ az->x2= ar->winrct.xmax - AZONEPAD_EDGE;
+ az->y2= ar->winrct.ymax;
+ break;
}
BLI_init_rcti(&az->rect, az->x1, az->x2, az->y1, az->y2);
@@ -500,33 +504,38 @@ static void region_azone_icon(ScrArea *sa, AZone *az, ARegion *ar)
AZone *azt;
int tot=0;
+ /* count how many actionzones with along same edge are available.
+ This allows for adding more action zones in the future without
+ having to worry about correct offset */
for(azt= sa->actionzones.first; azt; azt= azt->next) {
if(azt->edge == az->edge) tot++;
}
- if(az->edge=='t') {
- az->x1= ar->winrct.xmax - tot*2*AZONEPAD_ICON;
- az->y1= ar->winrct.ymax + AZONEPAD_ICON;
- az->x2= ar->winrct.xmax - tot*AZONEPAD_ICON;
- az->y2= ar->winrct.ymax + 2*AZONEPAD_ICON;
- }
- else if(az->edge=='b') {
- az->x1= ar->winrct.xmin + AZONEPAD_ICON;
- az->y1= ar->winrct.ymin - 2*AZONEPAD_ICON;
- az->x2= ar->winrct.xmin + 2*AZONEPAD_ICON;
- az->y2= ar->winrct.ymin - AZONEPAD_ICON;
- }
- else if(az->edge=='l') {
- az->x1= ar->winrct.xmin - 2*AZONEPAD_ICON;
- az->y1= ar->winrct.ymax - tot*2*AZONEPAD_ICON;
- az->x2= ar->winrct.xmin - AZONEPAD_ICON;
- az->y2= ar->winrct.ymax - tot*AZONEPAD_ICON;
- }
- else { // if(az->edge=='r') {
- az->x1= ar->winrct.xmax + AZONEPAD_ICON;
- az->y1= ar->winrct.ymax - tot*2*AZONEPAD_ICON;
- az->x2= ar->winrct.xmax + 2*AZONEPAD_ICON;
- az->y2= ar->winrct.ymax - tot*AZONEPAD_ICON;
+ switch(az->edge) {
+ case AE_TOP_TO_BOTTOMRIGHT:
+ az->x1= ar->winrct.xmax - tot*2*AZONEPAD_ICON;
+ az->y1= ar->winrct.ymax + AZONEPAD_ICON;
+ az->x2= ar->winrct.xmax - tot*AZONEPAD_ICON;
+ az->y2= ar->winrct.ymax + 2*AZONEPAD_ICON;
+ break;
+ case AE_BOTTOM_TO_TOPLEFT:
+ az->x1= ar->winrct.xmin + AZONEPAD_ICON;
+ az->y1= ar->winrct.ymin - 2*AZONEPAD_ICON;
+ az->x2= ar->winrct.xmin + 2*AZONEPAD_ICON;
+ az->y2= ar->winrct.ymin - AZONEPAD_ICON;
+ break;
+ case AE_LEFT_TO_TOPRIGHT:
+ az->x1= ar->winrct.xmin - 2*AZONEPAD_ICON;
+ az->y1= ar->winrct.ymax - tot*2*AZONEPAD_ICON;
+ az->x2= ar->winrct.xmin - AZONEPAD_ICON;
+ az->y2= ar->winrct.ymax - tot*AZONEPAD_ICON;
+ break;
+ case AE_RIGHT_TO_TOPLEFT:
+ az->x1= ar->winrct.xmax + AZONEPAD_ICON;
+ az->y1= ar->winrct.ymax - tot*2*AZONEPAD_ICON;
+ az->x2= ar->winrct.xmax + 2*AZONEPAD_ICON;
+ az->y2= ar->winrct.ymax - tot*AZONEPAD_ICON;
+ break;
}
BLI_init_rcti(&az->rect, az->x1, az->x2, az->y1, az->y2);
@@ -535,22 +544,21 @@ static void region_azone_icon(ScrArea *sa, AZone *az, ARegion *ar)
for(azt= sa->actionzones.first; azt; azt= azt->next) {
if(az!=azt) {
if( ABS(az->x1-azt->x1) < 2 && ABS(az->y1-azt->y1) < 2) {
- if(az->edge=='t' || az->edge=='b') {
+ if(az->edge==AE_TOP_TO_BOTTOMRIGHT || az->edge==AE_BOTTOM_TO_TOPLEFT) {
az->x1+= AZONESPOT;
az->x2+= AZONESPOT;
- BLI_init_rcti(&az->rect, az->x1, az->x2, az->y1, az->y2);
}
- else {
+ else{
az->y1-= AZONESPOT;
az->y2-= AZONESPOT;
- BLI_init_rcti(&az->rect, az->x1, az->x2, az->y1, az->y2);
}
+ BLI_init_rcti(&az->rect, az->x1, az->x2, az->y1, az->y2);
}
}
}
}
-static void region_azone_initialize(ScrArea *sa, ARegion *ar, char edge)
+static void region_azone_initialize(ScrArea *sa, ARegion *ar, AZEdge edge)
{
AZone *az;
@@ -573,17 +581,16 @@ static void region_azone_initialize(ScrArea *sa, ARegion *ar, char edge)
static void region_azone_add(ScrArea *sa, ARegion *ar, int alignment)
{
- /* edge code (t b l r) is where azone will be drawn */
+ /* edge code (t b l r) is along which area edge azone will be drawn */
if(alignment==RGN_ALIGN_TOP)
- region_azone_initialize(sa, ar, 'b');
+ region_azone_initialize(sa, ar, AE_BOTTOM_TO_TOPLEFT);
else if(alignment==RGN_ALIGN_BOTTOM)
- region_azone_initialize(sa, ar, 't');
+ region_azone_initialize(sa, ar, AE_TOP_TO_BOTTOMRIGHT);
else if(ELEM(alignment, RGN_ALIGN_RIGHT, RGN_OVERLAP_RIGHT))
- region_azone_initialize(sa, ar, 'l');
+ region_azone_initialize(sa, ar, AE_LEFT_TO_TOPRIGHT);
else if(ELEM(alignment, RGN_ALIGN_LEFT, RGN_OVERLAP_LEFT))
- region_azone_initialize(sa, ar, 'r');
-
+ region_azone_initialize(sa, ar, AE_RIGHT_TO_TOPLEFT);
}
/* dir is direction to check, not the splitting edge direction! */
@@ -1093,13 +1100,6 @@ void ED_area_prevspace(bContext *C, ScrArea *sa)
{
SpaceLink *sl = (sa) ? sa->spacedata.first : CTX_wm_space_data(C);
- /* Special handling of filebrowser to stop background thread for
- thumbnail creation - don't want to waste cpu resources if not showing
- the filebrowser */
- if (sl->spacetype == SPACE_FILE) {
- ED_fileselect_exit(C, (SpaceFile*)sl);
- }
-
if(sl->next) {
/* workaround for case of double prevspace, render window
with a file browser on top of it */
diff --git a/source/blender/editors/screen/screen_context.c b/source/blender/editors/screen/screen_context.c
index 1c570d98744..fbc83b1de65 100644
--- a/source/blender/editors/screen/screen_context.c
+++ b/source/blender/editors/screen/screen_context.c
@@ -35,7 +35,6 @@
#include "BKE_context.h"
#include "BKE_utildefines.h"
-#include "BKE_global.h"
#include "BKE_action.h"
#include "BKE_sequencer.h"
diff --git a/source/blender/editors/screen/screen_edit.c b/source/blender/editors/screen/screen_edit.c
index 8cee4a24dcc..05b6e072eac 100644
--- a/source/blender/editors/screen/screen_edit.c
+++ b/source/blender/editors/screen/screen_edit.c
@@ -42,7 +42,6 @@
#include "BKE_node.h"
#include "BKE_screen.h"
#include "BKE_scene.h"
-#include "BKE_utildefines.h"
#include "BIF_gl.h"
#include "BIF_glutil.h"
@@ -52,9 +51,9 @@
#include "ED_image.h"
#include "ED_object.h"
-#include "ED_view3d.h"
#include "ED_screen.h"
#include "ED_screen_types.h"
+#include "ED_fileselect.h"
#include "UI_interface.h"
@@ -1092,6 +1091,10 @@ void ED_area_exit(bContext *C, ScrArea *sa)
ScrArea *prevsa= CTX_wm_area(C);
ARegion *ar;
+ if (sa->spacetype == SPACE_FILE) {
+ ED_fileselect_exit(C, (SpaceFile*)(sa) ? sa->spacedata.first : CTX_wm_space_data(C));
+ }
+
CTX_wm_area_set(C, sa);
for(ar= sa->regionbase.first; ar; ar= ar->next)
ED_region_exit(C, ar);
@@ -1159,7 +1162,7 @@ static void screen_cursor_set(wmWindow *win, wmEvent *event)
if(az->type==AZONE_AREA)
WM_cursor_set(win, CURSOR_EDIT);
else if(az->type==AZONE_REGION) {
- if(az->edge == 'l' || az->edge == 'r')
+ if(az->edge == AE_LEFT_TO_TOPRIGHT || az->edge == AE_RIGHT_TO_TOPLEFT)
WM_cursor_set(win, CURSOR_X_MOVE);
else
WM_cursor_set(win, CURSOR_Y_MOVE);
@@ -1502,8 +1505,18 @@ void ED_screen_full_restore(bContext *C, ScrArea *sa)
if (sl->next) {
/* specific checks for space types */
+
+ int sima_restore = 0;
+
+ /* Special check added for non-render image window (back from fullscreen through "Back to Previous" button) */
if (sl->spacetype == SPACE_IMAGE) {
SpaceImage *sima= sa->spacedata.first;
+ if (!(sima->flag & SI_PREVSPACE) && !(sima->flag & SI_FULLWINDOW))
+ sima_restore = 1;
+ }
+
+ if (sl->spacetype == SPACE_IMAGE && !sima_restore) {
+ SpaceImage *sima= sa->spacedata.first;
if (sima->flag & SI_PREVSPACE)
sima->flag &= ~SI_PREVSPACE;
if (sima->flag & SI_FULLWINDOW) {
diff --git a/source/blender/editors/screen/screen_ops.c b/source/blender/editors/screen/screen_ops.c
index b085c8178b0..363e8a2b47c 100644
--- a/source/blender/editors/screen/screen_ops.c
+++ b/source/blender/editors/screen/screen_ops.c
@@ -41,20 +41,13 @@
#include "DNA_scene_types.h"
#include "DNA_meta_types.h"
-#include "BKE_blender.h"
-#include "BKE_colortools.h"
#include "BKE_context.h"
#include "BKE_customdata.h"
-#include "BKE_global.h"
-#include "BKE_idprop.h"
-#include "BKE_library.h"
#include "BKE_main.h"
#include "BKE_mesh.h"
-#include "BKE_multires.h"
#include "BKE_report.h"
#include "BKE_scene.h"
#include "BKE_screen.h"
-#include "BKE_utildefines.h"
#include "BKE_sound.h"
#include "WM_api.h"
@@ -199,13 +192,14 @@ int ED_operator_logic_active(bContext *C)
int ED_operator_object_active(bContext *C)
{
- return NULL != ED_object_active_context(C);
+ Object *ob = ED_object_active_context(C);
+ return ((ob != NULL) && !(ob->restrictflag & OB_RESTRICT_VIEW));
}
int ED_operator_object_active_editable(bContext *C)
{
Object *ob = ED_object_active_context(C);
- return ((ob != NULL) && !(ob->id.lib));
+ return ((ob != NULL) && !(ob->id.lib) && !(ob->restrictflag & OB_RESTRICT_VIEW));
}
int ED_operator_editmesh(bContext *C)
@@ -1297,19 +1291,19 @@ typedef struct RegionMoveData {
int bigger, smaller, origval;
int origx, origy;
int maxsize;
- char edge;
+ AZEdge edge;
} RegionMoveData;
-static int area_max_regionsize(ScrArea *sa, ARegion *scalear, char edge)
+static int area_max_regionsize(ScrArea *sa, ARegion *scalear, AZEdge edge)
{
ARegion *ar;
int dist;
- if(edge=='l' || edge=='r') {
+ if(edge==AE_RIGHT_TO_TOPLEFT || edge==AE_LEFT_TO_TOPRIGHT) {
dist = sa->totrct.xmax - sa->totrct.xmin;
- } else { /* t, b */
+ } else { /* AE_BOTTOM_TO_TOPLEFT, AE_TOP_TO_BOTTOMRIGHT */
dist = sa->totrct.ymax - sa->totrct.ymin;
}
@@ -1331,9 +1325,9 @@ static int area_max_regionsize(ScrArea *sa, ARegion *scalear, char edge)
/* case of regions in regions, like operator properties panel */
/* these can sit on top of other regions such as headers, so account for this */
- else if (edge == 'b' && scalear->alignment & RGN_ALIGN_TOP && ar->alignment == RGN_ALIGN_TOP && ar->regiontype == RGN_TYPE_HEADER)
+ else if (edge == AE_BOTTOM_TO_TOPLEFT && scalear->alignment & RGN_ALIGN_TOP && ar->alignment == RGN_ALIGN_TOP && ar->regiontype == RGN_TYPE_HEADER)
dist -= ar->winy;
- else if (edge == 't' && scalear->alignment & RGN_ALIGN_BOTTOM && ar->alignment == RGN_ALIGN_BOTTOM && ar->regiontype == RGN_TYPE_HEADER)
+ else if (edge == AE_TOP_TO_BOTTOMRIGHT && scalear->alignment & RGN_ALIGN_BOTTOM && ar->alignment == RGN_ALIGN_BOTTOM && ar->regiontype == RGN_TYPE_HEADER)
dist -= ar->winy;
}
@@ -1373,7 +1367,7 @@ static int region_scale_invoke(bContext *C, wmOperator *op, wmEvent *event)
rmd->ar->sizey= rmd->ar->type->prefsizey;
/* now copy to regionmovedata */
- if(rmd->edge=='l' || rmd->edge=='r') {
+ if(rmd->edge==AE_LEFT_TO_TOPRIGHT || rmd->edge==AE_RIGHT_TO_TOPLEFT) {
rmd->origval= rmd->ar->sizex;
} else {
rmd->origval= rmd->ar->sizey;
@@ -1405,9 +1399,9 @@ static int region_scale_modal(bContext *C, wmOperator *op, wmEvent *event)
switch(event->type) {
case MOUSEMOVE:
- if(rmd->edge=='l' || rmd->edge=='r') {
+ if(rmd->edge==AE_LEFT_TO_TOPRIGHT || rmd->edge==AE_RIGHT_TO_TOPLEFT) {
delta= event->x - rmd->origx;
- if(rmd->edge=='l') delta= -delta;
+ if(rmd->edge==AE_LEFT_TO_TOPRIGHT) delta= -delta;
rmd->ar->sizex= rmd->origval + delta;
CLAMP(rmd->ar->sizex, 0, rmd->maxsize);
@@ -1421,13 +1415,17 @@ static int region_scale_modal(bContext *C, wmOperator *op, wmEvent *event)
ED_region_toggle_hidden(C, rmd->ar);
}
else {
+ int maxsize=0;
delta= event->y - rmd->origy;
- if(rmd->edge=='b') delta= -delta;
+ if(rmd->edge==AE_BOTTOM_TO_TOPLEFT) delta= -delta;
rmd->ar->sizey= rmd->origval + delta;
CLAMP(rmd->ar->sizey, 0, rmd->maxsize);
- if(rmd->ar->sizey < 24) {
+ if(rmd->ar->regiontype == RGN_TYPE_TOOL_PROPS)
+ maxsize = rmd->maxsize - ((rmd->sa->headertype==2)?48:24) - 10;
+
+ if(rmd->ar->sizey < 24 || (maxsize > 0 && (rmd->ar->sizey > maxsize)) ) {
rmd->ar->sizey= rmd->origval;
if(!(rmd->ar->flag & RGN_FLAG_HIDDEN))
ED_region_toggle_hidden(C, rmd->ar);
@@ -1755,10 +1753,10 @@ static int area_join_init(bContext *C, wmOperator *op)
int x2, y2;
/* required properties, make negative to get return 0 if not set by caller */
- x1= RNA_int_get(op->ptr, "x1");
- y1= RNA_int_get(op->ptr, "y1");
- x2= RNA_int_get(op->ptr, "x2");
- y2= RNA_int_get(op->ptr, "y2");
+ x1= RNA_int_get(op->ptr, "min_x");
+ y1= RNA_int_get(op->ptr, "min_y");
+ x2= RNA_int_get(op->ptr, "max_x");
+ y2= RNA_int_get(op->ptr, "max_y");
sa1 = screen_areahascursor(CTX_wm_screen(C), x1, y1);
sa2 = screen_areahascursor(CTX_wm_screen(C), x2, y2);
@@ -1839,10 +1837,10 @@ static int area_join_invoke(bContext *C, wmOperator *op, wmEvent *event)
return OPERATOR_PASS_THROUGH;
/* prepare operator state vars */
- RNA_int_set(op->ptr, "x1", sad->x);
- RNA_int_set(op->ptr, "y1", sad->y);
- RNA_int_set(op->ptr, "x2", event->x);
- RNA_int_set(op->ptr, "y2", event->y);
+ RNA_int_set(op->ptr, "min_x", sad->x);
+ RNA_int_set(op->ptr, "min_y", sad->y);
+ RNA_int_set(op->ptr, "max_x", event->x);
+ RNA_int_set(op->ptr, "max_y", event->y);
if(!area_join_init(C, op))
return OPERATOR_PASS_THROUGH;
@@ -1984,10 +1982,10 @@ static void SCREEN_OT_area_join(wmOperatorType *ot)
ot->flag= OPTYPE_BLOCKING;
/* rna */
- RNA_def_int(ot->srna, "x1", -100, INT_MIN, INT_MAX, "X 1", "", INT_MIN, INT_MAX);
- RNA_def_int(ot->srna, "y1", -100, INT_MIN, INT_MAX, "Y 1", "", INT_MIN, INT_MAX);
- RNA_def_int(ot->srna, "x2", -100, INT_MIN, INT_MAX, "X 2", "", INT_MIN, INT_MAX);
- RNA_def_int(ot->srna, "y2", -100, INT_MIN, INT_MAX, "Y 2", "", INT_MIN, INT_MAX);
+ RNA_def_int(ot->srna, "min_x", -100, INT_MIN, INT_MAX, "X 1", "", INT_MIN, INT_MAX);
+ RNA_def_int(ot->srna, "min_y", -100, INT_MIN, INT_MAX, "Y 1", "", INT_MIN, INT_MAX);
+ RNA_def_int(ot->srna, "max_x", -100, INT_MIN, INT_MAX, "X 2", "", INT_MIN, INT_MAX);
+ RNA_def_int(ot->srna, "max_y", -100, INT_MIN, INT_MAX, "Y 2", "", INT_MIN, INT_MAX);
}
/* ************** repeat last operator ***************************** */
diff --git a/source/blender/editors/screen/screendump.c b/source/blender/editors/screen/screendump.c
index d5cd8285515..56efa0a5a83 100644
--- a/source/blender/editors/screen/screendump.c
+++ b/source/blender/editors/screen/screendump.c
@@ -44,7 +44,6 @@
#include "BKE_global.h"
#include "BKE_image.h"
#include "BKE_report.h"
-#include "BKE_utildefines.h"
#include "BKE_writeavi.h"
#include "BIF_gl.h"
diff --git a/source/blender/editors/sculpt_paint/CMakeLists.txt b/source/blender/editors/sculpt_paint/CMakeLists.txt
index f0493d8e2d8..3211763b619 100644
--- a/source/blender/editors/sculpt_paint/CMakeLists.txt
+++ b/source/blender/editors/sculpt_paint/CMakeLists.txt
@@ -22,20 +22,20 @@
FILE(GLOB SRC *.c)
SET(INC
+ ../include
../../blenkernel
../../imbuf
../../gpu
../../blenlib
- ../include
- ../../../../intern/guardedalloc
../../makesdna
../../makesrna
../../windowmanager
../../render/extern/include
+ ../../../../intern/guardedalloc
)
IF(WIN32)
- SET(INC ${INC} ${PTHREADS_INC})
+ LIST(APPEND INC ${PTHREADS_INC})
ENDIF(WIN32)
BLENDERLIB(bf_editor_sculpt_paint "${SRC}" "${INC}")
diff --git a/source/blender/editors/sculpt_paint/Makefile b/source/blender/editors/sculpt_paint/Makefile
index 012a39b8d25..f9f39fea7eb 100644
--- a/source/blender/editors/sculpt_paint/Makefile
+++ b/source/blender/editors/sculpt_paint/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2007 Blender Foundation
# All rights reserved.
diff --git a/source/blender/editors/sculpt_paint/SConscript b/source/blender/editors/sculpt_paint/SConscript
index 3d9a5144c93..2902b21fff1 100644
--- a/source/blender/editors/sculpt_paint/SConscript
+++ b/source/blender/editors/sculpt_paint/SConscript
@@ -11,8 +11,8 @@ incs += ' ../../render/extern/include'
incs += ' ../../gpu ../../makesrna'
if env['OURPLATFORM'] == 'linux2':
- cflags='-pthread'
- incs += ' ../../../extern/binreloc/include'
+ cflags='-pthread'
+ incs += ' ../../../extern/binreloc/include'
if env['OURPLATFORM'] == 'linuxcross':
if env['WITH_BF_OPENMP']:
diff --git a/source/blender/editors/sculpt_paint/paint_image.c b/source/blender/editors/sculpt_paint/paint_image.c
index 250f57824b5..6e921b57d9d 100644
--- a/source/blender/editors/sculpt_paint/paint_image.c
+++ b/source/blender/editors/sculpt_paint/paint_image.c
@@ -60,13 +60,10 @@
#include "BKE_idprop.h"
#include "BKE_object.h"
#include "BKE_brush.h"
-#include "BKE_global.h"
#include "BKE_image.h"
#include "BKE_main.h"
#include "BKE_mesh.h"
-#include "BKE_node.h"
#include "BKE_paint.h"
-#include "BKE_utildefines.h"
#include "BKE_DerivedMesh.h"
#include "BKE_report.h"
#include "BKE_depsgraph.h"
@@ -3760,7 +3757,7 @@ static void *do_projectpaint_thread(void *ph_v)
if (falloff > 0.0f) {
if (ps->is_texbrush) {
- brush_sample_tex(ps->brush, projPixel->projCoSS, rgba);
+ brush_sample_tex(ps->brush, projPixel->projCoSS, rgba, thread_index);
alpha = rgba[3];
} else {
alpha = 1.0f;
@@ -4537,29 +4534,8 @@ static void paint_redraw(bContext *C, ImagePaintState *s, int final)
if(s->image)
GPU_free_image(s->image);
+ /* compositor listener deals with updating */
WM_event_add_notifier(C, NC_IMAGE|NA_EDITED, s->image);
-
- // XXX node update
-#if 0
- if(!s->sima && s->image) {
- /* after paint, tag Image or RenderResult nodes changed */
- if(s->scene->nodetree) {
- imagepaint_composite_tags(s->scene->nodetree, image, &s->sima->iuser);
- }
- /* signal composite (hurmf, need an allqueue?) */
- if(s->sima->lock) {
- ScrArea *sa;
- for(sa=s->screen->areabase.first; sa; sa= sa->next) {
- if(sa->spacetype==SPACE_NODE) {
- if(((SpaceNode *)sa->spacedata.first)->treetype==NTREE_COMPOSIT) {
- addqueue(sa->win, UI_BUT_EVENT, B_NODE_TREE_EXEC);
- break;
- }
- }
- }
- }
- }
-#endif
}
else {
if(!s->sima || !s->sima->lock)
@@ -5159,11 +5135,40 @@ static int sample_color_invoke(bContext *C, wmOperator *op, wmEvent *event)
ARegion *ar= CTX_wm_region(C);
int location[2];
- location[0]= event->x - ar->winrct.xmin;
- location[1]= event->y - ar->winrct.ymin;
- RNA_int_set_array(op->ptr, "location", location);
+ if(ar) {
+ location[0]= event->x - ar->winrct.xmin;
+ location[1]= event->y - ar->winrct.ymin;
+ RNA_int_set_array(op->ptr, "location", location);
- return sample_color_exec(C, op);
+ sample_color_exec(C, op);
+ }
+
+ WM_event_add_modal_handler(C, op);
+
+ return OPERATOR_RUNNING_MODAL;
+}
+
+static int sample_color_modal(bContext *C, wmOperator *op, wmEvent *event)
+{
+ ARegion *ar= CTX_wm_region(C);
+ int location[2];
+
+ switch(event->type) {
+ case LEFTMOUSE:
+ case RIGHTMOUSE: // XXX hardcoded
+ return OPERATOR_FINISHED;
+ case MOUSEMOVE:
+ if(ar) {
+ location[0]= event->x - ar->winrct.xmin;
+ location[1]= event->y - ar->winrct.ymin;
+ RNA_int_set_array(op->ptr, "location", location);
+
+ sample_color_exec(C, op);
+ }
+ break;
+ }
+
+ return OPERATOR_RUNNING_MODAL;
}
void PAINT_OT_sample_color(wmOperatorType *ot)
@@ -5175,6 +5180,7 @@ void PAINT_OT_sample_color(wmOperatorType *ot)
/* api callbacks */
ot->exec= sample_color_exec;
ot->invoke= sample_color_invoke;
+ ot->modal= sample_color_modal;
ot->poll= image_paint_poll;
/* flags */
@@ -5517,7 +5523,14 @@ static int texture_paint_image_from_view_exec(bContext *C, wmOperator *op)
if(w > maxsize) w= maxsize;
if(h > maxsize) h= maxsize;
- ibuf= ED_view3d_draw_offscreen_imbuf(CTX_data_scene(C), CTX_wm_view3d(C), CTX_wm_region(C), w, h);
+ ibuf= ED_view3d_draw_offscreen_imbuf(CTX_data_scene(C), CTX_wm_view3d(C), CTX_wm_region(C), w, h, IB_rect);
+ if(!ibuf) {
+ /* Mostly happens when OpenGL offscreen buffer was failed to create, */
+ /* but could be other reasons. Should be handled in the future. nazgul */
+ BKE_report(op->reports, RPT_ERROR, "Failed to create OpenGL offscreen buffer.");
+ return OPERATOR_CANCELLED;
+ }
+
image= BKE_add_image_imbuf(ibuf);
if(image) {
diff --git a/source/blender/editors/sculpt_paint/paint_stroke.c b/source/blender/editors/sculpt_paint/paint_stroke.c
index 06fffa3c757..6d58731d79c 100644
--- a/source/blender/editors/sculpt_paint/paint_stroke.c
+++ b/source/blender/editors/sculpt_paint/paint_stroke.c
@@ -53,7 +53,6 @@
#include "paint_intern.h"
#include "sculpt_intern.h" // XXX, for expedience in getting this working, refactor later (or this just shows that this needs unification)
-#include "BKE_image.h"
#include <float.h>
#include <math.h>
diff --git a/source/blender/editors/sculpt_paint/paint_utils.c b/source/blender/editors/sculpt_paint/paint_utils.c
index f69f08a16c7..0098b8ca12c 100644
--- a/source/blender/editors/sculpt_paint/paint_utils.c
+++ b/source/blender/editors/sculpt_paint/paint_utils.c
@@ -15,13 +15,10 @@
#include "BLI_math.h"
#include "BKE_brush.h"
-#include "BKE_colortools.h"
#include "BKE_context.h"
#include "BKE_DerivedMesh.h"
-#include "BKE_global.h"
#include "BKE_paint.h"
-#include "BKE_utildefines.h"
#include "BIF_gl.h"
diff --git a/source/blender/editors/sculpt_paint/paint_vertex.c b/source/blender/editors/sculpt_paint/paint_vertex.c
index 9d14da973d6..399ba535e57 100644
--- a/source/blender/editors/sculpt_paint/paint_vertex.c
+++ b/source/blender/editors/sculpt_paint/paint_vertex.c
@@ -38,43 +38,38 @@
#include "MEM_guardedalloc.h"
-#include "IMB_imbuf.h"
-#include "IMB_imbuf_types.h"
-
#include "BLI_blenlib.h"
#include "BLI_math.h"
#include "BLI_ghash.h"
+#include "IMB_imbuf.h"
+#include "IMB_imbuf_types.h"
+
#include "DNA_armature_types.h"
#include "DNA_mesh_types.h"
#include "DNA_particle_types.h"
+#include "DNA_scene_types.h"
#include "DNA_brush_types.h"
+#include "DNA_object_types.h"
+#include "DNA_meshdata_types.h"
#include "RNA_access.h"
#include "RNA_define.h"
-#include "BKE_armature.h"
+#include "BKE_DerivedMesh.h"
#include "BKE_action.h"
#include "BKE_brush.h"
-#include "BKE_DerivedMesh.h"
-#include "BKE_cloth.h"
#include "BKE_context.h"
-#include "BKE_customdata.h"
#include "BKE_depsgraph.h"
#include "BKE_deform.h"
-#include "BKE_displist.h"
-#include "BKE_global.h"
#include "BKE_mesh.h"
#include "BKE_modifier.h"
#include "BKE_object.h"
#include "BKE_paint.h"
-#include "BKE_utildefines.h"
#include "WM_api.h"
#include "WM_types.h"
-#include "BIF_gl.h"
-#include "BIF_glutil.h"
#include "ED_armature.h"
#include "ED_mesh.h"
@@ -100,7 +95,7 @@ int vertex_paint_mode_poll(bContext *C)
{
Object *ob = CTX_data_active_object(C);
- return ob && ob->mode == OB_MODE_VERTEX_PAINT;
+ return ob && ob->mode == OB_MODE_VERTEX_PAINT && ((Mesh *)ob->data)->totface;
}
int vertex_paint_poll(bContext *C)
@@ -112,8 +107,8 @@ int vertex_paint_poll(bContext *C)
ARegion *ar= CTX_wm_region(C);
if(ar->regiontype==RGN_TYPE_WINDOW)
return 1;
+ }
}
- }
return 0;
}
@@ -121,7 +116,7 @@ int weight_paint_mode_poll(bContext *C)
{
Object *ob = CTX_data_active_object(C);
- return ob && ob->mode == OB_MODE_WEIGHT_PAINT;
+ return ob && ob->mode == OB_MODE_WEIGHT_PAINT && ((Mesh *)ob->data)->totface;
}
int weight_paint_poll(bContext *C)
@@ -1149,10 +1144,16 @@ static int vpaint_radial_control_invoke(bContext *C, wmOperator *op, wmEvent *ev
{
Paint *p = paint_get_active(CTX_data_scene(C));
Brush *brush = paint_brush(p);
+ float col[4];
WM_paint_cursor_end(CTX_wm_manager(C), p->paint_cursor);
p->paint_cursor = NULL;
brush_radial_control_invoke(op, brush, 1);
+
+ copy_v3_v3(col, brush->add_col);
+ col[3]= 0.5f;
+ RNA_float_set_array(op->ptr, "color", col);
+
return WM_radial_control_invoke(C, op, event);
}
@@ -1178,10 +1179,16 @@ static int wpaint_radial_control_invoke(bContext *C, wmOperator *op, wmEvent *ev
{
Paint *p = paint_get_active(CTX_data_scene(C));
Brush *brush = paint_brush(p);
+ float col[4];
WM_paint_cursor_end(CTX_wm_manager(C), p->paint_cursor);
p->paint_cursor = NULL;
brush_radial_control_invoke(op, brush, 1);
+
+ copy_v3_v3(col, brush->add_col);
+ col[3]= 0.5f;
+ RNA_float_set_array(op->ptr, "color", col);
+
return WM_radial_control_invoke(C, op, event);
}
diff --git a/source/blender/editors/sculpt_paint/sculpt.c b/source/blender/editors/sculpt_paint/sculpt.c
index e7ea298e58c..2e192a08ca5 100644
--- a/source/blender/editors/sculpt_paint/sculpt.c
+++ b/source/blender/editors/sculpt_paint/sculpt.c
@@ -41,8 +41,6 @@
#include "BLI_editVert.h"
#include "BLI_rand.h"
-#include "DNA_key_types.h"
-#include "DNA_mesh_types.h"
#include "DNA_meshdata_types.h"
#include "DNA_object_types.h"
#include "DNA_scene_types.h"
@@ -51,22 +49,14 @@
#include "BKE_brush.h"
#include "BKE_cdderivedmesh.h"
#include "BKE_context.h"
-#include "BKE_customdata.h"
-#include "BKE_DerivedMesh.h"
#include "BKE_depsgraph.h"
-#include "BKE_global.h"
-#include "BKE_image.h"
#include "BKE_key.h"
#include "BKE_library.h"
-#include "BKE_main.h"
#include "BKE_mesh.h"
#include "BKE_modifier.h"
#include "BKE_multires.h"
#include "BKE_paint.h"
#include "BKE_report.h"
-#include "BKE_texture.h"
-#include "BKE_utildefines.h"
-#include "BKE_colortools.h"
#include "BIF_gl.h"
#include "BIF_glutil.h"
@@ -74,9 +64,7 @@
#include "WM_api.h"
#include "WM_types.h"
#include "ED_screen.h"
-#include "ED_sculpt.h"
#include "ED_view3d.h"
-#include "ED_mesh.h"
#include "paint_intern.h"
#include "sculpt_intern.h"
@@ -736,7 +724,7 @@ static float tex_strength(SculptSession *ss, Brush *br, float *point, const floa
/* Get strength by feeding the vertex
location directly into a texture */
externtex(mtex, point, &avg,
- &jnk, &jnk, &jnk, &jnk);
+ &jnk, &jnk, &jnk, &jnk, 0);
}
else if(ss->texcache) {
float rotation = -mtex->rot;
@@ -2738,10 +2726,24 @@ static int sculpt_radial_control_invoke(bContext *C, wmOperator *op, wmEvent *ev
{
Paint *p = paint_get_active(CTX_data_scene(C));
Brush *brush = paint_brush(p);
+ float col[4], tex_col[4];
WM_paint_cursor_end(CTX_wm_manager(C), p->paint_cursor);
p->paint_cursor = NULL;
brush_radial_control_invoke(op, brush, 1);
+
+ if((brush->flag & BRUSH_DIR_IN) && ELEM4(brush->sculpt_tool, SCULPT_TOOL_DRAW, SCULPT_TOOL_INFLATE, SCULPT_TOOL_CLAY, SCULPT_TOOL_PINCH))
+ copy_v3_v3(col, brush->sub_col);
+ else
+ copy_v3_v3(col, brush->add_col);
+ col[3]= 0.5f;
+
+ copy_v3_v3(tex_col, U.sculpt_paint_overlay_col);
+ tex_col[3]= (brush->texture_overlay_alpha / 100.0f);
+
+ RNA_float_set_array(op->ptr, "color", col);
+ RNA_float_set_array(op->ptr, "texture_color", tex_col);
+
return WM_radial_control_invoke(C, op, event);
}
diff --git a/source/blender/editors/sculpt_paint/sculpt_undo.c b/source/blender/editors/sculpt_paint/sculpt_undo.c
index e4121c9c76a..e92740678fd 100644
--- a/source/blender/editors/sculpt_paint/sculpt_undo.c
+++ b/source/blender/editors/sculpt_paint/sculpt_undo.c
@@ -30,6 +30,8 @@
*
*/
+#include "MEM_guardedalloc.h"
+
#include "BLI_math.h"
#include "BLI_ghash.h"
#include "BLI_threads.h"
@@ -38,7 +40,6 @@
#include "DNA_object_types.h"
#include "DNA_scene_types.h"
#include "DNA_mesh_types.h"
-#include "DNA_key_types.h"
#include "BKE_cdderivedmesh.h"
#include "BKE_context.h"
@@ -46,7 +47,6 @@
#include "BKE_modifier.h"
#include "BKE_multires.h"
#include "BKE_paint.h"
-#include "BKE_mesh.h"
#include "BKE_key.h"
#include "WM_api.h"
diff --git a/source/blender/editors/sound/CMakeLists.txt b/source/blender/editors/sound/CMakeLists.txt
index 02765726c6e..456c02d947e 100644
--- a/source/blender/editors/sound/CMakeLists.txt
+++ b/source/blender/editors/sound/CMakeLists.txt
@@ -22,14 +22,14 @@
FILE(GLOB SRC *.c)
SET(INC
+ ../include
../../blenkernel
../../blenlib
- ../include
- ../../../../intern/guardedalloc
- ../../../../intern/audaspace/intern
../../makesdna
../../makesrna
../../windowmanager
+ ../../../../intern/guardedalloc
+ ../../../../intern/audaspace/intern
)
BLENDERLIB(bf_editor_sound "${SRC}" "${INC}")
diff --git a/source/blender/editors/sound/Makefile b/source/blender/editors/sound/Makefile
index 10145035eb4..f51e15627a2 100644
--- a/source/blender/editors/sound/Makefile
+++ b/source/blender/editors/sound/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2007 Blender Foundation
# All rights reserved.
@@ -37,6 +37,8 @@ CFLAGS += $(LEVEL_1_C_WARNINGS)
CPPFLAGS += -I$(NAN_GUARDEDALLOC)/include
+CPPFLAGS += -I$(NAN_PYTHON)/include/python$(NAN_PYTHON_VERSION)
+
CPPFLAGS += -I../../windowmanager
CPPFLAGS += -I../../blenkernel
CPPFLAGS += -I../../blenloader
diff --git a/source/blender/editors/sound/sound_ops.c b/source/blender/editors/sound/sound_ops.c
index 1658f336130..fe1fe3266bc 100644
--- a/source/blender/editors/sound/sound_ops.c
+++ b/source/blender/editors/sound/sound_ops.c
@@ -41,11 +41,9 @@
#include "BKE_context.h"
#include "BKE_global.h"
-#include "BKE_main.h"
#include "BKE_report.h"
#include "BKE_packedFile.h"
#include "BKE_sound.h"
-#include "BKE_utildefines.h"
#include "BLI_blenlib.h"
diff --git a/source/blender/editors/space_action/CMakeLists.txt b/source/blender/editors/space_action/CMakeLists.txt
index 85275b2db23..3c0585c31ca 100644
--- a/source/blender/editors/space_action/CMakeLists.txt
+++ b/source/blender/editors/space_action/CMakeLists.txt
@@ -22,14 +22,13 @@
FILE(GLOB SRC *.c)
SET(INC
+ ../include
../../blenkernel
../../blenlib
- ../include
- ../../../../intern/guardedalloc
../../makesdna
../../makesrna
../../windowmanager
+ ../../../../intern/guardedalloc
)
-
BLENDERLIB(bf_editor_space_action "${SRC}" "${INC}")
diff --git a/source/blender/editors/space_action/Makefile b/source/blender/editors/space_action/Makefile
index e856587acca..19aeb54cc2f 100644
--- a/source/blender/editors/space_action/Makefile
+++ b/source/blender/editors/space_action/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2007 Blender Foundation
# All rights reserved.
diff --git a/source/blender/editors/space_action/action_draw.c b/source/blender/editors/space_action/action_draw.c
index 7ed07372e96..d2067790b2f 100644
--- a/source/blender/editors/space_action/action_draw.c
+++ b/source/blender/editors/space_action/action_draw.c
@@ -34,7 +34,6 @@
#include <string.h>
#include <float.h>
-#include "MEM_guardedalloc.h"
#include "BLI_blenlib.h"
#include "BLI_math.h"
@@ -45,19 +44,12 @@
#include "DNA_screen_types.h"
#include "BKE_action.h"
-#include "BKE_depsgraph.h"
-#include "BKE_fcurve.h"
-#include "BKE_key.h"
-#include "BKE_material.h"
-#include "BKE_object.h"
-#include "BKE_global.h" // XXX remove me!
#include "BKE_context.h"
#include "BKE_utildefines.h"
/* Everything from source (BIF, BDR, BSE) ------------------------------ */
#include "BIF_gl.h"
-#include "BIF_glutil.h"
#include "UI_interface.h"
#include "UI_resources.h"
diff --git a/source/blender/editors/space_action/action_edit.c b/source/blender/editors/space_action/action_edit.c
index 0e2a7f690c5..916b0032f17 100644
--- a/source/blender/editors/space_action/action_edit.c
+++ b/source/blender/editors/space_action/action_edit.c
@@ -32,7 +32,6 @@
#include <string.h>
#include <float.h>
-#include "MEM_guardedalloc.h"
#include "BLI_blenlib.h"
#include "BLI_math.h"
@@ -46,15 +45,10 @@
#include "RNA_enum_types.h"
#include "BKE_action.h"
-#include "BKE_depsgraph.h"
#include "BKE_fcurve.h"
-#include "BKE_key.h"
-#include "BKE_material.h"
#include "BKE_nla.h"
-#include "BKE_object.h"
#include "BKE_context.h"
#include "BKE_report.h"
-#include "BKE_utildefines.h"
#include "UI_view2d.h"
diff --git a/source/blender/editors/space_action/action_ops.c b/source/blender/editors/space_action/action_ops.c
index 8ef37942fb3..19dd4512909 100644
--- a/source/blender/editors/space_action/action_ops.c
+++ b/source/blender/editors/space_action/action_ops.c
@@ -29,14 +29,11 @@
#include <stdlib.h>
#include <math.h>
-#include "MEM_guardedalloc.h"
#include "DNA_space_types.h"
#include "BLI_blenlib.h"
-#include "BKE_context.h"
-#include "BKE_utildefines.h"
#include "ED_transform.h"
diff --git a/source/blender/editors/space_action/action_select.c b/source/blender/editors/space_action/action_select.c
index 3be9c9bf3f7..b2c47194384 100644
--- a/source/blender/editors/space_action/action_select.c
+++ b/source/blender/editors/space_action/action_select.c
@@ -42,15 +42,9 @@
#include "RNA_access.h"
#include "RNA_define.h"
-#include "BKE_action.h"
-#include "BKE_depsgraph.h"
#include "BKE_fcurve.h"
-#include "BKE_key.h"
-#include "BKE_material.h"
#include "BKE_nla.h"
-#include "BKE_object.h"
#include "BKE_context.h"
-#include "BKE_utildefines.h"
#include "UI_view2d.h"
diff --git a/source/blender/editors/space_action/space_action.c b/source/blender/editors/space_action/space_action.c
index bad35d9d3e6..7b96618d923 100644
--- a/source/blender/editors/space_action/space_action.c
+++ b/source/blender/editors/space_action/space_action.c
@@ -38,10 +38,8 @@
#include "BLI_math.h"
#include "BLI_rand.h"
-#include "BKE_colortools.h"
#include "BKE_context.h"
#include "BKE_screen.h"
-#include "BKE_utildefines.h"
#include "ED_screen.h"
diff --git a/source/blender/editors/space_api/CMakeLists.txt b/source/blender/editors/space_api/CMakeLists.txt
index 591e97f800f..da140fe0982 100644
--- a/source/blender/editors/space_api/CMakeLists.txt
+++ b/source/blender/editors/space_api/CMakeLists.txt
@@ -22,13 +22,13 @@
FILE(GLOB SRC *.c)
SET(INC
+ ../include
../../blenkernel
../../blenlib
- ../include
- ../../../../intern/guardedalloc
../../makesdna
../../makesrna
../../windowmanager
+ ../../../../intern/guardedalloc
)
BLENDERLIB(bf_editor_space_api "${SRC}" "${INC}")
diff --git a/source/blender/editors/space_api/Makefile b/source/blender/editors/space_api/Makefile
index 474fbe89053..deaa46a9582 100644
--- a/source/blender/editors/space_api/Makefile
+++ b/source/blender/editors/space_api/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2007 Blender Foundation
# All rights reserved.
diff --git a/source/blender/editors/space_api/space.c b/source/blender/editors/space_api/space.c
index 66cb88ebf70..e862358c465 100644
--- a/source/blender/editors/space_api/space.c
+++ b/source/blender/editors/space_api/space.c
@@ -29,13 +29,10 @@
#include <string.h>
#include <stdio.h>
-#include "MEM_guardedalloc.h"
#include "BLI_blenlib.h"
#include "BLI_math.h"
-#include "BKE_context.h"
-#include "BKE_screen.h"
/* */
diff --git a/source/blender/editors/space_api/spacetypes.c b/source/blender/editors/space_api/spacetypes.c
index d841a5a7c19..2140c59da67 100644
--- a/source/blender/editors/space_api/spacetypes.c
+++ b/source/blender/editors/space_api/spacetypes.c
@@ -36,7 +36,6 @@
#include "UI_interface.h"
#include "UI_view2d.h"
-#include "BIF_gl.h"
#include "ED_anim_api.h"
#include "ED_armature.h"
diff --git a/source/blender/editors/space_buttons/CMakeLists.txt b/source/blender/editors/space_buttons/CMakeLists.txt
index bb50ac0cc86..f8e9536ecf8 100644
--- a/source/blender/editors/space_buttons/CMakeLists.txt
+++ b/source/blender/editors/space_buttons/CMakeLists.txt
@@ -22,13 +22,13 @@
FILE(GLOB SRC *.c)
SET(INC
+ ../include
../../blenkernel
../../blenlib
- ../include
- ../../../../intern/guardedalloc
../../makesdna
../../makesrna
../../windowmanager
+ ../../../../intern/guardedalloc
)
BLENDERLIB(bf_editor_space_buttons "${SRC}" "${INC}")
diff --git a/source/blender/editors/space_buttons/Makefile b/source/blender/editors/space_buttons/Makefile
index a4894ede06b..28758fb168b 100644
--- a/source/blender/editors/space_buttons/Makefile
+++ b/source/blender/editors/space_buttons/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2007 Blender Foundation
# All rights reserved.
diff --git a/source/blender/editors/space_buttons/buttons_context.c b/source/blender/editors/space_buttons/buttons_context.c
index 715f0a78808..343237dee5e 100644
--- a/source/blender/editors/space_buttons/buttons_context.c
+++ b/source/blender/editors/space_buttons/buttons_context.c
@@ -41,7 +41,6 @@
#include "BLI_listbase.h"
#include "BKE_context.h"
-#include "BKE_global.h"
#include "BKE_action.h"
#include "BKE_material.h"
#include "BKE_modifier.h"
@@ -50,7 +49,6 @@
#include "BKE_screen.h"
#include "BKE_texture.h"
#include "BKE_utildefines.h"
-#include "BKE_world.h"
#include "RNA_access.h"
diff --git a/source/blender/editors/space_buttons/buttons_header.c b/source/blender/editors/space_buttons/buttons_header.c
index d8cbbb0cbae..ab756b638fa 100644
--- a/source/blender/editors/space_buttons/buttons_header.c
+++ b/source/blender/editors/space_buttons/buttons_header.c
@@ -30,20 +30,15 @@
#include <stdio.h>
-#include "MEM_guardedalloc.h"
#include "BLI_blenlib.h"
#include "BKE_context.h"
-#include "BKE_screen.h"
-#include "BKE_utildefines.h"
#include "ED_screen.h"
#include "ED_types.h"
-#include "BIF_gl.h"
-#include "BIF_glutil.h"
#include "UI_interface.h"
#include "UI_resources.h"
diff --git a/source/blender/editors/space_buttons/buttons_ops.c b/source/blender/editors/space_buttons/buttons_ops.c
index ebdc0d37b43..c1803dde805 100644
--- a/source/blender/editors/space_buttons/buttons_ops.c
+++ b/source/blender/editors/space_buttons/buttons_ops.c
@@ -33,9 +33,12 @@
#include "DNA_userdef_types.h"
#include "BLI_fileops.h"
+#include "BLI_path_util.h"
+#include "BLI_storage.h"
+#include "BLI_string.h"
#include "BKE_context.h"
-#include "BKE_global.h" /* G.sce only */
+#include "BKE_global.h"
#include "WM_api.h"
#include "WM_types.h"
@@ -90,12 +93,28 @@ typedef struct FileBrowseOp {
static int file_browse_exec(bContext *C, wmOperator *op)
{
FileBrowseOp *fbo= op->customdata;
- char *str;
+ ID *id;
+ char *base, *str, path[FILE_MAX];
if (RNA_property_is_set(op->ptr, "filepath")==0 || fbo==NULL)
return OPERATOR_CANCELLED;
str= RNA_string_get_alloc(op->ptr, "filepath", 0, 0);
+
+ /* add slash for directories, important for some properties */
+ if(RNA_property_subtype(fbo->prop) == PROP_DIRPATH) {
+ id = fbo->ptr.id.data;
+ base = (id && id->lib)? id->lib->filepath: G.sce;
+
+ BLI_strncpy(path, str, FILE_MAX);
+ BLI_path_abs(path, base);
+
+ if(BLI_is_dir(path)) {
+ str = MEM_reallocN(str, strlen(str)+2);
+ BLI_add_slash(str);
+ }
+ }
+
RNA_property_string_set(&fbo->ptr, fbo->prop, str);
RNA_property_update(C, &fbo->ptr, fbo->prop);
MEM_freeN(str);
diff --git a/source/blender/editors/space_buttons/space_buttons.c b/source/blender/editors/space_buttons/space_buttons.c
index a775a0b6e6a..0b6e752574b 100644
--- a/source/blender/editors/space_buttons/space_buttons.c
+++ b/source/blender/editors/space_buttons/space_buttons.c
@@ -36,7 +36,6 @@
#include "BLI_math.h"
#include "BLI_rand.h"
-#include "BKE_colortools.h"
#include "BKE_context.h"
#include "BKE_screen.h"
@@ -351,6 +350,12 @@ static void buttons_area_listener(ScrArea *sa, wmNotifier *wmn)
ED_area_tag_redraw(sa);
break;
}
+ break;
+ /* Listener for preview render, when doing an global undo. */
+ case NC_WINDOW:
+ ED_area_tag_redraw(sa);
+ sbuts->preview= 1;
+ break;
}
if(wmn->data == ND_KEYS)
diff --git a/source/blender/editors/space_console/CMakeLists.txt b/source/blender/editors/space_console/CMakeLists.txt
index 0cee45576b8..59074bcbb79 100644
--- a/source/blender/editors/space_console/CMakeLists.txt
+++ b/source/blender/editors/space_console/CMakeLists.txt
@@ -22,15 +22,15 @@
FILE(GLOB SRC *.c)
SET(INC
+ ../include
../../blenfont
../../blenkernel
../../blenlib
../../blenloader
- ../include
- ../../../../intern/guardedalloc
../../makesdna
../../makesrna
../../windowmanager
+ ../../../../intern/guardedalloc
)
IF(NOT WITH_PYTHON)
diff --git a/source/blender/editors/space_console/Makefile b/source/blender/editors/space_console/Makefile
index 3f760b1ad67..4ae157507e0 100644
--- a/source/blender/editors/space_console/Makefile
+++ b/source/blender/editors/space_console/Makefile
@@ -17,7 +17,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2009 Blender Foundation
# All rights reserved.
diff --git a/source/blender/editors/space_console/SConscript b/source/blender/editors/space_console/SConscript
index d50902446ba..087090a7740 100644
--- a/source/blender/editors/space_console/SConscript
+++ b/source/blender/editors/space_console/SConscript
@@ -5,19 +5,19 @@ sources = env.Glob('*.c')
defs = []
incs = [
- '../include',
- '#extern/glew/include',
- '#/intern/guardedalloc',
- '../../makesdna',
- '../../makesrna',
- '../../blenkernel',
- '../../blenlib',
- '../../windowmanager',
- '../../blenfont',
- '../../blenloader',
+ '../include',
+ '#extern/glew/include',
+ '#/intern/guardedalloc',
+ '../../makesdna',
+ '../../makesrna',
+ '../../blenkernel',
+ '../../blenlib',
+ '../../windowmanager',
+ '../../blenfont',
+ '../../blenloader',
]
if not env['WITH_BF_PYTHON']:
- defs.append('DISABLE_PYTHON')
+ defs.append('DISABLE_PYTHON')
env.BlenderLib ( 'bf_editors_space_console', sources, incs, defs, libtype=['core'], priority=[95] )
diff --git a/source/blender/editors/space_console/console_draw.c b/source/blender/editors/space_console/console_draw.c
index 2fab998b9b6..74d47ad675d 100644
--- a/source/blender/editors/space_console/console_draw.c
+++ b/source/blender/editors/space_console/console_draw.c
@@ -33,7 +33,6 @@
#include <sys/stat.h>
#include <limits.h>
-#include "MEM_guardedalloc.h"
#include "BLF_api.h"
@@ -42,10 +41,7 @@
#include "DNA_space_types.h"
#include "DNA_screen_types.h"
-#include "BKE_global.h"
-#include "BKE_main.h"
// #include "BKE_suggestions.h"
-#include "BKE_text.h"
#include "BKE_report.h"
#include "BKE_utildefines.h"
diff --git a/source/blender/editors/space_console/console_ops.c b/source/blender/editors/space_console/console_ops.c
index 089e769e0d9..9a53531ba73 100644
--- a/source/blender/editors/space_console/console_ops.c
+++ b/source/blender/editors/space_console/console_ops.c
@@ -39,13 +39,7 @@
#include "BLI_blenlib.h"
#include "BLI_dynstr.h"
-#include "BKE_utildefines.h"
#include "BKE_context.h"
-#include "BKE_depsgraph.h"
-#include "BKE_global.h"
-#include "BKE_library.h"
-#include "BKE_main.h"
-#include "BKE_report.h"
#include "BKE_text.h" /* only for character utility funcs */
#include "WM_api.h"
diff --git a/source/blender/editors/space_console/console_report.c b/source/blender/editors/space_console/console_report.c
index 50829e4365c..51bffa5b981 100644
--- a/source/blender/editors/space_console/console_report.c
+++ b/source/blender/editors/space_console/console_report.c
@@ -36,13 +36,7 @@
#include "BLI_blenlib.h"
#include "BLI_dynstr.h"
-#include "BKE_utildefines.h"
#include "BKE_context.h"
-#include "BKE_depsgraph.h"
-#include "BKE_global.h"
-#include "BKE_library.h"
-#include "BKE_main.h"
-#include "BKE_report.h"
#include "WM_api.h"
#include "WM_types.h"
diff --git a/source/blender/editors/space_console/space_console.c b/source/blender/editors/space_console/space_console.c
index c04f8183bee..4ee69bbd809 100644
--- a/source/blender/editors/space_console/space_console.c
+++ b/source/blender/editors/space_console/space_console.c
@@ -35,14 +35,12 @@
#include "MEM_guardedalloc.h"
-#include "BLO_readfile.h" /* get the ID name for dnd*/
-
#include "BLI_blenlib.h"
#include "BLI_math.h"
-#include "BKE_colortools.h"
#include "BKE_context.h"
#include "BKE_screen.h"
+#include "BKE_idcode.h"
#include "ED_screen.h"
@@ -178,7 +176,7 @@ static void id_drop_copy(wmDrag *drag, wmDropBox *drop)
char text[64];
ID *id= drag->poin;
- snprintf(text, sizeof(text), "bpy.data.%s['%s']", BLO_idcode_to_name_plural(GS(id->name)), id->name+2);
+ snprintf(text, sizeof(text), "bpy.data.%s['%s']", BKE_idcode_to_name_plural(GS(id->name)), id->name+2);
/* copy drag path to properties */
RNA_string_set(drop->ptr, "text", text);
diff --git a/source/blender/editors/space_file/CMakeLists.txt b/source/blender/editors/space_file/CMakeLists.txt
index 5cbe9bbe0ba..2a204d67537 100644
--- a/source/blender/editors/space_file/CMakeLists.txt
+++ b/source/blender/editors/space_file/CMakeLists.txt
@@ -22,18 +22,17 @@
FILE(GLOB SRC *.c)
SET(INC
+ ../include
../../blenfont
../../blenkernel
../../blenlib
../../blenloader
../../imbuf
- ../include
- ../../../../intern/audaspace/intern
- ../../../../intern/guardedalloc
../../makesdna
../../makesrna
- ../../render/extern/include
../../windowmanager
+ ../../render/extern/include
+ ../../../../intern/guardedalloc
)
IF(WITH_IMAGE_OPENEXR)
@@ -61,7 +60,7 @@ IF(WITH_IMAGE_HDR)
ENDIF(WITH_IMAGE_HDR)
IF(WIN32)
- SET(INC ${INC} ${PTHREADS_INC})
+ LIST(APPEND INC ${PTHREADS_INC})
ENDIF(WIN32)
BLENDERLIB(bf_editor_space_file "${SRC}" "${INC}")
diff --git a/source/blender/editors/space_file/Makefile b/source/blender/editors/space_file/Makefile
index 48f6879b029..4597ffa3f6b 100644
--- a/source/blender/editors/space_file/Makefile
+++ b/source/blender/editors/space_file/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2007 Blender Foundation
# All rights reserved.
@@ -73,4 +73,4 @@ endif
ifeq ($(WITH_HDR), true)
CPPFLAGS += -DWITH_HDR
-endif \ No newline at end of file
+endif
diff --git a/source/blender/editors/space_file/SConscript b/source/blender/editors/space_file/SConscript
index 9de705e99d3..7c55b40e816 100644
--- a/source/blender/editors/space_file/SConscript
+++ b/source/blender/editors/space_file/SConscript
@@ -14,10 +14,10 @@ if env['WITH_BF_OPENJPEG']:
defs.append('WITH_OPENJPEG')
if env['WITH_BF_OPENEXR']:
- defs.append('WITH_OPENEXR')
+ defs.append('WITH_OPENEXR')
if env['WITH_BF_TIFF']:
- defs.append('WITH_TIFF')
+ defs.append('WITH_TIFF')
if env['OURPLATFORM'] == 'linux2':
cflags='-pthread'
diff --git a/source/blender/editors/space_file/file_draw.c b/source/blender/editors/space_file/file_draw.c
index 03ab42b467d..0f627bda3dc 100644
--- a/source/blender/editors/space_file/file_draw.c
+++ b/source/blender/editors/space_file/file_draw.c
@@ -38,11 +38,8 @@
#include "BIF_gl.h"
#include "BIF_glutil.h"
-#include "BKE_colortools.h"
#include "BKE_context.h"
-#include "BKE_screen.h"
#include "BKE_global.h"
-#include "BKE_utildefines.h"
#include "BLF_api.h"
@@ -121,7 +118,7 @@ void file_draw_buttons(const bContext *C, ARegion *ar)
const int separator = 4;
/* Additional locals. */
- char name[20];
+ char name[32];
int loadbutton;
int fnumbuttons;
int min_x = 10;
@@ -175,16 +172,31 @@ void file_draw_buttons(const bContext *C, ARegion *ar)
/* Text input fields for directory and file. */
if (available_w > 0) {
+ int overwrite_alert= file_draw_check_exists(sfile);
+ /* callbacks for operator check functions */
+ uiBlockSetFunc(block, file_draw_check_cb, NULL, NULL);
+
but = uiDefBut(block, TEX, B_FS_DIRNAME, "",
min_x, line1_y, line1_w-chan_offs, btn_h,
params->dir, 0.0, (float)FILE_MAX-1, 0, 0,
"File path.");
uiButSetCompleteFunc(but, autocomplete_directory, NULL);
+ uiButSetFlag(but, UI_BUT_NO_UTF8);
+
but = uiDefBut(block, TEX, B_FS_FILENAME, "",
min_x, line2_y, line2_w-chan_offs, btn_h,
params->file, 0.0, (float)FILE_MAXFILE-1, 0, 0,
- "File name.");
+ overwrite_alert ?"File name, overwrite existing." : "File name.");
uiButSetCompleteFunc(but, autocomplete_file, NULL);
+ uiButSetFlag(but, UI_BUT_NO_UTF8);
+
+ /* check if this overrides a file and if the operator option is used */
+ if(overwrite_alert) {
+ uiButSetFlag(but, UI_BUT_REDALERT);
+ }
+
+ /* clear func */
+ uiBlockSetFunc(block, NULL, NULL, NULL);
}
/* Filename number increment / decrement buttons. */
@@ -429,21 +441,25 @@ static void renamebutton_cb(bContext *C, void *arg1, char *oldname)
SpaceFile *sfile= (SpaceFile*)CTX_wm_space_data(C);
ARegion* ar = CTX_wm_region(C);
+#if 0
struct direntry *file = (struct direntry *)arg1;
+#endif
BLI_make_file_string(G.sce, orgname, sfile->params->dir, oldname);
- BLI_strncpy(filename, file->relname, sizeof(filename));
+ BLI_strncpy(filename, sfile->params->renameedit, sizeof(filename));
BLI_make_file_string(G.sce, newname, sfile->params->dir, filename);
if( strcmp(orgname, newname) != 0 ) {
if (!BLI_exists(newname)) {
BLI_rename(orgname, newname);
/* to make sure we show what is on disk */
+#if 0 /* this is cleared anyway, no need */
+ MEM_freeN(file->relname);
+ file->relname= BLI_strdup(sfile->params->renameedit);
+#endif
ED_fileselect_clear(C, sfile);
- } else {
- BLI_strncpy(file->relname, oldname, strlen(oldname)+1);
}
-
+
ED_region_tag_redraw(ar);
}
}
@@ -538,8 +554,9 @@ void file_draw_list(const bContext *C, ARegion *ar)
int but_width = (FILE_IMGDISPLAY == params->display) ? layout->tile_w : layout->column_widths[COLUMN_NAME];
uiBut *but = uiDefBut(block, TEX, 1, "", spos, sy-layout->tile_h-3,
- but_width, layout->textheight*2, file->relname, 1.0f, (float)FILE_MAX,0,0,"");
+ but_width, layout->textheight*2, sfile->params->renameedit, 1.0f, (float)sizeof(sfile->params->renameedit),0,0,"");
uiButSetRenameFunc(but, renamebutton_cb, file);
+ uiButSetFlag(but, UI_BUT_NO_UTF8); /* allow non utf8 names */
if ( 0 == uiButActiveOnly(C, block, but)) {
file->flags &= ~EDITING;
}
@@ -627,4 +644,3 @@ void file_draw_list(const bContext *C, ARegion *ar)
}
-
diff --git a/source/blender/editors/space_file/file_intern.h b/source/blender/editors/space_file/file_intern.h
index c77379b39a0..07a24454520 100644
--- a/source/blender/editors/space_file/file_intern.h
+++ b/source/blender/editors/space_file/file_intern.h
@@ -46,6 +46,9 @@ void file_calc_previews(const bContext *C, ARegion *ar);
void file_draw_previews(const bContext *C, ARegion *ar);
void file_draw_list(const bContext *C, ARegion *ar);
+void file_draw_check_cb(bContext *C, void *arg1, void *arg2);
+int file_draw_check_exists(SpaceFile *sfile);
+
/* file_ops.h */
struct wmOperatorType;
struct wmOperator;
@@ -84,6 +87,9 @@ int file_delete_exec(bContext *C, struct wmOperator *unused);
int file_hilight_set(struct SpaceFile *sfile, struct ARegion *ar, int mx, int my);
+void file_sfile_to_operator(struct wmOperator *op, struct SpaceFile *sfile, char *filepath);
+void file_operator_to_sfile(struct SpaceFile *sfile, struct wmOperator *op);
+
/* filesel.c */
float file_string_width(const char* str);
diff --git a/source/blender/editors/space_file/file_ops.c b/source/blender/editors/space_file/file_ops.c
index 2a50b505c57..e9764a2d36a 100644
--- a/source/blender/editors/space_file/file_ops.c
+++ b/source/blender/editors/space_file/file_ops.c
@@ -206,7 +206,11 @@ static FileSelect file_select(bContext* C, const rcti* rect, short selecting, sh
}
}
- }
+ }
+
+ /* update operator for name change event */
+ file_draw_check_cb(C, NULL, NULL);
+
return retval;
}
@@ -503,18 +507,11 @@ void FILE_OT_highlight(struct wmOperatorType *ot)
int file_cancel_exec(bContext *C, wmOperator *unused)
{
SpaceFile *sfile= CTX_wm_space_file(C);
-
- folderlist_free(sfile->folders_prev);
- folderlist_free(sfile->folders_next);
-
- WM_event_fileselect_event(C, sfile->op, EVT_FILESELECT_CANCEL);
- sfile->op = NULL;
+ wmOperator *op = sfile->op;
- if (sfile->files) {
- ED_fileselect_clear(C, sfile);
- MEM_freeN(sfile->files);
- sfile->files= NULL;
- }
+ sfile->op = NULL;
+
+ WM_event_fileselect_event(C, op, EVT_FILESELECT_CANCEL);
return OPERATOR_FINISHED;
}
@@ -541,6 +538,118 @@ void FILE_OT_cancel(struct wmOperatorType *ot)
ot->poll= file_operator_poll;
}
+
+void file_sfile_to_operator(wmOperator *op, SpaceFile *sfile, char *filepath)
+{
+ BLI_join_dirfile(filepath, sfile->params->dir, sfile->params->file);
+ if(RNA_struct_find_property(op->ptr, "relative_path")) {
+ if(RNA_boolean_get(op->ptr, "relative_path")) {
+ BLI_path_rel(filepath, G.sce);
+ }
+ }
+
+ if(RNA_struct_find_property(op->ptr, "filename")) {
+ RNA_string_set(op->ptr, "filename", sfile->params->file);
+ }
+ if(RNA_struct_find_property(op->ptr, "directory")) {
+ RNA_string_set(op->ptr, "directory", sfile->params->dir);
+ }
+ if(RNA_struct_find_property(op->ptr, "filepath")) {
+ RNA_string_set(op->ptr, "filepath", filepath);
+ }
+
+ /* some ops have multiple files to select */
+ {
+ PointerRNA itemptr;
+ int i, numfiles = filelist_numfiles(sfile->files);
+ struct direntry *file;
+ if(RNA_struct_find_property(op->ptr, "files")) {
+ for (i=0; i<numfiles; i++) {
+ file = filelist_file(sfile->files, i);
+ if(file->flags & ACTIVEFILE) {
+ if ((file->type & S_IFDIR)==0) {
+ RNA_collection_add(op->ptr, "files", &itemptr);
+ RNA_string_set(&itemptr, "name", file->relname);
+ }
+ }
+ }
+ }
+
+ if(RNA_struct_find_property(op->ptr, "dirs")) {
+ for (i=0; i<numfiles; i++) {
+ file = filelist_file(sfile->files, i);
+ if(file->flags & ACTIVEFILE) {
+ if ((file->type & S_IFDIR)) {
+ RNA_collection_add(op->ptr, "dirs", &itemptr);
+ RNA_string_set(&itemptr, "name", file->relname);
+ }
+ }
+ }
+ }
+ }
+}
+
+void file_operator_to_sfile(SpaceFile *sfile, wmOperator *op)
+{
+ int change= FALSE;
+ if(RNA_struct_find_property(op->ptr, "filename")) {
+ RNA_string_get(op->ptr, "filename", sfile->params->file);
+ change= TRUE;
+ }
+ if(RNA_struct_find_property(op->ptr, "directory")) {
+ RNA_string_get(op->ptr, "directory", sfile->params->dir);
+ change= TRUE;
+ }
+
+ /* If neither of the above are set, split the filepath back */
+ if(RNA_struct_find_property(op->ptr, "filepath")) {
+ if(change==FALSE) {
+ char filepath[FILE_MAX];
+ RNA_string_get(op->ptr, "filepath", filepath);
+ BLI_split_dirfile(filepath, sfile->params->dir, sfile->params->file);
+ }
+ }
+
+ /* XXX, files and dirs updates missing, not really so important though */
+}
+
+void file_draw_check_cb(bContext *C, void *dummy1, void *dummy2)
+{
+ SpaceFile *sfile= CTX_wm_space_file(C);
+ wmOperator *op= sfile->op;
+ if(op) { /* fail on reload */
+ if(op->type->check) {
+ char filepath[FILE_MAX];
+ file_sfile_to_operator(op, sfile, filepath);
+
+ /* redraw */
+ if(op->type->check(C, op)) {
+ file_operator_to_sfile(sfile, op);
+
+ /* redraw, else the changed settings wont get updated */
+ ED_area_tag_redraw(CTX_wm_area(C));
+ }
+ }
+ }
+}
+
+int file_draw_check_exists(SpaceFile *sfile)
+{
+ if(sfile->op) { /* fails on reload */
+ if(RNA_struct_find_property(sfile->op->ptr, "check_existing")) {
+ if(RNA_boolean_get(sfile->op->ptr, "check_existing")) {
+ char filepath[FILE_MAX];
+ BLI_join_dirfile(filepath, sfile->params->dir, sfile->params->file);
+ if(BLI_exists(filepath) && !BLI_is_dir(filepath)) {
+ return TRUE;
+ }
+ }
+ }
+ }
+
+ return FALSE;
+}
+
/* sends events now, so things get handled on windowqueue level */
int file_exec(bContext *C, wmOperator *exec_op)
{
@@ -568,64 +677,13 @@ int file_exec(bContext *C, wmOperator *exec_op)
sfile->op = NULL;
- BLI_join_dirfile(filepath, sfile->params->dir, sfile->params->file);
- if(RNA_struct_find_property(op->ptr, "relative_path")) {
- if(RNA_boolean_get(op->ptr, "relative_path")) {
- BLI_path_rel(filepath, G.sce);
- }
- }
-
- if(RNA_struct_find_property(op->ptr, "filename")) {
- RNA_string_set(op->ptr, "filename", sfile->params->file);
- }
- if(RNA_struct_find_property(op->ptr, "directory")) {
- RNA_string_set(op->ptr, "directory", sfile->params->dir);
- }
- if(RNA_struct_find_property(op->ptr, "filepath")) {
- RNA_string_set(op->ptr, "filepath", filepath);
- }
-
- /* some ops have multiple files to select */
- {
- PointerRNA itemptr;
- int i, numfiles = filelist_numfiles(sfile->files);
- struct direntry *file;
- if(RNA_struct_find_property(op->ptr, "files")) {
- for (i=0; i<numfiles; i++) {
- file = filelist_file(sfile->files, i);
- if(file->flags & ACTIVEFILE) {
- if ((file->type & S_IFDIR)==0) {
- RNA_collection_add(op->ptr, "files", &itemptr);
- RNA_string_set(&itemptr, "name", file->relname);
- }
- }
- }
- }
-
- if(RNA_struct_find_property(op->ptr, "dirs")) {
- for (i=0; i<numfiles; i++) {
- file = filelist_file(sfile->files, i);
- if(file->flags & ACTIVEFILE) {
- if ((file->type & S_IFDIR)) {
- RNA_collection_add(op->ptr, "dirs", &itemptr);
- RNA_string_set(&itemptr, "name", file->relname);
- }
- }
- }
- }
- }
-
- folderlist_free(sfile->folders_prev);
- folderlist_free(sfile->folders_next);
+ file_sfile_to_operator(op, sfile, filepath);
fsmenu_insert_entry(fsmenu_get(), FS_CATEGORY_RECENT, sfile->params->dir,0, 1);
BLI_make_file_string(G.sce, filepath, BLI_get_folder_create(BLENDER_USER_CONFIG, NULL), BLENDER_BOOKMARK_FILE);
fsmenu_write_file(fsmenu_get(), filepath);
WM_event_fileselect_event(C, op, EVT_FILESELECT_EXEC);
- ED_fileselect_clear(C, sfile);
- MEM_freeN(sfile->files);
- sfile->files= NULL;
}
return OPERATOR_FINISHED;
@@ -1077,6 +1135,7 @@ int file_filenum_exec(bContext *C, wmOperator *op)
if(sfile->params && (inc != 0)) {
BLI_newname(sfile->params->file, inc);
ED_area_tag_redraw(sa);
+ file_draw_check_cb(C, NULL, NULL);
// WM_event_add_notifier(C, NC_WINDOW, NULL);
}
@@ -1110,6 +1169,8 @@ int file_rename_exec(bContext *C, wmOperator *op)
if ( (0<=idx) && (idx<numfiles) ) {
struct direntry *file= filelist_file(sfile->files, idx);
file->flags |= EDITING;
+ BLI_strncpy(sfile->params->renameedit, file->relname, FILE_MAXFILE);
+ sfile->params->renamefile[0]= '\0';
}
ED_area_tag_redraw(sa);
}
diff --git a/source/blender/editors/space_file/file_panels.c b/source/blender/editors/space_file/file_panels.c
index 4a505bc022f..33d740e18a6 100644
--- a/source/blender/editors/space_file/file_panels.c
+++ b/source/blender/editors/space_file/file_panels.c
@@ -170,7 +170,9 @@ static void file_panel_operator(const bContext *C, Panel *pa)
SpaceFile *sfile= CTX_wm_space_file(C);
wmOperator *op= sfile->op;
int empty= 1, flag;
-
+
+ uiBlockSetFunc(uiLayoutGetBlock(pa->layout), file_draw_check_cb, NULL, NULL);
+
if(op->type->ui) {
op->layout= pa->layout;
op->type->ui((bContext*)C, op);
@@ -197,6 +199,8 @@ static void file_panel_operator(const bContext *C, Panel *pa)
if(empty)
uiItemL(pa->layout, "No properties.", 0);
}
+
+ uiBlockSetFunc(uiLayoutGetBlock(pa->layout), NULL, NULL, NULL);
}
void file_panels_register(ARegionType *art)
diff --git a/source/blender/editors/space_file/filelist.c b/source/blender/editors/space_file/filelist.c
index 310e3d49bd9..eba0df9f963 100644
--- a/source/blender/editors/space_file/filelist.c
+++ b/source/blender/editors/space_file/filelist.c
@@ -52,25 +52,14 @@
#endif
#include "BKE_context.h"
-#include "BKE_utildefines.h"
#include "BKE_global.h"
#include "BKE_library.h"
-#include "BKE_global.h"
#include "BKE_main.h"
#include "BKE_report.h"
#include "BLO_readfile.h"
+#include "BKE_idcode.h"
#include "DNA_space_types.h"
-#include "DNA_ipo_types.h"
-#include "DNA_ID.h"
-#include "DNA_object_types.h"
-#include "DNA_listBase.h"
-#include "DNA_lamp_types.h"
-#include "DNA_material_types.h"
-#include "DNA_texture_types.h"
-#include "DNA_world_types.h"
-#include "DNA_scene_types.h"
-#include "DNA_userdef_types.h"
#include "ED_datafiles.h"
@@ -119,6 +108,7 @@ typedef struct FileList
short prv_h;
short hide_dot;
unsigned int filter;
+ char filter_glob[64];
short changed;
struct BlendHandle *libfiledata;
@@ -558,6 +548,7 @@ void filelist_free(struct FileList* filelist)
free(filelist->filelist);
filelist->filelist = 0;
filelist->filter = 0;
+ filelist->filter_glob[0] = '\0';
filelist->numfiltered =0;
filelist->hide_dot =0;
}
@@ -724,6 +715,11 @@ void filelist_setfilter(struct FileList* filelist, unsigned int filter)
filelist->filter = filter;
}
+void filelist_setfilter_types(struct FileList* filelist, const char *filter_glob)
+{
+ BLI_strncpy(filelist->filter_glob, filter_glob, sizeof(filelist->filter_glob));
+}
+
static void filelist_read_dir(struct FileList* filelist)
{
char wdir[FILE_MAX];
@@ -835,6 +831,9 @@ void filelist_setfiletypes(struct FileList* filelist, short has_quicktime)
file->flags |= MOVIEFILE;
} else if(BLI_testextensie_array(file->relname, imb_ext_audio)) {
file->flags |= SOUNDFILE;
+ } else if(filelist->filter_glob
+ && BLI_testextensie_glob(file->relname, filelist->filter_glob)) {
+ file->flags |= OPERATORFILE;
}
}
}
@@ -893,7 +892,7 @@ static int groupname_to_code(char *group)
if (lslash)
lslash[0]= '\0';
- return BLO_idcode_from_name(buf);
+ return BKE_idcode_from_name(buf);
}
void filelist_from_library(struct FileList* filelist)
diff --git a/source/blender/editors/space_file/filelist.h b/source/blender/editors/space_file/filelist.h
index b2a86b9c764..9dd7ab26625 100644
--- a/source/blender/editors/space_file/filelist.h
+++ b/source/blender/editors/space_file/filelist.h
@@ -58,6 +58,7 @@ void filelist_setdir(struct FileList* filelist, const char *dir);
struct direntry * filelist_file(struct FileList* filelist, int index);
void filelist_hidedot(struct FileList* filelist, short hide);
void filelist_setfilter(struct FileList* filelist, unsigned int filter);
+void filelist_setfilter_types(struct FileList* filelist, const char *filter_glob);
void filelist_filter(struct FileList* filelist);
void filelist_swapselect(struct FileList* filelist);
void filelist_imgsize(struct FileList* filelist, short w, short h);
diff --git a/source/blender/editors/space_file/filesel.c b/source/blender/editors/space_file/filesel.c
index 086d4f9cce2..7192870bcc8 100644
--- a/source/blender/editors/space_file/filesel.c
+++ b/source/blender/editors/space_file/filesel.c
@@ -62,10 +62,7 @@
#include "BLI_storage_types.h"
#include "BLI_dynstr.h"
-#include "BLO_readfile.h"
-
#include "BKE_context.h"
-#include "BKE_screen.h"
#include "BKE_global.h"
#include "BLF_api.h"
@@ -76,8 +73,6 @@
#include "WM_api.h"
#include "WM_types.h"
-#include "BIF_gl.h"
-#include "BIF_glutil.h"
#include "RNA_access.h"
@@ -110,6 +105,7 @@ short ED_fileselect_set_params(SpaceFile *sfile)
sfile->params= MEM_callocN(sizeof(FileSelectParams), "fileselparams");
/* set path to most recently opened .blend */
BLI_split_dirfile(G.sce, sfile->params->dir, sfile->params->file);
+ sfile->params->filter_glob[0] = '\0';
}
params = sfile->params;
@@ -173,6 +169,14 @@ short ED_fileselect_set_params(SpaceFile *sfile)
params->filter |= RNA_boolean_get(op->ptr, "filter_btx") ? BTXFILE : 0;
if(RNA_struct_find_property(op->ptr, "filter_collada"))
params->filter |= RNA_boolean_get(op->ptr, "filter_collada") ? COLLADAFILE : 0;
+ if (RNA_struct_find_property(op->ptr, "filter_glob")) {
+ RNA_string_get(op->ptr, "filter_glob", params->filter_glob);
+ params->filter |= (OPERATORFILE|FOLDERFILE);
+ }
+ else {
+ params->filter_glob[0] = '\0';
+ }
+
if (params->filter != 0) {
if (U.uiflag & USER_FILTERFILEEXTS) {
params->flag |= FILE_FILTER;
@@ -205,8 +209,16 @@ short ED_fileselect_set_params(SpaceFile *sfile)
params->flag |= FILE_HIDE_DOT;
params->display = FILE_SHORTDISPLAY;
params->filter = 0;
+ params->filter_glob[0] = '\0';
params->sort = FILE_SORT_ALPHA;
}
+
+
+ /* initialize the list with previous folders */
+ if (!sfile->folders_prev)
+ sfile->folders_prev = folderlist_new();
+ folderlist_pushdir(sfile->folders_prev, sfile->params->dir);
+
return 1;
}
@@ -529,5 +541,18 @@ void ED_fileselect_clear(struct bContext *C, struct SpaceFile *sfile)
void ED_fileselect_exit(struct bContext *C, struct SpaceFile *sfile)
{
- thumbnails_stop(sfile->files, C);
+ if(!sfile) return;
+ if(sfile->op)
+ WM_event_fileselect_event(C, sfile->op, EVT_FILESELECT_EXTERNAL_CANCEL);
+ sfile->op = NULL;
+
+ folderlist_free(sfile->folders_prev);
+ folderlist_free(sfile->folders_next);
+
+ if (sfile->files) {
+ ED_fileselect_clear(C, sfile);
+ MEM_freeN(sfile->files);
+ sfile->files= NULL;
+ }
+
}
diff --git a/source/blender/editors/space_file/fsmenu.c b/source/blender/editors/space_file/fsmenu.c
index 6603bba5a89..a043fc8cfd1 100644
--- a/source/blender/editors/space_file/fsmenu.c
+++ b/source/blender/editors/space_file/fsmenu.c
@@ -55,7 +55,6 @@
#define ID ID_
#include <CoreServices/CoreServices.h>
-#include "BKE_utildefines.h"
#endif
#ifdef __linux__
@@ -281,13 +280,10 @@ void fsmenu_read_bookmarks(struct FSMenu* fsmenu, const char *filename)
void fsmenu_read_system(struct FSMenu* fsmenu)
{
char line[256];
- FILE *fp;
-
#ifdef WIN32
/* Add the drive names to the listing */
{
__int64 tmp;
- char folder[256];
char tmps[4];
int i;
@@ -305,10 +301,10 @@ void fsmenu_read_system(struct FSMenu* fsmenu)
}
/* Adding Desktop and My Documents */
- SHGetSpecialFolderPath(0, folder, CSIDL_PERSONAL, 0);
- fsmenu_insert_entry(fsmenu,FS_CATEGORY_BOOKMARKS, folder, 1, 0);
- SHGetSpecialFolderPath(0, folder, CSIDL_DESKTOPDIRECTORY, 0);
- fsmenu_insert_entry(fsmenu, FS_CATEGORY_BOOKMARKS, folder, 1, 0);
+ 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__
@@ -475,6 +471,7 @@ void fsmenu_read_system(struct FSMenu* fsmenu)
/* loop over mount points */
struct mntent *mnt;
int len;
+ FILE *fp;
fp = setmntent (MOUNTED, "r");
if (fp == NULL) {
diff --git a/source/blender/editors/space_file/space_file.c b/source/blender/editors/space_file/space_file.c
index 34571278f13..0cd721964bd 100644
--- a/source/blender/editors/space_file/space_file.c
+++ b/source/blender/editors/space_file/space_file.c
@@ -43,7 +43,6 @@
#include "BLI_rand.h"
#include "BLI_storage_types.h"
-#include "BKE_colortools.h"
#include "BKE_context.h"
#include "BKE_screen.h"
@@ -193,6 +192,7 @@ static void file_refresh(const bContext *C, ScrArea *sa)
}
filelist_hidedot(sfile->files, params->flag & FILE_HIDE_DOT);
filelist_setfilter(sfile->files, params->flag & FILE_FILTER ? params->filter : 0);
+ filelist_setfilter_types(sfile->files, params->filter_glob);
if (filelist_empty(sfile->files))
{
thumbnails_stop(sfile->files, C);
@@ -233,6 +233,7 @@ static void file_refresh(const bContext *C, ScrArea *sa)
file->flags |= EDITING;
}
}
+ BLI_strncpy(sfile->params->renameedit, sfile->params->renamefile, sizeof(sfile->params->renameedit));
params->renamefile[0] = '\0';
}
if (sfile->layout) sfile->layout->dirty= 1;
diff --git a/source/blender/editors/space_file/writeimage.c b/source/blender/editors/space_file/writeimage.c
index 131e9fa0e14..b69bfdc0231 100644
--- a/source/blender/editors/space_file/writeimage.c
+++ b/source/blender/editors/space_file/writeimage.c
@@ -29,7 +29,6 @@
#include <string.h>
-#include "MEM_guardedalloc.h"
#include "IMB_imbuf.h"
#include "IMB_imbuf_types.h"
@@ -43,7 +42,6 @@
#include "BKE_context.h"
#include "BKE_global.h"
#include "BKE_image.h"
-#include "BKE_utildefines.h"
#include "RE_pipeline.h"
diff --git a/source/blender/editors/space_graph/CMakeLists.txt b/source/blender/editors/space_graph/CMakeLists.txt
index 6ad95d920c6..33ddbcea019 100644
--- a/source/blender/editors/space_graph/CMakeLists.txt
+++ b/source/blender/editors/space_graph/CMakeLists.txt
@@ -22,13 +22,13 @@
FILE(GLOB SRC *.c)
SET(INC
+ ../include
../../blenkernel
../../blenlib
- ../include
- ../../../../intern/guardedalloc
../../makesdna
../../makesrna
../../windowmanager
+ ../../../../intern/guardedalloc
../../../../intern/audaspace/intern
)
diff --git a/source/blender/editors/space_graph/Makefile b/source/blender/editors/space_graph/Makefile
index 65cdf1a3ffb..1ac744af239 100644
--- a/source/blender/editors/space_graph/Makefile
+++ b/source/blender/editors/space_graph/Makefile
@@ -17,7 +17,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2007 Blender Foundation
# All rights reserved.
@@ -37,6 +37,8 @@ include nan_compile.mk
CFLAGS += $(LEVEL_1_C_WARNINGS)
+CPPFLAGS += -I$(NAN_PYTHON)/include/python$(NAN_PYTHON_VERSION)
+
CPPFLAGS += -I$(NAN_GLEW)/include
CPPFLAGS += -I$(OPENGL_HEADERS)
CPPFLAGS += -I$(NAN_AUDASPACE)/include
diff --git a/source/blender/editors/space_graph/graph_buttons.c b/source/blender/editors/space_graph/graph_buttons.c
index a6c57126cfe..f4567255b91 100644
--- a/source/blender/editors/space_graph/graph_buttons.c
+++ b/source/blender/editors/space_graph/graph_buttons.c
@@ -42,21 +42,12 @@
#include "BLI_editVert.h"
#include "BLI_rand.h"
-#include "BKE_action.h"
-#include "BKE_animsys.h"
#include "BKE_context.h"
-#include "BKE_curve.h"
-#include "BKE_customdata.h"
#include "BKE_depsgraph.h"
#include "BKE_fcurve.h"
-#include "BKE_library.h"
#include "BKE_main.h"
-#include "BKE_object.h"
-#include "BKE_scene.h"
#include "BKE_screen.h"
-#include "BKE_utildefines.h"
-#include "BIF_gl.h"
#include "WM_api.h"
#include "WM_types.h"
@@ -159,7 +150,7 @@ static void graph_panel_view(const bContext *C, Panel *pa)
uiItemR(row, &sceneptr, "frame_current", 0, "Cursor X", 0);
uiItemEnumO(row, "GRAPH_OT_snap", "To Keys", 0, "type", GRAPHKEYS_SNAP_CFRA);
row= uiLayoutSplit(subcol, 0.7, 1);
- uiItemR(row, &spaceptr, "cursor_value", 0, "Cursor Y", 0);
+ uiItemR(row, &spaceptr, "cursor_position_y", 0, "Cursor Y", 0);
uiItemEnumO(row, "GRAPH_OT_snap", "To Keys", 0, "type", GRAPHKEYS_SNAP_VALUE);
}
@@ -193,7 +184,7 @@ static void graph_panel_properties(const bContext *C, Panel *pa)
/* RNA-Path Editing - only really should be enabled when things aren't working */
col= uiLayoutColumn(layout, 1);
- uiLayoutSetEnabled(col, (fcu->flag & FCURVE_DISABLED));
+ uiLayoutSetEnabled(col, (fcu->flag & FCURVE_DISABLED)!=0);
uiItemR(col, &fcu_ptr, "data_path", 0, "", ICON_RNA);
uiItemR(col, &fcu_ptr, "array_index", 0, NULL, 0);
@@ -281,11 +272,11 @@ static void graph_panel_key_properties(const bContext *C, Panel *pa)
/* previous handle - only if previous was Bezier interpolation */
if ((prevbezt) && (prevbezt->ipo == BEZT_IPO_BEZ))
- uiItemR(col, &bezt_ptr, "handle1", 0, NULL, 0);
+ uiItemR(col, &bezt_ptr, "handle_left", 0, NULL, 0);
/* next handle - only if current is Bezier interpolation */
if (bezt->ipo == BEZT_IPO_BEZ)
- uiItemR(col, &bezt_ptr, "handle2", 0, NULL, 0);
+ uiItemR(col, &bezt_ptr, "handle_right", 0, NULL, 0);
}
else
uiItemL(layout, "No active keyframe on F-Curve", 0);
@@ -466,7 +457,7 @@ static void graph_panel_driverVar__locDiff(const bContext *C, uiLayout *layout,
uiItemPointerR(col, &dtar_ptr, "bone_target", &tar_ptr, "bones", "", ICON_BONE_DATA);
}
- uiItemR(col, &dtar_ptr, "use_local_space_transforms", 0, NULL, 0);
+ uiItemR(col, &dtar_ptr, "use_local_space_transform", 0, NULL, 0);
col= uiLayoutColumn(layout, 1);
uiTemplateAnyID(col, (bContext *)C, &dtar2_ptr, "id", "id_type", "Ob/Bone 2:");
@@ -478,7 +469,7 @@ static void graph_panel_driverVar__locDiff(const bContext *C, uiLayout *layout,
uiItemPointerR(col, &dtar2_ptr, "bone_target", &tar_ptr, "bones", "", ICON_BONE_DATA);
}
- uiItemR(col, &dtar2_ptr, "use_local_space_transforms", 0, NULL, 0);
+ uiItemR(col, &dtar2_ptr, "use_local_space_transform", 0, NULL, 0);
}
/* settings for 'transform channel' driver variable type */
@@ -505,7 +496,7 @@ static void graph_panel_driverVar__transChan(const bContext *C, uiLayout *layout
row= uiLayoutRow(layout, 1);
uiItemR(row, &dtar_ptr, "transform_type", 0, "", 0);
- uiItemR(row, &dtar_ptr, "use_local_space_transforms", 0, NULL, 0);
+ uiItemR(row, &dtar_ptr, "use_local_space_transform", 0, NULL, 0);
}
/* driver settings for active F-Curve (only for 'Drivers' mode) */
diff --git a/source/blender/editors/space_graph/graph_draw.c b/source/blender/editors/space_graph/graph_draw.c
index 543bd8b9964..f780a6c31ee 100644
--- a/source/blender/editors/space_graph/graph_draw.c
+++ b/source/blender/editors/space_graph/graph_draw.c
@@ -35,7 +35,6 @@
#include <io.h>
#endif
-#include "MEM_guardedalloc.h"
#include "BLI_blenlib.h"
#include "BLI_math.h"
@@ -46,15 +45,9 @@
#include "DNA_space_types.h"
#include "DNA_windowmanager_types.h"
-#include "BKE_animsys.h"
#include "BKE_context.h"
#include "BKE_curve.h"
-#include "BKE_depsgraph.h"
#include "BKE_fcurve.h"
-#include "BKE_global.h"
-#include "BKE_key.h"
-#include "BKE_object.h"
-#include "BKE_screen.h"
#include "BKE_utildefines.h"
#include "BIF_gl.h"
diff --git a/source/blender/editors/space_graph/graph_edit.c b/source/blender/editors/space_graph/graph_edit.c
index 6249edc1090..5c692ba1112 100644
--- a/source/blender/editors/space_graph/graph_edit.c
+++ b/source/blender/editors/space_graph/graph_edit.c
@@ -47,16 +47,10 @@
#include "RNA_define.h"
#include "RNA_enum_types.h"
-#include "BKE_action.h"
-#include "BKE_depsgraph.h"
#include "BKE_fcurve.h"
-#include "BKE_key.h"
-#include "BKE_material.h"
#include "BKE_nla.h"
-#include "BKE_object.h"
#include "BKE_context.h"
#include "BKE_report.h"
-#include "BKE_utildefines.h"
#include "UI_interface.h"
#include "UI_view2d.h"
@@ -1049,7 +1043,7 @@ static int graphkeys_sound_bake_exec(bContext *C, wmOperator *op)
RNA_float_get(op->ptr, "release"),
RNA_float_get(op->ptr, "threshold"),
RNA_boolean_get(op->ptr, "accumulate"),
- RNA_boolean_get(op->ptr, "additive"),
+ RNA_boolean_get(op->ptr, "use_additive"),
RNA_boolean_get(op->ptr, "square"),
RNA_float_get(op->ptr, "sthreshold"),
FPS, &sbi.length);
@@ -1124,7 +1118,7 @@ void GRAPH_OT_sound_bake (wmOperatorType *ot)
RNA_def_float(ot->srna, "release", 0.2, 0.0, 5.0, "Release time", "", 0.01, 0.2);
RNA_def_float(ot->srna, "threshold", 0.0, 0.0, 1.0, "Threshold", "", 0.01, 0.1);
RNA_def_boolean(ot->srna, "accumulate", 0, "Accumulate", "");
- RNA_def_boolean(ot->srna, "additive", 0, "Additive", "");
+ RNA_def_boolean(ot->srna, "use_additive", 0, "Additive", "");
RNA_def_boolean(ot->srna, "square", 0, "Square", "");
RNA_def_float(ot->srna, "sthreshold", 0.1, 0.0, 1.0, "Square Threshold", "", 0.01, 0.1);
}
diff --git a/source/blender/editors/space_graph/graph_ops.c b/source/blender/editors/space_graph/graph_ops.c
index 5648eff17f0..0069e6e0675 100644
--- a/source/blender/editors/space_graph/graph_ops.c
+++ b/source/blender/editors/space_graph/graph_ops.c
@@ -29,7 +29,6 @@
#include <stdlib.h>
#include <math.h>
-#include "MEM_guardedalloc.h"
#include "DNA_scene_types.h"
@@ -37,7 +36,6 @@
#include "BKE_context.h"
#include "BKE_sound.h"
-#include "BKE_utildefines.h"
#include "UI_view2d.h"
diff --git a/source/blender/editors/space_graph/graph_select.c b/source/blender/editors/space_graph/graph_select.c
index 6a9d8801e28..cdc8166f2d6 100644
--- a/source/blender/editors/space_graph/graph_select.c
+++ b/source/blender/editors/space_graph/graph_select.c
@@ -43,15 +43,9 @@
#include "RNA_access.h"
#include "RNA_define.h"
-#include "BKE_action.h"
-#include "BKE_depsgraph.h"
#include "BKE_fcurve.h"
-#include "BKE_key.h"
-#include "BKE_material.h"
#include "BKE_nla.h"
-#include "BKE_object.h"
#include "BKE_context.h"
-#include "BKE_utildefines.h"
#include "UI_view2d.h"
diff --git a/source/blender/editors/space_graph/graph_utils.c b/source/blender/editors/space_graph/graph_utils.c
index ad96370e4fa..927149a268d 100644
--- a/source/blender/editors/space_graph/graph_utils.c
+++ b/source/blender/editors/space_graph/graph_utils.c
@@ -42,20 +42,9 @@
#include "BLI_editVert.h"
#include "BLI_rand.h"
-#include "BKE_animsys.h"
-#include "BKE_action.h"
#include "BKE_context.h"
-#include "BKE_curve.h"
-#include "BKE_customdata.h"
-#include "BKE_depsgraph.h"
#include "BKE_fcurve.h"
-#include "BKE_object.h"
-#include "BKE_global.h"
-#include "BKE_scene.h"
-#include "BKE_screen.h"
-#include "BKE_utildefines.h"
-#include "BIF_gl.h"
#include "WM_api.h"
diff --git a/source/blender/editors/space_graph/space_graph.c b/source/blender/editors/space_graph/space_graph.c
index 1e006ca38ec..ca372d74da6 100644
--- a/source/blender/editors/space_graph/space_graph.c
+++ b/source/blender/editors/space_graph/space_graph.c
@@ -43,7 +43,6 @@
#include "BKE_main.h"
#include "BKE_fcurve.h"
#include "BKE_screen.h"
-#include "BKE_utildefines.h"
#include "ED_screen.h"
#include "ED_anim_api.h"
diff --git a/source/blender/editors/space_image/CMakeLists.txt b/source/blender/editors/space_image/CMakeLists.txt
index f644338d39d..d47f5a9820e 100644
--- a/source/blender/editors/space_image/CMakeLists.txt
+++ b/source/blender/editors/space_image/CMakeLists.txt
@@ -22,15 +22,15 @@
FILE(GLOB SRC *.c)
SET(INC
+ ../include
../../blenkernel
../../blenlib
../../imbuf
- ../include
- ../../../../intern/guardedalloc
../../makesdna
../../makesrna
- ../../render/extern/include
../../windowmanager
+ ../../render/extern/include
+ ../../../../intern/guardedalloc
)
IF(WITH_IMAGE_OPENEXR)
@@ -47,7 +47,7 @@ IF(WITH_LCMS)
ENDIF(WITH_LCMS)
IF(WIN32)
- SET(INC ${INC} ${PTHREADS_INC})
+ LIST(APPEND INC ${PTHREADS_INC})
ENDIF(WIN32)
BLENDERLIB(bf_editor_space_image "${SRC}" "${INC}")
diff --git a/source/blender/editors/space_image/Makefile b/source/blender/editors/space_image/Makefile
index 1838b9ce73d..773a6920961 100644
--- a/source/blender/editors/space_image/Makefile
+++ b/source/blender/editors/space_image/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2007 Blender Foundation
# All rights reserved.
diff --git a/source/blender/editors/space_image/SConscript b/source/blender/editors/space_image/SConscript
index 4e1918bc327..c7c31352185 100644
--- a/source/blender/editors/space_image/SConscript
+++ b/source/blender/editors/space_image/SConscript
@@ -10,12 +10,12 @@ incs += ' ../../render/extern/include ../../makesrna'
defs = []
if env['WITH_BF_LCMS']:
- defs.append('WITH_LCMS')
- incs += ' ' + env['BF_LCMS_INC']
+ defs.append('WITH_LCMS')
+ incs += ' ' + env['BF_LCMS_INC']
if env['WITH_BF_OPENEXR']:
- defs.append('WITH_OPENEXR')
+ defs.append('WITH_OPENEXR')
if env['WITH_BF_TIFF']:
- defs.append('WITH_TIFF')
+ defs.append('WITH_TIFF')
if env['OURPLATFORM'] in ('win32-vc', 'win32-mingw', 'linuxcross', 'win64-vc'):
incs += ' ' + env['BF_PTHREADS_INC']
diff --git a/source/blender/editors/space_image/image_buttons.c b/source/blender/editors/space_image/image_buttons.c
index 357aa9dacdf..9871b75fa42 100644
--- a/source/blender/editors/space_image/image_buttons.c
+++ b/source/blender/editors/space_image/image_buttons.c
@@ -45,15 +45,9 @@
#include "BKE_context.h"
#include "BKE_customdata.h"
#include "BKE_image.h"
-#include "BKE_global.h"
-#include "BKE_library.h"
-#include "BKE_main.h"
#include "BKE_mesh.h"
#include "BKE_node.h"
-#include "BKE_packedFile.h"
-#include "BKE_paint.h"
#include "BKE_screen.h"
-#include "BKE_utildefines.h"
#include "RE_pipeline.h"
@@ -65,8 +59,6 @@
#include "ED_screen.h"
#include "ED_uvedit.h"
-#include "BIF_gl.h"
-#include "BIF_glutil.h"
#include "RNA_access.h"
@@ -774,7 +766,7 @@ void uiTemplateImage(uiLayout *layout, bContext *C, PointerRNA *ptr, char *propn
prop= RNA_struct_find_property(ptr, propname);
if(!prop) {
- printf("uiTemplateImage: property not found: %s\n", propname);
+ printf("uiTemplateImage: property not found: %s.%s\n", RNA_struct_identifier(ptr->type), propname);
return;
}
@@ -886,13 +878,13 @@ void uiTemplateImage(uiLayout *layout, bContext *C, PointerRNA *ptr, char *propn
split= uiLayoutSplit(layout, 0, 0);
col= uiLayoutColumn(split, 0);
- uiItemR(col, &imaptr, "fields", 0, NULL, 0);
+ uiItemR(col, &imaptr, "use_fields", 0, NULL, 0);
row= uiLayoutRow(col, 0);
uiItemR(row, &imaptr, "field_order", UI_ITEM_R_EXPAND, NULL, 0);
- uiLayoutSetActive(row, RNA_boolean_get(&imaptr, "fields"));
+ uiLayoutSetActive(row, RNA_boolean_get(&imaptr, "use_fields"));
col= uiLayoutColumn(split, 0);
- uiItemR(col, &imaptr, "premultiply", 0, NULL, 0);
+ uiItemR(col, &imaptr, "use_premultiply", 0, NULL, 0);
}
}
@@ -905,7 +897,7 @@ void uiTemplateImage(uiLayout *layout, bContext *C, PointerRNA *ptr, char *propn
sprintf(str, "(%d) Frames", iuser->framenr);
row= uiLayoutRow(col, 1);
- uiItemR(col, userptr, "frames", 0, str, 0);
+ uiItemR(col, userptr, "frame_duration", 0, str, 0);
if(ima->anim) {
block= uiLayoutGetBlock(row);
but= uiDefBut(block, BUT, 0, "Match Movie Length", 0, 0, UI_UNIT_X*2, UI_UNIT_Y, 0, 0, 0, 0, 0, "Set the number of frames to match the movie or sequence.");
@@ -913,12 +905,12 @@ void uiTemplateImage(uiLayout *layout, bContext *C, PointerRNA *ptr, char *propn
}
uiItemR(col, userptr, "frame_start", 0, "Start", 0);
- uiItemR(col, userptr, "offset", 0, NULL, 0);
+ uiItemR(col, userptr, "frame_offset", 0, NULL, 0);
col= uiLayoutColumn(split, 0);
uiItemR(col, userptr, "fields_per_frame", 0, "Fields", 0);
- uiItemR(col, userptr, "auto_refresh", 0, NULL, 0);
- uiItemR(col, userptr, "cyclic", 0, NULL, 0);
+ uiItemR(col, userptr, "use_auto_refresh", 0, NULL, 0);
+ uiItemR(col, userptr, "use_cyclic", 0, NULL, 0);
}
else if(ima->source==IMA_SRC_GENERATED) {
split= uiLayoutSplit(layout, 0, 0);
diff --git a/source/blender/editors/space_image/image_draw.c b/source/blender/editors/space_image/image_draw.c
index e37e8d3d2be..6a77d4da067 100644
--- a/source/blender/editors/space_image/image_draw.c
+++ b/source/blender/editors/space_image/image_draw.c
@@ -45,11 +45,9 @@
#include "IMB_imbuf_types.h"
#include "BKE_context.h"
-#include "BKE_colortools.h"
#include "BKE_global.h"
#include "BKE_image.h"
#include "BKE_paint.h"
-#include "BKE_utildefines.h"
#include "BIF_gl.h"
#include "BIF_glutil.h"
diff --git a/source/blender/editors/space_image/image_header.c b/source/blender/editors/space_image/image_header.c
index 25208b61c28..7ecb2565e72 100644
--- a/source/blender/editors/space_image/image_header.c
+++ b/source/blender/editors/space_image/image_header.c
@@ -33,25 +33,17 @@
#include "DNA_space_types.h"
#include "DNA_windowmanager_types.h"
-#include "MEM_guardedalloc.h"
#include "BLI_blenlib.h"
#include "BLI_editVert.h"
#include "BKE_context.h"
-#include "BKE_customdata.h"
-#include "BKE_image.h"
-#include "BKE_mesh.h"
-#include "BKE_screen.h"
-#include "BKE_utildefines.h"
#include "ED_image.h"
#include "WM_types.h"
-#include "BIF_gl.h"
-#include "BIF_glutil.h"
#include "UI_interface.h"
diff --git a/source/blender/editors/space_image/image_ops.c b/source/blender/editors/space_image/image_ops.c
index 4246516b5bc..5a7e2e6fa1b 100644
--- a/source/blender/editors/space_image/image_ops.c
+++ b/source/blender/editors/space_image/image_ops.c
@@ -41,7 +41,6 @@
#include "BKE_context.h"
#include "BKE_image.h"
#include "BKE_global.h"
-#include "BKE_image.h"
#include "BKE_library.h"
#include "BKE_main.h"
#include "BKE_node.h"
@@ -740,7 +739,22 @@ static int open_exec(bContext *C, wmOperator *op)
static int open_invoke(bContext *C, wmOperator *op, wmEvent *event)
{
SpaceImage *sima= CTX_wm_space_image(C);
- char *path= (sima && sima->image)? sima->image->name: U.textudir;
+ char *path=U.textudir;
+ Image *ima= NULL;
+
+ if(sima) {
+ ima= sima->image;
+ }
+
+ if (ima==NULL) {
+ Tex *tex= CTX_data_pointer_get_type(C, "texture", &RNA_Texture).data;
+ if(tex && tex->type==TEX_IMAGE)
+ ima= tex->ima;
+ }
+
+ if(ima)
+ path= ima->name;
+
if(!RNA_property_is_set(op->ptr, "relative_path"))
RNA_boolean_set(op->ptr, "relative_path", U.flag & USER_RELPATHS);
@@ -832,14 +846,14 @@ void IMAGE_OT_replace(wmOperatorType *ot)
/* assumes name is FILE_MAX */
/* ima->name and ibuf->name should end up the same */
-static void save_image_doit(bContext *C, SpaceImage *sima, Scene *scene, wmOperator *op, char *path)
+static void save_image_doit(bContext *C, SpaceImage *sima, Scene *scene, wmOperator *op, char *path, int do_newpath)
{
Image *ima= ED_space_image(sima);
void *lock;
ImBuf *ibuf= ED_space_image_acquire_buffer(sima, &lock);
if (ibuf) {
- int relative= RNA_boolean_get(op->ptr, "relative_path");
+ int relative= (RNA_struct_find_property(op->ptr, "relative_path") && RNA_boolean_get(op->ptr, "relative_path"));
int save_copy= (RNA_struct_find_property(op->ptr, "copy") && RNA_boolean_get(op->ptr, "copy"));
BLI_path_abs(path, G.sce);
@@ -865,8 +879,10 @@ static void save_image_doit(bContext *C, SpaceImage *sima, Scene *scene, wmOpera
BLI_path_rel(path, G.sce); /* only after saving */
if(!save_copy) {
- BLI_strncpy(ima->name, path, sizeof(ima->name));
- BLI_strncpy(ibuf->name, path, sizeof(ibuf->name));
+ if(do_newpath) {
+ BLI_strncpy(ima->name, path, sizeof(ima->name));
+ BLI_strncpy(ibuf->name, path, sizeof(ibuf->name));
+ }
/* should be function? nevertheless, saving only happens here */
for(ibuf= ima->ibufs.first; ibuf; ibuf= ibuf->next)
@@ -883,9 +899,10 @@ static void save_image_doit(bContext *C, SpaceImage *sima, Scene *scene, wmOpera
BLI_path_rel(path, G.sce); /* only after saving */
if(!save_copy) {
-
- BLI_strncpy(ima->name, path, sizeof(ima->name));
- BLI_strncpy(ibuf->name, path, sizeof(ibuf->name));
+ if(do_newpath) {
+ BLI_strncpy(ima->name, path, sizeof(ima->name));
+ BLI_strncpy(ibuf->name, path, sizeof(ibuf->name));
+ }
ibuf->userflags &= ~IB_BITMAPDIRTY;
@@ -938,11 +955,23 @@ static int save_as_exec(bContext *C, wmOperator *op)
sima->imtypenr= RNA_enum_get(op->ptr, "file_type");
RNA_string_get(op->ptr, "filepath", str);
- save_image_doit(C, sima, scene, op, str);
+ save_image_doit(C, sima, scene, op, str, TRUE);
return OPERATOR_FINISHED;
}
+
+static int save_as_check(bContext *C, wmOperator *op)
+{
+ char filepath[FILE_MAX];
+ RNA_string_get(op->ptr, "filepath", filepath);
+ if(BKE_add_image_extension(filepath, RNA_enum_get(op->ptr, "file_type"))) {
+ RNA_string_set(op->ptr, "filepath", filepath);
+ return TRUE;
+ }
+ return FALSE;
+}
+
static int save_as_invoke(bContext *C, wmOperator *op, wmEvent *event)
{
SpaceImage *sima= CTX_wm_space_image(C);
@@ -1005,6 +1034,7 @@ void IMAGE_OT_save_as(wmOperatorType *ot)
/* api callbacks */
ot->exec= save_as_exec;
+ ot->check= save_as_check;
ot->invoke= save_as_invoke;
ot->poll= space_image_buffer_exists_poll;
@@ -1037,7 +1067,7 @@ static int save_exec(bContext *C, wmOperator *op)
/* if exists, saves over without fileselect */
- BLI_strncpy(name, ibuf->name, FILE_MAX);
+ BLI_strncpy(name, ima->name, FILE_MAX);
if(name[0]==0)
BLI_strncpy(name, G.ima, FILE_MAX);
else
@@ -1054,7 +1084,7 @@ static int save_exec(bContext *C, wmOperator *op)
BKE_image_release_renderresult(scene, ima);
ED_space_image_release_buffer(sima, lock);
- save_image_doit(C, sima, scene, op, name);
+ save_image_doit(C, sima, scene, op, name, FALSE);
}
else {
ED_space_image_release_buffer(sima, lock);
@@ -1286,7 +1316,7 @@ static int pack_test(bContext *C, wmOperator *op)
return 0;
if(ima->source==IMA_SRC_SEQUENCE || ima->source==IMA_SRC_MOVIE) {
- BKE_report(op->reports, RPT_ERROR, "Can't pack movie or image sequence.");
+ BKE_report(op->reports, RPT_ERROR, "Packing movies or image sequences not supported.");
return 0;
}
@@ -1463,7 +1493,7 @@ static int unpack_exec(bContext *C, wmOperator *op)
return OPERATOR_CANCELLED;
if(ima->source==IMA_SRC_SEQUENCE || ima->source==IMA_SRC_MOVIE) {
- BKE_report(op->reports, RPT_ERROR, "Can't unpack movie or image sequence.");
+ BKE_report(op->reports, RPT_ERROR, "Unpacking movies or image sequences not supported.");
return OPERATOR_CANCELLED;
}
@@ -1488,7 +1518,7 @@ static int unpack_invoke(bContext *C, wmOperator *op, wmEvent *event)
return OPERATOR_CANCELLED;
if(ima->source==IMA_SRC_SEQUENCE || ima->source==IMA_SRC_MOVIE) {
- BKE_report(op->reports, RPT_ERROR, "Can't unpack movie or image sequence.");
+ BKE_report(op->reports, RPT_ERROR, "Unpacking movies or image sequences not supported.");
return OPERATOR_CANCELLED;
}
diff --git a/source/blender/editors/space_image/image_render.c b/source/blender/editors/space_image/image_render.c
index 18e42ce8797..be9d60a5adb 100644
--- a/source/blender/editors/space_image/image_render.c
+++ b/source/blender/editors/space_image/image_render.c
@@ -32,9 +32,7 @@
#include "DNA_space_types.h"
#include "BKE_context.h"
-#include "BKE_global.h"
#include "BKE_image.h"
-#include "BKE_screen.h"
#include "BIF_gl.h"
#include "BIF_glutil.h"
diff --git a/source/blender/editors/space_image/space_image.c b/source/blender/editors/space_image/space_image.c
index 3eae1438517..ffa8f6ebb83 100644
--- a/source/blender/editors/space_image/space_image.c
+++ b/source/blender/editors/space_image/space_image.c
@@ -45,9 +45,7 @@
#include "BKE_image.h"
#include "BKE_mesh.h"
#include "BKE_screen.h"
-#include "BKE_utildefines.h"
-#include "IMB_imbuf.h"
#include "IMB_imbuf_types.h"
#include "ED_mesh.h"
@@ -56,7 +54,6 @@
#include "ED_uvedit.h"
#include "BIF_gl.h"
-#include "BIF_glutil.h"
#include "RNA_access.h"
@@ -776,8 +773,6 @@ static void image_main_area_draw(const bContext *C, ARegion *ar)
/* draw Grease Pencil - screen space only */
draw_image_grease_pencil((bContext *)C, 0);
-
- ED_region_draw_cb_draw(C, ar, REGION_DRAW_POST_PIXEL);
/* scrollers? */
/*scrollers= UI_view2d_scrollers_calc(C, v2d, V2D_UNIT_VALUES, V2D_GRID_CLAMP, V2D_ARG_DUMMY, V2D_ARG_DUMMY);
@@ -962,7 +957,7 @@ void ED_spacetype_image(void)
/* regions: statistics/scope buttons */
art= MEM_callocN(sizeof(ARegionType), "spacetype image region");
art->regionid = RGN_TYPE_PREVIEW;
- art->minsizex= 220; // XXX
+ art->prefsizex= 220; // XXX
art->keymapflag= ED_KEYMAP_UI|ED_KEYMAP_FRAMES;
art->listener= image_scope_area_listener;
art->init= image_scope_area_init;
diff --git a/source/blender/editors/space_info/CMakeLists.txt b/source/blender/editors/space_info/CMakeLists.txt
index aa9a40ac98f..9d439c4ec00 100644
--- a/source/blender/editors/space_info/CMakeLists.txt
+++ b/source/blender/editors/space_info/CMakeLists.txt
@@ -22,14 +22,14 @@
FILE(GLOB SRC *.c)
SET(INC
+ ../include
../../blenkernel
../../blenlib
../../imbuf
- ../include
- ../../../../intern/guardedalloc
../../makesdna
../../makesrna
../../windowmanager
+ ../../../../intern/guardedalloc
)
BLENDERLIB(bf_editor_space_info "${SRC}" "${INC}")
diff --git a/source/blender/editors/space_info/Makefile b/source/blender/editors/space_info/Makefile
index 931c2f2097c..46feeec8613 100644
--- a/source/blender/editors/space_info/Makefile
+++ b/source/blender/editors/space_info/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2007 Blender Foundation
# All rights reserved.
diff --git a/source/blender/editors/space_info/info_ops.c b/source/blender/editors/space_info/info_ops.c
index 62e82f83e58..51767d3e006 100644
--- a/source/blender/editors/space_info/info_ops.c
+++ b/source/blender/editors/space_info/info_ops.c
@@ -45,14 +45,11 @@
#include "BKE_main.h"
#include "BKE_packedFile.h"
#include "BKE_report.h"
-#include "BKE_screen.h"
#include "WM_api.h"
#include "WM_types.h"
-#include "BIF_gl.h"
-#include "BIF_glutil.h"
#include "UI_interface.h"
diff --git a/source/blender/editors/space_info/info_stats.c b/source/blender/editors/space_info/info_stats.c
index 1b5cf133749..0789114c054 100644
--- a/source/blender/editors/space_info/info_stats.c
+++ b/source/blender/editors/space_info/info_stats.c
@@ -35,7 +35,6 @@
#include "DNA_scene_types.h"
#include "BKE_anim.h"
-#include "BKE_context.h"
#include "BKE_displist.h"
#include "BKE_DerivedMesh.h"
#include "BKE_key.h"
@@ -226,7 +225,7 @@ static void stats_object_edit(Object *obedit, SceneStats *stats)
else if(obedit->type==OB_LATTICE) {
/* Lattice Edit */
Lattice *lt= obedit->data;
- Lattice *editlatt= lt->editlatt;
+ Lattice *editlatt= lt->editlatt->latt;
BPoint *bp;
int a;
diff --git a/source/blender/editors/space_info/space_info.c b/source/blender/editors/space_info/space_info.c
index 0b2d52d6e25..b47c8e8d189 100644
--- a/source/blender/editors/space_info/space_info.c
+++ b/source/blender/editors/space_info/space_info.c
@@ -37,10 +37,8 @@
#include "BLI_rand.h"
#include "BKE_context.h"
-#include "BKE_colortools.h"
#include "BKE_global.h"
#include "BKE_screen.h"
-#include "BKE_utildefines.h"
#include "ED_screen.h"
diff --git a/source/blender/editors/space_logic/CMakeLists.txt b/source/blender/editors/space_logic/CMakeLists.txt
index 91087d57f11..6f0a260124d 100644
--- a/source/blender/editors/space_logic/CMakeLists.txt
+++ b/source/blender/editors/space_logic/CMakeLists.txt
@@ -22,14 +22,14 @@
FILE(GLOB SRC *.c)
SET(INC
+ ../include
../../blenkernel
../../blenlib
- ../include
- ../../../../intern/guardedalloc
../../makesdna
../../makesrna
../../windowmanager
../../editors/interface
+ ../../../../intern/guardedalloc
)
IF(WITH_GAMEENGINE)
diff --git a/source/blender/editors/space_logic/Makefile b/source/blender/editors/space_logic/Makefile
index 90cd73bd62a..9b72e132be8 100644
--- a/source/blender/editors/space_logic/Makefile
+++ b/source/blender/editors/space_logic/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2007 Blender Foundation
# All rights reserved.
diff --git a/source/blender/editors/space_logic/SConscript b/source/blender/editors/space_logic/SConscript
index 307d229fb3f..0ce2eee575e 100644
--- a/source/blender/editors/space_logic/SConscript
+++ b/source/blender/editors/space_logic/SConscript
@@ -10,6 +10,6 @@ incs += ' ../../makesrna ../interface'
defs = []
if env['WITH_BF_GAMEENGINE']:
- defs.append('GAMEBLENDER=1')
+ defs.append('GAMEBLENDER=1')
env.BlenderLib ( 'bf_editors_space_game', sources, Split(incs), defs, libtype=['core'], priority=[120] )
diff --git a/source/blender/editors/space_logic/logic_buttons.c b/source/blender/editors/space_logic/logic_buttons.c
index fc0955bf9d1..d8dfd8cb52d 100644
--- a/source/blender/editors/space_logic/logic_buttons.c
+++ b/source/blender/editors/space_logic/logic_buttons.c
@@ -27,26 +27,16 @@
#include <string.h>
#include <stdio.h>
-#include "DNA_object_types.h"
-#include "MEM_guardedalloc.h"
#include "BLI_blenlib.h"
#include "BLI_math.h"
#include "BKE_context.h"
-#include "BKE_global.h"
-#include "BKE_library.h"
-#include "BKE_main.h"
-#include "BKE_mesh.h"
-#include "BKE_node.h"
#include "BKE_screen.h"
-#include "BKE_utildefines.h"
#include "ED_screen.h"
-#include "BIF_gl.h"
-#include "BIF_glutil.h"
#include "RNA_access.h"
#include "RNA_define.h"
diff --git a/source/blender/editors/space_logic/logic_ops.c b/source/blender/editors/space_logic/logic_ops.c
index 2a179ac281c..4641fd2ce61 100644
--- a/source/blender/editors/space_logic/logic_ops.c
+++ b/source/blender/editors/space_logic/logic_ops.c
@@ -28,7 +28,6 @@
#include <stddef.h>
#include "DNA_object_types.h"
-#include "DNA_scene_types.h"
#include "DNA_sensor_types.h"
#include "DNA_controller_types.h"
#include "DNA_actuator_types.h"
diff --git a/source/blender/editors/space_logic/logic_window.c b/source/blender/editors/space_logic/logic_window.c
index 5421fb0f4f9..e3d2d064987 100644
--- a/source/blender/editors/space_logic/logic_window.c
+++ b/source/blender/editors/space_logic/logic_window.c
@@ -50,17 +50,13 @@
#include "BKE_global.h"
#include "BKE_library.h"
#include "BKE_main.h"
-#include "BKE_property.h"
-#include "BKE_screen.h"
#include "BKE_sca.h"
-#include "BKE_utildefines.h"
#include "ED_util.h"
#include "WM_types.h"
#include "BIF_gl.h"
-#include "BIF_glutil.h"
#include "UI_interface.h"
@@ -1931,7 +1927,7 @@ static short draw_actuatorbuttons(Main *bmain, Object *ob, bActuator *act, uiBlo
uiDefButBitS(block, TOG, ACT_LIN_VEL_LOCAL, 0, "L", xco+45+3*wval, yco-129, 15, 19, &oa->flag, 0.0, 0.0, 0, 0, "Local transformation");
uiDefButBitS(block, TOG, ACT_ANG_VEL_LOCAL, 0, "L", xco+45+3*wval, yco-148, 15, 19, &oa->flag, 0.0, 0.0, 0, 0, "Local transformation");
- uiDefButBitS(block, TOG, ACT_ADD_LIN_VEL, 0, "add",xco+45+3*wval+15, yco-129, 35, 19, &oa->flag, 0.0, 0.0, 0, 0, "Toggles between ADD and SET linV");
+ uiDefButBitS(block, TOG, ACT_ADD_LIN_VEL, 0, "use_additive",xco+45+3*wval+15, yco-129, 35, 19, &oa->flag, 0.0, 0.0, 0, 0, "Toggles between ADD and SET linV");
}
} else if (oa->type == ACT_OBJECT_SERVO)
{
@@ -2535,7 +2531,7 @@ static short draw_actuatorbuttons(Main *bmain, Object *ob, bActuator *act, uiBlo
}
//str = "Scene %t|Load game%x0|Start loaded game%x1|Restart this game%x2|Quit this game %x3";
- str = "Scene %t|Start new game%x0|Restart this game%x2|Quit this game %x3|Save GameLogic.globalDict %x4|Load GameLogic.globalDict %x5";
+ str = "Scene %t|Start new game%x0|Restart this game%x2|Quit this game %x3|Save bge.logic.globalDict %x4|Load bge.logic.globalDict %x5";
uiDefButS(block, MENU, B_REDR, str, xco+40, yco-24, (width-80), 19, &gma->type, 0.0, 0.0, 0, 0, "");
yco -= ysize;
@@ -3188,8 +3184,8 @@ static void draw_sensor_header(uiLayout *layout, PointerRNA *ptr, PointerRNA *lo
box= uiLayoutBox(layout);
row= uiLayoutRow(box, 0);
- uiItemR(row, ptr, "expanded", UI_ITEM_R_NO_BG, "", 0);
- if(RNA_boolean_get(ptr, "expanded")) {
+ uiItemR(row, ptr, "show_expanded", UI_ITEM_R_NO_BG, "", 0);
+ if(RNA_boolean_get(ptr, "show_expanded")) {
uiItemR(row, ptr, "type", 0, "", 0);
uiItemR(row, ptr, "name", 0, "", 0);
} else {
@@ -3198,11 +3194,11 @@ static void draw_sensor_header(uiLayout *layout, PointerRNA *ptr, PointerRNA *lo
}
subrow= uiLayoutRow(row, 0);
- uiLayoutSetActive(subrow, ((RNA_boolean_get(logic_ptr, "sensors_show_active_states")
- && RNA_boolean_get(ptr, "expanded")) || RNA_boolean_get(ptr, "pinned")));
- uiItemR(subrow, ptr, "pinned", UI_ITEM_R_NO_BG, "", 0);
+ uiLayoutSetActive(subrow, ((RNA_boolean_get(logic_ptr, "show_sensors_active_states")
+ && RNA_boolean_get(ptr, "show_expanded")) || RNA_boolean_get(ptr, "pin")));
+ uiItemR(subrow, ptr, "pin", UI_ITEM_R_NO_BG, "", 0);
- if(RNA_boolean_get(ptr, "expanded")==0) {
+ if(RNA_boolean_get(ptr, "show_expanded")==0) {
subrow= uiLayoutRow(row, 1);
uiItemEnumO(subrow, "LOGIC_OT_sensor_move", "", ICON_TRIA_UP, "direction", 1); // up
uiItemEnumO(subrow, "LOGIC_OT_sensor_move", "", ICON_TRIA_DOWN, "direction", 2); // down
@@ -3219,13 +3215,13 @@ static void draw_sensor_internal_header(uiLayout *layout, PointerRNA *ptr)
split = uiLayoutSplit(box, 0.45, 0);
row= uiLayoutRow(split, 1);
- uiItemR(row, ptr, "pulse_true_level", 0, "", ICON_DOTSUP);
- uiItemR(row, ptr, "pulse_false_level", 0, "", ICON_DOTSDOWN);
+ uiItemR(row, ptr, "use_pulse_true_level", 0, "", ICON_DOTSUP);
+ uiItemR(row, ptr, "use_pulse_false_level", 0, "", ICON_DOTSDOWN);
uiItemR(row, ptr, "frequency", 0, "Freq", 0);
row= uiLayoutRow(split, 1);
- uiItemR(row, ptr, "level", UI_ITEM_R_TOGGLE, NULL, 0);
- uiItemR(row, ptr, "tap", UI_ITEM_R_TOGGLE, NULL, 0);
+ uiItemR(row, ptr, "use_level", UI_ITEM_R_TOGGLE, NULL, 0);
+ uiItemR(row, ptr, "use_tap", UI_ITEM_R_TOGGLE, NULL, 0);
row= uiLayoutRow(split, 1);
uiItemR(row, ptr, "invert", UI_ITEM_R_TOGGLE, "Invert", 0);
@@ -3280,10 +3276,10 @@ static void draw_sensor_collision(uiLayout *layout, PointerRNA *ptr, bContext *C
split = uiLayoutSplit(layout, 0.3, 0);
row = uiLayoutRow(split, 1);
- uiItemR(row, ptr, "pulse", UI_ITEM_R_TOGGLE, NULL, 0);
- uiItemR(row, ptr, "collision_type", UI_ITEM_R_TOGGLE, NULL, 0);
+ uiItemR(row, ptr, "use_pulse", UI_ITEM_R_TOGGLE, NULL, 0);
+ uiItemR(row, ptr, "use_material", UI_ITEM_R_TOGGLE, NULL, 0);
- switch (RNA_enum_get(ptr, "collision_type")) {
+ switch (RNA_enum_get(ptr, "use_material")) {
case SENS_COLLISION_PROPERTY:
uiItemR(split, ptr, "property", 0, NULL, 0);
break;
@@ -3301,7 +3297,7 @@ static void draw_sensor_delay(uiLayout *layout, PointerRNA *ptr)
uiItemR(row, ptr, "delay", 0, NULL, 0);
uiItemR(row, ptr, "duration", 0, NULL, 0);
- uiItemR(row, ptr, "repeat", 0, NULL, 0);
+ uiItemR(row, ptr, "use_repeat", 0, NULL, 0);
}
static void draw_sensor_joystick(uiLayout *layout, PointerRNA *ptr)
@@ -3313,10 +3309,10 @@ static void draw_sensor_joystick(uiLayout *layout, PointerRNA *ptr)
switch (RNA_enum_get(ptr, "event_type")) {
case SENS_JOY_BUTTON:
- uiItemR(layout, ptr, "all_events", 0, NULL, 0);
+ uiItemR(layout, ptr, "use_all_events", 0, NULL, 0);
col = uiLayoutColumn(layout, 0);
- uiLayoutSetActive(col, RNA_boolean_get(ptr, "all_events")==0);
+ uiLayoutSetActive(col, RNA_boolean_get(ptr, "use_all_events")==0);
uiItemR(col, ptr, "button_number", 0, NULL, 0);
break;
case SENS_JOY_AXIS:
@@ -3324,17 +3320,17 @@ static void draw_sensor_joystick(uiLayout *layout, PointerRNA *ptr)
uiItemR(row, ptr, "axis_number", 0, NULL, 0);
uiItemR(row, ptr, "axis_threshold", 0, NULL, 0);
- uiItemR(layout, ptr, "all_events", 0, NULL, 0);
+ uiItemR(layout, ptr, "use_all_events", 0, NULL, 0);
col = uiLayoutColumn(layout, 0);
- uiLayoutSetActive(col, RNA_boolean_get(ptr, "all_events")==0);
+ uiLayoutSetActive(col, RNA_boolean_get(ptr, "use_all_events")==0);
uiItemR(col, ptr, "axis_direction", 0, NULL, 0);
break;
case SENS_JOY_HAT:
uiItemR(layout, ptr, "hat_number", 0, NULL, 0);
- uiItemR(layout, ptr, "all_events", 0, NULL, 0);
+ uiItemR(layout, ptr, "use_all_events", 0, NULL, 0);
col = uiLayoutColumn(layout, 0);
- uiLayoutSetActive(col, RNA_boolean_get(ptr, "all_events")==0);
+ uiLayoutSetActive(col, RNA_boolean_get(ptr, "use_all_events")==0);
uiItemR(col, ptr, "hat_direction", 0, NULL, 0);
break;
case SENS_JOY_AXIS_SINGLE:
@@ -3354,20 +3350,20 @@ static void draw_sensor_keyboard(uiLayout *layout, PointerRNA *ptr)
row = uiLayoutRow(layout, 0);
uiItemL(row, "Key:", 0);
col = uiLayoutColumn(row, 0);
- uiLayoutSetActive(col, RNA_boolean_get(ptr, "all_keys")==0);
+ uiLayoutSetActive(col, RNA_boolean_get(ptr, "use_all_keys")==0);
uiItemR(col, ptr, "key", UI_ITEM_R_EVENT, "", 0);
col = uiLayoutColumn(row, 0);
- uiItemR(col, ptr, "all_keys", UI_ITEM_R_TOGGLE, NULL, 0);
+ uiItemR(col, ptr, "use_all_keys", UI_ITEM_R_TOGGLE, NULL, 0);
col = uiLayoutColumn(layout, 0);
- uiLayoutSetActive(col, RNA_boolean_get(ptr, "all_keys")==0);
+ uiLayoutSetActive(col, RNA_boolean_get(ptr, "use_all_keys")==0);
row = uiLayoutRow(col, 0);
uiItemL(row, "First Modifier:", 0);
- uiItemR(row, ptr, "modifier_key", UI_ITEM_R_EVENT, "", 0);
+ uiItemR(row, ptr, "modifier_key_1", UI_ITEM_R_EVENT, "", 0);
row = uiLayoutRow(col, 0);
uiItemL(row, "Second Modifier:", 0);
- uiItemR(row, ptr, "second_modifier_key", UI_ITEM_R_EVENT, "", 0);
+ uiItemR(row, ptr, "modifier_key_2", UI_ITEM_R_EVENT, "", 0);
RNA_pointer_create((ID *)ob, &RNA_GameObjectSettings, ob, &settings_ptr);
uiItemPointerR(layout, ptr, "target", &settings_ptr, "properties", NULL, 0);
@@ -3409,8 +3405,8 @@ static void draw_sensor_property(uiLayout *layout, PointerRNA *ptr)
switch (RNA_enum_get(ptr, "evaluation_type")) {
case SENS_PROP_INTERVAL:
row = uiLayoutRow(layout, 0);
- uiItemR(row, ptr, "min_value", 0, NULL, 0);
- uiItemR(row, ptr, "max_value", 0, NULL, 0);
+ uiItemR(row, ptr, "value_min", 0, NULL, 0);
+ uiItemR(row, ptr, "value_max", 0, NULL, 0);
break;
case SENS_PROP_EQUAL:
uiItemR(layout, ptr, "value", 0, NULL, 0);
@@ -3461,7 +3457,7 @@ static void draw_sensor_ray(uiLayout *layout, PointerRNA *ptr, bContext *C)
uiItemR(split, ptr, "axis", 0, "", 0);
row= uiLayoutRow(split, 0);
uiItemR(row, ptr, "range", 0, NULL, 0);
- uiItemR(row, ptr, "x_ray_mode", UI_ITEM_R_TOGGLE, NULL, 0);
+ uiItemR(row, ptr, "use_x_ray", UI_ITEM_R_TOGGLE, NULL, 0);
}
static void draw_sensor_touch(uiLayout *layout, PointerRNA *ptr)
@@ -3473,7 +3469,7 @@ void draw_brick_sensor(uiLayout *layout, PointerRNA *ptr, bContext *C)
{
uiLayout *box;
- if (!RNA_boolean_get(ptr, "expanded"))
+ if (!RNA_boolean_get(ptr, "show_expanded"))
return;
draw_sensor_internal_header(layout, ptr);
@@ -3536,13 +3532,13 @@ static void draw_controller_header(uiLayout *layout, PointerRNA *ptr, int xco, i
bController *cont= (bController *)ptr->data;
char state[3];
- sprintf(state, "%d", RNA_int_get(ptr, "state"));
+ sprintf(state, "%d", RNA_int_get(ptr, "states"));
box= uiLayoutBox(layout);
row= uiLayoutRow(box, 0);
- uiItemR(row, ptr, "expanded", UI_ITEM_R_NO_BG, "", 0);
- if(RNA_boolean_get(ptr, "expanded")) {
+ uiItemR(row, ptr, "show_expanded", UI_ITEM_R_NO_BG, "", 0);
+ if(RNA_boolean_get(ptr, "show_expanded")) {
uiItemR(row, ptr, "type", 0, "", 0);
uiItemR(row, ptr, "name", 0, "", 0);
/* XXX provisory for Blender 2.50Beta */
@@ -3553,9 +3549,9 @@ static void draw_controller_header(uiLayout *layout, PointerRNA *ptr, int xco, i
uiItemL(row, state, 0);
}
- uiItemR(row, ptr, "priority", 0, "", 0);
+ uiItemR(row, ptr, "use_priority", 0, "", 0);
- if(RNA_boolean_get(ptr, "expanded")==0) {
+ if(RNA_boolean_get(ptr, "show_expanded")==0) {
subrow= uiLayoutRow(row, 1);
uiItemEnumO(subrow, "LOGIC_OT_controller_move", "", ICON_TRIA_UP, "direction", 1); // up
uiItemEnumO(subrow, "LOGIC_OT_controller_move", "", ICON_TRIA_DOWN, "direction", 2); // down
@@ -3580,7 +3576,7 @@ static void draw_controller_python(uiLayout *layout, PointerRNA *ptr)
else {
subsplit = uiLayoutSplit(split, 0.8, 0);
uiItemR(subsplit, ptr, "module", 0, "", 0);
- uiItemR(subsplit, ptr, "debug", UI_ITEM_R_TOGGLE, NULL, 0);
+ uiItemR(subsplit, ptr, "use_debug", UI_ITEM_R_TOGGLE, NULL, 0);
}
}
@@ -3593,7 +3589,7 @@ void draw_brick_controller(uiLayout *layout, PointerRNA *ptr)
{
uiLayout *box;
- if (!RNA_boolean_get(ptr, "expanded"))
+ if (!RNA_boolean_get(ptr, "show_expanded"))
return;
box = uiLayoutBox(layout);
@@ -3631,8 +3627,8 @@ static void draw_actuator_header(uiLayout *layout, PointerRNA *ptr, PointerRNA *
box= uiLayoutBox(layout);
row= uiLayoutRow(box, 0);
- uiItemR(row, ptr, "expanded", UI_ITEM_R_NO_BG, "", 0);
- if(RNA_boolean_get(ptr, "expanded")) {
+ uiItemR(row, ptr, "show_expanded", UI_ITEM_R_NO_BG, "", 0);
+ if(RNA_boolean_get(ptr, "show_expanded")) {
uiItemR(row, ptr, "type", 0, "", 0);
uiItemR(row, ptr, "name", 0, "", 0);
} else {
@@ -3641,11 +3637,11 @@ static void draw_actuator_header(uiLayout *layout, PointerRNA *ptr, PointerRNA *
}
subrow= uiLayoutRow(row, 0);
- uiLayoutSetActive(subrow, ((RNA_boolean_get(logic_ptr, "actuators_show_active_states")
- && RNA_boolean_get(ptr, "expanded")) || RNA_boolean_get(ptr, "pinned")));
- uiItemR(subrow, ptr, "pinned", UI_ITEM_R_NO_BG, "", 0);
+ uiLayoutSetActive(subrow, ((RNA_boolean_get(logic_ptr, "show_actuators_active_states")
+ && RNA_boolean_get(ptr, "show_expanded")) || RNA_boolean_get(ptr, "pin")));
+ uiItemR(subrow, ptr, "pin", UI_ITEM_R_NO_BG, "", 0);
- if(RNA_boolean_get(ptr, "expanded")==0) {
+ if(RNA_boolean_get(ptr, "show_expanded")==0) {
subrow= uiLayoutRow(row, 1);
uiItemEnumO(subrow, "LOGIC_OT_actuator_move", "", ICON_TRIA_UP, "direction", 1); // up
uiItemEnumO(subrow, "LOGIC_OT_actuator_move", "", ICON_TRIA_DOWN, "direction", 2); // down
@@ -3666,12 +3662,12 @@ static void draw_actuator_action(uiLayout *layout, PointerRNA *ptr)
RNA_pointer_create((ID *)ob, &RNA_GameObjectSettings, ob, &settings_ptr);
row= uiLayoutRow(layout, 0);
- uiItemR(row, ptr, "mode", 0, "", 0);
+ uiItemR(row, ptr, "play_mode", 0, "", 0);
uiItemR(row, ptr, "action", 0, NULL, 0);
- uiItemR(row, ptr, "continue_last_frame", 0, NULL, 0);
+ uiItemR(row, ptr, "use_continue_last_frame", 0, NULL, 0);
row= uiLayoutRow(layout, 0);
- if((RNA_enum_get(ptr, "mode") == ACT_ACTION_FROM_PROP))
+ if((RNA_enum_get(ptr, "play_mode") == ACT_ACTION_FROM_PROP))
uiItemPointerR(row, ptr, "property", &settings_ptr, "properties", NULL, 0);
else {
@@ -3680,7 +3676,7 @@ static void draw_actuator_action(uiLayout *layout, PointerRNA *ptr)
}
row= uiLayoutRow(layout, 0);
- uiItemR(row, ptr, "blendin", 0, NULL, 0);
+ uiItemR(row, ptr, "frame_blend_in", 0, NULL, 0);
uiItemR(row, ptr, "priority", 0, NULL, 0);
row= uiLayoutRow(layout, 0);
@@ -3786,8 +3782,8 @@ static void draw_actuator_constraint(uiLayout *layout, PointerRNA *ptr, bContext
split = uiLayoutSplit(layout, 0.8, 0);
uiItemR(split, ptr, "direction", 0, NULL, 0);
row = uiLayoutRow(split, 1);
- uiItemR(row, ptr, "local", UI_ITEM_R_TOGGLE, NULL, 0);
- uiItemR(row, ptr, "normal", UI_ITEM_R_TOGGLE, NULL, 0);
+ uiItemR(row, ptr, "use_local", UI_ITEM_R_TOGGLE, NULL, 0);
+ uiItemR(row, ptr, "use_normal", UI_ITEM_R_TOGGLE, NULL, 0);
row = uiLayoutRow(layout, 0);
col = uiLayoutColumn(row, 0);
@@ -3795,22 +3791,22 @@ static void draw_actuator_constraint(uiLayout *layout, PointerRNA *ptr, bContext
uiItemR(col, ptr, "range", 0, "", 0);
col = uiLayoutColumn(row, 1);
- uiItemR(col, ptr, "force_distance", UI_ITEM_R_TOGGLE, NULL, 0);
+ uiItemR(col, ptr, "use_force_distance", UI_ITEM_R_TOGGLE, NULL, 0);
subcol = uiLayoutColumn(col, 0);
- uiLayoutSetActive(subcol, RNA_boolean_get(ptr, "force_distance")==1);
+ uiLayoutSetActive(subcol, RNA_boolean_get(ptr, "use_force_distance")==1);
uiItemR(subcol, ptr, "distance", 0, "", 0);
uiItemR(layout, ptr, "damping", UI_ITEM_R_SLIDER , NULL, 0);
split = uiLayoutSplit(layout, 0.15, 0);
- uiItemR(split, ptr, "detect_material", UI_ITEM_R_TOGGLE, NULL, 0);
- if (RNA_boolean_get(ptr, "detect_material"))
+ uiItemR(split, ptr, "use_material_detect", UI_ITEM_R_TOGGLE, NULL, 0);
+ if (RNA_boolean_get(ptr, "use_material_detect"))
uiItemPointerR(split, ptr, "material", &main_ptr, "materials", NULL, ICON_MATERIAL_DATA);
else
uiItemR(split, ptr, "property", 0, NULL, 0);
split = uiLayoutSplit(layout, 0.15, 0);
- uiItemR(split, ptr, "persistent", UI_ITEM_R_TOGGLE, NULL, 0);
+ uiItemR(split, ptr, "use_persistent", UI_ITEM_R_TOGGLE, NULL, 0);
row = uiLayoutRow(split, 1);
uiItemR(row, ptr, "time", 0, NULL, 0);
@@ -3825,11 +3821,11 @@ static void draw_actuator_constraint(uiLayout *layout, PointerRNA *ptr, bContext
uiItemR(row, ptr, "time", 0, NULL, 0);
row=uiLayoutRow(layout, 0);
- uiItemR(row, ptr, "max_rotation", 0, NULL, 0);
+ uiItemR(row, ptr, "rotation_max", 0, NULL, 0);
row=uiLayoutRow(layout, 1);
- uiItemR(row, ptr, "min_angle", 0, NULL, 0);
- uiItemR(row, ptr, "max_angle", 0, NULL, 0);
+ uiItemR(row, ptr, "angle_min", 0, NULL, 0);
+ uiItemR(row, ptr, "angle_max", 0, NULL, 0);
break;
case ACT_CONST_TYPE_FH:
@@ -3838,23 +3834,23 @@ static void draw_actuator_constraint(uiLayout *layout, PointerRNA *ptr, bContext
uiItemR(row, ptr, "fh_damping", UI_ITEM_R_SLIDER , NULL, 0);
uiItemR(row, ptr, "fh_height", 0, NULL, 0);
- uiItemR(split, ptr, "fh_paralel_axis", UI_ITEM_R_TOGGLE , NULL, 0);
+ uiItemR(split, ptr, "use_fh_paralel_axis", UI_ITEM_R_TOGGLE , NULL, 0);
row = uiLayoutRow(layout, 0);
uiItemR(row, ptr, "direction_axis", 0, NULL, 0);
split = uiLayoutSplit(row, 0.9, 0);
uiItemR(split, ptr, "spring", 0, NULL, 0);
- uiItemR(split, ptr, "fh_normal", UI_ITEM_R_TOGGLE , NULL, 0);
+ uiItemR(split, ptr, "use_fh_normal", UI_ITEM_R_TOGGLE , NULL, 0);
split = uiLayoutSplit(layout, 0.15, 0);
- uiItemR(split, ptr, "detect_material", UI_ITEM_R_TOGGLE, NULL, 0);
- if (RNA_boolean_get(ptr, "detect_material"))
+ uiItemR(split, ptr, "use_material_detect", UI_ITEM_R_TOGGLE, NULL, 0);
+ if (RNA_boolean_get(ptr, "use_material_detect"))
uiItemPointerR(split, ptr, "material", &main_ptr, "materials", NULL, ICON_MATERIAL_DATA);
else
uiItemR(split, ptr, "property", 0, NULL, 0);
split = uiLayoutSplit(layout, 0.15, 0);
- uiItemR(split, ptr, "persistent", UI_ITEM_R_TOGGLE, NULL, 0);
+ uiItemR(split, ptr, "use_persistent", UI_ITEM_R_TOGGLE, NULL, 0);
row = uiLayoutRow(split, 0);
uiItemR(row, ptr, "time", 0, NULL, 0);
@@ -3879,12 +3875,12 @@ static void draw_actuator_edit_object(uiLayout *layout, PointerRNA *ptr)
split = uiLayoutSplit(layout, 0.9, 0);
row = uiLayoutRow(split, 0);
uiItemR(row, ptr, "linear_velocity", 0, NULL, 0);
- uiItemR(split, ptr, "local_linear_velocity", UI_ITEM_R_TOGGLE, NULL, 0);
+ uiItemR(split, ptr, "use_local_linear_velocity", UI_ITEM_R_TOGGLE, NULL, 0);
split = uiLayoutSplit(layout, 0.9, 0);
row = uiLayoutRow(split, 0);
uiItemR(row, ptr, "angular_velocity", 0, NULL, 0);
- uiItemR(split, ptr, "local_angular_velocity", UI_ITEM_R_TOGGLE, NULL, 0);
+ uiItemR(split, ptr, "use_local_angular_velocity", UI_ITEM_R_TOGGLE, NULL, 0);
break;
case ACT_EDOB_END_OBJECT:
break;
@@ -3896,15 +3892,15 @@ static void draw_actuator_edit_object(uiLayout *layout, PointerRNA *ptr)
split = uiLayoutSplit(layout, 0.6, 0);
uiItemR(split, ptr, "mesh", 0, NULL, 0);
row = uiLayoutRow(split, 0);
- uiItemR(row, ptr, "replace_display_mesh", UI_ITEM_R_TOGGLE, NULL, 0);
- uiItemR(row, ptr, "replace_physics_mesh", UI_ITEM_R_TOGGLE, NULL, 0);
+ uiItemR(row, ptr, "use_replace_display_mesh", UI_ITEM_R_TOGGLE, NULL, 0);
+ uiItemR(row, ptr, "use_replace_physics_mesh", UI_ITEM_R_TOGGLE, NULL, 0);
break;
case ACT_EDOB_TRACK_TO:
split = uiLayoutSplit(layout, 0.5, 0);
uiItemR(split, ptr, "track_object", 0, NULL, 0);
subsplit = uiLayoutSplit(split, 0.7, 0);
uiItemR(subsplit, ptr, "time", 0, NULL, 0);
- uiItemR(subsplit, ptr, "enable_3d_tracking", UI_ITEM_R_TOGGLE, NULL, 0);
+ uiItemR(subsplit, ptr, "use_3d_tracking", UI_ITEM_R_TOGGLE, NULL, 0);
break;
case ACT_EDOB_DYNAMICS:
if(ob->type != OB_MESH) {
@@ -3932,9 +3928,9 @@ static void draw_actuator_filter_2d(uiLayout *layout, PointerRNA *ptr)
case ACT_2DFILTER_MOTIONBLUR:
split=uiLayoutSplit(layout, 0.75, 1);
row= uiLayoutRow(split, 0);
- uiLayoutSetActive(row, RNA_boolean_get(ptr, "enable_motion_blur")==1);
- uiItemR(row, ptr, "motion_blur_value", 0, NULL, 0);
- uiItemR(split, ptr, "enable_motion_blur", UI_ITEM_R_TOGGLE, NULL, 0);
+ uiLayoutSetActive(row, RNA_boolean_get(ptr, "use_motion_blur")==1);
+ uiItemR(row, ptr, "motion_blur_factor", 0, NULL, 0);
+ uiItemR(split, ptr, "use_motion_blur", UI_ITEM_R_TOGGLE, NULL, 0);
break;
default: // all other 2D Filters
uiItemR(layout, ptr, "filter_pass", 0, NULL, 0);
@@ -3961,12 +3957,12 @@ static void draw_actuator_ipo(uiLayout *layout, PointerRNA *ptr)
row= uiLayoutRow(layout, 0);
uiItemR(row, ptr, "play_type", 0, "", 0);
subrow= uiLayoutRow(row, 1);
- uiItemR(subrow, ptr, "force", UI_ITEM_R_TOGGLE, NULL, 0);
- uiItemR(subrow, ptr, "add", UI_ITEM_R_TOGGLE, NULL, 0);
+ uiItemR(subrow, ptr, "use_force", UI_ITEM_R_TOGGLE, NULL, 0);
+ uiItemR(subrow, ptr, "use_additive", UI_ITEM_R_TOGGLE, NULL, 0);
col = uiLayoutColumn(subrow, 0);
- uiLayoutSetActive(col, (RNA_boolean_get(ptr, "add") || RNA_boolean_get(ptr, "force")));
- uiItemR(col, ptr, "local", UI_ITEM_R_TOGGLE, NULL, 0);
+ uiLayoutSetActive(col, (RNA_boolean_get(ptr, "use_additive") || RNA_boolean_get(ptr, "use_force")));
+ uiItemR(col, ptr, "use_local", UI_ITEM_R_TOGGLE, NULL, 0);
row= uiLayoutRow(layout, 0);
if((RNA_enum_get(ptr, "play_type") == ACT_IPO_FROM_PROP))
@@ -3976,7 +3972,7 @@ static void draw_actuator_ipo(uiLayout *layout, PointerRNA *ptr)
uiItemR(row, ptr, "frame_start", 0, NULL, 0);
uiItemR(row, ptr, "frame_end", 0, NULL, 0);
}
- uiItemR(row, ptr, "child", 0, NULL, 0);
+ uiItemR(row, ptr, "apply_to_children", 0, NULL, 0);
row= uiLayoutRow(layout, 0);
uiItemPointerR(row, ptr, "frame_property", &settings_ptr, "properties", NULL, 0);
@@ -4022,37 +4018,37 @@ static void draw_actuator_motion(uiLayout *layout, PointerRNA *ptr)
case ACT_OBJECT_NORMAL:
split = uiLayoutSplit(layout, 0.9, 0);
row = uiLayoutRow(split, 0);
- uiItemR(row, ptr, "loc", 0, NULL, 0);
- uiItemR(split, ptr, "local_location", UI_ITEM_R_TOGGLE, NULL, 0);
+ uiItemR(row, ptr, "offset_location", 0, NULL, 0);
+ uiItemR(split, ptr, "use_local_location", UI_ITEM_R_TOGGLE, NULL, 0);
split = uiLayoutSplit(layout, 0.9, 0);
row = uiLayoutRow(split, 0);
- uiItemR(row, ptr, "rot", 0, NULL, 0);
- uiItemR(split, ptr, "local_rotation", UI_ITEM_R_TOGGLE, NULL, 0);
+ uiItemR(row, ptr, "offset_rotation", 0, NULL, 0);
+ uiItemR(split, ptr, "use_local_rotation", UI_ITEM_R_TOGGLE, NULL, 0);
if (ELEM3(physics_type, OB_BODY_TYPE_DYNAMIC, OB_BODY_TYPE_RIGID, OB_BODY_TYPE_SOFT)) {
uiItemL(layout, "Dynamic Object Settings:", 0);
split = uiLayoutSplit(layout, 0.9, 0);
row = uiLayoutRow(split, 0);
uiItemR(row, ptr, "force", 0, NULL, 0);
- uiItemR(split, ptr, "local_force", UI_ITEM_R_TOGGLE, NULL, 0);
+ uiItemR(split, ptr, "use_local_force", UI_ITEM_R_TOGGLE, NULL, 0);
split = uiLayoutSplit(layout, 0.9, 0);
row = uiLayoutRow(split, 0);
uiItemR(row, ptr, "torque", 0, NULL, 0);
- uiItemR(split, ptr, "local_torque", UI_ITEM_R_TOGGLE, NULL, 0);
+ uiItemR(split, ptr, "use_local_torque", UI_ITEM_R_TOGGLE, NULL, 0);
split = uiLayoutSplit(layout, 0.9, 0);
row = uiLayoutRow(split, 0);
uiItemR(row, ptr, "linear_velocity", 0, NULL, 0);
row = uiLayoutRow(split, 1);
- uiItemR(row, ptr, "local_linear_velocity", UI_ITEM_R_TOGGLE, NULL, 0);
- uiItemR(row, ptr, "add_linear_velocity", UI_ITEM_R_TOGGLE, NULL, 0);
+ uiItemR(row, ptr, "use_local_linear_velocity", UI_ITEM_R_TOGGLE, NULL, 0);
+ uiItemR(row, ptr, "use_add_linear_velocity", UI_ITEM_R_TOGGLE, NULL, 0);
split = uiLayoutSplit(layout, 0.9, 0);
row = uiLayoutRow(split, 0);
uiItemR(row, ptr, "angular_velocity", 0, NULL, 0);
- uiItemR(split, ptr, "local_angular_velocity", UI_ITEM_R_TOGGLE, NULL, 0);
+ uiItemR(split, ptr, "use_local_angular_velocity", UI_ITEM_R_TOGGLE, NULL, 0);
uiItemR(layout, ptr, "damping", 0, NULL, 0);
}
@@ -4063,27 +4059,27 @@ static void draw_actuator_motion(uiLayout *layout, PointerRNA *ptr)
split = uiLayoutSplit(layout, 0.9, 0);
row = uiLayoutRow(split, 0);
uiItemR(row, ptr, "linear_velocity", 0, NULL, 0);
- uiItemR(split, ptr, "local_linear_velocity", UI_ITEM_R_TOGGLE, NULL, 0);
+ uiItemR(split, ptr, "use_local_linear_velocity", UI_ITEM_R_TOGGLE, NULL, 0);
row = uiLayoutRow(layout, 0);
col = uiLayoutColumn(row, 0);
- uiItemR(col, ptr, "servo_limit_x", UI_ITEM_R_TOGGLE, NULL, 0);
+ uiItemR(col, ptr, "use_servo_limit_x", UI_ITEM_R_TOGGLE, NULL, 0);
subcol = uiLayoutColumn(col, 1);
- uiLayoutSetActive(subcol, RNA_boolean_get(ptr, "servo_limit_x")==1);
+ uiLayoutSetActive(subcol, RNA_boolean_get(ptr, "use_servo_limit_x")==1);
uiItemR(subcol, ptr, "force_max_x", 0, NULL, 0);
uiItemR(subcol, ptr, "force_min_x", 0, NULL, 0);
col = uiLayoutColumn(row, 0);
- uiItemR(col, ptr, "servo_limit_y", UI_ITEM_R_TOGGLE, NULL, 0);
+ uiItemR(col, ptr, "use_servo_limit_y", UI_ITEM_R_TOGGLE, NULL, 0);
subcol = uiLayoutColumn(col, 1);
- uiLayoutSetActive(subcol, RNA_boolean_get(ptr, "servo_limit_y")==1);
+ uiLayoutSetActive(subcol, RNA_boolean_get(ptr, "use_servo_limit_y")==1);
uiItemR(subcol, ptr, "force_max_y", 0, NULL, 0);
uiItemR(subcol, ptr, "force_min_y", 0, NULL, 0);
col = uiLayoutColumn(row, 0);
- uiItemR(col, ptr, "servo_limit_z", UI_ITEM_R_TOGGLE, NULL, 0);
+ uiItemR(col, ptr, "use_servo_limit_z", UI_ITEM_R_TOGGLE, NULL, 0);
subcol = uiLayoutColumn(col, 1);
- uiLayoutSetActive(subcol, RNA_boolean_get(ptr, "servo_limit_z")==1);
+ uiLayoutSetActive(subcol, RNA_boolean_get(ptr, "use_servo_limit_z")==1);
uiItemR(subcol, ptr, "force_max_z", 0, NULL, 0);
uiItemR(subcol, ptr, "force_min_z", 0, NULL, 0);
@@ -4107,8 +4103,8 @@ static void draw_actuator_parent(uiLayout *layout, PointerRNA *ptr)
uiItemR(layout, ptr, "object", 0, NULL, 0);
row = uiLayoutRow(layout, 0);
- uiItemR(row, ptr, "compound", 0, NULL, 0);
- uiItemR(row, ptr, "ghost", 0, NULL, 0);
+ uiItemR(row, ptr, "use_compound", 0, NULL, 0);
+ uiItemR(row, ptr, "use_ghost", 0, NULL, 0);
}
static void draw_actuator_property(uiLayout *layout, PointerRNA *ptr)
@@ -4173,7 +4169,7 @@ static void draw_actuator_random(uiLayout *layout, PointerRNA *ptr)
switch (RNA_enum_get(ptr, "distribution")){
case ACT_RANDOM_BOOL_CONST:
- uiItemR(row, ptr, "always_true", UI_ITEM_R_TOGGLE, NULL, 0);
+ uiItemR(row, ptr, "use_always_true", UI_ITEM_R_TOGGLE, NULL, 0);
break;
case ACT_RANDOM_BOOL_UNIFORM:
@@ -4249,7 +4245,7 @@ static void draw_actuator_shape_action(uiLayout *layout, PointerRNA *ptr)
row= uiLayoutRow(layout, 0);
uiItemR(row, ptr, "mode", 0, "", 0);
uiItemR(row, ptr, "action", 0, NULL, 0);
- uiItemR(row, ptr, "continue_last_frame", 0, NULL, 0);
+ uiItemR(row, ptr, "use_continue_last_frame", 0, NULL, 0);
row= uiLayoutRow(layout, 0);
if((RNA_enum_get(ptr, "mode") == ACT_ACTION_FROM_PROP))
@@ -4261,7 +4257,7 @@ static void draw_actuator_shape_action(uiLayout *layout, PointerRNA *ptr)
}
row= uiLayoutRow(layout, 0);
- uiItemR(row, ptr, "blendin", 0, NULL, 0);
+ uiItemR(row, ptr, "frame_blend_in", 0, NULL, 0);
uiItemR(row, ptr, "priority", 0, NULL, 0);
row= uiLayoutRow(layout, 0);
@@ -4288,18 +4284,18 @@ static void draw_actuator_sound(uiLayout *layout, PointerRNA *ptr, bContext *C)
uiItemR(row, ptr, "volume", 0, NULL, 0);
uiItemR(row, ptr, "pitch", 0, NULL, 0);
- uiItemR(layout, ptr, "enable_sound_3d", 0, NULL, 0);
+ uiItemR(layout, ptr, "use_sound_3d", 0, NULL, 0);
col = uiLayoutColumn(layout, 0);
- uiLayoutSetActive(col, RNA_boolean_get(ptr, "enable_sound_3d")==1);
+ uiLayoutSetActive(col, RNA_boolean_get(ptr, "use_sound_3d")==1);
row = uiLayoutRow(col, 0);
- uiItemR(row, ptr, "minimum_gain_3d", 0, NULL, 0);
- uiItemR(row, ptr, "maximum_gain_3d", 0, NULL, 0);
+ uiItemR(row, ptr, "gain_3d_min", 0, NULL, 0);
+ uiItemR(row, ptr, "gain_3d_max", 0, NULL, 0);
row = uiLayoutRow(col, 0);
- uiItemR(row, ptr, "reference_distance_3d", 0, NULL, 0);
- uiItemR(row, ptr, "max_distance_3d", 0, NULL, 0);
+ uiItemR(row, ptr, "distance_3d_reference", 0, NULL, 0);
+ uiItemR(row, ptr, "distance_3d_max", 0, NULL, 0);
row = uiLayoutRow(col, 0);
uiItemR(row, ptr, "rolloff_factor_3d", 0, NULL, 0);
@@ -4320,7 +4316,7 @@ static void draw_actuator_state(uiLayout *layout, PointerRNA *ptr)
split = uiLayoutSplit(layout, 0.35, 0);
uiItemR(split, ptr, "operation", 0, NULL, 0);
- uiTemplateLayers(split, ptr, "state", &settings_ptr, "used_state", 0);
+ uiTemplateLayers(split, ptr, "states", &settings_ptr, "used_states", 0);
}
static void draw_actuator_visibility(uiLayout *layout, PointerRNA *ptr)
@@ -4328,9 +4324,9 @@ static void draw_actuator_visibility(uiLayout *layout, PointerRNA *ptr)
uiLayout *row;
row = uiLayoutRow(layout, 0);
- uiItemR(row, ptr, "visible", 0, NULL, 0);
- uiItemR(row, ptr, "occlusion", 0, NULL, 0);
- uiItemR(row, ptr, "children", 0, NULL, 0);
+ uiItemR(row, ptr, "use_visible", 0, NULL, 0);
+ uiItemR(row, ptr, "use_occlusion", 0, NULL, 0);
+ uiItemR(row, ptr, "apply_to_children", 0, NULL, 0);
}
static void draw_actuator_steering(uiLayout *layout, PointerRNA *ptr)
@@ -4380,7 +4376,7 @@ void draw_brick_actuator(uiLayout *layout, PointerRNA *ptr, bContext *C)
{
uiLayout *box;
- if (!RNA_boolean_get(ptr, "expanded"))
+ if (!RNA_boolean_get(ptr, "show_expanded"))
return;
box = uiLayoutBox(layout);
@@ -4519,9 +4515,9 @@ static void logic_buttons_new(bContext *C, ARegion *ar)
uiDefBlockBut(block, controller_menu, NULL, "Controllers", xco-10, yco, 300, UI_UNIT_Y, ""); /* replace this with uiLayout stuff later */
- uiItemR(row, &logic_ptr, "controllers_show_selected_objects", 0, "Sel", 0);
- uiItemR(row, &logic_ptr, "controllers_show_active_objects", 0, "Act", 0);
- uiItemR(row, &logic_ptr, "controllers_show_linked_controller", 0, "Link", 0);
+ uiItemR(row, &logic_ptr, "show_controllers_selected_objects", 0, "Sel", 0);
+ uiItemR(row, &logic_ptr, "show_controllers_active_object", 0, "Act", 0);
+ uiItemR(row, &logic_ptr, "show_controllers_linked_controller", 0, "Link", 0);
for(a=0; a<count; a++) {
bController *cont;
@@ -4531,7 +4527,7 @@ static void logic_buttons_new(bContext *C, ARegion *ar)
ob= (Object *)idar[a];
- /* only draw the controller common header if "visible" */
+ /* only draw the controller common header if "use_visible" */
if( (ob->scavisflag & OB_VIS_CONT) == 0) continue;
/* Drawing the Controller Header common to all Selected Objects */
@@ -4558,14 +4554,14 @@ static void logic_buttons_new(bContext *C, ARegion *ar)
subsplit= uiLayoutSplit(split, 0.85, 0);
col= uiLayoutColumn(subsplit, 0);
row= uiLayoutRow(col, 0);
- uiLayoutSetActive(row, RNA_boolean_get(&settings_ptr, "all_states")==0);
- uiTemplateLayers(row, &settings_ptr, "visible_state", &settings_ptr, "used_state", 0);
+ uiLayoutSetActive(row, RNA_boolean_get(&settings_ptr, "use_all_states")==0);
+ uiTemplateLayers(row, &settings_ptr, "states_visible", &settings_ptr, "used_states", 0);
row= uiLayoutRow(col, 0);
- uiTemplateLayers(row, &settings_ptr, "initial_state", &settings_ptr, "used_state", 0);
+ uiTemplateLayers(row, &settings_ptr, "states_initial", &settings_ptr, "used_states", 0);
col= uiLayoutColumn(subsplit, 0);
- uiItemR(col, &settings_ptr, "all_states", UI_ITEM_R_TOGGLE, NULL, 0);
- uiItemR(col, &settings_ptr, "debug_state", 0, "", 0);
+ uiItemR(col, &settings_ptr, "use_all_states", UI_ITEM_R_TOGGLE, NULL, 0);
+ uiItemR(col, &settings_ptr, "show_debug_state", 0, "", 0);
}
/* End of Drawing the Controller Header common to all Selected Objects */
@@ -4622,10 +4618,10 @@ static void logic_buttons_new(bContext *C, ARegion *ar)
uiDefBlockBut(block, sensor_menu, NULL, "Sensors", xco-10, yco, 300, UI_UNIT_Y, ""); /* replace this with uiLayout stuff later */
- uiItemR(row, &logic_ptr, "sensors_show_selected_objects", 0, "Sel", 0);
- uiItemR(row, &logic_ptr, "sensors_show_active_objects", 0, "Act", 0);
- uiItemR(row, &logic_ptr, "sensors_show_linked_controller", 0, "Link", 0);
- uiItemR(row, &logic_ptr, "sensors_show_active_states", 0, "State", 0);
+ uiItemR(row, &logic_ptr, "show_sensors_selected_objects", 0, "Sel", 0);
+ uiItemR(row, &logic_ptr, "show_sensors_active_object", 0, "Act", 0);
+ uiItemR(row, &logic_ptr, "show_sensors_linked_controller", 0, "Link", 0);
+ uiItemR(row, &logic_ptr, "show_sensors_active_states", 0, "State", 0);
for(a=0; a<count; a++) {
bSensor *sens;
@@ -4633,7 +4629,7 @@ static void logic_buttons_new(bContext *C, ARegion *ar)
ob= (Object *)idar[a];
- /* only draw the sensor common header if "visible" */
+ /* only draw the sensor common header if "use_visible" */
if((ob->scavisflag & OB_VIS_SENS) == 0) continue;
row = uiLayoutRow(layout, 1);
@@ -4688,10 +4684,10 @@ static void logic_buttons_new(bContext *C, ARegion *ar)
uiDefBlockBut(block, actuator_menu, NULL, "Actuators", xco-10, yco, 300, UI_UNIT_Y, ""); /* replace this with uiLayout stuff later */
- uiItemR(row, &logic_ptr, "actuators_show_selected_objects", 0, "Sel", 0);
- uiItemR(row, &logic_ptr, "actuators_show_active_objects", 0, "Act", 0);
- uiItemR(row, &logic_ptr, "actuators_show_linked_controller", 0, "Link", 0);
- uiItemR(row, &logic_ptr, "actuators_show_active_states", 0, "State", 0);
+ uiItemR(row, &logic_ptr, "show_actuators_selected_objects", 0, "Sel", 0);
+ uiItemR(row, &logic_ptr, "show_actuators_active_object", 0, "Act", 0);
+ uiItemR(row, &logic_ptr, "show_actuators_linked_controller", 0, "Link", 0);
+ uiItemR(row, &logic_ptr, "show_actuators_active_states", 0, "State", 0);
for(a=0; a<count; a++) {
bActuator *act;
@@ -4699,7 +4695,7 @@ static void logic_buttons_new(bContext *C, ARegion *ar)
ob= (Object *)idar[a];
- /* only draw the actuator common header if "visible" */
+ /* only draw the actuator common header if "use_visible" */
if( (ob->scavisflag & OB_VIS_ACT) == 0) continue;
row = uiLayoutRow(layout, 1);
diff --git a/source/blender/editors/space_logic/space_logic.c b/source/blender/editors/space_logic/space_logic.c
index 3f11c3e6bae..01af324334b 100644
--- a/source/blender/editors/space_logic/space_logic.c
+++ b/source/blender/editors/space_logic/space_logic.c
@@ -37,12 +37,10 @@
#include "BKE_context.h"
#include "BKE_screen.h"
-#include "BKE_utildefines.h"
#include "ED_screen.h"
#include "BIF_gl.h"
-#include "BIF_glutil.h"
#include "WM_api.h"
diff --git a/source/blender/editors/space_nla/CMakeLists.txt b/source/blender/editors/space_nla/CMakeLists.txt
index be8020b0793..6bb656cba8c 100644
--- a/source/blender/editors/space_nla/CMakeLists.txt
+++ b/source/blender/editors/space_nla/CMakeLists.txt
@@ -22,13 +22,13 @@
FILE(GLOB SRC *.c)
SET(INC
+ ../include
../../blenkernel
../../blenlib
- ../include
- ../../../../intern/guardedalloc
../../makesdna
../../makesrna
../../windowmanager
+ ../../../../intern/guardedalloc
)
BLENDERLIB(bf_editor_space_nla "${SRC}" "${INC}")
diff --git a/source/blender/editors/space_nla/Makefile b/source/blender/editors/space_nla/Makefile
index d7c9477dc83..fd940081c16 100644
--- a/source/blender/editors/space_nla/Makefile
+++ b/source/blender/editors/space_nla/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2007 Blender Foundation
# All rights reserved.
diff --git a/source/blender/editors/space_nla/nla_buttons.c b/source/blender/editors/space_nla/nla_buttons.c
index ef46f8a274d..a728cc900c2 100644
--- a/source/blender/editors/space_nla/nla_buttons.c
+++ b/source/blender/editors/space_nla/nla_buttons.c
@@ -40,21 +40,10 @@
#include "BLI_editVert.h"
#include "BLI_rand.h"
-#include "BKE_animsys.h"
#include "BKE_nla.h"
-#include "BKE_action.h"
#include "BKE_context.h"
-#include "BKE_curve.h"
-#include "BKE_customdata.h"
-#include "BKE_depsgraph.h"
-#include "BKE_fcurve.h"
-#include "BKE_object.h"
-#include "BKE_global.h"
-#include "BKE_scene.h"
#include "BKE_screen.h"
-#include "BKE_utildefines.h"
-#include "BIF_gl.h"
#include "WM_api.h"
#include "WM_types.h"
@@ -245,7 +234,7 @@ static void nla_panel_animdata (const bContext *C, Panel *pa)
/* blending */
row= uiLayoutRow(layout, 1);
- uiItemR(row, &adt_ptr, "action_blending", 0, NULL, 0);
+ uiItemR(row, &adt_ptr, "action_blend_type", 0, NULL, 0);
/* influence */
row= uiLayoutRow(layout, 1);
@@ -304,26 +293,26 @@ static void nla_panel_properties(const bContext *C, Panel *pa)
/* blending */
row= uiLayoutRow(layout, 1);
- uiItemR(row, &strip_ptr, "blending", 0, NULL, 0);
+ uiItemR(row, &strip_ptr, "blend_type", 0, NULL, 0);
/* blend in/out + autoblending
* - blend in/out can only be set when autoblending is off
*/
column= uiLayoutColumn(layout, 1);
- uiLayoutSetActive(column, RNA_boolean_get(&strip_ptr, "animated_influence")==0);
- uiItemR(column, &strip_ptr, "auto_blending", 0, NULL, 0); // XXX as toggle?
+ uiLayoutSetActive(column, RNA_boolean_get(&strip_ptr, "use_animated_influence")==0);
+ uiItemR(column, &strip_ptr, "use_auto_blend", 0, NULL, 0); // XXX as toggle?
subcol= uiLayoutColumn(column, 1);
- uiLayoutSetActive(subcol, RNA_boolean_get(&strip_ptr, "auto_blending")==0);
+ uiLayoutSetActive(subcol, RNA_boolean_get(&strip_ptr, "use_auto_blend")==0);
uiItemR(subcol, &strip_ptr, "blend_in", 0, NULL, 0);
uiItemR(subcol, &strip_ptr, "blend_out", 0, NULL, 0);
/* settings */
column= uiLayoutColumn(layout, 1);
- uiLayoutSetActive(column, !(RNA_boolean_get(&strip_ptr, "animated_influence") || RNA_boolean_get(&strip_ptr, "animated_time")));
+ uiLayoutSetActive(column, !(RNA_boolean_get(&strip_ptr, "use_animated_influence") || RNA_boolean_get(&strip_ptr, "use_animated_time")));
uiItemL(column, "Playback Settings:", 0);
uiItemR(column, &strip_ptr, "mute", 0, NULL, 0);
- uiItemR(column, &strip_ptr, "reversed", 0, NULL, 0);
+ uiItemR(column, &strip_ptr, "use_reverse", 0, NULL, 0);
}
@@ -357,7 +346,7 @@ static void nla_panel_actclip(const bContext *C, Panel *pa)
/* action usage */
column= uiLayoutColumn(layout, 1);
- uiLayoutSetActive(column, RNA_boolean_get(&strip_ptr, "animated_time")==0);
+ uiLayoutSetActive(column, RNA_boolean_get(&strip_ptr, "use_animated_time")==0);
uiItemL(column, "Playback Settings:", 0);
uiItemR(column, &strip_ptr, "scale", 0, NULL, 0);
uiItemR(column, &strip_ptr, "repeat", 0, NULL, 0);
@@ -379,21 +368,21 @@ static void nla_panel_evaluation(const bContext *C, Panel *pa)
uiBlockSetHandleFunc(block, do_nla_region_buttons, NULL);
column= uiLayoutColumn(layout, 1);
- uiItemR(column, &strip_ptr, "animated_influence", 0, NULL, 0);
+ uiItemR(column, &strip_ptr, "use_animated_influence", 0, NULL, 0);
subcolumn= uiLayoutColumn(column, 1);
- uiLayoutSetEnabled(subcolumn, RNA_boolean_get(&strip_ptr, "animated_influence"));
+ uiLayoutSetEnabled(subcolumn, RNA_boolean_get(&strip_ptr, "use_animated_influence"));
uiItemR(subcolumn, &strip_ptr, "influence", 0, NULL, 0);
column= uiLayoutColumn(layout, 1);
subrow= uiLayoutRow(column, 0);
- uiItemR(subrow, &strip_ptr, "animated_time", 0, NULL, 0);
- uiItemR(subrow, &strip_ptr, "animated_time_cyclic", 0, NULL, 0);
+ uiItemR(subrow, &strip_ptr, "use_animated_time", 0, NULL, 0);
+ uiItemR(subrow, &strip_ptr, "use_animated_time_cyclic", 0, NULL, 0);
subcolumn= uiLayoutColumn(column, 1);
subrow= uiLayoutRow(subcolumn, 0);
- uiLayoutSetEnabled(subrow, RNA_boolean_get(&strip_ptr, "animated_time"));
+ uiLayoutSetEnabled(subrow, RNA_boolean_get(&strip_ptr, "use_animated_time"));
uiItemR(subcolumn, &strip_ptr, "strip_time", 0, NULL, 0);
}
diff --git a/source/blender/editors/space_nla/nla_channels.c b/source/blender/editors/space_nla/nla_channels.c
index cf98decb825..b00cba676d0 100644
--- a/source/blender/editors/space_nla/nla_channels.c
+++ b/source/blender/editors/space_nla/nla_channels.c
@@ -35,7 +35,6 @@
#include "DNA_object_types.h"
#include "DNA_scene_types.h"
-#include "MEM_guardedalloc.h"
#include "BLI_blenlib.h"
#include "BLI_math.h"
@@ -46,7 +45,6 @@
#include "BKE_context.h"
#include "BKE_global.h"
#include "BKE_screen.h"
-#include "BKE_utildefines.h"
#include "ED_anim_api.h"
#include "ED_keyframes_edit.h"
@@ -385,20 +383,22 @@ static int nlaedit_add_tracks_exec (bContext *C, wmOperator *op)
/* add tracks... */
for (ale= anim_data.first; ale; ale= ale->next) {
- NlaTrack *nlt= (NlaTrack *)ale->data;
- AnimData *adt= ale->adt;
-
- /* check if just adding a new track above this one,
- * or whether we're adding a new one to the top of the stack that this one belongs to
- */
- if (above_sel) {
- /* just add a new one above this one */
- add_nlatrack(adt, nlt);
- }
- else if ((lastAdt == NULL) || (adt != lastAdt)) {
- /* add one track to the top of the owning AnimData's stack, then don't add anymore to this stack */
- add_nlatrack(adt, NULL);
- lastAdt= adt;
+ if(ale->type == ANIMTYPE_NLATRACK) {
+ NlaTrack *nlt= (NlaTrack *)ale->data;
+ AnimData *adt= ale->adt;
+
+ /* check if just adding a new track above this one,
+ * or whether we're adding a new one to the top of the stack that this one belongs to
+ */
+ if (above_sel) {
+ /* just add a new one above this one */
+ add_nlatrack(adt, nlt);
+ }
+ else if ((lastAdt == NULL) || (adt != lastAdt)) {
+ /* add one track to the top of the owning AnimData's stack, then don't add anymore to this stack */
+ add_nlatrack(adt, NULL);
+ lastAdt= adt;
+ }
}
}
@@ -451,11 +451,13 @@ static int nlaedit_delete_tracks_exec (bContext *C, wmOperator *op)
/* delete tracks */
for (ale= anim_data.first; ale; ale= ale->next) {
- NlaTrack *nlt= (NlaTrack *)ale->data;
- AnimData *adt= ale->adt;
-
- /* call delete on this track - deletes all strips too */
- free_nlatrack(&adt->nla_tracks, nlt);
+ if(ale->type == ANIMTYPE_NLATRACK) {
+ NlaTrack *nlt= (NlaTrack *)ale->data;
+ AnimData *adt= ale->adt;
+
+ /* call delete on this track - deletes all strips too */
+ free_nlatrack(&adt->nla_tracks, nlt);
+ }
}
/* free temp data */
diff --git a/source/blender/editors/space_nla/nla_draw.c b/source/blender/editors/space_nla/nla_draw.c
index 049337d688c..ef9c46c8042 100644
--- a/source/blender/editors/space_nla/nla_draw.c
+++ b/source/blender/editors/space_nla/nla_draw.c
@@ -37,19 +37,16 @@
#include "DNA_space_types.h"
#include "DNA_windowmanager_types.h"
-#include "MEM_guardedalloc.h"
#include "BLI_blenlib.h"
#include "BLI_math.h"
#include "BLI_rand.h"
#include "BLI_dlrbTree.h"
-#include "BKE_animsys.h"
#include "BKE_fcurve.h"
#include "BKE_nla.h"
#include "BKE_context.h"
#include "BKE_screen.h"
-#include "BKE_utildefines.h"
#include "ED_anim_api.h"
#include "ED_keyframes_draw.h"
@@ -67,9 +64,6 @@
#include "nla_intern.h" // own include
-/* XXX */
-extern void gl_round_box(int mode, float minx, float miny, float maxx, float maxy, float rad);
-extern void gl_round_box_shade(int mode, float minx, float miny, float maxx, float maxy, float rad, float shadetop, float shadedown);
/* *********************************************** */
/* Strips */
@@ -350,7 +344,7 @@ static void nla_draw_strip (SpaceNla *snla, AnimData *adt, NlaTrack *nlt, NlaStr
/* draw 'inside' of strip itself */
glColor3fv(color);
uiSetRoundBox(15); /* all corners rounded */
- gl_round_box_shade(GL_POLYGON, strip->start, yminc, strip->end, ymaxc, 0.0, 0.5, 0.1);
+ uiDrawBoxShade(GL_POLYGON, strip->start, yminc, strip->end, ymaxc, 0.0, 0.5, 0.1);
/* draw strip's control 'curves'
@@ -376,7 +370,7 @@ static void nla_draw_strip (SpaceNla *snla, AnimData *adt, NlaTrack *nlt, NlaStr
setlinestyle(4);
/* draw outline */
- gl_round_box_shade(GL_LINE_LOOP, strip->start, yminc, strip->end, ymaxc, 0.0, 0.0, 0.1);
+ uiDrawBoxShade(GL_LINE_LOOP, strip->start, yminc, strip->end, ymaxc, 0.0, 0.0, 0.1);
/* if action-clip strip, draw lines delimiting repeats too (in the same color as outline) */
if ((strip->type == NLASTRIP_TYPE_CLIP) && IS_EQ(strip->repeat, 1.0f)==0) {
@@ -711,7 +705,7 @@ static void draw_nla_channel_list_gl (bAnimContext *ac, ListBase *anim_data, Vie
/* draw slightly shifted up vertically to look like it has more separtion from other channels,
* but we then need to slightly shorten it so that it doesn't look like it overlaps
*/
- gl_round_box(GL_POLYGON, x+offset, yminc+NLACHANNEL_SKIP, (float)v2d->cur.xmax, ymaxc+NLACHANNEL_SKIP-1, 8);
+ uiDrawBox(GL_POLYGON, x+offset, yminc+NLACHANNEL_SKIP, (float)v2d->cur.xmax, ymaxc+NLACHANNEL_SKIP-1, 8);
/* clear group value, otherwise we cause errors... */
group = 0;
diff --git a/source/blender/editors/space_nla/nla_edit.c b/source/blender/editors/space_nla/nla_edit.c
index 38c6ecdca22..247987cda9f 100644
--- a/source/blender/editors/space_nla/nla_edit.c
+++ b/source/blender/editors/space_nla/nla_edit.c
@@ -39,16 +39,13 @@
#include "BLI_math.h"
#include "BLI_rand.h"
-#include "BKE_animsys.h"
#include "BKE_action.h"
#include "BKE_fcurve.h"
#include "BKE_nla.h"
#include "BKE_context.h"
-#include "BKE_library.h"
#include "BKE_main.h"
#include "BKE_report.h"
#include "BKE_screen.h"
-#include "BKE_utildefines.h"
#include "ED_anim_api.h"
#include "ED_keyframes_edit.h"
diff --git a/source/blender/editors/space_nla/nla_ops.c b/source/blender/editors/space_nla/nla_ops.c
index f1974a8ec4f..85a169f2bb0 100644
--- a/source/blender/editors/space_nla/nla_ops.c
+++ b/source/blender/editors/space_nla/nla_ops.c
@@ -31,16 +31,12 @@
#include "DNA_scene_types.h"
-#include "MEM_guardedalloc.h"
#include "BLI_blenlib.h"
#include "BLI_math.h"
#include "BLI_rand.h"
-#include "BKE_animsys.h"
-#include "BKE_nla.h"
#include "BKE_context.h"
-#include "BKE_report.h"
#include "BKE_screen.h"
#include "ED_anim_api.h"
diff --git a/source/blender/editors/space_nla/nla_select.c b/source/blender/editors/space_nla/nla_select.c
index 55463580115..f49897e79fe 100644
--- a/source/blender/editors/space_nla/nla_select.c
+++ b/source/blender/editors/space_nla/nla_select.c
@@ -38,10 +38,8 @@
#include "BLI_math.h"
#include "BLI_rand.h"
-#include "BKE_animsys.h"
#include "BKE_nla.h"
#include "BKE_context.h"
-#include "BKE_report.h"
#include "BKE_screen.h"
#include "ED_anim_api.h"
diff --git a/source/blender/editors/space_nla/space_nla.c b/source/blender/editors/space_nla/space_nla.c
index 64933e3c11a..92c5ef6c410 100644
--- a/source/blender/editors/space_nla/space_nla.c
+++ b/source/blender/editors/space_nla/space_nla.c
@@ -38,15 +38,10 @@
#include "BLI_math.h"
#include "BLI_rand.h"
-#include "BKE_animsys.h"
-#include "BKE_action.h"
-#include "BKE_nla.h"
-#include "BKE_colortools.h"
#include "BKE_context.h"
#include "BKE_global.h"
#include "BKE_main.h"
#include "BKE_screen.h"
-#include "BKE_utildefines.h"
#include "ED_anim_api.h"
#include "ED_markers.h"
diff --git a/source/blender/editors/space_node/CMakeLists.txt b/source/blender/editors/space_node/CMakeLists.txt
index 0c8f9fc1ee2..ae298a611e9 100644
--- a/source/blender/editors/space_node/CMakeLists.txt
+++ b/source/blender/editors/space_node/CMakeLists.txt
@@ -22,21 +22,21 @@
FILE(GLOB SRC *.c)
SET(INC
+ ../include
../../blenkernel
../../blenlib
../../imbuf
- ../include
- ../../../../intern/guardedalloc
- ../../../../intern/opennl/extern
../../makesdna
../../makesrna
../../nodes
- ../../render/extern/include
../../windowmanager
+ ../../render/extern/include
+ ../../../../intern/guardedalloc
+ ../../../../intern/opennl/extern
)
IF(WIN32)
- SET(INC ${INC} ${PTHREADS_INC})
+ LIST(APPEND INC ${PTHREADS_INC})
ENDIF(WIN32)
BLENDERLIB(bf_editor_space_node "${SRC}" "${INC}")
diff --git a/source/blender/editors/space_node/Makefile b/source/blender/editors/space_node/Makefile
index 5bd6e95e28c..6c12149a43f 100644
--- a/source/blender/editors/space_node/Makefile
+++ b/source/blender/editors/space_node/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2007 Blender Foundation
# All rights reserved.
diff --git a/source/blender/editors/space_node/SConscript b/source/blender/editors/space_node/SConscript
index fd0dfe83852..636b247d44c 100644
--- a/source/blender/editors/space_node/SConscript
+++ b/source/blender/editors/space_node/SConscript
@@ -9,17 +9,17 @@ incs += ' ../../windowmanager #intern/guardedalloc #extern/glew/include'
defs = []
cf = []
if env['OURPLATFORM'] in ('win32-vc', 'win64-vc'):
- #cf.append('/WX')
- pass
+ #cf.append('/WX')
+ pass
if env['CC'] == 'gcc':
- #cf.append('-Werror')
- pass
+ #cf.append('-Werror')
+ pass
if env['OURPLATFORM'] == 'linux2':
- cflags='-pthread'
- incs += ' ../../../extern/binreloc/include'
+ cflags='-pthread'
+ incs += ' ../../../extern/binreloc/include'
if env['OURPLATFORM'] in ('win32-vc', 'win32-mingw', 'linuxcross', 'win64-vc'):
- incs += ' ' + env['BF_PTHREADS_INC']
+ incs += ' ' + env['BF_PTHREADS_INC']
env.BlenderLib ( 'bf_editors_space_node', sources, Split(incs), defs, libtype=['core'], priority=[55], compileflags=cf )
diff --git a/source/blender/editors/space_node/drawnode.c b/source/blender/editors/space_node/drawnode.c
index 171f56c63fb..5e0926da216 100644
--- a/source/blender/editors/space_node/drawnode.c
+++ b/source/blender/editors/space_node/drawnode.c
@@ -43,16 +43,9 @@
#include "BKE_context.h"
#include "BKE_curve.h"
-#include "BKE_global.h"
#include "BKE_image.h"
#include "BKE_library.h"
#include "BKE_main.h"
-#include "BKE_material.h"
-#include "BKE_node.h"
-#include "BKE_object.h"
-#include "BKE_texture.h"
-#include "BKE_text.h"
-#include "BKE_utildefines.h"
#include "CMP_node.h"
#include "SHD_node.h"
@@ -81,7 +74,7 @@
void node_buts_group(uiLayout *layout, bContext *C, PointerRNA *ptr)
{
- uiTemplateIDBrowse(layout, C, ptr, "nodetree", NULL, NULL, "");
+ uiTemplateIDBrowse(layout, C, ptr, "node_tree", NULL, NULL, "");
}
static void node_buts_value(uiLayout *layout, bContext *C, PointerRNA *ptr)
@@ -120,7 +113,7 @@ static void node_buts_mix_rgb(uiLayout *layout, bContext *C, PointerRNA *ptr)
row= uiLayoutRow(layout, 1);
uiItemR(row, ptr, "blend_type", 0, "", 0);
if(ntree->type == NTREE_COMPOSIT)
- uiItemR(row, ptr, "alpha", 0, "", ICON_IMAGE_RGB_ALPHA);
+ uiItemR(row, ptr, "use_alpha", 0, "", ICON_IMAGE_RGB_ALPHA);
}
static void node_buts_time(uiLayout *layout, bContext *C, PointerRNA *ptr)
@@ -141,8 +134,8 @@ static void node_buts_time(uiLayout *layout, bContext *C, PointerRNA *ptr)
uiTemplateCurveMapping(layout, ptr, "curve", 's', 0, 0);
row= uiLayoutRow(layout, 1);
- uiItemR(row, ptr, "start", 0, "Sta", 0);
- uiItemR(row, ptr, "end", 0, "End", 0);
+ uiItemR(row, ptr, "frame_start", 0, "Sta", 0);
+ uiItemR(row, ptr, "frame_end", 0, "End", 0);
}
static void node_buts_colorramp(uiLayout *layout, bContext *C, PointerRNA *ptr)
@@ -314,8 +307,8 @@ static void node_shader_buts_material(uiLayout *layout, bContext *C, PointerRNA
if(!node->id) return;
col= uiLayoutColumn(layout, 0);
- uiItemR(col, ptr, "diffuse", 0, NULL, 0);
- uiItemR(col, ptr, "specular", 0, NULL, 0);
+ uiItemR(col, ptr, "use_diffuse", 0, NULL, 0);
+ uiItemR(col, ptr, "use_specular", 0, NULL, 0);
uiItemR(col, ptr, "invert_normal", 0, NULL, 0);
}
@@ -336,12 +329,12 @@ static void node_shader_buts_mapping(uiLayout *layout, bContext *C, PointerRNA *
uiItemR(row, ptr, "scale", 0, "", 0);
row= uiLayoutRow(layout, 1);
- uiItemR(row, ptr, "clamp_minimum", 0, "Min", 0);
- uiItemR(row, ptr, "minimum", 0, "", 0);
+ uiItemR(row, ptr, "use_min", 0, "Min", 0);
+ uiItemR(row, ptr, "min", 0, "", 0);
row= uiLayoutRow(layout, 1);
- uiItemR(row, ptr, "clamp_maximum", 0, "Max", 0);
- uiItemR(row, ptr, "maximum", 0, "", 0);
+ uiItemR(row, ptr, "use_max", 0, "Max", 0);
+ uiItemR(row, ptr, "max", 0, "", 0);
}
@@ -485,11 +478,11 @@ static void node_composit_buts_image(uiLayout *layout, bContext *C, PointerRNA *
if (ELEM(RNA_enum_get(&imaptr, "source"), IMA_SRC_SEQUENCE, IMA_SRC_MOVIE)) {
col= uiLayoutColumn(layout, 1);
- uiItemR(col, ptr, "frames", 0, NULL, 0);
- uiItemR(col, ptr, "start", 0, NULL, 0);
- uiItemR(col, ptr, "offset", 0, NULL, 0);
- uiItemR(col, ptr, "cyclic", 0, NULL, 0);
- uiItemR(col, ptr, "auto_refresh", UI_ITEM_R_ICON_ONLY, NULL, 0);
+ uiItemR(col, ptr, "frame_duration", 0, NULL, 0);
+ uiItemR(col, ptr, "frame_start", 0, NULL, 0);
+ uiItemR(col, ptr, "frame_offset", 0, NULL, 0);
+ uiItemR(col, ptr, "use_cyclic", 0, NULL, 0);
+ uiItemR(col, ptr, "use_auto_refresh", UI_ITEM_R_ICON_ONLY, NULL, 0);
}
col= uiLayoutColumn(layout, 0);
@@ -539,19 +532,19 @@ static void node_composit_buts_blur(uiLayout *layout, bContext *C, PointerRNA *p
uiItemR(col, ptr, "filter_type", 0, "", 0);
if (RNA_enum_get(ptr, "filter_type")!= R_FILTER_FAST_GAUSS) {
- uiItemR(col, ptr, "bokeh", 0, NULL, 0);
- uiItemR(col, ptr, "gamma", 0, NULL, 0);
+ uiItemR(col, ptr, "use_bokeh", 0, NULL, 0);
+ uiItemR(col, ptr, "use_gamma_correction", 0, NULL, 0);
}
- uiItemR(col, ptr, "relative", 0, NULL, 0);
+ uiItemR(col, ptr, "use_relative", 0, NULL, 0);
col= uiLayoutColumn(layout, 1);
- if (RNA_boolean_get(ptr, "relative")) {
+ if (RNA_boolean_get(ptr, "use_relative")) {
uiItemR(col, ptr, "factor_x", 0, "X", 0);
uiItemR(col, ptr, "factor_y", 0, "Y", 0);
}
else {
- uiItemR(col, ptr, "sizex", 0, "X", 0);
- uiItemR(col, ptr, "sizey", 0, "Y", 0);
+ uiItemR(col, ptr, "size_x", 0, "X", 0);
+ uiItemR(col, ptr, "size_y", 0, "Y", 0);
}
}
@@ -560,7 +553,7 @@ static void node_composit_buts_dblur(uiLayout *layout, bContext *C, PointerRNA *
uiLayout *col;
uiItemR(layout, ptr, "iterations", 0, NULL, 0);
- uiItemR(layout, ptr, "wrap", 0, NULL, 0);
+ uiItemR(layout, ptr, "use_wrap", 0, NULL, 0);
col= uiLayoutColumn(layout, 1);
uiItemL(col, "Center:", 0);
@@ -598,19 +591,19 @@ static void node_composit_buts_defocus(uiLayout *layout, bContext *C, PointerRNA
uiItemR(col, ptr, "bokeh", 0, "", 0);
uiItemR(col, ptr, "angle", 0, NULL, 0);
- uiItemR(layout, ptr, "gamma_correction", 0, NULL, 0);
+ uiItemR(layout, ptr, "use_gamma_correction", 0, NULL, 0);
col = uiLayoutColumn(layout, 0);
uiLayoutSetActive(col, RNA_boolean_get(ptr, "use_zbuffer")==1);
uiItemR(col, ptr, "f_stop", 0, NULL, 0);
- uiItemR(layout, ptr, "max_blur", 0, NULL, 0);
+ uiItemR(layout, ptr, "blur_max", 0, NULL, 0);
uiItemR(layout, ptr, "threshold", 0, NULL, 0);
col = uiLayoutColumn(layout, 0);
- uiItemR(col, ptr, "preview", 0, NULL, 0);
+ uiItemR(col, ptr, "use_preview", 0, NULL, 0);
sub = uiLayoutColumn(col, 0);
- uiLayoutSetActive(sub, RNA_boolean_get(ptr, "preview"));
+ uiLayoutSetActive(sub, RNA_boolean_get(ptr, "use_preview"));
uiItemR(sub, ptr, "samples", 0, NULL, 0);
col = uiLayoutColumn(layout, 0);
@@ -644,7 +637,7 @@ static void node_composit_buts_glare(uiLayout *layout, bContext *C, PointerRNA *
uiItemR(layout, ptr, "fade", UI_ITEM_R_SLIDER, NULL, 0);
if (RNA_enum_get(ptr, "glare_type")== 0)
- uiItemR(layout, ptr, "rotate_45", 0, NULL, 0);
+ uiItemR(layout, ptr, "use_rotate_45", 0, NULL, 0);
}
if (RNA_enum_get(ptr, "glare_type")== 1) {
uiItemR(layout, ptr, "size", 0, NULL, 0);
@@ -675,12 +668,12 @@ static void node_composit_buts_lensdist(uiLayout *layout, bContext *C, PointerRN
uiLayout *col;
col= uiLayoutColumn(layout, 0);
- uiItemR(col, ptr, "projector", 0, NULL, 0);
+ uiItemR(col, ptr, "use_projector", 0, NULL, 0);
col = uiLayoutColumn(col, 0);
- uiLayoutSetActive(col, RNA_boolean_get(ptr, "projector")==0);
- uiItemR(col, ptr, "jitter", 0, NULL, 0);
- uiItemR(col, ptr, "fit", 0, NULL, 0);
+ uiLayoutSetActive(col, RNA_boolean_get(ptr, "use_projector")==0);
+ uiItemR(col, ptr, "use_jitter", 0, NULL, 0);
+ uiItemR(col, ptr, "use_fit", 0, NULL, 0);
}
static void node_composit_buts_vecblur(uiLayout *layout, bContext *C, PointerRNA *ptr)
@@ -693,10 +686,10 @@ static void node_composit_buts_vecblur(uiLayout *layout, bContext *C, PointerRNA
col= uiLayoutColumn(layout, 1);
uiItemL(col, "Speed:", 0);
- uiItemR(col, ptr, "min_speed", 0, "Min", 0);
- uiItemR(col, ptr, "max_speed", 0, "Max", 0);
+ uiItemR(col, ptr, "speed_min", 0, "Min", 0);
+ uiItemR(col, ptr, "speed_max", 0, "Max", 0);
- uiItemR(layout, ptr, "curved", 0, NULL, 0);
+ uiItemR(layout, ptr, "use_curved", 0, NULL, 0);
}
static void node_composit_buts_filter(uiLayout *layout, bContext *C, PointerRNA *ptr)
@@ -713,13 +706,21 @@ static void node_composit_buts_crop(uiLayout *layout, bContext *C, PointerRNA *p
{
uiLayout *col;
- uiItemR(layout, ptr, "crop_size", 0, NULL, 0);
-
+ uiItemR(layout, ptr, "use_crop_size", 0, NULL, 0);
+ uiItemR(layout, ptr, "relative", 0, NULL, 0);
+
col= uiLayoutColumn(layout, 1);
- uiItemR(col, ptr, "x1", 0, "Left", 0);
- uiItemR(col, ptr, "x2", 0, "Right", 0);
- uiItemR(col, ptr, "y1", 0, "Up", 0);
- uiItemR(col, ptr, "y2", 0, "Down", 0);
+ if (RNA_boolean_get(ptr, "relative")){
+ uiItemR(col, ptr, "rel_min_x", 0, "Left", 0);
+ uiItemR(col, ptr, "rel_max_x", 0, "Right", 0);
+ uiItemR(col, ptr, "rel_min_y", 0, "Up", 0);
+ uiItemR(col, ptr, "rel_max_y", 0, "Down", 0);
+ } else {
+ uiItemR(col, ptr, "min_x", 0, "Left", 0);
+ uiItemR(col, ptr, "max_x", 0, "Right", 0);
+ uiItemR(col, ptr, "min_y", 0, "Up", 0);
+ uiItemR(col, ptr, "max_y", 0, "Down", 0);
+ }
}
static void node_composit_buts_splitviewer(uiLayout *layout, bContext *C, PointerRNA *ptr)
@@ -758,7 +759,7 @@ static void node_composit_buts_alphaover(uiLayout *layout, bContext *C, PointerR
uiLayout *col;
col =uiLayoutColumn(layout, 1);
- uiItemR(col, ptr, "convert_premul", 0, NULL, 0);
+ uiItemR(col, ptr, "use_premultiply", 0, NULL, 0);
uiItemR(col, ptr, "premul", 0, NULL, 0);
}
@@ -767,9 +768,9 @@ static void node_composit_buts_hue_sat(uiLayout *layout, bContext *C, PointerRNA
uiLayout *col;
col =uiLayoutColumn(layout, 0);
- uiItemR(col, ptr, "hue", UI_ITEM_R_SLIDER, NULL, 0);
- uiItemR(col, ptr, "sat", UI_ITEM_R_SLIDER, NULL, 0);
- uiItemR(col, ptr, "val", UI_ITEM_R_SLIDER, NULL, 0);
+ uiItemR(col, ptr, "color_hue", UI_ITEM_R_SLIDER, NULL, 0);
+ uiItemR(col, ptr, "color_saturation", UI_ITEM_R_SLIDER, NULL, 0);
+ uiItemR(col, ptr, "color_value", UI_ITEM_R_SLIDER, NULL, 0);
}
static void node_composit_buts_dilateerode(uiLayout *layout, bContext *C, PointerRNA *ptr)
@@ -804,17 +805,17 @@ static void node_composit_buts_color_spill(uiLayout *layout, bContext *C, Pointe
uiItemR(row, ptr, "channel", UI_ITEM_R_EXPAND, NULL, 0);
col= uiLayoutColumn(layout, 0);
- uiItemR(col, ptr, "algorithm", 0, NULL, 0);
+ uiItemR(col, ptr, "limit_method", 0, NULL, 0);
- if(RNA_enum_get(ptr, "algorithm")==0) {
+ if(RNA_enum_get(ptr, "limit_method")==0) {
uiItemL(col, "Limiting Channel:", 0);
row=uiLayoutRow(col,0);
uiItemR(row, ptr, "limit_channel", UI_ITEM_R_EXPAND, NULL, 0);
}
uiItemR(col, ptr, "ratio", UI_ITEM_R_SLIDER, NULL, 0);
- uiItemR(col, ptr, "unspill", 0, NULL, 0);
- if (RNA_enum_get(ptr, "unspill")== 1) {
+ uiItemR(col, ptr, "use_unspill", 0, NULL, 0);
+ if (RNA_enum_get(ptr, "use_unspill")== 1) {
uiItemR(col, ptr, "unspill_red", UI_ITEM_R_SLIDER, NULL, 0);
uiItemR(col, ptr, "unspill_green", UI_ITEM_R_SLIDER, NULL, 0);
uiItemR(col, ptr, "unspill_blue", UI_ITEM_R_SLIDER, NULL, 0);
@@ -826,13 +827,13 @@ static void node_composit_buts_chroma_matte(uiLayout *layout, bContext *C, Point
uiLayout *col;
col= uiLayoutColumn(layout, 0);
- uiItemR(col, ptr, "acceptance", 0, NULL, 0);
- uiItemR(col, ptr, "cutoff", 0, NULL, 0);
+ uiItemR(col, ptr, "tolerance", 0, NULL, 0);
+ uiItemR(col, ptr, "threshold", 0, NULL, 0);
col= uiLayoutColumn(layout, 1);
- uiItemR(col, ptr, "lift", UI_ITEM_R_SLIDER, NULL, 0);
+ /*uiItemR(col, ptr, "lift", UI_ITEM_R_SLIDER, NULL, 0); Removed for now */
uiItemR(col, ptr, "gain", UI_ITEM_R_SLIDER, NULL, 0);
- uiItemR(col, ptr, "shadow_adjust", UI_ITEM_R_SLIDER, NULL, 0);
+ /*uiItemR(col, ptr, "shadow_adjust", UI_ITEM_R_SLIDER, NULL, 0); Removed for now*/
}
static void node_composit_buts_color_matte(uiLayout *layout, bContext *C, PointerRNA *ptr)
@@ -840,9 +841,9 @@ static void node_composit_buts_color_matte(uiLayout *layout, bContext *C, Pointe
uiLayout *col;
col= uiLayoutColumn(layout, 1);
- uiItemR(col, ptr, "h", UI_ITEM_R_SLIDER, NULL, 0);
- uiItemR(col, ptr, "s", UI_ITEM_R_SLIDER, NULL, 0);
- uiItemR(col, ptr, "v", UI_ITEM_R_SLIDER, NULL, 0);
+ uiItemR(col, ptr, "color_hue", UI_ITEM_R_SLIDER, NULL, 0);
+ uiItemR(col, ptr, "color_saturation", UI_ITEM_R_SLIDER, NULL, 0);
+ uiItemR(col, ptr, "color_value", UI_ITEM_R_SLIDER, NULL, 0);
}
static void node_composit_buts_channel_matte(uiLayout *layout, bContext *C, PointerRNA *ptr)
@@ -856,19 +857,19 @@ static void node_composit_buts_channel_matte(uiLayout *layout, bContext *C, Poin
col=uiLayoutColumn(layout, 0);
uiItemL(col, "Key Channel:", 0);
row= uiLayoutRow(col, 0);
- uiItemR(row, ptr, "channel", UI_ITEM_R_EXPAND, NULL, 0);
+ uiItemR(row, ptr, "matte_channel", UI_ITEM_R_EXPAND, NULL, 0);
col =uiLayoutColumn(layout, 0);
- uiItemR(col, ptr, "algorithm", 0, NULL, 0);
- if(RNA_enum_get(ptr, "algorithm")==0) {
+ uiItemR(col, ptr, "limit_method", 0, NULL, 0);
+ if(RNA_enum_get(ptr, "limit_method")==0) {
uiItemL(col, "Limiting Channel:", 0);
row=uiLayoutRow(col,0);
uiItemR(row, ptr, "limit_channel", UI_ITEM_R_EXPAND, NULL, 0);
}
- uiItemR(col, ptr, "high", UI_ITEM_R_SLIDER, NULL, 0);
- uiItemR(col, ptr, "low", UI_ITEM_R_SLIDER, NULL, 0);
+ uiItemR(col, ptr, "limit_max", UI_ITEM_R_SLIDER, NULL, 0);
+ uiItemR(col, ptr, "limit_min", UI_ITEM_R_SLIDER, NULL, 0);
}
static void node_composit_buts_luma_matte(uiLayout *layout, bContext *C, PointerRNA *ptr)
@@ -876,8 +877,8 @@ static void node_composit_buts_luma_matte(uiLayout *layout, bContext *C, Pointer
uiLayout *col;
col= uiLayoutColumn(layout, 1);
- uiItemR(col, ptr, "high", UI_ITEM_R_SLIDER, NULL, 0);
- uiItemR(col, ptr, "low", UI_ITEM_R_SLIDER, NULL, 0);
+ uiItemR(col, ptr, "limit_max", UI_ITEM_R_SLIDER, NULL, 0);
+ uiItemR(col, ptr, "limit_min", UI_ITEM_R_SLIDER, NULL, 0);
}
static void node_composit_buts_map_uv(uiLayout *layout, bContext *C, PointerRNA *ptr)
@@ -900,7 +901,7 @@ static void node_composit_buts_file_output(uiLayout *layout, bContext *C, Pointe
row= uiLayoutRow(layout, 0);
if (RNA_enum_get(ptr, "image_type")== R_OPENEXR) {
- uiItemR(row, ptr, "exr_half", 0, NULL, 0);
+ uiItemR(row, ptr, "use_exr_half", 0, NULL, 0);
uiItemR(row, ptr, "exr_codec", 0, "", 0);
}
else if (RNA_enum_get(ptr, "image_type")== R_JPEG90) {
@@ -922,7 +923,7 @@ static void node_composit_buts_scale(uiLayout *layout, bContext *C, PointerRNA *
static void node_composit_buts_rotate(uiLayout *layout, bContext *C, PointerRNA *ptr)
{
- uiItemR(layout, ptr, "filter", 0, "", 0);
+ uiItemR(layout, ptr, "filter_type", 0, "", 0);
}
static void node_composit_buts_invert(uiLayout *layout, bContext *C, PointerRNA *ptr)
@@ -930,8 +931,8 @@ static void node_composit_buts_invert(uiLayout *layout, bContext *C, PointerRNA
uiLayout *col;
col= uiLayoutColumn(layout, 0);
- uiItemR(col, ptr, "rgb", 0, NULL, 0);
- uiItemR(col, ptr, "alpha", 0, NULL, 0);
+ uiItemR(col, ptr, "invert_rgb", 0, NULL, 0);
+ uiItemR(col, ptr, "invert_alpha", 0, NULL, 0);
}
static void node_composit_buts_premulkey(uiLayout *layout, bContext *C, PointerRNA *ptr)
@@ -948,9 +949,9 @@ static void node_composit_buts_colorbalance(uiLayout *layout, bContext *C, Point
{
uiLayout *split, *col, *row;
- uiItemR(layout, ptr, "correction_formula", 0, NULL, 0);
+ uiItemR(layout, ptr, "correction_method", 0, NULL, 0);
- if (RNA_enum_get(ptr, "correction_formula")== 0) {
+ if (RNA_enum_get(ptr, "correction_method")== 0) {
split = uiLayoutSplit(layout, 0, 0);
col = uiLayoutColumn(split, 0);
@@ -1171,7 +1172,7 @@ static void node_texture_buts_proc(uiLayout *layout, bContext *C, PointerRNA *pt
case TEX_BLEND:
uiItemR(col, &tex_ptr, "progression", 0, "", 0);
row= uiLayoutRow(col, 0);
- uiItemR(row, &tex_ptr, "flip_axis", UI_ITEM_R_EXPAND, NULL, 0);
+ uiItemR(row, &tex_ptr, "use_flip_axis", UI_ITEM_R_EXPAND, NULL, 0);
break;
case TEX_MARBLE:
@@ -1180,14 +1181,14 @@ static void node_texture_buts_proc(uiLayout *layout, bContext *C, PointerRNA *pt
row= uiLayoutRow(col, 0);
uiItemR(row, &tex_ptr, "noise_type", UI_ITEM_R_EXPAND, NULL, 0);
row= uiLayoutRow(col, 0);
- uiItemR(row, &tex_ptr, "noisebasis2", UI_ITEM_R_EXPAND, NULL, 0);
+ uiItemR(row, &tex_ptr, "noisebasis_2", UI_ITEM_R_EXPAND, NULL, 0);
break;
case TEX_WOOD:
uiItemR(col, &tex_ptr, "noise_basis", 0, "", 0);
uiItemR(col, &tex_ptr, "stype", 0, "", 0);
row= uiLayoutRow(col, 0);
- uiItemR(row, &tex_ptr, "noisebasis2", UI_ITEM_R_EXPAND, NULL, 0);
+ uiItemR(row, &tex_ptr, "noisebasis_2", UI_ITEM_R_EXPAND, NULL, 0);
row= uiLayoutRow(col, 0);
uiLayoutSetActive(row, !(RNA_enum_get(&tex_ptr, "stype")==TEX_BAND || RNA_enum_get(&tex_ptr, "stype")==TEX_RING));
uiItemR(row, &tex_ptr, "noise_type", UI_ITEM_R_EXPAND, NULL, 0);
@@ -1216,7 +1217,7 @@ static void node_texture_buts_image(uiLayout *layout, bContext *C, PointerRNA *p
static void node_texture_buts_output(uiLayout *layout, bContext *C, PointerRNA *ptr)
{
- uiItemR(layout, ptr, "output_name", 0, "", 0);
+ uiItemR(layout, ptr, "filepath", 0, "", 0);
}
/* only once called */
diff --git a/source/blender/editors/space_node/node_buttons.c b/source/blender/editors/space_node/node_buttons.c
index 41cf689407b..11319d817c7 100644
--- a/source/blender/editors/space_node/node_buttons.c
+++ b/source/blender/editors/space_node/node_buttons.c
@@ -41,16 +41,9 @@
#include "BLI_rand.h"
#include "BKE_context.h"
-#include "BKE_depsgraph.h"
-#include "BKE_idprop.h"
-#include "BKE_object.h"
#include "BKE_node.h"
-#include "BKE_global.h"
-#include "BKE_scene.h"
#include "BKE_screen.h"
-#include "BKE_utildefines.h"
-#include "BIF_gl.h"
#include "WM_api.h"
#include "WM_types.h"
diff --git a/source/blender/editors/space_node/node_draw.c b/source/blender/editors/space_node/node_draw.c
index 5eb6d9cf94a..0b33196c646 100644
--- a/source/blender/editors/space_node/node_draw.c
+++ b/source/blender/editors/space_node/node_draw.c
@@ -40,20 +40,10 @@
#include "BLI_math.h"
#include "BLI_blenlib.h"
#include "BLI_threads.h"
-#include "MEM_guardedalloc.h"
#include "BKE_context.h"
#include "BKE_depsgraph.h"
-#include "BKE_global.h"
-#include "BKE_image.h"
-#include "BKE_library.h"
#include "BKE_main.h"
-#include "BKE_material.h"
-#include "BKE_node.h"
-#include "BKE_object.h"
-#include "BKE_texture.h"
-#include "BKE_text.h"
-#include "BKE_utildefines.h"
#include "BIF_gl.h"
#include "BIF_glutil.h"
@@ -77,7 +67,6 @@
// XXX interface.h
extern void ui_dropshadow(rctf *rct, float radius, float aspect, int select);
-extern void gl_round_box(int mode, float minx, float miny, float maxx, float maxy, float rad);
extern void ui_draw_tria_icon(float x, float y, char dir);
void ED_node_changed_update(ID *id, bNode *node)
@@ -759,7 +748,7 @@ static void node_draw_basis(const bContext *C, ARegion *ar, SpaceNode *snode, bN
glEnable(GL_BLEND);
glColor4ub(200, 200, 200, 140);
uiSetRoundBox(15-4);
- gl_round_box(GL_LINE_LOOP, rct->xmin, rct->ymin, rct->xmax, rct->ymax, BASIS_RAD);
+ uiDrawBox(GL_LINE_LOOP, rct->xmin, rct->ymin, rct->xmax, rct->ymax, BASIS_RAD);
glDisable(GL_BLEND);
}
@@ -867,7 +856,7 @@ static void node_draw_hidden(const bContext *C, ARegion *ar, SpaceNode *snode, b
if(node->flag & NODE_ACTIVE) {
glEnable(GL_BLEND);
glColor4ub(200, 200, 200, 140);
- gl_round_box(GL_LINE_LOOP, rct->xmin, rct->ymin, rct->xmax, rct->ymax, hiddenrad);
+ uiDrawBox(GL_LINE_LOOP, rct->xmin, rct->ymin, rct->xmax, rct->ymax, hiddenrad);
glDisable(GL_BLEND);
}
@@ -1019,18 +1008,18 @@ static void node_draw_group(const bContext *C, ARegion *ar, SpaceNode *snode, bN
glEnable(GL_BLEND);
uiSetRoundBox(3);
UI_ThemeColorShadeAlpha(TH_NODE_GROUP, 0, -70);
- gl_round_box(GL_POLYGON, rect.xmin, rect.ymax, rect.xmax, rect.ymax+NODE_DY, BASIS_RAD);
+ uiDrawBox(GL_POLYGON, rect.xmin, rect.ymax, rect.xmax, rect.ymax+NODE_DY, BASIS_RAD);
/* backdrop body */
UI_ThemeColorShadeAlpha(TH_BACK, -8, -70);
uiSetRoundBox(12);
- gl_round_box(GL_POLYGON, rect.xmin, rect.ymin, rect.xmax, rect.ymax, BASIS_RAD);
+ uiDrawBox(GL_POLYGON, rect.xmin, rect.ymin, rect.xmax, rect.ymax, BASIS_RAD);
/* selection outline */
uiSetRoundBox(15);
glColor4ub(200, 200, 200, 140);
glEnable( GL_LINE_SMOOTH );
- gl_round_box(GL_LINE_LOOP, rect.xmin, rect.ymin, rect.xmax, rect.ymax+NODE_DY, BASIS_RAD);
+ uiDrawBox(GL_LINE_LOOP, rect.xmin, rect.ymin, rect.xmax, rect.ymax+NODE_DY, BASIS_RAD);
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 f4876aba9ad..b6dc0b4db7c 100644
--- a/source/blender/editors/space_node/node_edit.c
+++ b/source/blender/editors/space_node/node_edit.c
@@ -41,7 +41,6 @@
#include "DNA_scene_types.h"
#include "BKE_context.h"
-#include "BKE_colortools.h"
#include "BKE_global.h"
#include "BKE_image.h"
#include "BKE_library.h"
@@ -51,10 +50,7 @@
#include "BKE_paint.h"
#include "BKE_texture.h"
#include "BKE_report.h"
-#include "BKE_scene.h"
-#include "BKE_utildefines.h"
-#include "BIF_gl.h"
#include "BLI_math.h"
#include "BLI_blenlib.h"
@@ -1739,7 +1735,7 @@ static int node_make_link_exec(bContext *C, wmOperator *op)
ED_preview_kill_jobs(C);
- snode_autoconnect(snode, 0, replace);
+ snode_autoconnect(snode, 1, replace);
node_tree_verify_groups(snode->nodetree);
snode_notify(C, snode);
@@ -1923,33 +1919,6 @@ void NODE_OT_read_fullsamplelayers(wmOperatorType *ot)
}
-/* ************************* */
-
-void imagepaint_composite_tags(bNodeTree *ntree, Image *image, ImageUser *iuser)
-{
- bNode *node;
-
- if(ntree==NULL)
- return;
-
- /* search for renderresults */
- if(image->type==IMA_TYPE_R_RESULT) {
- for(node= ntree->nodes.first; node; node= node->next) {
- if(node->type==CMP_NODE_R_LAYERS && node->id==NULL) {
- /* imageuser comes from ImageWin, so indexes are offset 1 */
- if(node->custom1==iuser->layer-1)
- NodeTagChanged(ntree, node);
- }
- }
- }
- else {
- for(node= ntree->nodes.first; node; node= node->next) {
- if(node->id== &image->id)
- NodeTagChanged(ntree, node);
- }
- }
-}
-
/* ****************** Make Group operator ******************* */
static int node_group_make_exec(bContext *C, wmOperator *op)
diff --git a/source/blender/editors/space_node/node_header.c b/source/blender/editors/space_node/node_header.c
index 3ed719eccc0..0711ef66497 100644
--- a/source/blender/editors/space_node/node_header.c
+++ b/source/blender/editors/space_node/node_header.c
@@ -42,16 +42,14 @@
#include "BKE_screen.h"
#include "BKE_node.h"
#include "BKE_main.h"
-#include "BKE_utildefines.h"
#include "WM_api.h"
#include "WM_types.h"
-#include "BIF_gl.h"
-#include "BIF_glutil.h"
#include "UI_interface.h"
+#include "UI_view2d.h"
#include "node_intern.h"
@@ -156,6 +154,18 @@ static void node_menu_add(const bContext *C, Menu *menu)
{
uiLayout *layout= menu->layout;
SpaceNode *snode= CTX_wm_space_node(C);
+ ScrArea *sa= CTX_wm_area(C);
+ ARegion *ar;
+
+ /* get location to add node at mouse */
+ for(ar=sa->regionbase.first; ar; ar=ar->next) {
+ if(ar->regiontype == RGN_TYPE_WINDOW) {
+ wmWindow *win= CTX_wm_window(C);
+ UI_view2d_region_to_view(&ar->v2d,
+ win->eventstate->x - ar->winrct.xmin, win->eventstate->y - ar->winrct.ymin,
+ &snode->mx, &snode->my);
+ }
+ }
if(!snode->nodetree)
uiLayoutSetActive(layout, 0);
diff --git a/source/blender/editors/space_node/node_ops.c b/source/blender/editors/space_node/node_ops.c
index 937a524367e..46cd8515f23 100644
--- a/source/blender/editors/space_node/node_ops.c
+++ b/source/blender/editors/space_node/node_ops.c
@@ -30,7 +30,6 @@
#include "DNA_scene_types.h"
#include "BKE_context.h"
-#include "BKE_node.h"
#include "ED_screen.h"
#include "ED_transform.h"
diff --git a/source/blender/editors/space_node/node_select.c b/source/blender/editors/space_node/node_select.c
index 2cccbf17bea..ec08cdf07ac 100644
--- a/source/blender/editors/space_node/node_select.c
+++ b/source/blender/editors/space_node/node_select.c
@@ -32,9 +32,6 @@
#include "DNA_scene_types.h"
#include "BKE_context.h"
-#include "BKE_node.h"
-#include "BKE_global.h"
-#include "BKE_utildefines.h"
#include "BLI_rect.h"
diff --git a/source/blender/editors/space_node/node_state.c b/source/blender/editors/space_node/node_state.c
index e12730f4317..b4f09f960d6 100644
--- a/source/blender/editors/space_node/node_state.c
+++ b/source/blender/editors/space_node/node_state.c
@@ -33,7 +33,6 @@
#include "BKE_context.h"
#include "BKE_node.h"
-#include "BKE_global.h"
#include "BLI_rect.h"
diff --git a/source/blender/editors/space_node/space_node.c b/source/blender/editors/space_node/space_node.c
index 5b681958a3a..c94fcb52e38 100644
--- a/source/blender/editors/space_node/space_node.c
+++ b/source/blender/editors/space_node/space_node.c
@@ -40,7 +40,6 @@
#include "BLI_math.h"
#include "BLI_rand.h"
-#include "BKE_colortools.h"
#include "BKE_context.h"
#include "BKE_screen.h"
#include "BKE_node.h"
@@ -48,7 +47,6 @@
#include "ED_render.h"
#include "ED_screen.h"
-#include "BIF_gl.h"
#include "WM_api.h"
#include "WM_types.h"
@@ -161,7 +159,10 @@ static void node_init(struct wmWindowManager *wm, ScrArea *sa)
static void node_area_listener(ScrArea *sa, wmNotifier *wmn)
{
-
+ /* note, ED_area_tag_refresh will re-execute compositor */
+ /* XXX, should edit some to check for the nodeTree type, especially NC_NODE|NA_EDITED which refreshes all types */
+ SpaceNode *snode= sa->spacedata.first;
+
/* preview renders */
switch(wmn->category) {
case NC_SCENE:
@@ -203,6 +204,20 @@ static void node_area_listener(ScrArea *sa, wmNotifier *wmn)
if (wmn->action == NA_EDITED)
ED_area_tag_refresh(sa);
break;
+
+ case NC_IMAGE:
+ if (wmn->action == NA_EDITED) {
+ if(snode->treetype==NTREE_COMPOSIT) {
+ Scene *scene= wmn->window->screen->scene;
+
+ /* note that NodeTagIDChanged is alredy called by BKE_image_signal() on all
+ * scenes so really this is just to know if the images is used in the compo else
+ * painting on images could become very slow when the compositor is open. */
+ if(NodeTagIDChanged(scene->nodetree, wmn->reference))
+ ED_area_tag_refresh(sa);
+ }
+ }
+ break;
}
}
diff --git a/source/blender/editors/space_outliner/CMakeLists.txt b/source/blender/editors/space_outliner/CMakeLists.txt
index 78c4fcbdd8d..5ebe47f8c5e 100644
--- a/source/blender/editors/space_outliner/CMakeLists.txt
+++ b/source/blender/editors/space_outliner/CMakeLists.txt
@@ -22,15 +22,15 @@
FILE(GLOB SRC *.c)
SET(INC
+ ../include
../../blenkernel
../../blenlib
../../imbuf
- ../include
- ../../../../intern/guardedalloc
- ../../../../intern/opennl/extern
../../makesdna
../../makesrna
../../windowmanager
+ ../../../../intern/guardedalloc
+ ../../../../intern/opennl/extern
)
BLENDERLIB(bf_editor_space_outliner "${SRC}" "${INC}")
diff --git a/source/blender/editors/space_outliner/Makefile b/source/blender/editors/space_outliner/Makefile
index 8d7cd017e0b..bd6725c5b71 100644
--- a/source/blender/editors/space_outliner/Makefile
+++ b/source/blender/editors/space_outliner/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2007 Blender Foundation
# All rights reserved.
diff --git a/source/blender/editors/space_outliner/outliner.c b/source/blender/editors/space_outliner/outliner.c
index c4a8a0309bd..175eb8c78ed 100644
--- a/source/blender/editors/space_outliner/outliner.c
+++ b/source/blender/editors/space_outliner/outliner.c
@@ -59,10 +59,8 @@
# include <fnmatch.h>
#endif
-#include "IMB_imbuf_types.h"
#include "BKE_animsys.h"
-#include "BKE_constraint.h"
#include "BKE_context.h"
#include "BKE_deform.h"
#include "BKE_depsgraph.h"
@@ -71,14 +69,10 @@
#include "BKE_group.h"
#include "BKE_library.h"
#include "BKE_main.h"
-#include "BKE_material.h"
#include "BKE_modifier.h"
-#include "BKE_object.h"
#include "BKE_report.h"
-#include "BKE_screen.h"
#include "BKE_scene.h"
#include "BKE_sequencer.h"
-#include "BKE_utildefines.h"
#include "ED_armature.h"
#include "ED_object.h"
@@ -108,6 +102,8 @@
#define OL_H 19
#define OL_X 18
+#define OL_Y_OFFSET 2
+
#define OL_TOG_RESTRICT_VIEWX 54
#define OL_TOG_RESTRICT_SELECTX 36
#define OL_TOG_RESTRICT_RENDERX 18
@@ -988,8 +984,6 @@ static TreeElement *outliner_add_element(SpaceOops *soops, ListBase *lb, void *i
else {
if((seq->strip) && (seq->strip->stripdata))
te->name= seq->strip->stripdata->name;
- else if((seq->strip) && (seq->strip->tstripdata) && (seq->strip->tstripdata->ibuf))
- te->name= seq->strip->tstripdata->ibuf->name;
else
te->name= "SQ None";
}
@@ -1562,10 +1556,10 @@ static void outliner_set_flag(SpaceOops *soops, ListBase *lb, short flag, short
void object_toggle_visibility_cb(bContext *C, Scene *scene, TreeElement *te, TreeStoreElem *tsep, TreeStoreElem *tselem)
{
Base *base= (Base *)te->directdata;
-
- if(base==NULL) base= object_in_scene((Object *)tselem->id, scene);
- if(base) {
- base->object->restrictflag^=OB_RESTRICT_VIEW;
+ if(base || (base= object_in_scene((Object *)tselem->id, scene))) {
+ if((base->object->restrictflag ^= OB_RESTRICT_VIEW)) {
+ ED_base_object_select(base, BA_DESELECT);
+ }
}
}
@@ -1577,6 +1571,7 @@ static int outliner_toggle_visibility_exec(bContext *C, wmOperator *op)
outliner_do_object_operation(C, scene, soops, &soops->tree, object_toggle_visibility_cb);
+ WM_event_add_notifier(C, NC_SCENE|ND_OB_VISIBLE, scene);
ED_region_tag_redraw(ar);
return OPERATOR_FINISHED;
@@ -1585,7 +1580,7 @@ static int outliner_toggle_visibility_exec(bContext *C, wmOperator *op)
void OUTLINER_OT_visibility_toggle(wmOperatorType *ot)
{
/* identifiers */
- ot->name= "Toggle Visability";
+ ot->name= "Toggle Visibility";
ot->idname= "OUTLINER_OT_visibility_toggle";
ot->description= "Toggle the visibility of selected items";
@@ -1616,6 +1611,7 @@ static int outliner_toggle_selectability_exec(bContext *C, wmOperator *op)
outliner_do_object_operation(C, scene, soops, &soops->tree, object_toggle_selectability_cb);
+ WM_event_add_notifier(C, NC_SCENE|ND_OB_SELECT, scene);
ED_region_tag_redraw(ar);
return OPERATOR_FINISHED;
@@ -1709,6 +1705,7 @@ static int outliner_toggle_selected_exec(bContext *C, wmOperator *op)
{
SpaceOops *soops= CTX_wm_space_outliner(C);
ARegion *ar= CTX_wm_region(C);
+ Scene *scene= CTX_data_scene(C);
if (outliner_has_one_flag(soops, &soops->tree, TSE_SELECTED, 1))
outliner_set_flag(soops, &soops->tree, TSE_SELECTED, 0);
@@ -1717,6 +1714,7 @@ static int outliner_toggle_selected_exec(bContext *C, wmOperator *op)
soops->storeflag |= SO_TREESTORE_REDRAW;
+ WM_event_add_notifier(C, NC_SCENE|ND_OB_SELECT, scene);
ED_region_tag_redraw(ar);
return OPERATOR_FINISHED;
@@ -1891,8 +1889,8 @@ static void tree_element_set_active_object(bContext *C, Scene *scene, SpaceOops
}
/* find associated base in current scene */
- for(base= FIRSTBASE; base; base= base->next)
- if(base->object==ob) break;
+ base= object_in_scene(ob, scene);
+
if(base) {
if(set==2) {
/* swap select */
@@ -1902,12 +1900,8 @@ static void tree_element_set_active_object(bContext *C, Scene *scene, SpaceOops
ED_base_object_select(base, BA_SELECT);
}
else {
- Base *b;
/* deleselect all */
- for(b= FIRSTBASE; b; b= b->next) {
- b->flag &= ~SELECT;
- b->object->flag= b->flag;
- }
+ scene_deselect_all(scene);
ED_base_object_select(base, BA_SELECT);
}
if(C)
@@ -2029,6 +2023,7 @@ static int tree_element_active_texture(bContext *C, Scene *scene, SpaceOops *soo
}
}
+ WM_event_add_notifier(C, NC_TEXTURE, NULL);
return 0;
}
@@ -2123,8 +2118,8 @@ static int tree_element_active_posechannel(bContext *C, Scene *scene, TreeElemen
if(set) {
if(!(pchan->bone->flag & BONE_HIDDEN_P)) {
- if(set==2) ED_pose_deselectall(ob, 2, 0); // 2 = clear active tag
- else ED_pose_deselectall(ob, 0, 0); // 0 = deselect
+ if(set==2) ED_pose_deselectall(ob, 2); // 2 = clear active tag
+ else ED_pose_deselectall(ob, 0); // 0 = deselect
if(set==2 && (pchan->bone->flag & BONE_SELECTED)) {
pchan->bone->flag &= ~BONE_SELECTED;
@@ -2154,8 +2149,8 @@ static int tree_element_active_bone(bContext *C, Scene *scene, TreeElement *te,
if(set) {
if(!(bone->flag & BONE_HIDDEN_P)) {
- if(set==2) ED_pose_deselectall(OBACT, 2, 0); // 2 is clear active tag
- else ED_pose_deselectall(OBACT, 0, 0);
+ if(set==2) ED_pose_deselectall(OBACT, 2); // 2 is clear active tag
+ else ED_pose_deselectall(OBACT, 0);
if(set==2 && (bone->flag & BONE_SELECTED)) {
bone->flag &= ~BONE_SELECTED;
@@ -2188,8 +2183,8 @@ static int tree_element_active_ebone(bContext *C, Scene *scene, TreeElement *te,
if(set) {
if(!(ebone->flag & BONE_HIDDEN_A)) {
bArmature *arm= scene->obedit->data;
- if(set==2) ED_armature_deselectall(scene->obedit, 2, 0); // only clear active tag
- else ED_armature_deselectall(scene->obedit, 0, 0); // deselect
+ if(set==2) ED_armature_deselectall(scene->obedit, 2); // only clear active tag
+ else ED_armature_deselectall(scene->obedit, 0); // deselect
ebone->flag |= BONE_SELECTED|BONE_ROOTSEL|BONE_TIPSEL;
arm->act_edbone= ebone;
@@ -2413,7 +2408,7 @@ static int do_outliner_item_activate(bContext *C, Scene *scene, ARegion *ar, Spa
return 1;
}
/* name and first icon */
- else if(mval[0]>te->xs && mval[0]<te->xend) {
+ else if(mval[0]>te->xs+OL_X && mval[0]<te->xend) {
/* always makes active object */
if(tselem->type!=TSE_SEQUENCE && tselem->type!=TSE_SEQ_STRIP && tselem->type!=TSE_SEQUENCE_DUP)
@@ -2509,7 +2504,7 @@ static int outliner_item_activate(bContext *C, wmOperator *op, wmEvent *event)
int row;
/* get row number - 100 here is just a dummy value since we don't need the column */
- UI_view2d_listview_view_to_cell(&ar->v2d, 1000, OL_H, 0.0f, 0.0f,
+ UI_view2d_listview_view_to_cell(&ar->v2d, 1000, OL_H, 0.0f, OL_Y_OFFSET,
fmval[0], fmval[1], NULL, &row);
/* select relevant row */
@@ -2610,7 +2605,7 @@ static int do_outliner_item_rename(bContext *C, ARegion *ar, SpaceOops *soops, T
TreeStoreElem *tselem= TREESTORE(te);
/* name and first icon */
- if(mval[0]>te->xs && mval[0]<te->xend) {
+ if(mval[0]>te->xs+OL_X && mval[0]<te->xend) {
/* can't rename rna datablocks entries */
if(ELEM3(tselem->type, TSE_RNA_STRUCT, TSE_RNA_PROPERTY, TSE_RNA_ARRAY_ELEM))
@@ -3191,8 +3186,6 @@ static void object_delete_cb(bContext *C, Scene *scene, TreeElement *te, TreeSto
te->directdata= NULL;
tselem->id= NULL;
}
-
- WM_event_add_notifier(C, NC_SCENE|ND_OB_ACTIVE, scene);
}
@@ -3229,7 +3222,7 @@ static void group_linkobs2scene_cb(bContext *C, Scene *scene, TreeElement *te, T
}
}
-static void outliner_do_object_operation(bContext *C, Scene *scene, SpaceOops *soops, ListBase *lb,
+static void outliner_do_object_operation(bContext *C, Scene *scene_act, SpaceOops *soops, ListBase *lb,
void (*operation_cb)(bContext *C, Scene *scene, TreeElement *, TreeStoreElem *, TreeStoreElem *))
{
TreeElement *te;
@@ -3240,16 +3233,18 @@ static void outliner_do_object_operation(bContext *C, Scene *scene, SpaceOops *s
if(tselem->flag & TSE_SELECTED) {
if(tselem->type==0 && te->idcode==ID_OB) {
// when objects selected in other scenes... dunno if that should be allowed
- Scene *sce= (Scene *)outliner_search_back(soops, te, ID_SCE);
- if(sce && scene != sce) {
- ED_screen_set_scene(C, sce);
+ Scene *scene_owner= (Scene *)outliner_search_back(soops, te, ID_SCE);
+ if(scene_owner && scene_act != scene_owner) {
+ ED_screen_set_scene(C, scene_owner);
}
-
- operation_cb(C, scene, te, NULL, tselem);
+ /* important to use 'scene_owner' not scene_act else deleting objects can crash.
+ * only use 'scene_act' when 'scene_owner' is NULL, which can happen when the
+ * outliner isnt showing scenes: Visible Layer draw mode for eg. */
+ operation_cb(C, scene_owner ? scene_owner : scene_act, te, NULL, tselem);
}
}
if((tselem->flag & TSE_CLOSED)==0) {
- outliner_do_object_operation(C, scene, soops, &te->subtree, operation_cb);
+ outliner_do_object_operation(C, scene_act, soops, &te->subtree, operation_cb);
}
}
}
@@ -3340,6 +3335,7 @@ void outliner_del(bContext *C, Scene *scene, ARegion *ar, SpaceOops *soops)
outliner_do_object_operation(C, scene, soops, &soops->tree, object_delete_cb);
DAG_scene_sort(CTX_data_main(C), scene);
ED_undo_push(C, "Delete Objects");
+ WM_event_add_notifier(C, NC_SCENE|ND_OB_ACTIVE, scene);
}
}
@@ -3377,34 +3373,37 @@ static int outliner_object_operation_exec(bContext *C, wmOperator *op)
}
str= "Select Objects";
+ WM_event_add_notifier(C, NC_SCENE|ND_OB_SELECT, scene);
}
else if(event==2) {
outliner_do_object_operation(C, scene, soops, &soops->tree, object_deselect_cb);
str= "Deselect Objects";
+ WM_event_add_notifier(C, NC_SCENE|ND_OB_SELECT, scene);
}
else if(event==4) {
outliner_do_object_operation(C, scene, soops, &soops->tree, object_delete_cb);
DAG_scene_sort(bmain, scene);
str= "Delete Objects";
+ WM_event_add_notifier(C, NC_SCENE|ND_OB_ACTIVE, scene);
}
- else if(event==5) { /* disabled, see above (ton) */
+ else if(event==5) { /* disabled, see above enum (ton) */
outliner_do_object_operation(C, scene, soops, &soops->tree, id_local_cb);
str= "Localized Objects";
}
else if(event==6) {
outliner_do_object_operation(C, scene, soops, &soops->tree, object_toggle_visibility_cb);
str= "Toggle Visibility";
+ WM_event_add_notifier(C, NC_SCENE|ND_OB_VISIBLE, scene);
}
else if(event==7) {
outliner_do_object_operation(C, scene, soops, &soops->tree, object_toggle_selectability_cb);
str= "Toggle Selectability";
+ WM_event_add_notifier(C, NC_SCENE|ND_OB_SELECT, scene);
}
else if(event==8) {
outliner_do_object_operation(C, scene, soops, &soops->tree, object_toggle_renderability_cb);
str= "Toggle Renderability";
}
-
- WM_event_add_notifier(C, NC_SCENE|ND_OB_SELECT, scene);
ED_undo_push(C, str);
@@ -4722,13 +4721,13 @@ static void outliner_draw_struct_marks(ARegion *ar, SpaceOops *soops, ListBase *
/* selection status */
if((tselem->flag & TSE_CLOSED)==0)
if(tselem->type == TSE_RNA_STRUCT)
- glRecti(0, *starty+1, (int)ar->v2d.cur.xmax, *starty+OL_H-1);
+ glRecti(0, *starty+1, (int)ar->v2d.cur.xmax+V2D_SCROLL_WIDTH, *starty+OL_H-1);
*starty-= OL_H;
if((tselem->flag & TSE_CLOSED)==0) {
outliner_draw_struct_marks(ar, soops, &te->subtree, starty);
if(tselem->type == TSE_RNA_STRUCT)
- fdrawline(0, (float)*starty+OL_H-1, ar->v2d.cur.xmax, (float)*starty+OL_H-1);
+ fdrawline(0, (float)*starty+OL_H, ar->v2d.cur.xmax+V2D_SCROLL_WIDTH, (float)*starty+OL_H);
}
}
}
@@ -4763,24 +4762,24 @@ static void outliner_draw_tree(bContext *C, uiBlock *block, Scene *scene, ARegio
/* struct marks */
UI_ThemeColorShadeAlpha(TH_BACK, -15, -200);
//UI_ThemeColorShade(TH_BACK, -20);
- starty= (int)ar->v2d.tot.ymax-OL_H;
+ starty= (int)ar->v2d.tot.ymax-OL_H-OL_Y_OFFSET;
outliner_draw_struct_marks(ar, soops, &soops->tree, &starty);
}
/* always draw selection fill before hierarchy */
UI_GetThemeColor3fv(TH_BACK, col);
glColor3f(col[0]+0.06f, col[1]+0.08f, col[2]+0.10f);
- starty= (int)ar->v2d.tot.ymax-OL_H;
+ starty= (int)ar->v2d.tot.ymax-OL_H-OL_Y_OFFSET;
outliner_draw_selection(ar, soops, &soops->tree, &starty);
// grey hierarchy lines
UI_ThemeColorBlend(TH_BACK, TH_TEXT, 0.2f);
- starty= (int)ar->v2d.tot.ymax-OL_H/2;
+ starty= (int)ar->v2d.tot.ymax-OL_H/2-OL_Y_OFFSET;
startx= 6;
outliner_draw_hierarchy(soops, &soops->tree, startx, &starty);
// items themselves
- starty= (int)ar->v2d.tot.ymax-OL_H;
+ starty= (int)ar->v2d.tot.ymax-OL_H-OL_Y_OFFSET;
startx= 0;
for(te= soops->tree.first; te; te= te->next) {
outliner_draw_tree_element(C, block, scene, ar, soops, te, startx, &starty);
@@ -4794,10 +4793,10 @@ static void outliner_back(ARegion *ar, SpaceOops *soops)
UI_ThemeColorShade(TH_BACK, 6);
ystart= (int)ar->v2d.tot.ymax;
- ystart= OL_H*(ystart/(OL_H));
+ ystart= OL_H*(ystart/(OL_H))-OL_Y_OFFSET;
while(ystart+2*OL_H > ar->v2d.cur.ymin) {
- glRecti(0, ystart, (int)ar->v2d.cur.xmax, ystart+OL_H);
+ glRecti(0, ystart, (int)ar->v2d.cur.xmax+V2D_SCROLL_WIDTH, ystart+OL_H);
ystart-= 2*OL_H;
}
}
@@ -4808,11 +4807,11 @@ static void outliner_draw_restrictcols(ARegion *ar, SpaceOops *soops)
/* background underneath */
UI_ThemeColor(TH_BACK);
- glRecti((int)ar->v2d.cur.xmax-OL_TOGW, (int)ar->v2d.cur.ymin, (int)ar->v2d.cur.xmax, (int)ar->v2d.cur.ymax);
+ glRecti((int)ar->v2d.cur.xmax-OL_TOGW, (int)ar->v2d.cur.ymin-V2D_SCROLL_HEIGHT-1, (int)ar->v2d.cur.xmax+V2D_SCROLL_WIDTH, (int)ar->v2d.cur.ymax);
UI_ThemeColorShade(TH_BACK, 6);
ystart= (int)ar->v2d.tot.ymax;
- ystart= OL_H*(ystart/(OL_H));
+ ystart= OL_H*(ystart/(OL_H))-OL_Y_OFFSET;
while(ystart+2*OL_H > ar->v2d.cur.ymin) {
glRecti((int)ar->v2d.cur.xmax-OL_TOGW, ystart, (int)ar->v2d.cur.xmax, ystart+OL_H);
@@ -4825,24 +4824,23 @@ static void outliner_draw_restrictcols(ARegion *ar, SpaceOops *soops)
fdrawline(ar->v2d.cur.xmax-OL_TOG_RESTRICT_VIEWX,
ar->v2d.cur.ymax,
ar->v2d.cur.xmax-OL_TOG_RESTRICT_VIEWX,
- ar->v2d.cur.ymin);
+ ar->v2d.cur.ymin - V2D_SCROLL_HEIGHT);
/* render */
fdrawline(ar->v2d.cur.xmax-OL_TOG_RESTRICT_SELECTX,
ar->v2d.cur.ymax,
ar->v2d.cur.xmax-OL_TOG_RESTRICT_SELECTX,
- ar->v2d.cur.ymin);
+ ar->v2d.cur.ymin - V2D_SCROLL_HEIGHT);
/* render */
fdrawline(ar->v2d.cur.xmax-OL_TOG_RESTRICT_RENDERX,
ar->v2d.cur.ymax,
ar->v2d.cur.xmax-OL_TOG_RESTRICT_RENDERX,
- ar->v2d.cur.ymin);
+ ar->v2d.cur.ymin - V2D_SCROLL_HEIGHT);
}
static void restrictbutton_view_cb(bContext *C, void *poin, void *poin2)
{
- Base *base;
Scene *scene = (Scene *)poin;
Object *ob = (Object *)poin2;
Object *obedit= CTX_data_edit_object(C);
@@ -4858,15 +4856,9 @@ static void restrictbutton_view_cb(bContext *C, void *poin, void *poin2)
/* deselect objects that are invisible */
if (ob->restrictflag & OB_RESTRICT_VIEW) {
-
/* Ouch! There is no backwards pointer from Object to Base,
* so have to do loop to find it. */
- for(base= FIRSTBASE; base; base= base->next) {
- if(base->object==ob) {
- base->flag &= ~SELECT;
- base->object->flag= base->flag;
- }
- }
+ ED_base_object_select(object_in_scene(ob, scene), BA_DESELECT);
}
WM_event_add_notifier(C, NC_SCENE|ND_OB_SELECT, scene);
@@ -4874,21 +4866,14 @@ static void restrictbutton_view_cb(bContext *C, void *poin, void *poin2)
static void restrictbutton_sel_cb(bContext *C, void *poin, void *poin2)
{
- Base *base;
Scene *scene = (Scene *)poin;
Object *ob = (Object *)poin2;
/* if select restriction has just been turned on */
if (ob->restrictflag & OB_RESTRICT_SELECT) {
-
/* Ouch! There is no backwards pointer from Object to Base,
* so have to do loop to find it. */
- for(base= FIRSTBASE; base; base= base->next) {
- if(base->object==ob) {
- base->flag &= ~SELECT;
- base->object->flag= base->flag;
- }
- }
+ ED_base_object_select(object_in_scene(ob, scene), BA_DESELECT);
}
WM_event_add_notifier(C, NC_SCENE|ND_OB_SELECT, scene);
@@ -4915,9 +4900,20 @@ static void restrictbutton_modifier_cb(bContext *C, void *poin, void *poin2)
static void restrictbutton_bone_cb(bContext *C, void *poin, void *poin2)
{
+ Bone *bone= (Bone *)poin2;
+ if(bone && (bone->flag & BONE_HIDDEN_P))
+ bone->flag &= ~(BONE_SELECTED | BONE_TIPSEL | BONE_ROOTSEL);
WM_event_add_notifier(C, NC_OBJECT|ND_POSE, NULL);
}
+static void restrictbutton_ebone_cb(bContext *C, void *poin, void *poin2)
+{
+ EditBone *ebone= (EditBone *)poin2;
+ if(ebone && (ebone->flag & BONE_HIDDEN_A))
+ ebone->flag &= ~(BONE_SELECTED | BONE_TIPSEL | BONE_ROOTSEL);
+
+ WM_event_add_notifier(C, NC_OBJECT|ND_POSE, NULL);
+}
static int group_restrict_flag(Group *gr, int flag)
{
@@ -5202,7 +5198,7 @@ static void outliner_draw_restrictbuts(uiBlock *block, Scene *scene, ARegion *ar
uiBlockSetEmboss(block, UI_EMBOSSN);
bt= uiDefIconButBitI(block, ICONTOG, BONE_HIDDEN_P, 0, ICON_RESTRICT_VIEW_OFF,
(int)ar->v2d.cur.xmax-OL_TOG_RESTRICT_VIEWX, (short)te->ys, 17, OL_H-1, &(bone->flag), 0, 0, 0, 0, "Restrict/Allow visibility in the 3D View");
- uiButSetFunc(bt, restrictbutton_bone_cb, NULL, NULL);
+ uiButSetFunc(bt, restrictbutton_bone_cb, NULL, bone);
bt= uiDefIconButBitI(block, ICONTOG, BONE_UNSELECTABLE, 0, ICON_RESTRICT_SELECT_OFF,
(int)ar->v2d.cur.xmax-OL_TOG_RESTRICT_SELECTX, (short)te->ys, 17, OL_H-1, &(bone->flag), 0, 0, 0, 0, "Restrict/Allow selection in the 3D View");
@@ -5214,11 +5210,11 @@ static void outliner_draw_restrictbuts(uiBlock *block, Scene *scene, ARegion *ar
uiBlockSetEmboss(block, UI_EMBOSSN);
bt= uiDefIconButBitI(block, ICONTOG, BONE_HIDDEN_A, 0, ICON_RESTRICT_VIEW_OFF,
(int)ar->v2d.cur.xmax-OL_TOG_RESTRICT_VIEWX, (short)te->ys, 17, OL_H-1, &(ebone->flag), 0, 0, 0, 0, "Restrict/Allow visibility in the 3D View");
- uiButSetFunc(bt, restrictbutton_bone_cb, NULL, NULL);
+ uiButSetFunc(bt, restrictbutton_ebone_cb, NULL, ebone);
bt= uiDefIconButBitI(block, ICONTOG, BONE_UNSELECTABLE, 0, ICON_RESTRICT_SELECT_OFF,
(int)ar->v2d.cur.xmax-OL_TOG_RESTRICT_SELECTX, (short)te->ys, 17, OL_H-1, &(ebone->flag), 0, 0, 0, 0, "Restrict/Allow selection in the 3D View");
- uiButSetFunc(bt, restrictbutton_bone_cb, NULL, NULL);
+ uiButSetFunc(bt, restrictbutton_ebone_cb, NULL, NULL);
}
}
@@ -5229,19 +5225,22 @@ static void outliner_draw_restrictbuts(uiBlock *block, Scene *scene, ARegion *ar
static void outliner_draw_rnacols(ARegion *ar, SpaceOops *soops, int sizex)
{
View2D *v2d= &ar->v2d;
-
+
+ float miny = v2d->cur.ymin-V2D_SCROLL_HEIGHT;
+ if(miny<v2d->tot.ymin) miny = v2d->tot.ymin;
+
UI_ThemeColorShadeAlpha(TH_BACK, -15, -200);
/* draw column separator lines */
fdrawline((float)sizex,
v2d->cur.ymax,
(float)sizex,
- v2d->cur.ymin);
+ miny);
fdrawline((float)sizex+OL_RNA_COL_SIZEX,
v2d->cur.ymax,
(float)sizex+OL_RNA_COL_SIZEX,
- v2d->cur.ymin);
+ miny);
}
static void outliner_draw_rnabuts(uiBlock *block, Scene *scene, ARegion *ar, SpaceOops *soops, int sizex, ListBase *lb)
@@ -5545,7 +5544,7 @@ static void outliner_buttons(const bContext *C, uiBlock *block, ARegion *ar, Spa
uiBut *bt;
TreeElement *te;
TreeStoreElem *tselem;
- int dx, len;
+ int spx, dx, len;
for(te= lb->first; te; te= te->next) {
tselem= TREESTORE(te);
@@ -5566,8 +5565,10 @@ static void outliner_buttons(const bContext *C, uiBlock *block, ARegion *ar, Spa
dx= (int)UI_GetStringWidth(te->name);
if(dx<100) dx= 100;
-
- bt= uiDefBut(block, TEX, OL_NAMEBUTTON, "", (short)te->xs+2*OL_X-4, (short)te->ys, dx+10, OL_H-1, te->name, 1.0, (float)len-1, 0, 0, "");
+ spx=te->xs+2*OL_X-4;
+ if(spx+dx+10>ar->v2d.cur.xmax) dx = ar->v2d.cur.xmax-spx-10;
+
+ bt= uiDefBut(block, TEX, OL_NAMEBUTTON, "", spx, (short)te->ys, dx+10, OL_H-1, te->name, 1.0, (float)len-1, 0, 0, "");
uiButSetRenameFunc(bt, namebutton_cb, tselem);
/* returns false if button got removed */
@@ -5628,19 +5629,19 @@ void draw_outliner(const bContext *C)
/* tweak to display last line (when list bigger than window) */
sizey += V2D_SCROLL_HEIGHT;
+ /* adds vertical offset */
+ sizey += OL_Y_OFFSET;
+
/* update size of tot-rect (extents of data/viewable area) */
UI_view2d_totRect_set(v2d, sizex, sizey);
/* set matrix for 2d-view controls */
UI_view2d_view_ortho(C, v2d);
- /* draw outliner stuff (background and hierachy lines) */
+ /* draw outliner stuff (background, hierachy lines and names) */
outliner_back(ar, soops);
block= uiBeginBlock(C, ar, "outliner buttons", UI_EMBOSS);
outliner_draw_tree((bContext *)C, block, scene, ar, soops);
-
- /* draw icons and names */
- outliner_buttons(C, block, ar, soops, &soops->tree);
if(ELEM(soops->outlinevis, SO_DATABLOCKS, SO_USERDEF)) {
/* draw rna buttons */
@@ -5655,7 +5656,10 @@ void draw_outliner(const bContext *C)
outliner_draw_restrictcols(ar, soops);
outliner_draw_restrictbuts(block, scene, ar, soops, &soops->tree);
}
-
+
+ /* draw edit buttons if nessecery */
+ outliner_buttons(C, block, ar, soops, &soops->tree);
+
uiEndBlock(C, block);
uiDrawBlock(C, block);
diff --git a/source/blender/editors/space_outliner/space_outliner.c b/source/blender/editors/space_outliner/space_outliner.c
index 1c86eb4df70..5e11d3502c1 100644
--- a/source/blender/editors/space_outliner/space_outliner.c
+++ b/source/blender/editors/space_outliner/space_outliner.c
@@ -36,11 +36,8 @@
#include "BLI_math.h"
#include "BLI_rand.h"
-#include "BKE_colortools.h"
#include "BKE_context.h"
#include "BKE_screen.h"
-#include "BKE_texture.h"
-#include "BKE_utildefines.h"
#include "ED_screen.h"
@@ -48,7 +45,6 @@
#include "WM_types.h"
#include "BIF_gl.h"
-#include "BIF_glutil.h"
#include "UI_resources.h"
#include "UI_view2d.h"
@@ -117,13 +113,24 @@ static void outliner_main_area_listener(ARegion *ar, wmNotifier *wmn)
break;
case ND_BONE_ACTIVE:
case ND_BONE_SELECT:
+ case ND_PARENT:
ED_region_tag_redraw(ar);
break;
+ case ND_CONSTRAINT:
+ switch(wmn->action) {
+ case NA_ADDED:
+ case NA_REMOVED:
+ case NA_RENAME:
+ ED_region_tag_redraw(ar);
+ break;
+ }
+ break;
case ND_MODIFIER:
- if(wmn->action == NA_RENAME)
- ED_region_tag_redraw(ar);
+ /* all modifier actions now */
+ ED_region_tag_redraw(ar);
break;
}
+ break;
case NC_GROUP:
/* all actions now, todo: check outliner view mode? */
ED_region_tag_redraw(ar);
diff --git a/source/blender/editors/space_script/CMakeLists.txt b/source/blender/editors/space_script/CMakeLists.txt
index 58b3affe2d4..7abaa4db441 100644
--- a/source/blender/editors/space_script/CMakeLists.txt
+++ b/source/blender/editors/space_script/CMakeLists.txt
@@ -22,17 +22,17 @@
FILE(GLOB SRC *.c)
SET(INC
+ ../include
../../blenkernel
../../blenlib
- ../include
- ../../../../intern/guardedalloc
../../makesdna
../../makesrna
../../windowmanager
+ ../../../../intern/guardedalloc
)
IF(WITH_PYTHON)
- SET(INC ${INC} ${PYTHON_INC} ../../python)
+ LIST(APPEND INC ${PYTHON_INC} ../../python)
ELSE(WITH_PYTHON)
ADD_DEFINITIONS(-DDISABLE_PYTHON)
ENDIF(WITH_PYTHON)
diff --git a/source/blender/editors/space_script/Makefile b/source/blender/editors/space_script/Makefile
index 3322cb61a7f..35462b8c255 100644
--- a/source/blender/editors/space_script/Makefile
+++ b/source/blender/editors/space_script/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2007 Blender Foundation
# All rights reserved.
diff --git a/source/blender/editors/space_script/SConscript b/source/blender/editors/space_script/SConscript
index a78f1a66762..f187df19117 100644
--- a/source/blender/editors/space_script/SConscript
+++ b/source/blender/editors/space_script/SConscript
@@ -11,6 +11,6 @@ incs += ' ../../python'
defs = []
if not env['WITH_BF_PYTHON']:
- defs.append('DISABLE_PYTHON')
+ defs.append('DISABLE_PYTHON')
env.BlenderLib ( 'bf_editors_space_script', sources, Split(incs), defs, libtype=['core'], priority=[90] )
diff --git a/source/blender/editors/space_script/script_edit.c b/source/blender/editors/space_script/script_edit.c
index 6f41f235b7b..610fecaa543 100644
--- a/source/blender/editors/space_script/script_edit.c
+++ b/source/blender/editors/space_script/script_edit.c
@@ -30,15 +30,10 @@
#include <stdio.h>
-#include "MEM_guardedalloc.h"
#include "BLI_blenlib.h"
#include "BKE_context.h"
-#include "BKE_global.h"
-#include "BKE_screen.h"
-#include "BKE_utildefines.h"
-#include "BKE_report.h"
#include "WM_api.h"
#include "WM_types.h"
diff --git a/source/blender/editors/space_script/script_header.c b/source/blender/editors/space_script/script_header.c
index 9c23d1b8131..6e65d458451 100644
--- a/source/blender/editors/space_script/script_header.c
+++ b/source/blender/editors/space_script/script_header.c
@@ -30,20 +30,16 @@
#include <stdio.h>
-#include "MEM_guardedalloc.h"
#include "BLI_blenlib.h"
#include "BKE_context.h"
-#include "BKE_screen.h"
#include "ED_screen.h"
#include "ED_types.h"
#include "ED_util.h"
-#include "BIF_gl.h"
-#include "BIF_glutil.h"
#include "UI_interface.h"
#include "UI_resources.h"
diff --git a/source/blender/editors/space_script/script_ops.c b/source/blender/editors/space_script/script_ops.c
index 15140f080e7..a52ffbd0808 100644
--- a/source/blender/editors/space_script/script_ops.c
+++ b/source/blender/editors/space_script/script_ops.c
@@ -29,7 +29,6 @@
#include <stdlib.h>
#include <math.h>
-#include "MEM_guardedalloc.h"
#include "DNA_screen_types.h"
#include "DNA_space_types.h"
@@ -38,8 +37,6 @@
#include "BLI_blenlib.h"
#include "BKE_context.h"
-#include "BKE_global.h"
-#include "BKE_utildefines.h"
#include "RNA_access.h"
diff --git a/source/blender/editors/space_script/space_script.c b/source/blender/editors/space_script/space_script.c
index 0aba1df47e9..f93ddc6efbe 100644
--- a/source/blender/editors/space_script/space_script.c
+++ b/source/blender/editors/space_script/space_script.c
@@ -36,7 +36,6 @@
#include "BLI_math.h"
#include "BLI_rand.h"
-#include "BKE_colortools.h"
#include "BKE_context.h"
#include "BKE_screen.h"
diff --git a/source/blender/editors/space_sequencer/CMakeLists.txt b/source/blender/editors/space_sequencer/CMakeLists.txt
index 383cc05b7f7..fa99d35a7cd 100644
--- a/source/blender/editors/space_sequencer/CMakeLists.txt
+++ b/source/blender/editors/space_sequencer/CMakeLists.txt
@@ -22,14 +22,14 @@
FILE(GLOB SRC *.c)
SET(INC
+ ../include
../../blenkernel
../../blenlib
../../imbuf
- ../include
- ../../../../intern/guardedalloc
../../makesdna
../../makesrna
../../windowmanager
+ ../../../../intern/guardedalloc
../../../../intern/audaspace/intern
)
diff --git a/source/blender/editors/space_sequencer/Makefile b/source/blender/editors/space_sequencer/Makefile
index 2fb3de516b4..bd2b837d499 100644
--- a/source/blender/editors/space_sequencer/Makefile
+++ b/source/blender/editors/space_sequencer/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2007 Blender Foundation
# All rights reserved.
@@ -38,6 +38,7 @@ CFLAGS += $(LEVEL_1_C_WARNINGS)
CPPFLAGS += -I$(NAN_GLEW)/include
CPPFLAGS += -I$(OPENGL_HEADERS)
+CPPFLAGS += -I$(NAN_PYTHON)/include/python$(NAN_PYTHON_VERSION)
# not very neat....
CPPFLAGS += -I../../windowmanager
diff --git a/source/blender/editors/space_sequencer/sequencer_add.c b/source/blender/editors/space_sequencer/sequencer_add.c
index b00fcfcc22a..b9db18f7850 100644
--- a/source/blender/editors/space_sequencer/sequencer_add.c
+++ b/source/blender/editors/space_sequencer/sequencer_add.c
@@ -47,17 +47,10 @@
#include "BKE_context.h"
#include "BKE_global.h"
-#include "BKE_image.h"
-#include "BKE_library.h"
#include "BKE_main.h"
-#include "BKE_plugin_types.h"
#include "BKE_sequencer.h"
-#include "BKE_scene.h"
-#include "BKE_utildefines.h"
#include "BKE_report.h"
-#include "BIF_gl.h"
-#include "BIF_glutil.h"
#include "WM_api.h"
#include "WM_types.h"
@@ -140,6 +133,7 @@ static void sequencer_generic_invoke_xy__internal(bContext *C, wmOperator *op, w
static void seq_load_operator_info(SeqLoadInfo *seq_load, wmOperator *op)
{
+ int relative= RNA_struct_find_property(op->ptr, "relative_path") && RNA_boolean_get(op->ptr, "relative_path");
int is_file= -1;
memset(seq_load, 0, sizeof(SeqLoadInfo));
@@ -157,6 +151,10 @@ static void seq_load_operator_info(SeqLoadInfo *seq_load, wmOperator *op)
is_file= 0;
}
+ if((is_file != -1) && relative)
+ BLI_path_rel(seq_load->path, G.sce);
+
+
if (RNA_struct_find_property(op->ptr, "frame_end")) {
seq_load->end_frame = RNA_int_get(op->ptr, "frame_end");
}
diff --git a/source/blender/editors/space_sequencer/sequencer_buttons.c b/source/blender/editors/space_sequencer/sequencer_buttons.c
index a2aa7e649b9..4394e334614 100644
--- a/source/blender/editors/space_sequencer/sequencer_buttons.c
+++ b/source/blender/editors/space_sequencer/sequencer_buttons.c
@@ -33,10 +33,7 @@
#include "BLI_blenlib.h"
#include "BKE_context.h"
-#include "BKE_global.h"
-#include "BKE_main.h"
#include "BKE_screen.h"
-#include "BKE_utildefines.h"
#include "ED_screen.h"
diff --git a/source/blender/editors/space_sequencer/sequencer_draw.c b/source/blender/editors/space_sequencer/sequencer_draw.c
index 27f45628492..7c6fd83c6aa 100644
--- a/source/blender/editors/space_sequencer/sequencer_draw.c
+++ b/source/blender/editors/space_sequencer/sequencer_draw.c
@@ -43,9 +43,7 @@
#include "BKE_context.h"
#include "BKE_global.h"
-#include "BKE_plugin_types.h"
#include "BKE_sequencer.h"
-#include "BKE_scene.h"
#include "BKE_utildefines.h"
#include "BKE_sound.h"
@@ -65,6 +63,7 @@
/* own include */
#include "sequencer_intern.h"
+
#define SEQ_LEFTHANDLE 1
#define SEQ_RIGHTHANDLE 2
@@ -77,19 +76,21 @@ static void draw_shadedstrip(Sequence *seq, char *col, float x1, float y1, float
static void get_seq_color3ubv(Scene *curscene, Sequence *seq, char *col)
{
char blendcol[3];
- float hsv[3], rgb[3];
SolidColorVars *colvars = (SolidColorVars *)seq->effectdata;
switch(seq->type) {
case SEQ_IMAGE:
UI_GetThemeColor3ubv(TH_SEQ_IMAGE, col);
break;
+
case SEQ_META:
UI_GetThemeColor3ubv(TH_SEQ_META, col);
break;
+
case SEQ_MOVIE:
UI_GetThemeColor3ubv(TH_SEQ_MOVIE, col);
break;
+
case SEQ_SCENE:
UI_GetThemeColor3ubv(TH_SEQ_SCENE, col);
@@ -97,24 +98,17 @@ static void get_seq_color3ubv(Scene *curscene, Sequence *seq, char *col)
UI_GetColorPtrBlendShade3ubv(col, col, col, 1.0, 20);
}
break;
-
+
/* transitions */
case SEQ_CROSS:
case SEQ_GAMCROSS:
case SEQ_WIPE:
- /* slightly offset hue to distinguish different effects */
UI_GetThemeColor3ubv(TH_SEQ_TRANSITION, col);
-
- rgb[0] = col[0]/255.0; rgb[1] = col[1]/255.0; rgb[2] = col[2]/255.0;
- rgb_to_hsv(rgb[0], rgb[1], rgb[2], hsv, hsv+1, hsv+2);
-
- if (seq->type == SEQ_CROSS) hsv[0]+= 0.04;
- if (seq->type == SEQ_GAMCROSS) hsv[0]+= 0.08;
- if (seq->type == SEQ_WIPE) hsv[0]+= 0.12;
-
- if(hsv[0]>1.0) hsv[0]-=1.0; else if(hsv[0]<0.0) hsv[0]+= 1.0;
- hsv_to_rgb(hsv[0], hsv[1], hsv[2], rgb, rgb+1, rgb+2);
- col[0] = (char)(rgb[0]*255); col[1] = (char)(rgb[1]*255); col[2] = (char)(rgb[2]*255);
+
+ /* slightly offset hue to distinguish different effects */
+ if (seq->type == SEQ_CROSS) rgb_byte_set_hue_float_offset(col,0.04);
+ if (seq->type == SEQ_GAMCROSS) rgb_byte_set_hue_float_offset(col,0.08);
+ if (seq->type == SEQ_WIPE) rgb_byte_set_hue_float_offset(col,0.12);
break;
/* effects */
@@ -128,42 +122,37 @@ static void get_seq_color3ubv(Scene *curscene, Sequence *seq, char *col)
case SEQ_OVERDROP:
case SEQ_GLOW:
case SEQ_MULTICAM:
- /* slightly offset hue to distinguish different effects */
UI_GetThemeColor3ubv(TH_SEQ_EFFECT, col);
- rgb[0] = col[0]/255.0; rgb[1] = col[1]/255.0; rgb[2] = col[2]/255.0;
- rgb_to_hsv(rgb[0], rgb[1], rgb[2], hsv, hsv+1, hsv+2);
-
- if (seq->type == SEQ_ADD) hsv[0]+= 0.04;
- if (seq->type == SEQ_SUB) hsv[0]+= 0.08;
- if (seq->type == SEQ_MUL) hsv[0]+= 0.12;
- if (seq->type == SEQ_ALPHAOVER) hsv[0]+= 0.16;
- if (seq->type == SEQ_ALPHAUNDER) hsv[0]+= 0.20;
- if (seq->type == SEQ_OVERDROP) hsv[0]+= 0.24;
- if (seq->type == SEQ_GLOW) hsv[0]+= 0.28;
- if (seq->type == SEQ_TRANSFORM) hsv[0]+= 0.36;
-
- if(hsv[0]>1.0) hsv[0]-=1.0; else if(hsv[0]<0.0) hsv[0]+= 1.0;
- hsv_to_rgb(hsv[0], hsv[1], hsv[2], rgb, rgb+1, rgb+2);
- col[0] = (char)(rgb[0]*255); col[1] = (char)(rgb[1]*255); col[2] = (char)(rgb[2]*255);
+ /* slightly offset hue to distinguish different effects */
+ if (seq->type == SEQ_ADD) rgb_byte_set_hue_float_offset(col,0.04);
+ if (seq->type == SEQ_SUB) rgb_byte_set_hue_float_offset(col,0.08);
+ if (seq->type == SEQ_MUL) rgb_byte_set_hue_float_offset(col,0.12);
+ if (seq->type == SEQ_ALPHAOVER) rgb_byte_set_hue_float_offset(col,0.16);
+ if (seq->type == SEQ_ALPHAUNDER) rgb_byte_set_hue_float_offset(col,0.20);
+ if (seq->type == SEQ_OVERDROP) rgb_byte_set_hue_float_offset(col,0.24);
+ if (seq->type == SEQ_GLOW) rgb_byte_set_hue_float_offset(col,0.28);
+ if (seq->type == SEQ_TRANSFORM) rgb_byte_set_hue_float_offset(col,0.36);
break;
+
case SEQ_COLOR:
if (colvars->col) {
- col[0]= (char)(colvars->col[0]*255);
- col[1]= (char)(colvars->col[1]*255);
- col[2]= (char)(colvars->col[2]*255);
+ rgb_float_to_byte(colvars->col, col);
} else {
col[0] = col[1] = col[2] = 128;
}
break;
+
case SEQ_PLUGIN:
UI_GetThemeColor3ubv(TH_SEQ_PLUGIN, col);
break;
+
case SEQ_SOUND:
UI_GetThemeColor3ubv(TH_SEQ_AUDIO, col);
blendcol[0] = blendcol[1] = blendcol[2] = 128;
if(seq->flag & SEQ_MUTE) UI_GetColorPtrBlendShade3ubv(col, blendcol, col, 0.5, 20);
break;
+
default:
col[0] = 10; col[1] = 255; col[2] = 40;
}
@@ -599,8 +588,6 @@ so wave file sample drawing precision is zoom adjusted
*/
static void draw_seq_strip(Scene *scene, ARegion *ar, SpaceSeq *sseq, Sequence *seq, int outline_tint, float pixelx)
{
- // XXX
- extern void gl_round_box_shade(int mode, float minx, float miny, float maxx, float maxy, float rad, float shadetop, float shadedown);
View2D *v2d= &ar->v2d;
float x1, x2, y1, y2;
char col[3], background_col[3], is_single_image;
@@ -657,7 +644,7 @@ static void draw_seq_strip(Scene *scene, ARegion *ar, SpaceSeq *sseq, Sequence *
glLineStipple(1, 0x8888);
}
- gl_round_box_shade(GL_LINE_LOOP, x1, y1, x2, y2, 0.0, 0.1, 0.0);
+ uiDrawBoxShade(GL_LINE_LOOP, x1, y1, x2, y2, 0.0, 0.1, 0.0);
if (seq->flag & SEQ_MUTE) {
glDisable(GL_LINE_STIPPLE);
@@ -696,13 +683,12 @@ void set_special_seq_update(int val)
void draw_image_seq(const bContext* C, Scene *scene, ARegion *ar, SpaceSeq *sseq, int cfra, int frame_ofs)
{
- extern void gl_round_box(int mode, float minx, float miny, float maxx, float maxy, float rad);
+ struct Main *bmain= CTX_data_main(C);
struct ImBuf *ibuf = 0;
struct ImBuf *scope = 0;
struct View2D *v2d = &ar->v2d;
int rectx, recty;
float viewrectx, viewrecty;
- static int recursive= 0;
float render_size = 0.0;
float proxy_size = 100.0;
GLuint texid;
@@ -742,33 +728,12 @@ void draw_image_seq(const bContext* C, Scene *scene, ARegion *ar, SpaceSeq *sseq
UI_view2d_totRect_set(v2d, viewrectx + 0.5f, viewrecty + 0.5f);
UI_view2d_curRect_validate(v2d);
- /* BIG PROBLEM: the give_ibuf_seq() can call a rendering, which in turn calls redraws...
- this shouldn't belong in a window drawing....
- So: solve this once event based.
- Now we check for recursion, space type and active area again (ton) */
-
- if(recursive)
- return;
- else {
- recursive= 1;
- if (special_seq_update) {
- ibuf= give_ibuf_seq_direct(scene, rectx, recty, cfra + frame_ofs, proxy_size, special_seq_update);
- }
- else if (!U.prefetchframes) { // XXX || (G.f & G_PLAYANIM) == 0) {
- ibuf= (ImBuf *)give_ibuf_seq(scene, rectx, recty, cfra + frame_ofs, sseq->chanshown, proxy_size);
- }
- else {
- ibuf= (ImBuf *)give_ibuf_seq_threaded(scene, rectx, recty, cfra + frame_ofs, sseq->chanshown, proxy_size);
- }
- recursive= 0;
-
- /* XXX HURMF! the give_ibuf_seq can call image display in this window */
-// if(sa->spacetype!=SPACE_SEQ)
-// return;
-// if(sa!=curarea) {
-// areawinset(sa->win);
-// }
- }
+ if (special_seq_update)
+ ibuf= give_ibuf_seq_direct(bmain, scene, rectx, recty, cfra + frame_ofs, proxy_size, special_seq_update);
+ else if (!U.prefetchframes) // XXX || (G.f & G_PLAYANIM) == 0) {
+ ibuf= (ImBuf *)give_ibuf_seq(bmain, scene, rectx, recty, cfra + frame_ofs, sseq->chanshown, proxy_size);
+ else
+ ibuf= (ImBuf *)give_ibuf_seq_threaded(bmain, scene, rectx, recty, cfra + frame_ofs, sseq->chanshown, proxy_size);
if(ibuf==NULL)
return;
@@ -878,7 +843,7 @@ void draw_image_seq(const bContext* C, Scene *scene, ARegion *ar, SpaceSeq *sseq
glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
uiSetRoundBox(15);
- gl_round_box(GL_LINE_LOOP, x1, y1, x2, y2, 12.0);
+ uiDrawBox(GL_LINE_LOOP, x1, y1, x2, y2, 12.0);
glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
diff --git a/source/blender/editors/space_sequencer/sequencer_edit.c b/source/blender/editors/space_sequencer/sequencer_edit.c
index 27e9645a4d8..d1654dc5d37 100644
--- a/source/blender/editors/space_sequencer/sequencer_edit.c
+++ b/source/blender/editors/space_sequencer/sequencer_edit.c
@@ -43,19 +43,13 @@
#include "BLI_storage_types.h"
-#include "DNA_ipo_types.h"
#include "DNA_scene_types.h"
#include "DNA_userdef_types.h"
#include "BKE_context.h"
#include "BKE_global.h"
-#include "BKE_image.h"
-#include "BKE_library.h"
#include "BKE_main.h"
-#include "BKE_plugin_types.h"
#include "BKE_sequencer.h"
-#include "BKE_scene.h"
-#include "BKE_utildefines.h"
#include "BKE_report.h"
#include "BKE_sound.h"
@@ -741,7 +735,7 @@ static void recurs_del_seq_flag(Scene *scene, ListBase *lb, short flag, short de
}
-static Sequence *cut_seq_hard(Scene *scene, Sequence * seq, int cutframe)
+static Sequence *cut_seq_hard(Main *bmain, Scene *scene, Sequence * seq, int cutframe)
{
TransSeq ts;
Sequence *seqn = 0;
@@ -788,7 +782,7 @@ static Sequence *cut_seq_hard(Scene *scene, Sequence * seq, int cutframe)
}
}
- reload_sequence_new_file(scene, seq, FALSE);
+ reload_sequence_new_file(bmain, scene, seq, FALSE);
calc_sequence(scene, seq);
new_tstripdata(seq);
@@ -828,14 +822,14 @@ static Sequence *cut_seq_hard(Scene *scene, Sequence * seq, int cutframe)
seqn->startstill = 0;
}
- reload_sequence_new_file(scene, seqn, FALSE);
+ reload_sequence_new_file(bmain, scene, seqn, FALSE);
calc_sequence(scene, seqn);
new_tstripdata(seqn);
}
return seqn;
}
-static Sequence *cut_seq_soft(Scene *scene, Sequence * seq, int cutframe)
+static Sequence *cut_seq_soft(Main *bmain, Scene *scene, Sequence * seq, int cutframe)
{
TransSeq ts;
Sequence *seqn = 0;
@@ -925,8 +919,8 @@ static Sequence *cut_seq_soft(Scene *scene, Sequence * seq, int cutframe)
/* like duplicate, but only duplicate and cut overlapping strips,
* strips to the left of the cutframe are ignored and strips to the right are moved into the new list */
-static int cut_seq_list(Scene *scene, ListBase *old, ListBase *new, int cutframe,
- Sequence * (*cut_seq)(Scene *, Sequence *, int))
+static int cut_seq_list(Main *bmain, Scene *scene, ListBase *old, ListBase *new, int cutframe,
+ Sequence * (*cut_seq)(Main *, Scene *, Sequence *, int))
{
int did_something = FALSE;
Sequence *seq, *seq_next;
@@ -940,7 +934,7 @@ static int cut_seq_list(Scene *scene, ListBase *old, ListBase *new, int cutframe
if(seq->flag & SELECT) {
if(cutframe > seq->startdisp &&
cutframe < seq->enddisp) {
- Sequence * seqn = cut_seq(scene, seq, cutframe);
+ Sequence * seqn = cut_seq(bmain, scene, seq, cutframe);
if (seqn) {
BLI_addtail(new, seqn);
}
@@ -1010,7 +1004,7 @@ void touch_seq_files(Scene *scene)
waitcursor(0);
}
-void set_filter_seq(Scene *scene)
+void set_filter_seq(Main *bmain, Scene *scene)
{
Sequence *seq;
Editing *ed= seq_give_editing(scene, FALSE);
@@ -1024,7 +1018,7 @@ void set_filter_seq(Scene *scene)
if(seq->flag & SELECT) {
if(seq->type==SEQ_MOVIE) {
seq->flag |= SEQ_FILTERY;
- reload_sequence_new_file(scene, seq, FALSE);
+ reload_sequence_new_file(bmain, scene, seq, FALSE);
calc_sequence(scene, seq);
}
@@ -1512,6 +1506,7 @@ static EnumPropertyItem prop_cut_types[] = {
static int sequencer_cut_exec(bContext *C, wmOperator *op)
{
+ Main *bmain= CTX_data_main(C);
Scene *scene= CTX_data_scene(C);
Editing *ed= seq_give_editing(scene, FALSE);
int cut_side, cut_hard, cut_frame;
@@ -1526,10 +1521,10 @@ static int sequencer_cut_exec(bContext *C, wmOperator *op)
newlist.first= newlist.last= NULL;
if (cut_hard==SEQ_CUT_HARD) {
- changed = cut_seq_list(scene,
+ changed = cut_seq_list(bmain, scene,
ed->seqbasep, &newlist, cut_frame, cut_seq_hard);
} else {
- changed = cut_seq_list(scene,
+ changed = cut_seq_list(bmain, scene,
ed->seqbasep, &newlist, cut_frame, cut_seq_soft);
}
diff --git a/source/blender/editors/space_sequencer/sequencer_ops.c b/source/blender/editors/space_sequencer/sequencer_ops.c
index ea1c05148a7..041b475223b 100644
--- a/source/blender/editors/space_sequencer/sequencer_ops.c
+++ b/source/blender/editors/space_sequencer/sequencer_ops.c
@@ -30,16 +30,12 @@
#include <stdlib.h>
#include <math.h>
-#include "MEM_guardedalloc.h"
#include "DNA_space_types.h"
#include "BLI_math.h"
#include "BLI_blenlib.h"
-#include "BKE_context.h"
-#include "BKE_global.h"
-#include "BKE_utildefines.h"
#include "WM_api.h"
@@ -122,6 +118,12 @@ void sequencer_keymap(wmKeyConfig *keyconf)
/* operators for sequence */
keymap= WM_keymap_find(keyconf, "Sequencer", SPACE_SEQ, 0);
+
+ WM_keymap_add_item(keymap, "MARKER_OT_add", MKEY, KM_PRESS, KM_CTRL | KM_ALT, 0);
+ WM_keymap_add_item(keymap, "MARKER_OT_move", GKEY, KM_PRESS, KM_CTRL, 0);
+ WM_keymap_add_item(keymap, "MARKER_OT_duplicate", DKEY, KM_PRESS, KM_CTRL | KM_SHIFT, 0);
+ WM_keymap_add_item(keymap, "MARKER_OT_delete", XKEY, KM_PRESS, KM_SHIFT, 0);
+
WM_keymap_add_item(keymap, "SEQUENCER_OT_properties", NKEY, KM_PRESS, 0, 0);
WM_keymap_add_item(keymap, "SEQUENCER_OT_select_all_toggle", AKEY, KM_PRESS, 0, 0);
@@ -247,9 +249,6 @@ void sequencer_keymap(wmKeyConfig *keyconf)
WM_keymap_add_item(keymap, "SEQUENCER_OT_view_all_preview", HOMEKEY, KM_PRESS, 0, 0);
WM_keymap_add_item(keymap, "SEQUENCER_OT_properties", NKEY, KM_PRESS, 0, 0);
-
- keymap= WM_keymap_find(keyconf, "SequencerPreview", SPACE_SEQ, 0);
-
WM_keymap_add_item(keymap, "SEQUENCER_OT_view_ghost_border", OKEY, KM_PRESS, 0, 0);
/* would prefer to use numpad keys for job */
diff --git a/source/blender/editors/space_sequencer/sequencer_select.c b/source/blender/editors/space_sequencer/sequencer_select.c
index 449204900e8..a61e05517d9 100644
--- a/source/blender/editors/space_sequencer/sequencer_select.c
+++ b/source/blender/editors/space_sequencer/sequencer_select.c
@@ -35,7 +35,6 @@
#endif
#include <sys/types.h>
-#include "MEM_guardedalloc.h"
#include "BLI_blenlib.h"
#include "BLI_math.h"
@@ -43,12 +42,7 @@
#include "DNA_scene_types.h"
#include "BKE_context.h"
-#include "BKE_global.h"
-#include "BKE_library.h"
-#include "BKE_main.h"
#include "BKE_sequencer.h"
-#include "BKE_scene.h"
-#include "BKE_utildefines.h"
#include "WM_api.h"
#include "WM_types.h"
diff --git a/source/blender/editors/space_sound/CMakeLists.txt b/source/blender/editors/space_sound/CMakeLists.txt
index 60c8f5e44bd..c78fc11a908 100644
--- a/source/blender/editors/space_sound/CMakeLists.txt
+++ b/source/blender/editors/space_sound/CMakeLists.txt
@@ -22,13 +22,13 @@
FILE(GLOB SRC *.c)
SET(INC
+ ../include
../../blenkernel
../../blenlib
- ../include
- ../../../../intern/guardedalloc
../../makesdna
../../makesrna
../../windowmanager
+ ../../../../intern/guardedalloc
)
BLENDERLIB(bf_editor_space_sound "${SRC}" "${INC}")
diff --git a/source/blender/editors/space_sound/Makefile b/source/blender/editors/space_sound/Makefile
index a072684d543..9afda815f59 100644
--- a/source/blender/editors/space_sound/Makefile
+++ b/source/blender/editors/space_sound/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2007 Blender Foundation
# All rights reserved.
@@ -38,6 +38,8 @@ CFLAGS += $(LEVEL_1_C_WARNINGS)
CPPFLAGS += -I$(NAN_GLEW)/include
CPPFLAGS += -I$(OPENGL_HEADERS)
+CPPFLAGS += -I$(NAN_PYTHON)/include/python$(NAN_PYTHON_VERSION)
+
# not very neat....
CPPFLAGS += -I../../windowmanager
CPPFLAGS += -I../../blenloader
diff --git a/source/blender/editors/space_sound/sound_header.c b/source/blender/editors/space_sound/sound_header.c
index acc9645af9d..fbf6d8c85c9 100644
--- a/source/blender/editors/space_sound/sound_header.c
+++ b/source/blender/editors/space_sound/sound_header.c
@@ -35,7 +35,6 @@
#include "BLI_blenlib.h"
#include "BKE_context.h"
-#include "BKE_screen.h"
#include "ED_screen.h"
#include "ED_types.h"
diff --git a/source/blender/editors/space_sound/space_sound.c b/source/blender/editors/space_sound/space_sound.c
index 174d686cf73..905e1d6cdd9 100644
--- a/source/blender/editors/space_sound/space_sound.c
+++ b/source/blender/editors/space_sound/space_sound.c
@@ -29,7 +29,6 @@
#include <string.h>
#include <stdio.h>
-#include "DNA_sound_types.h"
#include "DNA_scene_types.h"
#include "MEM_guardedalloc.h"
@@ -38,7 +37,6 @@
#include "BLI_math.h"
#include "BLI_rand.h"
-#include "BKE_colortools.h"
#include "BKE_context.h"
#include "BKE_screen.h"
diff --git a/source/blender/editors/space_text/CMakeLists.txt b/source/blender/editors/space_text/CMakeLists.txt
index 0616cf5147a..eabf508b5f6 100644
--- a/source/blender/editors/space_text/CMakeLists.txt
+++ b/source/blender/editors/space_text/CMakeLists.txt
@@ -22,18 +22,18 @@
FILE(GLOB SRC *.c)
SET(INC
+ ../include
../../blenfont
../../blenkernel
../../blenlib
- ../include
- ../../../../intern/guardedalloc
../../makesdna
../../makesrna
../../windowmanager
+ ../../../../intern/guardedalloc
)
IF(WITH_PYTHON)
- SET(INC ${INC} ${PYTHON_INC} ../../python)
+ LIST(APPEND INC ${PYTHON_INC} ../../python)
ELSE(WITH_PYTHON)
ADD_DEFINITIONS(-DDISABLE_PYTHON)
ENDIF(WITH_PYTHON)
diff --git a/source/blender/editors/space_text/Makefile b/source/blender/editors/space_text/Makefile
index 50871017085..8bc12852e18 100644
--- a/source/blender/editors/space_text/Makefile
+++ b/source/blender/editors/space_text/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2007 Blender Foundation
# All rights reserved.
diff --git a/source/blender/editors/space_text/SConscript b/source/blender/editors/space_text/SConscript
index 09ba961bfce..bd87a799756 100644
--- a/source/blender/editors/space_text/SConscript
+++ b/source/blender/editors/space_text/SConscript
@@ -8,6 +8,6 @@ incs += ' ../../windowmanager #/intern/guardedalloc #/extern/glew/include'
incs += ' ../../python ../../makesrna ../../blenfont'
if not env['WITH_BF_PYTHON']:
- defs.append('DISABLE_PYTHON')
+ defs.append('DISABLE_PYTHON')
env.BlenderLib ( 'bf_editors_space_text', sources, Split(incs), defs, libtype=['core'], priority=[95] )
diff --git a/source/blender/editors/space_text/space_text.c b/source/blender/editors/space_text/space_text.c
index bbea5bce226..7f7a07f8cf7 100644
--- a/source/blender/editors/space_text/space_text.c
+++ b/source/blender/editors/space_text/space_text.c
@@ -38,7 +38,6 @@
#include "BLI_math.h"
#include "BLI_rand.h"
-#include "BKE_colortools.h"
#include "BKE_context.h"
#include "BKE_screen.h"
@@ -118,12 +117,29 @@ static void text_listener(ScrArea *sa, wmNotifier *wmn)
/* context changes */
switch(wmn->category) {
case NC_TEXT:
- if(!wmn->reference || wmn->reference == st->text || wmn->data == ND_DISPLAY || wmn->action == NA_EDITED) {
- ED_area_tag_redraw(sa);
+ /* check if active text was changed, no need to redraw if text isn't active
+ reference==NULL means text was unlinked, should update anyway for this
+ case -- no way to know was text active before unlinking or not */
+ if(wmn->reference && wmn->reference != st->text)
+ break;
+
+ switch(wmn->data) {
+ case ND_DISPLAY:
+ case ND_CURSOR:
+ ED_area_tag_redraw(sa);
+ break;
+ }
- if(wmn->action == NA_EDITED)
+ switch(wmn->action) {
+ case NA_EDITED:
if(st->text)
text_update_edited(st->text);
+ ED_area_tag_redraw(sa);
+ /* no break -- fall down to tag redraw */
+ case NA_ADDED:
+ case NA_REMOVED:
+ ED_area_tag_redraw(sa);
+ break;
}
break;
diff --git a/source/blender/editors/space_text/text_draw.c b/source/blender/editors/space_text/text_draw.c
index ddb6e2ad876..62274fc664a 100644
--- a/source/blender/editors/space_text/text_draw.c
+++ b/source/blender/editors/space_text/text_draw.c
@@ -44,14 +44,11 @@
#include "DNA_userdef_types.h"
#include "BKE_context.h"
-#include "BKE_global.h"
-#include "BKE_main.h"
#include "BKE_suggestions.h"
#include "BKE_text.h"
#include "BKE_utildefines.h"
#include "BIF_gl.h"
-#include "BIF_glutil.h"
#include "ED_datafiles.h"
#include "UI_interface.h"
@@ -113,8 +110,8 @@ static void flatten_string_append(FlattenString *fs, char c, int accum)
nbuf= MEM_callocN(sizeof(*fs->buf)*fs->len, "fs->buf");
naccum= MEM_callocN(sizeof(*fs->accum)*fs->len, "fs->accum");
- memcpy(nbuf, fs->buf, fs->pos);
- memcpy(naccum, fs->accum, fs->pos);
+ memcpy(nbuf, fs->buf, fs->pos * sizeof(*fs->buf));
+ memcpy(naccum, fs->accum, fs->pos * sizeof(*fs->accum));
if(fs->buf != fs->fixedbuf) {
MEM_freeN(fs->buf);
@@ -174,12 +171,13 @@ void flatten_string_free(FlattenString *fs)
static int find_builtinfunc(char *string)
{
int a, i;
- char builtinfuncs[][11] = {"and", "as", "assert", "break", "class", "continue", "def",
+ char builtinfuncs[][9] = {"and", "as", "assert", "break", "class", "continue", "def",
"del", "elif", "else", "except", "exec", "finally",
"for", "from", "global", "if", "import", "in",
"is", "lambda", "not", "or", "pass", "print",
- "raise", "return", "try", "while", "yield"};
- for(a=0; a<30; a++) {
+ "raise", "return", "try", "while", "yield", "with"};
+
+ for(a=0; a < sizeof(builtinfuncs)/sizeof(builtinfuncs[0]); a++) {
i = 0;
while(1) {
/* If we hit the end of a keyword... (eg. "def") */
@@ -224,6 +222,18 @@ static int find_specialvar(char *string)
return i;
}
+static int find_decorator(char *string)
+{
+ if(string[0] == '@') {
+ int i = 1;
+ while(text_check_identifier(string[i])) {
+ i++;
+ }
+ return i;
+ }
+ return -1;
+}
+
static int find_bool(char *string)
{
int i = 0;
@@ -377,6 +387,8 @@ static void txt_format_line(SpaceText *st, TextLine *line, int do_next)
prev = 'v';
else if((i=find_builtinfunc(str)) != -1)
prev = 'b';
+ else if((i=find_decorator(str)) != -1)
+ prev = 'v'; /* could have a new color for this */
if(i>0) {
while(i>1) {
*fmt = prev; fmt++; str++;
@@ -1102,6 +1114,22 @@ static void draw_cursor(SpaceText *st, ARegion *ar)
}
}
+ if(st->line_hlight) {
+ y= ar->winy-2 - vsell*st->lheight;
+ if(!(y<0 || y > ar->winy)) { /* check we need to draw */
+ int x1= st->showlinenrs ? TXT_OFFSET + TEXTXLOC : TXT_OFFSET;
+ int x2= x1 + ar->winx;
+ y= ar->winy-2 - vsell*st->lheight;
+
+ glColor4ub(255, 255, 255, 32);
+
+ glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+ glEnable(GL_BLEND);
+ glRecti(x1-4, y, x2, y-st->lheight+1);
+ glDisable(GL_BLEND);
+ }
+ }
+
if(!hidden) {
/* Draw the cursor itself (we draw the sel. cursor as this is the leading edge) */
x= st->showlinenrs ? TXT_OFFSET + TEXTXLOC : TXT_OFFSET;
@@ -1289,7 +1317,7 @@ void draw_text_main(SpaceText *st, ARegion *ar)
}
y= ar->winy-st->lheight;
winx= ar->winx - TXT_SCROLL_WIDTH;
-
+
/* draw cursor */
draw_cursor(st, ar);
diff --git a/source/blender/editors/space_text/text_header.c b/source/blender/editors/space_text/text_header.c
index 3b1c882ff2f..672940cf3cb 100644
--- a/source/blender/editors/space_text/text_header.c
+++ b/source/blender/editors/space_text/text_header.c
@@ -49,24 +49,15 @@
#include "BLI_blenlib.h"
#include "BKE_context.h"
-#include "BKE_global.h"
-#include "BKE_library.h"
-#include "BKE_main.h"
-#include "BKE_scene.h"
-#include "BKE_screen.h"
-#include "BKE_text.h"
#include "ED_screen.h"
#include "WM_types.h"
-#include "BIF_gl.h"
-#include "BIF_glutil.h"
#ifndef DISABLE_PYTHON
-#include "BPY_extern.h"
// XXX #include "BPY_menus.h"
#endif
diff --git a/source/blender/editors/space_text/text_ops.c b/source/blender/editors/space_text/text_ops.c
index efdb1638558..ed70f31f970 100644
--- a/source/blender/editors/space_text/text_ops.c
+++ b/source/blender/editors/space_text/text_ops.c
@@ -34,7 +34,6 @@
#include "MEM_guardedalloc.h"
-#include "DNA_constraint_types.h"
#include "DNA_text_types.h"
#include "DNA_userdef_types.h"
@@ -42,12 +41,10 @@
#include "PIL_time.h"
#include "BKE_context.h"
-#include "BKE_depsgraph.h"
#include "BKE_global.h"
#include "BKE_library.h"
#include "BKE_main.h"
#include "BKE_report.h"
-#include "BKE_suggestions.h"
#include "BKE_text.h"
#include "WM_api.h"
@@ -360,7 +357,7 @@ static int unlink_exec(bContext *C, wmOperator *op)
unlink_text(bmain, text);
free_libblock(&bmain->text, text);
- WM_event_add_notifier(C, NC_TEXT|NA_REMOVED, text);
+ WM_event_add_notifier(C, NC_TEXT|NA_REMOVED, NULL);
return OPERATOR_FINISHED;
}
@@ -584,8 +581,10 @@ void TEXT_OT_run_script(wmOperatorType *ot)
/* api callbacks */
ot->poll= run_script_poll;
ot->exec= run_script_exec;
-}
+ /* flags */
+ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
+}
/******************* refresh pyconstraints operator *********************/
@@ -1710,6 +1709,8 @@ static int toggle_overwrite_exec(bContext *C, wmOperator *op)
st->overwrite= !st->overwrite;
+ WM_event_add_notifier(C, NC_TEXT|ND_CURSOR, st->text);
+
return OPERATOR_FINISHED;
}
diff --git a/source/blender/editors/space_time/CMakeLists.txt b/source/blender/editors/space_time/CMakeLists.txt
index 39b7ba355b9..4da42ec1f42 100644
--- a/source/blender/editors/space_time/CMakeLists.txt
+++ b/source/blender/editors/space_time/CMakeLists.txt
@@ -22,13 +22,13 @@
FILE(GLOB SRC *.c)
SET(INC
+ ../include
../../blenkernel
../../blenlib
- ../include
- ../../../../intern/guardedalloc
../../makesdna
../../makesrna
../../windowmanager
+ ../../../../intern/guardedalloc
)
BLENDERLIB(bf_editor_space_time "${SRC}" "${INC}")
diff --git a/source/blender/editors/space_time/Makefile b/source/blender/editors/space_time/Makefile
index e0bf3943dd8..958c3018f82 100644
--- a/source/blender/editors/space_time/Makefile
+++ b/source/blender/editors/space_time/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2007 Blender Foundation
# All rights reserved.
diff --git a/source/blender/editors/space_time/space_time.c b/source/blender/editors/space_time/space_time.c
index b73c08e6542..de9c063f069 100644
--- a/source/blender/editors/space_time/space_time.c
+++ b/source/blender/editors/space_time/space_time.c
@@ -31,7 +31,6 @@
#include "DNA_object_types.h"
#include "DNA_scene_types.h"
-#include "DNA_particle_types.h"
#include "MEM_guardedalloc.h"
@@ -42,7 +41,6 @@
#include "BKE_global.h"
#include "BKE_screen.h"
#include "BKE_pointcache.h"
-#include "BKE_utildefines.h"
#include "ED_anim_api.h"
#include "ED_keyframes_draw.h"
@@ -398,6 +396,7 @@ static void time_listener(ScrArea *sa, wmNotifier *wmn)
switch (wmn->category) {
case NC_OBJECT:
switch (wmn->data) {
+ case ND_BONE_ACTIVE:
case ND_POINTCACHE:
ED_area_tag_refresh(sa);
ED_area_tag_redraw(sa);
@@ -511,9 +510,14 @@ static void time_main_area_listener(ARegion *ar, wmNotifier *wmn)
break;
case NC_SCENE:
- ED_region_tag_redraw(ar);
- break;
-
+ switch (wmn->data) {
+ case ND_FRAME:
+ case ND_FRAME_RANGE:
+ case ND_KEYINGSET:
+ case ND_RENDER_OPTIONS:
+ ED_region_tag_redraw(ar);
+ break;
+ }
}
}
@@ -542,6 +546,7 @@ static void time_header_area_listener(ARegion *ar, wmNotifier *wmn)
case NC_SCENE:
switch (wmn->data) {
case ND_FRAME:
+ case ND_FRAME_RANGE:
case ND_KEYINGSET:
case ND_RENDER_OPTIONS:
ED_region_tag_redraw(ar);
diff --git a/source/blender/editors/space_time/time_ops.c b/source/blender/editors/space_time/time_ops.c
index 68036d0ea33..fb80d54d5e6 100644
--- a/source/blender/editors/space_time/time_ops.c
+++ b/source/blender/editors/space_time/time_ops.c
@@ -29,14 +29,12 @@
#include <stdlib.h>
#include <math.h>
-#include "MEM_guardedalloc.h"
#include "DNA_scene_types.h"
#include "BLI_blenlib.h"
#include "BKE_context.h"
-#include "BKE_utildefines.h"
#include "ED_screen.h"
diff --git a/source/blender/editors/space_userpref/CMakeLists.txt b/source/blender/editors/space_userpref/CMakeLists.txt
index 1752f39cfa5..d57661bb166 100644
--- a/source/blender/editors/space_userpref/CMakeLists.txt
+++ b/source/blender/editors/space_userpref/CMakeLists.txt
@@ -25,10 +25,10 @@ SET(INC
../include
../../blenkernel
../../blenlib
- ../../../../intern/guardedalloc
../../makesdna
../../makesrna
../../windowmanager
+ ../../../../intern/guardedalloc
)
BLENDERLIB(bf_editor_space_userpref "${SRC}" "${INC}")
diff --git a/source/blender/editors/space_userpref/Makefile b/source/blender/editors/space_userpref/Makefile
index be7206f51ce..8510c355ab4 100644
--- a/source/blender/editors/space_userpref/Makefile
+++ b/source/blender/editors/space_userpref/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2007 Blender Foundation
# All rights reserved.
diff --git a/source/blender/editors/space_userpref/space_userpref.c b/source/blender/editors/space_userpref/space_userpref.c
index 4d6d303625b..8eea83a1083 100644
--- a/source/blender/editors/space_userpref/space_userpref.c
+++ b/source/blender/editors/space_userpref/space_userpref.c
@@ -39,7 +39,6 @@
#include "ED_screen.h"
-#include "BIF_gl.h"
#include "WM_api.h"
#include "WM_types.h"
diff --git a/source/blender/editors/space_view3d/CMakeLists.txt b/source/blender/editors/space_view3d/CMakeLists.txt
index a6945bbe9bb..48747898981 100644
--- a/source/blender/editors/space_view3d/CMakeLists.txt
+++ b/source/blender/editors/space_view3d/CMakeLists.txt
@@ -28,21 +28,21 @@ SET(INC
../../blenlib
../../gpu
../../imbuf
- ../../../../intern/guardedalloc
- ../../../../intern/smoke/extern
../../makesdna
../../makesrna
- ../../render/extern/include
../../windowmanager
+ ../../render/extern/include
+ ../../../../intern/guardedalloc
+ ../../../../intern/smoke/extern
)
IF(WITH_GAMEENGINE)
- SET(INC ${INC} ../../../kernel/gen_system)
+ LIST(APPEND INC ../../../kernel/gen_system)
ADD_DEFINITIONS(-DGAMEBLENDER)
ENDIF(WITH_GAMEENGINE)
IF(WIN32)
- SET(INC ${INC} ${PTHREADS_INC})
+ LIST(APPEND INC ${PTHREADS_INC})
ENDIF(WIN32)
ADD_DEFINITIONS(-DGLEW_STATIC)
diff --git a/source/blender/editors/space_view3d/Makefile b/source/blender/editors/space_view3d/Makefile
index 9204f2482c6..58d88194c22 100644
--- a/source/blender/editors/space_view3d/Makefile
+++ b/source/blender/editors/space_view3d/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2007 Blender Foundation
# All rights reserved.
diff --git a/source/blender/editors/space_view3d/SConscript b/source/blender/editors/space_view3d/SConscript
index 1d8e01f2b1b..d9074113ba9 100644
--- a/source/blender/editors/space_view3d/SConscript
+++ b/source/blender/editors/space_view3d/SConscript
@@ -12,8 +12,8 @@ incs += ' #/intern/smoke/extern'
incs += ' #source/kernel/gen_system'
if env['WITH_BF_GAMEENGINE']:
- defs.append('GAMEBLENDER=1')
+ defs.append('GAMEBLENDER=1')
if env['OURPLATFORM'] in ('win32-vc', 'win32-mingw', 'linuxcross', 'win64-vc'):
- incs += ' ' + env['BF_PTHREADS_INC']
+ incs += ' ' + env['BF_PTHREADS_INC']
env.BlenderLib ( 'bf_editors_space_view3d', sources, Split(incs), defines = defs, libtype=['core'], priority=[40] )
diff --git a/source/blender/editors/space_view3d/drawanimviz.c b/source/blender/editors/space_view3d/drawanimviz.c
index a0437625cb2..fb271556a9c 100644
--- a/source/blender/editors/space_view3d/drawanimviz.c
+++ b/source/blender/editors/space_view3d/drawanimviz.c
@@ -31,7 +31,6 @@
#include <string.h>
#include <math.h>
-#include "MEM_guardedalloc.h"
#include "DNA_anim_types.h"
#include "DNA_armature_types.h"
@@ -46,20 +45,8 @@
#include "BKE_animsys.h"
#include "BKE_action.h"
-#include "BKE_armature.h"
-#include "BKE_constraint.h"
-#include "BKE_context.h"
-#include "BKE_depsgraph.h"
-#include "BKE_DerivedMesh.h"
-#include "BKE_global.h"
-#include "BKE_main.h"
-#include "BKE_modifier.h"
-#include "BKE_nla.h"
-#include "BKE_object.h"
-#include "BKE_utildefines.h"
#include "BIF_gl.h"
-#include "BIF_glutil.h"
#include "ED_armature.h"
#include "ED_keyframes_draw.h"
diff --git a/source/blender/editors/space_view3d/drawarmature.c b/source/blender/editors/space_view3d/drawarmature.c
index e6f4b2b9f8f..c6aa4656191 100644
--- a/source/blender/editors/space_view3d/drawarmature.c
+++ b/source/blender/editors/space_view3d/drawarmature.c
@@ -31,7 +31,6 @@
#include <string.h>
#include <math.h>
-#include "MEM_guardedalloc.h"
#include "DNA_anim_types.h"
#include "DNA_armature_types.h"
@@ -48,15 +47,9 @@
#include "BKE_animsys.h"
#include "BKE_action.h"
#include "BKE_armature.h"
-#include "BKE_constraint.h"
-#include "BKE_context.h"
-#include "BKE_depsgraph.h"
-#include "BKE_DerivedMesh.h"
#include "BKE_global.h"
-#include "BKE_main.h"
#include "BKE_modifier.h"
#include "BKE_nla.h"
-#include "BKE_object.h"
#include "BKE_utildefines.h"
#include "BIF_gl.h"
@@ -317,7 +310,7 @@ static void drawsolidcube_size(float xsize, float ysize, float zsize)
if(displist==0) {
displist= glGenLists(1);
- glNewList(displist, GL_COMPILE_AND_EXECUTE);
+ glNewList(displist, GL_COMPILE);
glBegin(GL_QUADS);
n[0]= -1.0;
@@ -347,19 +340,17 @@ static void drawsolidcube_size(float xsize, float ysize, float zsize)
glEndList();
}
- else glCallList(displist);
-
+
+ glCallList(displist);
}
static void drawcube_size(float xsize, float ysize, float zsize)
{
static GLuint displist=0;
- glScalef(xsize, ysize, zsize);
-
if(displist == 0) {
displist= glGenLists(1);
- glNewList(displist, GL_COMPILE_AND_EXECUTE);
+ glNewList(displist, GL_COMPILE);
glBegin(GL_LINE_STRIP);
glVertex3fv(cube[0]); glVertex3fv(cube[1]);glVertex3fv(cube[2]); glVertex3fv(cube[3]);
@@ -375,7 +366,9 @@ static void drawcube_size(float xsize, float ysize, float zsize)
glEndList();
}
- else glCallList(displist);
+
+ glScalef(xsize, ysize, zsize);
+ glCallList(displist);
}
@@ -388,7 +381,7 @@ static void draw_bonevert(void)
GLUquadricObj *qobj;
displist= glGenLists(1);
- glNewList(displist, GL_COMPILE_AND_EXECUTE);
+ glNewList(displist, GL_COMPILE);
glPushMatrix();
@@ -407,8 +400,8 @@ static void draw_bonevert(void)
glPopMatrix();
glEndList();
}
- else
- glCallList(displist);
+
+ glCallList(displist);
}
static void draw_bonevert_solid(void)
@@ -419,7 +412,7 @@ static void draw_bonevert_solid(void)
GLUquadricObj *qobj;
displist= glGenLists(1);
- glNewList(displist, GL_COMPILE_AND_EXECUTE);
+ glNewList(displist, GL_COMPILE);
qobj = gluNewQuadric();
gluQuadricDrawStyle(qobj, GLU_FILL);
@@ -430,8 +423,8 @@ static void draw_bonevert_solid(void)
glEndList();
}
- else
- glCallList(displist);
+
+ glCallList(displist);
}
static void draw_bone_octahedral()
@@ -442,7 +435,7 @@ static void draw_bone_octahedral()
float vec[6][3];
displist= glGenLists(1);
- glNewList(displist, GL_COMPILE_AND_EXECUTE);
+ glNewList(displist, GL_COMPILE);
vec[0][0]= vec[0][1]= vec[0][2]= 0.0f;
vec[5][0]= vec[5][2]= 0.0f; vec[5][1]= 1.0f;
@@ -474,8 +467,8 @@ static void draw_bone_octahedral()
glEndList();
}
- else
- glCallList(displist);
+
+ glCallList(displist);
}
static void draw_bone_solid_octahedral(void)
@@ -486,7 +479,7 @@ static void draw_bone_solid_octahedral(void)
float vec[6][3], nor[3];
displist= glGenLists(1);
- glNewList(displist, GL_COMPILE_AND_EXECUTE);
+ glNewList(displist, GL_COMPILE);
vec[0][0]= vec[0][1]= vec[0][2]= 0.0f;
vec[5][0]= vec[5][2]= 0.0f; vec[5][1]= 1.0f;
@@ -536,8 +529,8 @@ static void draw_bone_solid_octahedral(void)
glEndList();
}
- else
- glCallList(displist);
+
+ glCallList(displist);
}
/* *************** Armature drawing, bones ******************* */
@@ -662,6 +655,26 @@ static void draw_sphere_bone_dist(float smat[][4], float imat[][4], int boneflag
mul_mat3_m4_v3(smat, dirvec);
/* clear zcomp */
dirvec[2]= 0.0f;
+
+ if(head != tail) {
+ /* correcyion when viewing along the bones axis
+ * it pops in and out but better then artifacts, [#23841] */
+ float view_dist= len_v2(dirvec);
+
+ if(head - view_dist > tail) {
+ tailvec= headvec;
+ tail = head;
+ zero_v3(dirvec);
+ dirvec[0]= 0.00001; // XXX. weak but ok
+ }
+ else if(tail - view_dist > head) {
+ headvec= tailvec;
+ head = tail;
+ zero_v3(dirvec);
+ dirvec[0]= 0.00001; // XXX. weak but ok
+ }
+ }
+
/* move vector back */
mul_mat3_m4_v3(imat, dirvec);
@@ -1940,7 +1953,7 @@ static void draw_ebones(View3D *v3d, ARegion *ar, Object *ob, int dt)
if (v3d->zbuf) glDisable(GL_DEPTH_TEST);
- for (eBone=arm->edbo->first, index=0; eBone; eBone=eBone->next, index++) {
+ for (eBone=arm->edbo->first; eBone; eBone=eBone->next) {
if (eBone->layer & arm->layer) {
if ((eBone->flag & (BONE_HIDDEN_A|BONE_NO_DEFORM))==0) {
if (eBone->flag & (BONE_SELECTED|BONE_TIPSEL|BONE_ROOTSEL))
@@ -1956,7 +1969,6 @@ static void draw_ebones(View3D *v3d, ARegion *ar, Object *ob, int dt)
/* if solid we draw it first */
if ((dt > OB_WIRE) && (arm->drawtype!=ARM_LINE)) {
- index= 0;
for (eBone=arm->edbo->first, index=0; eBone; eBone=eBone->next, index++) {
if (eBone->layer & arm->layer) {
if ((eBone->flag & BONE_HIDDEN_A)==0) {
@@ -2050,6 +2062,7 @@ static void draw_ebones(View3D *v3d, ARegion *ar, Object *ob, int dt)
}
/* restore */
+ if(index!=-1) glLoadName(-1);
if (arm->drawtype==ARM_LINE);
else if (dt>OB_WIRE) bglPolygonOffset(rv3d->dist, 0.0f);
@@ -2061,7 +2074,7 @@ static void draw_ebones(View3D *v3d, ARegion *ar, Object *ob, int dt)
if (v3d->zbuf) glDisable(GL_DEPTH_TEST);
- for (eBone=arm->edbo->first, index=0; eBone; eBone=eBone->next, index++) {
+ for (eBone=arm->edbo->first; eBone; eBone=eBone->next) {
if(eBone->layer & arm->layer) {
if ((eBone->flag & BONE_HIDDEN_A)==0) {
diff --git a/source/blender/editors/space_view3d/drawmesh.c b/source/blender/editors/space_view3d/drawmesh.c
index f0e2f33491c..372ac976342 100644
--- a/source/blender/editors/space_view3d/drawmesh.c
+++ b/source/blender/editors/space_view3d/drawmesh.c
@@ -42,17 +42,12 @@
#include "DNA_scene_types.h"
#include "DNA_screen_types.h"
#include "DNA_view3d_types.h"
+#include "DNA_object_types.h"
-#include "BKE_bmfont.h"
-#include "BKE_displist.h"
#include "BKE_DerivedMesh.h"
#include "BKE_effect.h"
-#include "BKE_global.h"
#include "BKE_image.h"
-#include "BKE_main.h"
#include "BKE_material.h"
-#include "BKE_mesh.h"
-#include "BKE_object.h"
#include "BKE_paint.h"
#include "BKE_property.h"
#include "BKE_utildefines.h"
diff --git a/source/blender/editors/space_view3d/drawobject.c b/source/blender/editors/space_view3d/drawobject.c
index adbb326902e..44fa0c7b181 100644
--- a/source/blender/editors/space_view3d/drawobject.c
+++ b/source/blender/editors/space_view3d/drawobject.c
@@ -49,12 +49,10 @@
#include "BLI_rand.h"
#include "BKE_anim.h" //for the where_on_path function
-#include "BKE_curve.h"
#include "BKE_constraint.h" // for the get_constraint_target function
#include "BKE_DerivedMesh.h"
#include "BKE_deform.h"
#include "BKE_displist.h"
-#include "BKE_effect.h"
#include "BKE_font.h"
#include "BKE_global.h"
#include "BKE_image.h"
@@ -68,9 +66,6 @@
#include "BKE_paint.h"
#include "BKE_particle.h"
#include "BKE_pointcache.h"
-#include "BKE_property.h"
-#include "BKE_softbody.h"
-#include "BKE_smoke.h"
#include "BKE_unit.h"
#include "BKE_utildefines.h"
#include "smoke_API.h"
@@ -906,7 +901,7 @@ static void drawlamp(Scene *scene, View3D *v3d, RegionView3D *rv3d, Base *base,
if(drawcone && !v3d->transp) {
/* in this case we need to draw delayed */
- add_view3d_after(v3d, base, V3D_TRANSP, flag);
+ add_view3d_after(&v3d->afterdraw_transp, base, flag);
return;
}
@@ -1362,10 +1357,10 @@ void lattice_foreachScreenVert(ViewContext *vc, void (*func)(void *userData, BPo
{
Object *obedit= vc->obedit;
Lattice *lt= obedit->data;
- BPoint *bp = lt->editlatt->def;
+ BPoint *bp = lt->editlatt->latt->def;
DispList *dl = find_displist(&obedit->disp, DL_VERTS);
float *co = dl?dl->verts:NULL;
- int i, N = lt->editlatt->pntsu*lt->editlatt->pntsv*lt->editlatt->pntsw;
+ int i, N = lt->editlatt->latt->pntsu*lt->editlatt->latt->pntsv*lt->editlatt->latt->pntsw;
short s[2] = {IS_CLIPPED, 0};
ED_view3d_local_clipping(vc->rv3d, obedit->obmat); /* for local clipping lookups */
@@ -1413,7 +1408,7 @@ static void drawlattice(Scene *scene, View3D *v3d, Object *ob)
dl= find_displist(&ob->disp, DL_VERTS);
if(is_edit) {
- lt= lt->editlatt;
+ lt= lt->editlatt->latt;
cpack(0x004000);
@@ -2727,7 +2722,8 @@ static int draw_mesh_object(Scene *scene, ARegion *ar, View3D *v3d, RegionView3D
int do_alpha_pass= 0, drawlinked= 0, retval= 0, glsl, check_alpha;
if(obedit && ob!=obedit && ob->data==obedit->data) {
- if(ob_get_key(ob));
+ if(ob_get_key(ob) || ob_get_key(obedit));
+ else if(ob->modifiers.first || obedit->modifiers.first);
else drawlinked= 1;
}
@@ -2773,7 +2769,20 @@ static int draw_mesh_object(Scene *scene, ARegion *ar, View3D *v3d, RegionView3D
}
/* GPU_begin_object_materials checked if this is needed */
- if(do_alpha_pass) add_view3d_after(v3d, base, V3D_TRANSP, flag);
+ if(do_alpha_pass) {
+ 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);
+ }
+ }
return retval;
}
@@ -3066,12 +3075,15 @@ static int drawCurveDerivedMesh(Scene *scene, View3D *v3d, RegionView3D *rv3d, B
int glsl = draw_glsl_material(scene, ob, v3d, dt);
GPU_begin_object_materials(v3d, rv3d, scene, ob, glsl, NULL);
- if (!glsl)
+ if(!glsl) {
glLightModeli(GL_LIGHT_MODEL_TWO_SIDE, 0);
+ glEnable(GL_LIGHTING);
+ dm->drawFacesSolid(dm, NULL, 0, GPU_enable_material);
+ glDisable(GL_LIGHTING);
+ }
+ else
+ dm->drawFacesGLSL(dm, GPU_enable_material);
- glEnable(GL_LIGHTING);
- dm->drawFacesSolid(dm, NULL, 0, GPU_enable_material);
- glDisable(GL_LIGHTING);
GPU_end_object_materials();
} else {
if((v3d->flag2 & V3D_RENDER_OVERRIDE && v3d->drawtype >= OB_SOLID)==0)
@@ -3366,7 +3378,7 @@ static void draw_particle(ParticleKey *state, int draw_as, short draw, float pix
add_v3_v3v3(pdd->vd, bb_center, xvec);
add_v3_v3(pdd->vd, yvec); pdd->vd+=3;
- sub_v3_v3v3(pdd->vd, bb_center, vec);
+ sub_v3_v3v3(pdd->vd, bb_center, xvec);
add_v3_v3(pdd->vd, yvec); pdd->vd+=3;
sub_v3_v3v3(pdd->vd, bb_center, xvec);
@@ -4763,7 +4775,7 @@ static void draw_empty_sphere (float size)
GLUquadricObj *qobj;
displist= glGenLists(1);
- glNewList(displist, GL_COMPILE_AND_EXECUTE);
+ glNewList(displist, GL_COMPILE);
glPushMatrix();
@@ -4784,8 +4796,8 @@ static void draw_empty_sphere (float size)
}
glScalef(size, size, size);
- glCallList(displist);
- glScalef(1/size, 1/size, 1/size);
+ glCallList(displist);
+ glScalef(1.0f/size, 1.0f/size, 1.0f/size);
}
/* draw a cone for use as an empty drawtype */
@@ -5474,10 +5486,9 @@ static void draw_hooks(Object *ob)
//<rcruiz>
void drawRBpivot(bRigidBodyJointConstraint *data)
{
- float radsPerDeg = 6.283185307179586232f / 360.f;
int axis;
float v1[3]= {data->pivX, data->pivY, data->pivZ};
- float eu[3]= {radsPerDeg*data->axX, radsPerDeg*data->axY, radsPerDeg*data->axZ};
+ float eu[3]= {data->axX, data->axY, data->axZ};
float mat[4][4];
eul_to_mat4(mat,eu);
@@ -5543,7 +5554,7 @@ void draw_object(Scene *scene, ARegion *ar, View3D *v3d, Base *base, int flag)
if(!(ob->mode & OB_MODE_PARTICLE_EDIT)) {
/* xray and transp are set when it is drawing the 2nd/3rd pass */
if(!v3d->xray && !v3d->transp && (ob->dtx & OB_DRAWXRAY) && !(ob->dtx & OB_DRAWTRANSP)) {
- add_view3d_after(v3d, base, V3D_XRAY, flag);
+ add_view3d_after(&v3d->afterdraw_xray, base, flag);
return;
}
}
diff --git a/source/blender/editors/space_view3d/drawvolume.c b/source/blender/editors/space_view3d/drawvolume.c
index 7ff74c82876..678920f8173 100644
--- a/source/blender/editors/space_view3d/drawvolume.c
+++ b/source/blender/editors/space_view3d/drawvolume.c
@@ -65,12 +65,10 @@
#include "BKE_particle.h"
#include "BKE_property.h"
#include "BKE_smoke.h"
-#include "BKE_unit.h"
#include "BKE_utildefines.h"
#include "smoke_API.h"
#include "BIF_gl.h"
-#include "BIF_glutil.h"
#include "GPU_extensions.h"
@@ -118,6 +116,7 @@ static void tend ( void )
{
gettimeofday ( &_tend,&tz );
}
+ #if 0
static double tval()
{
double t1, t2;
@@ -125,6 +124,7 @@ static double tval()
t2 = ( double ) _tend.tv_sec*1000 + ( double ) _tend.tv_usec/ ( 1000 );
return t2-t1;
}
+ #endif
#endif
struct GPUTexture;
diff --git a/source/blender/editors/space_view3d/space_view3d.c b/source/blender/editors/space_view3d/space_view3d.c
index c04c3498cb5..c6b92fae1c0 100644
--- a/source/blender/editors/space_view3d/space_view3d.c
+++ b/source/blender/editors/space_view3d/space_view3d.c
@@ -38,12 +38,8 @@
#include "BLI_math.h"
#include "BLI_rand.h"
-#include "BKE_action.h"
#include "BKE_context.h"
-#include "BKE_global.h"
#include "BKE_screen.h"
-#include "BKE_utildefines.h"
-#include "BKE_image.h"
#include "ED_screen.h"
#include "ED_object.h"
@@ -274,7 +270,6 @@ static void view3d_free(SpaceLink *sl)
if(vd->localvd) MEM_freeN(vd->localvd);
if(vd->properties_storage) MEM_freeN(vd->properties_storage);
-
}
@@ -414,16 +409,31 @@ static int view3d_mat_drop_poll(bContext *C, wmDrag *drag, wmEvent *event)
static int view3d_ima_drop_poll(bContext *C, wmDrag *drag, wmEvent *event)
{
+ if(drag->type==WM_DRAG_ID) {
+ ID *id= (ID *)drag->poin;
+ if( GS(id->name)==ID_IM )
+ return 1;
+ }
+ else if(drag->type==WM_DRAG_PATH){
+ if(ELEM(drag->icon, 0, ICON_FILE_IMAGE)) /* rule might not work? */
+ return 1;
+ }
+ return 0;
+}
+
+
+static int view3d_ima_bg_drop_poll(bContext *C, wmDrag *drag, wmEvent *event)
+{
if( ED_view3d_give_base_under_cursor(C, event->mval) ) {
- if(drag->type==WM_DRAG_ID) {
- ID *id= (ID *)drag->poin;
- if( GS(id->name)==ID_IM )
- return 1;
- }
- else if(drag->type==WM_DRAG_PATH){
- if(ELEM(drag->icon, 0, ICON_FILE_IMAGE)) /* rule might not work? */
- return 1;
- }
+ return 0;
+ }
+ return view3d_ima_drop_poll(C, drag, event);
+}
+
+static int view3d_ima_ob_drop_poll(bContext *C, wmDrag *drag, wmEvent *event)
+{
+ if( ED_view3d_give_base_under_cursor(C, event->mval) ) {
+ return view3d_ima_drop_poll(C, drag, event);
}
return 0;
}
@@ -466,7 +476,8 @@ static void view3d_dropboxes(void)
WM_dropbox_add(lb, "OBJECT_OT_add_named_cursor", view3d_ob_drop_poll, view3d_ob_drop_copy);
WM_dropbox_add(lb, "OBJECT_OT_drop_named_material", view3d_mat_drop_poll, view3d_id_drop_copy);
- WM_dropbox_add(lb, "MESH_OT_drop_named_image", view3d_ima_drop_poll, view3d_id_path_drop_copy);
+ WM_dropbox_add(lb, "MESH_OT_drop_named_image", view3d_ima_ob_drop_poll, view3d_id_path_drop_copy);
+ WM_dropbox_add(lb, "VIEW3D_OT_add_background_image", view3d_ima_bg_drop_poll, view3d_id_path_drop_copy);
}
@@ -518,6 +529,37 @@ static void *view3d_main_area_duplicate(void *poin)
return NULL;
}
+static void view3d_recalc_used_layers(ARegion *ar, wmNotifier *wmn)
+{
+ wmWindow *win= wmn->wm->winactive;
+ ScrArea *sa;
+
+ if (!win) return;
+
+ sa= win->screen->areabase.first;
+
+ while(sa) {
+ if(sa->spacetype == SPACE_VIEW3D)
+ if(BLI_findindex(&sa->regionbase, ar) >= 0) {
+ View3D *v3d= sa->spacedata.first;
+ Scene *scene= wmn->reference;
+ Base *base;
+
+ v3d->lay_used= 0;
+ base= scene->base.first;
+ while(base) {
+ v3d->lay_used|= base->lay;
+
+ base= base->next;
+ }
+
+ break;
+ }
+
+ sa= sa->next;
+ }
+}
+
static void view3d_main_area_listener(ARegion *ar, wmNotifier *wmn)
{
/* context changes */
@@ -541,10 +583,15 @@ static void view3d_main_area_listener(ARegion *ar, wmNotifier *wmn)
break;
case NC_SCENE:
switch(wmn->data) {
+ case ND_LAYER_CONTENT:
+ view3d_recalc_used_layers(ar, wmn);
+ ED_region_tag_redraw(ar);
+ break;
case ND_FRAME:
case ND_TRANSFORM:
case ND_OB_ACTIVE:
case ND_OB_SELECT:
+ case ND_OB_VISIBLE:
case ND_LAYER:
case ND_RENDER_OPTIONS:
case ND_MODE:
@@ -682,6 +729,7 @@ static void view3d_header_area_listener(ARegion *ar, wmNotifier *wmn)
case ND_MODE:
case ND_LAYER:
case ND_TOOLSETTINGS:
+ case ND_LAYER_CONTENT:
ED_region_tag_redraw(ar);
break;
}
@@ -733,6 +781,7 @@ static void view3d_buttons_area_listener(ARegion *ar, wmNotifier *wmn)
case ND_OB_SELECT:
case ND_MODE:
case ND_LAYER:
+ case ND_LAYER_CONTENT:
ED_region_tag_redraw(ar);
break;
}
diff --git a/source/blender/editors/space_view3d/view3d_buttons.c b/source/blender/editors/space_view3d/view3d_buttons.c
index f4ae87c5b60..a0167c87d87 100644
--- a/source/blender/editors/space_view3d/view3d_buttons.c
+++ b/source/blender/editors/space_view3d/view3d_buttons.c
@@ -47,22 +47,15 @@
#include "BLI_rand.h"
#include "BKE_action.h"
-#include "BKE_brush.h"
#include "BKE_context.h"
#include "BKE_curve.h"
#include "BKE_customdata.h"
#include "BKE_depsgraph.h"
-#include "BKE_idprop.h"
#include "BKE_main.h"
#include "BKE_mesh.h"
-#include "BKE_object.h"
-#include "BKE_global.h"
-#include "BKE_scene.h"
#include "BKE_screen.h"
-#include "BKE_utildefines.h"
#include "BKE_deform.h"
-#include "BIF_gl.h"
#include "WM_api.h"
#include "WM_types.h"
@@ -261,8 +254,8 @@ static void v3d_editvertex_buts(const bContext *C, uiLayout *layout, View3D *v3d
BPoint *bp;
int a;
- a= lt->editlatt->pntsu*lt->editlatt->pntsv*lt->editlatt->pntsw;
- bp= lt->editlatt->def;
+ a= lt->editlatt->latt->pntsu*lt->editlatt->latt->pntsv*lt->editlatt->latt->pntsw;
+ bp= lt->editlatt->latt->def;
while(a--) {
if(bp->f1 & SELECT) {
add_v3_v3(median, bp->vec);
@@ -361,7 +354,7 @@ static void v3d_editvertex_buts(const bContext *C, uiLayout *layout, View3D *v3d
if(totedge==1)
uiDefButF(block, NUM, B_OBJECTPANELMEDIAN, "Crease:", 0, 20, 200, 20, &(tfp->ve_median[3]), 0.0, 1.0, 10, 3, "");
else if(totedge>1)
- uiDefButF(block, NUM, B_OBJECTPANELMEDIAN, "Median Crease:", 0, 20, 200, 20, &(tfp->ve_median[3]), 0.0, 1.0, 10, 3, "");
+ uiDefButF(block, NUM, B_OBJECTPANELMEDIAN, "Mean Crease:", 0, 20, 200, 20, &(tfp->ve_median[3]), 0.0, 1.0, 10, 3, "");
}
else { // apply
@@ -463,8 +456,8 @@ static void v3d_editvertex_buts(const bContext *C, uiLayout *layout, View3D *v3d
BPoint *bp;
int a;
- a= lt->editlatt->pntsu*lt->editlatt->pntsv*lt->editlatt->pntsw;
- bp= lt->editlatt->def;
+ a= lt->editlatt->latt->pntsu*lt->editlatt->latt->pntsv*lt->editlatt->latt->pntsw;
+ bp= lt->editlatt->latt->def;
while(a--) {
if(bp->f1 & SELECT) {
add_v3_v3(bp->vec, median);
diff --git a/source/blender/editors/space_view3d/view3d_draw.c b/source/blender/editors/space_view3d/view3d_draw.c
index 6395e9e8be8..a44f2b15d11 100644
--- a/source/blender/editors/space_view3d/view3d_draw.c
+++ b/source/blender/editors/space_view3d/view3d_draw.c
@@ -50,14 +50,11 @@
#include "BKE_context.h"
#include "BKE_customdata.h"
#include "BKE_image.h"
-#include "BKE_ipo.h"
#include "BKE_key.h"
#include "BKE_object.h"
#include "BKE_global.h"
#include "BKE_paint.h"
#include "BKE_scene.h"
-#include "BKE_screen.h"
-#include "BKE_utildefines.h"
#include "BKE_unit.h"
#include "RE_pipeline.h" // make_stars
@@ -78,7 +75,6 @@
#include "ED_space_api.h"
#include "ED_screen_types.h"
#include "ED_transform.h"
-#include "ED_gpencil.h"
#include "UI_interface.h"
#include "UI_interface_icons.h"
@@ -866,7 +862,7 @@ static void view3d_get_viewborder_size(Scene *scene, ARegion *ar, float size_r[2
}
}
-void calc_viewborder(Scene *scene, ARegion *ar, RegionView3D *rv3d, View3D *v3d, rctf *viewborder_r)
+void view3d_calc_camera_border(Scene *scene, ARegion *ar, RegionView3D *rv3d, View3D *v3d, rctf *viewborder_r)
{
float zoomfac, size[2];
float dx= 0.0f, dy= 0.0f;
@@ -927,7 +923,7 @@ void view3d_set_1_to_1_viewborder(Scene *scene, ARegion *ar)
view3d_get_viewborder_size(scene, ar, size);
rv3d->camzoom= (sqrt(4.0*im_width/size[0]) - M_SQRT2)*50.0;
- rv3d->camzoom= CLAMPIS(rv3d->camzoom, -30, 300);
+ rv3d->camzoom= CLAMPIS(rv3d->camzoom, RV3D_CAMZOOM_MIN, RV3D_CAMZOOM_MAX);
}
@@ -978,7 +974,6 @@ static void drawviewborder_flymode(ARegion *ar)
static void drawviewborder(Scene *scene, ARegion *ar, View3D *v3d)
{
- extern void gl_round_box(int mode, float minx, float miny, float maxx, float maxy, float rad); // interface_panel.c
float fac, a;
float x1, x2, y1, y2;
float x1i, x2i, y1i, y2i;
@@ -992,7 +987,7 @@ static void drawviewborder(Scene *scene, ARegion *ar, View3D *v3d)
if(v3d->camera->type==OB_CAMERA)
ca = v3d->camera->data;
- calc_viewborder(scene, ar, rv3d, v3d, &viewborder);
+ view3d_calc_camera_border(scene, ar, rv3d, v3d, &viewborder);
/* the offsets */
x1= viewborder.xmin;
y1= viewborder.ymin;
@@ -1065,7 +1060,7 @@ static void drawviewborder(Scene *scene, ARegion *ar, View3D *v3d)
UI_ThemeColorBlendShade(TH_WIRE, TH_BACK, 0.25, 0);
uiSetRoundBox(15);
- gl_round_box(GL_LINE_LOOP, x1, y1, x2, y2, 12.0);
+ uiDrawBox(GL_LINE_LOOP, x1, y1, x2, y2, 12.0);
}
setlinestyle(0);
@@ -1329,7 +1324,7 @@ static void draw_bgpic(Scene *scene, ARegion *ar, View3D *v3d)
if(rv3d->persp==RV3D_CAMOB) {
rctf vb;
- calc_viewborder(scene, ar, rv3d, v3d, &vb);
+ view3d_calc_camera_border(scene, ar, rv3d, v3d, &vb);
x1= vb.xmin;
y1= vb.ymin;
@@ -1423,45 +1418,18 @@ static void draw_bgpic(Scene *scene, ARegion *ar, View3D *v3d)
typedef struct View3DAfter {
struct View3DAfter *next, *prev;
struct Base *base;
- int type, flag;
+ int flag;
} View3DAfter;
/* temp storage of Objects that need to be drawn as last */
-void add_view3d_after(View3D *v3d, Base *base, int type, int flag)
+void add_view3d_after(ListBase *lb, Base *base, int flag)
{
View3DAfter *v3da= MEM_callocN(sizeof(View3DAfter), "View 3d after");
-
- BLI_addtail(&v3d->afterdraw, v3da);
+ BLI_addtail(lb, v3da);
v3da->base= base;
- v3da->type= type;
v3da->flag= flag;
}
-/* clears zbuffer and draws it over */
-static void view3d_draw_xray(Scene *scene, ARegion *ar, View3D *v3d, int clear)
-{
- View3DAfter *v3da, *next;
- int doit= 0;
-
- for(v3da= v3d->afterdraw.first; v3da; v3da= v3da->next)
- if(v3da->type==V3D_XRAY) doit= 1;
-
- if(doit) {
- if(clear && v3d->zbuf) glClear(GL_DEPTH_BUFFER_BIT);
- v3d->xray= TRUE;
-
- for(v3da= v3d->afterdraw.first; v3da; v3da= next) {
- next= v3da->next;
- if(v3da->type==V3D_XRAY) {
- draw_object(scene, ar, v3d, v3da->base, v3da->flag);
- BLI_remlink(&v3d->afterdraw, v3da);
- MEM_freeN(v3da);
- }
- }
- v3d->xray= FALSE;
- }
-}
-
/* disables write in zbuffer and draws it over */
static void view3d_draw_transp(Scene *scene, ARegion *ar, View3D *v3d)
{
@@ -1470,13 +1438,11 @@ static void view3d_draw_transp(Scene *scene, ARegion *ar, View3D *v3d)
glDepthMask(0);
v3d->transp= TRUE;
- for(v3da= v3d->afterdraw.first; v3da; v3da= next) {
+ for(v3da= v3d->afterdraw_transp.first; v3da; v3da= next) {
next= v3da->next;
- if(v3da->type==V3D_TRANSP) {
- draw_object(scene, ar, v3d, v3da->base, v3da->flag);
- BLI_remlink(&v3d->afterdraw, v3da);
- MEM_freeN(v3da);
- }
+ draw_object(scene, ar, v3d, v3da->base, v3da->flag);
+ BLI_remlink(&v3d->afterdraw_transp, v3da);
+ MEM_freeN(v3da);
}
v3d->transp= FALSE;
@@ -1484,6 +1450,48 @@ static void view3d_draw_transp(Scene *scene, ARegion *ar, View3D *v3d)
}
+/* clears zbuffer and draws it over */
+static void view3d_draw_xray(Scene *scene, ARegion *ar, View3D *v3d, int clear)
+{
+ View3DAfter *v3da, *next;
+
+ if(clear && v3d->zbuf)
+ glClear(GL_DEPTH_BUFFER_BIT);
+
+ v3d->xray= TRUE;
+ for(v3da= v3d->afterdraw_xray.first; v3da; v3da= next) {
+ next= v3da->next;
+ draw_object(scene, ar, v3d, v3da->base, v3da->flag);
+ BLI_remlink(&v3d->afterdraw_xray, v3da);
+ MEM_freeN(v3da);
+ }
+ v3d->xray= FALSE;
+}
+
+
+/* clears zbuffer and draws it over */
+static void view3d_draw_xraytransp(Scene *scene, ARegion *ar, View3D *v3d, int clear)
+{
+ View3DAfter *v3da, *next;
+
+ if(clear && v3d->zbuf)
+ glClear(GL_DEPTH_BUFFER_BIT);
+
+ v3d->xray= TRUE;
+ v3d->transp= TRUE;
+
+ for(v3da= v3d->afterdraw_xraytransp.first; v3da; v3da= next) {
+ next= v3da->next;
+ draw_object(scene, ar, v3d, v3da->base, v3da->flag);
+ BLI_remlink(&v3d->afterdraw_xraytransp, v3da);
+ MEM_freeN(v3da);
+ }
+
+ v3d->transp= FALSE;
+ v3d->xray= FALSE;
+
+}
+
/* *********************** */
/*
@@ -1676,7 +1684,7 @@ void draw_depth_gpencil(Scene *scene, ARegion *ar, View3D *v3d)
v3d->zbuf= TRUE;
glEnable(GL_DEPTH_TEST);
- draw_gpencil_view3d_ext(scene, ar, 1);
+ draw_gpencil_view3d_ext(scene, v3d, ar, 1);
v3d->zbuf= zbuf;
@@ -1744,39 +1752,57 @@ void draw_depth(Scene *scene, ARegion *ar, View3D *v3d, int (* func)(void *))
}
/* this isnt that nice, draw xray objects as if they are normal */
- if (v3d->afterdraw.first) {
+ if ( v3d->afterdraw_transp.first ||
+ v3d->afterdraw_xray.first ||
+ v3d->afterdraw_xraytransp.first
+ ) {
View3DAfter *v3da, *next;
- int num = 0;
int mask_orig;
+
v3d->xray= TRUE;
/* transp materials can change the depth mask, see #21388 */
glGetIntegerv(GL_DEPTH_WRITEMASK, &mask_orig);
- glDepthFunc(GL_ALWAYS); /* always write into the depth bufer, overwriting front z values */
- for(v3da= v3d->afterdraw.first; v3da; v3da= next) {
- next= v3da->next;
- if(v3da->type==V3D_XRAY) {
+
+ if(v3d->afterdraw_xray.first || v3d->afterdraw_xraytransp.first) {
+ glDepthFunc(GL_ALWAYS); /* always write into the depth bufer, overwriting front z values */
+ for(v3da= v3d->afterdraw_xray.first; v3da; v3da= next) {
+ next= v3da->next;
draw_object(scene, ar, v3d, v3da->base, 0);
- num++;
}
- /* dont remove this time */
+ glDepthFunc(GL_LEQUAL); /* Now write the depth buffer normally */
}
+
+ /* draw 3 passes, transp/xray/xraytransp */
v3d->xray= FALSE;
-
- glDepthFunc(GL_LEQUAL); /* Now write the depth buffer normally */
- for(v3da= v3d->afterdraw.first; v3da; v3da= next) {
+ v3d->transp= TRUE;
+ for(v3da= v3d->afterdraw_transp.first; v3da; v3da= next) {
next= v3da->next;
- if(v3da->type==V3D_XRAY) {
- v3d->xray= TRUE; v3d->transp= FALSE;
- } else if (v3da->type==V3D_TRANSP) {
- v3d->xray= FALSE; v3d->transp= TRUE;
- }
-
- draw_object(scene, ar, v3d, v3da->base, 0); /* Draw Xray or Transp objects normally */
- BLI_remlink(&v3d->afterdraw, v3da);
+ draw_object(scene, ar, v3d, v3da->base, 0);
+ BLI_remlink(&v3d->afterdraw_transp, v3da);
+ MEM_freeN(v3da);
+ }
+
+ v3d->xray= TRUE;
+ v3d->transp= FALSE;
+ for(v3da= v3d->afterdraw_xray.first; v3da; v3da= next) {
+ next= v3da->next;
+ draw_object(scene, ar, v3d, v3da->base, 0);
+ BLI_remlink(&v3d->afterdraw_xray, v3da);
+ MEM_freeN(v3da);
+ }
+
+ v3d->xray= TRUE;
+ v3d->transp= TRUE;
+ for(v3da= v3d->afterdraw_xraytransp.first; v3da; v3da= next) {
+ next= v3da->next;
+ draw_object(scene, ar, v3d, v3da->base, 0);
+ BLI_remlink(&v3d->afterdraw_xraytransp, v3da);
MEM_freeN(v3da);
}
+
+
v3d->xray= FALSE;
v3d->transp= FALSE;
@@ -1953,20 +1979,18 @@ static void view3d_main_area_setup_view(Scene *scene, View3D *v3d, ARegion *ar,
/* calculate pixelsize factor once, is used for lamps and obcenters */
{
- float len1, len2, vec[3];
-
- copy_v3_v3(vec, rv3d->persinv[0]);
- len1= normalize_v3(vec);
- copy_v3_v3(vec, rv3d->persinv[1]);
- len2= normalize_v3(vec);
-
- rv3d->pixsize= 2.0f*(len1>len2?len1:len2);
+ rv3d->pixsize= 2.0f;
+ if(rv3d->persp == RV3D_ORTHO || v3d->camera) { /* camera view needs with for ortho & persp */
+ float len1= len_v3(rv3d->persinv[0]);
+ float len2= len_v3(rv3d->persinv[1]);
+ rv3d->pixsize *= MAX2(len1, len2);
+ }
+
/* correct for window size */
- if(ar->winx > ar->winy) rv3d->pixsize/= (float)ar->winx;
- else rv3d->pixsize/= (float)ar->winy;
+ rv3d->pixsize/= (float)MAX2(ar->winx, ar->winy);
}
-
+
/* set for opengl */
glMatrixMode(GL_PROJECTION);
glLoadMatrixf(rv3d->winmat);
@@ -1980,14 +2004,22 @@ void ED_view3d_draw_offscreen(Scene *scene, View3D *v3d, ARegion *ar, int winx,
Base *base;
float backcol[3];
int bwinx, bwiny;
+ rcti brect;
glPushMatrix();
/* set temporary new size */
bwinx= ar->winx;
bwiny= ar->winy;
+ brect= ar->winrct;
+
ar->winx= winx;
- ar->winy= winy;
+ ar->winy= winy;
+ ar->winrct.xmin= 0;
+ ar->winrct.ymin= 0;
+ ar->winrct.xmax= winx;
+ ar->winrct.ymax= winy;
+
/* set flags */
G.f |= G_RENDER_OGL;
@@ -2046,8 +2078,9 @@ void ED_view3d_draw_offscreen(Scene *scene, View3D *v3d, ARegion *ar, int winx,
}
/* transp and X-ray afterdraw stuff */
- view3d_draw_transp(scene, ar, v3d);
- view3d_draw_xray(scene, ar, v3d, 1); // clears zbuffer if it is used!
+ if(v3d->afterdraw_transp.first) view3d_draw_transp(scene, ar, v3d);
+ if(v3d->afterdraw_xray.first) view3d_draw_xray(scene, ar, v3d, 1); // clears zbuffer if it is used!
+ if(v3d->afterdraw_xraytransp.first) view3d_draw_xraytransp(scene, ar, v3d, 1);
/* cleanup */
if(v3d->zbuf) {
@@ -2056,12 +2089,12 @@ void ED_view3d_draw_offscreen(Scene *scene, View3D *v3d, ARegion *ar, int winx,
}
/* draw grease-pencil stuff */
- draw_gpencil_view3d_ext(scene, ar, 1);
+ draw_gpencil_view3d_ext(scene, v3d, ar, 1);
ED_region_pixelspace(ar);
/* draw grease-pencil stuff - needed to get paint-buffer shown too (since it's 2D) */
- draw_gpencil_view3d_ext(scene, ar, 0);
+ draw_gpencil_view3d_ext(scene, v3d, ar, 0);
/* freeing the images again here could be done after the operator runs, leaving for now */
GPU_free_images_anim();
@@ -2069,6 +2102,7 @@ void ED_view3d_draw_offscreen(Scene *scene, View3D *v3d, ARegion *ar, int winx,
/* restore size */
ar->winx= bwinx;
ar->winy= bwiny;
+ ar->winrct = brect;
glPopMatrix();
@@ -2078,7 +2112,7 @@ void ED_view3d_draw_offscreen(Scene *scene, View3D *v3d, ARegion *ar, int winx,
}
/* utility func for ED_view3d_draw_offscreen */
-ImBuf *ED_view3d_draw_offscreen_imbuf(Scene *scene, View3D *v3d, ARegion *ar, int sizex, int sizey)
+ImBuf *ED_view3d_draw_offscreen_imbuf(Scene *scene, View3D *v3d, ARegion *ar, int sizex, int sizey, unsigned int flag)
{
RegionView3D *rv3d= ar->regiondata;
ImBuf *ibuf;
@@ -2106,9 +2140,13 @@ ImBuf *ED_view3d_draw_offscreen_imbuf(Scene *scene, View3D *v3d, ARegion *ar, in
}
/* read in pixels & stamp */
- ibuf= IMB_allocImBuf(sizex, sizey, 24, IB_rect, 0);
- glReadPixels(0, 0, sizex, sizey, GL_RGBA, GL_UNSIGNED_BYTE, ibuf->rect);
+ ibuf= IMB_allocImBuf(sizex, sizey, 32, flag, 0);
+ if(ibuf->rect_float)
+ glReadPixels(0, 0, sizex, sizey, GL_RGBA, GL_FLOAT, ibuf->rect_float);
+ else if(ibuf->rect)
+ glReadPixels(0, 0, sizex, sizey, GL_RGBA, GL_UNSIGNED_BYTE, ibuf->rect);
+
//if((scene->r.stamp & R_STAMP_ALL) && (scene->r.stamp & R_STAMP_DRAW))
// BKE_stamp_buf(scene, NULL, rr->rectf, rr->rectx, rr->recty, 4);
@@ -2116,11 +2154,14 @@ ImBuf *ED_view3d_draw_offscreen_imbuf(Scene *scene, View3D *v3d, ARegion *ar, in
GPU_offscreen_unbind(ofs);
GPU_offscreen_free(ofs);
+ if(ibuf->rect_float && ibuf->rect)
+ IMB_rect_from_float(ibuf);
+
return ibuf;
}
/* creates own 3d views, used by the sequencer */
-ImBuf *ED_view3d_draw_offscreen_imbuf_simple(Scene *scene, int width, int height, int drawtype)
+ImBuf *ED_view3d_draw_offscreen_imbuf_simple(Scene *scene, int width, int height, unsigned int flag, int drawtype)
{
View3D v3d;
ARegion ar;
@@ -2155,7 +2196,7 @@ ImBuf *ED_view3d_draw_offscreen_imbuf_simple(Scene *scene, int width, int height
mul_m4_m4m4(rv3d.persmat, rv3d.viewmat, rv3d.winmat);
invert_m4_m4(rv3d.persinv, rv3d.viewinv);
- return ED_view3d_draw_offscreen_imbuf(scene, &v3d, &ar, width, height);
+ return ED_view3d_draw_offscreen_imbuf(scene, &v3d, &ar, width, height, flag);
// seq_view3d_cb(scene, cfra, render_size, seqrectx, seqrecty);
}
@@ -2323,14 +2364,9 @@ void view3d_main_area_draw(const bContext *C, ARegion *ar)
/* Transp and X-ray afterdraw stuff for sets is done later */
}
-
- /* extra service in layerbuttons, showing used layers */
- v3d->lay_used = 0;
/* then draw not selected and the duplis, but skip editmode object */
for(base= scene->base.first; base; base= base->next) {
- v3d->lay_used |= base->lay;
-
if(v3d->lay & base->lay) {
/* dupli drawing */
@@ -2364,8 +2400,9 @@ void view3d_main_area_draw(const bContext *C, ARegion *ar)
// REEB_draw();
/* Transp and X-ray afterdraw stuff */
- view3d_draw_transp(scene, ar, v3d);
- view3d_draw_xray(scene, ar, v3d, 1); // clears zbuffer if it is used!
+ if(v3d->afterdraw_transp.first) view3d_draw_transp(scene, ar, v3d);
+ if(v3d->afterdraw_xray.first) view3d_draw_xray(scene, ar, v3d, 1); // clears zbuffer if it is used!
+ if(v3d->afterdraw_xraytransp.first) view3d_draw_xraytransp(scene, ar, v3d, 1);
ED_region_draw_cb_draw(C, ar, REGION_DRAW_POST_VIEW);
@@ -2433,8 +2470,6 @@ void view3d_main_area_draw(const bContext *C, ARegion *ar)
ob= OBACT;
if(U.uiflag & USER_DRAWVIEWINFO)
draw_selected_name(scene, ob, v3d);
-
- ED_region_draw_cb_draw(C, ar, REGION_DRAW_POST_PIXEL);
/* XXX here was the blockhandlers for floating panels */
diff --git a/source/blender/editors/space_view3d/view3d_edit.c b/source/blender/editors/space_view3d/view3d_edit.c
index 2e26988877f..e2c12386dd3 100644
--- a/source/blender/editors/space_view3d/view3d_edit.c
+++ b/source/blender/editors/space_view3d/view3d_edit.c
@@ -41,16 +41,13 @@
#include "BLI_math.h"
#include "BLI_rand.h"
-#include "BKE_action.h"
#include "BKE_context.h"
-#include "BKE_depsgraph.h"
+#include "BKE_image.h"
+#include "BKE_library.h"
#include "BKE_object.h"
-#include "BKE_global.h"
#include "BKE_paint.h"
#include "BKE_report.h"
#include "BKE_scene.h"
-#include "BKE_screen.h"
-#include "BKE_utildefines.h"
#include "BIF_gl.h"
@@ -857,10 +854,11 @@ void viewmove_modal_keymap(wmKeyConfig *keyconf)
static void viewmove_apply(ViewOpsData *vod, int x, int y)
{
if(vod->rv3d->persp==RV3D_CAMOB) {
- float max= (float)MAX2(vod->ar->winx, vod->ar->winy);
+ float zoomfac= (M_SQRT2 + vod->rv3d->camzoom/50.0);
+ zoomfac= (zoomfac*zoomfac)*0.5;
- vod->rv3d->camdx += (vod->oldx - x)/(max);
- vod->rv3d->camdy += (vod->oldy - y)/(max);
+ vod->rv3d->camdx += (vod->oldx - x)/(vod->ar->winx * zoomfac);
+ vod->rv3d->camdy += (vod->oldy - y)/(vod->ar->winy * zoomfac);
CLAMP(vod->rv3d->camdx, -1.0f, 1.0f);
CLAMP(vod->rv3d->camdy, -1.0f, 1.0f);
// XXX preview3d_event= 0;
@@ -1168,7 +1166,7 @@ static int viewzoom_exec(bContext *C, wmOperator *op)
/* this min and max is also in viewmove() */
if(rv3d->persp==RV3D_CAMOB) {
rv3d->camzoom-= 10;
- if(rv3d->camzoom<-30) rv3d->camzoom= -30;
+ if(rv3d->camzoom < RV3D_CAMZOOM_MIN) rv3d->camzoom= RV3D_CAMZOOM_MIN;
}
else if(rv3d->dist<10.0*v3d->far) {
view_zoom_mouseloc(CTX_wm_region(C), 1.2f, mx, my);
@@ -1177,7 +1175,7 @@ static int viewzoom_exec(bContext *C, wmOperator *op)
else {
if(rv3d->persp==RV3D_CAMOB) {
rv3d->camzoom+= 10;
- if(rv3d->camzoom>600) rv3d->camzoom= 600;
+ if(rv3d->camzoom > RV3D_CAMZOOM_MAX) rv3d->camzoom= RV3D_CAMZOOM_MAX;
}
else if(rv3d->dist> 0.001*v3d->grid) {
view_zoom_mouseloc(CTX_wm_region(C), .83333f, mx, my);
@@ -1609,7 +1607,7 @@ static int render_border_exec(bContext *C, wmOperator *op)
rect.ymax= RNA_int_get(op->ptr, "ymax");
/* calculate range */
- calc_viewborder(scene, ar, rv3d, v3d, &vb);
+ view3d_calc_camera_border(scene, ar, rv3d, v3d, &vb);
scene->r.border.xmin= ((float)rect.xmin-vb.xmin)/(vb.xmax-vb.xmin);
scene->r.border.ymin= ((float)rect.ymin-vb.ymin)/(vb.ymax-vb.ymin);
@@ -1905,14 +1903,14 @@ static void axis_set_view(bContext *C, float q1, float q2, float q3, float q4, s
if (rv3d->persp==RV3D_CAMOB && v3d->camera) {
- if (U.uiflag & USER_AUTOPERSP) rv3d->persp= RV3D_ORTHO;
+ if (U.uiflag & USER_AUTOPERSP) rv3d->persp= view ? RV3D_ORTHO : RV3D_PERSP;
else if(rv3d->persp==RV3D_CAMOB) rv3d->persp= perspo;
smooth_view(C, v3d->camera, NULL, rv3d->ofs, new_quat, NULL, NULL);
}
else {
- if (U.uiflag & USER_AUTOPERSP) rv3d->persp= RV3D_ORTHO;
+ if (U.uiflag & USER_AUTOPERSP) rv3d->persp= view ? RV3D_ORTHO : RV3D_PERSP;
else if(rv3d->persp==RV3D_CAMOB) rv3d->persp= perspo;
smooth_view(C, NULL, NULL, NULL, new_quat, NULL, NULL);
@@ -2204,27 +2202,64 @@ void VIEW3D_OT_view_persportho(wmOperatorType *ot)
/* ******************** add background image operator **************** */
-static int add_background_image_exec(bContext *C, wmOperator *op)
+static BGpic *add_background_image(bContext *C)
{
View3D *v3d= CTX_wm_view3d(C);
-
+
BGpic *bgpic= MEM_callocN(sizeof(BGpic), "Background Image");
bgpic->size= 5.0;
bgpic->blend= 0.5;
bgpic->iuser.fie_ima= 2;
bgpic->iuser.ok= 1;
bgpic->view= 0; /* 0 for all */
-
+
BLI_addtail(&v3d->bgpicbase, bgpic);
+
+ return bgpic;
+}
- //ED_region_tag_redraw(v3d);
+static int add_background_image_exec(bContext *C, wmOperator *op)
+{
+ add_background_image(C);
return OPERATOR_FINISHED;
}
static int add_background_image_invoke(bContext *C, wmOperator *op, wmEvent *event)
{
- return add_background_image_exec(C, op);
+ Scene *scene= CTX_data_scene(C);
+ View3D *v3d= CTX_wm_view3d(C);
+ Image *ima= NULL;
+ BGpic *bgpic;
+ char name[32];
+
+ /* check input variables */
+ if(RNA_property_is_set(op->ptr, "filepath")) {
+ char path[FILE_MAX];
+
+ RNA_string_get(op->ptr, "filepath", path);
+ ima= BKE_add_image_file(path, scene ? scene->r.cfra : 1);
+ }
+ else if(RNA_property_is_set(op->ptr, "name")) {
+ RNA_string_get(op->ptr, "name", name);
+ ima= (Image *)find_id("IM", name);
+ }
+
+ bgpic = add_background_image(C);
+
+ if (ima) {
+ bgpic->ima = ima;
+
+ if(ima->id.us==0) id_us_plus(&ima->id);
+ else id_lib_extern(&ima->id);
+
+ if (!(v3d->flag & V3D_DISPBGPICS))
+ v3d->flag |= V3D_DISPBGPICS;
+ }
+
+ WM_event_add_notifier(C, NC_SPACE|ND_SPACE_VIEW3D, v3d);
+
+ return OPERATOR_FINISHED;
}
void VIEW3D_OT_add_background_image(wmOperatorType *ot)
@@ -2241,8 +2276,13 @@ void VIEW3D_OT_add_background_image(wmOperatorType *ot)
/* flags */
ot->flag = 0;
+
+ /* properties */
+ RNA_def_string(ot->srna, "name", "Image", 24, "Name", "Image name to assign.");
+ RNA_def_string(ot->srna, "filepath", "Path", FILE_MAX, "Filepath", "Path to image file");
}
+
/* ***** remove image operator ******* */
static int remove_background_image_exec(bContext *C, wmOperator *op)
{
@@ -2278,6 +2318,7 @@ void VIEW3D_OT_remove_background_image(wmOperatorType *ot)
RNA_def_int(ot->srna, "index", 0, 0, INT_MAX, "Index", "Background image index to remove ", 0, INT_MAX);
}
+
/* ********************* set clipping operator ****************** */
static void calc_clipping_plane(float clip[6][4], BoundBox *clipbb)
@@ -2396,7 +2437,7 @@ static int set_3dcursor_invoke(bContext *C, wmOperator *op, wmEvent *event)
float dx, dy, fz, *fp = NULL, dvec[3], oldcurs[3];
short mx, my, mval[2];
// short ctrl= 0; // XXX
-
+ int flip;
fp= give_cursor(scene, v3d);
// if(obedit && ctrl) lr_click= 1;
@@ -2404,9 +2445,18 @@ static int set_3dcursor_invoke(bContext *C, wmOperator *op, wmEvent *event)
mx= event->x - ar->winrct.xmin;
my= event->y - ar->winrct.ymin;
+
project_short_noclip(ar, fp, mval);
+ flip= initgrabz(rv3d, fp[0], fp[1], fp[2]);
+
+ /* reset the depth based on the view offset */
+ if(flip) {
+ negate_v3_v3(fp, rv3d->ofs);
- initgrabz(rv3d, fp[0], fp[1], fp[2]);
+ /* re initialize */
+ project_short_noclip(ar, fp, mval);
+ flip= initgrabz(rv3d, fp[0], fp[1], fp[2]);
+ }
if(mval[0]!=IS_CLIPPED) {
short depth_used = 0;
diff --git a/source/blender/editors/space_view3d/view3d_header.c b/source/blender/editors/space_view3d/view3d_header.c
index 761ef436d48..d7ab8034286 100644
--- a/source/blender/editors/space_view3d/view3d_header.c
+++ b/source/blender/editors/space_view3d/view3d_header.c
@@ -31,28 +31,20 @@
#include <stdlib.h>
#include "DNA_scene_types.h"
+#include "DNA_object_types.h"
#include "RNA_access.h"
#include "MEM_guardedalloc.h"
-#include "BKE_action.h"
-#include "BKE_brush.h"
#include "BKE_context.h"
-#include "BKE_curve.h"
#include "BKE_depsgraph.h"
-#include "BKE_displist.h"
#include "BKE_effect.h"
-#include "BKE_global.h"
-#include "BKE_image.h"
-#include "BKE_library.h"
#include "BKE_main.h"
#include "BKE_mesh.h"
#include "BKE_modifier.h"
#include "BKE_paint.h"
-#include "BKE_particle.h"
#include "BKE_screen.h"
-#include "BKE_utildefines.h" /* for VECCOPY */
#include "ED_mesh.h"
#include "ED_util.h"
@@ -66,8 +58,6 @@
#include "RNA_define.h"
#include "RNA_enum_types.h"
-#include "BIF_gl.h"
-#include "BIF_glutil.h"
#include "BLI_math.h"
#include "BLI_blenlib.h"
@@ -473,7 +463,7 @@ void uiTemplateHeader3D(uiLayout *layout, struct bContext *C)
uiBlockEndAlign(block);
/* Draw type */
- uiItemR(layout, &v3dptr, "viewport_shading", UI_ITEM_R_ICON_ONLY, "", 0);
+ uiItemR(layout, &v3dptr, "viewport_shade", UI_ITEM_R_ICON_ONLY, "", 0);
if (obedit==NULL && ((ob && ob->mode & (OB_MODE_VERTEX_PAINT|OB_MODE_WEIGHT_PAINT|OB_MODE_TEXTURE_PAINT)))) {
/* Manipulators aren't used in weight paint mode */
@@ -487,7 +477,7 @@ void uiTemplateHeader3D(uiLayout *layout, struct bContext *C)
row= uiLayoutRow(layout, 1);
uiItemR(row, &v3dptr, "pivot_point", UI_ITEM_R_ICON_ONLY, "", 0);
- uiItemR(row, &v3dptr, "pivot_point_align", UI_ITEM_R_ICON_ONLY, "", 0);
+ uiItemR(row, &v3dptr, "use_pivot_point_align", UI_ITEM_R_ICON_ONLY, "", 0);
/* NDOF */
/* Not implemented yet
@@ -502,7 +492,7 @@ void uiTemplateHeader3D(uiLayout *layout, struct bContext *C)
/* Transform widget / manipulators */
row= uiLayoutRow(layout, 1);
- uiItemR(row, &v3dptr, "manipulator", UI_ITEM_R_ICON_ONLY, "", 0);
+ uiItemR(row, &v3dptr, "show_manipulator", UI_ITEM_R_ICON_ONLY, "", 0);
block= uiLayoutGetBlock(row);
if(v3d->twflag & V3D_USE_MANIPULATOR) {
@@ -525,9 +515,9 @@ void uiTemplateHeader3D(uiLayout *layout, struct bContext *C)
/* Layers */
if (v3d->scenelock)
- uiTemplateLayers(layout, &sceneptr, "layers", &v3dptr, "used_layers", ob_lay);
+ uiTemplateLayers(layout, &sceneptr, "layers", &v3dptr, "layers_used", ob_lay);
else
- uiTemplateLayers(layout, &v3dptr, "layers", &v3dptr, "used_layers", ob_lay);
+ uiTemplateLayers(layout, &v3dptr, "layers", &v3dptr, "layers_used", ob_lay);
/* Scene lock */
uiItemR(layout, &v3dptr, "lock_camera_and_layers", UI_ITEM_R_ICON_ONLY, "", 0);
diff --git a/source/blender/editors/space_view3d/view3d_intern.h b/source/blender/editors/space_view3d/view3d_intern.h
index fd78c8298e9..4065b159ccf 100644
--- a/source/blender/editors/space_view3d/view3d_intern.h
+++ b/source/blender/editors/space_view3d/view3d_intern.h
@@ -56,6 +56,7 @@ struct bMotionPath;
#define V3D_XRAY 1
#define V3D_TRANSP 2
+#define V3D_XRAYTRANSP 4
#define V3D_SELECT_MOUSE 1
@@ -102,9 +103,9 @@ void draw_motion_paths_cleanup(Scene *scene, View3D *v3d, struct ARegion *ar);
/* drawobject.c */
void draw_object(Scene *scene, struct ARegion *ar, View3D *v3d, Base *base, int flag);
-int draw_glsl_material(Scene *scene, Object *ob, View3D *v3d, int dt);
-void draw_object_instance(Scene *scene, View3D *v3d, RegionView3D *rv3d, Object *ob, int dt, int outline);
-void draw_object_backbufsel(Scene *scene, View3D *v3d, RegionView3D *rv3d, Object *ob);
+int draw_glsl_material(Scene *scene, struct Object *ob, View3D *v3d, int dt);
+void draw_object_instance(Scene *scene, View3D *v3d, RegionView3D *rv3d, struct Object *ob, int dt, int outline);
+void draw_object_backbufsel(Scene *scene, View3D *v3d, RegionView3D *rv3d, struct Object *ob);
void drawaxes(float size, int flag, char drawtype);
void view3d_cached_text_draw_begin(void);
@@ -117,7 +118,7 @@ void view3d_cached_text_draw_end(View3D *v3d, ARegion *ar, int depth_write, floa
int draw_armature(Scene *scene, View3D *v3d, ARegion *ar, Base *base, int dt, int flag);
/* drawmesh.c */
-void draw_mesh_textured(Scene *scene, View3D *v3d, RegionView3D *rv3d, Object *ob, struct DerivedMesh *dm, int faceselect);
+void draw_mesh_textured(Scene *scene, View3D *v3d, RegionView3D *rv3d, struct Object *ob, struct DerivedMesh *dm, int faceselect);
/* view3d_draw.c */
void view3d_main_area_draw(const struct bContext *C, struct ARegion *ar);
@@ -125,8 +126,7 @@ void draw_depth(Scene *scene, struct ARegion *ar, View3D *v3d, int (* func)(void
void draw_depth_gpencil(Scene *scene, ARegion *ar, View3D *v3d);
void view3d_clr_clipping(void);
void view3d_set_clipping(RegionView3D *rv3d);
-void add_view3d_after(View3D *v3d, Base *base, int type, int flag);
-void calc_viewborder(Scene *scene, struct ARegion *ar, struct RegionView3D *rv3d, View3D *v3d, rctf *viewborder_r);
+void add_view3d_after(ListBase *lb, Base *base, int flag);
void circf(float x, float y, float rad);
void circ(float x, float y, float rad);
@@ -141,6 +141,7 @@ void VIEW3D_OT_select_lasso(struct wmOperatorType *ot);
/* view3d_view.c */
void view3d_settings_from_ob(struct Object *ob, float *ofs, float *quat, float *dist, float *lens);
+int view3d_is_ortho(View3D *v3d, RegionView3D *rv3d);
void VIEW3D_OT_smoothview(struct wmOperatorType *ot);
void VIEW3D_OT_setcameratoview(struct wmOperatorType *ot);
@@ -154,7 +155,7 @@ int boundbox_clip(RegionView3D *rv3d, float obmat[][4], struct BoundBox *bb);
void centerview(struct ARegion *ar, View3D *v3d);
-void smooth_view(struct bContext *C, Object *, Object *, float *ofs, float *quat, float *dist, float *lens);
+void smooth_view(struct bContext *C, struct Object *, struct Object *, float *ofs, float *quat, float *dist, float *lens);
void setwinmatrixview3d(ARegion *ar, View3D *v3d, rctf *rect); /* rect: for picking */
void setviewmatrixview3d(Scene *scene, View3D *v3d, RegionView3D *rv3d);
@@ -174,7 +175,7 @@ void view3d_toolshelf_register(struct ARegionType *art);
void view3d_tool_props_register(struct ARegionType *art);
/* view3d_snap.c */
-int minmax_verts(Object *obedit, float *min, float *max);
+int minmax_verts(struct Object *obedit, float *min, float *max);
void VIEW3D_OT_snap_selected_to_grid(struct wmOperatorType *ot);
void VIEW3D_OT_snap_selected_to_cursor(struct wmOperatorType *ot);
diff --git a/source/blender/editors/space_view3d/view3d_ops.c b/source/blender/editors/space_view3d/view3d_ops.c
index 22fab5887ee..9ee12a8ef1e 100644
--- a/source/blender/editors/space_view3d/view3d_ops.c
+++ b/source/blender/editors/space_view3d/view3d_ops.c
@@ -29,7 +29,6 @@
#include <stdlib.h>
#include <math.h>
-#include "MEM_guardedalloc.h"
#include "DNA_object_types.h"
#include "DNA_scene_types.h"
@@ -40,9 +39,6 @@
#include "BLI_math.h"
#include "BLI_blenlib.h"
-#include "BKE_context.h"
-#include "BKE_global.h"
-#include "BKE_utildefines.h"
#include "RNA_access.h"
@@ -222,12 +218,12 @@ void view3d_keymap(wmKeyConfig *keyconf)
/* drawtype */
kmi = WM_keymap_add_item(keymap, "WM_OT_context_toggle_enum", ZKEY, KM_PRESS, 0, 0);
- RNA_string_set(kmi->ptr, "data_path", "space_data.viewport_shading");
+ RNA_string_set(kmi->ptr, "data_path", "space_data.viewport_shade");
RNA_string_set(kmi->ptr, "value_1", "SOLID");
RNA_string_set(kmi->ptr, "value_2", "WIREFRAME");
kmi = WM_keymap_add_item(keymap, "WM_OT_context_toggle_enum", ZKEY, KM_PRESS, KM_ALT, 0);
- RNA_string_set(kmi->ptr, "data_path", "space_data.viewport_shading");
+ RNA_string_set(kmi->ptr, "data_path", "space_data.viewport_shade");
RNA_string_set(kmi->ptr, "value_1", "TEXTURED");
RNA_string_set(kmi->ptr, "value_2", "SOLID");
@@ -279,7 +275,7 @@ void view3d_keymap(wmKeyConfig *keyconf)
RNA_string_set(kmi->ptr, "data_path", "space_data.pivot_point_align");
kmi = WM_keymap_add_item(keymap, "WM_OT_context_toggle", SPACEKEY, KM_PRESS, KM_CTRL, 0); /* new in 2.5 */
- RNA_string_set(kmi->ptr, "data_path", "space_data.manipulator");
+ RNA_string_set(kmi->ptr, "data_path", "space_data.show_manipulator");
kmi = WM_keymap_add_item(keymap, "WM_OT_context_set_enum", PERIODKEY, KM_PRESS, 0, 0);
RNA_string_set(kmi->ptr, "data_path", "space_data.pivot_point");
diff --git a/source/blender/editors/space_view3d/view3d_select.c b/source/blender/editors/space_view3d/view3d_select.c
index fc3dea5fd22..cc4defacb35 100644
--- a/source/blender/editors/space_view3d/view3d_select.c
+++ b/source/blender/editors/space_view3d/view3d_select.c
@@ -46,15 +46,8 @@
#include "BLI_rand.h"
#include "BLI_linklist.h"
-#include "BKE_action.h"
#include "BKE_context.h"
-#include "BKE_depsgraph.h"
-#include "BKE_object.h"
-#include "BKE_global.h"
#include "BKE_paint.h"
-#include "BKE_scene.h"
-#include "BKE_screen.h"
-#include "BKE_utildefines.h"
#include "BIF_gl.h"
@@ -637,6 +630,7 @@ static void do_lasso_select_armature(ViewContext *vc, short mcords[][2], short m
EditBone *ebone;
float vec[3];
short sco1[2], sco2[2], didpoint;
+ int change= FALSE;
/* set editdata in vc */
@@ -652,20 +646,27 @@ static void do_lasso_select_armature(ViewContext *vc, short mcords[][2], short m
if(select) ebone->flag |= BONE_ROOTSEL;
else ebone->flag &= ~BONE_ROOTSEL;
didpoint= 1;
+ change= TRUE;
}
if(lasso_inside(mcords, moves, sco2[0], sco2[1])) {
if(select) ebone->flag |= BONE_TIPSEL;
else ebone->flag &= ~BONE_TIPSEL;
didpoint= 1;
+ change= TRUE;
}
/* if one of points selected, we skip the bone itself */
if(didpoint==0 && lasso_inside_edge(mcords, moves, sco1[0], sco1[1], sco2[0], sco2[1])) {
if(select) ebone->flag |= BONE_TIPSEL|BONE_ROOTSEL|BONE_SELECTED;
else ebone->flag &= ~(BONE_SELECTED|BONE_TIPSEL|BONE_ROOTSEL);
+ change= TRUE;
}
}
- ED_armature_sync_selection(arm->edbo);
- ED_armature_validate_active(arm);
+
+ if(change) {
+ ED_armature_sync_selection(arm->edbo);
+ ED_armature_validate_active(arm);
+ WM_main_add_notifier(NC_OBJECT|ND_BONE_SELECT, vc->obedit);
+ }
}
static void do_lasso_select_facemode(ViewContext *vc, short mcords[][2], short moves, short select)
@@ -731,8 +732,10 @@ void view3d_lasso_select(bContext *C, ViewContext *vc, short mcords[][2], short
;
else if(ob && ob->mode & OB_MODE_PARTICLE_EDIT)
PE_lasso_select(C, mcords, moves, select);
- else
+ else {
do_lasso_select_objects(vc, mcords, moves, select);
+ WM_event_add_notifier(C, NC_SCENE|ND_OB_SELECT, vc->scene);
+ }
}
else { /* Edit Mode */
if(vc->obedit->type==OB_MESH)
@@ -1060,7 +1063,7 @@ static Base *mouse_select_eval_buffer(ViewContext *vc, unsigned int *buffer, int
base= FIRSTBASE;
while(base) {
- if(base->lay & v3d->lay) {
+ if(BASE_SELECTABLE(v3d, base)) {
if(base->selcol==selcol) break;
}
base= base->next;
@@ -1079,7 +1082,7 @@ static Base *mouse_select_eval_buffer(ViewContext *vc, unsigned int *buffer, int
if(base==startbase) break;
}
- if(base->lay & v3d->lay) {
+ if(BASE_SELECTABLE(v3d, base)) {
for(a=0; a<hits; a++) {
if(has_bones) {
/* skip non-bone objects */
@@ -1598,6 +1601,7 @@ static int view3d_borderselect_exec(bContext *C, wmOperator *op)
}
ED_armature_sync_selection(arm->edbo);
+ WM_event_add_notifier(C, NC_OBJECT|ND_BONE_SELECT, vc.obedit);
}
else if(obedit->type==OB_LATTICE) {
do_lattice_box_select(&vc, &rect, selecting, extend);
@@ -1628,7 +1632,7 @@ static int view3d_borderselect_exec(bContext *C, wmOperator *op)
} else {
while(base) {
Base *next = base->next;
- if(base->lay & v3d->lay) {
+ if(BASE_SELECTABLE(v3d, base)) {
ED_base_object_select(base, BA_DESELECT);
}
base= next;
@@ -1657,7 +1661,7 @@ static int view3d_borderselect_exec(bContext *C, wmOperator *op)
while(base && hits) {
Base *next = base->next;
- if(base->lay & v3d->lay) {
+ if(BASE_SELECTABLE(v3d, base)) {
while (base->selcol == (*col & 0xFFFF)) { /* we got an object */
if(*col & 0xFFFF0000) { /* we got a bone */
@@ -1829,61 +1833,61 @@ static void mesh_circle_select(ViewContext *vc, int selecting, short *mval, floa
{
ToolSettings *ts= vc->scene->toolsettings;
int bbsel;
- Object *ob= vc->obact;
+ struct {ViewContext *vc; short select, mval[2]; float radius; } data;
- if(vc->obedit==NULL && paint_facesel_test(ob)) {
- Mesh *me = ob?ob->data:NULL;
+ bbsel= EM_init_backbuf_circle(vc, mval[0], mval[1], (short)(rad+1.0));
+ ED_view3d_init_mats_rv3d(vc->obedit, vc->rv3d); /* for foreach's screen/vert projection */
- if (me) {
- em_vertoffs= me->totface+1; /* max index array */
+ vc->em= ((Mesh *)vc->obedit->data)->edit_mesh;
- bbsel= EM_init_backbuf_circle(vc, mval[0], mval[1], (short)(rad+1.0));
- EM_backbuf_checkAndSelectTFaces(me, selecting==LEFTMOUSE);
- EM_free_backbuf();
+ data.vc = vc;
+ data.select = selecting;
+ data.mval[0] = mval[0];
+ data.mval[1] = mval[1];
+ data.radius = rad;
-// XXX object_tface_flags_changed(OBACT, 0);
+ if(ts->selectmode & SCE_SELECT_VERTEX) {
+ if(bbsel) {
+ EM_backbuf_checkAndSelectVerts(vc->em, selecting==LEFTMOUSE);
+ } else {
+ mesh_foreachScreenVert(vc, mesh_circle_doSelectVert, &data, 1);
}
}
- else {
- struct {ViewContext *vc; short select, mval[2]; float radius; } data;
-
- bbsel= EM_init_backbuf_circle(vc, mval[0], mval[1], (short)(rad+1.0));
- ED_view3d_init_mats_rv3d(vc->obedit, vc->rv3d); /* for foreach's screen/vert projection */
- vc->em= ((Mesh *)vc->obedit->data)->edit_mesh;
+ if(ts->selectmode & SCE_SELECT_EDGE) {
+ if (bbsel) {
+ EM_backbuf_checkAndSelectEdges(vc->em, selecting==LEFTMOUSE);
+ } else {
+ mesh_foreachScreenEdge(vc, mesh_circle_doSelectEdge, &data, 0);
+ }
+ }
+
+ if(ts->selectmode & SCE_SELECT_FACE) {
+ if(bbsel) {
+ EM_backbuf_checkAndSelectFaces(vc->em, selecting==LEFTMOUSE);
+ } else {
+ mesh_foreachScreenFace(vc, mesh_circle_doSelectFace, &data);
+ }
+ }
- data.vc = vc;
- data.select = selecting;
- data.mval[0] = mval[0];
- data.mval[1] = mval[1];
- data.radius = rad;
+ EM_free_backbuf();
+ EM_selectmode_flush(vc->em);
+}
- if(ts->selectmode & SCE_SELECT_VERTEX) {
- if(bbsel) {
- EM_backbuf_checkAndSelectVerts(vc->em, selecting==LEFTMOUSE);
- } else {
- mesh_foreachScreenVert(vc, mesh_circle_doSelectVert, &data, 1);
- }
- }
+static void paint_facesel_circle_select(ViewContext *vc, int selecting, short *mval, float rad)
+{
+ Object *ob= vc->obact;
+ Mesh *me = ob?ob->data:NULL;
+ int bbsel;
- if(ts->selectmode & SCE_SELECT_EDGE) {
- if (bbsel) {
- EM_backbuf_checkAndSelectEdges(vc->em, selecting==LEFTMOUSE);
- } else {
- mesh_foreachScreenEdge(vc, mesh_circle_doSelectEdge, &data, 0);
- }
- }
-
- if(ts->selectmode & SCE_SELECT_FACE) {
- if(bbsel) {
- EM_backbuf_checkAndSelectFaces(vc->em, selecting==LEFTMOUSE);
- } else {
- mesh_foreachScreenFace(vc, mesh_circle_doSelectFace, &data);
- }
- }
+ if (me) {
+ em_vertoffs= me->totface+1; /* max index array */
+ bbsel= EM_init_backbuf_circle(vc, mval[0], mval[1], (short)(rad+1.0));
+ EM_backbuf_checkAndSelectTFaces(me, selecting==LEFTMOUSE);
EM_free_backbuf();
- EM_selectmode_flush(vc->em);
+
+// XXX object_tface_flags_changed(OBACT, 0);
}
}
@@ -1990,6 +1994,7 @@ static void armature_circle_select(ViewContext *vc, int selecting, short *mval,
struct {ViewContext *vc; short select, mval[2]; float radius; } data;
bArmature *arm= vc->obedit->data;
EditBone *ebone;
+ int change= FALSE;
/* set vc->edit data */
data.select = selecting;
@@ -2028,10 +2033,14 @@ static void armature_circle_select(ViewContext *vc, int selecting, short *mval,
ebone->flag |= BONE_TIPSEL|BONE_ROOTSEL|BONE_SELECTED;
else
ebone->flag &= ~(BONE_SELECTED|BONE_TIPSEL|BONE_ROOTSEL);
+ change= TRUE;
}
}
- ED_armature_validate_active(arm);
+ if(change) {
+ ED_armature_validate_active(arm);
+ WM_main_add_notifier(NC_OBJECT|ND_BONE_SELECT, vc->obedit);
+ }
}
/** Callbacks for circle selection in Editmode */
@@ -2073,7 +2082,8 @@ static int view3d_circle_select_exec(bContext *C, wmOperator *op)
selecting= (gesture_mode==GESTURE_MODAL_SELECT);
- if(CTX_data_edit_object(C) || (obact && obact->mode & OB_MODE_PARTICLE_EDIT)) {
+ if(CTX_data_edit_object(C) || paint_facesel_test(obact) ||
+ (obact && obact->mode & OB_MODE_PARTICLE_EDIT)) {
ViewContext vc;
short mval[2];
@@ -2087,6 +2097,10 @@ static int view3d_circle_select_exec(bContext *C, wmOperator *op)
obedit_circle_select(&vc, selecting, mval, (float)radius);
WM_event_add_notifier(C, NC_GEOM|ND_SELECT, obact->data);
}
+ else if(paint_facesel_test(obact)) {
+ paint_facesel_circle_select(&vc, selecting, mval, (float)radius);
+ WM_event_add_notifier(C, NC_GEOM|ND_SELECT, obact->data);
+ }
else
return PE_circle_select(C, selecting, mval, (float)radius);
}
@@ -2097,7 +2111,7 @@ static int view3d_circle_select_exec(bContext *C, wmOperator *op)
Base *base;
selecting= selecting?BA_SELECT:BA_DESELECT;
for(base= FIRSTBASE; base; base= base->next) {
- if(base->lay & v3d->lay) {
+ if(BASE_SELECTABLE(v3d, base)) {
project_short(ar, base->object->obmat[3], &base->sx);
if(base->sx!=IS_CLIPPED) {
int dx= base->sx-x;
diff --git a/source/blender/editors/space_view3d/view3d_snap.c b/source/blender/editors/space_view3d/view3d_snap.c
index 9beb809e0dd..5ee87db6b68 100644
--- a/source/blender/editors/space_view3d/view3d_snap.c
+++ b/source/blender/editors/space_view3d/view3d_snap.c
@@ -44,20 +44,13 @@
#include "BLI_editVert.h"
#include "BLI_linklist.h"
-#include "BKE_action.h"
#include "BKE_armature.h"
#include "BKE_context.h"
#include "BKE_curve.h"
#include "BKE_depsgraph.h"
-#include "BKE_DerivedMesh.h"
-#include "BKE_displist.h"
-#include "BKE_global.h"
#include "BKE_lattice.h"
#include "BKE_main.h"
-#include "BKE_mesh.h"
-#include "BKE_modifier.h"
#include "BKE_object.h"
-#include "BKE_utildefines.h"
#include "WM_api.h"
#include "WM_types.h"
@@ -106,6 +99,37 @@ static void special_transvert_update(Scene *scene, Object *obedit)
Nurb *nu= nurbs->first;
while(nu) {
+ /* keep handles' vectors unchanged */
+ if(nu->bezt) {
+ int a= nu->pntsu;
+ TransVert *tv= transvmain;
+ BezTriple *bezt= nu->bezt;
+
+ while(a--) {
+ if(bezt->f1 & SELECT) tv++;
+
+ if(bezt->f2 & SELECT) {
+ float v[3];
+
+ if(bezt->f1 & SELECT) {
+ sub_v3_v3v3(v, (tv-1)->oldloc, tv->oldloc);
+ add_v3_v3v3(bezt->vec[0], bezt->vec[1], v);
+ }
+
+ if(bezt->f3 & SELECT) {
+ sub_v3_v3v3(v, (tv+1)->oldloc, tv->oldloc);
+ add_v3_v3v3(bezt->vec[2], bezt->vec[1], v);
+ }
+
+ tv++;
+ }
+
+ if(bezt->f3 & SELECT) tv++;
+
+ bezt++;
+ }
+ }
+
test2DNurb(nu);
testhandlesNurb(nu); /* test for bezier too */
nu= nu->next;
@@ -152,14 +176,16 @@ static void special_transvert_update(Scene *scene, Object *obedit)
else if(obedit->type==OB_LATTICE) {
Lattice *lt= obedit->data;
- if(lt->editlatt->flag & LT_OUTSIDE)
- outside_lattice(lt->editlatt);
+ if(lt->editlatt->latt->flag & LT_OUTSIDE)
+ outside_lattice(lt->editlatt->latt);
}
}
}
/* copied from editobject.c, needs to be replaced with new transform code still */
-/* mode: 1 = proportional, 2 = all joints (for bones only) */
+/* 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)
{
Nurb *nu;
@@ -180,7 +206,6 @@ static void make_trans_verts(Object *obedit, float *min, float *max, int mode)
if(obedit->type==OB_MESH) {
Mesh *me= obedit->data;
EditMesh *em= me->edit_mesh;
- int proptrans= 0;
// transform now requires awareness for select mode, so we tag the f1 flags in verts
tottrans= 0;
@@ -213,17 +238,6 @@ static void make_trans_verts(Object *obedit, float *min, float *max, int mode)
for(eve= em->verts.first; eve; eve= eve->next) if(eve->f1) tottrans++;
}
- /* proportional edit exception... */
- if((mode & 1) && tottrans) {
- for(eve= em->verts.first; eve; eve= eve->next) {
- if(eve->h==0) {
- eve->f1 |= 2;
- proptrans++;
- }
- }
- if(proptrans>tottrans) tottrans= proptrans;
- }
-
/* and now make transverts */
if(tottrans) {
tv=transvmain= MEM_callocN(tottrans*sizeof(TransVert), "maketransverts");
@@ -255,7 +269,7 @@ static void make_trans_verts(Object *obedit, float *min, float *max, int mode)
short rootok= (!(ebo->parent && (ebo->flag & BONE_CONNECTED) && ebo->parent->flag & BONE_TIPSEL));
if ((tipsel && rootsel) || (rootsel)) {
- /* Don't add the tip (unless mode & 2, for getting all joints),
+ /* Don't add the tip (unless mode & TM_ALL_JOINTS, for getting all joints),
* otherwise we get zero-length bones as tips will snap to the same
* location as heads.
*/
@@ -268,7 +282,7 @@ static void make_trans_verts(Object *obedit, float *min, float *max, int mode)
tottrans++;
}
- if ((mode & 2) && (tipsel)) {
+ if ((mode & TM_ALL_JOINTS) && (tipsel)) {
VECCOPY (tv->oldloc, ebo->tail);
tv->loc= ebo->tail;
tv->nor= NULL;
@@ -308,14 +322,18 @@ static void make_trans_verts(Object *obedit, float *min, float *max, int mode)
bezt= nu->bezt;
while(a--) {
if(bezt->hide==0) {
- if((mode & 1) || (bezt->f1 & SELECT)) {
+ int skip_handle= 0;
+ if(bezt->f2 & SELECT)
+ skip_handle= mode & TM_SKIP_HANDLES;
+
+ if((bezt->f1 & SELECT) && !skip_handle) {
VECCOPY(tv->oldloc, bezt->vec[0]);
tv->loc= bezt->vec[0];
tv->flag= bezt->f1 & SELECT;
tv++;
tottrans++;
}
- if((mode & 1) || (bezt->f2 & SELECT)) {
+ if(bezt->f2 & SELECT) {
VECCOPY(tv->oldloc, bezt->vec[1]);
tv->loc= bezt->vec[1];
tv->val= &(bezt->alfa);
@@ -324,7 +342,7 @@ static void make_trans_verts(Object *obedit, float *min, float *max, int mode)
tv++;
tottrans++;
}
- if((mode & 1) || (bezt->f3 & SELECT)) {
+ if((bezt->f3 & SELECT) && !skip_handle) {
VECCOPY(tv->oldloc, bezt->vec[2]);
tv->loc= bezt->vec[2];
tv->flag= bezt->f3 & SELECT;
@@ -340,7 +358,7 @@ static void make_trans_verts(Object *obedit, float *min, float *max, int mode)
bp= nu->bp;
while(a--) {
if(bp->hide==0) {
- if((mode & 1) || (bp->f1 & SELECT)) {
+ if(bp->f1 & SELECT) {
VECCOPY(tv->oldloc, bp->vec);
tv->loc= bp->vec;
tv->val= &(bp->alfa);
@@ -379,14 +397,14 @@ static void make_trans_verts(Object *obedit, float *min, float *max, int mode)
else if(obedit->type==OB_LATTICE) {
Lattice *lt= obedit->data;
- bp= lt->editlatt->def;
+ bp= lt->editlatt->latt->def;
- a= lt->editlatt->pntsu*lt->editlatt->pntsv*lt->editlatt->pntsw;
+ a= lt->editlatt->latt->pntsu*lt->editlatt->latt->pntsv*lt->editlatt->latt->pntsw;
- tv=transvmain= MEM_callocN(a*sizeof(TransVert), "maketransverts curve");
+ tv=transvmain= MEM_callocN(a*sizeof(TransVert), "maketransverts latt");
while(a--) {
- if((mode & 1) || (bp->f1 & SELECT)) {
+ if(bp->f1 & SELECT) {
if(bp->hide==0) {
copy_v3_v3(tv->oldloc, bp->vec);
tv->loc= bp->vec;
@@ -399,6 +417,13 @@ static void make_trans_verts(Object *obedit, float *min, float *max, int mode)
}
}
+ if(!tottrans && transvmain) {
+ /* prevent memory leak. happens for curves/latticies due to */
+ /* difficult condition of adding points to trans data */
+ MEM_freeN(transvmain);
+ transvmain= NULL;
+ }
+
/* cent etc */
tv= transvmain;
total= 0.0;
@@ -734,7 +759,7 @@ static int snap_curs_to_sel(bContext *C, wmOperator *op)
tottrans=0;
if ELEM6(obedit->type, OB_ARMATURE, OB_LATTICE, OB_MESH, OB_SURF, OB_CURVE, OB_MBALL)
- make_trans_verts(obedit, bmat[0], bmat[1], 2);
+ make_trans_verts(obedit, bmat[0], bmat[1], TM_ALL_JOINTS|TM_SKIP_HANDLES);
if(tottrans==0) return OPERATOR_CANCELLED;
copy_m3_m4(bmat, obedit->obmat);
@@ -916,7 +941,7 @@ int minmax_verts(Object *obedit, float *min, float *max)
tottrans=0;
if ELEM5(obedit->type, OB_ARMATURE, OB_LATTICE, OB_MESH, OB_SURF, OB_CURVE)
- make_trans_verts(obedit, bmat[0], bmat[1], 2);
+ make_trans_verts(obedit, bmat[0], bmat[1], TM_ALL_JOINTS);
if(tottrans==0) return 0;
diff --git a/source/blender/editors/space_view3d/view3d_toolbar.c b/source/blender/editors/space_view3d/view3d_toolbar.c
index ac6d61fce18..6e2624cb60b 100644
--- a/source/blender/editors/space_view3d/view3d_toolbar.c
+++ b/source/blender/editors/space_view3d/view3d_toolbar.c
@@ -41,21 +41,11 @@
#include "BLI_editVert.h"
#include "BLI_rand.h"
-#include "BKE_action.h"
-#include "BKE_brush.h"
#include "BKE_context.h"
-#include "BKE_curve.h"
-#include "BKE_customdata.h"
-#include "BKE_depsgraph.h"
#include "BKE_idprop.h"
-#include "BKE_mesh.h"
-#include "BKE_object.h"
#include "BKE_global.h"
-#include "BKE_scene.h"
#include "BKE_screen.h"
-#include "BKE_utildefines.h"
-#include "BIF_gl.h"
#include "WM_api.h"
#include "WM_types.h"
@@ -139,7 +129,7 @@ static void view3d_panel_operator_redo_operator(const bContext *C, Panel *pa, wm
{
if(op->type->flag & OPTYPE_MACRO) {
for(op= op->macro.first; op; op= op->next) {
- uiItemL(pa->layout, op->idname, 0);
+ uiItemL(pa->layout, op->type->name, 0);
view3d_panel_operator_redo_operator(C, pa, op);
}
}
diff --git a/source/blender/editors/space_view3d/view3d_view.c b/source/blender/editors/space_view3d/view3d_view.c
index b681f15433c..6a3c121ce4b 100644
--- a/source/blender/editors/space_view3d/view3d_view.c
+++ b/source/blender/editors/space_view3d/view3d_view.c
@@ -52,8 +52,6 @@
#include "BKE_main.h"
#include "BKE_report.h"
#include "BKE_scene.h"
-#include "BKE_screen.h"
-#include "BKE_utildefines.h"
#include "BKE_depsgraph.h" /* for fly mode updating */
@@ -308,7 +306,10 @@ static int view3d_smoothview_invoke(bContext *C, wmOperator *op, wmEvent *event)
if(rv3d->smooth_timer==NULL || rv3d->smooth_timer!=event->customdata)
return OPERATOR_PASS_THROUGH;
- step = (rv3d->smooth_timer->duration)/sms->time_allowed;
+ if(sms->time_allowed != 0.0f)
+ step = (rv3d->smooth_timer->duration)/sms->time_allowed;
+ else
+ step = 1.0f;
/* end timer */
if(step >= 1.0f) {
@@ -402,6 +403,10 @@ static int view3d_setcameratoview_exec(bContext *C, wmOperator *op)
View3D *v3d = CTX_wm_view3d(C);
RegionView3D *rv3d= CTX_wm_region_view3d(C);
+ copy_qt_qt(rv3d->lviewquat, rv3d->viewquat);
+ rv3d->lview= rv3d->view;
+ rv3d->lpersp= rv3d->persp;
+
setcameratoview3d(v3d, rv3d, v3d->camera);
rv3d->persp = RV3D_CAMOB;
@@ -588,11 +593,13 @@ void viewvector(RegionView3D *rv3d, float coord[3], float vec[3])
normalize_v3(vec);
}
-void initgrabz(RegionView3D *rv3d, float x, float y, float z)
+int initgrabz(RegionView3D *rv3d, float x, float y, float z)
{
- if(rv3d==NULL) return;
+ int flip= FALSE;
+ if(rv3d==NULL) return flip;
rv3d->zfac= rv3d->persmat[0][3]*x+ rv3d->persmat[1][3]*y+ rv3d->persmat[2][3]*z+ rv3d->persmat[3][3];
-
+ if (rv3d->zfac < 0.0f)
+ flip= TRUE;
/* if x,y,z is exactly the viewport offset, zfac is 0 and we don't want that
* (accounting for near zero values)
* */
@@ -605,6 +612,8 @@ void initgrabz(RegionView3D *rv3d, float x, float y, float z)
// -- Aligorith, 2009Aug31
//if (rv3d->zfac < 0.0f) rv3d->zfac = 1.0f;
if (rv3d->zfac < 0.0f) rv3d->zfac= -rv3d->zfac;
+
+ return flip;
}
/* always call initgrabz */
@@ -1779,7 +1788,7 @@ static int game_engine_exec(bContext *C, wmOperator *op)
if(rv3d->persp==RV3D_CAMOB && startscene->gm.framing.type == SCE_GAMEFRAMING_BARS && startscene->gm.stereoflag != STEREO_DOME) { /* Letterbox */
rctf cam_framef;
- calc_viewborder(startscene, ar, rv3d, CTX_wm_view3d(C), &cam_framef);
+ view3d_calc_camera_border(startscene, ar, rv3d, CTX_wm_view3d(C), &cam_framef);
cam_frame.xmin = cam_framef.xmin + ar->winrct.xmin;
cam_frame.xmax = cam_framef.xmax + ar->winrct.xmin;
cam_frame.ymin = cam_framef.ymin + ar->winrct.ymin;
@@ -2713,3 +2722,7 @@ void view3d_align_axis_to_vector(View3D *v3d, RegionView3D *rv3d, int axisidx, f
}
}
+int view3d_is_ortho(View3D *v3d, RegionView3D *rv3d)
+{
+ return (rv3d->persp == RV3D_ORTHO || (v3d->camera && ((Camera *)v3d->camera->data)->type == CAM_ORTHO));
+}
diff --git a/source/blender/editors/transform/CMakeLists.txt b/source/blender/editors/transform/CMakeLists.txt
index e67771270cf..e28ed89c80c 100644
--- a/source/blender/editors/transform/CMakeLists.txt
+++ b/source/blender/editors/transform/CMakeLists.txt
@@ -22,13 +22,13 @@
FILE(GLOB SRC *.c)
SET(INC
+ ../include
../../blenkernel
../../blenlib
- ../include
- ../../../../intern/guardedalloc
../../makesdna
../../makesrna
../../windowmanager
+ ../../../../intern/guardedalloc
)
BLENDERLIB(bf_editor_transform "${SRC}" "${INC}")
diff --git a/source/blender/editors/transform/Makefile b/source/blender/editors/transform/Makefile
index 607038b413b..9d23b763cd6 100644
--- a/source/blender/editors/transform/Makefile
+++ b/source/blender/editors/transform/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2007 Blender Foundation
# All rights reserved.
diff --git a/source/blender/editors/transform/SConscript b/source/blender/editors/transform/SConscript
index 78945ff7d3a..c1fe5d6889a 100644
--- a/source/blender/editors/transform/SConscript
+++ b/source/blender/editors/transform/SConscript
@@ -8,4 +8,4 @@ incs += ' ../../windowmanager #/intern/guardedalloc #/extern/glew/include'
incs += ' ../../render/extern/include'
incs += ' ../../gpu ../../makesrna'
-env.BlenderLib ( 'bf_editors_transform', sources, Split(incs), [], libtype=['core'], priority=[40] ) \ No newline at end of file
+env.BlenderLib ( 'bf_editors_transform', sources, Split(incs), [], libtype=['core'], priority=[40] )
diff --git a/source/blender/editors/transform/transform.c b/source/blender/editors/transform/transform.c
index 2550da13ad7..0acbe608f41 100644
--- a/source/blender/editors/transform/transform.c
+++ b/source/blender/editors/transform/transform.c
@@ -63,7 +63,6 @@
//#include "BIF_editsima.h"
//#include "BIF_editparticle.h"
-#include "BKE_action.h"
#include "BKE_nla.h"
//#include "BKE_bad_level_calls.h"/* popmenu and error */
#include "BKE_bmesh.h"
@@ -72,8 +71,6 @@
#include "BKE_global.h"
#include "BKE_particle.h"
#include "BKE_pointcache.h"
-#include "BKE_utildefines.h"
-#include "BKE_context.h"
#include "BKE_unit.h"
//#include "BSE_view.h"
@@ -301,7 +298,10 @@ static void viewRedrawForce(const bContext *C, TransInfo *t)
if (t->spacetype == SPACE_VIEW3D)
{
/* Do we need more refined tags? */
- WM_event_add_notifier(C, NC_OBJECT|ND_TRANSFORM, NULL);
+ if(t->flag & T_POSE)
+ WM_event_add_notifier(C, NC_OBJECT|ND_POSE, NULL);
+ else
+ WM_event_add_notifier(C, NC_OBJECT|ND_TRANSFORM, NULL);
/* for realtime animation record - send notifiers recognised by animation editors */
// XXX: is this notifier a lame duck?
@@ -1395,7 +1395,7 @@ void saveTransform(bContext *C, TransInfo *t, wmOperator *op)
ts->proportional_size = t->prop_size;
}
- if (RNA_struct_find_property(op->ptr, "proportional_editing_falloff") && !RNA_property_is_set(op->ptr, "proportional_editing_falloff")) {
+ if (RNA_struct_find_property(op->ptr, "proportional_edit_falloff") && !RNA_property_is_set(op->ptr, "proportional_edit_falloff")) {
ts->prop_mode = t->prop_mode;
}
@@ -1418,7 +1418,7 @@ void saveTransform(bContext *C, TransInfo *t, wmOperator *op)
if (RNA_struct_find_property(op->ptr, "proportional"))
{
RNA_enum_set(op->ptr, "proportional", proportional);
- RNA_enum_set(op->ptr, "proportional_editing_falloff", t->prop_mode);
+ RNA_enum_set(op->ptr, "proportional_edit_falloff", t->prop_mode);
RNA_float_set(op->ptr, "proportional_size", t->prop_size);
}
@@ -3527,7 +3527,7 @@ void initTilt(TransInfo *t)
t->num.increment = t->snap[1];
- t->flag |= T_NO_CONSTRAINT;
+ t->flag |= T_NO_CONSTRAINT|T_NO_PROJECT;
}
@@ -4137,7 +4137,7 @@ void initBoneEnvelope(TransInfo *t)
t->num.increment = t->snap[1];
- t->flag |= T_NO_CONSTRAINT;
+ t->flag |= T_NO_CONSTRAINT|T_NO_PROJECT;
}
int BoneEnvelope(TransInfo *t, short mval[2])
@@ -4661,8 +4661,23 @@ void freeSlideVerts(TransInfo *t)
{
TransDataSlideUv *suv;
SlideData *sld = t->customData;
+ Mesh *me = t->obedit->data;
int uvlay_idx;
+ if(me->drawflag & ME_DRAW_EDGELEN) {
+ TransDataSlideVert *tempsv;
+ LinkNode *look = sld->vertlist;
+ GHash *vertgh = sld->vhash;
+ while(look) {
+ tempsv = BLI_ghash_lookup(vertgh,(EditVert*)look->link);
+ if(tempsv != NULL) {
+ tempsv->up->f &= !SELECT;
+ tempsv->down->f &= !SELECT;
+ }
+ look = look->next;
+ }
+ }
+
//BLI_ghash_free(edgesgh, freeGHash, NULL);
BLI_ghash_free(sld->vhash, NULL, (GHashValFreeFP)MEM_freeN);
BLI_linklist_free(sld->vertlist, NULL);
@@ -4887,7 +4902,7 @@ void initBoneRoll(TransInfo *t)
t->num.increment = 1.0f;
- t->flag |= T_NO_CONSTRAINT;
+ t->flag |= T_NO_CONSTRAINT|T_NO_PROJECT;
}
int BoneRoll(TransInfo *t, short mval[2])
diff --git a/source/blender/editors/transform/transform.h b/source/blender/editors/transform/transform.h
index c1e62eb563c..6cfe78a979d 100644
--- a/source/blender/editors/transform/transform.h
+++ b/source/blender/editors/transform/transform.h
@@ -166,7 +166,7 @@ typedef struct TransDataCurveHandleFlags {
typedef struct TransDataSeq {
struct Sequence *seq;
int flag; /* a copy of seq->flag that may be modified for nested strips */
- short start_offset; /* use this so we can have transform data at the strips start, but apply correctly to the start frame */
+ int start_offset; /* use this so we can have transform data at the strips start, but apply correctly to the start frame */
short sel_flag; /* one of SELECT, SEQ_LEFTSEL and SEQ_RIGHTSEL */
} TransDataSeq;
diff --git a/source/blender/editors/transform/transform_constraints.c b/source/blender/editors/transform/transform_constraints.c
index 0177d458868..1e6916f0a86 100644
--- a/source/blender/editors/transform/transform_constraints.c
+++ b/source/blender/editors/transform/transform_constraints.c
@@ -38,7 +38,6 @@
#include <io.h>
#endif
-#include "MEM_guardedalloc.h"
#include "DNA_object_types.h"
#include "DNA_scene_types.h"
@@ -50,7 +49,6 @@
#include "BIF_glutil.h"
#include "BKE_context.h"
-#include "BKE_global.h"
#include "BKE_utildefines.h"
#include "ED_image.h"
diff --git a/source/blender/editors/transform/transform_conversions.c b/source/blender/editors/transform/transform_conversions.c
index aaf69e17f38..01404603b86 100644
--- a/source/blender/editors/transform/transform_conversions.c
+++ b/source/blender/editors/transform/transform_conversions.c
@@ -35,8 +35,6 @@
#include <string.h>
#include <math.h>
-#include "MEM_guardedalloc.h"
-
#include "DNA_anim_types.h"
#include "DNA_armature_types.h"
#include "DNA_lattice_types.h"
@@ -47,40 +45,30 @@
#include "DNA_sequence_types.h"
#include "DNA_view3d_types.h"
#include "DNA_constraint_types.h"
+#include "DNA_scene_types.h"
+#include "DNA_meshdata_types.h"
+
+#include "MEM_guardedalloc.h"
#include "BKE_action.h"
#include "BKE_armature.h"
-#include "BKE_blender.h"
-#include "BKE_cloth.h"
#include "BKE_context.h"
#include "BKE_curve.h"
#include "BKE_constraint.h"
#include "BKE_depsgraph.h"
-#include "BKE_displist.h"
-#include "BKE_DerivedMesh.h"
-#include "BKE_effect.h"
-#include "BKE_font.h"
#include "BKE_fcurve.h"
#include "BKE_global.h"
-#include "BKE_lattice.h"
#include "BKE_key.h"
#include "BKE_main.h"
-#include "BKE_mball.h"
-#include "BKE_mesh.h"
#include "BKE_modifier.h"
#include "BKE_nla.h"
#include "BKE_object.h"
#include "BKE_particle.h"
#include "BKE_sequencer.h"
#include "BKE_pointcache.h"
-#include "BKE_softbody.h"
-#include "BKE_utildefines.h"
#include "BKE_bmesh.h"
-#include "BKE_context.h"
-#include "BKE_report.h"
#include "BKE_scene.h"
-#include "BIF_gl.h"
#include "ED_anim_api.h"
#include "ED_armature.h"
@@ -114,20 +102,19 @@ static short constraints_list_needinv(TransInfo *t, ListBase *list);
/* ************************** Functions *************************** */
-static void qsort_trans_data(TransInfo *t, TransData *head, TransData *tail) {
- TransData pivot = *head;
+static void qsort_trans_data(TransInfo *t, TransData *head, TransData *tail, TransData *temp) {
TransData *ihead = head;
TransData *itail = tail;
- short connected = t->flag & T_PROP_CONNECTED;
+ *temp = *head;
while (head < tail)
{
- if (connected) {
- while ((tail->dist >= pivot.dist) && (head < tail))
+ if (t->flag & T_PROP_CONNECTED) {
+ while ((tail->dist >= temp->dist) && (head < tail))
tail--;
}
else {
- while ((tail->rdist >= pivot.rdist) && (head < tail))
+ while ((tail->rdist >= temp->rdist) && (head < tail))
tail--;
}
@@ -137,12 +124,12 @@ static void qsort_trans_data(TransInfo *t, TransData *head, TransData *tail) {
head++;
}
- if (connected) {
- while ((head->dist <= pivot.dist) && (head < tail))
+ if (t->flag & T_PROP_CONNECTED) {
+ while ((head->dist <= temp->dist) && (head < tail))
head++;
}
else {
- while ((head->rdist <= pivot.rdist) && (head < tail))
+ while ((head->rdist <= temp->rdist) && (head < tail))
head++;
}
@@ -153,16 +140,17 @@ static void qsort_trans_data(TransInfo *t, TransData *head, TransData *tail) {
}
}
- *head = pivot;
+ *head = *temp;
if (ihead < head) {
- qsort_trans_data(t, ihead, head-1);
+ qsort_trans_data(t, ihead, head-1, temp);
}
if (itail > head) {
- qsort_trans_data(t, head+1, itail);
+ qsort_trans_data(t, head+1, itail, temp);
}
}
void sort_trans_data_dist(TransInfo *t) {
+ TransData temp;
TransData *start = t->data;
int i = 1;
@@ -170,7 +158,7 @@ void sort_trans_data_dist(TransInfo *t) {
start++;
i++;
}
- qsort_trans_data(t, start, t->data + t->total - 1);
+ qsort_trans_data(t, start, t->data + t->total - 1, &temp);
}
static void sort_trans_data(TransInfo *t)
@@ -659,7 +647,8 @@ static void bone_children_clear_transflag(int mode, short around, ListBase *lb)
}
}
-/* sets transform flags in the bones, returns total */
+/* sets transform flags in the bones
+ * returns total number of bones with BONE_TRANSFORM */
int count_set_pose_transflags(int *out_mode, short around, Object *ob)
{
bArmature *arm= ob->data;
@@ -1543,7 +1532,7 @@ static void createTransCurveVerts(bContext *C, TransInfo *t)
static void createTransLatticeVerts(bContext *C, TransInfo *t)
{
- Lattice *latt = ((Lattice*)t->obedit->data)->editlatt;
+ Lattice *latt = ((Lattice*)t->obedit->data)->editlatt->latt;
TransData *td = NULL;
BPoint *bp;
float mtx[3][3], smtx[3][3];
@@ -3400,17 +3389,7 @@ static void createTransGraphEditData(bContext *C, TransInfo *t)
/* only include BezTriples whose 'keyframe' occurs on the same side of the current frame as mouse */
for (i=0, bezt=fcu->bezt; i < fcu->totvert; i++, bezt++) {
if (FrameOnMouseSide(t->frame_side, bezt->vec[1][0], cfra)) {
- if (sipo->around == V3D_LOCAL && !ELEM(t->mode, TFM_TRANSLATION, TFM_TIME_TRANSLATE)) {
- /* for local-pivot we only need to count the number of selected handles only, so that centerpoints don't
- * don't get moved wrong
- */
- if (bezt->ipo == BEZT_IPO_BEZ) {
- if (bezt->f1 & SELECT) count++;
- if (bezt->f3 & SELECT) count++;
- }
- else if (bezt->f2 & SELECT) count++; // TODO: could this cause problems?
- }
- else if (ELEM3(t->mode, TFM_TRANSLATION, TFM_TIME_TRANSLATE, TFM_TIME_SLIDE)) {
+ if (ELEM3(t->mode, TFM_TRANSLATION, TFM_TIME_TRANSLATE, TFM_TIME_SLIDE)) {
/* for 'normal' pivots - just include anything that is selected.
this works a bit differently in translation modes */
if (bezt->f2 & SELECT) count++;
@@ -3419,6 +3398,17 @@ static void createTransGraphEditData(bContext *C, TransInfo *t)
if (bezt->f3 & SELECT) count++;
}
}
+ else if (sipo->around == V3D_LOCAL) {
+ /* for local-pivot we only need to count the number of selected handles only, so that centerpoints don't
+ * don't get moved wrong
+ */
+ if (bezt->ipo == BEZT_IPO_BEZ) {
+ if (bezt->f1 & SELECT) count++;
+ if (bezt->f3 & SELECT) count++;
+ }
+ /* else if (bezt->f2 & SELECT) count++; // TODO: could this cause problems? */
+ /* - yes this causes problems, because no td is created for the center point */
+ }
else {
/* for 'normal' pivots - just include anything that is selected */
if (bezt->f1 & SELECT) count++;
@@ -3512,34 +3502,32 @@ static void createTransGraphEditData(bContext *C, TransInfo *t)
}
/* only include main vert if selected */
- if (bezt->f2 & SELECT) {
+ if (bezt->f2 & SELECT && (sipo->around != V3D_LOCAL || ELEM3(t->mode, TFM_TRANSLATION, TFM_TIME_TRANSLATE, TFM_TIME_SLIDE))) {
+
/* move handles relative to center */
if (ELEM3(t->mode, TFM_TRANSLATION, TFM_TIME_TRANSLATE, TFM_TIME_SLIDE)) {
if (bezt->f1 & SELECT) td->flag |= TD_MOVEHANDLE1;
if (bezt->f3 & SELECT) td->flag |= TD_MOVEHANDLE2;
}
- /* if scaling around individuals centers, do not include keyframes */
- if (sipo->around != V3D_LOCAL) {
- /* if handles were not selected, store their selection status */
- if (!(bezt->f1 & SELECT) && !(bezt->f3 & SELECT)) {
- if (hdata == NULL)
- hdata = initTransDataCurveHandles(td, bezt);
- }
-
- bezt_to_transdata(td++, td2d++, adt, bezt, 1, 1, 0, intvals, mtx, smtx);
+ /* if handles were not selected, store their selection status */
+ if (!(bezt->f1 & SELECT) && !(bezt->f3 & SELECT)) {
+ if (hdata == NULL)
+ hdata = initTransDataCurveHandles(td, bezt);
}
+
+ bezt_to_transdata(td++, td2d++, adt, bezt, 1, 1, 0, intvals, mtx, smtx);
- /* special hack (must be done after initTransDataCurveHandles(), as that stores handle settings to restore...):
- * - Check if we've got entire BezTriple selected and we're scaling/rotating that point,
- * then check if we're using auto-handles.
- * - If so, change them auto-handles to aligned handles so that handles get affected too
- */
- if ((bezt->h1 == HD_AUTO) && (bezt->h2 == HD_AUTO) && ELEM(t->mode, TFM_ROTATION, TFM_RESIZE)) {
- if (h1 && h2) {
- bezt->h1= HD_ALIGN;
- bezt->h2= HD_ALIGN;
- }
+ }
+ /* special hack (must be done after initTransDataCurveHandles(), as that stores handle settings to restore...):
+ * - Check if we've got entire BezTriple selected and we're scaling/rotating that point,
+ * then check if we're using auto-handles.
+ * - If so, change them auto-handles to aligned handles so that handles get affected too
+ */
+ if ((bezt->h1 == HD_AUTO) && (bezt->h2 == HD_AUTO) && ELEM(t->mode, TFM_ROTATION, TFM_RESIZE)) {
+ if (hdata && (bezt->f1 & SELECT) && (bezt->f3 & SELECT)) {
+ bezt->h1= HD_ALIGN;
+ bezt->h2= HD_ALIGN;
}
}
}
@@ -3693,6 +3681,11 @@ static void beztmap_to_data (TransInfo *t, FCurve *fcu, BeztMap *bezms, int totv
if (bezm->bezt->f2 & SELECT) {
if (td->loc2d == bezm->bezt->vec[1]) {
td->loc2d= (bezts + bezm->newIndex)->vec[1];
+
+ /* if only control point is selected, the handle pointers need to be updated as well */
+ td->h1= (bezts + bezm->newIndex)->vec[0];
+ td->h2= (bezts + bezm->newIndex)->vec[2];
+
adjusted[j] = 1;
}
}
@@ -4382,7 +4375,11 @@ static void set_trans_object_base_flags(bContext *C, TransInfo *t)
/* if parent selected, deselect */
while(parsel) {
- if(parsel->flag & SELECT) break;
+ if(parsel->flag & SELECT) {
+ Base *parbase = object_in_scene(parsel, scene);
+ if TESTBASELIB_BGMODE(v3d, scene, parbase)
+ break;
+ }
parsel= parsel->parent;
}
@@ -4923,8 +4920,13 @@ void special_aftertrans_update(bContext *C, TransInfo *t)
BLI_freelistN(&anim_data);
}
- /* make sure all F-Curves are set correctly */
- ANIM_editkeyframes_refresh(&ac);
+ /* Make sure all F-Curves are set correctly, but not if transform was
+ * canceled, since then curves were already restored to initial state.
+ * Note: if the refresh is really needed after cancel then some way
+ * has to be added to not update handle types (see bug 22289).
+ */
+ if(!cancelled)
+ ANIM_editkeyframes_refresh(&ac);
}
else if (t->spacetype == SPACE_NLA) {
bAnimContext ac;
diff --git a/source/blender/editors/transform/transform_generics.c b/source/blender/editors/transform/transform_generics.c
index 1b87a6f4ae7..036ef410963 100644
--- a/source/blender/editors/transform/transform_generics.c
+++ b/source/blender/editors/transform/transform_generics.c
@@ -38,9 +38,12 @@
#include "DNA_armature_types.h"
#include "DNA_lattice_types.h"
#include "DNA_screen_types.h"
-#include "DNA_scene_types.h"
#include "DNA_space_types.h"
+#include "DNA_scene_types.h"
+#include "DNA_object_types.h"
+#include "DNA_meshdata_types.h"
#include "DNA_view3d_types.h"
+#include "DNA_modifier_types.h"
#include "RNA_access.h"
@@ -56,21 +59,13 @@
#include "BKE_animsys.h"
#include "BKE_action.h"
#include "BKE_armature.h"
-#include "BKE_cloth.h"
#include "BKE_curve.h"
#include "BKE_depsgraph.h"
#include "BKE_displist.h"
-#include "BKE_depsgraph.h"
#include "BKE_fcurve.h"
-#include "BKE_global.h"
-#include "BKE_group.h"
#include "BKE_lattice.h"
-#include "BKE_key.h"
#include "BKE_mesh.h"
-#include "BKE_modifier.h"
#include "BKE_nla.h"
-#include "BKE_object.h"
-#include "BKE_utildefines.h"
#include "BKE_context.h"
#include "ED_anim_api.h"
@@ -311,7 +306,7 @@ static void animrecord_check_state (Scene *scene, ID *id, wmTimer *animtimer)
static int fcu_test_selected(FCurve *fcu)
{
BezTriple *bezt= fcu->bezt;
- int i;
+ unsigned int i;
if (bezt==NULL) /* ignore baked */
return 0;
@@ -664,7 +659,7 @@ void recalcData(TransInfo *t)
Lattice *la= t->obedit->data;
DAG_id_flush_update(t->obedit->data, OB_RECALC_DATA); /* sets recalc flags */
- if(la->editlatt->flag & LT_OUTSIDE) outside_lattice(la->editlatt);
+ if(la->editlatt->latt->flag & LT_OUTSIDE) outside_lattice(la->editlatt->latt);
}
else if (t->obedit->type == OB_MESH) {
EditMesh *em = ((Mesh*)t->obedit->data)->edit_mesh;
@@ -1078,9 +1073,9 @@ int initTransInfo (bContext *C, TransInfo *t, wmOperator *op, wmEvent *event)
t->prop_size = 1.0f;
}
- if (op && RNA_struct_find_property(op->ptr, "proportional_editing_falloff") && RNA_property_is_set(op->ptr, "proportional_editing_falloff"))
+ if (op && RNA_struct_find_property(op->ptr, "proportional_edit_falloff") && RNA_property_is_set(op->ptr, "proportional_edit_falloff"))
{
- t->prop_mode = RNA_enum_get(op->ptr, "proportional_editing_falloff");
+ t->prop_mode = RNA_enum_get(op->ptr, "proportional_edit_falloff");
}
else
{
diff --git a/source/blender/editors/transform/transform_manipulator.c b/source/blender/editors/transform/transform_manipulator.c
index 2a717f8b4d9..51698c27b37 100644
--- a/source/blender/editors/transform/transform_manipulator.c
+++ b/source/blender/editors/transform/transform_manipulator.c
@@ -51,15 +51,11 @@
#include "RNA_access.h"
#include "BKE_action.h"
-#include "BKE_armature.h"
#include "BKE_context.h"
#include "BKE_global.h"
-#include "BKE_lattice.h"
#include "BKE_mesh.h"
-#include "BKE_object.h"
#include "BKE_particle.h"
#include "BKE_pointcache.h"
-#include "BKE_utildefines.h"
#include "BLI_math.h"
#include "BLI_editVert.h"
@@ -292,7 +288,7 @@ int calc_manipulator_stats(const bContext *C)
bArmature *arm= obedit->data;
EditBone *ebo;
for (ebo= arm->edbo->first; ebo; ebo=ebo->next){
- if(ebo->layer & arm->layer) {
+ if(ebo->layer & arm->layer && !(ebo->flag & BONE_HIDDEN_A)) {
if (ebo->flag & BONE_TIPSEL) {
calc_tw_center(scene, ebo->tail);
totsel++;
@@ -383,9 +379,9 @@ int calc_manipulator_stats(const bContext *C)
BPoint *bp;
Lattice *lt= obedit->data;
- bp= lt->editlatt->def;
+ bp= lt->editlatt->latt->def;
- a= lt->editlatt->pntsu*lt->editlatt->pntsv*lt->editlatt->pntsw;
+ a= lt->editlatt->latt->pntsu*lt->editlatt->latt->pntsv*lt->editlatt->latt->pntsw;
while(a--) {
if(bp->f1 & SELECT) {
calc_tw_center(scene, bp->vec);
@@ -566,17 +562,12 @@ void test_manipulator_axis(const bContext *C)
static float screen_aligned(RegionView3D *rv3d, float mat[][4])
{
- float vec[3], size;
-
- VECCOPY(vec, mat[0]);
- size= normalize_v3(vec);
-
glTranslatef(mat[3][0], mat[3][1], mat[3][2]);
/* sets view screen aligned */
glRotatef( -360.0f*saacos(rv3d->viewquat[0])/(float)M_PI, rv3d->viewquat[1], rv3d->viewquat[2], rv3d->viewquat[3]);
- return size;
+ return len_v3(mat[0]); /* draw scale */
}
diff --git a/source/blender/editors/transform/transform_ops.c b/source/blender/editors/transform/transform_ops.c
index da454d1f03d..0187a3b3567 100644
--- a/source/blender/editors/transform/transform_ops.c
+++ b/source/blender/editors/transform/transform_ops.c
@@ -32,7 +32,6 @@
#include "BLI_math.h"
-#include "BKE_utildefines.h"
#include "BKE_context.h"
#include "BKE_global.h"
@@ -422,7 +421,7 @@ void Transform_Properties(struct wmOperatorType *ot, int flags)
if (flags & P_PROPORTIONAL)
{
RNA_def_enum(ot->srna, "proportional", proportional_editing_items, 0, "Proportional Editing", "");
- RNA_def_enum(ot->srna, "proportional_editing_falloff", proportional_falloff_items, 0, "Proportional Editing Falloff", "Falloff type for proportional editing mode.");
+ RNA_def_enum(ot->srna, "proportional_edit_falloff", proportional_falloff_items, 0, "Proportional Editing Falloff", "Falloff type for proportional editing mode.");
RNA_def_float(ot->srna, "proportional_size", 1, 0, FLT_MAX, "Proportional Size", "", 0, 100);
}
@@ -466,7 +465,7 @@ void TRANSFORM_OT_translate(struct wmOperatorType *ot)
ot->cancel = transform_cancel;
ot->poll = ED_operator_areaactive;
- RNA_def_float_vector(ot->srna, "value", 3, NULL, -FLT_MAX, FLT_MAX, "Vector", "", -FLT_MAX, FLT_MAX);
+ RNA_def_float_vector_xyz(ot->srna, "value", 3, NULL, -FLT_MAX, FLT_MAX, "Vector", "", -FLT_MAX, FLT_MAX);
Transform_Properties(ot, P_CONSTRAINT|P_PROPORTIONAL|P_MIRROR|P_ALIGN_SNAP);
}
@@ -753,7 +752,7 @@ void TRANSFORM_OT_transform(struct wmOperatorType *ot)
{TFM_PUSHPULL, "PUSHPULL", 0, "Pushpull", ""},
{TFM_CREASE, "CREASE", 0, "Crease", ""},
{TFM_MIRROR, "MIRROR", 0, "Mirror", ""},
- {TFM_BONESIZE, "BONESIZE", 0, "Bonesize", ""},
+ {TFM_BONESIZE, "BONE_SIZE", 0, "Bonesize", ""},
{TFM_BONE_ENVELOPE, "BONE_ENVELOPE", 0, "Bone_Envelope", ""},
{TFM_CURVE_SHRINKFATTEN, "CURVE_SHRINKFATTEN", 0, "Curve_Shrinkfatten", ""},
{TFM_BONE_ROLL, "BONE_ROLL", 0, "Bone_Roll", ""},
@@ -852,7 +851,7 @@ void transform_keymap_for_space(wmKeyConfig *keyconf, wmKeyMap *keymap, int spac
km = WM_keymap_add_item(keymap, OP_MIRROR, MKEY, KM_PRESS, KM_CTRL, 0);
km = WM_keymap_add_item(keymap, "WM_OT_context_toggle", TABKEY, KM_PRESS, KM_SHIFT, 0);
- RNA_string_set(km->ptr, "data_path", "tool_settings.snap");
+ RNA_string_set(km->ptr, "data_path", "tool_settings.use_snap");
km = WM_keymap_add_item(keymap, "TRANSFORM_OT_snap_type", TABKEY, KM_PRESS, KM_SHIFT|KM_CTRL, 0);
@@ -930,7 +929,7 @@ void transform_keymap_for_space(wmKeyConfig *keyconf, wmKeyMap *keymap, int spac
km = WM_keymap_add_item(keymap, "TRANSFORM_OT_mirror", MKEY, KM_PRESS, KM_CTRL, 0);
km = WM_keymap_add_item(keymap, "WM_OT_context_toggle", TABKEY, KM_PRESS, KM_SHIFT, 0);
- RNA_string_set(km->ptr, "data_path", "tool_settings.snap");
+ RNA_string_set(km->ptr, "data_path", "tool_settings.use_snap");
break;
default:
break;
diff --git a/source/blender/editors/transform/transform_orientations.c b/source/blender/editors/transform/transform_orientations.c
index 8451b0c154a..210ab0d45a8 100644
--- a/source/blender/editors/transform/transform_orientations.c
+++ b/source/blender/editors/transform/transform_orientations.c
@@ -34,7 +34,6 @@
#include "DNA_screen_types.h"
#include "DNA_view3d_types.h"
-#include "BKE_global.h"
#include "BKE_utildefines.h"
#include "BKE_armature.h"
#include "BKE_context.h"
diff --git a/source/blender/editors/transform/transform_snap.c b/source/blender/editors/transform/transform_snap.c
index 5ad7e1fa061..778698d3060 100644
--- a/source/blender/editors/transform/transform_snap.c
+++ b/source/blender/editors/transform/transform_snap.c
@@ -54,15 +54,12 @@
//#include "editmesh.h"
//#include "BIF_editsima.h"
#include "BIF_gl.h"
-#include "BIF_glutil.h"
//#include "BIF_mywindow.h"
//#include "BIF_screen.h"
//#include "BIF_editsima.h"
//#include "BIF_drawimage.h"
//#include "BIF_editmesh.h"
-#include "BKE_global.h"
-#include "BKE_utildefines.h"
#include "BKE_DerivedMesh.h"
#include "BKE_object.h"
#include "BKE_anim.h" /* for duplis */
@@ -443,9 +440,9 @@ void initSnapping(TransInfo *t, wmOperator *op)
normalize_v3(t->tsnap.snapNormal);
}
- if (RNA_struct_find_property(op->ptr, "snap_project"))
+ if (RNA_struct_find_property(op->ptr, "use_snap_project"))
{
- t->tsnap.project = RNA_boolean_get(op->ptr, "snap_project");
+ t->tsnap.project = RNA_boolean_get(op->ptr, "use_snap_project");
}
}
}
diff --git a/source/blender/editors/util/CMakeLists.txt b/source/blender/editors/util/CMakeLists.txt
index 2c55b0773be..a67be4631de 100644
--- a/source/blender/editors/util/CMakeLists.txt
+++ b/source/blender/editors/util/CMakeLists.txt
@@ -22,14 +22,14 @@
FILE(GLOB SRC *.c *.cpp)
SET(INC
+ ../include
../../blenkernel
../../blenlib
- ../include
- ../../../../intern/guardedalloc
../../../../extern/recastnavigation/Recast/Include
../../makesdna
../../makesrna
../../windowmanager
+ ../../../../intern/guardedalloc
)
BLENDERLIB(bf_editor_util "${SRC}" "${INC}")
diff --git a/source/blender/editors/util/Makefile b/source/blender/editors/util/Makefile
index 303079daeee..8535b3fb402 100644
--- a/source/blender/editors/util/Makefile
+++ b/source/blender/editors/util/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2007 Blender Foundation
# All rights reserved.
diff --git a/source/blender/editors/util/ed_util.c b/source/blender/editors/util/ed_util.c
index 3491c1b4df2..0d3d8a48b60 100644
--- a/source/blender/editors/util/ed_util.c
+++ b/source/blender/editors/util/ed_util.c
@@ -38,7 +38,6 @@
#include "BLI_editVert.h"
#include "BKE_context.h"
-#include "BKE_global.h"
#include "BKE_main.h"
#include "ED_armature.h"
diff --git a/source/blender/editors/util/editmode_undo.c b/source/blender/editors/util/editmode_undo.c
index 4b8d5c1df67..290c8a64881 100644
--- a/source/blender/editors/util/editmode_undo.c
+++ b/source/blender/editors/util/editmode_undo.c
@@ -40,12 +40,10 @@
#include "BKE_context.h"
#include "BKE_depsgraph.h"
#include "BKE_global.h"
-#include "BKE_object.h"
#include "BLI_blenlib.h"
#include "BLI_dynstr.h"
-#include "BKE_utildefines.h"
#include "ED_mesh.h"
diff --git a/source/blender/editors/util/numinput.c b/source/blender/editors/util/numinput.c
index a5c0bfeb73a..868aa8ac6af 100644
--- a/source/blender/editors/util/numinput.c
+++ b/source/blender/editors/util/numinput.c
@@ -30,8 +30,6 @@
#include <math.h> /* fabs */
#include <stdio.h> /* for sprintf */
-#include "BKE_global.h" /* for G */
-#include "BKE_utildefines.h" /* ABS */
#include "WM_types.h"
diff --git a/source/blender/editors/util/undo.c b/source/blender/editors/util/undo.c
index 1618ef88ba4..e5128ea784a 100644
--- a/source/blender/editors/util/undo.c
+++ b/source/blender/editors/util/undo.c
@@ -38,16 +38,11 @@
#include "BKE_blender.h"
#include "BKE_context.h"
-#include "BKE_depsgraph.h"
-#include "BKE_global.h"
-#include "BKE_object.h"
-#include "BKE_text.h"
#include "BLI_blenlib.h"
#include "BLI_editVert.h"
#include "BLI_dynstr.h"
-#include "BKE_utildefines.h"
#include "ED_armature.h"
#include "ED_particle.h"
@@ -168,6 +163,8 @@ static int ed_undo_step(bContext *C, int step, const char *undoname)
BKE_undo_name(C, undoname);
else
BKE_undo_step(C, step);
+
+ WM_event_add_notifier(C, NC_SCENE|ND_LAYER_CONTENT, CTX_data_scene(C));
}
}
diff --git a/source/blender/editors/uvedit/CMakeLists.txt b/source/blender/editors/uvedit/CMakeLists.txt
index 297863b2a9f..36cd1274ec7 100644
--- a/source/blender/editors/uvedit/CMakeLists.txt
+++ b/source/blender/editors/uvedit/CMakeLists.txt
@@ -22,14 +22,14 @@
FILE(GLOB SRC *.c)
SET(INC
+ ../include
../../blenkernel
../../blenlib
- ../include
- ../../../../intern/guardedalloc
- ../../../../intern/opennl/extern
../../makesdna
../../makesrna
../../windowmanager
+ ../../../../intern/guardedalloc
+ ../../../../intern/opennl/extern
)
BLENDERLIB(bf_editor_uvedit "${SRC}" "${INC}")
diff --git a/source/blender/editors/uvedit/Makefile b/source/blender/editors/uvedit/Makefile
index d589bbec3bc..e4b9ae72ccb 100644
--- a/source/blender/editors/uvedit/Makefile
+++ b/source/blender/editors/uvedit/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2007 Blender Foundation
# All rights reserved.
diff --git a/source/blender/editors/uvedit/uvedit_draw.c b/source/blender/editors/uvedit/uvedit_draw.c
index 335e17b8796..f1f2dd8548a 100644
--- a/source/blender/editors/uvedit/uvedit_draw.c
+++ b/source/blender/editors/uvedit/uvedit_draw.c
@@ -35,10 +35,8 @@
#include "DNA_screen_types.h"
#include "DNA_space_types.h"
-#include "BKE_customdata.h"
#include "BKE_DerivedMesh.h"
#include "BKE_mesh.h"
-#include "BKE_object.h"
#include "BKE_utildefines.h"
#include "BLI_math.h"
diff --git a/source/blender/editors/uvedit/uvedit_ops.c b/source/blender/editors/uvedit/uvedit_ops.c
index cbc0eb41f84..cd58ac4a482 100644
--- a/source/blender/editors/uvedit/uvedit_ops.c
+++ b/source/blender/editors/uvedit/uvedit_ops.c
@@ -48,7 +48,6 @@
#include "BKE_library.h"
#include "BKE_mesh.h"
#include "BKE_report.h"
-#include "BKE_utildefines.h"
#include "ED_image.h"
#include "ED_mesh.h"
@@ -108,7 +107,7 @@ void ED_uvedit_assign_image(Scene *scene, Object *obedit, Image *ima, Image *pre
/* ensure we have a uv layer */
if(!CustomData_has_layer(&em->fdata, CD_MTFACE)) {
- EM_add_data_layer(em, &em->fdata, CD_MTFACE);
+ EM_add_data_layer(em, &em->fdata, CD_MTFACE, NULL);
update= 1;
}
diff --git a/source/blender/editors/uvedit/uvedit_unwrap_ops.c b/source/blender/editors/uvedit/uvedit_unwrap_ops.c
index e7c89c1fd1b..20c9fa5877b 100644
--- a/source/blender/editors/uvedit/uvedit_unwrap_ops.c
+++ b/source/blender/editors/uvedit/uvedit_unwrap_ops.c
@@ -41,10 +41,8 @@
#include "BKE_context.h"
#include "BKE_customdata.h"
#include "BKE_depsgraph.h"
-#include "BKE_global.h"
#include "BKE_image.h"
#include "BKE_mesh.h"
-#include "BKE_utildefines.h"
#include "BLI_math.h"
#include "BLI_edgehash.h"
@@ -86,7 +84,7 @@ static int ED_uvedit_ensure_uvs(bContext *C, Scene *scene, Object *obedit)
}
if(em && em->faces.first)
- EM_add_data_layer(em, &em->fdata, CD_MTFACE);
+ EM_add_data_layer(em, &em->fdata, CD_MTFACE, NULL);
if(!ED_uvedit_test(obedit)) {
BKE_mesh_end_editmesh(obedit->data, em);
diff --git a/source/blender/gpu/CMakeLists.txt b/source/blender/gpu/CMakeLists.txt
index 126cddf852f..5de7b0c5281 100644
--- a/source/blender/gpu/CMakeLists.txt
+++ b/source/blender/gpu/CMakeLists.txt
@@ -26,9 +26,18 @@
FILE(GLOB SRC intern/*.c)
-SET(INC
- . ../blenlib ../blenkernel ../makesdna ../makesrna ../include
- ../../../extern/glew/include ../../../intern/guardedalloc ../../../intern/smoke/extern ../imbuf)
+SET(INC
+ .
+ ../blenlib
+ ../blenkernel
+ ../include
+ ../imbuf
+ ../makesdna
+ ../makesrna
+ ../../../extern/glew/include
+ ../../../intern/guardedalloc
+ ../../../intern/smoke/extern
+)
IF(WIN32)
INCLUDE_DIRECTORIES(${PTHREADS_INC})
diff --git a/source/blender/gpu/Makefile b/source/blender/gpu/Makefile
index b9bde147115..eaa8a69bfdd 100644
--- a/source/blender/gpu/Makefile
+++ b/source/blender/gpu/Makefile
@@ -18,7 +18,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
# All rights reserved.
diff --git a/source/blender/gpu/intern/Makefile b/source/blender/gpu/intern/Makefile
index 2637bff44ac..088b56edbab 100644
--- a/source/blender/gpu/intern/Makefile
+++ b/source/blender/gpu/intern/Makefile
@@ -18,7 +18,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
# All rights reserved.
diff --git a/source/blender/gpu/intern/gpu_buffers.c b/source/blender/gpu/intern/gpu_buffers.c
index bc90ddb23b7..5bddb42add2 100644
--- a/source/blender/gpu/intern/gpu_buffers.c
+++ b/source/blender/gpu/intern/gpu_buffers.c
@@ -45,7 +45,6 @@
#include "DNA_meshdata_types.h"
#include "BKE_DerivedMesh.h"
-#include "BKE_utildefines.h"
#include "DNA_userdef_types.h"
@@ -149,6 +148,9 @@ void GPU_buffer_pool_free(GPUBufferPool *pool)
MEM_freeN(pool->buffers);
MEM_freeN(pool);
+ /* if we are releasing the global pool, stop keeping a reference to it */
+ if (pool == globalPool)
+ globalPool = NULL;
}
void GPU_buffer_pool_free_unused(GPUBufferPool *pool)
diff --git a/source/blender/gpu/intern/gpu_codegen.c b/source/blender/gpu/intern/gpu_codegen.c
index a6250650787..d596f573682 100644
--- a/source/blender/gpu/intern/gpu_codegen.c
+++ b/source/blender/gpu/intern/gpu_codegen.c
@@ -36,7 +36,6 @@
#include "DNA_customdata_types.h"
#include "DNA_image_types.h"
-#include "DNA_listBase.h"
#include "DNA_material_types.h"
#include "BLI_dynstr.h"
@@ -44,8 +43,6 @@
#include "BLI_ghash.h"
#include "BLI_heap.h"
-#include "BKE_global.h"
-#include "BKE_utildefines.h"
#include "GPU_material.h"
#include "GPU_extensions.h"
diff --git a/source/blender/gpu/intern/gpu_draw.c b/source/blender/gpu/intern/gpu_draw.c
index 488eea40500..798bf5f86ff 100644
--- a/source/blender/gpu/intern/gpu_draw.c
+++ b/source/blender/gpu/intern/gpu_draw.c
@@ -36,7 +36,6 @@
#include "BLI_math.h"
-#include "DNA_image_types.h"
#include "DNA_lamp_types.h"
#include "DNA_material_types.h"
#include "DNA_meshdata_types.h"
@@ -45,7 +44,6 @@
#include "DNA_object_types.h"
#include "DNA_scene_types.h"
#include "DNA_smoke_types.h"
-#include "DNA_userdef_types.h"
#include "DNA_view3d_types.h"
#include "MEM_guardedalloc.h"
@@ -863,7 +861,7 @@ void GPU_free_images_anim(void)
if(G.main)
for(ima=G.main->image.first; ima; ima=ima->id.next)
- if(ELEM(ima->type, IMA_SRC_SEQUENCE, IMA_SRC_MOVIE))
+ if(ELEM(ima->source, IMA_SRC_SEQUENCE, IMA_SRC_MOVIE))
GPU_free_image(ima);
}
diff --git a/source/blender/gpu/intern/gpu_extensions.c b/source/blender/gpu/intern/gpu_extensions.c
index a96920aa839..fa8ff7a6354 100644
--- a/source/blender/gpu/intern/gpu_extensions.c
+++ b/source/blender/gpu/intern/gpu_extensions.c
@@ -32,18 +32,13 @@
#include "GL/glew.h"
-#include "DNA_listBase.h"
#include "DNA_image_types.h"
-#include "DNA_userdef_types.h"
#include "MEM_guardedalloc.h"
-#include "BKE_image.h"
#include "BKE_global.h"
#include "BKE_utildefines.h"
-#include "IMB_imbuf.h"
-#include "IMB_imbuf_types.h"
#include "BLI_blenlib.h"
diff --git a/source/blender/gpu/intern/gpu_material.c b/source/blender/gpu/intern/gpu_material.c
index f5898c8d0be..5f8015be52f 100644
--- a/source/blender/gpu/intern/gpu_material.c
+++ b/source/blender/gpu/intern/gpu_material.c
@@ -34,14 +34,10 @@
#include "MEM_guardedalloc.h"
-#include "DNA_image_types.h"
#include "DNA_lamp_types.h"
-#include "DNA_listBase.h"
#include "DNA_material_types.h"
#include "DNA_object_types.h"
#include "DNA_scene_types.h"
-#include "DNA_texture_types.h"
-#include "DNA_view3d_types.h"
#include "DNA_world_types.h"
#include "BKE_anim.h"
@@ -1007,7 +1003,7 @@ static void do_material_tex(GPUShadeInput *shi)
if(tex->type==TEX_IMAGE)
if(mat->scene->r.color_mgt_flag & R_COLOR_MANAGEMENT)
- GPU_link(mat, "srgb_to_linearrgb", tcol, tcol);
+ GPU_link(mat, "srgb_to_linearrgb", tcol, &tcol);
if(mtex->mapto & MAP_COL) {
GPUNodeLink *colfac;
diff --git a/source/blender/ikplugin/BIK_api.h b/source/blender/ikplugin/BIK_api.h
index 0f0703486a3..0f4fea89c37 100644
--- a/source/blender/ikplugin/BIK_api.h
+++ b/source/blender/ikplugin/BIK_api.h
@@ -73,7 +73,6 @@ int BIK_get_solver_param(struct bPose *pose, struct bPoseChannel *pchan, int id,
// number of solver available
// 0 = iksolver
// 1 = iTaSC
-#define BIK_SOLVER_COUNT 2
/* for use in BIK_get_constraint_param */
#define BIK_PARAM_CONSTRAINT_ERROR 0
diff --git a/source/blender/ikplugin/CMakeLists.txt b/source/blender/ikplugin/CMakeLists.txt
index ef1f4d450b9..79f33effb87 100644
--- a/source/blender/ikplugin/CMakeLists.txt
+++ b/source/blender/ikplugin/CMakeLists.txt
@@ -24,12 +24,27 @@
#
# ***** END GPL LICENSE BLOCK *****
-FILE(GLOB SRC intern/*.c intern/*.cpp)
+
+SET(SRC
+ ./intern/ikplugin_api.c
+ ./intern/iksolver_plugin.c
+)
SET(INC
- ../../../intern/guardedalloc ../../../intern/iksolver/extern
- ../../../intern/itasc ../../../extern/Eigen2
- ../blenlib ../makesdna ../blenkernel ../include ../ikplugin
+ ../blenlib
+ ../makesdna
+ ../blenkernel
+ ../include
+ ../ikplugin
+ ../../../intern/guardedalloc
+ ../../../intern/iksolver/extern
)
+IF(WITH_IK_ITASC)
+ ADD_DEFINITIONS(-DWITH_IK_ITASC)
+ LIST(APPEND INC ../../../extern/Eigen2)
+ LIST(APPEND INC ../../../intern/itasc)
+ LIST(APPEND SRC ./intern/itasc_plugin.cpp)
+ENDIF(WITH_IK_ITASC)
+
BLENDERLIB(bf_ikplugin "${SRC}" "${INC}")
diff --git a/source/blender/ikplugin/Makefile b/source/blender/ikplugin/Makefile
index 370ed418464..28726586cc8 100644
--- a/source/blender/ikplugin/Makefile
+++ b/source/blender/ikplugin/Makefile
@@ -12,7 +12,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
# All rights reserved.
diff --git a/source/blender/ikplugin/SConscript b/source/blender/ikplugin/SConscript
index a745a93077a..f60c42f8dc9 100644
--- a/source/blender/ikplugin/SConscript
+++ b/source/blender/ikplugin/SConscript
@@ -1,9 +1,11 @@
#!/usr/bin/python
Import ('env')
-
+defs = []
sources = env.Glob('intern/*.c') + env.Glob('intern/*.cpp')
incs = '#/intern/guardedalloc #/intern/iksolver/extern ../makesdna ../blenlib'
incs += ' ../blenkernel ../include ../ikplugin #/intern/itasc #/extern/Eigen2'
-env.BlenderLib ( 'bf_ikplugin', sources, Split(incs), [], libtype=['core','player'], priority=[180, 190] )
+defs.append('WITH_IK_ITASC')
+
+env.BlenderLib ( 'bf_ikplugin', sources, Split(incs), defs, libtype=['core','player'], priority=[180, 190] )
diff --git a/source/blender/ikplugin/intern/Makefile b/source/blender/ikplugin/intern/Makefile
index 0c54e5d1264..12e2366b28e 100644
--- a/source/blender/ikplugin/intern/Makefile
+++ b/source/blender/ikplugin/intern/Makefile
@@ -12,7 +12,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
# All rights reserved.
@@ -30,6 +30,9 @@ DIR = $(OCGDIR)/blender/ikplugin
include nan_compile.mk
+CFLAGS += -DWITH_IK_ITASC
+CPPFLAGS += -DWITH_IK_ITASC
+
CFLAGS += $(LEVEL_1_C_WARNINGS)
CFLAGS += -I$(NAN_GUARDEDALLOC)/include
CFLAGS += -I../../makesdna
diff --git a/source/blender/ikplugin/intern/ikplugin_api.c b/source/blender/ikplugin/intern/ikplugin_api.c
index fe9d116c8ca..c3310e77ad6 100644
--- a/source/blender/ikplugin/intern/ikplugin_api.c
+++ b/source/blender/ikplugin/intern/ikplugin_api.c
@@ -27,7 +27,6 @@
* ***** END GPL LICENSE BLOCK *****
*/
-#include "MEM_guardedalloc.h"
#include "BIK_api.h"
#include "BLI_blenlib.h"
@@ -43,10 +42,12 @@
#include "ikplugin_api.h"
#include "iksolver_plugin.h"
-#include "itasc_plugin.h"
+#ifdef WITH_IK_ITASC
+#include "itasc_plugin.h"
+#endif
-static IKPlugin ikplugin_tab[BIK_SOLVER_COUNT] = {
+static IKPlugin ikplugin_tab[] = {
/* Legacy IK solver */
{
iksolver_initialize_tree,
@@ -56,6 +57,7 @@ static IKPlugin ikplugin_tab[BIK_SOLVER_COUNT] = {
NULL,
NULL,
NULL,
+#ifdef WITH_IK_ITASC
},
/* iTaSC IK solver */
{
@@ -66,13 +68,13 @@ static IKPlugin ikplugin_tab[BIK_SOLVER_COUNT] = {
itasc_clear_cache,
itasc_update_param,
itasc_test_constraint,
+#endif
}
};
-
static IKPlugin *get_plugin(bPose *pose)
{
- if (!pose || pose->iksolver < 0 || pose->iksolver >= BIK_SOLVER_COUNT)
+ if (!pose || pose->iksolver < 0 || pose->iksolver >= (sizeof(ikplugin_tab) / sizeof(IKPlugin)))
return NULL;
return &ikplugin_tab[pose->iksolver];
@@ -136,3 +138,4 @@ void BIK_test_constraint(struct Object *ob, struct bConstraint *cons)
if (plugin && plugin->test_constraint)
plugin->test_constraint(ob, cons);
}
+
diff --git a/source/blender/ikplugin/intern/itasc_plugin.cpp b/source/blender/ikplugin/intern/itasc_plugin.cpp
index af69cb9a996..7bdc327afa1 100644
--- a/source/blender/ikplugin/intern/itasc_plugin.cpp
+++ b/source/blender/ikplugin/intern/itasc_plugin.cpp
@@ -32,6 +32,7 @@
#include <vector>
// iTaSC headers
+#ifdef WITH_IK_ITASC
#include "Armature.hpp"
#include "MovingFrame.hpp"
#include "CopyPose.hpp"
@@ -40,6 +41,7 @@
#include "Scene.hpp"
#include "Cache.hpp"
#include "Distance.hpp"
+#endif
#include "MEM_guardedalloc.h"
diff --git a/source/blender/imbuf/CMakeLists.txt b/source/blender/imbuf/CMakeLists.txt
index 49886bdc46f..699ed6e1b00 100644
--- a/source/blender/imbuf/CMakeLists.txt
+++ b/source/blender/imbuf/CMakeLists.txt
@@ -29,19 +29,19 @@ FILE(GLOB SRC intern/*.c)
SET(INC
.
- ../makesdna
- ../../../intern/guardedalloc
- ../../../intern/memutil
- ../blenlib
../avi
+ ../blenlib
../blenkernel
+ ../makesdna
+ ../../../intern/memutil
+ ../../../intern/guardedalloc
${JPEG_INC}
${PNG_INC}
${ZLIB_INC}
)
IF(WIN32)
- SET(INC ${INC} ${PTHREADS_INC})
+ LIST(APPEND INC ${PTHREADS_INC})
ENDIF(WIN32)
IF(WITH_IMAGE_OPENEXR)
diff --git a/source/blender/imbuf/IMB_imbuf.h b/source/blender/imbuf/IMB_imbuf.h
index 07b99dddfa5..c39c5d31f80 100644
--- a/source/blender/imbuf/IMB_imbuf.h
+++ b/source/blender/imbuf/IMB_imbuf.h
@@ -93,7 +93,7 @@ void IMB_exit(void);
*
* @attention Defined in readimage.c
*/
-struct ImBuf *IMB_ibImageFromMemory(unsigned char *mem, int size, int flags);
+struct ImBuf *IMB_ibImageFromMemory(unsigned char *mem, size_t size, int flags);
/**
*
diff --git a/source/blender/imbuf/Makefile b/source/blender/imbuf/Makefile
index cc9b56b3cd8..78eea89173f 100644
--- a/source/blender/imbuf/Makefile
+++ b/source/blender/imbuf/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
# All rights reserved.
diff --git a/source/blender/imbuf/SConscript b/source/blender/imbuf/SConscript
index 6b3360a16c5..c5c08a2856a 100644
--- a/source/blender/imbuf/SConscript
+++ b/source/blender/imbuf/SConscript
@@ -45,7 +45,7 @@ if env['WITH_BF_REDCODE']:
incs += ' ' + env['BF_REDCODE_INC']
if env['WITH_BF_QUICKTIME']:
- incs += ' ../quicktime ' + env['BF_QUICKTIME_INC']
- defs.append('WITH_QUICKTIME')
+ incs += ' ../quicktime ' + env['BF_QUICKTIME_INC']
+ defs.append('WITH_QUICKTIME')
env.BlenderLib ( libname = 'bf_imbuf', sources = sources, includes = Split(incs), defines = defs, libtype=['core','player'], priority = [185,115] )
diff --git a/source/blender/imbuf/intern/IMB_filetype.h b/source/blender/imbuf/intern/IMB_filetype.h
index 9fd4108bee9..8529c72c7ae 100644
--- a/source/blender/imbuf/intern/IMB_filetype.h
+++ b/source/blender/imbuf/intern/IMB_filetype.h
@@ -37,9 +37,9 @@ typedef struct ImFileType {
int (*is_a)(unsigned char *buf);
int (*ftype)(struct ImFileType *type, struct ImBuf *ibuf);
- struct ImBuf *(*load)(unsigned char *mem, int size, int flags);
+ struct ImBuf *(*load)(unsigned char *mem, size_t size, int flags);
int (*save)(struct ImBuf *ibuf, char *name, int flags);
- void (*load_tile)(struct ImBuf *ibuf, unsigned char *mem, int size, int tx, int ty, unsigned int *rect);
+ void (*load_tile)(struct ImBuf *ibuf, unsigned char *mem, size_t size, int tx, int ty, unsigned int *rect);
int flag;
int filetype;
@@ -60,59 +60,59 @@ void imb_tile_cache_tile_free(struct ImBuf *ibuf, int tx, int ty);
/* png */
int imb_is_a_png(unsigned char *buf);
-struct ImBuf *imb_loadpng(unsigned char *mem, int size, int flags);
+struct ImBuf *imb_loadpng(unsigned char *mem, size_t size, int flags);
int imb_savepng(struct ImBuf *ibuf, char *name, int flags);
/* targa */
int imb_is_a_targa(unsigned char *buf);
-struct ImBuf *imb_loadtarga(unsigned char *mem, int size, int flags);
+struct ImBuf *imb_loadtarga(unsigned char *mem, size_t size, int flags);
int imb_savetarga(struct ImBuf * ibuf, char *name, int flags);
/* iris */
int imb_is_a_iris(unsigned char *mem);
-struct ImBuf *imb_loadiris(unsigned char *mem, int size, int flags);
+struct ImBuf *imb_loadiris(unsigned char *mem, size_t size, int flags);
int imb_saveiris(struct ImBuf * ibuf, char *name, int flags);
/* jp2 */
int imb_is_a_jp2(unsigned char *buf);
-struct ImBuf *imb_jp2_decode(unsigned char *mem, int size, int flags);
+struct ImBuf *imb_jp2_decode(unsigned char *mem, size_t size, int flags);
int imb_savejp2(struct ImBuf *ibuf, char *name, int flags);
/* jpeg */
int imb_is_a_jpeg(unsigned char *mem);
int imb_savejpeg(struct ImBuf * ibuf, char * name, int flags);
struct ImBuf * imb_ibJpegImageFromFilename (const char * filename, int flags);
-struct ImBuf * imb_load_jpeg (unsigned char * buffer, int size, int flags);
+struct ImBuf * imb_load_jpeg (unsigned char * buffer, size_t size, int flags);
/* bmp */
int imb_is_a_bmp(unsigned char *buf);
-struct ImBuf *imb_bmp_decode(unsigned char *mem, int size, int flags);
+struct ImBuf *imb_bmp_decode(unsigned char *mem, size_t size, int flags);
int imb_savebmp(struct ImBuf *ibuf, char *name, int flags);
/* cocoa */
-struct ImBuf *imb_cocoaLoadImage(unsigned char *mem, int size, int flags);
+struct ImBuf *imb_cocoaLoadImage(unsigned char *mem, size_t size, int flags);
short imb_cocoaSaveImage(struct ImBuf *ibuf, char *name, int flags);
/* cineon */
int imb_savecineon(struct ImBuf *buf, char *myfil, int flags);
-struct ImBuf *imb_loadcineon(unsigned char *mem, int size, int flags);
+struct ImBuf *imb_loadcineon(unsigned char *mem, size_t size, int flags);
int imb_is_cineon(unsigned char *buf);
/* dpx */
int imb_save_dpx(struct ImBuf *buf, char *myfile, int flags);
-struct ImBuf *imb_loaddpx(unsigned char *mem, int size, int flags);
+struct ImBuf *imb_loaddpx(unsigned char *mem, size_t size, int flags);
int imb_is_dpx(unsigned char *buf);
/* hdr */
int imb_is_a_hdr(unsigned char *buf);
-struct ImBuf *imb_loadhdr(unsigned char *mem, int size, int flags);
+struct ImBuf *imb_loadhdr(unsigned char *mem, size_t size, int flags);
int imb_savehdr(struct ImBuf * ibuf, char *name, int flags);
/* tiff */
void imb_inittiff(void);
int imb_is_a_tiff(unsigned char *buf);
-struct ImBuf *imb_loadtiff(unsigned char *mem, int size, int flags);
-void imb_loadtiletiff(struct ImBuf *ibuf, unsigned char *mem, int size,
+struct ImBuf *imb_loadtiff(unsigned char *mem, size_t size, int flags);
+void imb_loadtiletiff(struct ImBuf *ibuf, unsigned char *mem, size_t size,
int tx, int ty, unsigned int *rect);
int imb_savetiff(struct ImBuf *ibuf, char *name, int flags);
void *libtiff_findsymbol(char *name);
diff --git a/source/blender/imbuf/intern/Makefile b/source/blender/imbuf/intern/Makefile
index f3fa17385fe..8e7272100b9 100644
--- a/source/blender/imbuf/intern/Makefile
+++ b/source/blender/imbuf/intern/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
# All rights reserved.
diff --git a/source/blender/imbuf/intern/allocimbuf.c b/source/blender/imbuf/intern/allocimbuf.c
index 8e00c7c7cf1..02fc98f2d63 100644
--- a/source/blender/imbuf/intern/allocimbuf.c
+++ b/source/blender/imbuf/intern/allocimbuf.c
@@ -32,6 +32,8 @@
/* It's become a bit messy... Basically, only the IMB_ prefixed files
* should remain. */
+#include <stddef.h>
+
#include "IMB_imbuf.h"
#include "IMB_imbuf_types.h"
@@ -42,6 +44,7 @@
#include "imbuf.h"
#include "MEM_CacheLimiterC-Api.h"
+#include "MEM_guardedalloc.h"
void imb_freemipmapImBuf(ImBuf *ibuf)
{
diff --git a/source/blender/imbuf/intern/anim.c b/source/blender/imbuf/intern/anim.c
index 69e547cd8df..096ed499f85 100644
--- a/source/blender/imbuf/intern/anim.c
+++ b/source/blender/imbuf/intern/anim.c
@@ -60,6 +60,8 @@
#include "BLI_blenlib.h" /* BLI_remlink BLI_filesize BLI_addtail
BLI_countlist BLI_stringdec */
+#include "MEM_guardedalloc.h"
+
#include "DNA_userdef_types.h"
#include "BKE_global.h"
#include "BKE_depsgraph.h"
diff --git a/source/blender/imbuf/intern/bmp.c b/source/blender/imbuf/intern/bmp.c
index bdcf60090c3..450b09c923b 100644
--- a/source/blender/imbuf/intern/bmp.c
+++ b/source/blender/imbuf/intern/bmp.c
@@ -101,7 +101,7 @@ int imb_is_a_bmp(unsigned char *buf) {
return checkbmp(buf);
}
-struct ImBuf *imb_bmp_decode(unsigned char *mem, int size, int flags)
+struct ImBuf *imb_bmp_decode(unsigned char *mem, size_t size, int flags)
{
struct ImBuf *ibuf = 0;
BMPINFOHEADER bmi;
diff --git a/source/blender/imbuf/intern/cache.c b/source/blender/imbuf/intern/cache.c
index d15826df2f0..77e01d8ebef 100644
--- a/source/blender/imbuf/intern/cache.c
+++ b/source/blender/imbuf/intern/cache.c
@@ -20,6 +20,8 @@
* ***** END GPL LICENSE BLOCK *****
*/
+#include "MEM_guardedalloc.h"
+
#include "BLI_ghash.h"
#include "BLI_listbase.h"
#include "BLI_memarena.h"
diff --git a/source/blender/imbuf/intern/cineon/CMakeLists.txt b/source/blender/imbuf/intern/cineon/CMakeLists.txt
index cd887b6fc4e..5633d2a66f6 100644
--- a/source/blender/imbuf/intern/cineon/CMakeLists.txt
+++ b/source/blender/imbuf/intern/cineon/CMakeLists.txt
@@ -28,13 +28,13 @@ FILE(GLOB SRC *.c)
SET(INC
.
- ../../../blenkernel
- ../../
..
- ../../../blenlib
+ ../../
intern/include
- ../../../../../intern/guardedalloc
+ ../../../blenkernel
+ ../../../blenlib
../../../makesdna
+ ../../../../../intern/guardedalloc
)
BLENDERLIB(bf_cineon "${SRC}" "${INC}")
diff --git a/source/blender/imbuf/intern/cineon/Makefile b/source/blender/imbuf/intern/cineon/Makefile
index 99a9a5dbd46..6e940d530a9 100644
--- a/source/blender/imbuf/intern/cineon/Makefile
+++ b/source/blender/imbuf/intern/cineon/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
# All rights reserved.
diff --git a/source/blender/imbuf/intern/cineon/cineon_dpx.c b/source/blender/imbuf/intern/cineon/cineon_dpx.c
index aa1b8ca3447..a9b229536cb 100644
--- a/source/blender/imbuf/intern/cineon/cineon_dpx.c
+++ b/source/blender/imbuf/intern/cineon/cineon_dpx.c
@@ -53,7 +53,7 @@ static void cineon_conversion_parameters(LogImageByteConversionParameters *param
params->blackPoint = 95;
params->whitePoint = 685;
- params->gamma = 1.7f;
+ params->gamma = 1.0f;
params->doLogarithm = 0;
}
diff --git a/source/blender/imbuf/intern/dds/CMakeLists.txt b/source/blender/imbuf/intern/dds/CMakeLists.txt
index 376dd3d61f4..620d4041703 100644
--- a/source/blender/imbuf/intern/dds/CMakeLists.txt
+++ b/source/blender/imbuf/intern/dds/CMakeLists.txt
@@ -28,12 +28,12 @@ FILE (GLOB SRC *.cpp)
SET(INC
.
- ../../../blenkernel
- ../../../makesdna
- ../../
..
+ ./intern/include
+ ../../
../../../blenlib
- intern/include
+ ../../../blenkernel
+ ../../../makesdna
../../../../../intern/guardedalloc
)
diff --git a/source/blender/imbuf/intern/dds/Makefile b/source/blender/imbuf/intern/dds/Makefile
index e14f9320d19..d4f04382899 100644
--- a/source/blender/imbuf/intern/dds/Makefile
+++ b/source/blender/imbuf/intern/dds/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
# All rights reserved.
diff --git a/source/blender/imbuf/intern/dds/SConscript b/source/blender/imbuf/intern/dds/SConscript
index 0b7fd50e317..59509c88f03 100644
--- a/source/blender/imbuf/intern/dds/SConscript
+++ b/source/blender/imbuf/intern/dds/SConscript
@@ -4,14 +4,14 @@ Import ('env')
source_files = ['dds_api.cpp', 'DirectDrawSurface.cpp', 'Stream.cpp', 'BlockDXT.cpp', 'ColorBlock.cpp', 'Image.cpp']
incs = ['.',
- '../../',
- '../..',
- '..',
- '../../../makesdna',
- '../../../blenkernel',
- '../../../blenlib',
- 'intern/include',
- '#/intern/guardedalloc']
+ '../../',
+ '../..',
+ '..',
+ '../../../makesdna',
+ '../../../blenkernel',
+ '../../../blenlib',
+ 'intern/include',
+ '#/intern/guardedalloc']
defs = ['WITH_DDS']
diff --git a/source/blender/imbuf/intern/dds/dds_api.cpp b/source/blender/imbuf/intern/dds/dds_api.cpp
index 9a106253397..2e224893271 100644
--- a/source/blender/imbuf/intern/dds/dds_api.cpp
+++ b/source/blender/imbuf/intern/dds/dds_api.cpp
@@ -22,6 +22,7 @@
* ***** END GPL LICENSE BLOCK *****
*/
+#include <stddef.h>
#include <dds_api.h>
#include <Stream.h>
#include <DirectDrawSurface.h>
@@ -64,7 +65,7 @@ int imb_is_a_dds(unsigned char *mem) // note: use at most first 32 bytes
return(1);
}
-struct ImBuf *imb_load_dds(unsigned char *mem, int size, int flags)
+struct ImBuf *imb_load_dds(unsigned char *mem, size_t size, int flags)
{
struct ImBuf * ibuf = 0;
DirectDrawSurface dds(mem, size); /* reads header */
diff --git a/source/blender/imbuf/intern/dds/dds_api.h b/source/blender/imbuf/intern/dds/dds_api.h
index 6d9fa0839dd..384570ceb72 100644
--- a/source/blender/imbuf/intern/dds/dds_api.h
+++ b/source/blender/imbuf/intern/dds/dds_api.h
@@ -31,7 +31,7 @@ extern "C" {
int imb_save_dds(struct ImBuf *ibuf, char *name, int flags);
int imb_is_a_dds(unsigned char *mem); /* use only first 32 bytes of mem */
-struct ImBuf *imb_load_dds(unsigned char *mem, int size, int flags);
+struct ImBuf *imb_load_dds(unsigned char *mem, size_t size, int flags);
#ifdef __cplusplus
}
diff --git a/source/blender/imbuf/intern/filetype.c b/source/blender/imbuf/intern/filetype.c
index db2eef759dc..fb5d2f2e4d7 100644
--- a/source/blender/imbuf/intern/filetype.c
+++ b/source/blender/imbuf/intern/filetype.c
@@ -22,6 +22,7 @@
* ***** END GPL LICENSE BLOCK *****
*/
+#include <stddef.h>
#include "IMB_imbuf.h"
#include "IMB_imbuf_types.h"
#include "IMB_filetype.h"
diff --git a/source/blender/imbuf/intern/filter.c b/source/blender/imbuf/intern/filter.c
index 3ee05da15c9..3cc266e460e 100644
--- a/source/blender/imbuf/intern/filter.c
+++ b/source/blender/imbuf/intern/filter.c
@@ -30,6 +30,7 @@
*/
#include "BKE_utildefines.h"
+#include "MEM_guardedalloc.h"
#include "IMB_imbuf_types.h"
#include "IMB_imbuf.h"
diff --git a/source/blender/imbuf/intern/imbuf.h b/source/blender/imbuf/intern/imbuf.h
index 047795355b3..1e2f3ec461a 100644
--- a/source/blender/imbuf/intern/imbuf.h
+++ b/source/blender/imbuf/intern/imbuf.h
@@ -51,8 +51,6 @@
#include <sys/mman.h>
#endif
-#include "MEM_guardedalloc.h"
-
#if !defined(WIN32)
#define O_BINARY 0
#endif
diff --git a/source/blender/imbuf/intern/iris.c b/source/blender/imbuf/intern/iris.c
index dc9c7a1dc3b..883de823745 100644
--- a/source/blender/imbuf/intern/iris.c
+++ b/source/blender/imbuf/intern/iris.c
@@ -30,7 +30,10 @@
*/
#include <string.h>
+
#include "BLI_blenlib.h"
+#include "MEM_guardedalloc.h"
+
#include "imbuf.h"
#include "IMB_imbuf_types.h"
#include "IMB_imbuf.h"
@@ -241,7 +244,7 @@ int imb_is_a_iris(unsigned char *mem)
*
*/
-struct ImBuf *imb_loadiris(unsigned char *mem, int size, int flags)
+struct ImBuf *imb_loadiris(unsigned char *mem, size_t size, int flags)
{
unsigned int *base, *lptr = NULL;
float *fbase, *fptr = NULL;
diff --git a/source/blender/imbuf/intern/jp2.c b/source/blender/imbuf/intern/jp2.c
index a76c6e780ca..a70c154014a 100644
--- a/source/blender/imbuf/intern/jp2.c
+++ b/source/blender/imbuf/intern/jp2.c
@@ -23,6 +23,8 @@
#ifdef WITH_OPENJPEG
+#include "MEM_guardedalloc.h"
+
#include "BLI_blenlib.h"
#include "BLI_math.h"
@@ -88,7 +90,7 @@ void info_callback(const char *msg, void *client_data) {
-struct ImBuf *imb_jp2_decode(unsigned char *mem, int size, int flags)
+struct ImBuf *imb_jp2_decode(unsigned char *mem, size_t size, int flags)
{
struct ImBuf *ibuf = 0;
int use_float = 0; /* for precision higher then 8 use float */
@@ -287,7 +289,7 @@ struct ImBuf *imb_jp2_decode(unsigned char *mem, int size, int flags)
/*
-2048x1080 (2K) at 24 fps or 48 fps, or 4096x2160 (4K) at 24 fps; 3×12 bits per pixel, XYZ color space
+2048x1080 (2K) at 24 fps or 48 fps, or 4096x2160 (4K) at 24 fps; 3x12 bits per pixel, XYZ color space
* In 2K, for Scope (2.39:1) presentation 2048x858 pixels of the imager is used
* In 2K, for Flat (1.85:1) presentation 1998x1080 pixels of the imager is used
diff --git a/source/blender/imbuf/intern/jpeg.c b/source/blender/imbuf/intern/jpeg.c
index 2bae7228220..855c0bf3433 100644
--- a/source/blender/imbuf/intern/jpeg.c
+++ b/source/blender/imbuf/intern/jpeg.c
@@ -58,7 +58,7 @@ 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, int size);
+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);
@@ -167,7 +167,7 @@ static void term_source(j_decompress_ptr cinfo)
{
}
-static void memory_source(j_decompress_ptr cinfo, unsigned char *buffer, int size)
+static void memory_source(j_decompress_ptr cinfo, unsigned char *buffer, size_t size)
{
my_src_ptr src;
@@ -459,7 +459,7 @@ ImBuf * imb_ibJpegImageFromFilename (const char * filename, int flags)
return(ibuf);
}
-ImBuf * imb_load_jpeg (unsigned char * buffer, int 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;
diff --git a/source/blender/imbuf/intern/module.c b/source/blender/imbuf/intern/module.c
index 5438066d164..f291c0de776 100644
--- a/source/blender/imbuf/intern/module.c
+++ b/source/blender/imbuf/intern/module.c
@@ -22,6 +22,7 @@
* ***** END GPL LICENSE BLOCK *****
*/
+#include <stddef.h>
#include "IMB_imbuf.h"
#include "IMB_filetype.h"
diff --git a/source/blender/imbuf/intern/openexr/Makefile b/source/blender/imbuf/intern/openexr/Makefile
index 083089b11d5..820b2aeb003 100644
--- a/source/blender/imbuf/intern/openexr/Makefile
+++ b/source/blender/imbuf/intern/openexr/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
# All rights reserved.
diff --git a/source/blender/imbuf/intern/openexr/SConscript b/source/blender/imbuf/intern/openexr/SConscript
index f504c503109..47f83868baa 100644
--- a/source/blender/imbuf/intern/openexr/SConscript
+++ b/source/blender/imbuf/intern/openexr/SConscript
@@ -4,13 +4,13 @@ Import ('env')
source_files = ['openexr_api.cpp']
incs = ['.',
- '../../../blenkernel',
- '../../',
- '..',
- '../../../blenlib',
- 'intern/include',
- '#/intern/guardedalloc',
- '../../../makesdna']
+ '../../../blenkernel',
+ '../../',
+ '..',
+ '../../../blenlib',
+ 'intern/include',
+ '#/intern/guardedalloc',
+ '../../../makesdna']
incs += Split(env['BF_OPENEXR_INC'])
defs = ['WITH_OPENEXR']
diff --git a/source/blender/imbuf/intern/openexr/openexr_api.cpp b/source/blender/imbuf/intern/openexr/openexr_api.cpp
index 9b68e0e45eb..4107f051d73 100644
--- a/source/blender/imbuf/intern/openexr/openexr_api.cpp
+++ b/source/blender/imbuf/intern/openexr/openexr_api.cpp
@@ -93,7 +93,7 @@ class Mem_IStream: public IStream
{
public:
- Mem_IStream (unsigned char *exrbuf, int exrsize):
+ Mem_IStream (unsigned char *exrbuf, size_t exrsize):
IStream("dummy"), _exrpos (0), _exrsize(exrsize) { _exrbuf = exrbuf; }
virtual bool read (char c[], int n);
@@ -943,7 +943,7 @@ static int exr_is_renderresult(InputFile *file)
return 0;
}
-struct ImBuf *imb_load_openexr(unsigned char *mem, int size, int flags)
+struct ImBuf *imb_load_openexr(unsigned char *mem, size_t size, int flags)
{
struct ImBuf *ibuf = NULL;
InputFile *file = NULL;
diff --git a/source/blender/imbuf/intern/openexr/openexr_api.h b/source/blender/imbuf/intern/openexr/openexr_api.h
index c23b47d1480..c7e4c7d2f57 100644
--- a/source/blender/imbuf/intern/openexr/openexr_api.h
+++ b/source/blender/imbuf/intern/openexr/openexr_api.h
@@ -48,7 +48,7 @@ int imb_is_a_openexr (unsigned char *mem);
int imb_save_openexr (struct ImBuf *ibuf, char *name, int flags);
-struct ImBuf *imb_load_openexr (unsigned char *mem, int size, int flags);
+struct ImBuf *imb_load_openexr (unsigned char *mem, size_t size, int flags);
#ifdef __cplusplus
}
diff --git a/source/blender/imbuf/intern/png.c b/source/blender/imbuf/intern/png.c
index 4df8d8a2271..6b21f20b3fb 100644
--- a/source/blender/imbuf/intern/png.c
+++ b/source/blender/imbuf/intern/png.c
@@ -31,6 +31,7 @@
#include "png.h"
#include "BLI_blenlib.h"
+#include "MEM_guardedalloc.h"
#include "imbuf.h"
@@ -285,7 +286,7 @@ int imb_savepng(struct ImBuf *ibuf, char *name, int flags)
return(1);
}
-struct ImBuf *imb_loadpng(unsigned char *mem, int size, int flags)
+struct ImBuf *imb_loadpng(unsigned char *mem, size_t size, int flags)
{
struct ImBuf *ibuf = 0;
png_structp png_ptr;
@@ -316,7 +317,7 @@ struct ImBuf *imb_loadpng(unsigned char *mem, int size, int flags)
return 0;
}
- ps.size = size;
+ ps.size = size; /* XXX, 4gig limit! */
ps.data = mem;
ps.seek = 0;
diff --git a/source/blender/imbuf/intern/radiance_hdr.c b/source/blender/imbuf/intern/radiance_hdr.c
index a0942c281e3..4064246c866 100644
--- a/source/blender/imbuf/intern/radiance_hdr.c
+++ b/source/blender/imbuf/intern/radiance_hdr.c
@@ -42,6 +42,9 @@
#ifdef WIN32
#include <io.h>
#endif
+
+#include "MEM_guardedalloc.h"
+
#include "BLI_blenlib.h"
#include "imbuf.h"
@@ -170,7 +173,7 @@ int imb_is_a_hdr(unsigned char *buf)
return 0;
}
-struct ImBuf *imb_loadhdr(unsigned char *mem, int size, int flags)
+struct ImBuf *imb_loadhdr(unsigned char *mem, size_t size, int flags)
{
struct ImBuf* ibuf;
RGBE* sline;
diff --git a/source/blender/imbuf/intern/readimage.c b/source/blender/imbuf/intern/readimage.c
index 3f4e177c78b..a56007f15f0 100644
--- a/source/blender/imbuf/intern/readimage.c
+++ b/source/blender/imbuf/intern/readimage.c
@@ -46,7 +46,7 @@
#include "IMB_imbuf.h"
#include "IMB_filetype.h"
-ImBuf *IMB_ibImageFromMemory(unsigned char *mem, int size, int flags)
+ImBuf *IMB_ibImageFromMemory(unsigned char *mem, size_t size, int flags)
{
ImBuf *ibuf;
ImFileType *type;
@@ -79,7 +79,7 @@ ImBuf *IMB_loadifffile(int file, int flags)
{
ImBuf *ibuf;
unsigned char *mem;
- int size;
+ size_t size;
if(file == -1) return 0;
@@ -166,7 +166,7 @@ static void imb_loadtilefile(ImBuf *ibuf, int file, int tx, int ty, unsigned int
{
ImFileType *type;
unsigned char *mem;
- int size;
+ size_t size;
if(file == -1) return;
diff --git a/source/blender/imbuf/intern/rotate.c b/source/blender/imbuf/intern/rotate.c
index e0e52bb7094..4edb7ac7877 100644
--- a/source/blender/imbuf/intern/rotate.c
+++ b/source/blender/imbuf/intern/rotate.c
@@ -30,7 +30,8 @@
*/
#include "BLI_blenlib.h"
-#include "BKE_utildefines.h"
+#include "BKE_utildefines.h"
+#include "MEM_guardedalloc.h"
#include "imbuf.h"
#include "IMB_imbuf_types.h"
diff --git a/source/blender/imbuf/intern/scaling.c b/source/blender/imbuf/intern/scaling.c
index 335e16402f9..0b8dea01ada 100644
--- a/source/blender/imbuf/intern/scaling.c
+++ b/source/blender/imbuf/intern/scaling.c
@@ -30,6 +30,7 @@
*/
#include "BLI_blenlib.h"
+#include "MEM_guardedalloc.h"
#include "imbuf.h"
#include "IMB_imbuf_types.h"
@@ -959,7 +960,7 @@ static struct ImBuf *scaledowny(struct ImBuf *ibuf, int newy)
}
if (ibuf->rect_float) {
do_float = 1;
- _newrectf = MEM_mallocN(newy * ibuf->x * sizeof(float) * 4, "scaldownyf");
+ _newrectf = MEM_mallocN(newy * ibuf->x * sizeof(float) * 4, "scaledownyf");
if (_newrectf==NULL) {
if (_newrect) MEM_freeN(_newrect);
return(ibuf);
diff --git a/source/blender/imbuf/intern/targa.c b/source/blender/imbuf/intern/targa.c
index 09aaccc1ab6..ada1f448bfc 100644
--- a/source/blender/imbuf/intern/targa.c
+++ b/source/blender/imbuf/intern/targa.c
@@ -31,6 +31,7 @@
#include <io.h>
#endif
#include "BLI_blenlib.h"
+#include "MEM_guardedalloc.h"
#include "imbuf.h"
@@ -358,7 +359,7 @@ static void complete_partial_load(struct ImBuf *ibuf, unsigned int *rect)
}
}
-static void decodetarga(struct ImBuf *ibuf, unsigned char *mem, int mem_size, int psize)
+static void decodetarga(struct ImBuf *ibuf, unsigned char *mem, size_t mem_size, int psize)
{
unsigned char *mem_end = mem+mem_size;
int count, col, size;
@@ -469,7 +470,7 @@ partial_load:
complete_partial_load(ibuf, rect);
}
-static void ldtarga(struct ImBuf * ibuf,unsigned char * mem, int 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;
int col,size;
@@ -526,7 +527,7 @@ partial_load:
}
-struct ImBuf *imb_loadtarga(unsigned char *mem, int mem_size, int flags)
+struct ImBuf *imb_loadtarga(unsigned char *mem, size_t mem_size, int flags)
{
TARGA tga;
struct ImBuf * ibuf;
diff --git a/source/blender/imbuf/intern/thumbs.c b/source/blender/imbuf/intern/thumbs.c
index dcbd6df7ced..f3415d44ecb 100644
--- a/source/blender/imbuf/intern/thumbs.c
+++ b/source/blender/imbuf/intern/thumbs.c
@@ -29,7 +29,6 @@
#include <stdio.h>
-#include "BKE_global.h"
#include "BKE_utildefines.h"
#include "BLI_blenlib.h"
#include "MEM_guardedalloc.h"
@@ -249,8 +248,8 @@ ImBuf* IMB_thumb_create(const char* path, ThumbSize size, ThumbSource source, Im
char tdir[FILE_MAX];
char temp[FILE_MAX];
char mtime[40]= "0"; /* incase we can't stat the file */
- char cwidth[40];
- char cheight[40];
+ char cwidth[40]= "0"; /* incase images have no data */
+ char cheight[40]= "0";
char thumb[40];
short tsize = 128;
short ex, ey;
@@ -265,7 +264,7 @@ ImBuf* IMB_thumb_create(const char* path, ThumbSize size, ThumbSource source, Im
tsize = 256;
break;
case THB_FAIL:
- tsize = 0;
+ tsize = 1;
break;
default:
return 0; /* unknown size */
@@ -281,7 +280,7 @@ ImBuf* IMB_thumb_create(const char* path, ThumbSize size, ThumbSource source, Im
return NULL;
}
if (size == THB_FAIL) {
- img = IMB_allocImBuf(0,0,32, IB_rect | IB_metadata, 0);
+ img = IMB_allocImBuf(1,1,32, IB_rect | IB_metadata, 0);
if (!img) return 0;
} else {
if (THB_SOURCE_IMAGE == source || THB_SOURCE_BLEND == source) {
diff --git a/source/blender/imbuf/intern/thumbs_blend.c b/source/blender/imbuf/intern/thumbs_blend.c
index cb27b1a647f..2fef230f1c2 100644
--- a/source/blender/imbuf/intern/thumbs_blend.c
+++ b/source/blender/imbuf/intern/thumbs_blend.c
@@ -97,7 +97,7 @@ static ImBuf *loadblend_thumb(gzFile gzfile)
/* length */
bhead[1] -= sizeof(int) * 2;
- /* inconsistant image size, quit early */
+ /* inconsistent image size, quit early */
if(bhead[1] != size[0] * size[1] * sizeof(int))
return NULL;
diff --git a/source/blender/imbuf/intern/tiff.c b/source/blender/imbuf/intern/tiff.c
index 6b94583f17d..5b77c6c7c36 100644
--- a/source/blender/imbuf/intern/tiff.c
+++ b/source/blender/imbuf/intern/tiff.c
@@ -262,7 +262,7 @@ static toff_t imb_tiff_SizeProc(thandle_t handle)
return (toff_t)(mfile->size);
}
-static TIFF *imb_tiff_client_open(ImbTIFFMemFile *memFile, unsigned char *mem, int size)
+static TIFF *imb_tiff_client_open(ImbTIFFMemFile *memFile, unsigned char *mem, size_t size)
{
/* open the TIFF client layer interface to the in-memory file */
memFile->mem = mem;
@@ -464,7 +464,7 @@ void imb_inittiff(void)
*
* @return: A newly allocated ImBuf structure if successful, otherwise NULL.
*/
-ImBuf *imb_loadtiff(unsigned char *mem, int size, int flags)
+ImBuf *imb_loadtiff(unsigned char *mem, size_t size, int flags)
{
TIFF *image = NULL;
ImBuf *ibuf = NULL, *hbuf;
@@ -573,7 +573,7 @@ ImBuf *imb_loadtiff(unsigned char *mem, int size, int flags)
return ibuf;
}
-void imb_loadtiletiff(ImBuf *ibuf, unsigned char *mem, int size, int tx, int ty, unsigned int *rect)
+void imb_loadtiletiff(ImBuf *ibuf, unsigned char *mem, size_t size, int tx, int ty, unsigned int *rect)
{
TIFF *image = NULL;
uint32 width, height;
diff --git a/source/blender/imbuf/intern/util.c b/source/blender/imbuf/intern/util.c
index 3a642e1256c..cd447e5e43a 100644
--- a/source/blender/imbuf/intern/util.c
+++ b/source/blender/imbuf/intern/util.c
@@ -77,7 +77,7 @@ const char *imb_ext_image[] = {
#ifdef WITH_TIFF
".tif", ".tiff", ".tx",
#endif
-#ifdef WITH_BF_OPENJPEG
+#ifdef WITH_OPENJPEG
".jp2",
#endif
#ifdef WITH_HDR
@@ -90,7 +90,7 @@ const char *imb_ext_image[] = {
".dpx",
".cin",
#endif
-#ifdef WITH_BF_OPENEXR
+#ifdef WITH_OPENEXR
".exr",
#endif
NULL};
diff --git a/source/blender/makesdna/DNA_boid_types.h b/source/blender/makesdna/DNA_boid_types.h
index 8584b5f99e9..c4324612aff 100644
--- a/source/blender/makesdna/DNA_boid_types.h
+++ b/source/blender/makesdna/DNA_boid_types.h
@@ -187,8 +187,8 @@ typedef struct BoidState {
typedef struct BoidSettings {
int options, last_state_id;
- float landing_smoothness, rt;
- float banking, height;
+ float landing_smoothness, height;
+ float banking, pitch;
float health, aggression;
float strength, accuracy, range;
diff --git a/source/blender/makesdna/DNA_curve_types.h b/source/blender/makesdna/DNA_curve_types.h
index 283c810a1f6..50579660806 100644
--- a/source/blender/makesdna/DNA_curve_types.h
+++ b/source/blender/makesdna/DNA_curve_types.h
@@ -141,7 +141,7 @@ typedef struct Nurb {
typedef struct CharInfo {
short kern;
- short mat_nr;
+ short mat_nr; /* index start at 1, unlike mesh & nurbs */
char flag;
char pad;
short pad2;
@@ -157,6 +157,11 @@ typedef struct EditNurb {
/* index data for shape keys */
struct GHash *keyindex;
+
+ /* shape key being edited */
+ int shapenr;
+
+ char pad[4];
} EditNurb;
typedef struct Curve {
@@ -245,7 +250,7 @@ typedef struct Curve {
#define CU_PATH 8
#define CU_FOLLOW 16
#define CU_UV_ORCO 32
-#define CU_DEPRECATED 64
+#define CU_DEFORM_BOUNDS_OFF 64
#define CU_STRETCH 128
#define CU_OFFS_PATHDIST 256
#define CU_FAST 512 /* Font: no filling inside editmode */
@@ -341,5 +346,9 @@ typedef enum eBezTriple_KeyframeType {
#define CU_CHINFO_SMALLCAPS (1<<4)
#define CU_CHINFO_SMALLCAPS_CHECK (1<<5) /* set at runtime, checks if case switching is needed */
+/* mixed with KEY_LINEAR but define here since only curve supports */
+#define KEY_CU_EASE 3
+
+
#endif
diff --git a/source/blender/makesdna/DNA_lattice_types.h b/source/blender/makesdna/DNA_lattice_types.h
index 3a0fcb3c38c..94fc9fefb66 100644
--- a/source/blender/makesdna/DNA_lattice_types.h
+++ b/source/blender/makesdna/DNA_lattice_types.h
@@ -36,6 +36,14 @@ struct Ipo;
struct Key;
struct MDeformVert;
+typedef struct EditLatt {
+ struct Lattice *latt;
+
+ int shapenr;
+
+ char pad[4];
+} EditLatt;
+
typedef struct Lattice {
ID id;
@@ -58,7 +66,7 @@ typedef struct Lattice {
float *latticedata;
float latmat[4][4];
- struct Lattice *editlatt;
+ struct EditLatt *editlatt;
} Lattice;
/* ***************** LATTICE ********************* */
diff --git a/source/blender/makesdna/DNA_modifier_types.h b/source/blender/makesdna/DNA_modifier_types.h
index 2dbd2c19e50..0a3533becc8 100644
--- a/source/blender/makesdna/DNA_modifier_types.h
+++ b/source/blender/makesdna/DNA_modifier_types.h
@@ -66,7 +66,11 @@ typedef enum ModifierType {
eModifierType_ShapeKey,
eModifierType_Solidify,
eModifierType_Screw,
+ /* placeholder, keep this so durian files load in
+ * trunk with the correct modifier once its merged */
eModifierType_NavMesh,
+ eModifierType_Warp,
+
NUM_MODIFIER_TYPES
} ModifierType;
diff --git a/source/blender/makesdna/DNA_node_types.h b/source/blender/makesdna/DNA_node_types.h
index e3ac90bf881..fe422bfa689 100644
--- a/source/blender/makesdna/DNA_node_types.h
+++ b/source/blender/makesdna/DNA_node_types.h
@@ -255,6 +255,7 @@ typedef struct NodeChroma {
typedef struct NodeTwoXYs {
short x1, x2, y1, y2;
+ float fac_x1, fac_x2, fac_y1, fac_y2;
} NodeTwoXYs;
typedef struct NodeTwoFloats {
diff --git a/source/blender/makesdna/DNA_object_types.h b/source/blender/makesdna/DNA_object_types.h
index c2393a7d722..f1e0323985f 100644
--- a/source/blender/makesdna/DNA_object_types.h
+++ b/source/blender/makesdna/DNA_object_types.h
@@ -404,6 +404,7 @@ extern Object workob;
#define OB_BOUND_POLYH 4
#define OB_BOUND_POLYT 5
#define OB_BOUND_DYN_MESH 6
+#define OB_BOUND_CAPSULE 7
/* **************** BASE ********************* */
@@ -569,4 +570,3 @@ typedef enum ObjectMode {
#endif
-
diff --git a/source/blender/makesdna/DNA_scene_types.h b/source/blender/makesdna/DNA_scene_types.h
index 8909d96b03a..094a065145e 100644
--- a/source/blender/makesdna/DNA_scene_types.h
+++ b/source/blender/makesdna/DNA_scene_types.h
@@ -821,6 +821,7 @@ typedef struct Scene {
void *sound_scene;
void *sound_scene_handle;
+ void *sound_scrub_handle;
void *fps_info; /* (runtime) info/cache used for presenting playback framerate info to the user */
diff --git a/source/blender/makesdna/DNA_sequence_types.h b/source/blender/makesdna/DNA_sequence_types.h
index f9d482b2159..d51dec97351 100644
--- a/source/blender/makesdna/DNA_sequence_types.h
+++ b/source/blender/makesdna/DNA_sequence_types.h
@@ -44,15 +44,6 @@ typedef struct StripElem {
char name[80];
} StripElem;
-typedef struct TStripElem {
- struct ImBuf *ibuf;
- struct ImBuf *ibuf_comp;
- struct TStripElem *se1, *se2, *se3;
- short ok;
- short flag;
- int nr;
-} TStripElem;
-
typedef struct StripCrop {
int top;
int bottom;
@@ -95,11 +86,6 @@ typedef struct Strip {
StripCrop *crop;
StripTransform *transform;
StripColorBalance *color_balance;
- TStripElem *tstripdata;
- TStripElem *tstripdata_startstill;
- TStripElem *tstripdata_endstill;
- struct ImBuf *ibuf_startstill;
- struct ImBuf *ibuf_endstill;
} Strip;
diff --git a/source/blender/makesdna/DNA_space_types.h b/source/blender/makesdna/DNA_space_types.h
index e5308cccdfe..ce038ee4a95 100644
--- a/source/blender/makesdna/DNA_space_types.h
+++ b/source/blender/makesdna/DNA_space_types.h
@@ -161,6 +161,9 @@ typedef struct FileSelectParams {
char dir[240]; /* directory */
char file[80]; /* file */
char renamefile[80];
+ char renameedit[80]; /* annoying but the first is only used for initialization */
+
+ char filter_glob[64]; /* list of filetypes to filter */
short type; /* XXXXX for now store type here, should be moved to the operator */
short flag; /* settings for filter, hiding dots files,... */
@@ -303,7 +306,8 @@ typedef struct SpaceText {
int showlinenrs;
int tabnumber;
- int showsyntax;
+ short showsyntax;
+ short line_hlight;
short overwrite;
short live_edit; /* run python while editing, evil */
float pix_per_line;
@@ -723,6 +727,7 @@ enum FileSortTypeE {
#define FOLDERFILE (1<<11) /* represents folders for filtering */
#define BTXFILE (1<<12)
#define COLLADAFILE (1<<13)
+#define OPERATORFILE (1<<14) /* from filter_glob operator property */
/* SpaceImage->dt_uv */
#define SI_UVDT_OUTLINE 0
diff --git a/source/blender/makesdna/DNA_texture_types.h b/source/blender/makesdna/DNA_texture_types.h
index e7a5a6e5f56..e9e058cbbd6 100644
--- a/source/blender/makesdna/DNA_texture_types.h
+++ b/source/blender/makesdna/DNA_texture_types.h
@@ -32,7 +32,7 @@
#define DNA_TEXTURE_TYPES_H
#include "DNA_ID.h"
-#include "DNA_image_types.h"
+#include "DNA_image_types.h" /* ImageUser */
struct AnimData;
struct Ipo;
diff --git a/source/blender/makesdna/DNA_userdef_types.h b/source/blender/makesdna/DNA_userdef_types.h
index ff27d40ff9b..52e82eb743d 100644
--- a/source/blender/makesdna/DNA_userdef_types.h
+++ b/source/blender/makesdna/DNA_userdef_types.h
@@ -33,7 +33,7 @@
#define DNA_USERDEF_TYPES_H
#include "DNA_listBase.h"
-#include "DNA_texture_types.h"
+#include "DNA_texture_types.h" /* ColorBand */
/* themes; defines in BIF_resource.h */
struct ColorBand;
@@ -364,7 +364,7 @@ typedef struct UserDef {
short scrcastfps; /* frame rate for screencast to be played back */
short scrcastwait; /* milliseconds between screencast snapshots */
- short propwidth, pad[3]; /* Value for Dual/Single Column UI */
+ short pad8, pad[3]; /* Value for Dual/Single Column UI */
char versemaster[160];
char verseuser[160];
@@ -377,6 +377,8 @@ typedef struct UserDef {
float sculpt_paint_overlay_col[3];
int pad3;
+
+ char author[80]; /* author name for file formats supporting it */
} UserDef;
extern UserDef U; /* from blenkernel blender.c */
diff --git a/source/blender/makesdna/DNA_vfont_types.h b/source/blender/makesdna/DNA_vfont_types.h
index 8a96d8574c2..0ea60c732cf 100644
--- a/source/blender/makesdna/DNA_vfont_types.h
+++ b/source/blender/makesdna/DNA_vfont_types.h
@@ -46,7 +46,7 @@ typedef struct VFont {
} VFont;
/* *************** FONT ****************** */
-
+#define FO_EDIT 0
#define FO_CURS 1
#define FO_CURSUP 2
#define FO_CURSDOWN 3
diff --git a/source/blender/makesdna/DNA_view3d_types.h b/source/blender/makesdna/DNA_view3d_types.h
index c5516a3bff5..f692c80f81f 100644
--- a/source/blender/makesdna/DNA_view3d_types.h
+++ b/source/blender/makesdna/DNA_view3d_types.h
@@ -185,7 +185,9 @@ typedef struct View3D {
unsigned int customdata_mask;
/* afterdraw, for xray & transparent */
- struct ListBase afterdraw;
+ struct ListBase afterdraw_transp;
+ struct ListBase afterdraw_xray;
+ struct ListBase afterdraw_xraytransp;
/* drawflags, denoting state */
short zbuf, transp, xray;
@@ -297,6 +299,9 @@ typedef struct View3D {
/* may want to use 1 for select ?*/
#define V3D_BGPIC_EXPANDED 2
+#define RV3D_CAMZOOM_MIN -30
+#define RV3D_CAMZOOM_MAX 600
+
#endif
diff --git a/source/blender/makesdna/Makefile b/source/blender/makesdna/Makefile
index 82009d2b80a..f83a6288e8d 100644
--- a/source/blender/makesdna/Makefile
+++ b/source/blender/makesdna/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
# All rights reserved.
diff --git a/source/blender/makesdna/intern/CMakeLists.txt b/source/blender/makesdna/intern/CMakeLists.txt
index 0eb42373d6d..d42289e17c4 100644
--- a/source/blender/makesdna/intern/CMakeLists.txt
+++ b/source/blender/makesdna/intern/CMakeLists.txt
@@ -28,7 +28,15 @@ INCLUDE_DIRECTORIES(../../../../intern/guardedalloc ..)
FILE(GLOB INC_FILES ../*.h)
# Build makesdna executable
-SET(SRC makesdna.c ../../../../intern/guardedalloc/intern/mallocn.c ../../../../intern/guardedalloc/intern/mmap_win.c)
+SET(SRC
+ makesdna.c
+ ../../../../intern/guardedalloc/intern/mallocn.c
+)
+
+IF(WIN32)
+ LIST(APPEND SRC ../../../../intern/guardedalloc/intern/mmap_win.c)
+ENDIF(WIN32)
+
ADD_EXECUTABLE(makesdna ${SRC} ${INC_FILES})
# Output dna.c
diff --git a/source/blender/makesdna/intern/Makefile b/source/blender/makesdna/intern/Makefile
index 01c4d87a4fc..55b0c42acda 100644
--- a/source/blender/makesdna/intern/Makefile
+++ b/source/blender/makesdna/intern/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
# All rights reserved.
diff --git a/source/blender/makesdna/intern/SConscript b/source/blender/makesdna/intern/SConscript
index 38819ccdf96..d4836631104 100644
--- a/source/blender/makesdna/intern/SConscript
+++ b/source/blender/makesdna/intern/SConscript
@@ -3,7 +3,7 @@ import sys
import os
def normpath(path):
- return os.path.abspath(os.path.normpath(path))
+ return os.path.abspath(os.path.normpath(path))
Import ('env')
cflags = ''
@@ -18,21 +18,21 @@ dna = env.Clone()
makesdna_tool.Append(CCFLAGS = '-DBASE_HEADER="\\"source/blender/makesdna/\\"" ')
makesdna_tool.Append (CPPPATH = ['#/intern/guardedalloc',
- '../../makesdna'])
+ '../../makesdna'])
if env['OURPLATFORM'] == 'linuxcross':
- USE_WINE = True # when cross compiling on linux 64bit this is useful
+ USE_WINE = True # when cross compiling on linux 64bit this is useful
else:
- USE_WINE = False
+ USE_WINE = False
if not USE_WINE:
- if env['OURPLATFORM'] == 'linuxcross':
- makesdna_tool.Replace(CC='gcc')
- makesdna_tool.Replace(AR='ar')
- makesdna_tool.Replace(LINK='gcc')
+ if env['OURPLATFORM'] == 'linuxcross':
+ makesdna_tool.Replace(CC='gcc')
+ makesdna_tool.Replace(AR='ar')
+ makesdna_tool.Replace(LINK='gcc')
if sys.platform != 'cygwin':
- makesdna_tool.Append (CCFLAGS = cflags)
+ makesdna_tool.Append (CCFLAGS = cflags)
makesdna_tool.Append (CPPDEFINES = defines)
makesdna_tool.Append( CFLAGS = env['CFLAGS'])
makesdna_tool.Append( CCFLAGS = env['CCFLAGS'])
@@ -40,32 +40,32 @@ makesdna_tool.Append( LINKFLAGS = env['PLATFORM_LINKFLAGS'])
targetdir = normpath(root_build_dir+'/lib')
if not (root_build_dir[0]==os.sep or root_build_dir[1]==':'):
- targetdir = '#'+targetdir
+ targetdir = '#'+targetdir
makesdna_tool.Append (LIBPATH = targetdir)
if env['BF_PROFILE']:
- makesdna_tool.Append (LINKFLAGS = env['BF_PROFILE_LINKFLAGS'])
+ makesdna_tool.Append (LINKFLAGS = env['BF_PROFILE_LINKFLAGS'])
targetdir = normpath(root_build_dir + '/makesdna')
if not (root_build_dir[0]==os.sep or root_build_dir[1]==':'):
- targetdir = '#' + targetdir
+ targetdir = '#' + targetdir
-makesdna = makesdna_tool.Program (target = targetdir, source = source_files, LIBS=['bf_guardedalloc', 'bf_blenlib'])
+makesdna = makesdna_tool.Program (target = targetdir, source = source_files, LIBS=['bf_intern_guardedalloc', 'bf_blenlib'])
dna_dict = dna.Dictionary()
dna.Depends ('dna.c', makesdna)
dna.Depends ('dna.c', header_files)
if env['OURPLATFORM'] != 'linuxcross':
- if env['OURPLATFORM'] in ('win32-vc', 'win64-vc', 'win32-mingw'):
- dna.Command ('dna.c', '', "\"" + root_build_dir+os.sep+"makesdna\" $TARGET")
- else:
- dna.Command ('dna.c', '', root_build_dir+os.sep+"makesdna $TARGET")
+ if env['OURPLATFORM'] in ('win32-vc', 'win64-vc', 'win32-mingw'):
+ dna.Command ('dna.c', '', "\"" + root_build_dir+os.sep+"makesdna\" $TARGET")
+ else:
+ dna.Command ('dna.c', '', "\"" + root_build_dir+os.sep+"makesdna\" $TARGET")
else:
- if USE_WINE:
- dna.Command ('dna.c', '', 'wine ' + root_build_dir+os.sep+"makesdna $TARGET")
- else:
- dna.Command ('dna.c', '', root_build_dir+os.sep+"makesdna.exe $TARGET")
+ if USE_WINE:
+ dna.Command ('dna.c', '', 'wine ' + root_build_dir+os.sep+"makesdna $TARGET")
+ else:
+ dna.Command ('dna.c', '', root_build_dir+os.sep+"makesdna.exe $TARGET")
obj = ['intern/dna.c', 'intern/dna_genfile.c']
Return ('obj')
diff --git a/source/blender/makesdna/intern/makesdna.c b/source/blender/makesdna/intern/makesdna.c
index 4133afffeed..577b18556c8 100644
--- a/source/blender/makesdna/intern/makesdna.c
+++ b/source/blender/makesdna/intern/makesdna.c
@@ -421,7 +421,11 @@ int preprocess_include(char *maindata, int len)
int a, newlen, comment = 0;
char *cp, *temp, *md;
- temp= MEM_mallocN(len, "preprocess_include");
+ /* note: len + 1, last character is a dummy to prevent
+ * comparisons using uninitialized memory */
+ temp= MEM_mallocN(len + 1, "preprocess_include");
+ temp[len]= ' ';
+
memcpy(temp, maindata, len);
// remove all c++ comments
@@ -1054,6 +1058,7 @@ int make_structDNA(char *baseDirectory, FILE *file)
MEM_freeN(names);
MEM_freeN(types);
MEM_freeN(typelens);
+ MEM_freeN(alphalens);
MEM_freeN(structs);
if (debugSDNA > -1) printf("done.\n");
diff --git a/source/blender/makesrna/Makefile b/source/blender/makesrna/Makefile
index bed3e85550d..2b025949d77 100644
--- a/source/blender/makesrna/Makefile
+++ b/source/blender/makesrna/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# Contributor(s): Blender Foundation (2008).
#
diff --git a/source/blender/makesrna/RNA_access.h b/source/blender/makesrna/RNA_access.h
index cbd2d7ec5b3..e454dda0ae6 100644
--- a/source/blender/makesrna/RNA_access.h
+++ b/source/blender/makesrna/RNA_access.h
@@ -276,7 +276,7 @@ extern StructRNA RNA_LimitScaleConstraint;
extern StructRNA RNA_LockedTrackConstraint;
extern StructRNA RNA_Macro;
extern StructRNA RNA_MagicTexture;
-extern StructRNA RNA_Main;
+extern StructRNA RNA_BlendData;
extern StructRNA RNA_MarbleTexture;
extern StructRNA RNA_MaskModifier;
extern StructRNA RNA_Material;
@@ -607,8 +607,9 @@ void RNA_struct_py_type_set(StructRNA *srna, void *py_type);
void *RNA_struct_blender_type_get(StructRNA *srna);
void RNA_struct_blender_type_set(StructRNA *srna, void *blender_type);
-struct IDProperty *RNA_struct_idproperties(PointerRNA *ptr, int create);
-int RNA_struct_idproperties_check(StructRNA *srna);
+struct IDProperty *RNA_struct_idprops(PointerRNA *ptr, int create);
+int RNA_struct_idprops_check(StructRNA *srna);
+int RNA_struct_idprops_register_check(StructRNA *type);
PropertyRNA *RNA_struct_find_property(PointerRNA *ptr, const char *identifier);
diff --git a/source/blender/makesrna/RNA_define.h b/source/blender/makesrna/RNA_define.h
index 9aadd8900e5..16ca718e335 100644
--- a/source/blender/makesrna/RNA_define.h
+++ b/source/blender/makesrna/RNA_define.h
@@ -57,7 +57,7 @@ void RNA_def_struct_nested(BlenderRNA *brna, StructRNA *srna, const char *struct
void RNA_def_struct_flag(StructRNA *srna, int flag);
void RNA_def_struct_clear_flag(StructRNA *srna, int flag);
void RNA_def_struct_refine_func(StructRNA *srna, const char *refine);
-void RNA_def_struct_idproperties_func(StructRNA *srna, const char *refine);
+void RNA_def_struct_idprops_func(StructRNA *srna, const char *refine);
void RNA_def_struct_register_funcs(StructRNA *srna, const char *reg, const char *unreg);
void RNA_def_struct_path_func(StructRNA *srna, const char *path);
void RNA_def_struct_identifier(StructRNA *srna, const char *identifier);
@@ -90,6 +90,7 @@ void RNA_def_enum_funcs(PropertyRNA *prop, EnumPropertyItemFunc itemfunc);
PropertyRNA *RNA_def_float(StructOrFunctionRNA *cont, const char *identifier, float default_value, float hardmin, float hardmax, const char *ui_name, const char *ui_description, float softmin, float softmax);
PropertyRNA *RNA_def_float_vector(StructOrFunctionRNA *cont, const char *identifier, int len, const float *default_value, float hardmin, float hardmax, const char *ui_name, const char *ui_description, float softmin, float softmax);
+PropertyRNA *RNA_def_float_vector_xyz(StructOrFunctionRNA *cont, const char *identifier, int len, const float *default_value, float hardmin, float hardmax, const char *ui_name, const char *ui_description, float softmin, float softmax);
PropertyRNA *RNA_def_float_color(StructOrFunctionRNA *cont, const char *identifier, int len, const float *default_value, float hardmin, float hardmax, const char *ui_name, const char *ui_description, float softmin, float softmax);
PropertyRNA *RNA_def_float_matrix(StructOrFunctionRNA *cont, const char *identifier, int rows, int columns, const float *default_value, float hardmin, float hardmax, const char *ui_name, const char *ui_description, float softmin, float softmax);
PropertyRNA *RNA_def_float_rotation(StructOrFunctionRNA *cont, const char *identifier, int len, const float *default_value,
@@ -191,7 +192,7 @@ void RNA_def_struct_duplicate_pointers(StructRNA *srna);
void RNA_def_struct_free_pointers(StructRNA *srna);
void RNA_def_func_duplicate_pointers(FunctionRNA *func);
void RNA_def_func_free_pointers(FunctionRNA *func);
-void RNA_def_property_duplicate_pointers(PropertyRNA *prop);
+void RNA_def_property_duplicate_pointers(StructOrFunctionRNA *cont_, PropertyRNA *prop);
void RNA_def_property_free_pointers(PropertyRNA *prop);
int RNA_def_property_free_identifier(StructOrFunctionRNA *cont_, const char *identifier);
diff --git a/source/blender/makesrna/RNA_enum_types.h b/source/blender/makesrna/RNA_enum_types.h
index 65870d54c11..38ba44f2c2b 100644
--- a/source/blender/makesrna/RNA_enum_types.h
+++ b/source/blender/makesrna/RNA_enum_types.h
@@ -90,7 +90,7 @@ extern EnumPropertyItem wm_report_items[];
extern EnumPropertyItem property_type_items[];
extern EnumPropertyItem property_unit_items[];
-extern EnumPropertyItem viewport_shading_items[];
+extern EnumPropertyItem viewport_shade_items[];
struct bContext;
struct PointerRNA;
diff --git a/source/blender/makesrna/RNA_types.h b/source/blender/makesrna/RNA_types.h
index 88058769f4b..5caae56010f 100644
--- a/source/blender/makesrna/RNA_types.h
+++ b/source/blender/makesrna/RNA_types.h
@@ -22,6 +22,8 @@
* ***** END GPL LICENSE BLOCK *****
*/
+#include "BLO_sys_types.h"
+
#ifndef RNA_TYPES
#define RNA_TYPES
@@ -265,6 +267,12 @@ typedef struct ParameterIterator {
int valid;
} ParameterIterator;
+/* mainly to avoid confusing casts */
+typedef struct ParameterDynAlloc {
+ intptr_t array_tot; /* important, this breaks when set to an int */
+ void *array;
+} ParameterDynAlloc;
+
/* Function */
typedef enum FunctionFlag {
@@ -298,7 +306,8 @@ typedef enum StructFlag {
/* internal flags */
STRUCT_RUNTIME = 4,
STRUCT_GENERATED = 8,
- STRUCT_FREE_POINTERS = 16
+ STRUCT_FREE_POINTERS = 16,
+ STRUCT_NO_IDPROPERTIES = 32, /* Menu's and Panels don't need properties */
} StructFlag;
typedef int (*StructValidateFunc)(struct PointerRNA *ptr, void *data, int *have_function);
diff --git a/source/blender/makesrna/SConscript b/source/blender/makesrna/SConscript
index 7ac76c4d107..674aeb264c3 100644
--- a/source/blender/makesrna/SConscript
+++ b/source/blender/makesrna/SConscript
@@ -13,52 +13,52 @@ incs += ' ../render/extern/include'
defs = []
if env['WITH_BF_OPENEXR']:
- defs.append('WITH_OPENEXR')
+ defs.append('WITH_OPENEXR')
if env['WITH_BF_TIFF']:
- defs.append('WITH_TIFF')
+ defs.append('WITH_TIFF')
if env['WITH_BF_OPENJPEG']:
- defs.append('WITH_OPENJPEG')
+ defs.append('WITH_OPENJPEG')
if env['WITH_BF_DDS']:
- defs.append('WITH_DDS')
+ defs.append('WITH_DDS')
if env['WITH_BF_CINEON']:
- defs.append('WITH_CINEON')
+ defs.append('WITH_CINEON')
if env['WITH_BF_HDR']:
- defs.append('WITH_HDR')
+ defs.append('WITH_HDR')
if env['WITH_BF_FFMPEG']:
- defs.append('WITH_FFMPEG')
- incs += ' ' + env['BF_FFMPEG_INC']
+ defs.append('WITH_FFMPEG')
+ incs += ' ' + env['BF_FFMPEG_INC']
if env['WITH_BF_OGG']:
- defs.append('WITH_OGG')
+ defs.append('WITH_OGG')
if env['WITH_BF_QUICKTIME']:
- defs.append('WITH_QUICKTIME')
- incs += ' ../quicktime'
+ defs.append('WITH_QUICKTIME')
+ incs += ' ../quicktime'
if env['WITH_BF_LCMS']:
- defs.append('WITH_LCMS')
- incs += ' ' + env['BF_LCMS_INC']
-
+ defs.append('WITH_LCMS')
+ incs += ' ' + env['BF_LCMS_INC']
+
if env['WITH_BF_GAMEENGINE']:
- defs.append('GAMEBLENDER=1')
+ defs.append('GAMEBLENDER=1')
if env['BF_UNIT_TEST']:
- defs.append('UNIT_TEST')
+ defs.append('UNIT_TEST')
if not env['WITH_BF_PYTHON']:
- defs.append('DISABLE_PYTHON')
+ defs.append('DISABLE_PYTHON')
if env['OURPLATFORM'] == 'linux2':
- cflags='-pthread'
- incs += ' ../../../extern/binreloc/include'
+ cflags='-pthread'
+ incs += ' ../../../extern/binreloc/include'
if env['OURPLATFORM'] in ('win32-vc', 'win32-mingw', 'linuxcross', 'win64-vc'):
- incs += ' ' + env['BF_PTHREADS_INC']
+ incs += ' ' + env['BF_PTHREADS_INC']
env.BlenderLib ( 'bf_rna', objs, Split(incs), defines=defs, libtype=['core','player'], priority = [165,20] )
diff --git a/source/blender/makesrna/intern/CMakeLists.txt b/source/blender/makesrna/intern/CMakeLists.txt
index 9dbb2fd00aa..4f9032ffc95 100644
--- a/source/blender/makesrna/intern/CMakeLists.txt
+++ b/source/blender/makesrna/intern/CMakeLists.txt
@@ -63,7 +63,7 @@ IF(NOT WITH_PYTHON)
ENDIF(NOT WITH_PYTHON)
IF(WIN32)
- SET(INC ${INC} ${PTHREADS_INC})
+ LIST(APPEND INC ${PTHREADS_INC})
ENDIF(WIN32)
IF(WITH_GAMEENGINE)
@@ -95,17 +95,17 @@ IF(WITH_IMAGE_HDR)
ENDIF(WITH_IMAGE_HDR)
IF(WITH_QUICKTIME)
- SET(INC ${INC} ../../quicktime)
+ LIST(APPEND INC ../../quicktime)
ADD_DEFINITIONS(-DWITH_QUICKTIME)
ENDIF(WITH_QUICKTIME)
IF(WITH_FFMPEG)
- SET(INC ${INC} ${FFMPEG_INC})
+ LIST(APPEND INC ${FFMPEG_INC})
ADD_DEFINITIONS(-DWITH_FFMPEG)
ENDIF(WITH_FFMPEG)
IF(WITH_LCMS)
- SET(INC ${INC} ${LCMS_INCLUDE_DIR})
+ LIST(APPEND INC ${LCMS_INCLUDE_DIR})
ADD_DEFINITIONS(-DWITH_LCMS)
ENDIF(WITH_LCMS)
diff --git a/source/blender/makesrna/intern/Makefile b/source/blender/makesrna/intern/Makefile
index 4262a3538c2..69d5581184d 100644
--- a/source/blender/makesrna/intern/Makefile
+++ b/source/blender/makesrna/intern/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# Contributor(s): Blender Foundation (2008).
#
@@ -45,6 +45,8 @@ endif
CFLAGS += $(LEVEL_1_C_WARNINGS)
+CPPFLAGS += -I$(NAN_PYTHON)/include/python$(NAN_PYTHON_VERSION)
+
CPPFLAGS += -I$(NAN_GUARDEDALLOC)/include
CPPFLAGS += -I$(NAN_MEMUTIL)/include
CPPFLAGS += -I../../../../intern/audaspace/intern
diff --git a/source/blender/makesrna/intern/SConscript b/source/blender/makesrna/intern/SConscript
index 3bebffaddec..ecee3f94796 100644
--- a/source/blender/makesrna/intern/SConscript
+++ b/source/blender/makesrna/intern/SConscript
@@ -3,7 +3,7 @@ import sys
import os
def normpath(path):
- return os.path.abspath(os.path.normpath(path))
+ return os.path.abspath(os.path.normpath(path))
Import ('env')
cflags = ['-Wall']
@@ -33,43 +33,43 @@ incs = '#/intern/guardedalloc ../../blenlib ../../blenkernel'
incs += ' ../../imbuf ../../makesdna ../../makesrna ../../ikplugin'
incs += ' ../../windowmanager ../../editors/include'
incs += ' ../../render/extern/include'
-incs += ' #/intern/audaspace/intern'
+incs += ' #/intern/audaspace/intern '
if env['WITH_BF_OPENEXR']:
- defs.append('WITH_OPENEXR')
+ defs.append('WITH_OPENEXR')
if env['WITH_BF_TIFF']:
defs.append('WITH_TIFF')
if env['WITH_BF_OPENJPEG']:
- defs.append('WITH_OPENJPEG')
+ defs.append('WITH_OPENJPEG')
if env['WITH_BF_DDS']:
- defs.append('WITH_DDS')
+ defs.append('WITH_DDS')
if env['WITH_BF_CINEON']:
- defs.append('WITH_CINEON')
+ defs.append('WITH_CINEON')
if env['WITH_BF_HDR']:
- defs.append('WITH_HDR')
+ defs.append('WITH_HDR')
if env['WITH_BF_FFMPEG']:
- defs.append('WITH_FFMPEG')
- incs += ' ' + env['BF_FFMPEG_INC']
+ defs.append('WITH_FFMPEG')
+ incs += ' ' + env['BF_FFMPEG_INC']
if env['WITH_BF_OGG']:
- defs.append('WITH_OGG')
+ defs.append('WITH_OGG')
if env['WITH_BF_QUICKTIME']:
- defs.append('WITH_QUICKTIME')
- incs += ' ../../quicktime'
+ defs.append('WITH_QUICKTIME')
+ incs += ' ../../quicktime'
if env['WITH_BF_LCMS']:
- defs.append('WITH_LCMS')
+ defs.append('WITH_LCMS')
if env['WITH_BF_GAMEENGINE']:
- defs.append('GAMEBLENDER=1')
-
+ defs.append('GAMEBLENDER=1')
+
if env['WITH_BF_FFTW3']:
defs.append('FFTW3=1')
@@ -83,40 +83,40 @@ if env['WITH_BF_JACK']:
defs.append('WITH_JACK')
if env['BF_UNIT_TEST']:
- defs.append('UNIT_TEST')
+ defs.append('UNIT_TEST')
if not env['WITH_BF_PYTHON']:
- defs.append('DISABLE_PYTHON')
+ defs.append('DISABLE_PYTHON')
if env['OURPLATFORM'] == 'linux2':
- cflags='-pthread'
- incs += ' ../../../extern/binreloc/include'
+ cflags='-pthread'
+ incs += ' ../../../extern/binreloc/include'
if env['OURPLATFORM'] in ('win32-vc', 'win32-mingw', 'linuxcross', 'win64-vc'):
- incs += ' ' + env['BF_PTHREADS_INC']
+ incs += ' ' + env['BF_PTHREADS_INC']
makesrna_tool.Append(CPPDEFINES=defs)
makesrna_tool.Append (CPPPATH = Split(incs))
if env['OURPLATFORM'] == 'linuxcross':
- USE_WINE = True # when cross compiling on linux 64bit this is useful
+ USE_WINE = True # when cross compiling on linux 64bit this is useful
else:
- USE_WINE = False
+ USE_WINE = False
if not USE_WINE:
- if env['OURPLATFORM'] == 'linuxcross':
- makesdna_tool.Replace(CC='gcc')
- makesdna_tool.Replace(AR='ar')
- makesdna_tool.Replace(LINK='gcc')
+ if env['OURPLATFORM'] == 'linuxcross':
+ makesdna_tool.Replace(CC='gcc')
+ makesdna_tool.Replace(AR='ar')
+ makesdna_tool.Replace(LINK='gcc')
if sys.platform != 'cygwin':
- makesrna_tool.Append (CCFLAGS = cflags)
+ makesrna_tool.Append (CCFLAGS = cflags)
makesrna_tool.Append (CPPDEFINES = defines)
libdir = root_build_dir+'/lib'
if not (root_build_dir[0]==os.sep or root_build_dir[1]==':'):
- libdir = '#' + libdir
+ libdir = '#' + libdir
makesrna_tool.Append (LIBPATH = libdir)
@@ -125,46 +125,46 @@ makesrna_tool.Append( CCFLAGS = env['CCFLAGS'])
makesrna_tool.Append( LINKFLAGS = env['PLATFORM_LINKFLAGS'])
if env['BF_PROFILE']:
- makesrna_tool.Append (LINKFLAGS = env['BF_PROFILE_FLAGS'])
+ makesrna_tool.Append (LINKFLAGS = env['BF_PROFILE_FLAGS'])
if env['BF_DEBUG']:
- makesrna_tool.Append(CFLAGS = env['BF_DEBUG_CFLAGS'])
- makesrna_tool.Append(CCFLAGS = env['BF_DEBUG_CCFLAGS'])
- if env['OURPLATFORM'] in ('win32-vc','win64-vc'):
- makesrna_tool.Append(LINKFLAGS = ['/DEBUG','/PDB:makesrna.pdb'])
+ makesrna_tool.Append(CFLAGS = env['BF_DEBUG_CFLAGS'])
+ makesrna_tool.Append(CCFLAGS = env['BF_DEBUG_CCFLAGS'])
+ if env['OURPLATFORM'] in ('win32-vc','win64-vc'):
+ makesrna_tool.Append(LINKFLAGS = ['/DEBUG','/PDB:makesrna.pdb'])
targetpath = root_build_dir+'/makesrna'
if not (root_build_dir[0]==os.sep or root_build_dir[1]==':'):
- targetpath = '#' + targetpath
+ targetpath = '#' + targetpath
if env['OURPLATFORM'] == 'linux2' and root_build_dir[0]==os.sep:
- makesrna = makesrna_tool.Program (target = targetpath, source = source_files, LIBS=['bf_guardedalloc', 'bf_dna', 'bf_blenlib'])
+ makesrna = makesrna_tool.Program (target = targetpath, source = source_files, LIBS=['bf_intern_guardedalloc', 'bf_dna', 'bf_blenlib'])
else:
- makesrna = makesrna_tool.Program (target = targetpath, source = source_files, LIBS=['bf_guardedalloc', 'bf_dna', 'bf_blenlib'])
+ makesrna = makesrna_tool.Program (target = targetpath, source = source_files, LIBS=['bf_intern_guardedalloc', 'bf_dna', 'bf_blenlib'])
rna_dict = rna.Dictionary()
rna.Depends (generated_files, makesrna)
# this seems bad, how to retrieve it from scons?
build_dir = root_build_dir + os.sep +'source' + os.sep + 'blender' + os.sep + 'makesrna' + os.sep + 'intern' + os.sep
-
+
if env['OURPLATFORM'] != 'linuxcross':
- if env['OURPLATFORM'] in ('win32-vc', 'win64-vc', 'win32-mingw'):
- rna.Command (generated_files, '', "\"" + root_build_dir+os.sep+"makesrna.exe\" \"" + build_dir )
- else:
- rna.Command (generated_files, '', root_build_dir+os.sep+"makesrna " + build_dir)
+ if env['OURPLATFORM'] in ('win32-vc', 'win64-vc', 'win32-mingw'):
+ rna.Command (generated_files, '', "\"" + root_build_dir+os.sep+"makesrna.exe\" \"" + build_dir )
+ else:
+ rna.Command (generated_files, '', "\"" + root_build_dir+os.sep+"makesrna\" \"" + build_dir + '"' )
else:
- rna.Command (generated_files, '', root_build_dir+os.sep+"makesrna.exe " + build_dir)
-
- if USE_WINE:
- rna.Command (generated_files, '', 'wine ' + root_build_dir+os.sep+"makesrna.exe " + build_dir)
- else:
- rna.Command (generated_files, '', root_build_dir+os.sep+"makesrna.exe " + build_dir)
+ rna.Command (generated_files, '', root_build_dir+os.sep+"makesrna.exe " + build_dir)
+
+ if USE_WINE:
+ rna.Command (generated_files, '', 'wine ' + root_build_dir+os.sep+"makesrna.exe " + build_dir)
+ else:
+ rna.Command (generated_files, '', root_build_dir+os.sep+"makesrna.exe " + build_dir)
obj = ['intern/rna_access.c']
for generated_file in generated_files:
- obj += ['intern/' + generated_file]
+ obj += ['intern/' + generated_file]
Return ('obj')
diff --git a/source/blender/makesrna/intern/makesrna.c b/source/blender/makesrna/intern/makesrna.c
index af0faf5a165..38a5b2587ff 100644
--- a/source/blender/makesrna/intern/makesrna.c
+++ b/source/blender/makesrna/intern/makesrna.c
@@ -49,6 +49,7 @@
static int replace_if_different(char *tmpfile)
{
+ // return 0; // use for testing had edited rna
#define REN_IF_DIFF \
remove(orgfile); \
@@ -394,7 +395,7 @@ static char *rna_def_property_get_func(FILE *f, StructRNA *srna, PropertyRNA *pr
{
char *func;
- if(prop->flag & PROP_IDPROPERTY)
+ if(prop->flag & PROP_IDPROPERTY && manualfunc==NULL)
return NULL;
if(!manualfunc) {
@@ -575,7 +576,7 @@ static char *rna_def_property_set_func(FILE *f, StructRNA *srna, PropertyRNA *pr
if(!(prop->flag & PROP_EDITABLE))
return NULL;
- if(prop->flag & PROP_IDPROPERTY)
+ if(prop->flag & PROP_IDPROPERTY && manualfunc==NULL)
return NULL;
if(!manualfunc) {
@@ -743,7 +744,7 @@ static char *rna_def_property_length_func(FILE *f, StructRNA *srna, PropertyRNA
{
char *func= NULL;
- if(prop->flag & PROP_IDPROPERTY)
+ if(prop->flag & PROP_IDPROPERTY && manualfunc==NULL)
return NULL;
if(prop->type == PROP_STRING) {
@@ -801,7 +802,7 @@ static char *rna_def_property_begin_func(FILE *f, StructRNA *srna, PropertyRNA *
{
char *func, *getfunc;
- if(prop->flag & PROP_IDPROPERTY)
+ if(prop->flag & PROP_IDPROPERTY && manualfunc==NULL)
return NULL;
if(!manualfunc) {
@@ -859,7 +860,7 @@ static char *rna_def_property_lookup_int_func(FILE *f, StructRNA *srna, Property
{
char *func;
- if(prop->flag & PROP_IDPROPERTY)
+ if(prop->flag & PROP_IDPROPERTY && manualfunc==NULL)
return NULL;
if(!manualfunc) {
@@ -951,7 +952,7 @@ static char *rna_def_property_next_func(FILE *f, StructRNA *srna, PropertyRNA *p
{
char *func, *getfunc;
- if(prop->flag & PROP_IDPROPERTY)
+ if(prop->flag & PROP_IDPROPERTY && manualfunc==NULL)
return NULL;
if(!manualfunc)
@@ -977,7 +978,7 @@ static char *rna_def_property_end_func(FILE *f, StructRNA *srna, PropertyRNA *pr
{
char *func;
- if(prop->flag & PROP_IDPROPERTY)
+ if(prop->flag & PROP_IDPROPERTY && manualfunc==NULL)
return NULL;
func= rna_alloc_function_name(srna->identifier, prop->identifier, "end");
@@ -1412,10 +1413,12 @@ static void rna_def_function_funcs(FILE *f, StructDefRNA *dsrna, FunctionDefRNA
fprintf(f, "\n{\n");
/* variable definitions */
- if((func->flag & FUNC_NO_SELF)==0) {
- if(func->flag & FUNC_USE_SELF_ID)
- fprintf(f, "\tstruct ID *_selfid;\n");
+
+ if(func->flag & FUNC_USE_SELF_ID) {
+ fprintf(f, "\tstruct ID *_selfid;\n");
+ }
+ if((func->flag & FUNC_NO_SELF)==0) {
if(dsrna->dnaname) fprintf(f, "\tstruct %s *_self;\n", dsrna->dnaname);
else fprintf(f, "\tstruct %s *_self;\n", srna->identifier);
}
@@ -1441,11 +1444,11 @@ static void rna_def_function_funcs(FILE *f, StructDefRNA *dsrna, FunctionDefRNA
else
ptrstr= pout ? "*" : "";
- fprintf(f, "\t%s%s %s%s;\n", rna_type_struct(dparm->prop), rna_parameter_type_name(dparm->prop), ptrstr, dparm->prop->identifier);
-
/* for dynamic parameters we pass an additional int for the length of the parameter */
if (flag & PROP_DYNAMIC)
fprintf(f, "\tint %s%s_len;\n", pout ? "*" : "", dparm->prop->identifier);
+
+ fprintf(f, "\t%s%s %s%s;\n", rna_type_struct(dparm->prop), rna_parameter_type_name(dparm->prop), ptrstr, dparm->prop->identifier);
}
fprintf(f, "\tchar *_data");
@@ -1454,10 +1457,11 @@ static void rna_def_function_funcs(FILE *f, StructDefRNA *dsrna, FunctionDefRNA
fprintf(f, "\t\n");
/* assign self */
+ if(func->flag & FUNC_USE_SELF_ID) {
+ fprintf(f, "\t_selfid= (struct ID*)_ptr->id.data;\n");
+ }
+
if((func->flag & FUNC_NO_SELF)==0) {
- if(func->flag & FUNC_USE_SELF_ID)
- fprintf(f, "\t_selfid= (struct ID*)_ptr->id.data;\n");
-
if(dsrna->dnaname) fprintf(f, "\t_self= (struct %s *)_ptr->data;\n", dsrna->dnaname);
else fprintf(f, "\t_self= (struct %s *)_ptr->data;\n", srna->identifier);
}
@@ -1474,6 +1478,7 @@ static void rna_def_function_funcs(FILE *f, StructDefRNA *dsrna, FunctionDefRNA
if(dparm->prop==func->c_ret)
fprintf(f, "\t_retdata= _data;\n");
else {
+ char *data_str;
if (cptr || (flag & PROP_DYNAMIC)) {
ptrstr= "**";
valstr= "*";
@@ -1491,16 +1496,20 @@ static void rna_def_function_funcs(FILE *f, StructDefRNA *dsrna, FunctionDefRNA
valstr= "*";
}
+ /* this must be kept in sync with RNA_parameter_length_get_data, we could just call the function directly, but this is faster */
+ if (flag & PROP_DYNAMIC) {
+ fprintf(f, "\t%s_len= %s((int *)_data);\n", dparm->prop->identifier, pout ? "" : "*");
+ data_str= "(&(((char *)_data)[sizeof(void *)]))";
+ }
+ else {
+ data_str= "_data";
+ }
fprintf(f, "\t%s= ", dparm->prop->identifier);
if (!pout)
fprintf(f, "%s", valstr);
- fprintf(f, "((%s%s%s)_data);\n", rna_type_struct(dparm->prop), rna_parameter_type_name(dparm->prop), ptrstr);
-
- /* this must be kept in sync with RNA_parameter_length_get_data, we could just call the function directly, but this is faster */
- if (flag & PROP_DYNAMIC)
- fprintf(f, "\t%s_len= %s((int *)(_data+%d));\n", dparm->prop->identifier, pout ? "" : "*", rna_parameter_size(dparm->prop));
+ fprintf(f, "((%s%s%s)%s);\n", rna_type_struct(dparm->prop), rna_parameter_type_name(dparm->prop), ptrstr, data_str);
}
if(dparm->next)
@@ -1515,10 +1524,13 @@ static void rna_def_function_funcs(FILE *f, StructDefRNA *dsrna, FunctionDefRNA
first= 1;
- if((func->flag & FUNC_NO_SELF)==0) {
- if(func->flag & FUNC_USE_SELF_ID)
- fprintf(f, "_selfid, ");
+ if(func->flag & FUNC_USE_SELF_ID) {
+ fprintf(f, "_selfid");
+ first= 0;
+ }
+ if((func->flag & FUNC_NO_SELF)==0) {
+ if(!first) fprintf(f, ", ");
fprintf(f, "_self");
first= 0;
}
@@ -1543,10 +1555,10 @@ static void rna_def_function_funcs(FILE *f, StructDefRNA *dsrna, FunctionDefRNA
if(!first) fprintf(f, ", ");
first= 0;
- fprintf(f, "%s", dparm->prop->identifier);
-
if (dparm->prop->flag & PROP_DYNAMIC)
- fprintf(f, ", %s_len", dparm->prop->identifier);
+ fprintf(f, "%s_len, %s", dparm->prop->identifier, dparm->prop->identifier);
+ else
+ fprintf(f, "%s", dparm->prop->identifier);
}
fprintf(f, ");\n");
@@ -1820,10 +1832,13 @@ static void rna_generate_static_parameter_prototypes(BlenderRNA *brna, StructRNA
first= 1;
/* self, context and reports parameters */
+ if(func->flag & FUNC_USE_SELF_ID) {
+ fprintf(f, "struct ID *_selfid");
+ first= 0;
+ }
+
if((func->flag & FUNC_NO_SELF)==0) {
- if(func->flag & FUNC_USE_SELF_ID)
- fprintf(f, "struct ID *_selfid, ");
-
+ if(!first) fprintf(f, ", ");
if(dsrna->dnaname) fprintf(f, "struct %s *_self", dsrna->dnaname);
else fprintf(f, "struct %s *_self", srna->identifier);
first= 0;
@@ -1863,13 +1878,14 @@ static void rna_generate_static_parameter_prototypes(BlenderRNA *brna, StructRNA
if(!first) fprintf(f, ", ");
first= 0;
+ if (flag & PROP_DYNAMIC)
+ fprintf(f, "int %s%s_len, ", pout ? "*" : "", dparm->prop->identifier);
+
if(!(flag & PROP_DYNAMIC) && dparm->prop->arraydimension)
fprintf(f, "%s%s %s[%d]", rna_type_struct(dparm->prop), rna_parameter_type_name(dparm->prop), dparm->prop->identifier, dparm->prop->totarraylength);
else
fprintf(f, "%s%s %s%s", rna_type_struct(dparm->prop), rna_parameter_type_name(dparm->prop), ptrstr, dparm->prop->identifier);
- if (flag & PROP_DYNAMIC)
- fprintf(f, ", int %s%s_len", pout ? "*" : "", dparm->prop->identifier);
}
fprintf(f, ");\n");
diff --git a/source/blender/makesrna/intern/rna_ID.c b/source/blender/makesrna/intern/rna_ID.c
index 009afec2ded..4321f8aa711 100644
--- a/source/blender/makesrna/intern/rna_ID.c
+++ b/source/blender/makesrna/intern/rna_ID.c
@@ -71,6 +71,7 @@ EnumPropertyItem id_type_items[] = {
#include "BKE_idprop.h"
#include "BKE_library.h"
#include "BKE_animsys.h"
+#include "BKE_material.h"
/* name functions that ignore the first two ID characters */
void rna_ID_name_get(PointerRNA *ptr, char *value)
@@ -176,7 +177,7 @@ StructRNA *rna_ID_refine(PointerRNA *ptr)
return ID_code_to_RNA_type(GS(id->name));
}
-IDProperty *rna_ID_idproperties(PointerRNA *ptr, int create)
+IDProperty *rna_ID_idprops(PointerRNA *ptr, int create)
{
return IDP_GetProperties(ptr->data, create);
}
@@ -195,7 +196,7 @@ void rna_ID_fake_user_set(PointerRNA *ptr, int value)
}
}
-IDProperty *rna_IDPropertyGroup_idproperties(PointerRNA *ptr, int create)
+IDProperty *rna_IDPropertyGroup_idprops(PointerRNA *ptr, int create)
{
return ptr->data;
}
@@ -251,6 +252,18 @@ void rna_ID_user_clear(ID *id)
id->flag &= ~LIB_FAKEUSER;
}
+static void rna_IDPArray_begin(CollectionPropertyIterator *iter, PointerRNA *ptr)
+{
+ IDProperty *prop= (IDProperty *)ptr->data;
+ rna_iterator_array_begin(iter, IDP_IDPArray(prop), sizeof(IDProperty), prop->len, 0, NULL);
+}
+
+static int rna_IDPArray_length(PointerRNA *ptr)
+{
+ IDProperty *prop= (IDProperty *)ptr->data;
+ return prop->len;
+}
+
#else
static void rna_def_ID_properties(BlenderRNA *brna)
@@ -301,6 +314,11 @@ static void rna_def_ID_properties(BlenderRNA *brna)
RNA_def_property_flag(prop, PROP_EXPORT|PROP_IDPROPERTY);
RNA_def_property_struct_type(prop, "IDPropertyGroup");
+ prop= RNA_def_property(srna, "idp_array", PROP_COLLECTION, PROP_NONE);
+ RNA_def_property_struct_type(prop, "IDPropertyGroup");
+ RNA_def_property_collection_funcs(prop, "rna_IDPArray_begin", "rna_iterator_array_next", "rna_iterator_array_end", "rna_iterator_array_get", "rna_IDPArray_length", 0, 0);
+ 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);
@@ -317,7 +335,7 @@ static void rna_def_ID_properties(BlenderRNA *brna)
* care of the properties here */
srna= RNA_def_struct(brna, "IDPropertyGroup", NULL);
RNA_def_struct_ui_text(srna, "ID Property Group", "Group of ID properties");
- RNA_def_struct_idproperties_func(srna, "rna_IDPropertyGroup_idproperties");
+ RNA_def_struct_idprops_func(srna, "rna_IDPropertyGroup_idprops");
RNA_def_struct_register_funcs(srna, "rna_IDPropertyGroup_register", "rna_IDPropertyGroup_unregister");
RNA_def_struct_refine_func(srna, "rna_IDPropertyGroup_refine");
@@ -331,6 +349,31 @@ static void rna_def_ID_properties(BlenderRNA *brna)
RNA_def_struct_name_property(srna, prop);
}
+
+static void rna_def_ID_materials(BlenderRNA *brna)
+{
+ StructRNA *srna;
+ FunctionRNA *func;
+ PropertyRNA *parm;
+
+ /* for mesh/mball/curve materials */
+ srna= RNA_def_struct(brna, "IDMaterials", NULL);
+ 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");
+ RNA_def_function_ui_description(func, "Add a new material to Mesh.");
+ 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");
+ RNA_def_function_ui_description(func, "Add a new material to Mesh.");
+ parm= RNA_def_int(func, "index", 0, 0, INT_MAX, "", "Frame number to set.", 0, INT_MAX);
+ RNA_def_property_flag(parm, PROP_REQUIRED);
+ parm= RNA_def_pointer(func, "material", "Material", "", "Material to add.");
+ RNA_def_function_return(func, parm);
+}
+
static void rna_def_ID(BlenderRNA *brna)
{
StructRNA *srna;
@@ -341,7 +384,7 @@ static void rna_def_ID(BlenderRNA *brna)
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_refine_func(srna, "rna_ID_refine");
- RNA_def_struct_idproperties_func(srna, "rna_ID_idproperties");
+ 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");
@@ -356,7 +399,7 @@ static void rna_def_ID(BlenderRNA *brna)
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
RNA_def_property_ui_text(prop, "Users", "Number of times this datablock is referenced");
- prop= RNA_def_property(srna, "fake_user", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_fake_user", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", LIB_FAKEUSER);
RNA_def_property_ui_text(prop, "Fake User", "Saves this datablock even if it has no users");
RNA_def_property_boolean_funcs(prop, NULL, "rna_ID_fake_user_set");
@@ -422,6 +465,7 @@ void RNA_def_ID(BlenderRNA *brna)
rna_def_ID(brna);
rna_def_ID_properties(brna);
+ rna_def_ID_materials(brna);
rna_def_library(brna);
}
diff --git a/source/blender/makesrna/intern/rna_access.c b/source/blender/makesrna/intern/rna_access.c
index b15f736ac76..6cb5858648a 100644
--- a/source/blender/makesrna/intern/rna_access.c
+++ b/source/blender/makesrna/intern/rna_access.c
@@ -23,6 +23,7 @@
*/
#include <stdlib.h>
+#include <stddef.h>
#include <string.h>
#include <ctype.h>
@@ -94,7 +95,7 @@ PointerRNA PointerRNA_NULL = {{0}, 0, 0};
void RNA_main_pointer_create(struct Main *main, PointerRNA *r_ptr)
{
r_ptr->id.data= NULL;
- r_ptr->type= &RNA_Main;
+ r_ptr->type= &RNA_BlendData;
r_ptr->data= main;
}
@@ -240,7 +241,7 @@ IDProperty *rna_idproperty_ui(PropertyRNA *prop)
return NULL;
}
-IDProperty *RNA_struct_idproperties(PointerRNA *ptr, int create)
+IDProperty *RNA_struct_idprops(PointerRNA *ptr, int create)
{
StructRNA *type= ptr->type;
@@ -250,22 +251,18 @@ IDProperty *RNA_struct_idproperties(PointerRNA *ptr, int create)
return NULL;
}
-int RNA_struct_idproperties_check(StructRNA *srna)
+int RNA_struct_idprops_check(StructRNA *srna)
{
return (srna && srna->idproperties) ? 1 : 0;
}
static IDProperty *rna_idproperty_find(PointerRNA *ptr, const char *name)
{
- IDProperty *group= RNA_struct_idproperties(ptr, 0);
- IDProperty *idprop;
+ IDProperty *group= RNA_struct_idprops(ptr, 0);
+
+ if(group)
+ return IDP_GetPropertyFromGroup(group, name);
- if(group) {
- for(idprop=group->data.group.first; idprop; idprop=idprop->next)
- if(strcmp(idprop->name, name) == 0)
- return idprop;
- }
-
return NULL;
}
@@ -367,7 +364,8 @@ static PropertyRNA *typemap[IDP_NUMTYPES] =
(PropertyRNA*)&rna_IDProperty_float,
NULL, NULL, NULL,
(PropertyRNA*)&rna_IDProperty_group, NULL,
- (PropertyRNA*)&rna_IDProperty_double};
+ (PropertyRNA*)&rna_IDProperty_double,
+ (PropertyRNA*)&rna_IDProperty_idp_array};
static PropertyRNA *arraytypemap[IDP_NUMTYPES] =
{NULL, (PropertyRNA*)&rna_IDProperty_int_array,
@@ -390,7 +388,7 @@ IDProperty *rna_idproperty_check(PropertyRNA **prop, PointerRNA *ptr)
IDProperty *idprop= rna_idproperty_find(ptr, (*prop)->identifier);
if(idprop && !rna_idproperty_verify_valid(ptr, *prop, idprop)) {
- IDProperty *group= RNA_struct_idproperties(ptr, 0);
+ IDProperty *group= RNA_struct_idprops(ptr, 0);
IDP_RemFromGroup(group, idprop);
IDP_FreeProperty(idprop);
@@ -513,6 +511,11 @@ int RNA_struct_is_ID(StructRNA *type)
return (type->flag & STRUCT_ID) != 0;
}
+int RNA_struct_idprops_register_check(StructRNA *type)
+{
+ return (type->flag & STRUCT_NO_IDPROPERTIES) == 0;
+}
+
int RNA_struct_is_a(StructRNA *type, StructRNA *srna)
{
StructRNA *base;
@@ -530,7 +533,7 @@ 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]=='[' && ELEM(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 */
@@ -577,9 +580,9 @@ FunctionRNA *RNA_struct_find_function(PointerRNA *ptr, const char *identifier)
FunctionRNA *func;
StructRNA *type;
for(type= ptr->type; type; type= type->base) {
- for(func= type->functions.first; func; func= func->cont.next) {
- if(strcmp(func->identifier, identifier)==0)
- return func;
+ func= (FunctionRNA *)BLI_findstring_ptr(&type->functions, identifier, offsetof(FunctionRNA, identifier));
+ if(func) {
+ return func;
}
}
return NULL;
@@ -730,7 +733,7 @@ char RNA_property_array_item_char(PropertyRNA *prop, int index)
/* get string to use for array index */
if ((index < 4) && ELEM(subtype, PROP_QUATERNION, PROP_AXISANGLE))
return quatitem[index];
- else if((index < 4) && ELEM6(subtype, PROP_TRANSLATION, PROP_DIRECTION, PROP_XYZ, PROP_EULER, PROP_VELOCITY, PROP_ACCELERATION))
+ else if((index < 4) && ELEM7(subtype, PROP_TRANSLATION, PROP_DIRECTION, PROP_XYZ, PROP_XYZ_LENGTH, PROP_EULER, PROP_VELOCITY, PROP_ACCELERATION))
return vectoritem[index];
else if ((index < 4) && ELEM(subtype, PROP_COLOR, PROP_COLOR_GAMMA))
return coloritem[index];
@@ -1308,7 +1311,7 @@ void RNA_property_boolean_set(PointerRNA *ptr, PropertyRNA *prop, int value)
val.i= value;
- group= RNA_struct_idproperties(ptr, 1);
+ group= RNA_struct_idprops(ptr, 1);
if(group)
IDP_AddToGroup(group, IDP_New(IDP_INT, val, (char*)prop->identifier));
}
@@ -1378,7 +1381,7 @@ void RNA_property_boolean_set_array(PointerRNA *ptr, PropertyRNA *prop, const in
val.array.len= prop->totarraylength;
val.array.type= IDP_INT;
- group= RNA_struct_idproperties(ptr, 1);
+ group= RNA_struct_idprops(ptr, 1);
if(group) {
idprop= IDP_New(IDP_ARRAY, val, (char*)prop->identifier);
IDP_AddToGroup(group, idprop);
@@ -1475,7 +1478,7 @@ void RNA_property_int_set(PointerRNA *ptr, PropertyRNA *prop, int value)
val.i= value;
- group= RNA_struct_idproperties(ptr, 1);
+ group= RNA_struct_idprops(ptr, 1);
if(group)
IDP_AddToGroup(group, IDP_New(IDP_INT, val, (char*)prop->identifier));
}
@@ -1545,7 +1548,7 @@ void RNA_property_int_set_array(PointerRNA *ptr, PropertyRNA *prop, const int *v
val.array.len= prop->totarraylength;
val.array.type= IDP_INT;
- group= RNA_struct_idproperties(ptr, 1);
+ group= RNA_struct_idprops(ptr, 1);
if(group) {
idprop= IDP_New(IDP_ARRAY, val, (char*)prop->identifier);
IDP_AddToGroup(group, idprop);
@@ -1651,7 +1654,7 @@ void RNA_property_float_set(PointerRNA *ptr, PropertyRNA *prop, float value)
val.f= value;
- group= RNA_struct_idproperties(ptr, 1);
+ group= RNA_struct_idprops(ptr, 1);
if(group)
IDP_AddToGroup(group, IDP_New(IDP_FLOAT, val, (char*)prop->identifier));
}
@@ -1739,7 +1742,7 @@ void RNA_property_float_set_array(PointerRNA *ptr, PropertyRNA *prop, const floa
val.array.len= prop->totarraylength;
val.array.type= IDP_FLOAT;
- group= RNA_struct_idproperties(ptr, 1);
+ group= RNA_struct_idprops(ptr, 1);
if(group) {
idprop= IDP_New(IDP_ARRAY, val, (char*)prop->identifier);
IDP_AddToGroup(group, idprop);
@@ -1864,7 +1867,7 @@ void RNA_property_string_set(PointerRNA *ptr, PropertyRNA *prop, const char *val
else if(prop->flag & PROP_EDITABLE) {
IDProperty *group;
- group= RNA_struct_idproperties(ptr, 1);
+ group= RNA_struct_idprops(ptr, 1);
if(group)
IDP_AddToGroup(group, IDP_NewString((char*)value, (char*)prop->identifier, RNA_property_string_maxlength(prop) - 1));
}
@@ -1929,7 +1932,7 @@ void RNA_property_enum_set(PointerRNA *ptr, PropertyRNA *prop, int value)
val.i= value;
- group= RNA_struct_idproperties(ptr, 1);
+ group= RNA_struct_idprops(ptr, 1);
if(group)
IDP_AddToGroup(group, IDP_New(IDP_INT, val, (char*)prop->identifier));
}
@@ -2002,7 +2005,7 @@ void RNA_property_pointer_add(PointerRNA *ptr, PropertyRNA *prop)
val.i= 0;
- group= RNA_struct_idproperties(ptr, 1);
+ group= RNA_struct_idprops(ptr, 1);
if(group)
IDP_AddToGroup(group, IDP_New(IDP_GROUP, val, (char*)prop->identifier));
}
@@ -2015,7 +2018,7 @@ void RNA_property_pointer_remove(PointerRNA *ptr, PropertyRNA *prop)
IDProperty *idprop, *group;
if((idprop=rna_idproperty_check(&prop, ptr))) {
- group= RNA_struct_idproperties(ptr, 0);
+ group= RNA_struct_idprops(ptr, 0);
if(group) {
IDP_RemFromGroup(group, idprop);
@@ -2064,7 +2067,7 @@ void RNA_property_collection_begin(PointerRNA *ptr, PropertyRNA *prop, Collectio
void RNA_property_collection_next(CollectionPropertyIterator *iter)
{
- CollectionPropertyRNA *cprop= (CollectionPropertyRNA*)iter->prop;
+ CollectionPropertyRNA *cprop= (CollectionPropertyRNA*)rna_ensure_property(iter->prop);
if(iter->idprop) {
rna_iterator_array_next(iter);
@@ -2078,7 +2081,7 @@ void RNA_property_collection_next(CollectionPropertyIterator *iter)
void RNA_property_collection_end(CollectionPropertyIterator *iter)
{
- CollectionPropertyRNA *cprop= (CollectionPropertyRNA*)iter->prop;
+ CollectionPropertyRNA *cprop= (CollectionPropertyRNA*)rna_ensure_property(iter->prop);
if(iter->idprop)
rna_iterator_array_end(iter);
@@ -2128,7 +2131,7 @@ void RNA_property_collection_add(PointerRNA *ptr, PropertyRNA *prop, PointerRNA
IDProperty *group, *item;
IDPropertyTemplate val = {0};
- group= RNA_struct_idproperties(ptr, 1);
+ group= RNA_struct_idprops(ptr, 1);
if(group) {
idprop= IDP_NewIDPArray(prop->identifier);
IDP_AddToGroup(group, idprop);
@@ -2270,7 +2273,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*)prop;
+ CollectionPropertyRNA *cprop= (CollectionPropertyRNA*)rna_ensure_property(prop);
if(cprop->lookupint) {
/* we have a callback defined, use it */
@@ -2300,7 +2303,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*)prop;
+ CollectionPropertyRNA *cprop= (CollectionPropertyRNA*)rna_ensure_property(prop);
if(cprop->lookupstring) {
/* we have a callback defined, use it */
@@ -2861,6 +2864,7 @@ static char *rna_path_token(const char **path, char *fixedbuf, int fixedlen, int
{
const char *p;
char *buf;
+ char quote= '\0';
int i, j, len, escape;
len= 0;
@@ -2872,9 +2876,30 @@ static char *rna_path_token(const char **path, char *fixedbuf, int fixedlen, int
p= *path;
- escape= 0;
- while(*p && (*p != ']' || escape)) {
- escape= (*p == '\\');
+ /* 2 kinds of lookups now, quoted or unquoted */
+ quote= *p;
+
+ if(quote != '\'' && quote != '"')
+ quote= 0;
+
+ if(quote==0) {
+ while(*p && (*p != ']')) {
+ len++;
+ p++;
+ }
+ }
+ else {
+ escape= 0;
+ /* skip the first quote */
+ len++;
+ p++;
+ while(*p && (*p != quote || escape)) {
+ escape= (*p == '\\');
+ len++;
+ p++;
+ }
+
+ /* skip the last quoted char to get the ']' */
len++;
p++;
}
@@ -2904,7 +2929,7 @@ static char *rna_path_token(const char **path, char *fixedbuf, int fixedlen, int
/* copy string, taking into account escaped ] */
if(bracket) {
for(p=*path, i=0, j=0; i<len; i++, p++) {
- if(*p == '\\' && *(p+1) == ']');
+ if(*p == '\\' && *(p+1) == quote);
else buf[j++]= *p;
}
@@ -2933,6 +2958,14 @@ static int rna_token_strip_quotes(char *token)
return 1;
}
}
+ else if(token[0]=='\'') {
+ int len = strlen(token);
+ if (len >= 2 && token[len-1]=='\'') {
+ /* strip away "" */
+ token[len-1]= '\0';
+ return 1;
+ }
+ }
return 0;
}
@@ -2947,7 +2980,7 @@ int RNA_path_resolve_full(PointerRNA *ptr, const char *path, PointerRNA *r_ptr,
PropertyRNA *prop;
PointerRNA curptr, nextptr;
char fixedbuf[256], *token;
- int type, len, intkey;
+ int type, intkey;
prop= NULL;
curptr= *ptr;
@@ -2968,7 +3001,7 @@ int RNA_path_resolve_full(PointerRNA *ptr, const char *path, PointerRNA *r_ptr,
return 0;
if(use_id_prop) { /* look up property name in current struct */
- IDProperty *group= RNA_struct_idproperties(&curptr, 0);
+ IDProperty *group= RNA_struct_idprops(&curptr, 0);
if(group && rna_token_strip_quotes(token))
prop= (PropertyRNA *)IDP_GetPropertyFromGroup(group, token+1);
}
@@ -2991,41 +3024,58 @@ int RNA_path_resolve_full(PointerRNA *ptr, const char *path, PointerRNA *r_ptr,
case PROP_POINTER:
nextptr= RNA_property_pointer_get(&curptr, prop);
- if(nextptr.data)
+ 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) {
- /* resolve the lookup with [] brackets */
- token= rna_path_token(&path, fixedbuf, sizeof(fixedbuf), 1);
-
- if(!token)
- return 0;
-
- len= strlen(token);
+ 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);
+ RNA_property_collection_lookup_int(&curptr, prop, intkey, &nextptr);
+ }
- /* 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);
+ if(token != fixedbuf) {
+ MEM_freeN(token);
+ }
}
else {
- /* otherwise do int lookup */
- intkey= atoi(token);
- RNA_property_collection_lookup_int(&curptr, prop, intkey, &nextptr);
- }
+ 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;
+ }
+ }
- if(nextptr.data)
+ 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;
default:
if (index==NULL)
@@ -3592,7 +3642,8 @@ int RNA_property_is_set(PointerRNA *ptr, const char *name)
return 1;
}
else {
- // printf("RNA_property_is_set: %s.%s not found.\n", ptr->type->identifier, name);
+ /* python raises an error */
+ /* printf("RNA_property_is_set: %s.%s not found.\n", ptr->type->identifier, name); */
return 0;
}
}
@@ -3777,27 +3828,12 @@ int RNA_function_defined(FunctionRNA *func)
PropertyRNA *RNA_function_get_parameter(PointerRNA *ptr, FunctionRNA *func, int index)
{
- PropertyRNA *parm;
- int i;
-
- parm= func->cont.properties.first;
- for(i= 0; parm; parm= parm->next, i++)
- if(i==index)
- return parm;
-
- return NULL;
+ return BLI_findlink(&func->cont.properties, index);
}
PropertyRNA *RNA_function_find_parameter(PointerRNA *ptr, FunctionRNA *func, const char *identifier)
{
- PropertyRNA *parm;
-
- parm= func->cont.properties.first;
- for(; parm; parm= parm->next)
- if(strcmp(parm->identifier, identifier)==0)
- return parm;
-
- return NULL;
+ return BLI_findstring(&func->cont.properties, identifier, offsetof(PropertyRNA, identifier));
}
const struct ListBase *RNA_function_defined_parameters(FunctionRNA *func)
@@ -3813,18 +3849,18 @@ ParameterList *RNA_parameter_list_create(ParameterList *parms, PointerRNA *ptr,
void *data;
int alloc_size= 0, size;
- parms->arg_count= 0;
- parms->ret_count= 0;
-
+ parms->arg_count= 0;
+ parms->ret_count= 0;
+
/* allocate data */
for(parm= func->cont.properties.first; parm; parm= parm->next) {
alloc_size += rna_parameter_size_alloc(parm);
- if(parm->flag & PROP_OUTPUT)
- parms->ret_count++;
- else
- parms->arg_count++;
- }
+ if(parm->flag & PROP_OUTPUT)
+ parms->ret_count++;
+ else
+ parms->arg_count++;
+ }
parms->data= MEM_callocN(alloc_size, "RNA_parameter_list_create");
parms->func= func;
@@ -3836,7 +3872,14 @@ ParameterList *RNA_parameter_list_create(ParameterList *parms, PointerRNA *ptr,
for(parm= func->cont.properties.first; parm; parm= parm->next) {
size= rna_parameter_size(parm);
- if(!(parm->flag & PROP_REQUIRED)) {
+ /* set length to 0, these need to be set later, see bpy_array.c's py_to_array */
+ if (parm->flag & PROP_DYNAMIC) {
+ ParameterDynAlloc *data_alloc= data;
+ data_alloc->array_tot= 0;
+ data_alloc->array= NULL;
+ }
+
+ if(!(parm->flag & PROP_REQUIRED) && !(parm->flag & PROP_DYNAMIC)) {
switch(parm->type) {
case PROP_BOOLEAN:
if(parm->arraydimension) memcpy(data, &((BooleanPropertyRNA*)parm)->defaultarray, size);
@@ -3865,10 +3908,6 @@ ParameterList *RNA_parameter_list_create(ParameterList *parms, PointerRNA *ptr,
}
}
- /* set length to 0 */
- if (parm->flag & PROP_DYNAMIC)
- *((int *)(((char *)data) + size))= 0;
-
data= ((char*)data) + rna_parameter_size_alloc(parm);
}
@@ -3886,9 +3925,9 @@ void RNA_parameter_list_free(ParameterList *parms)
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 */
- char *array= *(char**)((char*)parms->data+tot);
- if(array)
- MEM_freeN(array);
+ ParameterDynAlloc *data_alloc= (void *)(((char *)parms->data) + tot);
+ if(data_alloc->array)
+ MEM_freeN(data_alloc->array);
}
tot+= rna_parameter_size_alloc(parm);
@@ -4050,12 +4089,12 @@ void RNA_parameter_length_set(ParameterList *parms, PropertyRNA *parm, int lengt
int RNA_parameter_length_get_data(ParameterList *parms, PropertyRNA *parm, void *data)
{
- return *((int *)(((char *)data) + rna_parameter_size(parm)));
+ return *((int *)((char *)data));
}
void RNA_parameter_length_set_data(ParameterList *parms, PropertyRNA *parm, void *data, int length)
{
- *((int *)(((char *)data) + rna_parameter_size(parm)))= length;
+ *((int *)data)= length;
}
int RNA_function_call(bContext *C, ReportList *reports, PointerRNA *ptr, FunctionRNA *func, ParameterList *parms)
diff --git a/source/blender/makesrna/intern/rna_action.c b/source/blender/makesrna/intern/rna_action.c
index db71fbd8c46..42ddf340f12 100644
--- a/source/blender/makesrna/intern/rna_action.c
+++ b/source/blender/makesrna/intern/rna_action.c
@@ -59,7 +59,7 @@ static void rna_ActionGroup_channels_next(CollectionPropertyIterator *iter)
iter->valid= (internal->link != NULL);
}
-static bActionGroup *rna_Action_groups_add(bAction *act, char name[])
+static bActionGroup *rna_Action_groups_new(bAction *act, char name[])
{
return action_groups_add_new(act, name);
}
@@ -108,20 +108,21 @@ static FCurve *rna_Action_fcurve_new(bAction *act, ReportList *reports, char *da
static void rna_Action_fcurve_remove(bAction *act, ReportList *reports, FCurve *fcu)
{
- if(fcu->grp) {
+ if (fcu->grp) {
if (BLI_findindex(&act->groups, fcu->grp) == -1) {
BKE_reportf(reports, RPT_ERROR, "FCurve's ActionGroup '%s' not found in action '%s'", fcu->grp->name, act->id.name+2);
return;
}
-
+
action_groups_remove_channel(act, fcu);
+ free_fcurve(fcu);
}
else {
- if(BLI_findindex(&act->curves, fcu) == -1) {
+ if (BLI_findindex(&act->curves, fcu) == -1) {
BKE_reportf(reports, RPT_ERROR, "FCurve not found in action '%s'", act->id.name+2);
return;
}
-
+
BLI_remlink(&act->curves, fcu);
free_fcurve(fcu);
}
@@ -148,6 +149,11 @@ static void rna_Action_pose_markers_remove(bAction *act, ReportList *reports, Ti
MEM_freeN(marker);
}
+static void rna_Action_frame_range_get(PointerRNA *ptr,float *values)
+{
+ calc_action_range(ptr->id.data, values, values+1, 1);
+}
+
#else
static void rna_def_dopesheet(BlenderRNA *brna)
@@ -165,131 +171,131 @@ static void rna_def_dopesheet(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Source", "ID-Block representing source data, currently ID_SCE (for Dopesheet), and ID_SC (for Grease Pencil)");
/* General Filtering Settings */
- prop= RNA_def_property(srna, "only_selected", PROP_BOOLEAN, PROP_NONE);
+ 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);
- prop= RNA_def_property(srna, "display_hidden", PROP_BOOLEAN, PROP_NONE);
+ 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);
/* Object Group Filtering Settings */
- prop= RNA_def_property(srna, "only_group_objects", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_only_group_objects", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "filterflag", ADS_FILTER_ONLYOBGROUP);
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);
- prop= RNA_def_property(srna, "filtering_group", PROP_POINTER, PROP_NONE);
+ 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);
/* NLA Specific Settings */
- prop= RNA_def_property(srna, "include_missing_nla", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_missing_nla", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_negative_sdna(prop, NULL, "filterflag", ADS_FILTER_NLA_NOACT);
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);
/* Summary Settings (DopeSheet editors only) */
- prop= RNA_def_property(srna, "display_summary", PROP_BOOLEAN, PROP_NONE);
+ 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);
- prop= RNA_def_property(srna, "collapse_summary", PROP_BOOLEAN, PROP_NONE);
- RNA_def_property_boolean_sdna(prop, NULL, "flag", ADS_FLAG_SUMMARY_COLLAPSED);
+ 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);
/* General DataType Filtering Settings */
- prop= RNA_def_property(srna, "display_transforms", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_transforms", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_negative_sdna(prop, NULL, "filterflag", ADS_FILTER_NOOBJ);
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);
- prop= RNA_def_property(srna, "display_shapekeys", PROP_BOOLEAN, PROP_NONE);
+ 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);
- prop= RNA_def_property(srna, "display_mesh", PROP_BOOLEAN, PROP_NONE);
+ 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);
- prop= RNA_def_property(srna, "display_camera", PROP_BOOLEAN, PROP_NONE);
+ 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);
- prop= RNA_def_property(srna, "display_material", PROP_BOOLEAN, PROP_NONE);
+ 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);
- prop= RNA_def_property(srna, "display_lamp", PROP_BOOLEAN, PROP_NONE);
+ 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);
- prop= RNA_def_property(srna, "display_texture", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_textures", PROP_BOOLEAN, PROP_NONE);
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);
- prop= RNA_def_property(srna, "display_curve", PROP_BOOLEAN, PROP_NONE);
+ 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);
- prop= RNA_def_property(srna, "display_world", PROP_BOOLEAN, PROP_NONE);
+ 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);
- prop= RNA_def_property(srna, "display_scene", PROP_BOOLEAN, PROP_NONE);
+ 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);
- prop= RNA_def_property(srna, "display_particle", PROP_BOOLEAN, PROP_NONE);
+ 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);
- prop= RNA_def_property(srna, "display_metaball", PROP_BOOLEAN, PROP_NONE);
+ 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);
- prop= RNA_def_property(srna, "display_armature", PROP_BOOLEAN, PROP_NONE);
+ 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);
- prop= RNA_def_property(srna, "display_node", PROP_BOOLEAN, PROP_NONE);
+ 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);
@@ -336,7 +342,7 @@ static void rna_def_action_group(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Lock", "Action Group is locked");
RNA_def_property_update(prop, NC_ANIMATION|ND_ANIMCHAN|NA_EDITED, NULL);
- prop= RNA_def_property(srna, "expanded", PROP_BOOLEAN, PROP_NONE);
+ 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);
@@ -360,7 +366,7 @@ static void rna_def_action_groups(BlenderRNA *brna, PropertyRNA *cprop)
RNA_def_struct_sdna(srna, "bAction");
RNA_def_struct_ui_text(srna, "Action Groups", "Collection of action groups");
- func= RNA_def_function(srna, "add", "rna_Action_groups_add");
+ func= RNA_def_function(srna, "new", "rna_Action_groups_new");
RNA_def_function_ui_description(func, "Add a keyframe to the curve.");
parm= RNA_def_string(func, "name", "Group", 0, "", "New name for the action group.");
RNA_def_property_flag(parm, PROP_REQUIRED);
@@ -392,6 +398,7 @@ static void rna_def_action_fcurves(BlenderRNA *brna, PropertyRNA *cprop)
RNA_def_function_ui_description(func, "Add a keyframe to the curve.");
RNA_def_function_flag(func, FUNC_USE_REPORTS);
parm= RNA_def_string(func, "data_path", "", 0, "Data Path", "FCurve data path to use.");
+ RNA_def_property_flag(parm, PROP_REQUIRED);
parm= RNA_def_int(func, "array_index", 0, 0, INT_MAX, "Index", "Array index.", 0, INT_MAX);
parm= RNA_def_string(func, "action_group", "", 0, "Action Group", "Acton group to add this fcurve into.");
@@ -462,6 +469,10 @@ static void rna_def_action(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Pose Markers", "Markers specific to this Action, for labeling poses");
rna_def_action_pose_markers(brna, prop);
+ prop= RNA_def_float_vector(srna, "frame_range" , 2 , NULL , 0, 0, "Frame Range" , "The final frame range of all fcurves within this action" , 0 , 0);
+ RNA_def_property_float_funcs(prop, "rna_Action_frame_range_get" , NULL, NULL);
+ RNA_def_property_clear_flag(prop, PROP_EDITABLE);
+
RNA_api_action(srna);
}
diff --git a/source/blender/makesrna/intern/rna_action_api.c b/source/blender/makesrna/intern/rna_action_api.c
index 0304ef2b0bd..9f64792932b 100644
--- a/source/blender/makesrna/intern/rna_action_api.c
+++ b/source/blender/makesrna/intern/rna_action_api.c
@@ -40,35 +40,11 @@
#include "DNA_anim_types.h"
#include "DNA_curve_types.h"
-/* return frame range of all curves (min, max) or (0, 1) if there are no keys */
-void rna_Action_get_frame_range(bAction *act, int **frame_range, int *length_r)
-{
- int *ret;
- float start, end;
-
- calc_action_range(act, &start, &end, 1);
-
- *length_r= 2;
- ret= MEM_callocN(*length_r * sizeof(int), "rna_Action_get_frame_range");
-
- ret[0]= (int)start;
- ret[1]= (int)end;
-
- *frame_range= ret;
-}
-
#else
void RNA_api_action(StructRNA *srna)
{
- FunctionRNA *func;
- PropertyRNA *parm;
-
- func= RNA_def_function(srna, "get_frame_range", "rna_Action_get_frame_range");
- RNA_def_function_ui_description(func, "Get action frame range as a (min, max) tuple.");
- parm= RNA_def_int_array(func, "frame_range", 1, NULL, 0, 0, "", "Action frame range.", 0, 0);
- RNA_def_property_flag(parm, PROP_DYNAMIC);
- RNA_def_function_output(func, parm);
+
}
#endif
diff --git a/source/blender/makesrna/intern/rna_actuator.c b/source/blender/makesrna/intern/rna_actuator.c
index ac39581ca9a..663b52055da 100644
--- a/source/blender/makesrna/intern/rna_actuator.c
+++ b/source/blender/makesrna/intern/rna_actuator.c
@@ -71,7 +71,7 @@ static StructRNA* rna_Actuator_refine(struct PointerRNA *ptr)
case ACT_OBJECT:
return &RNA_ObjectActuator;
case ACT_IPO:
- return &RNA_FcurveActuator;
+ return &RNA_FCurveActuator;
case ACT_CAMERA:
return &RNA_CameraActuator;
case ACT_SOUND:
@@ -288,7 +288,7 @@ static void rna_ConstraintActuator_spring_set(struct PointerRNA *ptr, float valu
}
/* ConstraintActuator uses the same property for Material and Property.
- Therefore we need to clear the property when "detect_material" mode changes */
+ 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;
@@ -492,13 +492,13 @@ void rna_def_actuator(BlenderRNA *brna)
RNA_def_property_enum_funcs(prop, NULL, "rna_Actuator_type_set", "rna_Actuator_type_itemf");
RNA_def_property_ui_text(prop, "Type", "");
- prop= RNA_def_property(srna, "pinned", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "pin", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", ACT_PIN);
RNA_def_property_ui_text(prop, "Pinned", "Display when not linked to a visible states controller");
RNA_def_property_ui_icon(prop, ICON_UNPINNED, 1);
RNA_def_property_update(prop, NC_LOGIC, NULL);
- prop= RNA_def_property(srna, "expanded", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_expanded", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", ACT_SHOW);
RNA_def_property_ui_text(prop, "Expanded", "Set actuator expanded in the user interface");
RNA_def_property_ui_icon(prop, ICON_TRIA_RIGHT, 1);
@@ -526,7 +526,7 @@ static void rna_def_action_actuator(BlenderRNA *brna)
RNA_def_struct_ui_text(srna, "Action Actuator", "Actuator to control the object movement");
RNA_def_struct_sdna_from(srna, "bActionActuator", "data");
- prop= RNA_def_property(srna, "mode", PROP_ENUM, PROP_NONE);
+ prop= RNA_def_property(srna, "play_mode", 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, "Action type", "Action playback type");
@@ -541,7 +541,7 @@ static void rna_def_action_actuator(BlenderRNA *brna)
RNA_def_property_pointer_funcs(prop, NULL, "rna_Actuator_action_action_set", NULL, NULL);
RNA_def_property_update(prop, NC_LOGIC, NULL);
- prop= RNA_def_property(srna, "continue_last_frame", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_continue_last_frame", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "end_reset", 1);
RNA_def_property_ui_text(prop, "Continue", "Restore last frame when switching on/off, otherwise play from the start each time");
RNA_def_property_update(prop, NC_LOGIC, NULL);
@@ -563,7 +563,8 @@ static void rna_def_action_actuator(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "End frame", "");
RNA_def_property_update(prop, NC_LOGIC, NULL);
- prop= RNA_def_property(srna, "blendin", PROP_INT, PROP_NONE);
+ prop= RNA_def_property(srna, "frame_blend_in", PROP_INT, PROP_NONE);
+ RNA_def_property_int_sdna(prop, NULL, "blendin");
RNA_def_property_range(prop, 0, 32767);
RNA_def_property_ui_text(prop, "Blendin", "Number of frames of motion blending");
RNA_def_property_update(prop, NC_LOGIC, NULL);
@@ -677,14 +678,14 @@ static void rna_def_object_actuator(BlenderRNA *brna)
RNA_def_property_update(prop, NC_LOGIC, NULL);
/* floats 3 Arrays*/
- prop= RNA_def_property(srna, "loc", PROP_FLOAT, PROP_XYZ);
+ prop= RNA_def_property(srna, "offset_location", PROP_FLOAT, PROP_XYZ);
RNA_def_property_float_sdna(prop, NULL, "dloc");
RNA_def_property_array(prop, 3);
RNA_def_property_ui_range(prop, -10000.0, 10000.0, 10, 2);
RNA_def_property_ui_text(prop, "Loc", "Sets the location");
RNA_def_property_update(prop, NC_LOGIC, NULL);
- prop= RNA_def_property(srna, "rot", PROP_FLOAT, PROP_XYZ);
+ prop= RNA_def_property(srna, "offset_rotation", PROP_FLOAT, PROP_XYZ);
RNA_def_property_float_sdna(prop, NULL, "drot");
RNA_def_property_array(prop, 3);
RNA_def_property_ui_range(prop, -10000.0, 10000.0, 10, 2);
@@ -720,52 +721,52 @@ static void rna_def_object_actuator(BlenderRNA *brna)
RNA_def_property_update(prop, NC_LOGIC, NULL);
/* booleans */
- prop= RNA_def_property(srna, "local_location", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_local_location", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", ACT_DLOC_LOCAL);
RNA_def_property_ui_text(prop, "L", "Location is defined in local coordinates");
RNA_def_property_update(prop, NC_LOGIC, NULL);
- prop= RNA_def_property(srna, "local_rotation", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_local_rotation", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", ACT_DROT_LOCAL);
RNA_def_property_ui_text(prop, "L", "Rotation is defined in local coordinates");
RNA_def_property_update(prop, NC_LOGIC, NULL);
- prop= RNA_def_property(srna, "local_force", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_local_force", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", ACT_FORCE_LOCAL);
RNA_def_property_ui_text(prop, "L", "Force is defined in local coordinates");
RNA_def_property_update(prop, NC_LOGIC, NULL);
- prop= RNA_def_property(srna, "local_torque", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_local_torque", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", ACT_TORQUE_LOCAL);
RNA_def_property_ui_text(prop, "L", "Torque is defined in local coordinates");
RNA_def_property_update(prop, NC_LOGIC, NULL);
- prop= RNA_def_property(srna, "local_linear_velocity", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_local_linear_velocity", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", ACT_LIN_VEL_LOCAL);
RNA_def_property_ui_text(prop, "L", "Velocity is defined in local coordinates");
RNA_def_property_update(prop, NC_LOGIC, NULL);
- prop= RNA_def_property(srna, "local_angular_velocity", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_local_angular_velocity", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", ACT_ANG_VEL_LOCAL);
RNA_def_property_ui_text(prop, "L", "Angular velocity is defined in local coordinates");
RNA_def_property_update(prop, NC_LOGIC, NULL);
- prop= RNA_def_property(srna, "add_linear_velocity", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_add_linear_velocity", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", ACT_ADD_LIN_VEL);
RNA_def_property_ui_text(prop, "Add", "Toggles between ADD and SET linV");
RNA_def_property_update(prop, NC_LOGIC, NULL);
- prop= RNA_def_property(srna, "servo_limit_x", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_servo_limit_x", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", ACT_SERVO_LIMIT_X);
RNA_def_property_ui_text(prop, "X", "Set limit to force along the X axis");
RNA_def_property_update(prop, NC_LOGIC, NULL);
- prop= RNA_def_property(srna, "servo_limit_y", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_servo_limit_y", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", ACT_SERVO_LIMIT_Y);
RNA_def_property_ui_text(prop, "Y", "Set limit to force along the Y axis");
RNA_def_property_update(prop, NC_LOGIC, NULL);
- prop= RNA_def_property(srna, "servo_limit_z", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_servo_limit_z", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", ACT_SERVO_LIMIT_Z);
RNA_def_property_ui_text(prop, "Z", "Set limit to force along the Z axis");
RNA_def_property_update(prop, NC_LOGIC, NULL);
@@ -786,7 +787,7 @@ static void rna_def_fcurve_actuator(BlenderRNA *brna)
{ACT_IPO_FROM_PROP, "PROP", 0, "Property", ""},
{0, NULL, 0, NULL, NULL}};
- srna= RNA_def_struct(brna, "FcurveActuator", "Actuator");
+ srna= RNA_def_struct(brna, "FCurveActuator", "Actuator");
RNA_def_struct_ui_text(srna, "F-Curve Actuator", "Actuator to animate the object");
RNA_def_struct_sdna_from(srna, "bIpoActuator", "data");
@@ -818,24 +819,24 @@ static void rna_def_fcurve_actuator(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Frame Property", "Assign the action's current frame number to this property");
/* booleans */
- prop= RNA_def_property(srna, "add", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_additive", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", ACT_IPOADD);
RNA_def_property_boolean_funcs(prop, NULL, "rna_FcurveActuator_add_set");
RNA_def_property_ui_text(prop, "Add", "F-Curve is added to the current loc/rot/scale in global or local coordinate according to Local flag");
RNA_def_property_update(prop, NC_LOGIC, NULL);
- prop= RNA_def_property(srna, "force", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_force", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", ACT_IPOFORCE);
RNA_def_property_boolean_funcs(prop, NULL, "rna_FcurveActuator_force_set");
RNA_def_property_ui_text(prop, "Force", "Apply F-Curve as a global or local force depending on the local option (dynamic objects only)");
RNA_def_property_update(prop, NC_LOGIC, NULL);
- prop= RNA_def_property(srna, "local", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_local", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", ACT_IPOLOCAL);
RNA_def_property_ui_text(prop, "L", "Let the F-Curve act in local coordinates, used in Force and Add mode");
RNA_def_property_update(prop, NC_LOGIC, NULL);
- prop= RNA_def_property(srna, "child", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "apply_to_children", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", ACT_IPOCHILD);
RNA_def_property_ui_text(prop, "Child", "Update F-Curve on all children Objects as well");
RNA_def_property_update(prop, NC_LOGIC, NULL);
@@ -929,25 +930,25 @@ static void rna_def_sound_actuator(BlenderRNA *brna)
RNA_def_property_update(prop, NC_LOGIC, NULL);
/* floats - 3D Parameters */
- prop= RNA_def_property(srna, "minimum_gain_3d", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "gain_3d_min", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "sound3D.min_gain");
RNA_def_property_ui_range(prop, 0.0, 1.0, 1, 2);
RNA_def_property_ui_text(prop, "Minimum Gain", "The minimum gain of the sound, no matter how far it is away");
RNA_def_property_update(prop, NC_LOGIC, NULL);
- prop= RNA_def_property(srna, "maximum_gain_3d", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "gain_3d_max", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "sound3D.max_gain");
RNA_def_property_ui_range(prop, 0.0, 1.0, 1, 2);
RNA_def_property_ui_text(prop, "Maximum Gain", "The maximum gain of the sound, no matter how near it is");
RNA_def_property_update(prop, NC_LOGIC, NULL);
- prop= RNA_def_property(srna, "reference_distance_3d", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "distance_3d_reference", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "sound3D.reference_distance");
RNA_def_property_ui_range(prop, 0.0, FLT_MAX, 1, 2);
RNA_def_property_ui_text(prop, "Reference Distance", "The distance where the sound has a gain of 1.0");
RNA_def_property_update(prop, NC_LOGIC, NULL);
- prop= RNA_def_property(srna, "max_distance_3d", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "distance_3d_max", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "sound3D.max_distance");
RNA_def_property_ui_range(prop, 0.0, FLT_MAX, 1, 2);
RNA_def_property_ui_text(prop, "Maximum Distance", "The maximum distance at which you can hear the sound");
@@ -978,7 +979,7 @@ static void rna_def_sound_actuator(BlenderRNA *brna)
RNA_def_property_update(prop, NC_LOGIC, NULL);
/* booleans */
- prop= RNA_def_property(srna, "enable_sound_3d", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_sound_3d", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", ACT_SND_3D_SOUND);
RNA_def_property_ui_text(prop, "3D Sound", "Enable/Disable 3D Sound");
RNA_def_property_update(prop, NC_LOGIC, NULL);
@@ -1148,20 +1149,20 @@ static void rna_def_constraint_actuator(BlenderRNA *brna)
RNA_def_property_update(prop, NC_LOGIC, NULL);
/* ACT_CONST_TYPE_ORI */
- prop= RNA_def_property(srna, "max_rotation", PROP_FLOAT, PROP_XYZ);
+ prop= RNA_def_property(srna, "rotation_max", PROP_FLOAT, PROP_XYZ);
RNA_def_property_float_sdna(prop, NULL, "maxrot");
RNA_def_property_array(prop, 3);
RNA_def_property_ui_range(prop, -2000.0, 2000.0, 10, 2);
RNA_def_property_ui_text(prop, "Reference Direction", "Reference Direction");
RNA_def_property_update(prop, NC_LOGIC, NULL);
- prop= RNA_def_property(srna, "min_angle", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "angle_min", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "minloc[0]");
RNA_def_property_ui_range(prop, 0.0, 180.0, 10, 2);
RNA_def_property_ui_text(prop, "Min Angle", "Minimum angle (in degree) to maintain with target direction. No correction is done if angle with target direction is between min and max");
RNA_def_property_update(prop, NC_LOGIC, NULL);
- prop= RNA_def_property(srna, "max_angle", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "angle_max", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "maxloc[0]");
RNA_def_property_ui_range(prop, 0.0, 180.0, 10, 2);
RNA_def_property_ui_text(prop, "Max Angle", "Maximum angle (in degree) allowed with target direction. No correction is done if angle with target direction is between min and max");
@@ -1187,39 +1188,39 @@ static void rna_def_constraint_actuator(BlenderRNA *brna)
RNA_def_property_update(prop, NC_LOGIC, NULL);
/* booleans */
- prop= RNA_def_property(srna, "force_distance", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_force_distance", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", ACT_CONST_DISTANCE);
RNA_def_property_ui_text(prop, "Force Distance", "Force distance of object to point of impact of ray");
RNA_def_property_update(prop, NC_LOGIC, NULL);
- prop= RNA_def_property(srna, "local", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_local", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", ACT_CONST_LOCAL);
RNA_def_property_ui_text(prop, "L", "Set ray along object's axis or global axis");
RNA_def_property_update(prop, NC_LOGIC, NULL);
- prop= RNA_def_property(srna, "normal", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_normal", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", ACT_CONST_NORMAL);
RNA_def_property_ui_text(prop, "N", "Set object axis along (local axis) or parallel (global axis) to the normal at hit position");
RNA_def_property_update(prop, NC_LOGIC, NULL);
- prop= RNA_def_property(srna, "persistent", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_persistent", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", ACT_CONST_PERMANENT);
RNA_def_property_ui_text(prop, "PER", "Persistent actuator: stays active even if ray does not reach target");
RNA_def_property_update(prop, NC_LOGIC, NULL);
//XXX to use an enum instead of a flag if possible
- prop= RNA_def_property(srna, "detect_material", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_material_detect", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", ACT_CONST_MATERIAL);
RNA_def_property_ui_text(prop, "M/P", "Detect material instead of property");
RNA_def_property_boolean_funcs(prop, NULL, "rna_Actuator_constraint_detect_material_set");
RNA_def_property_update(prop, NC_LOGIC, NULL);
- prop= RNA_def_property(srna, "fh_paralel_axis", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_fh_paralel_axis", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", ACT_CONST_DOROTFH);
RNA_def_property_ui_text(prop, "Rot Fh", "Keep object axis parallel to normal");
RNA_def_property_update(prop, NC_LOGIC, NULL);
- prop= RNA_def_property(srna, "fh_normal", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_fh_normal", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", ACT_CONST_NORMAL);
RNA_def_property_ui_text(prop, "N", "Add a horizontal spring force on slopes");
RNA_def_property_update(prop, NC_LOGIC, NULL);
@@ -1311,27 +1312,27 @@ static void rna_def_edit_object_actuator(BlenderRNA *brna)
RNA_def_property_update(prop, NC_LOGIC, NULL);
/* booleans */
- prop= RNA_def_property(srna, "local_linear_velocity", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_local_linear_velocity", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "localflag", ACT_EDOB_LOCAL_LINV);
RNA_def_property_ui_text(prop, "L", "Apply the transformation locally");
RNA_def_property_update(prop, NC_LOGIC, NULL);
- prop= RNA_def_property(srna, "local_angular_velocity", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_local_angular_velocity", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "localflag", ACT_EDOB_LOCAL_ANGV);
RNA_def_property_ui_text(prop, "L", "Apply the rotation locally");
RNA_def_property_update(prop, NC_LOGIC, NULL);
- prop= RNA_def_property(srna, "replace_display_mesh", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_replace_display_mesh", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", ACT_EDOB_REPLACE_MESH_NOGFX);
RNA_def_property_ui_text(prop, "Gfx", "Replace the display mesh");
RNA_def_property_update(prop, NC_LOGIC, NULL);
- prop= RNA_def_property(srna, "replace_physics_mesh", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_replace_physics_mesh", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", ACT_EDOB_REPLACE_MESH_PHYS);
RNA_def_property_ui_text(prop, "Phys", "Replace the physics mesh (triangle bounds only - compound shapes not supported)");
RNA_def_property_update(prop, NC_LOGIC, NULL);
- prop= RNA_def_property(srna, "enable_3d_tracking", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_3d_tracking", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", ACT_TRACK_3D);
RNA_def_property_ui_text(prop, "3D", "Enable 3D tracking");
RNA_def_property_update(prop, NC_LOGIC, NULL);
@@ -1435,7 +1436,7 @@ static void rna_def_random_actuator(BlenderRNA *brna)
/* int_arg_1, int_arg_2, float_arg_1, float_arg_2 */
/* ACT_RANDOM_BOOL_CONST */
- prop= RNA_def_property(srna, "always_true", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_always_true", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "int_arg_1", 1);
RNA_def_property_ui_text(prop, "Always true", "Always false or always true");
RNA_def_property_update(prop, NC_LOGIC, NULL);
@@ -1573,8 +1574,8 @@ static void rna_def_game_actuator(BlenderRNA *brna)
{ACT_GAME_LOAD, "START", 0, "Start new game", ""},
{ACT_GAME_RESTART, "RESTART", 0, "Restart this game", ""},
{ACT_GAME_QUIT, "QUIT", 0, "Quit this game", ""},
- {ACT_GAME_SAVECFG, "SAVECFG", 0, "Save GameLogic.globalDict", ""},
- {ACT_GAME_LOADCFG, "LOADCFG", 0, "Load GameLogic.globalDict", ""},
+ {ACT_GAME_SAVECFG, "SAVECFG", 0, "Save bge.logic.globalDict", ""},
+ {ACT_GAME_LOADCFG, "LOADCFG", 0, "Load bge.logic.globalDict", ""},
{0, NULL, 0, NULL, NULL}};
srna= RNA_def_struct(brna, "GameActuator", "Actuator");
@@ -1603,17 +1604,17 @@ static void rna_def_visibility_actuator(BlenderRNA *brna)
RNA_def_struct_ui_text(srna, "Visibility Actuator", "Actuator to set visibility and occlusion of the object");
RNA_def_struct_sdna_from(srna, "bVisibilityActuator", "data");
- prop= RNA_def_property(srna, "visible", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_visible", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", ACT_VISIBILITY_INVISIBLE);
RNA_def_property_ui_text(prop, "Visible", "Set the objects visible. Initialized from the objects render restriction toggle (access in the outliner)");
RNA_def_property_update(prop, NC_LOGIC, NULL);
- prop= RNA_def_property(srna, "occlusion", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_occlusion", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", ACT_VISIBILITY_OCCLUSION);
RNA_def_property_ui_text(prop, "Occlusion", "Set the object to occlude objects behind it. Initialized from the object type in physics button");
RNA_def_property_update(prop, NC_LOGIC, NULL);
- prop= RNA_def_property(srna, "children", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "apply_to_children", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", ACT_VISIBILITY_RECURSIVE);
RNA_def_property_ui_text(prop, "Children", "Set all the children of this object to the same visibility/occlusion recursively");
RNA_def_property_update(prop, NC_LOGIC, NULL);
@@ -1673,7 +1674,7 @@ static void rna_def_twodfilter_actuator(BlenderRNA *brna)
RNA_def_property_update(prop, NC_LOGIC, NULL);
/* booleans */
- prop= RNA_def_property(srna, "enable_motion_blur", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_motion_blur", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", 1);
RNA_def_property_ui_text(prop, "Enable", "Enable/Disable Motion Blur");
RNA_def_property_update(prop, NC_LOGIC, NULL);
@@ -1707,12 +1708,12 @@ static void rna_def_parent_actuator(BlenderRNA *brna)
RNA_def_property_update(prop, NC_LOGIC, NULL);
/* booleans */
- prop= RNA_def_property(srna, "compound", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_compound", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", ACT_PARENT_COMPOUND);
RNA_def_property_ui_text(prop, "Compound", "Add this object shape to the parent shape (only if the parent shape is already compound)");
RNA_def_property_update(prop, NC_LOGIC, NULL);
- prop= RNA_def_property(srna, "ghost", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_ghost", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", ACT_PARENT_GHOST);
RNA_def_property_ui_text(prop, "Ghost", "Make this object ghost while parented (only if not compound)");
RNA_def_property_update(prop, NC_LOGIC, NULL);
@@ -1753,7 +1754,7 @@ static void rna_def_shape_action_actuator(BlenderRNA *brna)
RNA_def_property_pointer_funcs(prop, NULL, "rna_Actuator_action_action_set", NULL, NULL);
RNA_def_property_update(prop, NC_LOGIC, NULL);
- prop= RNA_def_property(srna, "continue_last_frame", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_continue_last_frame", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "end_reset", 1);
RNA_def_property_ui_text(prop, "Continue", "Restore last frame when switching on/off, otherwise play from the start each time");
RNA_def_property_update(prop, NC_LOGIC, NULL);
@@ -1775,7 +1776,8 @@ static void rna_def_shape_action_actuator(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "End frame", "");
RNA_def_property_update(prop, NC_LOGIC, NULL);
- prop= RNA_def_property(srna, "blendin", PROP_INT, PROP_NONE);
+ prop= RNA_def_property(srna, "frame_blend_in", PROP_INT, PROP_NONE);
+ RNA_def_property_int_sdna(prop, NULL, "blendin");
RNA_def_property_range(prop, 0, 32767);
RNA_def_property_ui_text(prop, "Blendin", "Number of frames of motion blending");
RNA_def_property_update(prop, NC_LOGIC, NULL);
@@ -1821,7 +1823,7 @@ static void rna_def_state_actuator(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Operation", "Select the bit operation on object state mask");
RNA_def_property_update(prop, NC_LOGIC, NULL);
- prop= RNA_def_property(srna, "state", PROP_BOOLEAN, PROP_LAYER_MEMBER);
+ prop= RNA_def_property(srna, "states", PROP_BOOLEAN, PROP_LAYER_MEMBER);
RNA_def_property_boolean_sdna(prop, NULL, "mask", 1);
RNA_def_property_array(prop, OB_MAX_STATES);
RNA_def_property_ui_text(prop, "State", "");
diff --git a/source/blender/makesrna/intern/rna_animation.c b/source/blender/makesrna/intern/rna_animation.c
index f4b6d7ded0f..cee6b7f854a 100644
--- a/source/blender/makesrna/intern/rna_animation.c
+++ b/source/blender/makesrna/intern/rna_animation.c
@@ -327,7 +327,7 @@ static PointerRNA rna_KeyingSet_typeinfo_get(PointerRNA *ptr)
static KS_Path *rna_KeyingSet_paths_add(KeyingSet *keyingset, ReportList *reports,
- ID *id, char rna_path[], int index, int grouping_method, char group_name[])
+ ID *id, char rna_path[], int index, int group_method, char group_name[])
{
KS_Path *ksp = NULL;
short flag = 0;
@@ -340,7 +340,7 @@ static KS_Path *rna_KeyingSet_paths_add(KeyingSet *keyingset, ReportList *report
/* if data is valid, call the API function for this */
if (keyingset) {
- ksp= BKE_keyingset_add_path(keyingset, id, group_name, rna_path, index, flag, grouping_method);
+ ksp= BKE_keyingset_add_path(keyingset, id, group_name, rna_path, index, flag, group_method);
keyingset->active_path= BLI_countlist(&keyingset->paths);
}
else {
@@ -394,21 +394,18 @@ static void rna_KeyingSet_paths_clear(KeyingSet *keyingset, ReportList *reports)
static void rna_def_common_keying_flags(StructRNA *srna, short reg)
{
PropertyRNA *prop;
-
- prop= RNA_def_property(srna, "insertkey_needed", PROP_BOOLEAN, PROP_NONE);
- RNA_def_property_boolean_sdna(prop, NULL, "keyingflag", INSERTKEY_NEEDED);
- RNA_def_property_ui_text(prop, "Insert Keyframes - Only Needed", "Only insert keyframes where they're needed in the relevant F-Curves");
- if (reg) RNA_def_property_flag(prop, PROP_REGISTER_OPTIONAL);
-
- prop= RNA_def_property(srna, "insertkey_visual", PROP_BOOLEAN, PROP_NONE);
- RNA_def_property_boolean_sdna(prop, NULL, "keyingflag", INSERTKEY_MATRIX);
- RNA_def_property_ui_text(prop, "Insert Keyframes - Visual", "Insert keyframes based on 'visual transforms'");
- if (reg) RNA_def_property_flag(prop, PROP_REGISTER_OPTIONAL);
-
- prop= RNA_def_property(srna, "insertkey_xyz_to_rgb", PROP_BOOLEAN, PROP_NONE);
- RNA_def_property_boolean_sdna(prop, NULL, "keyingflag", INSERTKEY_XYZ2RGB);
- RNA_def_property_ui_text(prop, "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");
- if (reg) RNA_def_property_flag(prop, PROP_REGISTER_OPTIONAL);
+
+ 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}};
+
+ 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_ui_text(prop, "Options", "Keying set options");
}
/* --- */
@@ -504,7 +501,7 @@ static void rna_def_keyingset_path(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Group Name", "Name of Action Group to assign setting(s) for this path to");
/* Grouping */
- prop= RNA_def_property(srna, "grouping", PROP_ENUM, PROP_NONE);
+ 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");
@@ -519,7 +516,7 @@ static void rna_def_keyingset_path(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "RNA Array Index", "Index to the specific setting if applicable");
/* Flags */
- prop= RNA_def_property(srna, "entire_array", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_entire_array", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", KSP_FLAG_WHOLE_ARRAY);
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");
@@ -528,7 +525,6 @@ static void rna_def_keyingset_path(BlenderRNA *brna)
}
-
/* keyingset.paths */
static void rna_def_keyingset_paths(BlenderRNA *brna, PropertyRNA *cprop)
{
@@ -536,6 +532,8 @@ static void rna_def_keyingset_paths(BlenderRNA *brna, PropertyRNA *cprop)
FunctionRNA *func;
PropertyRNA *parm;
+
+ PropertyRNA *prop;
RNA_def_property_srna(cprop, "KeyingSetPaths");
srna= RNA_def_struct(brna, "KeyingSetPaths", NULL);
@@ -559,7 +557,7 @@ static void rna_def_keyingset_paths(BlenderRNA *brna, PropertyRNA *cprop)
/* index (defaults to -1 for entire array) */
parm=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 */
- parm=RNA_def_enum(func, "grouping_method", keyingset_path_grouping_items, KSP_GROUP_KSNAME, "Grouping Method", "Method used to define which Group-name to use.");
+ parm=RNA_def_enum(func, "group_method", keyingset_path_grouping_items, KSP_GROUP_KSNAME, "Grouping Method", "Method used to define which Group-name to use.");
parm=RNA_def_string(func, "group_name", "", 64, "Group Name", "Name of Action Group to assign destination to (only if grouping mode is to use this name).");
@@ -569,13 +567,25 @@ static void rna_def_keyingset_paths(BlenderRNA *brna, PropertyRNA *cprop)
RNA_def_function_flag(func, FUNC_USE_REPORTS);
/* path to remove */
parm= RNA_def_pointer(func, "path", "KeyingSetPath", "Path", "");
- RNA_def_property_flag(parm, PROP_REQUIRED);
+ RNA_def_property_flag(parm, PROP_REQUIRED|PROP_NEVER_NULL);
/* Remove All Paths */
func= RNA_def_function(srna, "clear", "rna_KeyingSet_paths_clear");
RNA_def_function_ui_description(func, "Remove all the paths from the Keying Set.");
RNA_def_function_flag(func, FUNC_USE_REPORTS);
+
+ prop= RNA_def_property(srna, "active", PROP_POINTER, PROP_NONE);
+ RNA_def_property_struct_type(prop, "KeyingSetPath");
+ RNA_def_property_flag(prop, PROP_EDITABLE);
+ RNA_def_property_editable_func(prop, "rna_KeyingSet_active_ksPath_editable");
+ RNA_def_property_pointer_funcs(prop, "rna_KeyingSet_active_ksPath_get", "rna_KeyingSet_active_ksPath_set", NULL, NULL);
+ RNA_def_property_ui_text(prop, "Active Keying Set", "Active Keying Set used to insert/delete keyframes");
+
+ prop= RNA_def_property(srna, "active_index", PROP_INT, PROP_NONE);
+ RNA_def_property_int_sdna(prop, NULL, "active_path");
+ RNA_def_property_int_funcs(prop, "rna_KeyingSet_active_ksPath_index_get", "rna_KeyingSet_active_ksPath_index_set", "rna_KeyingSet_active_ksPath_index_range");
+ RNA_def_property_ui_text(prop, "Active Path Index", "Current Keying Set index");
}
static void rna_def_keyingset(BlenderRNA *brna)
@@ -604,21 +614,10 @@ static void rna_def_keyingset(BlenderRNA *brna)
RNA_def_property_struct_type(prop, "KeyingSetPath");
RNA_def_property_ui_text(prop, "Paths", "Keying Set Paths to define settings that get keyframed together");
rna_def_keyingset_paths(brna, prop);
-
- prop= RNA_def_property(srna, "active_path", PROP_POINTER, PROP_NONE);
- RNA_def_property_struct_type(prop, "KeyingSetPath");
- RNA_def_property_flag(prop, PROP_EDITABLE);
- RNA_def_property_editable_func(prop, "rna_KeyingSet_active_ksPath_editable");
- RNA_def_property_pointer_funcs(prop, "rna_KeyingSet_active_ksPath_get", "rna_KeyingSet_active_ksPath_set", NULL, NULL);
- RNA_def_property_ui_text(prop, "Active Keying Set", "Active Keying Set used to insert/delete keyframes");
-
- prop= RNA_def_property(srna, "active_path_index", PROP_INT, PROP_NONE);
- RNA_def_property_int_sdna(prop, NULL, "active_path");
- RNA_def_property_int_funcs(prop, "rna_KeyingSet_active_ksPath_index_get", "rna_KeyingSet_active_ksPath_index_set", "rna_KeyingSet_active_ksPath_index_range");
- RNA_def_property_ui_text(prop, "Active Path Index", "Current Keying Set index");
-
+
/* Flags */
- prop= RNA_def_property(srna, "absolute", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "is_path_absolute", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_clear_flag(prop, PROP_EDITABLE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", KEYINGSET_ABSOLUTE);
RNA_def_property_ui_text(prop, "Absolute", "Keying Set defines specific paths/settings to be keyframed (i.e. is not reliant on context info)");
@@ -670,7 +669,7 @@ 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)");
- prop= RNA_def_property(srna, "action_blending", PROP_ENUM, PROP_NONE);
+ 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");
@@ -688,7 +687,7 @@ void rna_def_animdata(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Drivers", "The Drivers/Expressions for this datablock");
/* General Settings */
- prop= RNA_def_property(srna, "nla_enabled", PROP_BOOLEAN, PROP_NONE);
+ 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");
}
diff --git a/source/blender/makesrna/intern/rna_animviz.c b/source/blender/makesrna/intern/rna_animviz.c
index 1b049ced767..1fcd53d5d0f 100644
--- a/source/blender/makesrna/intern/rna_animviz.c
+++ b/source/blender/makesrna/intern/rna_animviz.c
@@ -145,7 +145,7 @@ static void rna_def_animviz_motion_path(BlenderRNA *brna)
RNA_def_property_clear_flag(prop, PROP_EDITABLE); // xxx
RNA_def_property_ui_text(prop, "Use Bone Heads", "For PoseBone paths, use the bone head location when calculating this path");
- prop= RNA_def_property(srna, "editing", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "is_modified", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", MOTIONPATH_FLAG_EDIT);
RNA_def_property_ui_text(prop, "Edit Path", "Path is being edited");
}
@@ -178,7 +178,7 @@ static void rna_def_animviz_ghosts(BlenderRNA *brna)
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, "only_selected", PROP_BOOLEAN, PROP_NONE);
+ 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 */
@@ -203,13 +203,13 @@ static void rna_def_animviz_ghosts(BlenderRNA *brna)
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, "before_current", PROP_INT, PROP_TIME);
+ prop= RNA_def_property(srna, "frame_before", PROP_INT, PROP_TIME);
RNA_def_property_int_sdna(prop, NULL, "ghost_bc");
RNA_def_property_range(prop, 0, 30);
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 */
- prop= RNA_def_property(srna, "after_current", PROP_INT, PROP_TIME);
+ prop= RNA_def_property(srna, "frame_after", PROP_INT, PROP_TIME);
RNA_def_property_int_sdna(prop, NULL, "ghost_ac");
RNA_def_property_range(prop, 0, 30);
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)");
@@ -254,7 +254,7 @@ static void rna_def_animviz_paths(BlenderRNA *brna)
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 */
- prop= RNA_def_property(srna, "highlight_keyframes", PROP_BOOLEAN, PROP_NONE);
+ 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 */
@@ -264,7 +264,7 @@ static void rna_def_animviz_paths(BlenderRNA *brna)
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 */
- prop= RNA_def_property(srna, "search_all_action_keyframes", PROP_BOOLEAN, PROP_NONE);
+ 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 */
@@ -290,13 +290,13 @@ static void rna_def_animviz_paths(BlenderRNA *brna)
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, "before_current", PROP_INT, PROP_TIME);
+ 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_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 */
- prop= RNA_def_property(srna, "after_current", PROP_INT, PROP_TIME);
+ 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_ui_text(prop, "After Current", "Number of frames to show after the current frame (only for 'Around Current Frame' Onion-skinning method)");
@@ -325,14 +325,14 @@ static void rna_def_animviz(BlenderRNA *brna)
RNA_def_struct_ui_text(srna, "Animation Visualisation", "Settings for the visualisation of motion");
/* onion-skinning settings (nested struct) */
- prop= RNA_def_property(srna, "onion_skinning", PROP_POINTER, PROP_NONE);
+ prop= RNA_def_property(srna, "onion_skin_frames", PROP_POINTER, PROP_NONE);
RNA_def_property_flag(prop, PROP_NEVER_NULL);
RNA_def_property_struct_type(prop, "AnimVizOnionSkinning");
RNA_def_property_pointer_funcs(prop, "rna_AnimViz_onion_skinning_get", NULL, NULL, NULL);
RNA_def_property_ui_text(prop, "Onion Skinning", "Onion Skinning (ghosting) settings for visualisation");
/* motion path settings (nested struct) */
- prop= RNA_def_property(srna, "motion_paths", PROP_POINTER, PROP_NONE);
+ prop= RNA_def_property(srna, "motion_path", PROP_POINTER, PROP_NONE);
RNA_def_property_flag(prop, PROP_NEVER_NULL);
RNA_def_property_struct_type(prop, "AnimVizMotionPaths");
RNA_def_property_pointer_funcs(prop, "rna_AnimViz_motion_paths_get", NULL, NULL, NULL);
diff --git a/source/blender/makesrna/intern/rna_armature.c b/source/blender/makesrna/intern/rna_armature.c
index 91a78f1a01a..d42cf625898 100644
--- a/source/blender/makesrna/intern/rna_armature.c
+++ b/source/blender/makesrna/intern/rna_armature.c
@@ -24,6 +24,8 @@
#include <stdlib.h>
+#include "BLI_math.h"
+
#include "RNA_define.h"
#include "rna_internal.h"
@@ -37,8 +39,6 @@
#ifdef RNA_RUNTIME
-#include "BLI_math.h"
-
#include "BKE_context.h"
#include "BKE_depsgraph.h"
#include "BKE_idprop.h"
@@ -108,6 +108,12 @@ void rna_Armature_edit_bone_remove(bArmature *arm, ReportList *reports, EditBone
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);
+ return;
+ }
+
ED_armature_edit_bone_remove(arm, ebone);
}
@@ -123,7 +129,7 @@ static char *rna_Bone_path(PointerRNA *ptr)
return BLI_sprintfN("bones[\"%s\"]", ((Bone*)ptr->data)->name);
}
-static IDProperty *rna_Bone_idproperties(PointerRNA *ptr, int create)
+static IDProperty *rna_Bone_idprops(PointerRNA *ptr, int create)
{
Bone *bone= ptr->data;
@@ -135,7 +141,7 @@ static IDProperty *rna_Bone_idproperties(PointerRNA *ptr, int create)
return bone->prop;
}
-static IDProperty *rna_EditBone_idproperties(PointerRNA *ptr, int create)
+static IDProperty *rna_EditBone_idprops(PointerRNA *ptr, int create)
{
EditBone *ebone= ptr->data;
@@ -393,7 +399,7 @@ static void rna_def_bone_common(StructRNA *srna, int editbone)
RNA_def_property_update(prop, 0, "rna_Armature_redraw_data");
/* flags */
- prop= RNA_def_property(srna, "layer", PROP_BOOLEAN, PROP_LAYER_MEMBER);
+ 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);
if(editbone) RNA_def_property_boolean_funcs(prop, NULL, "rna_EditBone_layer_set");
@@ -401,44 +407,44 @@ static void rna_def_bone_common(StructRNA *srna, int editbone)
RNA_def_property_ui_text(prop, "Layers", "Layers bone exists in");
RNA_def_property_update(prop, 0, "rna_Armature_redraw_data");
- prop= RNA_def_property(srna, "connected", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_connect", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", BONE_CONNECTED);
if(editbone) RNA_def_property_boolean_funcs(prop, NULL, "rna_EditBone_connected_set");
else RNA_def_property_clear_flag(prop, PROP_EDITABLE);
RNA_def_property_ui_text(prop, "Connected", "When bone has a parent, bone's head is struck to the parent's tail");
RNA_def_property_update(prop, 0, "rna_Armature_update_data");
- prop= RNA_def_property(srna, "hinge", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_hinge", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", BONE_HINGE);
RNA_def_property_ui_text(prop, "Inherit Rotation", "Bone inherits rotation or scale from parent bone");
RNA_def_property_update(prop, 0, "rna_Armature_update_data");
- prop= RNA_def_property(srna, "multiply_vertexgroup_with_envelope", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_envelope_multiply", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", BONE_MULT_VG_ENV);
RNA_def_property_ui_text(prop, "Multiply Vertex Group with Envelope", "When deforming bone, multiply effects of Vertex Group weights with Envelope influence");
RNA_def_property_update(prop, 0, "rna_Armature_update_data");
- prop= RNA_def_property(srna, "deform", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_deform", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", BONE_NO_DEFORM);
RNA_def_property_ui_text(prop, "Deform", "Bone does not deform any geometry");
RNA_def_property_update(prop, 0, "rna_Armature_update_data");
- prop= RNA_def_property(srna, "inherit_scale", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_inherit_scale", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_ui_text(prop, "Inherit Scale", "Bone inherits scaling from parent bone");
RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", BONE_NO_SCALE);
RNA_def_property_update(prop, 0, "rna_Armature_update_data");
- prop= RNA_def_property(srna, "local_location", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_local_location", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_ui_text(prop, "Local Location", "Bone location is set in local space");
RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", BONE_NO_LOCAL_LOCATION);
RNA_def_property_update(prop, 0, "rna_Armature_update_data");
- prop= RNA_def_property(srna, "draw_wire", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_wire", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", BONE_DRAWWIRE);
RNA_def_property_ui_text(prop, "Draw Wire", "Bone is always drawn as Wireframe regardless of viewport draw mode. Useful for non-obstructive custom bone shapes");
RNA_def_property_update(prop, 0, "rna_Armature_redraw_data");
- prop= RNA_def_property(srna, "cyclic_offset", PROP_BOOLEAN, PROP_NONE);
+ 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");
RNA_def_property_update(prop, 0, "rna_Armature_update_data");
@@ -462,16 +468,18 @@ static void rna_def_bone_common(StructRNA *srna, int editbone)
RNA_def_property_ui_text(prop, "Envelope Deform Weight", "Bone deformation weight (for Envelope deform only)");
RNA_def_property_update(prop, 0, "rna_Armature_update_data");
- prop= RNA_def_property(srna, "head_radius", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "head_radius", PROP_FLOAT, PROP_UNSIGNED);
if(editbone) RNA_def_property_update(prop, 0, "rna_Armature_editbone_transform_update");
RNA_def_property_float_sdna(prop, NULL, "rad_head");
//RNA_def_property_range(prop, 0, 1000); // XXX range is 0 to lim, where lim= 10000.0f*MAX2(1.0, view3d->grid);
+ 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)");
- prop= RNA_def_property(srna, "tail_radius", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "tail_radius", PROP_FLOAT, PROP_UNSIGNED);
if(editbone) RNA_def_property_update(prop, 0, "rna_Armature_editbone_transform_update");
RNA_def_property_float_sdna(prop, NULL, "rad_tail");
//RNA_def_property_range(prop, 0, 1000); // XXX range is 0 to lim, where lim= 10000.0f*MAX2(1.0, view3d->grid);
+ 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 */
@@ -504,7 +512,7 @@ static void rna_def_bone(BlenderRNA *brna)
RNA_def_struct_ui_text(srna, "Bone", "Bone in an Armature datablock");
RNA_def_struct_ui_icon(srna, ICON_BONE_DATA);
RNA_def_struct_path_func(srna, "rna_Bone_path");
- RNA_def_struct_idproperties_func(srna, "rna_Bone_idproperties");
+ RNA_def_struct_idprops_func(srna, "rna_Bone_idprops");
/* pointers/collections */
/* parent (pointer) */
@@ -532,6 +540,16 @@ static void rna_def_bone(BlenderRNA *brna)
RNA_def_property_boolean_sdna(prop, NULL, "flag", BONE_SELECTED);
RNA_def_property_ui_text(prop, "Select", "");
RNA_def_property_update(prop, 0, "rna_Armature_redraw_data");
+
+ prop= RNA_def_property(srna, "select_head", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_sdna(prop, NULL, "flag", BONE_ROOTSEL);
+ RNA_def_property_ui_text(prop, "Select Head", "");
+ RNA_def_property_update(prop, 0, "rna_Armature_redraw_data");
+
+ prop= RNA_def_property(srna, "select_tail", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_sdna(prop, NULL, "flag", BONE_TIPSEL);
+ RNA_def_property_ui_text(prop, "Select Tail", "");
+ RNA_def_property_update(prop, 0, "rna_Armature_redraw_data");
/* XXX better matrix descriptions possible (Arystan) */
prop= RNA_def_property(srna, "matrix", PROP_FLOAT, PROP_MATRIX);
@@ -563,6 +581,8 @@ static void rna_def_bone(BlenderRNA *brna)
RNA_def_property_float_sdna(prop, NULL, "arm_head");
RNA_def_property_array(prop, 3);
RNA_def_property_ui_text(prop, "Armature-Relative Head", "Location of head end of the bone relative to armature");
+
+ RNA_api_bone(srna);
}
static void rna_def_edit_bone(BlenderRNA *brna)
@@ -572,7 +592,7 @@ static void rna_def_edit_bone(BlenderRNA *brna)
srna= RNA_def_struct(brna, "EditBone", NULL);
RNA_def_struct_sdna(srna, "EditBone");
- RNA_def_struct_idproperties_func(srna, "rna_EditBone_idproperties");
+ RNA_def_struct_idprops_func(srna, "rna_EditBone_idprops");
RNA_def_struct_ui_text(srna, "Edit Bone", "Editmode bone in an Armature datablock");
RNA_def_struct_ui_icon(srna, ICON_BONE_DATA);
@@ -585,8 +605,9 @@ static void rna_def_edit_bone(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Parent", "Parent edit bone (in same Armature)");
RNA_def_property_update(prop, 0, "rna_Armature_redraw_data");
- prop= RNA_def_property(srna, "roll", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "roll", PROP_FLOAT, PROP_ANGLE);
RNA_def_property_float_sdna(prop, NULL, "roll");
+ RNA_def_property_ui_range(prop, -M_PI * 2, M_PI * 2, 0.1, 2);
RNA_def_property_ui_text(prop, "Roll", "Bone rotation around head-tail axis");
RNA_def_property_update(prop, 0, "rna_Armature_editbone_transform_update");
@@ -712,7 +733,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);
+ RNA_def_property_flag(parm, PROP_REQUIRED|PROP_NEVER_NULL);
}
static void rna_def_armature(BlenderRNA *brna)
@@ -765,7 +786,8 @@ static void rna_def_armature(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Pose Position", "Show armature in binding pose or final posed state");
RNA_def_property_update(prop, 0, "rna_Armature_update_data");
- prop= RNA_def_property(srna, "drawtype", PROP_ENUM, PROP_NONE);
+ prop= RNA_def_property(srna, "draw_type", PROP_ENUM, PROP_NONE);
+ RNA_def_property_enum_sdna(prop, NULL, "drawtype");
RNA_def_property_enum_items(prop, prop_drawtype_items);
RNA_def_property_ui_text(prop, "Draw Type", "");
RNA_def_property_update(prop, 0, "rna_Armature_redraw_data");
@@ -782,7 +804,7 @@ static void rna_def_armature(BlenderRNA *brna)
/* Boolean values */
/* layer */
- prop= RNA_def_property(srna, "layer", PROP_BOOLEAN, PROP_LAYER_MEMBER);
+ 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");
@@ -791,54 +813,54 @@ static void rna_def_armature(BlenderRNA *brna)
RNA_def_property_flag(prop, PROP_LIB_EXCEPTION);
/* layer protection */
- prop= RNA_def_property(srna, "layer_protection", PROP_BOOLEAN, PROP_LAYER);
+ 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);
RNA_def_property_ui_text(prop, "Layer Proxy Protection", "Protected layers in Proxy Instances are restored to Proxy settings on file reload and undo");
RNA_def_property_update(prop, 0, "rna_Armature_redraw_data");
/* flag */
- prop= RNA_def_property(srna, "draw_axes", PROP_BOOLEAN, PROP_NONE);
+ 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");
RNA_def_property_update(prop, 0, "rna_Armature_redraw_data");
RNA_def_property_flag(prop, PROP_LIB_EXCEPTION);
- prop= RNA_def_property(srna, "draw_names", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_names", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", ARM_DRAWNAMES);
RNA_def_property_ui_text(prop, "Draw Names", "Draw bone names");
RNA_def_property_update(prop, 0, "rna_Armature_redraw_data");
RNA_def_property_flag(prop, PROP_LIB_EXCEPTION);
- prop= RNA_def_property(srna, "delay_deform", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_deform_delay", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", ARM_DELAYDEFORM);
RNA_def_property_ui_text(prop, "Delay Deform", "Don't deform children when manipulating bones in Pose Mode");
RNA_def_property_update(prop, 0, "rna_Armature_update_data");
- prop= RNA_def_property(srna, "x_axis_mirror", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_mirror_x", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", ARM_MIRROR_EDIT);
RNA_def_property_ui_text(prop, "X-Axis Mirror", "Apply changes to matching bone on opposite side of X-Axis");
RNA_def_property_update(prop, 0, "rna_Armature_redraw_data");
RNA_def_property_flag(prop, PROP_LIB_EXCEPTION);
- prop= RNA_def_property(srna, "auto_ik", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_auto_ik", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", ARM_AUTO_IK);
RNA_def_property_ui_text(prop, "Auto IK", "Add temporaral IK constraints while grabbing bones in Pose Mode");
RNA_def_property_update(prop, 0, "rna_Armature_redraw_data");
RNA_def_property_flag(prop, PROP_LIB_EXCEPTION);
- prop= RNA_def_property(srna, "draw_custom_bone_shapes", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_bone_custom_shapes", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", ARM_NO_CUSTOM);
RNA_def_property_ui_text(prop, "Draw Custom Bone Shapes", "Draw bones with their custom shapes");
RNA_def_property_update(prop, 0, "rna_Armature_redraw_data");
- prop= RNA_def_property(srna, "draw_group_colors", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_group_colors", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", ARM_COL_CUSTOM);
RNA_def_property_ui_text(prop, "Draw Bone Group Colors", "Draw bone group colors");
RNA_def_property_update(prop, 0, "rna_Armature_redraw_data");
// XXX depreceated ....... old animviz for armatures only
- prop= RNA_def_property(srna, "ghost_only_selected", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_only_ghost_selected", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", ARM_GHOST_ONLYSEL);
RNA_def_property_ui_text(prop, "Draw Ghosts on Selected Bones Only", "");
RNA_def_property_update(prop, 0, "rna_Armature_redraw_data");
@@ -846,17 +868,17 @@ static void rna_def_armature(BlenderRNA *brna)
// XXX depreceated ....... old animviz for armatures only
/* deformflag */
- prop= RNA_def_property(srna, "deform_vertexgroups", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_deform_vertex_groups", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "deformflag", ARM_DEF_VGROUP);
RNA_def_property_ui_text(prop, "Deform Vertex Groups", "Enable Vertex Groups when defining deform");
RNA_def_property_update(prop, 0, "rna_Armature_update_data");
- prop= RNA_def_property(srna, "deform_envelope", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_deform_envelopes", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "deformflag", ARM_DEF_ENVELOPE);
RNA_def_property_ui_text(prop, "Deform Envelopes", "Enable Bone Envelopes when defining deform");
RNA_def_property_update(prop, 0, "rna_Armature_update_data");
- prop= RNA_def_property(srna, "deform_quaternion", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_deform_preserve_volume", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "deformflag", ARM_DEF_QUATERNION);
RNA_def_property_ui_text(prop, "Use Dual Quaternion Deformation", "Enable deform rotation with Quaternions");
RNA_def_property_update(prop, 0, "rna_Armature_update_data");
diff --git a/source/blender/makesrna/intern/rna_armature_api.c b/source/blender/makesrna/intern/rna_armature_api.c
index cd78bd6e578..4e161e5b22e 100644
--- a/source/blender/makesrna/intern/rna_armature_api.c
+++ b/source/blender/makesrna/intern/rna_armature_api.c
@@ -36,7 +36,7 @@
#include <stddef.h>
#include "BLI_blenlib.h"
-
+#include "BKE_armature.h"
void rna_EditBone_align_roll(EditBone *ebo, float *no)
{
@@ -48,6 +48,12 @@ void rna_EditBone_align_roll(EditBone *ebo, float *no)
}
}
+float rna_Bone_do_envelope(Bone *bone, float *vec)
+{
+ float scale = (bone->flag & BONE_MULT_VG_ENV) == BONE_MULT_VG_ENV ? bone->weight : 1.0f;
+ return distfactor_to_bone(vec, bone->head, bone->tail, bone->rad_head * scale, bone->rad_tail * scale, bone->dist * scale);
+}
+
#else
void RNA_api_armature_edit_bone(StructRNA *srna)
@@ -61,4 +67,18 @@ void RNA_api_armature_edit_bone(StructRNA *srna)
RNA_def_property_flag(parm, PROP_REQUIRED);
}
+void RNA_api_bone(StructRNA *srna)
+{
+ PropertyRNA *parm;
+ FunctionRNA *func;
+
+ 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);
+ 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);
+ RNA_def_function_return(func, parm);
+}
+
#endif
diff --git a/source/blender/makesrna/intern/rna_boid.c b/source/blender/makesrna/intern/rna_boid.c
index 5bc61eaa899..8cd6fcbeff9 100644
--- a/source/blender/makesrna/intern/rna_boid.c
+++ b/source/blender/makesrna/intern/rna_boid.c
@@ -238,7 +238,7 @@ static void rna_def_boidrule_goal(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Object", "Goal object");
RNA_def_property_update(prop, 0, "rna_Boids_reset_deps");
- prop= RNA_def_property(srna, "predict", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_predict", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "options", BRULE_GOAL_AVOID_PREDICT);
RNA_def_property_ui_text(prop, "Predict", "Predict target movement");
RNA_def_property_update(prop, 0, "rna_Boids_reset");
@@ -259,7 +259,7 @@ static void rna_def_boidrule_avoid(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Object", "Object to avoid");
RNA_def_property_update(prop, 0, "rna_Boids_reset_deps");
- prop= RNA_def_property(srna, "predict", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_predict", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "options", BRULE_GOAL_AVOID_PREDICT);
RNA_def_property_ui_text(prop, "Predict", "Predict target movement");
RNA_def_property_update(prop, 0, "rna_Boids_reset");
@@ -278,12 +278,12 @@ static void rna_def_boidrule_avoid_collision(BlenderRNA *brna)
srna= RNA_def_struct(brna, "BoidRuleAvoidCollision", "BoidRule");
RNA_def_struct_ui_text(srna, "Avoid Collision", "");
- prop= RNA_def_property(srna, "boids", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_avoid", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "options", BRULE_ACOLL_WITH_BOIDS);
RNA_def_property_ui_text(prop, "Boids", "Avoid collision with other boids");
RNA_def_property_update(prop, 0, "rna_Boids_reset");
- prop= RNA_def_property(srna, "deflectors", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_avoid_collision", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "options", BRULE_ACOLL_WITH_DEFLECTORS);
RNA_def_property_ui_text(prop, "Deflectors", "Avoid collision with deflector objects");
RNA_def_property_update(prop, 0, "rna_Boids_reset");
@@ -313,12 +313,13 @@ static void rna_def_boidrule_follow_leader(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Distance", "Distance behind leader to follow");
RNA_def_property_update(prop, 0, "rna_Boids_reset");
- prop= RNA_def_property(srna, "queue_size", PROP_INT, PROP_NONE);
+ prop= RNA_def_property(srna, "queue_count", PROP_INT, PROP_NONE);
+ RNA_def_property_int_sdna(prop, NULL, "queue_size");
RNA_def_property_range(prop, 0.0f, 100.0f);
RNA_def_property_ui_text(prop, "Queue Size", "How many boids in a line");
RNA_def_property_update(prop, 0, "rna_Boids_reset");
- prop= RNA_def_property(srna, "line", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_line", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "options", BRULE_LEADER_IN_LINE);
RNA_def_property_ui_text(prop, "Line", "Follow leader in a line");
RNA_def_property_update(prop, 0, "rna_Boids_reset");
@@ -391,17 +392,17 @@ static void rna_def_boidrule(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Type", "");
/* flags */
- prop= RNA_def_property(srna, "in_air", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_in_air", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", BOIDRULE_IN_AIR);
RNA_def_property_ui_text(prop, "In Air", "Use rule when boid is flying");
RNA_def_property_update(prop, 0, "rna_Boids_reset");
- prop= RNA_def_property(srna, "on_land", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_on_land", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", BOIDRULE_ON_LAND);
RNA_def_property_ui_text(prop, "On Land", "Use rule when boid is on land");
RNA_def_property_update(prop, 0, "rna_Boids_reset");
- //prop= RNA_def_property(srna, "expanded", PROP_BOOLEAN, PROP_NONE);
+ //prop= RNA_def_property(srna, "show_expanded", PROP_BOOLEAN, PROP_NONE);
//RNA_def_property_boolean_sdna(prop, NULL, "mode", eModifierMode_Expanded);
//RNA_def_property_ui_text(prop, "Expanded", "Set modifier expanded in the user interface");
@@ -443,7 +444,8 @@ static void rna_def_boidstate(BlenderRNA *brna)
RNA_def_property_int_funcs(prop, "rna_BoidState_active_boid_rule_index_get", "rna_BoidState_active_boid_rule_index_set", "rna_BoidState_active_boid_rule_index_range");
RNA_def_property_ui_text(prop, "Active Boid Rule Index", "");
- prop= RNA_def_property(srna, "rule_fuzziness", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "rule_fuzzy", PROP_FLOAT, PROP_NONE);
+ RNA_def_property_float_sdna(prop, NULL, "rule_fuzziness");
RNA_def_property_range(prop, 0.0, 1.0);
RNA_def_property_ui_text(prop, "Rule Fuzziness", "");
RNA_def_property_update(prop, 0, "rna_Boids_reset");
@@ -466,16 +468,24 @@ static void rna_def_boid_settings(BlenderRNA *brna)
srna = RNA_def_struct(brna, "BoidSettings", NULL);
RNA_def_struct_ui_text(srna, "Boid Settings", "Settings for boid physics");
- prop= RNA_def_property(srna, "landing_smoothness", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "land_smooth", PROP_FLOAT, PROP_NONE);
+ RNA_def_property_float_sdna(prop, NULL, "landing_smoothness");
RNA_def_property_range(prop, 0.0, 10.0);
RNA_def_property_ui_text(prop, "Landing Smoothness", "How smoothly the boids land");
RNA_def_property_update(prop, 0, "rna_Boids_reset");
- prop= RNA_def_property(srna, "banking", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "bank", PROP_FLOAT, PROP_NONE);
+ RNA_def_property_float_sdna(prop, NULL, "banking");
RNA_def_property_range(prop, 0.0, 2.0);
RNA_def_property_ui_text(prop, "Banking", "Amount of rotation around velocity vector on turns");
RNA_def_property_update(prop, 0, "rna_Boids_reset");
+ prop= RNA_def_property(srna, "pitch", PROP_FLOAT, PROP_NONE);
+ RNA_def_property_float_sdna(prop, NULL, "pitch");
+ RNA_def_property_range(prop, 0.0, 2.0);
+ RNA_def_property_ui_text(prop, "Pitch", "Amount of rotation around side vector");
+ RNA_def_property_update(prop, 0, "rna_Boids_reset");
+
prop= RNA_def_property(srna, "height", PROP_FLOAT, PROP_NONE);
RNA_def_property_range(prop, 0.0, 2.0);
RNA_def_property_ui_text(prop, "Height", "Boid height relative to particle size");
@@ -522,22 +532,26 @@ static void rna_def_boid_settings(BlenderRNA *brna)
RNA_def_property_update(prop, 0, "rna_Boids_reset");
/* physical properties */
- prop= RNA_def_property(srna, "air_min_speed", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "air_speed_min", PROP_FLOAT, PROP_NONE);
+ RNA_def_property_float_sdna(prop, NULL, "air_min_speed");
RNA_def_property_range(prop, 0.0, 1.0);
RNA_def_property_ui_text(prop, "Min Air Speed", "Minimum speed in air (relative to maximum speed)");
RNA_def_property_update(prop, 0, "rna_Boids_reset");
- prop= RNA_def_property(srna, "air_max_speed", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "air_speed_max", PROP_FLOAT, PROP_NONE);
+ RNA_def_property_float_sdna(prop, NULL, "air_max_speed");
RNA_def_property_range(prop, 0.0, 100.0);
RNA_def_property_ui_text(prop, "Max Air Speed", "Maximum speed in air");
RNA_def_property_update(prop, 0, "rna_Boids_reset");
- prop= RNA_def_property(srna, "air_max_acc", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "air_acc_max", PROP_FLOAT, PROP_NONE);
+ RNA_def_property_float_sdna(prop, NULL, "air_max_acc");
RNA_def_property_range(prop, 0.0, 1.0);
RNA_def_property_ui_text(prop, "Max Air Acceleration", "Maximum acceleration in air (relative to maximum speed)");
RNA_def_property_update(prop, 0, "rna_Boids_reset");
- prop= RNA_def_property(srna, "air_max_ave", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "air_ave_max", PROP_FLOAT, PROP_NONE);
+ RNA_def_property_float_sdna(prop, NULL, "air_max_ave");
RNA_def_property_range(prop, 0.0, 1.0);
RNA_def_property_ui_text(prop, "Max Air Angular Velocity", "Maximum angular velocity in air (relative to 180 degrees)");
RNA_def_property_update(prop, 0, "rna_Boids_reset");
@@ -552,17 +566,20 @@ static void rna_def_boid_settings(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Jump Speed", "Maximum speed for jumping");
RNA_def_property_update(prop, 0, "rna_Boids_reset");
- prop= RNA_def_property(srna, "land_max_speed", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "land_speed_max", PROP_FLOAT, PROP_NONE);
+ RNA_def_property_float_sdna(prop, NULL, "land_max_speed");
RNA_def_property_range(prop, 0.0, 100.0);
RNA_def_property_ui_text(prop, "Max Land Speed", "Maximum speed on land");
RNA_def_property_update(prop, 0, "rna_Boids_reset");
- prop= RNA_def_property(srna, "land_max_acc", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "land_acc_max", PROP_FLOAT, PROP_NONE);
+ RNA_def_property_float_sdna(prop, NULL, "land_max_acc");
RNA_def_property_range(prop, 0.0, 1.0);
RNA_def_property_ui_text(prop, "Max Land Acceleration", "Maximum acceleration on land (relative to maximum speed)");
RNA_def_property_update(prop, 0, "rna_Boids_reset");
- prop= RNA_def_property(srna, "land_max_ave", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "land_ave_max", PROP_FLOAT, PROP_NONE);
+ RNA_def_property_float_sdna(prop, NULL, "land_max_ave");
RNA_def_property_range(prop, 0.0, 1.0);
RNA_def_property_ui_text(prop, "Max Land Angular Velocity", "Maximum angular velocity on land (relative to 180 degrees)");
RNA_def_property_update(prop, 0, "rna_Boids_reset");
@@ -578,17 +595,17 @@ static void rna_def_boid_settings(BlenderRNA *brna)
RNA_def_property_update(prop, 0, "rna_Boids_reset");
/* options */
- prop= RNA_def_property(srna, "allow_flight", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_flight", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "options", BOID_ALLOW_FLIGHT);
RNA_def_property_ui_text(prop, "Allow Flight", "Allow boids to move in air");
RNA_def_property_update(prop, 0, "rna_Boids_reset");
- prop= RNA_def_property(srna, "allow_land", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_land", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "options", BOID_ALLOW_LAND);
RNA_def_property_ui_text(prop, "Allow Land", "Allow boids to move on land");
RNA_def_property_update(prop, 0, "rna_Boids_reset");
- prop= RNA_def_property(srna, "allow_climb", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_climb", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "options", BOID_ALLOW_CLIMB);
RNA_def_property_ui_text(prop, "Allow Climbing", "Allow boids to climb goal objects");
RNA_def_property_update(prop, 0, "rna_Boids_reset");
diff --git a/source/blender/makesrna/intern/rna_brush.c b/source/blender/makesrna/intern/rna_brush.c
index 3d1cb7c5c2f..83d40a3802b 100644
--- a/source/blender/makesrna/intern/rna_brush.c
+++ b/source/blender/makesrna/intern/rna_brush.c
@@ -403,7 +403,7 @@ static void rna_def_brush(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Stroke Method", "");
RNA_def_property_update(prop, 0, "rna_Brush_update");
- prop= RNA_def_property(srna, "texture_angle_source", PROP_ENUM, PROP_NONE);
+ prop= RNA_def_property(srna, "texture_angle_source_random", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_bitflag_sdna(prop, NULL, "flag");
RNA_def_property_enum_items(prop, texture_angle_source_items);
RNA_def_property_ui_text(prop, "Texture Angle Source", "");
@@ -516,7 +516,7 @@ static void rna_def_brush(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Crease Brush Pinch Factor", "How much the crease brush pinches");
RNA_def_property_update(prop, 0, "rna_Brush_update");
- prop= RNA_def_property(srna, "autosmooth_factor", PROP_FLOAT, PROP_FACTOR);
+ prop= RNA_def_property(srna, "auto_smooth_factor", PROP_FLOAT, PROP_FACTOR);
RNA_def_property_float_sdna(prop, NULL, "autosmooth_factor");
RNA_def_property_float_default(prop, 0);
RNA_def_property_range(prop, 0.0f, 1.0f);
@@ -540,7 +540,7 @@ static void rna_def_brush(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Wrap", "Enable torus wrapping while painting");
RNA_def_property_update(prop, 0, "rna_Brush_update");
- prop= RNA_def_property(srna, "use_strength_pressure", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_pressure_strength", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", BRUSH_ALPHA_PRESSURE);
RNA_def_property_boolean_funcs(prop, "rna_Brush_get_use_alpha_pressure", "rna_Brush_set_use_alpha_pressure");
RNA_def_property_ui_icon(prop, ICON_STYLUS_PRESSURE, 0);
@@ -553,20 +553,20 @@ static void rna_def_brush(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Plane Offset Pressure", "Enable tablet pressure sensitivity for offset");
RNA_def_property_update(prop, 0, "rna_Brush_update");
- prop= RNA_def_property(srna, "use_size_pressure", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_pressure_size", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", BRUSH_SIZE_PRESSURE);
RNA_def_property_boolean_funcs(prop, "rna_Brush_get_use_size_pressure", "rna_Brush_set_use_size_pressure");
RNA_def_property_ui_icon(prop, ICON_STYLUS_PRESSURE, 0);
RNA_def_property_ui_text(prop, "Size Pressure", "Enable tablet pressure sensitivity for size");
RNA_def_property_update(prop, 0, "rna_Brush_update");
- prop= RNA_def_property(srna, "use_jitter_pressure", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_pressure_jitter", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", BRUSH_JITTER_PRESSURE);
RNA_def_property_ui_icon(prop, ICON_STYLUS_PRESSURE, 0);
RNA_def_property_ui_text(prop, "Jitter Pressure", "Enable tablet pressure sensitivity for jitter");
RNA_def_property_update(prop, 0, "rna_Brush_update");
- prop= RNA_def_property(srna, "use_spacing_pressure", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_pressure_spacing", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", BRUSH_SPACING_PRESSURE);
RNA_def_property_ui_icon(prop, ICON_STYLUS_PRESSURE, 0);
RNA_def_property_ui_text(prop, "Spacing Pressure", "Enable tablet pressure sensitivity for spacing");
@@ -645,12 +645,12 @@ static void rna_def_brush(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Use Texture Overlay", "Show texture in viewport");
RNA_def_property_update(prop, 0, "rna_Brush_update");
- prop= RNA_def_property(srna, "edge_to_edge", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_edge_to_edge", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", BRUSH_EDGE_TO_EDGE);
RNA_def_property_ui_text(prop, "Edge-to-edge", "Drag anchor brush from edge-to-edge");
RNA_def_property_update(prop, 0, "rna_Brush_update");
- prop= RNA_def_property(srna, "restore_mesh", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_restore_mesh", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", BRUSH_RESTORE_MESH);
RNA_def_property_ui_text(prop, "Restore Mesh", "Allows a single dot to be carefully positioned");
RNA_def_property_update(prop, 0, "rna_Brush_update");
@@ -708,13 +708,13 @@ static void rna_def_brush(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Texture Overlay Alpha", "");
RNA_def_property_update(prop, 0, "rna_Brush_update");
- prop= RNA_def_property(srna, "add_col", PROP_FLOAT, PROP_COLOR);
+ prop= RNA_def_property(srna, "cursor_color_add", PROP_FLOAT, PROP_COLOR);
RNA_def_property_float_sdna(prop, NULL, "add_col");
RNA_def_property_array(prop, 3);
RNA_def_property_ui_text(prop, "Add Color", "Color of cursor when adding");
RNA_def_property_update(prop, 0, "rna_Brush_update");
- prop= RNA_def_property(srna, "sub_col", PROP_FLOAT, PROP_COLOR);
+ prop= RNA_def_property(srna, "cursor_color_subtract", PROP_FLOAT, PROP_COLOR);
RNA_def_property_float_sdna(prop, NULL, "sub_col");
RNA_def_property_array(prop, 3);
RNA_def_property_ui_text(prop, "Subract Color", "Color of cursor when subtracting");
diff --git a/source/blender/makesrna/intern/rna_camera.c b/source/blender/makesrna/intern/rna_camera.c
index 3b32030f752..9d82c472882 100644
--- a/source/blender/makesrna/intern/rna_camera.c
+++ b/source/blender/makesrna/intern/rna_camera.c
@@ -172,7 +172,7 @@ void RNA_def_camera(BlenderRNA *brna)
RNA_def_property_enum_items(prop, prop_lens_unit_items);
RNA_def_property_ui_text(prop, "Lens Unit", "Unit to edit lens in for the user interface");
- prop= RNA_def_property(srna, "panorama", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_panorama", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", CAM_PANORAMA);
RNA_def_property_ui_text(prop, "Panorama", "Render the scene with a cylindrical camera for pseudo-fisheye lens effects");
RNA_def_property_update(prop, NC_OBJECT|ND_DRAW, NULL);
diff --git a/source/blender/makesrna/intern/rna_cloth.c b/source/blender/makesrna/intern/rna_cloth.c
index 58ecb78d3b8..71e95248512 100644
--- a/source/blender/makesrna/intern/rna_cloth.c
+++ b/source/blender/makesrna/intern/rna_cloth.c
@@ -253,7 +253,7 @@ static void rna_def_cloth_sim_settings(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Mass", "Mass of cloth material");
RNA_def_property_update(prop, 0, "rna_cloth_update");
- prop= RNA_def_property(srna, "mass_vertex_group", PROP_STRING, PROP_NONE);
+ prop= RNA_def_property(srna, "vertex_group_mass", PROP_STRING, PROP_NONE);
RNA_def_property_string_funcs(prop, "rna_ClothSettings_mass_vgroup_get", "rna_ClothSettings_mass_vgroup_length", "rna_ClothSettings_mass_vgroup_set");
RNA_def_property_ui_text(prop, "Mass Vertex Group", "Vertex Group for pinning of vertices");
RNA_def_property_update(prop, 0, "rna_cloth_update");
@@ -273,7 +273,7 @@ static void rna_def_cloth_sim_settings(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Air Damping", "Air has normally some thickness which slows falling things down");
RNA_def_property_update(prop, 0, "rna_cloth_update");
- prop= RNA_def_property(srna, "pin_cloth", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_pin_cloth", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flags", CLOTH_SIMSETTINGS_FLAG_GOAL);
RNA_def_property_ui_text(prop, "Pin Cloth", "Enable pinning of cloth vertices to other objects/positions");
RNA_def_property_update(prop, 0, "rna_cloth_update");
@@ -292,7 +292,7 @@ static void rna_def_cloth_sim_settings(BlenderRNA *brna)
/* springs */
- prop= RNA_def_property(srna, "stiffness_scaling", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_stiffness_scale", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flags", CLOTH_SIMSETTINGS_FLAG_SCALING);
RNA_def_property_ui_text(prop, "Stiffness Scaling", "If enabled, stiffness can be scaled along a weight painted vertex group");
RNA_def_property_update(prop, 0, "rna_cloth_update");
@@ -316,7 +316,7 @@ static void rna_def_cloth_sim_settings(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Structural Stiffness Maximum", "Maximum structural stiffness value");
RNA_def_property_update(prop, 0, "rna_cloth_update");
- prop= RNA_def_property(srna, "structural_stiffness_vertex_group", PROP_STRING, PROP_NONE);
+ prop= RNA_def_property(srna, "vertex_group_structural_stiffness", PROP_STRING, PROP_NONE);
RNA_def_property_string_funcs(prop, "rna_ClothSettings_struct_vgroup_get", "rna_ClothSettings_struct_vgroup_length", "rna_ClothSettings_struct_vgroup_set");
RNA_def_property_ui_text(prop, "Structural Stiffness Vertex Group", "Vertex group for fine control over structural stiffness");
RNA_def_property_update(prop, 0, "rna_cloth_update");
@@ -334,7 +334,7 @@ static void rna_def_cloth_sim_settings(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Bending Stiffness Maximum", "Maximum bending stiffness value");
RNA_def_property_update(prop, 0, "rna_cloth_update");
- prop= RNA_def_property(srna, "bending_vertex_group", PROP_STRING, PROP_NONE);
+ prop= RNA_def_property(srna, "vertex_group_bending", PROP_STRING, PROP_NONE);
RNA_def_property_string_funcs(prop, "rna_ClothSettings_bend_vgroup_get", "rna_ClothSettings_bend_vgroup_length", "rna_ClothSettings_bend_vgroup_set");
RNA_def_property_ui_text(prop, "Bending Stiffness Vertex Group", "Vertex group for fine control over bending stiffness");
RNA_def_property_update(prop, 0, "rna_cloth_update");
@@ -407,12 +407,12 @@ static void rna_def_cloth_collision_settings(BlenderRNA *brna)
/* general collision */
- prop= RNA_def_property(srna, "enable_collision", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_collision", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flags", CLOTH_COLLSETTINGS_FLAG_ENABLED);
RNA_def_property_ui_text(prop, "Enable Collision", "Enable collisions with other objects");
RNA_def_property_update(prop, 0, "rna_cloth_update");
- prop= RNA_def_property(srna, "min_distance", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "distance_min", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "epsilon");
RNA_def_property_range(prop, 0.001f, 1.0f);
RNA_def_property_ui_text(prop, "Minimum Distance", "Minimum distance between collision objects before collision response takes in");
@@ -431,12 +431,12 @@ static void rna_def_cloth_collision_settings(BlenderRNA *brna)
/* self collision */
- prop= RNA_def_property(srna, "enable_self_collision", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_self_collision", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flags", CLOTH_COLLSETTINGS_FLAG_SELF);
RNA_def_property_ui_text(prop, "Enable Self Collision", "Enable self collisions");
RNA_def_property_update(prop, 0, "rna_cloth_update");
- prop= RNA_def_property(srna, "self_min_distance", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "self_distance_min", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "selfepsilon");
RNA_def_property_range(prop, 0.5f, 1.0f);
RNA_def_property_ui_text(prop, "Self Minimum Distance", "0.5 means no distance at all, 1.0 is maximum distance");
diff --git a/source/blender/makesrna/intern/rna_color.c b/source/blender/makesrna/intern/rna_color.c
index 077b8ffe199..509fecb0122 100644
--- a/source/blender/makesrna/intern/rna_color.c
+++ b/source/blender/makesrna/intern/rna_color.c
@@ -370,7 +370,7 @@ static void rna_def_curvemapping(BlenderRNA *brna)
srna= RNA_def_struct(brna, "CurveMapping", NULL);
RNA_def_struct_ui_text(srna, "CurveMapping", "Curve mapping to map color, vector and scalar values to other values using a user defined curve");
- prop= RNA_def_property(srna, "clip", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_clip", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", CUMA_DO_CLIP);
RNA_def_property_ui_text(prop, "Clip", "Force the curve view to fit a defined boundary");
RNA_def_property_boolean_funcs(prop, NULL, "rna_CurveMapping_clip_set");
@@ -433,7 +433,7 @@ static void rna_def_color_ramp_element(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Color", "");
RNA_def_property_update(prop, 0, "rna_ColorRamp_update");
- prop= RNA_def_property(srna, "position", PROP_FLOAT, PROP_COLOR);
+ prop= RNA_def_property(srna, "position", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "pos");
RNA_def_property_range(prop, 0, 1);
RNA_def_property_ui_text(prop, "Position", "");
@@ -465,9 +465,8 @@ static void rna_def_color_ramp_element_api(BlenderRNA *brna, PropertyRNA *cprop)
func = RNA_def_function(srna, "remove", "rna_ColorRampElement_remove");
RNA_def_function_ui_description(func, "Delete element from ColorRamp");
RNA_def_function_flag(func, FUNC_USE_REPORTS);
- //parm= RNA_def_int(func, "index", 0, 0, 31, "Index", "Element to delete.", 0, 31);
parm= RNA_def_pointer(func, "element", "ColorRampElement", "", "Element to remove.");
- RNA_def_property_flag(parm, PROP_REQUIRED);
+ RNA_def_property_flag(parm, PROP_REQUIRED|PROP_NEVER_NULL);
}
static void rna_def_color_ramp(BlenderRNA *brna)
@@ -502,6 +501,7 @@ static void rna_def_color_ramp(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Interpolation", "");
RNA_def_property_update(prop, 0, "rna_ColorRamp_update");
+#if 0 // use len(elements)
prop= RNA_def_property(srna, "total", PROP_INT, PROP_NONE);
RNA_def_property_int_sdna(prop, NULL, "tot");
/* needs a function to do the right thing when adding elements like colorband_add_cb() */
@@ -509,7 +509,8 @@ static void rna_def_color_ramp(BlenderRNA *brna)
RNA_def_property_range(prop, 0, 31); /* MAXCOLORBAND = 32 */
RNA_def_property_ui_text(prop, "Total", "Total number of elements");
RNA_def_property_update(prop, 0, "rna_ColorRamp_update");
-
+#endif
+
func = RNA_def_function(srna, "evaluate", "rna_ColorRamp_eval");
RNA_def_function_ui_description(func, "Evaluate ColorRamp");
prop= RNA_def_float(func, "position", 1.0f, 0.0f, 1.0f, "Position", "Evaluate ColorRamp at position", 0.0f, 1.0f);
@@ -526,7 +527,7 @@ static void rna_def_histogram(BlenderRNA *brna)
PropertyRNA *prop;
static EnumPropertyItem prop_mode_items[] = {
- {HISTO_MODE_LUMA, "Luma", ICON_COLOR, "Luma", ""},
+ {HISTO_MODE_LUMA, "LUMA", ICON_COLOR, "Luma", ""},
{HISTO_MODE_RGB, "RGB", ICON_COLOR, "Red Green Blue", ""},
{HISTO_MODE_R, "R", ICON_COLOR, "Red", ""},
{HISTO_MODE_G, "G", ICON_COLOR, "Green", ""},
diff --git a/source/blender/makesrna/intern/rna_constraint.c b/source/blender/makesrna/intern/rna_constraint.c
index 566e6fc0b83..e4726f5e92c 100644
--- a/source/blender/makesrna/intern/rna_constraint.c
+++ b/source/blender/makesrna/intern/rna_constraint.c
@@ -437,7 +437,7 @@ static void rna_def_constraint_python(BlenderRNA *brna)
RNA_def_property_struct_type(prop, "ConstraintTarget");
RNA_def_property_ui_text(prop, "Targets", "Target Objects");
- prop= RNA_def_property(srna, "number_of_targets", PROP_INT, PROP_NONE);
+ 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");
@@ -452,7 +452,7 @@ static void rna_def_constraint_python(BlenderRNA *brna)
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");
- prop= RNA_def_property(srna, "script_error", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "has_script_error", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", PYCON_SCRIPTERROR);
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
RNA_def_property_ui_text(prop, "Script Error", "The linked Python script has thrown an error");
@@ -510,7 +510,7 @@ static void rna_def_constraint_kinematic(BlenderRNA *brna)
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");
- prop= RNA_def_property(srna, "chain_length", PROP_INT, PROP_NONE);
+ 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");
@@ -521,28 +521,28 @@ static void rna_def_constraint_kinematic(BlenderRNA *brna)
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");
- prop= RNA_def_property(srna, "axis_reference", PROP_ENUM, PROP_NONE);
+ 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");
- prop= RNA_def_property(srna, "use_position", PROP_BOOLEAN, PROP_NONE);
+ 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");
- prop= RNA_def_property(srna, "pos_lock_x", PROP_BOOLEAN, PROP_NONE);
+ 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");
- prop= RNA_def_property(srna, "pos_lock_y", PROP_BOOLEAN, PROP_NONE);
+ 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");
- prop= RNA_def_property(srna, "pos_lock_z", PROP_BOOLEAN, PROP_NONE);
+ 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");
@@ -552,17 +552,17 @@ static void rna_def_constraint_kinematic(BlenderRNA *brna)
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");
- prop= RNA_def_property(srna, "rot_lock_x", PROP_BOOLEAN, PROP_NONE);
+ 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");
- prop= RNA_def_property(srna, "rot_lock_y", PROP_BOOLEAN, PROP_NONE);
+ 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");
- prop= RNA_def_property(srna, "rot_lock_z", PROP_BOOLEAN, PROP_NONE);
+ 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");
@@ -638,19 +638,19 @@ static void rna_def_constraint_track_to(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Sub-Target", "");
RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
- prop= RNA_def_property(srna, "track", PROP_ENUM, PROP_NONE);
+ 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");
- prop= RNA_def_property(srna, "up", PROP_ENUM, PROP_NONE);
+ 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");
- prop= RNA_def_property(srna, "target_z", PROP_BOOLEAN, PROP_NONE);
+ 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");
@@ -832,7 +832,7 @@ static void rna_def_constraint_same_volume(BlenderRNA *brna)
RNA_def_struct_ui_text(srna, "Maintain Volume Constraint", "Maintains a constant volume along a single scaling axis");
RNA_def_struct_sdna_from(srna, "bSameVolumeConstraint", "data");
- prop= RNA_def_property(srna, "axis", PROP_ENUM, PROP_NONE);
+ prop= RNA_def_property(srna, "free_axis", PROP_ENUM, PROP_NONE);
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");
@@ -906,7 +906,7 @@ static void rna_def_constraint_minmax(BlenderRNA *brna)
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");
- prop= RNA_def_property(srna, "sticky", PROP_BOOLEAN, PROP_NONE);
+ 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");
@@ -978,14 +978,14 @@ static void rna_def_constraint_action(BlenderRNA *brna)
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");
- prop= RNA_def_property(srna, "maximum", PROP_FLOAT, PROP_NONE);
+ 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_float_funcs(prop, NULL, NULL, "rna_ActionConstraint_minmax_range");
- prop= RNA_def_property(srna, "minimum", PROP_FLOAT, PROP_NONE);
+ 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");
@@ -1028,13 +1028,13 @@ static void rna_def_constraint_locked_track(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Sub-Target", "");
RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
- prop= RNA_def_property(srna, "track", PROP_ENUM, PROP_NONE);
+ 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");
- prop= RNA_def_property(srna, "lock", PROP_ENUM, PROP_NONE);
+ 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");
@@ -1083,13 +1083,13 @@ static void rna_def_constraint_follow_path(BlenderRNA *brna)
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");
- prop= RNA_def_property(srna, "forward", PROP_ENUM, PROP_NONE);
+ 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");
- prop= RNA_def_property(srna, "up", PROP_ENUM, PROP_NONE);
+ 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");
@@ -1100,7 +1100,7 @@ static void rna_def_constraint_follow_path(BlenderRNA *brna)
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");
- prop= RNA_def_property(srna, "use_fixed_position", PROP_BOOLEAN, PROP_NONE);
+ 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");
@@ -1161,7 +1161,7 @@ static void rna_def_constraint_stretch_to(BlenderRNA *brna)
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");
- prop= RNA_def_property(srna, "original_length", PROP_FLOAT, PROP_DISTANCE);
+ 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");
@@ -1246,12 +1246,12 @@ static void rna_def_constraint_rigid_body_joint(BlenderRNA *brna)
//float minLimit[6];
//float maxLimit[6];
- prop= RNA_def_property(srna, "disable_linked_collision", PROP_BOOLEAN, PROP_NONE);
+ 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");
- prop= RNA_def_property(srna, "draw_pivot", PROP_BOOLEAN, PROP_NONE);
+ 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");
@@ -1286,7 +1286,7 @@ static void rna_def_constraint_clamp_to(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Main Axis", "Main axis of movement");
RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
- prop= RNA_def_property(srna, "cyclic", PROP_BOOLEAN, PROP_NONE);
+ 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");
@@ -1354,7 +1354,7 @@ static void rna_def_constraint_transform(BlenderRNA *brna)
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");
- prop= RNA_def_property(srna, "extrapolate_motion", PROP_BOOLEAN, PROP_NONE);
+ 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");
@@ -1441,73 +1441,73 @@ static void rna_def_constraint_location_limit(BlenderRNA *brna)
RNA_def_struct_ui_text(srna, "Limit Location Constraint", "Limits the location of the constrained object");
RNA_def_struct_sdna_from(srna, "bLocLimitConstraint", "data");
- prop= RNA_def_property(srna, "use_minimum_x", PROP_BOOLEAN, PROP_NONE);
+ 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");
- prop= RNA_def_property(srna, "use_minimum_y", PROP_BOOLEAN, PROP_NONE);
+ 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");
- prop= RNA_def_property(srna, "use_minimum_z", PROP_BOOLEAN, PROP_NONE);
+ 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");
- prop= RNA_def_property(srna, "use_maximum_x", PROP_BOOLEAN, PROP_NONE);
+ 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");
- prop= RNA_def_property(srna, "use_maximum_y", PROP_BOOLEAN, PROP_NONE);
+ 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");
- prop= RNA_def_property(srna, "use_maximum_z", PROP_BOOLEAN, PROP_NONE);
+ 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");
- prop= RNA_def_property(srna, "minimum_x", PROP_FLOAT, PROP_DISTANCE);
+ 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");
- prop= RNA_def_property(srna, "minimum_y", PROP_FLOAT, PROP_DISTANCE);
+ 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");
- prop= RNA_def_property(srna, "minimum_z", PROP_FLOAT, PROP_DISTANCE);
+ 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");
- prop= RNA_def_property(srna, "maximum_x", PROP_FLOAT, PROP_DISTANCE);
+ 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");
- prop= RNA_def_property(srna, "maximum_y", PROP_FLOAT, PROP_DISTANCE);
+ 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");
- prop= RNA_def_property(srna, "maximum_z", PROP_FLOAT, PROP_DISTANCE);
+ 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");
- prop= RNA_def_property(srna, "limit_transform", PROP_BOOLEAN, PROP_NONE);
+ 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");
@@ -1537,43 +1537,43 @@ static void rna_def_constraint_rotation_limit(BlenderRNA *brna)
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");
- prop= RNA_def_property(srna, "minimum_x", PROP_FLOAT, PROP_ANGLE);
+ 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");
- prop= RNA_def_property(srna, "minimum_y", PROP_FLOAT, PROP_ANGLE);
+ 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");
- prop= RNA_def_property(srna, "minimum_z", PROP_FLOAT, PROP_ANGLE);
+ 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");
- prop= RNA_def_property(srna, "maximum_x", PROP_FLOAT, PROP_ANGLE);
+ 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");
- prop= RNA_def_property(srna, "maximum_y", PROP_FLOAT, PROP_ANGLE);
+ 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");
- prop= RNA_def_property(srna, "maximum_z", PROP_FLOAT, PROP_ANGLE);
+ 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");
- prop= RNA_def_property(srna, "limit_transform", PROP_BOOLEAN, PROP_NONE);
+ 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");
@@ -1588,73 +1588,73 @@ static void rna_def_constraint_size_limit(BlenderRNA *brna)
RNA_def_struct_ui_text(srna, "Limit Size Constraint", "Limits the scaling of the constrained object");
RNA_def_struct_sdna_from(srna, "bSizeLimitConstraint", "data");
- prop= RNA_def_property(srna, "use_minimum_x", PROP_BOOLEAN, PROP_NONE);
+ 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");
- prop= RNA_def_property(srna, "use_minimum_y", PROP_BOOLEAN, PROP_NONE);
+ 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");
- prop= RNA_def_property(srna, "use_minimum_z", PROP_BOOLEAN, PROP_NONE);
+ 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");
- prop= RNA_def_property(srna, "use_maximum_x", PROP_BOOLEAN, PROP_NONE);
+ 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");
- prop= RNA_def_property(srna, "use_maximum_y", PROP_BOOLEAN, PROP_NONE);
+ 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");
- prop= RNA_def_property(srna, "use_maximum_z", PROP_BOOLEAN, PROP_NONE);
+ 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");
- prop= RNA_def_property(srna, "minimum_x", PROP_FLOAT, PROP_NONE);
+ 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");
- prop= RNA_def_property(srna, "minimum_y", PROP_FLOAT, PROP_NONE);
+ 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");
- prop= RNA_def_property(srna, "minimum_z", PROP_FLOAT, PROP_NONE);
+ 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");
- prop= RNA_def_property(srna, "maximum_x", PROP_FLOAT, PROP_NONE);
+ 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");
- prop= RNA_def_property(srna, "maximum_y", PROP_FLOAT, PROP_NONE);
+ 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");
- prop= RNA_def_property(srna, "maximum_z", PROP_FLOAT, PROP_NONE);
+ 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");
- prop= RNA_def_property(srna, "limit_transform", PROP_BOOLEAN, PROP_NONE);
+ 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");
@@ -1772,7 +1772,7 @@ static void rna_def_constraint_damped_track(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Sub-Target", "");
RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
- prop= RNA_def_property(srna, "track", PROP_ENUM, PROP_NONE);
+ 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");
@@ -1801,7 +1801,7 @@ static void rna_def_constraint_spline_ik(BlenderRNA *brna)
RNA_def_property_flag(prop, PROP_EDITABLE);
RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
- prop= RNA_def_property(srna, "chain_length", PROP_INT, PROP_NONE);
+ prop= RNA_def_property(srna, "chain_count", PROP_INT, PROP_NONE);
RNA_def_property_int_sdna(prop, NULL, "chainlen");
RNA_def_property_range(prop, 1, 255); // TODO: this should really check the max length of the chain the constraint is attached to
RNA_def_property_ui_text(prop, "Chain Length", "How many bones are included in the chain");
@@ -1818,17 +1818,17 @@ static void rna_def_constraint_spline_ik(BlenderRNA *brna)
RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
/* settings */
- prop= RNA_def_property(srna, "chain_offset", PROP_BOOLEAN, PROP_NONE);
+ 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");
- prop= RNA_def_property(srna, "even_divisions", PROP_BOOLEAN, PROP_NONE);
+ 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");
- prop= RNA_def_property(srna, "y_stretch", PROP_BOOLEAN, PROP_NONE);
+ 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");
@@ -1838,7 +1838,7 @@ static void rna_def_constraint_spline_ik(BlenderRNA *brna)
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");
- prop= RNA_def_property(srna, "xz_scaling_mode", PROP_ENUM, PROP_NONE);
+ 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");
@@ -1883,7 +1883,7 @@ static void rna_def_constraint_pivot(BlenderRNA *brna)
RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update");
/* pivot offset */
- prop= RNA_def_property(srna, "use_relative_position", PROP_BOOLEAN, PROP_NONE);
+ 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");
@@ -1894,7 +1894,7 @@ static void rna_def_constraint_pivot(BlenderRNA *brna)
RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update");
/* rotation-based activation */
- prop= RNA_def_property(srna, "enabled_rotation_range", PROP_ENUM, PROP_NONE);
+ 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");
@@ -1919,6 +1919,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);
/* enums */
prop= RNA_def_property(srna, "type", PROP_ENUM, PROP_NONE);
@@ -1940,19 +1941,19 @@ void RNA_def_constraint(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Target Space", "Space that target is evaluated in");
/* flags */
- prop= RNA_def_property(srna, "enabled", PROP_BOOLEAN, PROP_NONE);
- RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", CONSTRAINT_OFF);
- RNA_def_property_ui_text(prop, "Enabled", "Enable/Disable Constraint");
+ prop= RNA_def_property(srna, "mute", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_sdna(prop, NULL, "flag", CONSTRAINT_OFF);
+ RNA_def_property_ui_text(prop, "Disable", "Enable/Disable Constraint");
- prop= RNA_def_property(srna, "expanded", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_expanded", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", CONSTRAINT_EXPAND);
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...
- prop= RNA_def_property(srna, "disabled", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "is_valid", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
- RNA_def_property_boolean_sdna(prop, NULL, "flag", CONSTRAINT_DISABLE);
+ RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", CONSTRAINT_DISABLE);
RNA_def_property_ui_text(prop, "Disabled", "Constraint has invalid settings and will not be evaluated");
// TODO: setting this to true must ensure that all others in stack are turned off too...
@@ -1960,7 +1961,7 @@ void RNA_def_constraint(BlenderRNA *brna)
RNA_def_property_boolean_sdna(prop, NULL, "flag", CONSTRAINT_ACTIVE);
RNA_def_property_ui_text(prop, "Active", "Constraint is the one being edited ");
- prop= RNA_def_property(srna, "proxy_local", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "is_proxy_local", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", CONSTRAINT_PROXY_LOCAL);
RNA_def_property_ui_text(prop, "Proxy Local", "Constraint was added in this proxy instance (i.e. did not belong to source Armature)");
@@ -1972,12 +1973,12 @@ void RNA_def_constraint(BlenderRNA *brna)
RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_influence_update");
/* readonly values */
- prop= RNA_def_property(srna, "lin_error", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "error_location", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "lin_error");
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
RNA_def_property_ui_text(prop, "Lin error", "Amount of residual error in Blender space unit for constraints that work on position");
- prop= RNA_def_property(srna, "rot_error", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "error_rotation", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "rot_error");
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
RNA_def_property_ui_text(prop, "Rot error", "Amount of residual error in radiant for constraints that work on orientation");
diff --git a/source/blender/makesrna/intern/rna_context.c b/source/blender/makesrna/intern/rna_context.c
index bb886f39f1c..ebe0e363b26 100644
--- a/source/blender/makesrna/intern/rna_context.c
+++ b/source/blender/makesrna/intern/rna_context.c
@@ -76,18 +76,24 @@ static PointerRNA rna_Context_region_get(PointerRNA *ptr)
return newptr;
}
-/*static PointerRNA rna_Context_region_data_get(PointerRNA *ptr)
+static PointerRNA rna_Context_region_data_get(PointerRNA *ptr)
{
bContext *C= (bContext*)ptr->data;
- PointerRNA newptr;
- RNA_pointer_create((ID*)CTX_wm_screen(C), &RNA_RegionData, CTX_wm_region_data(C), &newptr);
- return newptr;
-}*/
+
+ /* 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);
+ return newptr;
+ }
+
+ return PointerRNA_NULL;
+}
static PointerRNA rna_Context_main_get(PointerRNA *ptr)
{
bContext *C= (bContext*)ptr->data;
- return rna_pointer_inherit_refine(ptr, &RNA_Main, CTX_data_main(C));
+ return rna_pointer_inherit_refine(ptr, &RNA_BlendData, CTX_data_main(C));
}
static PointerRNA rna_Context_scene_get(PointerRNA *ptr)
@@ -145,7 +151,7 @@ void RNA_def_context(BlenderRNA *brna)
RNA_def_struct_sdna(srna, "bContext");
/* WM */
- prop= RNA_def_property(srna, "manager", PROP_POINTER, PROP_NONE);
+ prop= RNA_def_property(srna, "window_manager", PROP_POINTER, PROP_NONE);
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
RNA_def_property_struct_type(prop, "WindowManager");
RNA_def_property_pointer_funcs(prop, "rna_Context_manager_get", NULL, NULL, NULL);
@@ -175,15 +181,15 @@ void RNA_def_context(BlenderRNA *brna)
RNA_def_property_struct_type(prop, "Region");
RNA_def_property_pointer_funcs(prop, "rna_Context_region_get", NULL, NULL, NULL);
- /*prop= RNA_def_property(srna, "region_data", PROP_POINTER, PROP_NONE);
+ prop= RNA_def_property(srna, "region_data", PROP_POINTER, PROP_NONE);
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
- RNA_def_property_struct_type(prop, "RegionData");
- RNA_def_property_pointer_funcs(prop, "rna_Context_region_data_get", NULL, NULL, NULL);*/
+ RNA_def_property_struct_type(prop, "RegionView3D");
+ RNA_def_property_pointer_funcs(prop, "rna_Context_region_data_get", NULL, NULL, NULL);
/* Data */
- prop= RNA_def_property(srna, "main", PROP_POINTER, PROP_NONE);
+ prop= RNA_def_property(srna, "blend_data", PROP_POINTER, PROP_NONE);
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
- RNA_def_property_struct_type(prop, "Main");
+ RNA_def_property_struct_type(prop, "BlendData");
RNA_def_property_pointer_funcs(prop, "rna_Context_main_get", NULL, NULL, NULL);
prop= RNA_def_property(srna, "scene", PROP_POINTER, PROP_NONE);
diff --git a/source/blender/makesrna/intern/rna_controller.c b/source/blender/makesrna/intern/rna_controller.c
index c5a57971001..ee0707ad0ae 100644
--- a/source/blender/makesrna/intern/rna_controller.c
+++ b/source/blender/makesrna/intern/rna_controller.c
@@ -170,13 +170,13 @@ void RNA_def_controller(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Type", "");
RNA_def_property_update(prop, NC_LOGIC, NULL);
- prop= RNA_def_property(srna, "expanded", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_expanded", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", CONT_SHOW);
RNA_def_property_ui_text(prop, "Expanded", "Set controller expanded in the user interface");
RNA_def_property_ui_icon(prop, ICON_TRIA_RIGHT, 1);
RNA_def_property_update(prop, NC_LOGIC, NULL);
- prop= RNA_def_property(srna, "priority", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_priority", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", CONT_PRIO);
RNA_def_property_ui_text(prop, "Priority", "Mark controller for execution before all non-marked controllers (good for startup scripts)");
RNA_def_property_ui_icon(prop, ICON_BOOKMARKS, 1);
@@ -185,7 +185,7 @@ void RNA_def_controller(BlenderRNA *brna)
/* State */
// array of OB_MAX_STATES
- //prop= RNA_def_property(srna, "state", PROP_BOOLEAN, PROP_LAYER_MEMBER);
+ //prop= RNA_def_property(srna, "states", PROP_BOOLEAN, PROP_LAYER_MEMBER);
//RNA_def_property_array(prop, OB_MAX_STATES);
//RNA_def_property_clear_flag(prop, PROP_EDITABLE);
//RNA_def_property_ui_text(prop, "", "Set Controller state index (1 to 30)");
@@ -193,7 +193,7 @@ void RNA_def_controller(BlenderRNA *brna)
//RNA_def_property_update(prop, NC_LOGIC, NULL);
// number of the state
- prop= RNA_def_property(srna, "state", PROP_INT, PROP_UNSIGNED);
+ prop= RNA_def_property(srna, "states", PROP_INT, PROP_UNSIGNED);
RNA_def_property_int_sdna(prop, NULL, "state_mask");
RNA_def_property_range(prop, 1, OB_MAX_STATES);
RNA_def_property_ui_text(prop, "", "Set Controller state index (1 to 30)");
@@ -231,7 +231,7 @@ void RNA_def_controller(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Module", "Module name and function to run e.g. \"someModule.main\". Internal texts and external python files can be used");
RNA_def_property_update(prop, NC_LOGIC, NULL);
- prop= RNA_def_property(srna, "debug", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_debug", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", CONT_PY_DEBUG);
RNA_def_property_ui_text(prop, "D", "Continuously reload the module from disk for editing external modules without restarting");
RNA_def_property_update(prop, NC_LOGIC, NULL);
diff --git a/source/blender/makesrna/intern/rna_curve.c b/source/blender/makesrna/intern/rna_curve.c
index eea3c9c7679..e28212470c3 100644
--- a/source/blender/makesrna/intern/rna_curve.c
+++ b/source/blender/makesrna/intern/rna_curve.c
@@ -29,6 +29,7 @@
#include "rna_internal.h"
#include "DNA_curve_types.h"
+#include "DNA_key_types.h"
#include "DNA_material_types.h"
#include "DNA_scene_types.h"
@@ -355,6 +356,18 @@ static void rna_Curve_resolution_v_update_data(Main *bmain, Scene *scene, Pointe
rna_Curve_update_data(bmain, scene, ptr);
}
+static float rna_Curve_offset_get(PointerRNA *ptr)
+{
+ 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;
+ cu->width= 1.0f + value;
+}
+
/* name functions that ignore the first two ID characters */
void rna_Curve_body_get(PointerRNA *ptr, char *value)
{
@@ -481,7 +494,6 @@ static Nurb *rna_Curve_spline_new(Curve *cu, int type)
static void rna_Curve_spline_remove(Curve *cu, ReportList *reports, Nurb *nu)
{
- /* todo, check we're in the list */
int found= 0;
ListBase *nurbs= BKE_curve_nurbs(cu);
@@ -622,20 +634,20 @@ static void rna_def_beztriple(BlenderRNA *brna)
RNA_def_property_update(prop, 0, "rna_Curve_update_data");
/* Enums */
- prop= RNA_def_property(srna, "handle1_type", PROP_ENUM, PROP_NONE);
+ 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, beztriple_handle_type_items);
RNA_def_property_ui_text(prop, "Handle 1 Type", "Handle types");
RNA_def_property_update(prop, 0, "rna_Curve_update_data");
- prop= RNA_def_property(srna, "handle2_type", PROP_ENUM, PROP_NONE);
+ 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, beztriple_handle_type_items);
RNA_def_property_ui_text(prop, "Handle 2 Type", "Handle types");
RNA_def_property_update(prop, 0, "rna_Curve_update_data");
/* Vector values */
- prop= RNA_def_property(srna, "handle1", PROP_FLOAT, PROP_TRANSLATION);
+ prop= RNA_def_property(srna, "handle_left", PROP_FLOAT, PROP_TRANSLATION);
RNA_def_property_array(prop, 3);
RNA_def_property_float_funcs(prop, "rna_BezTriple_handle1_get", "rna_BezTriple_handle1_set", NULL);
RNA_def_property_ui_text(prop, "Handle 1", "Coordinates of the first handle");
@@ -647,7 +659,7 @@ static void rna_def_beztriple(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Control Point", "Coordinates of the control point");
RNA_def_property_update(prop, 0, "rna_Curve_update_data");
- prop= RNA_def_property(srna, "handle2", PROP_FLOAT, PROP_TRANSLATION);
+ prop= RNA_def_property(srna, "handle_right", PROP_FLOAT, PROP_TRANSLATION);
RNA_def_property_array(prop, 3);
RNA_def_property_float_funcs(prop, "rna_BezTriple_handle2_get", "rna_BezTriple_handle2_set", NULL);
RNA_def_property_ui_text(prop, "Handle 2", "Coordinates of the second handle");
@@ -678,7 +690,7 @@ static void rna_def_path(BlenderRNA *brna, StructRNA *srna)
PropertyRNA *prop;
/* number values */
- prop= RNA_def_property(srna, "path_length", PROP_INT, PROP_NONE);
+ prop= RNA_def_property(srna, "path_duration", PROP_INT, PROP_NONE);
RNA_def_property_int_sdna(prop, NULL, "pathlen");
RNA_def_property_range(prop, 1, MAXFRAME);
RNA_def_property_ui_text(prop, "Path Length", "The number of frames that are needed to traverse the path, defining the maximum value for the 'Evaluation Time' setting");
@@ -699,7 +711,12 @@ static void rna_def_path(BlenderRNA *brna, StructRNA *srna)
RNA_def_property_boolean_sdna(prop, NULL, "flag", CU_STRETCH);
RNA_def_property_ui_text(prop, "Stretch", "Option for curve-deform: makes deformed child to stretch along entire path");
RNA_def_property_update(prop, 0, "rna_Curve_update_data");
-
+
+ prop= RNA_def_property(srna, "use_deform_bounds", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", CU_DEFORM_BOUNDS_OFF);
+ RNA_def_property_ui_text(prop, "Bounds Clamp", "Use the mesh bounds to clamp the deformation");
+ RNA_def_property_update(prop, 0, "rna_Curve_update_data");
+
prop= RNA_def_property(srna, "use_time_offset", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", CU_OFFS_PATHDIST);
RNA_def_property_ui_text(prop, "Offset Path Distance", "Children will use TimeOffs value as path distance offset");
@@ -716,7 +733,7 @@ static void rna_def_nurbs(BlenderRNA *brna, StructRNA *srna)
PropertyRNA *prop;
/* flags */
- prop= RNA_def_property(srna, "map_along_length", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_map_on_length", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", CU_UV_ORCO);
RNA_def_property_ui_text(prop, "Map Along Length", "Generate texture mapping coordinates following the curve direction, rather than the local bounding box");
RNA_def_property_update(prop, 0, "rna_Curve_update_data");
@@ -735,38 +752,39 @@ static void rna_def_font(BlenderRNA *brna, StructRNA *srna)
{0, NULL, 0, NULL, NULL}};
/* Enums */
- prop= RNA_def_property(srna, "spacemode", PROP_ENUM, PROP_NONE);
+ prop= RNA_def_property(srna, "align", PROP_ENUM, PROP_NONE);
+ RNA_def_property_enum_sdna(prop, NULL, "spacemode");
RNA_def_property_enum_items(prop, prop_align_items);
RNA_def_property_ui_text(prop, "Text Align", "Text align from the object center");
RNA_def_property_update(prop, 0, "rna_Curve_update_data");
/* number values */
- prop= RNA_def_property(srna, "text_size", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "size", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "fsize");
RNA_def_property_range(prop, 0.0001f, 10000.0f);
- RNA_def_property_ui_range(prop, 0.01, 10, 1, 1);
+ RNA_def_property_ui_range(prop, 0.01, 10, 1, 3);
RNA_def_property_ui_text(prop, "Font size", "");
RNA_def_property_update(prop, 0, "rna_Curve_update_data");
prop= RNA_def_property(srna, "small_caps_scale", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "smallcaps_scale");
- RNA_def_property_ui_range(prop, 0, 1.0, 0.1, 0);
+ RNA_def_property_ui_range(prop, 0, 1.0, 1, 2);
RNA_def_property_ui_text(prop, "Small Caps", "Scale of small capitals");
RNA_def_property_update(prop, 0, "rna_Curve_update_data");
- prop= RNA_def_property(srna, "line_dist", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "space_line", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "linedist");
RNA_def_property_range(prop, 0.0f, 10.0f);
RNA_def_property_ui_text(prop, "Distance between lines of text", "");
RNA_def_property_update(prop, 0, "rna_Curve_update_data");
- prop= RNA_def_property(srna, "word_spacing", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "space_word", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "wordspace");
RNA_def_property_range(prop, 0.0f, 10.0f);
RNA_def_property_ui_text(prop, "Spacing between words", "");
RNA_def_property_update(prop, 0, "rna_Curve_update_data");
- prop= RNA_def_property(srna, "spacing", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "space_character", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "spacing");
RNA_def_property_range(prop, 0.0f, 10.0f);
RNA_def_property_ui_text(prop, "Global spacing between characters", "");
@@ -790,19 +808,19 @@ static void rna_def_font(BlenderRNA *brna, StructRNA *srna)
RNA_def_property_ui_text(prop, "Y Offset", "Vertical offset from the object origin");
RNA_def_property_update(prop, 0, "rna_Curve_update_data");
- prop= RNA_def_property(srna, "ul_position", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "underline_position", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "ulpos");
RNA_def_property_range(prop, -0.2f, 0.8f);
RNA_def_property_ui_text(prop, "Underline Position", "Vertical position of underline");
RNA_def_property_update(prop, 0, "rna_Curve_update_data");
- prop= RNA_def_property(srna, "ul_height", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "underline_height", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "ulheight");
RNA_def_property_range(prop, -0.2f, 0.8f);
RNA_def_property_ui_text(prop, "Underline Thickness", "");
RNA_def_property_update(prop, 0, "rna_Curve_update_data");
- prop= RNA_def_property(srna, "textboxes", PROP_COLLECTION, PROP_NONE);
+ prop= RNA_def_property(srna, "text_boxes", PROP_COLLECTION, PROP_NONE);
RNA_def_property_collection_sdna(prop, NULL, "tb", "totbox");
RNA_def_property_struct_type(prop, "TextBox");
RNA_def_property_ui_text(prop, "Textboxes", "");
@@ -831,7 +849,7 @@ static void rna_def_font(BlenderRNA *brna, StructRNA *srna)
RNA_def_property_ui_text(prop, "Character Info", "Stores the style of each character");
/* pointers */
- prop= RNA_def_property(srna, "text_on_curve", PROP_POINTER, PROP_NONE);
+ prop= RNA_def_property(srna, "follow_curve", PROP_POINTER, PROP_NONE);
RNA_def_property_pointer_sdna(prop, NULL, "textoncurve");
RNA_def_property_pointer_funcs(prop, NULL, NULL, NULL, "rna_Curve_otherObject_poll");
RNA_def_property_flag(prop, PROP_EDITABLE);
@@ -850,7 +868,7 @@ static void rna_def_font(BlenderRNA *brna, StructRNA *srna)
RNA_def_property_update(prop, 0, "rna_Curve_update_data");
/* flags */
- prop= RNA_def_property(srna, "fast", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_fast_edit", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", CU_FAST);
RNA_def_property_ui_text(prop, "Fast", "Don't fill polygons while editing");
RNA_def_property_update(prop, 0, "rna_Curve_update_data");
@@ -902,17 +920,17 @@ static void rna_def_charinfo(BlenderRNA *brna)
RNA_def_struct_ui_text(srna, "Text Character Format", "Text character formatting settings");
/* flags */
- prop= RNA_def_property(srna, "bold", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_bold", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", CU_CHINFO_BOLD);
RNA_def_property_ui_text(prop, "Bold", "");
RNA_def_property_update(prop, 0, "rna_Curve_update_data");
- prop= RNA_def_property(srna, "italic", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_italic", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", CU_CHINFO_ITALIC);
RNA_def_property_ui_text(prop, "Italic", "");
RNA_def_property_update(prop, 0, "rna_Curve_update_data");
- prop= RNA_def_property(srna, "underline", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_underline", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", CU_CHINFO_UNDERLINE);
RNA_def_property_ui_text(prop, "Underline", "");
RNA_def_property_update(prop, 0, "rna_Curve_update_data");
@@ -979,7 +997,7 @@ static void rna_def_curve_spline_points(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);
+ RNA_def_property_flag(parm, PROP_REQUIRED|PROP_NEVER_NULL);
*/
}
@@ -1006,7 +1024,7 @@ static void rna_def_curve_spline_bezpoints(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);
+ RNA_def_property_flag(parm, PROP_REQUIRED|PROP_NEVER_NULL);
*/
}
@@ -1035,7 +1053,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);
+ 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, "Object");
@@ -1081,12 +1099,12 @@ static void rna_def_curve(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Splines", "Collection of splines in this curve data object");
rna_def_curve_splines(brna, prop);
- prop= RNA_def_property(srna, "draw_handles", PROP_BOOLEAN, PROP_NONE);
+ 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);
- prop= RNA_def_property(srna, "draw_normals", PROP_BOOLEAN, PROP_NONE);
+ 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);
@@ -1101,22 +1119,23 @@ static void rna_def_curve(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Bevel Resolution", "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, "width", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "offset", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "width");
- RNA_def_property_ui_range(prop, 0, 2.0, 0.1, 0);
- RNA_def_property_ui_text(prop, "Width", "Scale the original width (1.0) based on given factor");
+ 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);
RNA_def_property_float_sdna(prop, NULL, "ext1");
- RNA_def_property_ui_range(prop, 0, 100.0, 0.1, 0);
+ 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);
RNA_def_property_float_sdna(prop, NULL, "ext2");
- RNA_def_property_ui_range(prop, 0, 100.0, 0.1, 0);
+ 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");
RNA_def_property_update(prop, 0, "rna_Curve_update_data");
@@ -1178,12 +1197,12 @@ static void rna_def_curve(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Dimensions", "Select 2D or 3D curve type");
RNA_def_property_update(prop, 0, "rna_Curve_update_data");
- prop= RNA_def_property(srna, "front", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_fill_front", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", CU_FRONT);
RNA_def_property_ui_text(prop, "Front", "Draw filled front for extruded/beveled curves");
RNA_def_property_update(prop, 0, "rna_Curve_update_data");
- prop= RNA_def_property(srna, "back", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_fill_back", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", CU_BACK);
RNA_def_property_ui_text(prop, "Back", "Draw filled back for extruded/beveled curves");
RNA_def_property_update(prop, 0, "rna_Curve_update_data");
@@ -1201,17 +1220,17 @@ static void rna_def_curve(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Twist Smooth", "Smoothing iteration for tangents");
RNA_def_property_update(prop, 0, "rna_Curve_update_data");
- prop= RNA_def_property(srna, "use_deform_fill", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_fill_deform", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", CU_DEFORM_FILL);
RNA_def_property_ui_text(prop, "Fill deformed", "Fill curve after applying deformation");
RNA_def_property_update(prop, 0, "rna_Curve_update_data");
/* texture space */
- prop= RNA_def_property(srna, "auto_texspace", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_auto_texspace", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "texflag", CU_AUTOSPACE);
RNA_def_property_ui_text(prop, "Auto Texture Space", "Adjusts active object's texture space automatically when transforming object");
- prop= RNA_def_property(srna, "texspace_loc", PROP_FLOAT, PROP_TRANSLATION);
+ 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_Curve_texspace_editable");
@@ -1232,7 +1251,7 @@ static void rna_def_curve(BlenderRNA *brna)
RNA_def_property_editable_func(prop, texspace_editable);
RNA_def_property_update(prop, 0, "rna_Curve_update_data");*/
- prop= RNA_def_property(srna, "map_along_length", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_map_on_length", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", CU_UV_ORCO);
RNA_def_property_ui_text(prop, "Map Along Length", "Generate texture mapping coordinates following the curve direction, rather than the local bounding box");
RNA_def_property_update(prop, 0, "rna_Curve_update_data");
@@ -1242,15 +1261,16 @@ static void rna_def_curve(BlenderRNA *brna)
RNA_def_property_collection_sdna(prop, NULL, "mat", "totcol");
RNA_def_property_struct_type(prop, "Material");
RNA_def_property_ui_text(prop, "Materials", "");
+ RNA_def_property_srna(prop, "IDMaterials"); /* see rna_ID.c */
}
static void rna_def_curve_nurb(BlenderRNA *brna)
{
static EnumPropertyItem spline_interpolation_items[] = {
- {BEZT_IPO_CONST, "LINEAR", 0, "Linear", ""},
- {BEZT_IPO_LIN, "CARDINAL", 0, "Cardinal", ""},
- {BEZT_IPO_BEZ, "BSPLINE", 0, "BSpline", ""},
- {BEZT_IPO_BEZ, "EASE", 0, "Ease", ""},
+ {KEY_LINEAR, "LINEAR", 0, "Linear", ""},
+ {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}};
StructRNA *srna;
@@ -1333,40 +1353,40 @@ static void rna_def_curve_nurb(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Resolution V", "Surface subdivisions per segment");
RNA_def_property_update(prop, 0, "rna_Curve_update_data");
- prop= RNA_def_property(srna, "cyclic_u", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_cyclic_u", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flagu", CU_NURB_CYCLIC);
RNA_def_property_ui_text(prop, "Cyclic U", "Make this curve or surface a closed loop in the U direction");
RNA_def_property_update(prop, 0, "rna_Nurb_update_handle_data"); /* only needed for cyclic_u because cyclic_v cant do bezier */
- prop= RNA_def_property(srna, "cyclic_v", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_cyclic_v", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flagv", CU_NURB_CYCLIC);
RNA_def_property_ui_text(prop, "Cyclic V", "Make this surface a closed loop in the V direction");
RNA_def_property_update(prop, 0, "rna_Curve_update_data");
/* Note, endpoint and bezier flags should never be on at the same time! */
- prop= RNA_def_property(srna, "endpoint_u", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_endpoint_u", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flagu", CU_NURB_ENDPOINT);
RNA_def_property_ui_text(prop, "Endpoint U", "Make this nurbs curve or surface meet the endpoints in the U direction (Cyclic U must be disabled)");
RNA_def_property_update(prop, 0, "rna_Nurb_update_knot_u");
- prop= RNA_def_property(srna, "endpoint_v", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_endpoint_v", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flagv", CU_NURB_ENDPOINT);
RNA_def_property_ui_text(prop, "Endpoint V", "Make this nurbs surface meet the endpoints in the V direction (Cyclic V must be disabled)");
RNA_def_property_update(prop, 0, "rna_Nurb_update_knot_v");
- prop= RNA_def_property(srna, "bezier_u", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_bezier_u", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flagu", CU_NURB_BEZIER);
RNA_def_property_ui_text(prop, "Bezier U", "Make this nurbs curve or surface act like a bezier spline in the U direction (Order U must be 3 or 4, Cyclic U must be disabled)");
RNA_def_property_update(prop, 0, "rna_Nurb_update_knot_u");
- prop= RNA_def_property(srna, "bezier_v", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_bezier_v", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flagv", CU_NURB_BEZIER);
RNA_def_property_ui_text(prop, "Bezier V", "Make this nurbs surface act like a bezier spline in the V direction (Order V must be 3 or 4, Cyclic V must be disabled)");
RNA_def_property_update(prop, 0, "rna_Nurb_update_knot_v");
- prop= RNA_def_property(srna, "smooth", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_smooth", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", CU_SMOOTH);
RNA_def_property_ui_text(prop, "Smooth", "Smooth the normals of the surface or beveled curve");
RNA_def_property_update(prop, 0, "rna_Curve_update_data");
diff --git a/source/blender/makesrna/intern/rna_define.c b/source/blender/makesrna/intern/rna_define.c
index d89d0ad5d29..1fed1663952 100644
--- a/source/blender/makesrna/intern/rna_define.c
+++ b/source/blender/makesrna/intern/rna_define.c
@@ -781,10 +781,10 @@ void RNA_def_struct_refine_func(StructRNA *srna, const char *refine)
if(refine) srna->refine= (StructRefineFunc)refine;
}
-void RNA_def_struct_idproperties_func(StructRNA *srna, const char *idproperties)
+void RNA_def_struct_idprops_func(StructRNA *srna, const char *idproperties)
{
if(!DefRNA.preprocess) {
- fprintf(stderr, "RNA_def_struct_idproperties_func: only during preprocessing.\n");
+ fprintf(stderr, "RNA_def_struct_idprops_func: only during preprocessing.\n");
return;
}
@@ -2201,6 +2201,17 @@ PropertyRNA *RNA_def_float_vector(StructOrFunctionRNA *cont_, const char *identi
return prop;
}
+PropertyRNA *RNA_def_float_vector_xyz(StructOrFunctionRNA *cont_, const char *identifier, int len, const float *default_value,
+ float hardmin, float hardmax, const char *ui_name, const char *ui_description, float softmin, float softmax)
+{
+ PropertyRNA *prop;
+
+ prop= RNA_def_float_vector(cont_, identifier, len, default_value, hardmin, hardmax, ui_name, ui_description, softmin, softmax);
+ prop->subtype = PROP_XYZ_LENGTH;
+
+ return prop;
+}
+
PropertyRNA *RNA_def_float_color(StructOrFunctionRNA *cont_, const char *identifier, int len, const float *default_value,
float hardmin, float hardmax, const char *ui_name, const char *ui_description, float softmin, float softmax)
{
@@ -2514,7 +2525,7 @@ int rna_parameter_size_alloc(PropertyRNA *parm)
int size = rna_parameter_size(parm);
if (parm->flag & PROP_DYNAMIC)
- size+= sizeof(int);
+ size+= sizeof(((ParameterDynAlloc *)NULL)->array_tot);
return size;
}
@@ -2606,14 +2617,26 @@ void RNA_def_func_free_pointers(FunctionRNA *func)
}
}
-void RNA_def_property_duplicate_pointers(PropertyRNA *prop)
+void RNA_def_property_duplicate_pointers(StructOrFunctionRNA *cont_, PropertyRNA *prop)
{
+ ContainerRNA *cont= cont_;
EnumPropertyItem *earray;
float *farray;
int *iarray;
int a;
- if(prop->identifier) prop->identifier= BLI_strdup(prop->identifier);
+ /* annoying since we just added this to a hash, could make this add the correct key to the hash in the first place */
+ if(prop->identifier) {
+ if(cont->prophash) {
+ 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);
+ }
+ else {
+ prop->identifier= BLI_strdup(prop->identifier);
+ }
+ }
+
if(prop->name) prop->name= BLI_strdup(prop->name);
if(prop->description) prop->description= BLI_strdup(prop->description);
@@ -2728,14 +2751,16 @@ void RNA_def_property_free(StructOrFunctionRNA *cont_, PropertyRNA *prop)
{
ContainerRNA *cont= cont_;
- RNA_def_property_free_pointers(prop);
-
if(prop->flag & PROP_RUNTIME) {
if(cont->prophash)
BLI_ghash_remove(cont->prophash, (void*)prop->identifier, NULL, NULL);
+ RNA_def_property_free_pointers(prop);
rna_freelinkN(&cont->properties, prop);
}
+ else {
+ RNA_def_property_free_pointers(prop);
+ }
}
/* note: only intended for removing dynamic props */
diff --git a/source/blender/makesrna/intern/rna_fcurve.c b/source/blender/makesrna/intern/rna_fcurve.c
index 5dc75c5cf62..63405e08f69 100644
--- a/source/blender/makesrna/intern/rna_fcurve.c
+++ b/source/blender/makesrna/intern/rna_fcurve.c
@@ -324,8 +324,10 @@ static void rna_FCurve_RnaPath_set(PointerRNA *ptr, const char *value)
if (fcu->rna_path)
MEM_freeN(fcu->rna_path);
- if (strlen(value))
+ if (strlen(value)) {
fcu->rna_path= BLI_strdup(value);
+ fcu->flag &= ~FCURVE_DISABLED;
+ }
else
fcu->rna_path= NULL;
}
@@ -385,9 +387,13 @@ DriverVar *rna_Driver_new_variable(ChannelDriver *driver)
return driver_add_new_variable(driver);
}
-void rna_Driver_remove_variable(ChannelDriver *driver, DriverVar *dvar)
+void rna_Driver_remove_variable(ChannelDriver *driver, ReportList *reports, DriverVar *dvar)
{
- /* call the API function for this */
+ if(BLI_findindex(&driver->variables, dvar) == -1) {
+ BKE_report(reports, RPT_ERROR, "Variable does not exist in this driver.");
+ return;
+ }
+
driver_free_variable(driver, dvar);
}
@@ -410,9 +416,13 @@ static FModifier *rna_FCurve_modifiers_new(FCurve *fcu, int type)
return add_fmodifier(&fcu->modifiers, type);
}
-static int rna_FCurve_modifiers_remove(FCurve *fcu, int index)
+static void rna_FCurve_modifiers_remove(FCurve *fcu, ReportList *reports, FModifier *fcm)
{
- return remove_fmodifier_index(&fcu->modifiers, index);
+ if(BLI_findindex(&fcu->modifiers, fcm) == -1) {
+ BKE_reportf(reports, RPT_ERROR, "FCurveModifier '%s' not found in fcurve.", fcm->name);
+ return;
+ }
+ remove_fmodifier(&fcu->modifiers, fcm);
}
static void rna_FModifier_active_set(PointerRNA *ptr, int value)
@@ -568,7 +578,7 @@ static void rna_def_fmodifier_generator(BlenderRNA *brna)
RNA_def_struct_sdna_from(srna, "FMod_Generator", "data");
/* define common props */
- prop= RNA_def_property(srna, "additive", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_additive", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", FCM_GENERATOR_ADDITIVE);
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);
@@ -633,7 +643,7 @@ static void rna_def_fmodifier_function_generator(BlenderRNA *brna)
RNA_def_property_update(prop, NC_ANIMATION|ND_KEYFRAME|NA_EDITED, NULL);
/* flags */
- prop= RNA_def_property(srna, "additive", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_additive", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", FCM_GENERATOR_ADDITIVE);
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);
@@ -660,12 +670,12 @@ static void rna_def_fmodifier_envelope_ctrl(BlenderRNA *brna)
* - for now, these are allowed to go past each other, so that we can have inverted action
* - technically, the range is limited by the settings in the envelope-modifier data, not here...
*/
- prop= RNA_def_property(srna, "minimum", PROP_FLOAT, PROP_NONE);
+ 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);
- prop= RNA_def_property(srna, "maximum", PROP_FLOAT, PROP_NONE);
+ 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);
@@ -701,12 +711,12 @@ static void rna_def_fmodifier_envelope(BlenderRNA *brna)
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);
- prop= RNA_def_property(srna, "default_minimum", PROP_FLOAT, PROP_NONE);
+ 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);
- prop= RNA_def_property(srna, "default_maximum", PROP_FLOAT, PROP_NONE);
+ 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);
@@ -731,22 +741,26 @@ static void rna_def_fmodifier_cycles(BlenderRNA *brna)
RNA_def_struct_sdna_from(srna, "FMod_Cycles", "data");
/* before */
- prop= RNA_def_property(srna, "before_mode", PROP_ENUM, PROP_NONE);
+ prop= RNA_def_property(srna, "mode_before", PROP_ENUM, PROP_NONE);
+ 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);
- prop= RNA_def_property(srna, "before_cycles", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "cycles_before", PROP_FLOAT, PROP_NONE);
+ RNA_def_property_float_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);
/* after */
- prop= RNA_def_property(srna, "after_mode", PROP_ENUM, PROP_NONE);
+ 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);
- prop= RNA_def_property(srna, "after_cycles", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "cycles_after", PROP_FLOAT, PROP_NONE);
+ RNA_def_property_float_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);
}
@@ -774,45 +788,45 @@ static void rna_def_fmodifier_limits(BlenderRNA *brna)
RNA_def_struct_ui_text(srna, "Limits F-Modifier", "Limits the time/value ranges of the modified F-Curve");
RNA_def_struct_sdna_from(srna, "FMod_Limits", "data");
- prop= RNA_def_property(srna, "use_minimum_x", PROP_BOOLEAN, PROP_NONE);
+ 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);
- prop= RNA_def_property(srna, "use_minimum_y", PROP_BOOLEAN, PROP_NONE);
+ 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);
- prop= RNA_def_property(srna, "use_maximum_x", PROP_BOOLEAN, PROP_NONE);
+ 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);
- prop= RNA_def_property(srna, "use_maximum_y", PROP_BOOLEAN, PROP_NONE);
+ 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);
- prop= RNA_def_property(srna, "minimum_x", PROP_FLOAT, PROP_NONE);
+ 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);
- prop= RNA_def_property(srna, "minimum_y", PROP_FLOAT, PROP_NONE);
+ 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);
- prop= RNA_def_property(srna, "maximum_x", PROP_FLOAT, PROP_NONE);
+ 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);
- prop= RNA_def_property(srna, "maximum_y", PROP_FLOAT, PROP_NONE);
+ 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");
@@ -837,14 +851,15 @@ static void rna_def_fmodifier_noise(BlenderRNA *brna)
RNA_def_struct_ui_text(srna, "Noise F-Modifier", "Gives randomness to the modified F-Curve");
RNA_def_struct_sdna_from(srna, "FMod_Noise", "data");
- prop= RNA_def_property(srna, "modification", PROP_ENUM, PROP_NONE);
+ prop= RNA_def_property(srna, "blend_type", PROP_ENUM, PROP_NONE);
+ RNA_def_property_enum_sdna(prop, NULL, "modification");
RNA_def_property_enum_items(prop, prop_modification_items);
- RNA_def_property_ui_text(prop, "Modification", "Method of modifying the existing F-Curve");
+ 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);
- prop= RNA_def_property(srna, "size", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "scale", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "size");
- RNA_def_property_ui_text(prop, "Size", "Scaling (in time) of the noise");
+ 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);
prop= RNA_def_property(srna, "strength", PROP_FLOAT, PROP_NONE);
@@ -876,11 +891,12 @@ static void rna_def_fmodifier_stepped(BlenderRNA *brna)
RNA_def_struct_sdna_from(srna, "FMod_Stepped", "data");
/* properties */
- prop= RNA_def_property(srna, "step_size", PROP_FLOAT, PROP_NONE);
+ 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);
- prop= RNA_def_property(srna, "offset", PROP_FLOAT, PROP_NONE);
+ 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);
@@ -935,7 +951,7 @@ static void rna_def_fmodifier(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Type", "F-Curve Modifier Type");
/* settings */
- prop= RNA_def_property(srna, "expanded", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_expanded", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", FMODIFIER_FLAG_EXPANDED);
RNA_def_property_ui_text(prop, "Expanded", "F-Curve Modifier's panel is expanded in UI");
RNA_def_property_ui_icon(prop, ICON_TRIA_RIGHT, 1);
@@ -946,9 +962,9 @@ static void rna_def_fmodifier(BlenderRNA *brna)
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, "disabled", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "is_valid", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
- RNA_def_property_boolean_sdna(prop, NULL, "flag", FMODIFIER_FLAG_DISABLED);
+ 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);
@@ -1019,7 +1035,7 @@ static void rna_def_drivertarget(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Type", "Driver variable type");
RNA_def_property_update(prop, 0, "rna_DriverTarget_update_data");
- prop= RNA_def_property(srna, "use_local_space_transforms", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_local_space_transform", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", DTAR_FLAG_LOCALSPACE);
RNA_def_property_ui_text(prop, "Local Space", "Use transforms in Local Space (as opposed to the worldspace default)");
RNA_def_property_update(prop, 0, "rna_DriverTarget_update_data");
@@ -1088,10 +1104,11 @@ static void rna_def_channeldriver_variables(BlenderRNA *brna, PropertyRNA *cprop
/* remove variable */
func= RNA_def_function(srna, "remove", "rna_Driver_remove_variable");
- RNA_def_function_ui_description(func, "Remove an existing variable from the driver.");
- /* target to remove */
- parm= RNA_def_pointer(func, "var", "DriverVariable", "", "Variable to remove from the driver.");
- RNA_def_property_flag(parm, PROP_REQUIRED);
+ RNA_def_function_ui_description(func, "Remove an existing variable from the driver.");
+ 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);
}
static void rna_def_channeldriver(BlenderRNA *brna)
@@ -1135,8 +1152,8 @@ static void rna_def_channeldriver(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Show Debug Info", "Show intermediate values for the driver calculations to allow debugging of drivers");
/* State Info (for Debugging) */
- prop= RNA_def_property(srna, "invalid", PROP_BOOLEAN, PROP_NONE);
- RNA_def_property_boolean_sdna(prop, NULL, "flag", DRIVER_FLAG_INVALID);
+ prop= RNA_def_property(srna, "is_valid", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", DRIVER_FLAG_INVALID);
RNA_def_property_ui_text(prop, "Invalid", "Driver could not be evaluated in past, so should be skipped");
@@ -1199,13 +1216,13 @@ static void rna_def_fkeyframe(BlenderRNA *brna)
RNA_def_property_update(prop, NC_ANIMATION|ND_KEYFRAME|NA_SELECTED, NULL);
/* Enums */
- prop= RNA_def_property(srna, "handle1_type", PROP_ENUM, PROP_NONE);
+ 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, beztriple_handle_type_items);
RNA_def_property_ui_text(prop, "Handle 1 Type", "Handle types");
RNA_def_property_update(prop, NC_ANIMATION|ND_KEYFRAME_PROP, NULL);
- prop= RNA_def_property(srna, "handle2_type", PROP_ENUM, PROP_NONE);
+ 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, beztriple_handle_type_items);
RNA_def_property_ui_text(prop, "Handle 2 Type", "Handle types");
@@ -1224,7 +1241,7 @@ static void rna_def_fkeyframe(BlenderRNA *brna)
RNA_def_property_update(prop, NC_ANIMATION|ND_KEYFRAME_PROP, NULL);
/* Vector values */
- prop= RNA_def_property(srna, "handle1", PROP_FLOAT, PROP_TRANSLATION);
+ prop= RNA_def_property(srna, "handle_left", PROP_FLOAT, PROP_TRANSLATION);
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, "Handle 1", "Coordinates of the first handle");
@@ -1236,7 +1253,7 @@ static void rna_def_fkeyframe(BlenderRNA *brna)
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);
- prop= RNA_def_property(srna, "handle2", PROP_FLOAT, PROP_TRANSLATION);
+ prop= RNA_def_property(srna, "handle_right", PROP_FLOAT, PROP_TRANSLATION);
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, "Handle 2", "Coordinates of the second handle");
@@ -1276,13 +1293,11 @@ static void rna_def_fcurve_modifiers(BlenderRNA *brna, PropertyRNA *cprop)
RNA_def_property_flag(parm, PROP_REQUIRED);
func= RNA_def_function(srna, "remove", "rna_FCurve_modifiers_remove");
+ RNA_def_function_flag(func, FUNC_USE_REPORTS);
RNA_def_function_ui_description(func, "Remove a modifier from this fcurve.");
- /* return type */
- parm= RNA_def_boolean(func, "success", 0, "Success", "Removed the constraint successfully.");
- RNA_def_function_return(func, parm);
- /* object to add */
- parm= RNA_def_int(func, "index", 0, 0, INT_MAX, "Index", "", 0, INT_MAX);
- RNA_def_property_flag(parm, PROP_REQUIRED);
+ /* modifier to remove */
+ parm= RNA_def_pointer(func, "modifier", "FModifier", "", "Removed modifier.");
+ RNA_def_property_flag(parm, PROP_REQUIRED|PROP_NEVER_NULL);
}
/* fcurve.keyframe_points */
@@ -1399,7 +1414,7 @@ static void rna_def_fcurve(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Muted", "F-Curve is not evaluated");
RNA_def_property_update(prop, NC_ANIMATION|ND_ANIMCHAN|NA_EDITED, NULL);
- prop= RNA_def_property(srna, "auto_clamped_handles", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_auto_handle_clamp", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", FCURVE_AUTO_HANDLES);
RNA_def_property_ui_text(prop, "Auto Clamped Handles", "All auto-handles for F-Curve are clamped");
RNA_def_property_update(prop, NC_ANIMATION|ND_KEYFRAME_PROP, NULL);
@@ -1410,9 +1425,9 @@ static void rna_def_fcurve(BlenderRNA *brna)
RNA_def_property_update(prop, NC_SPACE|ND_SPACE_GRAPH, NULL);
/* State Info (for Debugging) */
- prop= RNA_def_property(srna, "enabled", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "is_valid", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", FCURVE_DISABLED);
- RNA_def_property_ui_text(prop, "Enabled", "False when F-Curve could not be evaluated in past, so should be skipped when evaluating");
+ 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);
/* Collections */
@@ -1438,7 +1453,7 @@ static void rna_def_fcurve(BlenderRNA *brna)
parm= RNA_def_float(func, "frame", 1.0f, -FLT_MAX, FLT_MAX, "Frame", "Evaluate fcurve at given frame", -FLT_MAX, FLT_MAX);
RNA_def_property_flag(parm, PROP_REQUIRED);
/* return value */
- parm= RNA_def_float(func, "position", 0, -FLT_MAX, FLT_MAX, "Position", "Fcurve position", -FLT_MAX, FLT_MAX);
+ parm= RNA_def_float(func, "position", 0, -FLT_MAX, FLT_MAX, "Position", "FCurve position", -FLT_MAX, FLT_MAX);
RNA_def_function_return(func, parm);
func= RNA_def_function(srna, "range", "rna_fcurve_range");
diff --git a/source/blender/makesrna/intern/rna_fluidsim.c b/source/blender/makesrna/intern/rna_fluidsim.c
index 3930c2ff3f7..68060e2cfe3 100644
--- a/source/blender/makesrna/intern/rna_fluidsim.c
+++ b/source/blender/makesrna/intern/rna_fluidsim.c
@@ -228,11 +228,11 @@ static void rna_def_fluidsim_domain(BlenderRNA *brna)
RNA_def_property_enum_items(prop, quality_items);
RNA_def_property_ui_text(prop, "Render Display Mode", "How to display the mesh for rendering");
- prop= RNA_def_property(srna, "reverse_frames", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_reverse_frames", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", OB_FLUIDSIM_REVERSE);
RNA_def_property_ui_text(prop, "Reverse Frames", "Reverse fluid frames");
- prop= RNA_def_property(srna, "path", PROP_STRING, PROP_DIRPATH);
+ prop= RNA_def_property(srna, "filepath", PROP_STRING, PROP_DIRPATH);
RNA_def_property_string_maxlength(prop, 240);
RNA_def_property_string_sdna(prop, NULL, "surfdataPath");
RNA_def_property_ui_text(prop, "Path", "Directory (and/or filename prefix) to store baked fluid simulation files in");
@@ -250,21 +250,21 @@ static void rna_def_fluidsim_domain(BlenderRNA *brna)
RNA_def_property_range(prop, -1000.1, 1000.1);
RNA_def_property_ui_text(prop, "Gravity", "Gravity in X, Y and Z direction");
- prop= RNA_def_property(srna, "override_time", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_time_override", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", OB_FLUIDSIM_OVERRIDE_TIME);
RNA_def_property_ui_text(prop, "Override Time", "Use a custom start and end time (in seconds) instead of the scene's timeline");
prop= RNA_def_property(srna, "start_time", PROP_FLOAT, PROP_TIME);
RNA_def_property_float_sdna(prop, NULL, "animStart");
RNA_def_property_range(prop, 0, 100);
- RNA_def_property_ui_text(prop, "Start Time", "Simulation time of the first blender frame");
+ RNA_def_property_ui_text(prop, "Start Time", "Simulation time of the first blender frame (in seconds)");
prop= RNA_def_property(srna, "end_time", PROP_FLOAT, PROP_TIME);
RNA_def_property_float_sdna(prop, NULL, "animEnd");
RNA_def_property_range(prop, 0, 100);
- RNA_def_property_ui_text(prop, "End Time", "Simulation time of the last blender frame");
+ RNA_def_property_ui_text(prop, "End Time", "Simulation time of the last blender frame (in seconds)");
- prop= RNA_def_property(srna, "real_world_size", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "simulation_scale", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "realsize");
RNA_def_property_range(prop, 0.001, 10);
RNA_def_property_ui_text(prop, "Real World Size", "Size of the simulation domain in metres");
@@ -300,7 +300,7 @@ static void rna_def_fluidsim_domain(BlenderRNA *brna)
rna_def_fluidsim_slip(srna);
- prop= RNA_def_property(srna, "surface_smoothing", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "surface_smooth", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "surfaceSmoothing");
RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
RNA_def_property_range(prop, 0.0, 5.0);
@@ -312,7 +312,7 @@ static void rna_def_fluidsim_domain(BlenderRNA *brna)
RNA_def_property_range(prop, 0, 5);
RNA_def_property_ui_text(prop, "Surface Subdivisions", "Number of isosurface subdivisions. This is necessary for the inclusion of particles into the surface generation. Warning - can lead to longer computation times!");
- prop= RNA_def_property(srna, "generate_speed_vectors", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_speed_vectors", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_negative_sdna(prop, NULL, "domainNovecgen", 0);
RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
RNA_def_property_ui_text(prop, "Generate Speed Vectors", "Generate speed vectors for vector blur");
@@ -348,7 +348,7 @@ static void rna_def_fluidsim_volume(StructRNA *srna)
RNA_def_property_enum_items(prop, volume_type_items);
RNA_def_property_ui_text(prop, "Volume Initialization", "Volume initialization type");
- prop= RNA_def_property(srna, "export_animated_mesh", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_animated_mesh", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "domainNovecgen", 0);
RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
RNA_def_property_ui_text(prop, "Export Animated Mesh", "Export this mesh as an animated one. Slower, only use if really necessary (e.g. armatures or parented objects), animated pos/rot/scale IPOs do not require it");
@@ -358,9 +358,9 @@ static void rna_def_fluidsim_active(StructRNA *srna)
{
PropertyRNA *prop;
- prop= RNA_def_property(srna, "active", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", OB_FLUIDSIM_ACTIVE);
- RNA_def_property_ui_text(prop, "Active", "Object contributes to the fluid simulation");
+ RNA_def_property_ui_text(prop, "Enabled", "Object contributes to the fluid simulation");
}
static void rna_def_fluidsim_fluid(BlenderRNA *brna)
@@ -420,7 +420,7 @@ static void rna_def_fluidsim_inflow(BlenderRNA *brna)
RNA_def_property_range(prop, -1000.1, 1000.1);
RNA_def_property_ui_text(prop, "Inflow Velocity", "Initial velocity of fluid");
- prop= RNA_def_property(srna, "local_coordinates", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_local_coords", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
RNA_def_property_boolean_sdna(prop, NULL, "typeFlags", OB_FSINFLOW_LOCALCOORD);
RNA_def_property_ui_text(prop, "Local Coordinates", "Use local coordinates for inflow. (e.g. for rotating objects)");
@@ -447,15 +447,15 @@ static void rna_def_fluidsim_particle(BlenderRNA *brna)
RNA_def_struct_sdna(srna, "FluidsimSettings");
RNA_def_struct_ui_text(srna, "Particle Fluid Simulation Settings", "Fluid simulation settings for objects storing fluid particles generated by the simulation");
- prop= RNA_def_property(srna, "drops", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_drops", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "typeFlags", OB_FSPART_DROP);
RNA_def_property_ui_text(prop, "Drops", "Show drop particles");
- prop= RNA_def_property(srna, "floats", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_floats", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "typeFlags", OB_FSPART_FLOAT);
RNA_def_property_ui_text(prop, "Floats", "Show floating foam particles");
- prop= RNA_def_property(srna, "tracer", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_tracer", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "typeFlags", OB_FSPART_TRACER);
RNA_def_property_ui_text(prop, "Tracer", "Show tracer particles");
@@ -469,7 +469,7 @@ static void rna_def_fluidsim_particle(BlenderRNA *brna)
RNA_def_property_range(prop, 0.0, 2.0);
RNA_def_property_ui_text(prop, "Alpha Influence", "Amount of particle alpha change, inverse of size influence: 0=off (all same alpha), 1=full. (large particles get lower alphas, smaller ones higher values)");
- prop= RNA_def_property(srna, "path", PROP_STRING, PROP_DIRPATH);
+ prop= RNA_def_property(srna, "filepath", PROP_STRING, PROP_DIRPATH);
RNA_def_property_string_maxlength(prop, 240);
RNA_def_property_string_sdna(prop, NULL, "surfdataPath");
RNA_def_property_ui_text(prop, "Path", "Directory (and/or filename prefix) to store and load particles from");
@@ -523,7 +523,7 @@ static void rna_def_fluidsim_control(BlenderRNA *brna)
RNA_def_property_range(prop, 5.0, 100.0);
RNA_def_property_ui_text(prop, "Quality", "Specifies the quality which is used for object sampling. (higher = better but slower)");
- prop= RNA_def_property(srna, "reverse_frames", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_reverse_frames", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", OB_FLUIDSIM_REVERSE);
RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
RNA_def_property_ui_text(prop, "Reverse Frames", "Reverse control object movement");
diff --git a/source/blender/makesrna/intern/rna_gpencil.c b/source/blender/makesrna/intern/rna_gpencil.c
index 0994f67879e..c03af99ccb0 100644
--- a/source/blender/makesrna/intern/rna_gpencil.c
+++ b/source/blender/makesrna/intern/rna_gpencil.c
@@ -131,7 +131,7 @@ static void rna_def_gpencil_frame(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Frame Number", "The frame on which this sketch appears");
/* Flags */
- prop= RNA_def_property(srna, "paint_lock", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "is_edited", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_FRAME_PAINT); // XXX should it be editable?
RNA_def_property_ui_text(prop, "Paint Lock", "Frame is being edited (painted on)");
@@ -172,14 +172,14 @@ static void rna_def_gpencil_layer(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Color", "Color for all strokes in this layer");
RNA_def_property_update(prop, NC_SCREEN|ND_GPENCIL, NULL);
- prop= RNA_def_property(srna, "opacity", PROP_FLOAT, PROP_NONE);
+ 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);
/* Line Thickness */
- prop= RNA_def_property(srna, "line_thickness", PROP_INT, PROP_NONE);
+ 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)");
@@ -191,7 +191,7 @@ static void rna_def_gpencil_layer(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Use Onion Skinning", "Ghost frames on either side of frame");
RNA_def_property_update(prop, NC_SCREEN|ND_GPENCIL, NULL);
- prop= RNA_def_property(srna, "max_ghost_range", PROP_INT, PROP_NONE);
+ prop= RNA_def_property(srna, "ghost_range_max", PROP_INT, PROP_NONE);
RNA_def_property_int_sdna(prop, NULL, "gstep");
RNA_def_property_range(prop, 0, 120);
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)");
@@ -208,7 +208,7 @@ static void rna_def_gpencil_layer(BlenderRNA *brna)
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);
- prop= RNA_def_property(srna, "frame_lock", PROP_BOOLEAN, PROP_NONE);
+ 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);
diff --git a/source/blender/makesrna/intern/rna_group.c b/source/blender/makesrna/intern/rna_group.c
index 707662e58e0..bd1b7c96998 100644
--- a/source/blender/makesrna/intern/rna_group.c
+++ b/source/blender/makesrna/intern/rna_group.c
@@ -117,7 +117,7 @@ void RNA_def_group(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Dupli Offset", "Offset from the origin to use when instancing as DupliGroup");
RNA_def_property_ui_range(prop, -10000.0, 10000.0, 10, 4);
- prop= RNA_def_property(srna, "layer", PROP_BOOLEAN, PROP_LAYER);
+ prop= RNA_def_property(srna, "layers", PROP_BOOLEAN, PROP_LAYER);
RNA_def_property_boolean_sdna(prop, NULL, "layer", 1);
RNA_def_property_array(prop, 20);
RNA_def_property_ui_text(prop, "Dupli Layers", "Layers visible when this groups is instanced as a dupli");
diff --git a/source/blender/makesrna/intern/rna_image.c b/source/blender/makesrna/intern/rna_image.c
index 7d8248b58ed..92c860a8074 100644
--- a/source/blender/makesrna/intern/rna_image.c
+++ b/source/blender/makesrna/intern/rna_image.c
@@ -123,6 +123,21 @@ static void rna_ImageUser_update(Main *bmain, Scene *scene, PointerRNA *ptr)
BKE_image_user_calc_frame(iuser, scene->r.cfra, 0);
}
+
+char *rna_ImageUser_path(PointerRNA *ptr)
+{
+ if (ptr->id.data) {
+ // ImageUser *iuser= ptr->data;
+
+ switch(GS(((ID *)ptr->id.data)->name)) {
+ case ID_TE:
+ return BLI_strdup("image_user");
+ }
+ }
+
+ return BLI_strdup("");
+}
+
static EnumPropertyItem *rna_Image_source_itemf(bContext *C, PointerRNA *ptr, int *free)
{
Image *ima= (Image*)ptr->data;
@@ -222,37 +237,40 @@ static void rna_def_imageuser(BlenderRNA *brna)
srna= RNA_def_struct(brna, "ImageUser", NULL);
RNA_def_struct_ui_text(srna, "Image User", "Parameters defining how an Image datablock is used by another datablock");
+ RNA_def_struct_path_func(srna, "rna_ImageUser_path");
- prop= RNA_def_property(srna, "auto_refresh", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_auto_refresh", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", IMA_ANIM_ALWAYS);
RNA_def_property_ui_text(prop, "Auto Refresh", "Always refresh image on frame changes");
RNA_def_property_update(prop, 0, "rna_ImageUser_update");
/* animation */
- prop= RNA_def_property(srna, "cyclic", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_cyclic", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "cycl", 0);
RNA_def_property_ui_text(prop, "Cyclic", "Cycle the images in the movie");
RNA_def_property_update(prop, 0, "rna_ImageUser_update");
- prop= RNA_def_property(srna, "frames", PROP_INT, PROP_NONE);
+ prop= RNA_def_property(srna, "frame_duration", PROP_INT, PROP_NONE);
+ RNA_def_property_int_sdna(prop, NULL, "frames");
RNA_def_property_range(prop, 0, MAXFRAMEF);
RNA_def_property_ui_text(prop, "Frames", "Sets the number of images of a movie to use");
RNA_def_property_update(prop, 0, "rna_ImageUser_update");
- prop= RNA_def_property(srna, "offset", PROP_INT, PROP_NONE);
- RNA_def_property_range(prop, -MAXFRAMEF, MAXFRAMEF);
+ prop= RNA_def_property(srna, "frame_offset", PROP_INT, PROP_NONE);
+ RNA_def_property_int_sdna(prop, NULL, "offset");
+ RNA_def_property_range(prop, MINAFRAMEF, MAXFRAMEF);
RNA_def_property_ui_text(prop, "Offset", "Offsets the number of the frame to use in the animation");
RNA_def_property_update(prop, 0, "rna_ImageUser_update");
prop= RNA_def_property(srna, "frame_start", PROP_INT, PROP_TIME);
RNA_def_property_int_sdna(prop, NULL, "sfra");
- RNA_def_property_range(prop, 1.0f, MAXFRAMEF);
+ RNA_def_property_range(prop, MINAFRAMEF, MAXFRAMEF);
RNA_def_property_ui_text(prop, "Start Frame", "Sets the global starting frame of the movie");
RNA_def_property_update(prop, 0, "rna_ImageUser_update");
prop= RNA_def_property(srna, "fields_per_frame", PROP_INT, PROP_NONE);
RNA_def_property_int_sdna(prop, NULL, "fie_ima");
- RNA_def_property_range(prop, -MAXFRAMEF, MAXFRAMEF);
+ RNA_def_property_range(prop, 1, MAXFRAMEF);
RNA_def_property_ui_text(prop, "Fields per Frame", "The number of fields per rendered frame (2 fields is 1 image)");
RNA_def_property_update(prop, 0, "rna_ImageUser_update");
@@ -334,17 +352,17 @@ static void rna_def_image(BlenderRNA *brna)
RNA_def_property_update(prop, NC_IMAGE|ND_DISPLAY, NULL);
/* booleans */
- prop= RNA_def_property(srna, "fields", PROP_BOOLEAN, PROP_NONE);
+ 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");
- prop= RNA_def_property(srna, "premultiply", PROP_BOOLEAN, PROP_NONE);
+ 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_reload_update");
- prop= RNA_def_property(srna, "dirty", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "is_dirty", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_funcs(prop, "rna_Image_dirty_get", NULL);
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
RNA_def_property_ui_text(prop, "Dirty", "Image has changed and is not saved");
@@ -382,30 +400,30 @@ static void rna_def_image(BlenderRNA *brna)
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);
- prop= RNA_def_property(srna, "animated", PROP_BOOLEAN, PROP_NONE);
+ 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");
- prop= RNA_def_property(srna, "animation_start", PROP_INT, PROP_NONE);
+ 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");
- prop= RNA_def_property(srna, "animation_end", PROP_INT, PROP_NONE);
+ 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");
- prop= RNA_def_property(srna, "animation_speed", PROP_INT, PROP_NONE);
+ 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);
- prop= RNA_def_property(srna, "tiles", PROP_BOOLEAN, PROP_NONE);
+ 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);
@@ -422,12 +440,12 @@ static void rna_def_image(BlenderRNA *brna)
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);
- prop= RNA_def_property(srna, "clamp_x", PROP_BOOLEAN, PROP_NONE);
+ 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);
- prop= RNA_def_property(srna, "clamp_y", PROP_BOOLEAN, PROP_NONE);
+ 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);
diff --git a/source/blender/makesrna/intern/rna_image_api.c b/source/blender/makesrna/intern/rna_image_api.c
index efe3d39d6cd..70438ae3d8c 100644
--- a/source/blender/makesrna/intern/rna_image_api.c
+++ b/source/blender/makesrna/intern/rna_image_api.c
@@ -77,6 +77,8 @@ static void rna_Image_save_render(Image *image, bContext *C, ReportList *reports
if (!BKE_write_ibuf(NULL, ibuf, path, scene->r.imtype, scene->r.subimtype, scene->r.quality)) {
BKE_reportf(reports, RPT_ERROR, "Couldn't write image: %s", path);
}
+
+ BKE_image_release_ibuf(image, lock);
} else {
BKE_reportf(reports, RPT_ERROR, "Scene not in context, couldn't get save parameters");
}
diff --git a/source/blender/makesrna/intern/rna_internal.h b/source/blender/makesrna/intern/rna_internal.h
index 1a7036c7a36..2bfe86a15ee 100644
--- a/source/blender/makesrna/intern/rna_internal.h
+++ b/source/blender/makesrna/intern/rna_internal.h
@@ -182,16 +182,16 @@ void rna_def_animviz_common(struct StructRNA *srna);
void rna_def_motionpath_common(struct StructRNA *srna);
void rna_def_texmat_common(struct StructRNA *srna, const char *texspace_editable);
-void rna_def_mtex_common(struct StructRNA *srna, const char *begin, const char *activeget, const char *activeset, const char *structname, const char *update);
+void rna_def_mtex_common(struct BlenderRNA *brna, struct StructRNA *srna, const char *begin, const char *activeget, const char *activeset, const char *structname, const char *structname_slots, const char *update);
void rna_def_render_layer_common(struct StructRNA *srna, int scene);
void rna_ID_name_get(struct PointerRNA *ptr, char *value);
int rna_ID_name_length(struct PointerRNA *ptr);
void rna_ID_name_set(struct PointerRNA *ptr, const char *value);
struct StructRNA *rna_ID_refine(struct PointerRNA *ptr);
-struct IDProperty *rna_ID_idproperties(struct PointerRNA *ptr, int create);
+struct IDProperty *rna_ID_idprops(struct PointerRNA *ptr, int create);
void rna_ID_fake_user_set(struct PointerRNA *ptr, int value);
-struct IDProperty *rna_IDPropertyGroup_idproperties(struct PointerRNA *ptr, int create);
+struct IDProperty *rna_IDPropertyGroup_idprops(struct PointerRNA *ptr, int create);
void rna_IDPropertyGroup_unregister(const struct bContext *C, struct StructRNA *type);
struct StructRNA *rna_IDPropertyGroup_register(const struct bContext *C, struct ReportList *reports, void *data, const char *identifier, StructValidateFunc validate, StructCallbackFunc call, StructFreeFunc free);
struct StructRNA* rna_IDPropertyGroup_refine(struct PointerRNA *ptr);
@@ -224,6 +224,7 @@ char *rna_TextureSlot_path(struct PointerRNA *ptr);
void RNA_api_action(StructRNA *srna);
void RNA_api_armature_edit_bone(StructRNA *srna);
+void RNA_api_bone(StructRNA *srna);
void RNA_api_drivers(StructRNA *srna);
void RNA_api_image(struct StructRNA *srna);
void RNA_api_operator(struct StructRNA *srna);
@@ -284,6 +285,7 @@ extern FloatPropertyRNA rna_IDProperty_float;
extern FloatPropertyRNA rna_IDProperty_float_array;
extern PointerPropertyRNA rna_IDProperty_group;
extern CollectionPropertyRNA rna_IDProperty_collection;
+extern CollectionPropertyRNA rna_IDProperty_idp_array;
extern FloatPropertyRNA rna_IDProperty_double;
extern FloatPropertyRNA rna_IDProperty_double_array;
@@ -352,6 +354,10 @@ PointerRNA rna_pointer_inherit_refine(struct PointerRNA *ptr, struct StructRNA *
int rna_parameter_size(struct PropertyRNA *parm);
int rna_parameter_size_alloc(struct PropertyRNA *parm);
+// XXX, these should not need to be defined here~!
+struct MTex *rna_mtex_texture_slots_add(struct ID *self, struct ReportList *reports);
+struct MTex *rna_mtex_texture_slots_create(struct ID *self, struct ReportList *reports, int index);
+void rna_mtex_texture_slots_clear(struct ID *self, struct ReportList *reports, int index);
#endif /* RNA_INTERNAL_H */
diff --git a/source/blender/makesrna/intern/rna_key.c b/source/blender/makesrna/intern/rna_key.c
index 26a101303b1..970c825d30b 100644
--- a/source/blender/makesrna/intern/rna_key.c
+++ b/source/blender/makesrna/intern/rna_key.c
@@ -363,13 +363,13 @@ static void rna_def_keydata(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Location", "");
RNA_def_property_update(prop, 0, "rna_Key_update_data");
- prop= RNA_def_property(srna, "handle_1_co", PROP_FLOAT, PROP_TRANSLATION);
+ prop= RNA_def_property(srna, "handle_left", PROP_FLOAT, PROP_TRANSLATION);
RNA_def_property_array(prop, 3);
RNA_def_property_float_funcs(prop, "rna_ShapeKeyBezierPoint_handle_1_co_get", "rna_ShapeKeyBezierPoint_handle_1_co_set", NULL);
RNA_def_property_ui_text(prop, "Handle 1 Location", "");
RNA_def_property_update(prop, 0, "rna_Key_update_data");
- prop= RNA_def_property(srna, "handle_2_co", PROP_FLOAT, PROP_TRANSLATION);
+ prop= RNA_def_property(srna, "handle_right", PROP_FLOAT, PROP_TRANSLATION);
RNA_def_property_array(prop, 3);
RNA_def_property_float_funcs(prop, "rna_ShapeKeyBezierPoint_handle_2_co_get", "rna_ShapeKeyBezierPoint_handle_2_co_set", NULL);
RNA_def_property_ui_text(prop, "Handle 2 Location", "");
@@ -488,7 +488,7 @@ static void rna_def_key(BlenderRNA *brna)
RNA_def_property_pointer_sdna(prop, NULL, "from");
RNA_def_property_ui_text(prop, "User", "Datablock using these shape keys");
- prop= RNA_def_property(srna, "relative", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_relative", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "type", KEY_RELATIVE);
RNA_def_property_ui_text(prop, "Relative", "Makes shape keys relative");
RNA_def_property_update(prop, 0, "rna_Key_update_data");
diff --git a/source/blender/makesrna/intern/rna_lamp.c b/source/blender/makesrna/intern/rna_lamp.c
index 4e2504516ec..fb7bb4a9194 100644
--- a/source/blender/makesrna/intern/rna_lamp.c
+++ b/source/blender/makesrna/intern/rna_lamp.c
@@ -159,7 +159,7 @@ static void rna_def_lamp_mtex(BlenderRNA *brna)
RNA_def_struct_sdna(srna, "MTex");
RNA_def_struct_ui_text(srna, "Lamp Texture Slot", "Texture slot for textures in a Lamp datablock");
- prop= RNA_def_property(srna, "texture_coordinates", PROP_ENUM, PROP_NONE);
+ prop= RNA_def_property(srna, "texture_coords", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "texco");
RNA_def_property_enum_items(prop, prop_texture_coordinates_items);
RNA_def_property_ui_text(prop, "Texture Coordinates", "");
@@ -170,12 +170,12 @@ static void rna_def_lamp_mtex(BlenderRNA *brna)
RNA_def_property_flag(prop, PROP_EDITABLE);
RNA_def_property_ui_text(prop, "Object", "Object to use for mapping with Object texture coordinates");
- prop= RNA_def_property(srna, "map_color", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_map_color", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "mapto", LAMAP_COL);
RNA_def_property_ui_text(prop, "Color", "Lets the texture affect the basic color of the lamp");
RNA_def_property_update(prop, 0, "rna_Lamp_update");
- prop= RNA_def_property(srna, "map_shadow", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_map_shadow", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "mapto", LAMAP_SHAD);
RNA_def_property_ui_text(prop, "Shadow", "Lets the texture affect the shadow color of the lamp");
RNA_def_property_update(prop, 0, "rna_Lamp_update");
@@ -362,22 +362,22 @@ static void rna_def_lamp(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Color", "Light color");
RNA_def_property_update(prop, 0, "rna_Lamp_draw_update");
- prop= RNA_def_property(srna, "layer", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_own_layer", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "mode", LA_LAYER);
RNA_def_property_ui_text(prop, "Layer", "Illuminates objects only on the same layer the lamp is on");
RNA_def_property_update(prop, 0, "rna_Lamp_update");
- prop= RNA_def_property(srna, "negative", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_negative", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "mode", LA_NEG);
RNA_def_property_ui_text(prop, "Negative", "Lamp casts negative light");
RNA_def_property_update(prop, 0, "rna_Lamp_update");
- prop= RNA_def_property(srna, "specular", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_specular", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_negative_sdna(prop, NULL, "mode", LA_NO_SPEC);
RNA_def_property_ui_text(prop, "Specular", "Lamp creates specular highlights");
RNA_def_property_update(prop, 0, "rna_Lamp_update");
- prop= RNA_def_property(srna, "diffuse", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_diffuse", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_negative_sdna(prop, NULL, "mode", LA_NO_DIFF);
RNA_def_property_ui_text(prop, "Diffuse", "Lamp does diffuse shading");
RNA_def_property_update(prop, 0, "rna_Lamp_update");
@@ -386,8 +386,8 @@ static void rna_def_lamp(BlenderRNA *brna)
rna_def_animdata_common(srna);
/* textures */
- rna_def_mtex_common(srna, "rna_Lamp_mtex_begin", "rna_Lamp_active_texture_get",
- "rna_Lamp_active_texture_set", "LampTextureSlot", "rna_Lamp_update");
+ rna_def_mtex_common(brna, srna, "rna_Lamp_mtex_begin", "rna_Lamp_active_texture_get",
+ "rna_Lamp_active_texture_set", "LampTextureSlot", "LampTextureSlots", "rna_Lamp_update");
}
static void rna_def_lamp_falloff(StructRNA *srna)
@@ -412,7 +412,7 @@ static void rna_def_lamp_falloff(StructRNA *srna)
RNA_def_property_ui_text(prop, "Falloff Curve", "Custom Lamp Falloff Curve");
RNA_def_property_update(prop, 0, "rna_Lamp_update");
- prop= RNA_def_property(srna, "sphere", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_sphere", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "mode", LA_SPHERE);
RNA_def_property_ui_text(prop, "Sphere", "Sets light intensity to zero beyond lamp distance");
RNA_def_property_update(prop, 0, "rna_Lamp_draw_update");
@@ -468,12 +468,12 @@ static void rna_def_lamp_shadow(StructRNA *srna, int spot, int area)
RNA_def_property_ui_text(prop, "Shadow Color", "Color of shadows cast by the lamp");
RNA_def_property_update(prop, 0, "rna_Lamp_update");
- prop= RNA_def_property(srna, "only_shadow", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_only_shadow", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "mode", LA_ONLYSHADOW);
RNA_def_property_ui_text(prop, "Only Shadow", "Causes light to cast shadows only without illuminating objects");
RNA_def_property_update(prop, 0, "rna_Lamp_update");
- prop= RNA_def_property(srna, "shadow_ray_sampling_method", PROP_ENUM, PROP_NONE);
+ 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_ui_text(prop, "Shadow Ray Sampling Method", "Method for generating shadow samples: Adaptive QMC is fastest, Constant QMC is less noisy but slower");
@@ -505,7 +505,7 @@ static void rna_def_lamp_shadow(StructRNA *srna, int spot, int area)
RNA_def_property_ui_text(prop, "Shadow Soft Size", "Light size for ray shadow sampling (Raytraced shadows)");
RNA_def_property_update(prop, 0, "rna_Lamp_update");
- prop= RNA_def_property(srna, "shadow_layer", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_shadow_layer", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "mode", LA_LAYER_SHADOW);
RNA_def_property_ui_text(prop, "Shadow Layer", "Causes only objects on the same layer to cast shadows");
RNA_def_property_update(prop, 0, "rna_Lamp_update");
@@ -541,17 +541,17 @@ static void rna_def_area_lamp(BlenderRNA *brna)
rna_def_lamp_shadow(srna, 0, 1);
- prop= RNA_def_property(srna, "umbra", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_umbra", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "ray_samp_type", LA_SAMP_UMBRA);
RNA_def_property_ui_text(prop, "Umbra", "Emphasize parts that are fully shadowed (Constant Jittered sampling)");
RNA_def_property_update(prop, 0, "rna_Lamp_update");
- prop= RNA_def_property(srna, "dither", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_dither", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "ray_samp_type", LA_SAMP_DITHER);
RNA_def_property_ui_text(prop, "Dither", "Use 2x2 dithering for sampling (Constant Jittered sampling)");
RNA_def_property_update(prop, 0, "rna_Lamp_update");
- prop= RNA_def_property(srna, "jitter", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_jitter", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "ray_samp_type", LA_SAMP_JITTER);
RNA_def_property_ui_text(prop, "Jitter", "Use noise for sampling (Constant Jittered sampling)");
RNA_def_property_update(prop, 0, "rna_Lamp_update");
@@ -613,12 +613,12 @@ static void rna_def_spot_lamp(BlenderRNA *brna)
rna_def_lamp_falloff(srna);
rna_def_lamp_shadow(srna, 1, 0);
- prop= RNA_def_property(srna, "square", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_square", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "mode", LA_SQUARE);
RNA_def_property_ui_text(prop, "Square", "Casts a square spot light shape");
RNA_def_property_update(prop, 0, "rna_Lamp_draw_update");
- prop= RNA_def_property(srna, "halo", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_halo", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "mode", LA_HALO);
RNA_def_property_ui_text(prop, "Halo", "Renders spotlight with a volumetric halo (Buffer Shadows)");
RNA_def_property_update(prop, 0, "rna_Lamp_update");
@@ -708,12 +708,12 @@ static void rna_def_spot_lamp(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Shadow Buffer Type", "Type of shadow buffer");
RNA_def_property_update(prop, 0, "rna_Lamp_update");
- prop= RNA_def_property(srna, "auto_clip_start", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_auto_clip_start", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "bufflag", LA_SHADBUF_AUTO_START);
RNA_def_property_ui_text(prop, "Autoclip Start", "Automatic calculation of clipping-start, based on visible vertices");
RNA_def_property_update(prop, 0, "rna_Lamp_draw_update");
- prop= RNA_def_property(srna, "auto_clip_end", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_auto_clip_end", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "bufflag", LA_SHADBUF_AUTO_END);
RNA_def_property_ui_text(prop, "Autoclip End", "Automatic calculation of clipping-end, based on visible vertices");
RNA_def_property_update(prop, 0, "rna_Lamp_draw_update");
diff --git a/source/blender/makesrna/intern/rna_lattice.c b/source/blender/makesrna/intern/rna_lattice.c
index c5132844016..f27a1ef86c0 100644
--- a/source/blender/makesrna/intern/rna_lattice.c
+++ b/source/blender/makesrna/intern/rna_lattice.c
@@ -79,8 +79,8 @@ static void rna_Lattice_points_begin(CollectionPropertyIterator *iter, PointerRN
Lattice *lt= (Lattice*)ptr->data;
int tot= lt->pntsu*lt->pntsv*lt->pntsw;
- if(lt->editlatt && lt->editlatt->def)
- rna_iterator_array_begin(iter, (void*)lt->editlatt->def, sizeof(BPoint), tot, 0, NULL);
+ if(lt->editlatt && lt->editlatt->latt->def)
+ 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);
else
@@ -111,7 +111,7 @@ static void rna_Lattice_update_size(Main *bmain, Scene *scene, PointerRNA *ptr)
if(ob->data == lt) {
resizelattice(lt, newu, newv, neww, ob);
if(lt->editlatt)
- resizelattice(lt->editlatt, newu, newv, neww, ob);
+ resizelattice(lt->editlatt->latt, newu, newv, neww, ob);
break;
}
}
@@ -120,13 +120,13 @@ static void rna_Lattice_update_size(Main *bmain, Scene *scene, PointerRNA *ptr)
if(!ob) {
resizelattice(lt, newu, newv, neww, NULL);
if(lt->editlatt)
- resizelattice(lt->editlatt, newu, newv, neww, NULL);
+ resizelattice(lt->editlatt->latt, newu, newv, neww, NULL);
}
rna_Lattice_update_data(bmain, scene, ptr);
}
-static void rna_Lattice_outside_set(PointerRNA *ptr, int value)
+static void rna_Lattice_use_outside_set(PointerRNA *ptr, int value)
{
Lattice *lt= ptr->data;
@@ -136,26 +136,39 @@ static void rna_Lattice_outside_set(PointerRNA *ptr, int value)
outside_lattice(lt);
if(lt->editlatt) {
- if(value) lt->editlatt->flag |= LT_OUTSIDE;
- else lt->editlatt->flag &= ~LT_OUTSIDE;
+ if(value) lt->editlatt->latt->flag |= LT_OUTSIDE;
+ else lt->editlatt->latt->flag &= ~LT_OUTSIDE;
- outside_lattice(lt->editlatt);
+ outside_lattice(lt->editlatt->latt);
}
}
+static int rna_Lattice_size_editable(PointerRNA *ptr)
+{
+ Lattice *lt= (Lattice*)ptr->data;
+
+ return lt->key == NULL;
+}
+
static void rna_Lattice_points_u_set(PointerRNA *ptr, int value)
{
- ((Lattice*)ptr->data)->opntsu= CLAMPIS(value, 1, 64);
+ Lattice *lt= (Lattice*)ptr->data;
+
+ lt->opntsu= CLAMPIS(value, 1, 64);
}
static void rna_Lattice_points_v_set(PointerRNA *ptr, int value)
{
- ((Lattice*)ptr->data)->opntsv= CLAMPIS(value, 1, 64);
+ Lattice *lt= (Lattice*)ptr->data;
+
+ lt->opntsv= CLAMPIS(value, 1, 64);
}
static void rna_Lattice_points_w_set(PointerRNA *ptr, int value)
{
- ((Lattice*)ptr->data)->opntsw= CLAMPIS(value, 1, 64);
+ Lattice *lt= (Lattice*)ptr->data;
+
+ lt->opntsw= CLAMPIS(value, 1, 64);
}
static void rna_Lattice_vg_name_set(PointerRNA *ptr, const char *value)
@@ -164,7 +177,7 @@ static void rna_Lattice_vg_name_set(PointerRNA *ptr, const char *value)
strcpy(lt->vgroup, value);
if(lt->editlatt)
- strcpy(lt->editlatt->vgroup, value);
+ strcpy(lt->editlatt->latt->vgroup, value);
}
@@ -185,7 +198,7 @@ static void rna_def_latticepoint(BlenderRNA *brna)
RNA_def_property_float_funcs(prop, "rna_LatticePoint_co_get", NULL, NULL);
RNA_def_property_ui_text(prop, "Location", "");
- prop= RNA_def_property(srna, "deformed_co", PROP_FLOAT, PROP_TRANSLATION);
+ prop= RNA_def_property(srna, "co_deform", PROP_FLOAT, PROP_TRANSLATION);
RNA_def_property_float_sdna(prop, NULL, "vec");
RNA_def_property_array(prop, 3);
RNA_def_property_ui_text(prop, "Deformed Location", "");
@@ -216,22 +229,25 @@ static void rna_def_lattice(BlenderRNA *brna)
RNA_def_property_int_sdna(prop, NULL, "pntsu");
RNA_def_property_int_funcs(prop, NULL, "rna_Lattice_points_u_set", NULL);
RNA_def_property_range(prop, 1, 64);
- RNA_def_property_ui_text(prop, "U", "Points in U direction");
+ RNA_def_property_ui_text(prop, "U", "Points in U direction (can't be changed when there are shape keys)");
RNA_def_property_update(prop, 0, "rna_Lattice_update_size");
+ RNA_def_property_editable_func(prop, "rna_Lattice_size_editable");
prop= RNA_def_property(srna, "points_v", PROP_INT, PROP_NONE);
RNA_def_property_int_sdna(prop, NULL, "pntsv");
RNA_def_property_int_funcs(prop, NULL, "rna_Lattice_points_v_set", NULL);
RNA_def_property_range(prop, 1, 64);
- RNA_def_property_ui_text(prop, "V", "Points in V direction");
+ RNA_def_property_ui_text(prop, "V", "Points in V direction (can't be changed when there are shape keys)");
RNA_def_property_update(prop, 0, "rna_Lattice_update_size");
+ RNA_def_property_editable_func(prop, "rna_Lattice_size_editable");
prop= RNA_def_property(srna, "points_w", PROP_INT, PROP_NONE);
RNA_def_property_int_sdna(prop, NULL, "pntsw");
RNA_def_property_int_funcs(prop, NULL, "rna_Lattice_points_w_set", NULL);
RNA_def_property_range(prop, 1, 64);
- RNA_def_property_ui_text(prop, "W", "Points in W direction");
+ RNA_def_property_ui_text(prop, "W", "Points in W direction (can't be changed when there are shape keys)");
RNA_def_property_update(prop, 0, "rna_Lattice_update_size");
+ RNA_def_property_editable_func(prop, "rna_Lattice_size_editable");
prop= RNA_def_property(srna, "interpolation_type_u", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "typeu");
@@ -251,9 +267,9 @@ static void rna_def_lattice(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Interpolation Type W", "");
RNA_def_property_update(prop, 0, "rna_Lattice_update_data");
- prop= RNA_def_property(srna, "outside", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_outside", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", LT_OUTSIDE);
- RNA_def_property_boolean_funcs(prop, NULL, "rna_Lattice_outside_set");
+ RNA_def_property_boolean_funcs(prop, NULL, "rna_Lattice_use_outside_set");
RNA_def_property_ui_text(prop, "Outside", "Only draw, and take into account, the outer vertices");
RNA_def_property_update(prop, 0, "rna_Lattice_update_data");
diff --git a/source/blender/makesrna/intern/rna_main.c b/source/blender/makesrna/intern/rna_main.c
index a6260791012..99758b8f0fe 100644
--- a/source/blender/makesrna/intern/rna_main.c
+++ b/source/blender/makesrna/intern/rna_main.c
@@ -50,9 +50,9 @@ static void rna_Main_debug_set(PointerRNA *ptr, const int value)
G.f &= ~G_DEBUG;
}
-static int rna_Main_fileissaved_get(PointerRNA *ptr)
+static int rna_Main_is_dirty_get(PointerRNA *ptr)
{
- return G.relbase_valid;
+ return !G.relbase_valid;
}
static void rna_Main_filepath_get(PointerRNA *ptr, char *value)
@@ -147,13 +147,11 @@ static void rna_Main_camera_begin(CollectionPropertyIterator *iter, PointerRNA *
rna_iterator_listbase_begin(iter, &bmain->camera, NULL);
}
-#if 0
static void rna_Main_key_begin(CollectionPropertyIterator *iter, PointerRNA *ptr)
{
Main *bmain= (Main*)ptr->data;
rna_iterator_listbase_begin(iter, &bmain->key, NULL);
}
-#endif
static void rna_Main_world_begin(CollectionPropertyIterator *iter, PointerRNA *ptr)
{
@@ -292,20 +290,20 @@ void RNA_def_main(BlenderRNA *brna)
{"brushes", "Brush", "rna_Main_brush_begin", "Brushes", "Brush datablocks.", RNA_def_main_brushes},
{"worlds", "World", "rna_Main_world_begin", "Worlds", "World datablocks.", RNA_def_main_worlds},
{"groups", "Group", "rna_Main_group_begin", "Groups", "Group datablocks.", RNA_def_main_groups},
-/* {"keys", "Key", "rna_Main_key_begin", "Keys", "Key datablocks.", NULL}, */
+ {"shape_keys", "Key", "rna_Main_key_begin", "Keys", "Key datablocks.", NULL},
{"scripts", "ID", "rna_Main_script_begin", "Scripts", "Script datablocks (DEPRECATED).", NULL},
{"texts", "Text", "rna_Main_text_begin", "Texts", "Text datablocks.", RNA_def_main_texts},
{"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},
{"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},
- {"gpencil", "GreasePencil", "rna_Main_gpencil_begin", "Grease Pencil", "Grease Pencil datablocks.", RNA_def_main_gpencil},
+ {"grease_pencil", "GreasePencil", "rna_Main_gpencil_begin", "Grease Pencil", "Grease Pencil datablocks.", RNA_def_main_gpencil},
{NULL, NULL, NULL, NULL, NULL, NULL}};
int i;
- srna= RNA_def_struct(brna, "Main", NULL);
- RNA_def_struct_ui_text(srna, "Main", "Main data structure representing a .blend file and all its datablocks");
+ srna= RNA_def_struct(brna, "BlendData", NULL);
+ RNA_def_struct_ui_text(srna, "Blendfile Data", "Main data structure representing a .blend file and all its datablocks");
RNA_def_struct_ui_icon(srna, ICON_BLENDER);
prop= RNA_def_property(srna, "filepath", PROP_STRING, PROP_FILEPATH);
@@ -314,9 +312,9 @@ void RNA_def_main(BlenderRNA *brna)
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
RNA_def_property_ui_text(prop, "Filename", "Path to the .blend file");
- prop= RNA_def_property(srna, "file_is_saved", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "is_dirty", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
- RNA_def_property_boolean_funcs(prop, "rna_Main_fileissaved_get", NULL);
+ RNA_def_property_boolean_funcs(prop, "rna_Main_is_dirty_get", NULL);
RNA_def_property_ui_text(prop, "File is Saved", "Has the current session been saved to disk as a .blend file");
prop= RNA_def_property(srna, "debug", PROP_BOOLEAN, PROP_NONE);
diff --git a/source/blender/makesrna/intern/rna_main_api.c b/source/blender/makesrna/intern/rna_main_api.c
index 49359e03985..b244d8ee5d3 100644
--- a/source/blender/makesrna/intern/rna_main_api.c
+++ b/source/blender/makesrna/intern/rna_main_api.c
@@ -86,7 +86,9 @@ Tex *rna_Main_add_texture(Main *bmain, char *name)
Camera *rna_Main_cameras_new(Main *bmain, char* name)
{
- return add_camera(name);
+ ID *id= add_camera(name);
+ id->us--;
+ return (Camera *)id;
}
void rna_Main_cameras_remove(Main *bmain, ReportList *reports, struct Camera *camera)
{
@@ -173,27 +175,20 @@ Object *rna_Main_objects_new(Main *bmain, ReportList *reports, char* name, ID *d
void rna_Main_objects_remove(Main *bmain, ReportList *reports, struct Object *object)
{
- /*
- NOTE: the following example shows when this function should _not_ be called
-
- ob = bpy.data.add_object()
- scene.add_object(ob)
-
- # ob is freed here
- scene.remove_object(ob)
-
- # don't do this since ob is already freed!
- bpy.data.remove_object(ob)
- */
- if(ID_REAL_USERS(object) <= 0)
+ if(ID_REAL_USERS(object) <= 0) {
+ unlink_object(NULL, object); /* needed or ID pointers to this are not cleared */
free_libblock(&bmain->object, object);
- else
+ }
+ 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));
+ }
}
struct Material *rna_Main_materials_new(Main *bmain, char* name)
{
- return add_material(name);
+ ID *id= (ID *)add_material(name);
+ id->us--;
+ return (Material *)id;
}
void rna_Main_materials_remove(Main *bmain, ReportList *reports, struct Material *material)
{
@@ -348,9 +343,10 @@ void rna_Main_fonts_remove(Main *bmain, ReportList *reports, VFont *vfont)
/* XXX python now has invalid pointer? */
}
-Tex *rna_Main_textures_new(Main *bmain, char* name)
+Tex *rna_Main_textures_new(Main *bmain, char* name, int type)
{
Tex *tex= add_texture(name);
+ tex_set_type(tex, type);
tex->id.us--;
return tex;
}
@@ -517,7 +513,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);
+ RNA_def_property_flag(parm, PROP_REQUIRED|PROP_NEVER_NULL);
}
void RNA_def_main_scenes(BlenderRNA *brna, PropertyRNA *cprop)
@@ -540,10 +536,9 @@ void RNA_def_main_scenes(BlenderRNA *brna, PropertyRNA *cprop)
func= RNA_def_function(srna, "remove", "rna_Main_scenes_remove");
RNA_def_function_flag(func, FUNC_USE_CONTEXT|FUNC_USE_REPORTS);
- parm= RNA_def_pointer(func, "scene", "Scene", "", "Scene to remove.");
- RNA_def_property_flag(parm, PROP_REQUIRED);
RNA_def_function_ui_description(func, "Remove a scene from the current blendfile.");
- RNA_def_property_flag(parm, PROP_REQUIRED);
+ parm= RNA_def_pointer(func, "scene", "Scene", "", "Scene to remove.");
+ RNA_def_property_flag(parm, PROP_REQUIRED|PROP_NEVER_NULL);
}
void RNA_def_main_objects(BlenderRNA *brna, PropertyRNA *cprop)
@@ -569,10 +564,10 @@ void RNA_def_main_objects(BlenderRNA *brna, PropertyRNA *cprop)
RNA_def_function_return(func, parm);
func= RNA_def_function(srna, "remove", "rna_Main_objects_remove");
+ 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);
- RNA_def_function_ui_description(func, "Remove a object from the current blendfile.");
+ RNA_def_property_flag(parm, PROP_REQUIRED|PROP_NEVER_NULL);
}
void RNA_def_main_materials(BlenderRNA *brna, PropertyRNA *cprop)
@@ -597,7 +592,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);
+ RNA_def_property_flag(parm, PROP_REQUIRED|PROP_NEVER_NULL);
}
void RNA_def_main_node_groups(BlenderRNA *brna, PropertyRNA *cprop)
{
@@ -628,7 +623,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);
+ RNA_def_property_flag(parm, PROP_REQUIRED|PROP_NEVER_NULL);
#endif
}
void RNA_def_main_meshes(BlenderRNA *brna, PropertyRNA *cprop)
@@ -653,7 +648,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);
+ RNA_def_property_flag(parm, PROP_REQUIRED|PROP_NEVER_NULL);
}
void RNA_def_main_lamps(BlenderRNA *brna, PropertyRNA *cprop)
{
@@ -677,7 +672,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);
+ RNA_def_property_flag(parm, PROP_REQUIRED|PROP_NEVER_NULL);
}
void RNA_def_main_libraries(BlenderRNA *brna, PropertyRNA *cprop)
{
@@ -726,7 +721,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);
+ RNA_def_property_flag(parm, PROP_REQUIRED|PROP_NEVER_NULL);
}
void RNA_def_main_lattices(BlenderRNA *brna, PropertyRNA *cprop)
@@ -751,7 +746,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);
+ RNA_def_property_flag(parm, PROP_REQUIRED|PROP_NEVER_NULL);
}
void RNA_def_main_curves(BlenderRNA *brna, PropertyRNA *cprop)
{
@@ -767,7 +762,7 @@ void RNA_def_main_curves(BlenderRNA *brna, PropertyRNA *cprop)
RNA_def_function_ui_description(func, "Add a new curve to the main database");
parm= RNA_def_string(func, "name", "Curve", 0, "", "New name for the datablock.");
RNA_def_property_flag(parm, PROP_REQUIRED);
- parm= RNA_def_enum(func, "type", object_type_curve_items, 0, "Type", "The type of curve object to add");
+ parm= RNA_def_enum(func, "type", object_type_curve_items, 0, "Type", "The type of curve to add");
RNA_def_property_flag(parm, PROP_REQUIRED);
/* return type */
parm= RNA_def_pointer(func, "curve", "Curve", "", "New curve datablock.");
@@ -777,7 +772,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);
+ RNA_def_property_flag(parm, PROP_REQUIRED|PROP_NEVER_NULL);
}
void RNA_def_main_metaballs(BlenderRNA *brna, PropertyRNA *cprop)
{
@@ -801,7 +796,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);
+ RNA_def_property_flag(parm, PROP_REQUIRED|PROP_NEVER_NULL);
}
void RNA_def_main_fonts(BlenderRNA *brna, PropertyRNA *cprop)
{
@@ -826,7 +821,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);
+ RNA_def_property_flag(parm, PROP_REQUIRED|PROP_NEVER_NULL);
}
void RNA_def_main_textures(BlenderRNA *brna, PropertyRNA *cprop)
{
@@ -842,6 +837,8 @@ void RNA_def_main_textures(BlenderRNA *brna, PropertyRNA *cprop)
RNA_def_function_ui_description(func, "Add a new texture to the main database");
parm= RNA_def_string(func, "name", "Texture", 0, "", "New name for the datablock.");
RNA_def_property_flag(parm, PROP_REQUIRED);
+ parm= RNA_def_enum(func, "type", texture_type_items, 0, "Type", "The type of texture to add");
+ RNA_def_property_flag(parm, PROP_REQUIRED);
/* return type */
parm= RNA_def_pointer(func, "texture", "Texture", "", "New texture datablock.");
RNA_def_function_return(func, parm);
@@ -850,7 +847,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);
+ RNA_def_property_flag(parm, PROP_REQUIRED|PROP_NEVER_NULL);
}
void RNA_def_main_brushes(BlenderRNA *brna, PropertyRNA *cprop)
{
@@ -874,7 +871,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);
+ RNA_def_property_flag(parm, PROP_REQUIRED|PROP_NEVER_NULL);
}
void RNA_def_main_worlds(BlenderRNA *brna, PropertyRNA *cprop)
@@ -899,7 +896,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);
+ RNA_def_property_flag(parm, PROP_REQUIRED|PROP_NEVER_NULL);
}
void RNA_def_main_groups(BlenderRNA *brna, PropertyRNA *cprop)
@@ -924,7 +921,7 @@ void RNA_def_main_groups(BlenderRNA *brna, PropertyRNA *cprop)
RNA_def_function_flag(func, FUNC_USE_REPORTS);
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);
+ RNA_def_property_flag(parm, PROP_REQUIRED|PROP_NEVER_NULL);
}
void RNA_def_main_texts(BlenderRNA *brna, PropertyRNA *cprop)
{
@@ -948,7 +945,7 @@ void RNA_def_main_texts(BlenderRNA *brna, PropertyRNA *cprop)
RNA_def_function_flag(func, FUNC_USE_REPORTS);
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);
+ RNA_def_property_flag(parm, PROP_REQUIRED|PROP_NEVER_NULL);
/* load func */
func= RNA_def_function(srna, "load", "rna_Main_texts_load");
@@ -986,7 +983,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);
+ RNA_def_property_flag(parm, PROP_REQUIRED|PROP_NEVER_NULL);
}
void RNA_def_main_actions(BlenderRNA *brna, PropertyRNA *cprop)
{
@@ -1010,7 +1007,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);
+ RNA_def_property_flag(parm, PROP_REQUIRED|PROP_NEVER_NULL);
}
void RNA_def_main_particles(BlenderRNA *brna, PropertyRNA *cprop)
{
@@ -1034,7 +1031,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);
+ RNA_def_property_flag(parm, PROP_REQUIRED|PROP_NEVER_NULL);
}
void RNA_def_main_gpencil(BlenderRNA *brna, PropertyRNA *cprop)
{
diff --git a/source/blender/makesrna/intern/rna_material.c b/source/blender/makesrna/intern/rna_material.c
index 9b4548e0de6..997690b2395 100644
--- a/source/blender/makesrna/intern/rna_material.c
+++ b/source/blender/makesrna/intern/rna_material.c
@@ -186,7 +186,7 @@ static void rna_MaterialStrand_end_size_range(PointerRNA *ptr, float *min, float
}
}
-static int rna_MaterialTextureSlot_enabled_get(PointerRNA *ptr)
+static int rna_MaterialTextureSlot_use_get(PointerRNA *ptr)
{
Material *ma= (Material*)ptr->id.data;
MTex *mtex= (MTex*)ptr->data;
@@ -199,7 +199,7 @@ static int rna_MaterialTextureSlot_enabled_get(PointerRNA *ptr)
return 0;
}
-static void rna_MaterialTextureSlot_enabled_set(PointerRNA *ptr, int value)
+static void rna_MaterialTextureSlot_use_set(PointerRNA *ptr, int value)
{
Material *ma= (Material*)ptr->id.data;
MTex *mtex= (MTex*)ptr->data;
@@ -276,6 +276,54 @@ static EnumPropertyItem *rna_Material_texture_coordinates_itemf(bContext *C, Poi
return item;
}
+MTex *rna_mtex_texture_slots_add(ID *self_id, ReportList *reports)
+{
+ MTex *mtex= add_mtex_id(self_id, -1);
+ if (mtex == NULL) {
+ BKE_reportf(reports, RPT_ERROR, "maximum number of textures added %d", MAX_MTEX);
+ return NULL;
+ }
+
+ return mtex;
+}
+
+MTex *rna_mtex_texture_slots_create(ID *self_id, ReportList *reports, int index)
+{
+ MTex *mtex;
+
+ if(index < 0 || index >= MAX_MTEX) {
+ BKE_reportf(reports, RPT_ERROR, "index %d is invalid", index);
+ return NULL;
+ }
+
+ mtex= add_mtex_id(self_id, index);
+
+ return mtex;
+}
+
+void rna_mtex_texture_slots_clear(ID *self_id, ReportList *reports, int index)
+{
+ MTex **mtex_ar;
+ short act;
+
+ give_active_mtex(self_id, &mtex_ar, &act);
+
+ if (mtex_ar == NULL) {
+ BKE_report(reports, RPT_ERROR, "mtex not found for this type");
+ return;
+ }
+
+ if(index < 0 || index >= MAX_MTEX) {
+ BKE_reportf(reports, RPT_ERROR, "index %d is invalid", index);
+ return;
+ }
+
+ if(mtex_ar[index]) {
+ id_us_min((ID *)mtex_ar[index]->tex);
+ MEM_freeN(mtex_ar[index]);
+ mtex_ar[index]= NULL;
+ }
+}
#else
@@ -323,7 +371,7 @@ static void rna_def_material_mtex(BlenderRNA *brna)
RNA_def_struct_sdna(srna, "MTex");
RNA_def_struct_ui_text(srna, "Material Texture Slot", "Texture slot for textures in a Material datablock");
- prop= RNA_def_property(srna, "texture_coordinates", PROP_ENUM, PROP_NONE);
+ prop= RNA_def_property(srna, "texture_coords", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "texco");
RNA_def_property_enum_items(prop, prop_texture_coordinates_items);
RNA_def_property_enum_funcs(prop, NULL, NULL, "rna_Material_texture_coordinates_itemf");
@@ -342,99 +390,99 @@ static void rna_def_material_mtex(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "UV Layer", "UV layer to use for mapping with UV texture coordinates");
RNA_def_property_update(prop, 0, "rna_Material_update");
- prop= RNA_def_property(srna, "from_dupli", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_from_dupli", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "texflag", MTEX_DUPLI_MAPTO);
RNA_def_property_ui_text(prop, "From Dupli", "Dupli's instanced from verts, faces or particles, inherit texture coordinate from their parent");
RNA_def_property_update(prop, 0, "rna_Material_update");
- prop= RNA_def_property(srna, "from_original", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_from_original", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "texflag", MTEX_OB_DUPLI_ORIG);
RNA_def_property_ui_text(prop, "From Original", "Dupli's derive their object coordinates from the original objects transformation");
RNA_def_property_update(prop, 0, "rna_Material_update");
- prop= RNA_def_property(srna, "map_colordiff", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_map_color_diffuse", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "mapto", MAP_COL);
RNA_def_property_ui_text(prop, "Diffuse Color", "Causes the texture to affect basic color of the material");
RNA_def_property_update(prop, 0, "rna_Material_update");
- prop= RNA_def_property(srna, "map_normal", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_map_normal", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "mapto", MAP_NORM);
RNA_def_property_ui_text(prop, "Normal", "Causes the texture to affect the rendered normal");
RNA_def_property_update(prop, 0, "rna_Material_update");
- prop= RNA_def_property(srna, "map_colorspec", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_map_color_spec", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "mapto", MAP_COLSPEC);
RNA_def_property_ui_text(prop, "Specular Color", "Causes the texture to affect the specularity color");
RNA_def_property_update(prop, 0, "rna_Material_update");
- prop= RNA_def_property(srna, "map_mirror", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_map_mirror", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "mapto", MAP_COLMIR);
RNA_def_property_ui_text(prop, "Mirror", "Causes the texture to affect the mirror color");
RNA_def_property_update(prop, 0, "rna_Material_update");
- prop= RNA_def_property(srna, "map_diffuse", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_map_diffuse", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "mapto", MAP_REF);
RNA_def_property_ui_text(prop, "Diffuse", "Causes the texture to affect the value of the materials diffuse reflectivity");
RNA_def_property_update(prop, 0, "rna_Material_update");
- prop= RNA_def_property(srna, "map_specular", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_map_specular", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "mapto", MAP_SPEC);
RNA_def_property_ui_text(prop, "Specular", "Causes the texture to affect the value of specular reflectivity");
RNA_def_property_update(prop, 0, "rna_Material_update");
- prop= RNA_def_property(srna, "map_ambient", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_map_ambient", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "mapto", MAP_AMB);
RNA_def_property_ui_text(prop, "Ambient", "Causes the texture to affect the value of ambient");
RNA_def_property_update(prop, 0, "rna_Material_update");
- prop= RNA_def_property(srna, "map_hardness", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_map_hardness", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "mapto", MAP_HAR);
RNA_def_property_ui_text(prop, "Hardness", "Causes the texture to affect the hardness value");
RNA_def_property_update(prop, 0, "rna_Material_update");
- prop= RNA_def_property(srna, "map_raymir", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_map_raymir", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "mapto", MAP_RAYMIRR);
RNA_def_property_ui_text(prop, "Ray-Mirror", "Causes the texture to affect the ray-mirror value");
RNA_def_property_update(prop, 0, "rna_Material_update");
- prop= RNA_def_property(srna, "map_alpha", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_map_alpha", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "mapto", MAP_ALPHA);
RNA_def_property_ui_text(prop, "Alpha", "Causes the texture to affect the alpha value");
RNA_def_property_update(prop, 0, "rna_Material_update");
- prop= RNA_def_property(srna, "map_emit", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_map_emit", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "mapto", MAP_EMIT);
RNA_def_property_ui_text(prop, "Emit", "Causes the texture to affect the emit value");
RNA_def_property_update(prop, 0, "rna_Material_update");
- prop= RNA_def_property(srna, "map_translucency", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_map_translucency", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "mapto", MAP_TRANSLU);
RNA_def_property_ui_text(prop, "Translucency", "Causes the texture to affect the translucency value");
RNA_def_property_update(prop, 0, "rna_Material_update");
- prop= RNA_def_property(srna, "map_displacement", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_map_displacement", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "mapto", MAP_DISPLACE);
RNA_def_property_ui_text(prop, "Displacement", "Let the texture displace the surface");
RNA_def_property_update(prop, 0, "rna_Material_update");
- prop= RNA_def_property(srna, "map_warp", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_map_warp", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "mapto", MAP_WARP);
RNA_def_property_ui_text(prop, "Warp", "Let the texture warp texture coordinates of next channels");
RNA_def_property_update(prop, 0, "rna_Material_update");
- prop= RNA_def_property(srna, "x_mapping", PROP_ENUM, PROP_NONE);
+ prop= RNA_def_property(srna, "mapping_x", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "projx");
RNA_def_property_enum_items(prop, prop_x_mapping_items);
RNA_def_property_ui_text(prop, "X Mapping", "");
RNA_def_property_update(prop, 0, "rna_Material_update");
- prop= RNA_def_property(srna, "y_mapping", PROP_ENUM, PROP_NONE);
+ prop= RNA_def_property(srna, "mapping_y", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "projy");
RNA_def_property_enum_items(prop, prop_y_mapping_items);
RNA_def_property_ui_text(prop, "Y Mapping", "");
RNA_def_property_update(prop, 0, "rna_Material_update");
- prop= RNA_def_property(srna, "z_mapping", PROP_ENUM, PROP_NONE);
+ prop= RNA_def_property(srna, "mapping_z", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "projz");
RNA_def_property_enum_items(prop, prop_z_mapping_items);
RNA_def_property_ui_text(prop, "Z Mapping", "");
@@ -469,13 +517,13 @@ static void rna_def_material_mtex(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Warp Factor", "Amount texture affects texture coordinates of next channels");
RNA_def_property_update(prop, 0, "rna_Material_update");
- prop= RNA_def_property(srna, "colorspec_factor", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "specular_color_factor", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "colspecfac");
RNA_def_property_ui_range(prop, 0, 1, 10, 3);
RNA_def_property_ui_text(prop, "Specular Color Factor", "Amount texture affects specular color");
RNA_def_property_update(prop, 0, "rna_Material_update");
- prop= RNA_def_property(srna, "colordiff_factor", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "diffuse_color_factor", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "colfac");
RNA_def_property_ui_range(prop, 0, 1, 10, 3);
RNA_def_property_ui_text(prop, "Diffuse Color Factor", "Amount texture affects diffuse color");
@@ -536,54 +584,54 @@ static void rna_def_material_mtex(BlenderRNA *brna)
RNA_def_property_update(prop, 0, "rna_Material_update");
/* volume material */
- prop= RNA_def_property(srna, "map_coloremission", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_map_color_emission", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "mapto", MAP_EMISSION_COL);
RNA_def_property_ui_text(prop, "Emission Color", "Causes the texture to affect the color of emission");
RNA_def_property_update(prop, 0, "rna_Material_update");
- prop= RNA_def_property(srna, "map_colorreflection", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_map_color_reflection", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "mapto", MAP_REFLECTION_COL);
RNA_def_property_ui_text(prop, "Reflection Color", "Causes the texture to affect the color of scattered light");
RNA_def_property_update(prop, 0, "rna_Material_update");
- prop= RNA_def_property(srna, "map_colortransmission", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_map_color_transmission", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "mapto", MAP_TRANSMISSION_COL);
RNA_def_property_ui_text(prop, "Transmission Color", "Causes the texture to affect the result color after other light has been scattered/absorbed");
RNA_def_property_update(prop, NC_TEXTURE, NULL);
- prop= RNA_def_property(srna, "map_density", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_map_density", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "mapto", MAP_DENSITY);
RNA_def_property_ui_text(prop, "Density", "Causes the texture to affect the volume's density");
RNA_def_property_update(prop, 0, "rna_Material_update");
- prop= RNA_def_property(srna, "map_emission", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_map_emission", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "mapto", MAP_EMISSION);
RNA_def_property_ui_text(prop, "Emission", "Causes the texture to affect the volume's emission");
RNA_def_property_update(prop, 0, "rna_Material_update");
- prop= RNA_def_property(srna, "map_scattering", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_map_scatter", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "mapto", MAP_SCATTERING);
RNA_def_property_ui_text(prop, "Scattering", "Causes the texture to affect the volume's scattering");
RNA_def_property_update(prop, 0, "rna_Material_update");
- prop= RNA_def_property(srna, "map_reflection", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_map_reflect", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "mapto", MAP_REFLECTION);
RNA_def_property_ui_text(prop, "Reflection", "Causes the texture to affect the reflected light's brightness");
RNA_def_property_update(prop, NC_TEXTURE, NULL);
- prop= RNA_def_property(srna, "coloremission_factor", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "emission_color_factor", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "colemitfac");
RNA_def_property_ui_range(prop, 0, 1, 10, 3);
RNA_def_property_ui_text(prop, "Emission Color Factor", "Amount texture affects emission color");
RNA_def_property_update(prop, 0, "rna_Material_update");
- prop= RNA_def_property(srna, "colorreflection_factor", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "reflection_color_factor", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "colreflfac");
RNA_def_property_ui_range(prop, 0, 1, 10, 3);
RNA_def_property_ui_text(prop, "Reflection Color Factor", "Amount texture affects color of out-scattered light");
RNA_def_property_update(prop, 0, "rna_Material_update");
- prop= RNA_def_property(srna, "colortransmission_factor", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "transmission_color_factor", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "coltransfac");
RNA_def_property_ui_range(prop, 0, 1, 10, 3);
RNA_def_property_ui_text(prop, "Transmission Color Factor", "Amount texture affects result color after light has been scattered/absorbed");
@@ -615,14 +663,14 @@ static void rna_def_material_mtex(BlenderRNA *brna)
/* end volume material */
- prop= RNA_def_property(srna, "enabled", PROP_BOOLEAN, PROP_NONE);
- RNA_def_property_boolean_funcs(prop, "rna_MaterialTextureSlot_enabled_get", "rna_MaterialTextureSlot_enabled_set");
+ prop= RNA_def_property(srna, "use", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_funcs(prop, "rna_MaterialTextureSlot_use_get", "rna_MaterialTextureSlot_use_set");
RNA_def_property_ui_text(prop, "Enabled", "Enable this material texture slot");
RNA_def_property_update(prop, 0, "rna_Material_update");
- prop= RNA_def_property(srna, "new_bump", PROP_BOOLEAN, PROP_NONE);
- RNA_def_property_boolean_sdna(prop, NULL, "texflag", MTEX_NEW_BUMP);
- RNA_def_property_ui_text(prop, "New Bump", "Use new, corrected bump mapping code (backwards compatibility option)");
+ prop= RNA_def_property(srna, "use_old_bump", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_negative_sdna(prop, NULL, "texflag", MTEX_NEW_BUMP);
+ RNA_def_property_ui_text(prop, "Old Bump", "Use old bump mapping (backwards compatibility option)");
RNA_def_property_update(prop, 0, "rna_Material_update");
}
@@ -823,7 +871,7 @@ static void rna_def_material_raymirror(BlenderRNA *brna)
RNA_def_struct_nested(brna, srna, "Material");
RNA_def_struct_ui_text(srna, "Material Raytrace Mirror", "Raytraced reflection settings for a Material datablock");
- prop= RNA_def_property(srna, "enabled", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "mode", MA_RAYMIRROR); /* use bitflags */
RNA_def_property_ui_text(prop, "Enabled", "Enable raytraced reflections");
RNA_def_property_update(prop, 0, "rna_Material_update");
@@ -872,7 +920,7 @@ static void rna_def_material_raymirror(BlenderRNA *brna)
prop= RNA_def_property(srna, "depth", PROP_INT, PROP_UNSIGNED);
RNA_def_property_int_sdna(prop, NULL, "ray_depth");
- RNA_def_property_range(prop, 0, 10);
+ RNA_def_property_ui_range(prop, 0, 100, 1, 3);
RNA_def_property_ui_text(prop, "Depth", "Maximum allowed number of light inter-reflections");
RNA_def_property_update(prop, 0, "rna_Material_update");
@@ -937,7 +985,7 @@ static void rna_def_material_raytra(BlenderRNA *brna)
prop= RNA_def_property(srna, "depth", PROP_INT, PROP_UNSIGNED);
RNA_def_property_int_sdna(prop, NULL, "ray_depth_tra");
- RNA_def_property_range(prop, 0, 10);
+ RNA_def_property_ui_range(prop, 0, 100, 1, 3);
RNA_def_property_ui_text(prop, "Depth", "Maximum allowed number of light inter-refractions");
RNA_def_property_update(prop, 0, "rna_Material_update");
@@ -947,7 +995,7 @@ static void rna_def_material_raytra(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Filter", "Amount to blend in the material's diffuse color in raytraced transparency (simulating absorption)");
RNA_def_property_update(prop, 0, "rna_Material_update");
- prop= RNA_def_property(srna, "limit", PROP_FLOAT, PROP_DISTANCE);
+ prop= RNA_def_property(srna, "depth_max", PROP_FLOAT, PROP_DISTANCE);
RNA_def_property_float_sdna(prop, NULL, "tx_limit");
RNA_def_property_range(prop, 0.0f, 100.0f);
RNA_def_property_ui_text(prop, "Limit", "Maximum depth for light to travel through the transparent material before becoming fully filtered (0.0 is disabled)");
@@ -984,7 +1032,7 @@ static void rna_def_material_volume(BlenderRNA *brna)
RNA_def_struct_nested(brna, srna, "Material");
RNA_def_struct_ui_text(srna, "Material Volume", "Volume rendering settings for a Material datablock");
- prop= RNA_def_property(srna, "step_calculation", PROP_ENUM, PROP_NONE);
+ prop= RNA_def_property(srna, "step_method", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "stepsize_type");
RNA_def_property_enum_items(prop, prop_stepsize_items);
RNA_def_property_ui_text(prop, "Step Calculation", "Method of calculating the steps through the volume");
@@ -997,18 +1045,18 @@ static void rna_def_material_volume(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Step Size", "Distance between subsequent volume depth samples");
RNA_def_property_update(prop, 0, "rna_Material_update");
- prop= RNA_def_property(srna, "lighting_mode", PROP_ENUM, PROP_NONE);
+ prop= RNA_def_property(srna, "light_method", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "shade_type");
RNA_def_property_enum_items(prop, prop_lighting_items);
RNA_def_property_ui_text(prop, "Lighting Mode", "Method of shading, attenuating, and scattering light through the volume");
RNA_def_property_update(prop, 0, "rna_Material_update");
- prop= RNA_def_property(srna, "external_shadows", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_external_shadows", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "shadeflag", MA_VOL_RECV_EXT_SHADOW); /* use bitflags */
RNA_def_property_ui_text(prop, "External Shadows", "Receive shadows from sources outside the volume (temporary)");
RNA_def_property_update(prop, 0, "rna_Material_update");
- prop= RNA_def_property(srna, "light_cache", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_light_cache", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "shadeflag", MA_VOL_PRECACHESHADING); /* use bitflags */
RNA_def_property_ui_text(prop, "Light Cache", "Pre-calculate the shading information into a voxel grid, speeds up shading at slightly less accuracy");
RNA_def_property_update(prop, 0, "rna_Material_update");
@@ -1038,7 +1086,7 @@ static void rna_def_material_volume(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Intensity", "Multiplier for multiple scattered light energy");
RNA_def_property_update(prop, 0, "rna_Material_update");
- prop= RNA_def_property(srna, "depth_cutoff", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "depth_threshold", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "depth_cutoff");
RNA_def_property_range(prop, 0.0f, 1.0f);
RNA_def_property_ui_text(prop, "Depth Cutoff", "Stop ray marching early if transmission drops below this luminance - higher values give speedups in dense volumes at the expense of accuracy");
@@ -1132,19 +1180,19 @@ static void rna_def_material_halo(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Add", "Sets the strength of the add effect");
RNA_def_property_update(prop, 0, "rna_Material_update");
- prop= RNA_def_property(srna, "rings", PROP_INT, PROP_NONE);
+ prop= RNA_def_property(srna, "ring_count", PROP_INT, PROP_NONE);
RNA_def_property_int_sdna(prop, NULL, "ringc");
RNA_def_property_range(prop, 0, 24);
RNA_def_property_ui_text(prop, "Rings", "Sets the number of rings rendered over the halo");
RNA_def_property_update(prop, 0, "rna_Material_update");
- prop= RNA_def_property(srna, "line_number", PROP_INT, PROP_NONE);
+ prop= RNA_def_property(srna, "line_count", PROP_INT, PROP_NONE);
RNA_def_property_int_sdna(prop, NULL, "linec");
RNA_def_property_range(prop, 0, 250);
RNA_def_property_ui_text(prop, "Line Number", "Sets the number of star shaped lines rendered over the halo");
RNA_def_property_update(prop, 0, "rna_Material_update");
- prop= RNA_def_property(srna, "star_tips", PROP_INT, PROP_NONE);
+ prop= RNA_def_property(srna, "star_tip_count", PROP_INT, PROP_NONE);
RNA_def_property_int_sdna(prop, NULL, "starc");
RNA_def_property_range(prop, 3, 50);
RNA_def_property_ui_text(prop, "Star Tips", "Sets the number of points on the star shaped halo");
@@ -1156,7 +1204,7 @@ static void rna_def_material_halo(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Seed", "Randomizes ring dimension and line location");
RNA_def_property_update(prop, 0, "rna_Material_update");
- prop= RNA_def_property(srna, "flare_mode", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_flare_mode", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "mode", MA_HALO_FLARE); /* use bitflags */
RNA_def_property_ui_text(prop, "Flare", "Renders halo as a lensflare");
RNA_def_property_update(prop, 0, "rna_Material_update");
@@ -1167,7 +1215,7 @@ static void rna_def_material_halo(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Flare Size", "Sets the factor by which the flare is larger than the halo");
RNA_def_property_update(prop, 0, "rna_Material_update");
- prop= RNA_def_property(srna, "flare_subsize", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "flare_subflare_size", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "subsize");
RNA_def_property_range(prop, 0.1f, 25.0f);
RNA_def_property_ui_text(prop, "Flare Subsize", "Sets the dimension of the subflares, dots and circles");
@@ -1185,48 +1233,48 @@ static void rna_def_material_halo(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Flare Seed", "Specifies an offset in the flare seed table");
RNA_def_property_update(prop, 0, "rna_Material_update");
- prop= RNA_def_property(srna, "flares_sub", PROP_INT, PROP_NONE);
+ prop= RNA_def_property(srna, "flare_subflare_count", PROP_INT, PROP_NONE);
RNA_def_property_int_sdna(prop, NULL, "flarec");
RNA_def_property_range(prop, 1, 32);
RNA_def_property_ui_text(prop, "Flares Sub", "Sets the number of subflares");
RNA_def_property_update(prop, 0, "rna_Material_update");
- prop= RNA_def_property(srna, "ring", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_ring", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "mode", MA_HALO_RINGS);
RNA_def_property_ui_text(prop, "Rings", "Renders rings over halo");
RNA_def_property_update(prop, 0, "rna_Material_update");
- prop= RNA_def_property(srna, "lines", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_lines", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "mode", MA_HALO_LINES);
RNA_def_property_ui_text(prop, "Lines", "Renders star shaped lines over halo");
RNA_def_property_update(prop, 0, "rna_Material_update");
- prop= RNA_def_property(srna, "star", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_star", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "mode", MA_STAR);
RNA_def_property_ui_text(prop, "Star", "Renders halo as a star");
RNA_def_property_update(prop, 0, "rna_Material_update");
- prop= RNA_def_property(srna, "texture", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_texture", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "mode", MA_HALOTEX);
RNA_def_property_ui_text(prop, "Texture", "Gives halo a texture");
RNA_def_property_update(prop, 0, "rna_Material_update");
- prop= RNA_def_property(srna, "vertex_normal", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_vertex_normal", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "mode", MA_HALOPUNO);
RNA_def_property_ui_text(prop, "Vertex Normal", "Uses the vertex normal to specify the dimension of the halo");
RNA_def_property_update(prop, 0, "rna_Material_update");
- prop= RNA_def_property(srna, "xalpha", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_extreme_alpha", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "mode", MA_HALO_XALPHA);
RNA_def_property_ui_text(prop, "Extreme Alpha", "Uses extreme alpha");
RNA_def_property_update(prop, 0, "rna_Material_update");
- prop= RNA_def_property(srna, "shaded", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_shaded", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "mode", MA_HALO_SHADE);
RNA_def_property_ui_text(prop, "Shaded", "Lets halo receive light and shadows from external objects");
RNA_def_property_update(prop, 0, "rna_Material_update");
- prop= RNA_def_property(srna, "soft", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_soft", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "mode", MA_HALO_SOFT);
RNA_def_property_ui_text(prop, "Soft", "Softens the edges of halos at intersections with other geometry");
RNA_def_property_update(prop, 0, "rna_Material_update");
@@ -1254,7 +1302,7 @@ static void rna_def_material_sss(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Color", "Scattering color");
RNA_def_property_update(prop, 0, "rna_Material_update");
- prop= RNA_def_property(srna, "error_tolerance", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "error_threshold", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "sss_error");
RNA_def_property_ui_range(prop, 0.0001, 10, 1, 3);
RNA_def_property_ui_text(prop, "Error Tolerance", "Error tolerance (low values are slower and higher quality)");
@@ -1296,7 +1344,7 @@ static void rna_def_material_sss(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Back", "Back scattering weight");
RNA_def_property_update(prop, 0, "rna_Material_update");
- prop= RNA_def_property(srna, "enabled", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "sss_flag", MA_DIFF_SSS);
RNA_def_property_ui_text(prop, "Enabled", "Enable diffuse subsurface scatting effects in a material");
RNA_def_property_update(prop, 0, "rna_Material_update");
@@ -1372,12 +1420,12 @@ static void rna_def_material_strand(BlenderRNA *brna)
RNA_def_struct_nested(brna, srna, "Material");
RNA_def_struct_ui_text(srna, "Material Strand", "Strand settings for a Material datablock");
- prop= RNA_def_property(srna, "tangent_shading", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_tangent_shading", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "mode", MA_TANGENT_STR);
RNA_def_property_ui_text(prop, "Tangent Shading", "Uses direction of strands as normal for tangent-shading");
RNA_def_property_update(prop, 0, "rna_Material_update");
- prop= RNA_def_property(srna, "surface_diffuse", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_surface_diffuse", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "mode", MA_STR_SURFDIFF);
RNA_def_property_ui_text(prop, "Surface Diffuse", "Make diffuse shading more similar to shading the surface");
RNA_def_property_update(prop, 0, "rna_Material_update");
@@ -1388,7 +1436,7 @@ static void rna_def_material_strand(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Blend Distance", "Worldspace distance over which to blend in the surface normal");
RNA_def_property_update(prop, 0, "rna_Material_update");
- prop= RNA_def_property(srna, "blender_units", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_blender_units", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "mode", MA_STR_B_UNITS);
RNA_def_property_ui_text(prop, "Blender Units", "Use Blender units for widths instead of pixels");
RNA_def_property_update(prop, 0, "rna_Material_update");
@@ -1407,7 +1455,7 @@ static void rna_def_material_strand(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Tip Size", "End size of strands in pixels or Blender units");
RNA_def_property_update(prop, 0, "rna_Material_update");
- prop= RNA_def_property(srna, "min_size", PROP_FLOAT, PROP_UNSIGNED);
+ prop= RNA_def_property(srna, "size_min", PROP_FLOAT, PROP_UNSIGNED);
RNA_def_property_float_sdna(prop, NULL, "strand_min");
RNA_def_property_range(prop, 0.001, 10);
RNA_def_property_ui_text(prop, "Minimum Size", "Minimum size of strands in pixels");
@@ -1441,7 +1489,7 @@ static void rna_def_material_physics(BlenderRNA *brna)
RNA_def_struct_nested(brna, srna, "Material");
RNA_def_struct_ui_text(srna, "Material Physics", "Physics settings for a Material datablock");
- prop= RNA_def_property(srna, "align_to_normal", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_normal_align", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "dynamode", MA_FH_NOR);
RNA_def_property_ui_text(prop, "Align to Normal", "Align dynamic game objects along the surface normal, when inside the physics distance area");
@@ -1465,7 +1513,7 @@ static void rna_def_material_physics(BlenderRNA *brna)
RNA_def_property_range(prop, 0, 20);
RNA_def_property_ui_text(prop, "Distance", "Distance of the physics area");
- prop= RNA_def_property(srna, "damp", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "damping", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "xyfrict");
RNA_def_property_range(prop, 0, 1);
RNA_def_property_ui_text(prop, "Damping", "Damping of the spring force, when inside the physics distance area");
@@ -1508,7 +1556,7 @@ void RNA_def_material(BlenderRNA *brna)
RNA_def_property_enum_funcs(prop, NULL, "rna_Material_type_set", NULL);
RNA_def_property_update(prop, 0, "rna_Material_draw_update");
- prop= RNA_def_property(srna, "transparency", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_transparency", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "mode", MA_TRANSP);
RNA_def_property_ui_text(prop, "Transparency", "Render material as transparent");
RNA_def_property_update(prop, 0, "rna_Material_update");
@@ -1543,12 +1591,12 @@ void RNA_def_material(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Translucency", "Amount of diffuse shading on the back side");
RNA_def_property_update(prop, 0, "rna_Material_update");
- prop= RNA_def_property(srna, "cubic", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_cubic", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "shade_flag", MA_CUBIC);
RNA_def_property_ui_text(prop, "Cubic Interpolation", "Use cubic interpolation for diffuse values, for smoother transitions");
RNA_def_property_update(prop, 0, "rna_Material_update");
- prop= RNA_def_property(srna, "object_color", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_object_color", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "shade_flag", MA_OBCOLOR);
RNA_def_property_ui_text(prop, "Object Color", "Modulate the result with a per-object color");
RNA_def_property_update(prop, 0, "rna_Material_update");
@@ -1563,7 +1611,7 @@ void RNA_def_material(BlenderRNA *brna)
RNA_def_property_range(prop, 0, 10);
RNA_def_property_ui_text(prop, "Shadow Buffer Bias", "Factor to multiply shadow buffer bias with (0 is ignore.)");
- prop= RNA_def_property(srna, "shadow_casting_alpha", PROP_FLOAT, PROP_FACTOR);
+ prop= RNA_def_property(srna, "shadow_cast_alpha", PROP_FLOAT, PROP_FACTOR);
RNA_def_property_float_sdna(prop, NULL, "shad_alpha");
RNA_def_property_range(prop, 0.001, 1);
RNA_def_property_ui_text(prop, "Shadow Casting Alpha", "Shadow casting alpha, in use for Irregular and Deep shadow buffer");
@@ -1578,32 +1626,32 @@ void RNA_def_material(BlenderRNA *brna)
/* flags */
- prop= RNA_def_property(srna, "light_group_exclusive", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_light_group_exclusive", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "mode", MA_GROUP_NOLAY);
RNA_def_property_ui_text(prop, "Light Group Exclusive", "Material uses the light group exclusively - these lamps are excluded from other scene lighting");
RNA_def_property_update(prop, 0, "rna_Material_update");
- prop= RNA_def_property(srna, "traceable", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_raytrace", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "mode", MA_TRACEBLE);
RNA_def_property_ui_text(prop, "Traceable", "Include this material and geometry that uses it in ray tracing calculations");
RNA_def_property_update(prop, 0, "rna_Material_update");
- prop= RNA_def_property(srna, "shadows", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_shadows", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "mode", MA_SHADOW);
RNA_def_property_ui_text(prop, "Shadows", "Allows this material to receive shadows");
RNA_def_property_update(prop, 0, "rna_Material_update");
- prop= RNA_def_property(srna, "shadeless", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_shadeless", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "mode", MA_SHLESS);
RNA_def_property_ui_text(prop, "Shadeless", "Makes this material insensitive to light or shadow");
RNA_def_property_update(prop, 0, "rna_Material_update");
- prop= RNA_def_property(srna, "vertex_color_light", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_vertex_color_light", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "mode", MA_VERTEXCOL);
RNA_def_property_ui_text(prop, "Vertex Color Light", "Add vertex colors as additional lighting");
RNA_def_property_update(prop, 0, "rna_Material_update");
- prop= RNA_def_property(srna, "vertex_color_paint", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_vertex_color_paint", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "mode", MA_VERTEXCOLP);
RNA_def_property_ui_text(prop, "Vertex Color Paint", "Replaces object base color with vertex colors (multiplies with 'texture face' face assigned textures)");
RNA_def_property_update(prop, 0, "rna_Material_update");
@@ -1613,7 +1661,7 @@ void RNA_def_material(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Invert Z Depth", "Renders material's faces with an inverted Z buffer (scanline only)");
RNA_def_property_update(prop, 0, "rna_Material_update");
- prop= RNA_def_property(srna, "z_offset", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "offset_z", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "zoffs");
RNA_def_property_ui_text(prop, "Z Offset", "Gives faces an artificial offset in the Z buffer for Z transparency");
RNA_def_property_update(prop, 0, "rna_Material_update");
@@ -1623,57 +1671,57 @@ void RNA_def_material(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Sky", "Renders this material with zero alpha, with sky background in place (scanline only)");
RNA_def_property_update(prop, 0, "rna_Material_update");
- prop= RNA_def_property(srna, "only_shadow", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_only_shadow", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "mode", MA_ONLYSHADOW);
RNA_def_property_ui_text(prop, "Only Shadow", "Renders shadows as the material's alpha value, making materials transparent except for shadowed areas");
RNA_def_property_update(prop, 0, "rna_Material_update");
- prop= RNA_def_property(srna, "face_texture", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_face_texture", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "mode", MA_FACETEXTURE);
RNA_def_property_ui_text(prop, "Face Textures", "Replaces the object's base color with color from face assigned image textures");
RNA_def_property_update(prop, 0, "rna_Material_update");
- prop= RNA_def_property(srna, "face_texture_alpha", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_face_texture_alpha", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "mode", MA_FACETEXTURE_ALPHA);
RNA_def_property_ui_text(prop, "Face Textures Alpha", "Replaces the object's base alpha value with alpha from face assigned image textures");
RNA_def_property_update(prop, 0, "rna_Material_update");
- prop= RNA_def_property(srna, "cast_shadows_only", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_cast_shadows_only", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "mode", MA_ONLYCAST);
RNA_def_property_ui_text(prop, "Cast Shadows Only", "Makes objects with this material appear invisible, only casting shadows (not rendered)");
RNA_def_property_update(prop, 0, "rna_Material_update");
- prop= RNA_def_property(srna, "exclude_mist", PROP_BOOLEAN, PROP_NONE);
- RNA_def_property_boolean_sdna(prop, NULL, "mode", MA_NOMIST);
- RNA_def_property_ui_text(prop, "Exclude Mist", "Excludes this material from mist effects (in world settings)");
+ prop= RNA_def_property(srna, "use_mist", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_negative_sdna(prop, NULL, "mode", MA_NOMIST);
+ RNA_def_property_ui_text(prop, "Use Mist", "Use mist with this material (in world settings)");
RNA_def_property_update(prop, 0, "rna_Material_update");
- prop= RNA_def_property(srna, "receive_transparent_shadows", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_transparent_shadows", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "mode", MA_SHADOW_TRA);
RNA_def_property_ui_text(prop, "Receive Transparent Shadows", "Allow this object to receive transparent shadows casted through other objects");
RNA_def_property_update(prop, 0, "rna_Material_update");
- prop= RNA_def_property(srna, "ray_shadow_bias", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_ray_shadow_bias", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "mode", MA_RAYBIAS);
RNA_def_property_ui_text(prop, "Ray Shadow Bias", "Prevents raytraced shadow errors on surfaces with smooth shaded normals (terminator problem)");
RNA_def_property_update(prop, 0, "rna_Material_update");
- prop= RNA_def_property(srna, "full_oversampling", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_full_oversampling", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "mode", MA_FULL_OSA);
RNA_def_property_ui_text(prop, "Full Oversampling", "Force this material to render full shading/textures for all anti-aliasing samples");
RNA_def_property_update(prop, 0, "rna_Material_update");
- prop= RNA_def_property(srna, "cast_buffer_shadows", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_cast_buffer_shadows", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "mode", MA_SHADBUF);
RNA_def_property_ui_text(prop, "Cast Buffer Shadows", "Allow this material to cast shadows from shadow buffer lamps");
RNA_def_property_update(prop, 0, "rna_Material_update");
- prop= RNA_def_property(srna, "cast_approximate", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_cast_approximate", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "shade_flag", MA_APPROX_OCCLUSION);
RNA_def_property_ui_text(prop, "Cast Approximate", "Allow this material to cast shadows when using approximate ambient occlusion.");
RNA_def_property_update(prop, 0, "rna_Material_update");
- prop= RNA_def_property(srna, "tangent_shading", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_tangent_shading", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "mode", MA_TANGENT_V);
RNA_def_property_ui_text(prop, "Tangent Shading", "Use the material's tangent vector instead of the normal for shading - for anisotropic shading effects");
RNA_def_property_update(prop, 0, "rna_Material_update");
@@ -1741,9 +1789,9 @@ void RNA_def_material(BlenderRNA *brna)
/* common */
rna_def_animdata_common(srna);
- rna_def_mtex_common(srna, "rna_Material_mtex_begin", "rna_Material_active_texture_get",
- "rna_Material_active_texture_set", "MaterialTextureSlot", "rna_Material_update");
-
+ rna_def_mtex_common(brna, srna, "rna_Material_mtex_begin", "rna_Material_active_texture_get",
+ "rna_Material_active_texture_set", "MaterialTextureSlot", "MaterialTextureSlots", "rna_Material_update");
+
/* only material has this one */
prop= RNA_def_property(srna, "use_textures", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_negative_sdna(prop, NULL, "septex", 1);
@@ -1768,7 +1816,43 @@ void RNA_def_material(BlenderRNA *brna)
RNA_api_material(srna);
}
-void rna_def_mtex_common(StructRNA *srna, const char *begin, const char *activeget, const char *activeset, const char *structname, const char *update)
+
+/* curve.splines */
+static void rna_def_texture_slots(BlenderRNA *brna, PropertyRNA *cprop, const char *structname, const char *structname_slots)
+{
+ StructRNA *srna;
+
+ FunctionRNA *func;
+ PropertyRNA *parm;
+
+ RNA_def_property_srna(cprop, structname_slots);
+ srna= RNA_def_struct(brna, structname_slots, NULL);
+ RNA_def_struct_sdna(srna, "ID");
+ RNA_def_struct_ui_text(srna, "Texture Slots", "Collection of texture slots");
+
+ /* functions */
+ func= RNA_def_function(srna, "add", "rna_mtex_texture_slots_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_NO_SELF|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_ui_description(func, "Add a number of points to this spline.");
+ RNA_def_function_flag(func, FUNC_USE_SELF_ID|FUNC_NO_SELF|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_ui_description(func, "Add a number of points to this spline.");
+ RNA_def_function_flag(func, FUNC_USE_SELF_ID|FUNC_NO_SELF|FUNC_USE_REPORTS);
+ parm= RNA_def_int(func, "index", 0, 0, INT_MAX, "Index", "Slot index to clar.", 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 *structname, const char *structname_slots, const char *update)
{
PropertyRNA *prop;
@@ -1777,6 +1861,7 @@ void rna_def_mtex_common(StructRNA *srna, const char *begin, const char *activeg
RNA_def_property_struct_type(prop, structname);
RNA_def_property_collection_funcs(prop, begin, "rna_iterator_array_next", "rna_iterator_array_end", "rna_iterator_array_dereference_get", 0, 0, 0);
RNA_def_property_ui_text(prop, "Textures", "Texture slots defining the mapping and influence of textures");
+ rna_def_texture_slots(brna, prop, structname, structname_slots);
prop= RNA_def_property(srna, "active_texture", PROP_POINTER, PROP_NONE);
RNA_def_property_struct_type(prop, "Texture");
diff --git a/source/blender/makesrna/intern/rna_material_api.c b/source/blender/makesrna/intern/rna_material_api.c
index 03eba157bf3..22eb537f24a 100644
--- a/source/blender/makesrna/intern/rna_material_api.c
+++ b/source/blender/makesrna/intern/rna_material_api.c
@@ -35,92 +35,12 @@
#ifdef RNA_RUNTIME
-#include "BKE_material.h"
-#include "BKE_texture.h"
-
-/*
- Adds material to the first free texture slot.
- If all slots are busy, replaces the first.
-*/
-static void rna_Material_add_texture(Material *ma, Tex *tex, int mapto, int texco)
-{
- int i;
- MTex *mtex;
- int slot= -1;
-
- for (i= 0; i < MAX_MTEX; i++) {
- if (!ma->mtex[i]) {
- slot= i;
- break;
- }
- }
-
- if (slot == -1)
- slot= 0;
-
- if (ma->mtex[slot]) {
- ma->mtex[slot]->tex->id.us--;
- }
- else {
- ma->mtex[slot]= add_mtex();
- }
-
- mtex= ma->mtex[slot];
-
- mtex->tex= tex;
- if (tex)
- id_us_plus(&tex->id);
-
- mtex->texco= mapto;
- mtex->mapto= texco;
-}
-
#else
void RNA_api_material(StructRNA *srna)
{
- FunctionRNA *func;
- PropertyRNA *parm;
-
- /* copied from rna_def_material_mtex (rna_material.c) */
- static EnumPropertyItem prop_texture_coordinates_items[] = {
- {TEXCO_GLOB, "GLOBAL", 0, "Global", "Uses global coordinates for the texture coordinates"},
- {TEXCO_OBJECT, "OBJECT", 0, "Object", "Uses linked object's coordinates for texture coordinates"},
- {TEXCO_UV, "UV", 0, "UV", "Uses UV coordinates for texture coordinates"},
- {TEXCO_ORCO, "ORCO", 0, "Generated", "Uses the original undeformed coordinates of the object"},
- {TEXCO_STRAND, "STRAND", 0, "Strand", "Uses normalized strand texture coordinate (1D)"},
- {TEXCO_STICKY, "STICKY", 0, "Sticky", "Uses mesh's sticky coordinates for the texture coordinates"},
- {TEXCO_WINDOW, "WINDOW", 0, "Window", "Uses screen coordinates as texture coordinates"},
- {TEXCO_NORM, "NORMAL", 0, "Normal", "Uses normal vector as texture coordinates"},
- {TEXCO_REFL, "REFLECTION", 0, "Reflection", "Uses reflection vector as texture coordinates"},
- {TEXCO_STRESS, "STRESS", 0, "Stress", "Uses the difference of edge lengths compared to original coordinates of the mesh"},
- {TEXCO_TANGENT, "TANGENT", 0, "Tangent", "Uses the optional tangent vector as texture coordinates"},
-
- {0, NULL, 0, NULL, NULL}};
-
- static EnumPropertyItem prop_texture_mapto_items[] = {
- {MAP_COL, "COLOR", 0, "Color", "Causes the texture to affect basic color of the material"},
- {MAP_NORM, "NORMAL", 0, "Normal", "Causes the texture to affect the rendered normal"},
- {MAP_COLSPEC, "SPECULAR_COLOR", 0, "Specularity Color", "Causes the texture to affect the specularity color"},
- {MAP_COLMIR, "MIRROR", 0, "Mirror", "Causes the texture to affect the mirror color"},
- {MAP_REF, "REFLECTION", 0, "Reflection", "Causes the texture to affect the value of the materials reflectivity"},
- {MAP_SPEC, "SPECULARITY", 0, "Specularity", "Causes the texture to affect the value of specularity"},
- {MAP_EMIT, "EMIT", 0, "Emit", "Causes the texture to affect the emit value"},
- {MAP_ALPHA, "ALPHA", 0, "Alpha", "Causes the texture to affect the alpha value"},
- {MAP_HAR, "HARDNESS", 0, "Hardness", "Causes the texture to affect the hardness value"},
- {MAP_RAYMIRR, "RAY_MIRROR", 0, "Ray-Mirror", "Causes the texture to affect the ray-mirror value"},
- {MAP_TRANSLU, "TRANSLUCENCY", 0, "Translucency", "Causes the texture to affect the translucency value"},
- {MAP_AMB, "AMBIENT", 0, "Ambient", "Causes the texture to affect the value of ambient"},
- {MAP_DISPLACE, "DISPLACEMENT", 0, "Displacement", "Let the texture displace the surface"},
- {MAP_WARP, "WARP", 0, "Warp", "Let the texture warp texture coordinates of next channels"},
- {0, NULL, 0, NULL, NULL}};
-
- func= RNA_def_function(srna, "add_texture", "rna_Material_add_texture");
- RNA_def_function_ui_description(func, "Add a texture to material's free texture slot.");
- parm= RNA_def_pointer(func, "texture", "Texture", "Texture", "Texture to add.");
- RNA_def_property_flag(parm, PROP_REQUIRED);
- parm= RNA_def_enum(func, "texture_coordinates", prop_texture_coordinates_items, TEXCO_UV, "", "Source of texture coordinate information."); /* optional */
- parm= RNA_def_enum(func, "map_to", prop_texture_mapto_items, MAP_COL, "", "Controls which material property the texture affects."); /* optional */
+ // FunctionRNA *func;
+ // PropertyRNA *parm;
}
#endif
diff --git a/source/blender/makesrna/intern/rna_mesh.c b/source/blender/makesrna/intern/rna_mesh.c
index cdab225f09c..db5a2062359 100644
--- a/source/blender/makesrna/intern/rna_mesh.c
+++ b/source/blender/makesrna/intern/rna_mesh.c
@@ -57,22 +57,29 @@ static void rna_Mesh_update_data(Main *bmain, Scene *scene, PointerRNA *ptr)
{
ID *id= ptr->id.data;
- DAG_id_flush_update(id, OB_RECALC_DATA);
- WM_main_add_notifier(NC_GEOM|ND_DATA, id);
+ /* cheating way for importers to avoid slow updates */
+ if(id->us > 0) {
+ DAG_id_flush_update(id, OB_RECALC_DATA);
+ WM_main_add_notifier(NC_GEOM|ND_DATA, id);
+ }
}
static void rna_Mesh_update_select(Main *bmain, Scene *scene, PointerRNA *ptr)
{
ID *id= ptr->id.data;
-
- WM_main_add_notifier(NC_GEOM|ND_SELECT, id);
+ /* cheating way for importers to avoid slow updates */
+ if(id->us > 0) {
+ WM_main_add_notifier(NC_GEOM|ND_SELECT, id);
+ }
}
void rna_Mesh_update_draw(Main *bmain, Scene *scene, PointerRNA *ptr)
{
ID *id= ptr->id.data;
-
- WM_main_add_notifier(NC_GEOM|ND_DATA, id);
+ /* cheating way for importers to avoid slow updates */
+ if(id->us > 0) {
+ WM_main_add_notifier(NC_GEOM|ND_DATA, id);
+ }
}
static void rna_MeshVertex_normal_get(PointerRNA *ptr, float *value)
@@ -1018,7 +1025,7 @@ static char *rna_MeshIntPropertyLayer_path(PointerRNA *ptr)
static char *rna_MeshIntProperty_path(PointerRNA *ptr)
{
- return rna_CustomDataData_path(ptr, "int_layers", CD_MCOL);
+ return rna_CustomDataData_path(ptr, "layers_int", CD_MCOL);
}
static char *rna_MeshFloatPropertyLayer_path(PointerRNA *ptr)
@@ -1028,7 +1035,7 @@ static char *rna_MeshFloatPropertyLayer_path(PointerRNA *ptr)
static char *rna_MeshFloatProperty_path(PointerRNA *ptr)
{
- return rna_CustomDataData_path(ptr, "float_layers", CD_MCOL);
+ return rna_CustomDataData_path(ptr, "layers_float", CD_MCOL);
}
static char *rna_MeshStringPropertyLayer_path(PointerRNA *ptr)
@@ -1038,7 +1045,7 @@ static char *rna_MeshStringPropertyLayer_path(PointerRNA *ptr)
static char *rna_MeshStringProperty_path(PointerRNA *ptr)
{
- return rna_CustomDataData_path(ptr, "string_layers", CD_MCOL);
+ return rna_CustomDataData_path(ptr, "layers_string", CD_MCOL);
}
static int rna_Mesh_tot_vert_get(PointerRNA *ptr)
@@ -1057,6 +1064,34 @@ static int rna_Mesh_tot_face_get(PointerRNA *ptr)
return me->edit_mesh ? me->edit_mesh->totfacesel : 0;
}
+static CustomDataLayer *rna_Mesh_vertex_color_new(struct Mesh *me, struct bContext *C, char *name)
+{
+ CustomData *fdata;
+ CustomDataLayer *cdl= NULL;
+ int index;
+
+ if(ED_mesh_color_add(C, NULL, NULL, me, name, FALSE)) {
+ fdata= rna_mesh_fdata(me);
+ index= CustomData_get_named_layer_index(fdata, CD_MCOL, name);
+ cdl= (index == -1)? NULL: &fdata->layers[index];
+ }
+ return cdl;
+}
+
+static CustomDataLayer *rna_Mesh_uv_texture_new(struct Mesh *me, struct bContext *C, char *name)
+{
+ CustomData *fdata;
+ CustomDataLayer *cdl= NULL;
+ int index;
+
+ if(ED_mesh_uv_texture_add(C, NULL, NULL, me, name, FALSE)) {
+ fdata= rna_mesh_fdata(me);
+ index= CustomData_get_named_layer_index(fdata, CD_MTFACE, name);
+ cdl= (index == -1)? NULL: &fdata->layers[index];
+ }
+ return cdl;
+}
+
#else
static void rna_def_mvert_group(BlenderRNA *brna)
@@ -1141,7 +1176,7 @@ static void rna_def_medge(BlenderRNA *brna)
RNA_def_struct_path_func(srna, "rna_MeshEdge_path");
RNA_def_struct_ui_icon(srna, ICON_EDGESEL);
- prop= RNA_def_property(srna, "verts", PROP_INT, PROP_UNSIGNED);
+ prop= RNA_def_property(srna, "vertices", PROP_INT, PROP_UNSIGNED);
RNA_def_property_int_sdna(prop, NULL, "v1");
RNA_def_property_array(prop, 2);
RNA_def_property_ui_text(prop, "Vertices", "Vertex indices");
@@ -1167,24 +1202,22 @@ static void rna_def_medge(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Hide", "");
RNA_def_property_update(prop, 0, "rna_Mesh_update_select");
- prop= RNA_def_property(srna, "seam", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_seam", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", ME_SEAM);
RNA_def_property_ui_text(prop, "Seam", "Seam edge for UV unwrapping");
RNA_def_property_update(prop, 0, "rna_Mesh_update_select");
- prop= RNA_def_property(srna, "sharp", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_edge_sharp", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", ME_SHARP);
RNA_def_property_ui_text(prop, "Sharp", "Sharp edge for the EdgeSplit modifier");
RNA_def_property_update(prop, 0, "rna_Mesh_update_data");
- prop= RNA_def_property(srna, "loose", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "is_loose", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", ME_LOOSEEDGE);
- RNA_def_property_clear_flag(prop, PROP_EDITABLE);
RNA_def_property_ui_text(prop, "Loose", "Loose edge");
- prop= RNA_def_property(srna, "fgon", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "is_fgon", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", ME_FGON);
- RNA_def_property_clear_flag(prop, PROP_EDITABLE);
RNA_def_property_ui_text(prop, "Fgon", "Fgon edge");
prop= RNA_def_property(srna, "index", PROP_INT, PROP_UNSIGNED);
@@ -1205,7 +1238,7 @@ static void rna_def_mface(BlenderRNA *brna)
RNA_def_struct_ui_icon(srna, ICON_FACESEL);
// XXX allows creating invalid meshes
- prop= RNA_def_property(srna, "verts", PROP_INT, PROP_UNSIGNED);
+ prop= RNA_def_property(srna, "vertices", PROP_INT, PROP_UNSIGNED);
RNA_def_property_array(prop, 4);
RNA_def_property_flag(prop, PROP_DYNAMIC);
RNA_def_property_dynamic_array_funcs(prop, "rna_MeshFace_verts_get_length");
@@ -1213,7 +1246,7 @@ static void rna_def_mface(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Vertices", "Vertex indices");
/* leaving this fixed size array for foreach_set used in import scripts */
- prop= RNA_def_property(srna, "verts_raw", PROP_INT, PROP_UNSIGNED);
+ prop= RNA_def_property(srna, "vertices_raw", PROP_INT, PROP_UNSIGNED);
RNA_def_property_int_sdna(prop, NULL, "v1");
RNA_def_property_array(prop, 4);
RNA_def_property_ui_text(prop, "Vertices", "Fixed size vertex indices array");
@@ -1234,7 +1267,7 @@ static void rna_def_mface(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Hide", "");
RNA_def_property_update(prop, 0, "rna_Mesh_update_select");
- prop= RNA_def_property(srna, "smooth", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_smooth", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", ME_SMOOTH);
RNA_def_property_ui_text(prop, "Smooth", "");
RNA_def_property_update(prop, 0, "rna_Mesh_update_data");
@@ -1316,67 +1349,68 @@ static void rna_def_mtface(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Image", "");
RNA_def_property_update(prop, 0, "rna_Mesh_update_data");
- prop= RNA_def_property(srna, "tex", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_image", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "mode", TF_TEX);
RNA_def_property_ui_text(prop, "Tex", "Render face with texture");
RNA_def_property_update(prop, 0, "rna_Mesh_update_data");
- prop= RNA_def_property(srna, "light", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_light", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "mode", TF_LIGHT);
RNA_def_property_ui_text(prop, "Light", "Use light for face");
RNA_def_property_update(prop, 0, "rna_Mesh_update_data");
- prop= RNA_def_property(srna, "invisible", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "hide", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "mode", TF_INVISIBLE);
RNA_def_property_ui_text(prop, "Invisible", "Make face invisible");
RNA_def_property_update(prop, 0, "rna_Mesh_update_data");
- prop= RNA_def_property(srna, "collision", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_collision", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "mode", TF_DYNAMIC);
RNA_def_property_ui_text(prop, "Collision", "Use face for collision and ray-sensor detection");
RNA_def_property_update(prop, 0, "rna_Mesh_update_data");
- prop= RNA_def_property(srna, "shared", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_blend_shared", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "mode", TF_SHAREDCOL);
RNA_def_property_ui_text(prop, "Shared", "Blend vertex colors across face when vertices are shared");
RNA_def_property_update(prop, 0, "rna_Mesh_update_data");
- prop= RNA_def_property(srna, "twoside", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_twoside", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "mode", TF_TWOSIDE);
RNA_def_property_ui_text(prop, "Two-side", "Render face two-sided");
RNA_def_property_update(prop, 0, "rna_Mesh_update_data");
- prop= RNA_def_property(srna, "object_color", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_object_color", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "mode", TF_OBCOL);
RNA_def_property_ui_text(prop, "Object Color", "Use ObColor instead of vertex colors");
RNA_def_property_update(prop, 0, "rna_Mesh_update_data");
- prop= RNA_def_property(srna, "halo", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_halo", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "mode", TF_BILLBOARD);
RNA_def_property_ui_text(prop, "Halo", "Screen aligned billboard");
RNA_def_property_update(prop, 0, "rna_Mesh_update_data");
- prop= RNA_def_property(srna, "billboard", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_billboard", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "mode", TF_BILLBOARD2);
RNA_def_property_ui_text(prop, "Billboard", "Billboard with Z-axis constraint");
RNA_def_property_update(prop, 0, "rna_Mesh_update_data");
- prop= RNA_def_property(srna, "shadow", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_shadow_cast", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "mode", TF_SHADOW);
RNA_def_property_ui_text(prop, "Shadow", "Face is used for shadow");
RNA_def_property_update(prop, 0, "rna_Mesh_update_data");
- prop= RNA_def_property(srna, "text", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_bitmap_text", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "mode", TF_BMFONT);
RNA_def_property_ui_text(prop, "Text", "Enable bitmap text on face");
RNA_def_property_update(prop, 0, "rna_Mesh_update_data");
- prop= RNA_def_property(srna, "alpha_sort", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_alpha_sort", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "mode", TF_ALPHASORT);
RNA_def_property_ui_text(prop, "Alpha Sort", "Enable sorting of faces for correct alpha drawing (slow, use Clip Alpha instead when possible)");
RNA_def_property_update(prop, 0, "rna_Mesh_update_data");
- prop= RNA_def_property(srna, "transp", PROP_ENUM, PROP_NONE);
+ prop= RNA_def_property(srna, "blend_type", PROP_ENUM, PROP_NONE);
+ RNA_def_property_enum_sdna(prop, NULL, "transp");
RNA_def_property_enum_items(prop, transp_items);
RNA_def_property_ui_text(prop, "Transparency", "Transparency blending mode");
RNA_def_property_update(prop, 0, "rna_Mesh_update_data");
@@ -1387,7 +1421,7 @@ static void rna_def_mtface(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "UV Selected", "");
RNA_def_property_update(prop, 0, "rna_Mesh_update_select");
- prop= RNA_def_property(srna, "uv_pinned", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "pin_uv", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "unwrap", TF_PIN1);
RNA_def_property_array(prop, 4);
RNA_def_property_ui_text(prop, "UV Pinned", "");
@@ -1598,14 +1632,52 @@ static void rna_def_mproperties(BlenderRNA *brna)
RNA_def_property_update(prop, 0, "rna_Mesh_update_data");
}
-/* scene.objects */
+/* mesh.vertices */
+static void rna_def_mesh_vertices(BlenderRNA *brna, PropertyRNA *cprop)
+{
+ StructRNA *srna;
+// PropertyRNA *prop;
+
+ FunctionRNA *func;
+ PropertyRNA *parm;
+
+ RNA_def_property_srna(cprop, "MeshVertices");
+ srna= RNA_def_struct(brna, "MeshVertices", NULL);
+ RNA_def_struct_sdna(srna, "Mesh");
+ RNA_def_struct_ui_text(srna, "Mesh Vertices", "Collection of mesh vertices");
+
+ func= RNA_def_function(srna, "add", "ED_mesh_vertices_add");
+ RNA_def_function_flag(func, FUNC_USE_REPORTS);
+ parm= RNA_def_int(func, "count", 0, 0, INT_MAX, "Count", "Number of vertices to add.", 0, INT_MAX);
+}
+
+/* mesh.edges */
+static void rna_def_mesh_edges(BlenderRNA *brna, PropertyRNA *cprop)
+{
+ StructRNA *srna;
+// PropertyRNA *prop;
+
+ FunctionRNA *func;
+ PropertyRNA *parm;
+
+ RNA_def_property_srna(cprop, "MeshEdges");
+ srna= RNA_def_struct(brna, "MeshEdges", NULL);
+ RNA_def_struct_sdna(srna, "Mesh");
+ RNA_def_struct_ui_text(srna, "Mesh Edges", "Collection of mesh edges");
+
+ func= RNA_def_function(srna, "add", "ED_mesh_edges_add");
+ RNA_def_function_flag(func, FUNC_USE_REPORTS);
+ parm= RNA_def_int(func, "count", 0, 0, INT_MAX, "Count", "Number of vertices to add.", 0, INT_MAX);
+}
+
+/* mesh.faces */
static void rna_def_mesh_faces(BlenderRNA *brna, PropertyRNA *cprop)
{
StructRNA *srna;
PropertyRNA *prop;
-// FunctionRNA *func;
-// PropertyRNA *parm;
+ FunctionRNA *func;
+ PropertyRNA *parm;
RNA_def_property_srna(cprop, "MeshFaces");
srna= RNA_def_struct(brna, "MeshFaces", NULL);
@@ -1621,8 +1693,93 @@ static void rna_def_mesh_faces(BlenderRNA *brna, PropertyRNA *cprop)
RNA_def_property_pointer_funcs(prop, "rna_Mesh_active_mtface_get", NULL, NULL, NULL);
RNA_def_property_ui_text(prop, "Active Texture Face", "Active Texture Face");
RNA_def_property_update(prop, 0, "rna_Mesh_update_data");
+
+ func= RNA_def_function(srna, "add", "ED_mesh_faces_add");
+ RNA_def_function_flag(func, FUNC_USE_REPORTS);
+ parm= RNA_def_int(func, "count", 0, 0, INT_MAX, "Count", "Number of vertices to add.", 0, INT_MAX);
}
+/* mesh.vertex_colors */
+static void rna_def_vertex_colors(BlenderRNA *brna, PropertyRNA *cprop)
+{
+ StructRNA *srna;
+ PropertyRNA *prop;
+
+ FunctionRNA *func;
+ PropertyRNA *parm;
+
+ RNA_def_property_srna(cprop, "VertexColors");
+ srna= RNA_def_struct(brna, "VertexColors", NULL);
+ RNA_def_struct_sdna(srna, "Mesh");
+ RNA_def_struct_ui_text(srna, "Vertex Colors", "Collection of vertex colors");
+
+ func= RNA_def_function(srna, "new", "rna_Mesh_vertex_color_new");
+ RNA_def_function_flag(func, FUNC_USE_CONTEXT);
+ RNA_def_function_ui_description(func, "Add a vertex color layer to Mesh.");
+ parm= RNA_def_string(func, "name", "UVTex", 0, "", "UV Texture name.");
+ parm= RNA_def_pointer(func, "layer", "MeshColorLayer", "", "The newly created layer.");
+ RNA_def_function_return(func, parm);
+
+/*
+ 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);
+*/
+ prop= RNA_def_property(srna, "active", PROP_POINTER, PROP_UNSIGNED);
+ RNA_def_property_struct_type(prop, "MeshColorLayer");
+ RNA_def_property_pointer_funcs(prop, "rna_Mesh_active_vertex_color_get", "rna_Mesh_active_vertex_color_set", NULL, NULL);
+ RNA_def_property_flag(prop, PROP_EDITABLE);
+ RNA_def_property_ui_text(prop, "Active Vertex Color Layer", "Active vertex color layer");
+ RNA_def_property_update(prop, 0, "rna_Mesh_update_data");
+
+ prop= RNA_def_property(srna, "active_index", PROP_INT, PROP_UNSIGNED);
+ RNA_def_property_int_funcs(prop, "rna_Mesh_active_vertex_color_index_get", "rna_Mesh_active_vertex_color_index_set", "rna_Mesh_active_vertex_color_index_range");
+ RNA_def_property_ui_text(prop, "Active Vertex Color Index", "Active vertex color index");
+ RNA_def_property_update(prop, 0, "rna_Mesh_update_data");
+}
+
+/* mesh.uv_layers */
+static void rna_def_uv_textures(BlenderRNA *brna, PropertyRNA *cprop)
+{
+ StructRNA *srna;
+ PropertyRNA *prop;
+
+ FunctionRNA *func;
+ PropertyRNA *parm;
+
+ RNA_def_property_srna(cprop, "UVTextures");
+ srna= RNA_def_struct(brna, "UVTextures", NULL);
+ RNA_def_struct_sdna(srna, "Mesh");
+ RNA_def_struct_ui_text(srna, "UV Textures", "Collection of uv textures");
+
+ func= RNA_def_function(srna, "new", "rna_Mesh_uv_texture_new");
+ RNA_def_function_flag(func, FUNC_USE_CONTEXT);
+ RNA_def_function_ui_description(func, "Add a UV texture layer to Mesh.");
+ parm= RNA_def_string(func, "name", "UVTex", 0, "", "UV Texture name.");
+ parm= RNA_def_pointer(func, "layer", "MeshTextureFaceLayer", "", "The newly created layer.");
+ RNA_def_function_return(func, parm);
+
+/*
+ func= RNA_def_function(srna, "remove", "rna_Mesh_uv_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);
+*/
+ prop= RNA_def_property(srna, "active", PROP_POINTER, PROP_UNSIGNED);
+ RNA_def_property_struct_type(prop, "MeshTextureFaceLayer");
+ RNA_def_property_pointer_funcs(prop, "rna_Mesh_active_uv_texture_get", "rna_Mesh_active_uv_texture_set", NULL, NULL);
+ RNA_def_property_flag(prop, PROP_EDITABLE);
+ RNA_def_property_ui_text(prop, "Active UV Texture", "Active UV texture");
+ RNA_def_property_update(prop, 0, "rna_Mesh_update_data");
+
+ prop= RNA_def_property(srna, "active_index", PROP_INT, PROP_UNSIGNED);
+ RNA_def_property_int_funcs(prop, "rna_Mesh_active_uv_texture_index_get", "rna_Mesh_active_uv_texture_index_set", "rna_Mesh_active_uv_texture_index_range");
+ RNA_def_property_ui_text(prop, "Active UV Texture Index", "Active UV texture index");
+ RNA_def_property_update(prop, 0, "rna_Mesh_update_data");
+}
static void rna_def_mesh(BlenderRNA *brna)
{
@@ -1633,15 +1790,17 @@ static void rna_def_mesh(BlenderRNA *brna)
RNA_def_struct_ui_text(srna, "Mesh", "Mesh datablock defining geometric surfaces");
RNA_def_struct_ui_icon(srna, ICON_MESH_DATA);
- prop= RNA_def_property(srna, "verts", PROP_COLLECTION, PROP_NONE);
+ prop= RNA_def_property(srna, "vertices", PROP_COLLECTION, PROP_NONE);
RNA_def_property_collection_sdna(prop, NULL, "mvert", "totvert");
RNA_def_property_struct_type(prop, "MeshVertex");
RNA_def_property_ui_text(prop, "Vertices", "Vertices of the mesh");
+ rna_def_mesh_vertices(brna, prop);
prop= RNA_def_property(srna, "edges", PROP_COLLECTION, PROP_NONE);
RNA_def_property_collection_sdna(prop, NULL, "medge", "totedge");
RNA_def_property_struct_type(prop, "MeshEdge");
RNA_def_property_ui_text(prop, "Edges", "Edges of the mesh");
+ rna_def_mesh_edges(brna, prop);
prop= RNA_def_property(srna, "faces", PROP_COLLECTION, PROP_NONE);
RNA_def_property_collection_sdna(prop, NULL, "mface", "totface");
@@ -1666,18 +1825,7 @@ static void rna_def_mesh(BlenderRNA *brna)
RNA_def_property_collection_funcs(prop, "rna_Mesh_uv_textures_begin", 0, 0, 0, "rna_Mesh_uv_textures_length", 0, 0);
RNA_def_property_struct_type(prop, "MeshTextureFaceLayer");
RNA_def_property_ui_text(prop, "UV Textures", "");
-
- prop= RNA_def_property(srna, "active_uv_texture", PROP_POINTER, PROP_UNSIGNED);
- RNA_def_property_struct_type(prop, "MeshTextureFaceLayer");
- RNA_def_property_pointer_funcs(prop, "rna_Mesh_active_uv_texture_get", "rna_Mesh_active_uv_texture_set", NULL, NULL);
- RNA_def_property_flag(prop, PROP_EDITABLE);
- RNA_def_property_ui_text(prop, "Active UV Texture", "Active UV texture");
- RNA_def_property_update(prop, 0, "rna_Mesh_update_data");
-
- prop= RNA_def_property(srna, "active_uv_texture_index", PROP_INT, PROP_UNSIGNED);
- RNA_def_property_int_funcs(prop, "rna_Mesh_active_uv_texture_index_get", "rna_Mesh_active_uv_texture_index_set", "rna_Mesh_active_uv_texture_index_range");
- RNA_def_property_ui_text(prop, "Active UV Texture Index", "Active UV texture index");
- RNA_def_property_update(prop, 0, "rna_Mesh_update_data");
+ rna_def_uv_textures(brna, prop);
prop= RNA_def_property(srna, "uv_texture_clone", PROP_POINTER, PROP_UNSIGNED);
RNA_def_property_struct_type(prop, "MeshTextureFaceLayer");
@@ -1706,47 +1854,36 @@ static void rna_def_mesh(BlenderRNA *brna)
RNA_def_property_collection_funcs(prop, "rna_Mesh_vertex_colors_begin", 0, 0, 0, "rna_Mesh_vertex_colors_length", 0, 0);
RNA_def_property_struct_type(prop, "MeshColorLayer");
RNA_def_property_ui_text(prop, "Vertex Colors", "");
+ rna_def_vertex_colors(brna, prop);
- prop= RNA_def_property(srna, "active_vertex_color", PROP_POINTER, PROP_UNSIGNED);
- RNA_def_property_struct_type(prop, "MeshColorLayer");
- RNA_def_property_pointer_funcs(prop, "rna_Mesh_active_vertex_color_get", "rna_Mesh_active_vertex_color_set", NULL, NULL);
- RNA_def_property_flag(prop, PROP_EDITABLE);
- RNA_def_property_ui_text(prop, "Active Vertex Color Layer", "Active vertex color layer");
- RNA_def_property_update(prop, 0, "rna_Mesh_update_data");
-
- prop= RNA_def_property(srna, "active_vertex_color_index", PROP_INT, PROP_UNSIGNED);
- RNA_def_property_int_funcs(prop, "rna_Mesh_active_vertex_color_index_get", "rna_Mesh_active_vertex_color_index_set", "rna_Mesh_active_vertex_color_index_range");
- RNA_def_property_ui_text(prop, "Active Vertex Color Index", "Active vertex color index");
- RNA_def_property_update(prop, 0, "rna_Mesh_update_data");
-
- prop= RNA_def_property(srna, "float_layers", PROP_COLLECTION, PROP_NONE);
+ prop= RNA_def_property(srna, "layers_float", PROP_COLLECTION, PROP_NONE);
RNA_def_property_collection_sdna(prop, NULL, "fdata.layers", "fdata.totlayer");
RNA_def_property_collection_funcs(prop, "rna_Mesh_float_layers_begin", 0, 0, 0, "rna_Mesh_float_layers_length", 0, 0);
RNA_def_property_struct_type(prop, "MeshFloatPropertyLayer");
RNA_def_property_ui_text(prop, "Float Property Layers", "");
- prop= RNA_def_property(srna, "int_layers", PROP_COLLECTION, PROP_NONE);
+ prop= RNA_def_property(srna, "layers_int", PROP_COLLECTION, PROP_NONE);
RNA_def_property_collection_sdna(prop, NULL, "fdata.layers", "fdata.totlayer");
RNA_def_property_collection_funcs(prop, "rna_Mesh_int_layers_begin", 0, 0, 0, "rna_Mesh_int_layers_length", 0, 0);
RNA_def_property_struct_type(prop, "MeshIntPropertyLayer");
RNA_def_property_ui_text(prop, "Int Property Layers", "");
- prop= RNA_def_property(srna, "string_layers", PROP_COLLECTION, PROP_NONE);
+ prop= RNA_def_property(srna, "layers_string", PROP_COLLECTION, PROP_NONE);
RNA_def_property_collection_sdna(prop, NULL, "fdata.layers", "fdata.totlayer");
RNA_def_property_collection_funcs(prop, "rna_Mesh_string_layers_begin", 0, 0, 0, "rna_Mesh_string_layers_length", 0, 0);
RNA_def_property_struct_type(prop, "MeshStringPropertyLayer");
RNA_def_property_ui_text(prop, "String Property Layers", "");
- prop= RNA_def_property(srna, "autosmooth", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_auto_smooth", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", ME_AUTOSMOOTH);
RNA_def_property_ui_text(prop, "Auto Smooth", "Treats all set-smoothed faces with angles less than the specified angle as 'smooth' during render");
- prop= RNA_def_property(srna, "autosmooth_angle", PROP_INT, PROP_NONE);
+ prop= RNA_def_property(srna, "auto_smooth_angle", PROP_INT, PROP_NONE);
RNA_def_property_int_sdna(prop, NULL, "smoothresh");
RNA_def_property_range(prop, 1, 80);
RNA_def_property_ui_text(prop, "Auto Smooth Angle", "Defines maximum angle between face normals that 'Auto Smooth' will operate on");
- prop= RNA_def_property(srna, "double_sided", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_double_sided", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", ME_TWOSIDED);
RNA_def_property_ui_text(prop, "Double Sided", "Render/display the mesh with double or single sided lighting");
RNA_def_property_update(prop, 0, "rna_Mesh_update_data");
@@ -1761,11 +1898,11 @@ static void rna_def_mesh(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Shape Keys", "");
/* texture space */
- prop= RNA_def_property(srna, "auto_texspace", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_auto_texspace", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "texflag", AUTOSPACE);
RNA_def_property_ui_text(prop, "Auto Texture Space", "Adjusts active object's texture space automatically when transforming object");
- prop= RNA_def_property(srna, "texspace_loc", PROP_FLOAT, PROP_TRANSLATION);
+ 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");
@@ -1791,65 +1928,66 @@ static void rna_def_mesh(BlenderRNA *brna)
RNA_def_property_collection_sdna(prop, NULL, "mat", "totcol");
RNA_def_property_struct_type(prop, "Material");
RNA_def_property_ui_text(prop, "Materials", "");
-
+ RNA_def_property_srna(prop, "IDMaterials"); /* see rna_ID.c */
+
/* Mesh Draw Options for Edit Mode*/
- prop= RNA_def_property(srna, "draw_edges", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_edges", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "drawflag", ME_DRAWEDGES);
RNA_def_property_ui_text(prop, "Draw Edges", "Displays selected edges using highlights in the 3D view and UV editor");
RNA_def_property_update(prop, 0, "rna_Mesh_update_draw");
- prop= RNA_def_property(srna, "all_edges", PROP_BOOLEAN, PROP_NONE);
+ 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", "Displays all edges for wireframe in all view modes in the 3D view");
RNA_def_property_update(prop, NC_OBJECT|ND_DRAW, NULL);
- prop= RNA_def_property(srna, "draw_faces", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_faces", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "drawflag", ME_DRAWFACES);
RNA_def_property_ui_text(prop, "Draw Faces", "Displays all faces as shades in the 3D view and UV editor");
RNA_def_property_update(prop, 0, "rna_Mesh_update_draw");
- prop= RNA_def_property(srna, "draw_normals", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_normal_face", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "drawflag", ME_DRAWNORMALS);
RNA_def_property_ui_text(prop, "Draw Normals", "Displays face normals as lines");
RNA_def_property_update(prop, 0, "rna_Mesh_update_draw");
- prop= RNA_def_property(srna, "draw_vertex_normals", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_normal_vertex", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "drawflag", ME_DRAW_VNORMALS);
RNA_def_property_ui_text(prop, "Draw Vertex Normals", "Displays vertex normals as lines");
RNA_def_property_update(prop, 0, "rna_Mesh_update_draw");
- prop= RNA_def_property(srna, "draw_creases", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_edge_crease", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "drawflag", ME_DRAWCREASES);
RNA_def_property_ui_text(prop, "Draw Creases", "Displays creases created for subsurf weighting");
RNA_def_property_update(prop, 0, "rna_Mesh_update_draw");
- prop= RNA_def_property(srna, "draw_bevel_weights", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_edge_bevel_weight", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "drawflag", ME_DRAWBWEIGHTS);
RNA_def_property_ui_text(prop, "Draw Bevel Weights", "Displays weights created for the Bevel modifier");
RNA_def_property_update(prop, 0, "rna_Mesh_update_draw");
- prop= RNA_def_property(srna, "draw_seams", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_edge_seams", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "drawflag", ME_DRAWSEAMS);
RNA_def_property_ui_text(prop, "Draw Seams", "Displays UV unwrapping seams");
RNA_def_property_update(prop, 0, "rna_Mesh_update_draw");
- prop= RNA_def_property(srna, "draw_sharp", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_edge_sharp", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "drawflag", ME_DRAWSHARP);
RNA_def_property_ui_text(prop, "Draw Sharp", "Displays sharp edges, used with the EdgeSplit modifier");
RNA_def_property_update(prop, 0, "rna_Mesh_update_draw");
- prop= RNA_def_property(srna, "draw_edge_length", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_extra_edge_length", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "drawflag", ME_DRAW_EDGELEN);
RNA_def_property_ui_text(prop, "Edge Length", "Displays selected edge lengths, Using global values when set in the transform panel");
RNA_def_property_update(prop, 0, "rna_Mesh_update_draw");
- prop= RNA_def_property(srna, "draw_edge_angle", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_extra_edge_angle", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "drawflag", ME_DRAW_EDGEANG);
RNA_def_property_ui_text(prop, "Edge Angles", "Displays the angles in the selected edges in degrees, Using global values when set in the transform panel");
RNA_def_property_update(prop, 0, "rna_Mesh_update_draw");
- prop= RNA_def_property(srna, "draw_face_area", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_extra_face_area", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "drawflag", ME_DRAW_FACEAREA);
RNA_def_property_ui_text(prop, "Face Area", "Displays the area of selected faces, Using global values when set in the transform panel");
RNA_def_property_update(prop, 0, "rna_Mesh_update_draw");
diff --git a/source/blender/makesrna/intern/rna_mesh_api.c b/source/blender/makesrna/intern/rna_mesh_api.c
index 1657e0e64d7..eaf18920c85 100644
--- a/source/blender/makesrna/intern/rna_mesh_api.c
+++ b/source/blender/makesrna/intern/rna_mesh_api.c
@@ -37,15 +37,6 @@
#ifdef RNA_RUNTIME
-static void rna_Mesh_uv_texture_add(struct Mesh *me, struct bContext *C)
-{
- ED_mesh_uv_texture_add(C, NULL, NULL, me);
-}
-
-static void rna_Mesh_vertex_color_add(struct Mesh *me, struct bContext *C)
-{
- ED_mesh_color_add(C, NULL, NULL, me);
-}
#else
@@ -59,36 +50,12 @@ void RNA_api_mesh(StructRNA *srna)
parm= RNA_def_float_matrix(func, "matrix", 4, 4, NULL, 0.0f, 0.0f, "", "Matrix.", 0.0f, 0.0f);
RNA_def_property_flag(parm, PROP_REQUIRED);
- func= RNA_def_function(srna, "add_geometry", "ED_mesh_geometry_add");
- RNA_def_function_flag(func, FUNC_USE_REPORTS);
- parm= RNA_def_int(func, "verts", 0, 0, INT_MAX, "Number", "Number of vertices to add.", 0, INT_MAX);
- RNA_def_property_flag(parm, PROP_REQUIRED);
- parm= RNA_def_int(func, "edges", 0, 0, INT_MAX, "Number", "Number of edges to add.", 0, INT_MAX);
- RNA_def_property_flag(parm, PROP_REQUIRED);
- parm= RNA_def_int(func, "faces", 0, 0, INT_MAX, "Number", "Number of faces to add.", 0, INT_MAX);
- RNA_def_property_flag(parm, PROP_REQUIRED);
-
- func= RNA_def_function(srna, "add_uv_texture", "rna_Mesh_uv_texture_add");
- RNA_def_function_flag(func, FUNC_USE_CONTEXT);
- RNA_def_function_ui_description(func, "Add a UV texture layer to Mesh.");
-
- func= RNA_def_function(srna, "add_vertex_color", "rna_Mesh_vertex_color_add");
- RNA_def_function_flag(func, FUNC_USE_CONTEXT);
- RNA_def_function_ui_description(func, "Add a vertex color layer to Mesh.");
-
func= RNA_def_function(srna, "calc_normals", "ED_mesh_calc_normals");
RNA_def_function_ui_description(func, "Calculate vertex normals.");
func= RNA_def_function(srna, "update", "ED_mesh_update");
RNA_def_boolean(func, "calc_edges", 0, "Calculate Edges", "Force recalculation of edges.");
RNA_def_function_flag(func, FUNC_USE_CONTEXT);
-
- func= RNA_def_function(srna, "add_material", "ED_mesh_material_add");
- RNA_def_function_ui_description(func, "Add a new material to Mesh.");
- parm= RNA_def_pointer(func, "material", "Material", "", "Material to add.");
- RNA_def_property_flag(parm, PROP_REQUIRED);
-
-
}
#endif
diff --git a/source/blender/makesrna/intern/rna_meta.c b/source/blender/makesrna/intern/rna_meta.c
index 7481759f67e..18dfd05b971 100644
--- a/source/blender/makesrna/intern/rna_meta.c
+++ b/source/blender/makesrna/intern/rna_meta.c
@@ -35,6 +35,8 @@
#include "BLI_math.h"
+#include "MEM_guardedalloc.h"
+
#include "DNA_scene_types.h"
#include "DNA_object_types.h"
@@ -89,28 +91,66 @@ static void rna_MetaBall_update_data(Main *bmain, Scene *scene, PointerRNA *ptr)
MetaBall *mb= ptr->id.data;
Object *ob;
- for(ob=bmain->object.first; ob; ob= ob->id.next)
- if(ob->data == mb)
- copy_mball_properties(scene, ob);
+ /* cheating way for importers to avoid slow updates */
+ if(mb->id.us > 0) {
+ for(ob=bmain->object.first; ob; ob= ob->id.next)
+ if(ob->data == mb)
+ copy_mball_properties(scene, ob);
+
+ DAG_id_flush_update(&mb->id, OB_RECALC_DATA);
+ WM_main_add_notifier(NC_GEOM|ND_DATA, mb);
+ }
+}
+
+static MetaElem *rna_MetaBall_elements_new(MetaBall *mb, int type)
+{
+ MetaElem *ml= add_metaball_element(mb, type);
+
+ /* cheating way for importers to avoid slow updates */
+ if(mb->id.us > 0) {
+ DAG_id_flush_update(&mb->id, OB_RECALC_DATA);
+ WM_main_add_notifier(NC_GEOM|ND_DATA, &mb->id);
+ }
- DAG_id_flush_update(&mb->id, OB_RECALC_DATA);
- WM_main_add_notifier(NC_GEOM|ND_DATA, mb);
+ return ml;
+}
+
+static void rna_MetaBall_elements_remove(MetaBall *mb, ReportList *reports, MetaElem *ml)
+{
+ int found= 0;
+
+ 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);
+ return;
+ }
+
+ MEM_freeN(ml);
+ /* invalidate pointer!, no can do */
+
+ /* cheating way for importers to avoid slow updates */
+ if(mb->id.us > 0) {
+ DAG_id_flush_update(&mb->id, OB_RECALC_DATA);
+ WM_main_add_notifier(NC_GEOM|ND_DATA, &mb->id);
+ }
}
#else
+static EnumPropertyItem metaelem_type_items[] = {
+ {MB_BALL, "BALL", ICON_META_BALL, "Ball", ""},
+ {MB_TUBE, "CAPSULE", ICON_META_CAPSULE, "Capsule", ""},
+ {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}};
+
static void rna_def_metaelement(BlenderRNA *brna)
{
StructRNA *srna;
PropertyRNA *prop;
- static EnumPropertyItem prop_type_items[] = {
- {MB_BALL, "BALL", ICON_META_BALL, "Ball", ""},
- {MB_TUBE, "TUBE", ICON_META_TUBE, "Tube", ""},
- {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}};
-
+
srna= RNA_def_struct(brna, "MetaElement", NULL);
RNA_def_struct_sdna(srna, "MetaElem");
RNA_def_struct_ui_text(srna, "Meta Element", "Blobby element in a MetaBall datablock");
@@ -118,12 +158,12 @@ static void rna_def_metaelement(BlenderRNA *brna)
/* enums */
prop= RNA_def_property(srna, "type", PROP_ENUM, PROP_NONE);
- RNA_def_property_enum_items(prop, prop_type_items);
+ RNA_def_property_enum_items(prop, metaelem_type_items);
RNA_def_property_ui_text(prop, "Type", "Metaball types");
RNA_def_property_update(prop, 0, "rna_MetaBall_update_data");
/* number values */
- prop= RNA_def_property(srna, "location", PROP_FLOAT, PROP_TRANSLATION);
+ prop= RNA_def_property(srna, "co", PROP_FLOAT, PROP_TRANSLATION);
RNA_def_property_float_sdna(prop, NULL, "x");
RNA_def_property_array(prop, 3);
RNA_def_property_ui_text(prop, "Location", "");
@@ -165,7 +205,7 @@ static void rna_def_metaelement(BlenderRNA *brna)
RNA_def_property_update(prop, 0, "rna_MetaBall_update_data");
/* flags */
- prop= RNA_def_property(srna, "negative", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_negative", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", MB_NEGATIVE);
RNA_def_property_ui_text(prop, "Negative", "Set metaball as negative one");
RNA_def_property_update(prop, 0, "rna_MetaBall_update_data");
@@ -176,6 +216,37 @@ static void rna_def_metaelement(BlenderRNA *brna)
RNA_def_property_update(prop, 0, "rna_MetaBall_update_data");
}
+/* mball.elements */
+static void rna_def_metaball_elements(BlenderRNA *brna, PropertyRNA *cprop)
+{
+ StructRNA *srna;
+ PropertyRNA *prop;
+
+ FunctionRNA *func;
+ PropertyRNA *parm;
+
+ RNA_def_property_srna(cprop, "MetaBallElements");
+ srna= RNA_def_struct(brna, "MetaBallElements", NULL);
+ RNA_def_struct_sdna(srna, "MetaBall");
+ RNA_def_struct_ui_text(srna, "Meta Elements", "Collection of metaball elements");
+
+ func= RNA_def_function(srna, "new", "rna_MetaBall_elements_new");
+ RNA_def_function_ui_description(func, "Add a new spline to the curve.");
+ parm= RNA_def_enum(func, "type", metaelem_type_items, MB_BALL, "", "type for the new meta element.");
+ parm= RNA_def_pointer(func, "element", "MetaElement", "", "The newly created metaelement.");
+ RNA_def_function_return(func, parm);
+
+ func= RNA_def_function(srna, "remove", "rna_MetaBall_elements_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, "element", "MetaElement", "", "The element to remove.");
+ RNA_def_property_flag(parm, PROP_REQUIRED|PROP_NEVER_NULL);
+
+ prop= RNA_def_property(srna, "active", PROP_POINTER, PROP_NONE);
+ RNA_def_property_pointer_sdna(prop, NULL, "lastelem");
+ RNA_def_property_ui_text(prop, "Active Element", "Last selected element");
+}
+
static void rna_def_metaball(BlenderRNA *brna)
{
StructRNA *srna;
@@ -195,25 +266,23 @@ static void rna_def_metaball(BlenderRNA *brna)
RNA_def_property_collection_sdna(prop, NULL, "elems", NULL);
RNA_def_property_struct_type(prop, "MetaElement");
RNA_def_property_ui_text(prop, "Elements", "Meta elements");
+ rna_def_metaball_elements(brna, prop);
- prop= RNA_def_property(srna, "active_element", PROP_POINTER, PROP_NONE);
- RNA_def_property_pointer_sdna(prop, NULL, "lastelem");
- RNA_def_property_ui_text(prop, "Last selected element.", "Last selected element");
-
/* enums */
- prop= RNA_def_property(srna, "flag", PROP_ENUM, PROP_NONE);
+ prop= RNA_def_property(srna, "update_method", PROP_ENUM, PROP_NONE);
+ RNA_def_property_enum_sdna(prop, NULL, "flag");
RNA_def_property_enum_items(prop, prop_update_items);
RNA_def_property_ui_text(prop, "Update", "Metaball edit update behavior");
RNA_def_property_update(prop, 0, "rna_MetaBall_update_data");
/* number values */
- prop= RNA_def_property(srna, "wire_size", PROP_FLOAT, PROP_DISTANCE);
+ prop= RNA_def_property(srna, "resolution", PROP_FLOAT, PROP_DISTANCE);
RNA_def_property_float_sdna(prop, NULL, "wiresize");
RNA_def_property_range(prop, 0.050f, 1.0f);
RNA_def_property_ui_text(prop, "Wire Size", "Polygonization resolution in the 3D viewport");
RNA_def_property_update(prop, 0, "rna_MetaBall_update_data");
- prop= RNA_def_property(srna, "render_size", PROP_FLOAT, PROP_DISTANCE);
+ prop= RNA_def_property(srna, "render_resolution", PROP_FLOAT, PROP_DISTANCE);
RNA_def_property_float_sdna(prop, NULL, "rendersize");
RNA_def_property_range(prop, 0.050f, 1.0f);
RNA_def_property_ui_text(prop, "Render Size", "Polygonization resolution in rendering");
@@ -226,11 +295,11 @@ static void rna_def_metaball(BlenderRNA *brna)
RNA_def_property_update(prop, 0, "rna_MetaBall_update_data");
/* texture space */
- prop= RNA_def_property(srna, "auto_texspace", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_auto_texspace", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "texflag", MB_AUTOSPACE);
RNA_def_property_ui_text(prop, "Auto Texture Space", "Adjusts active object's texture space automatically when transforming object");
- prop= RNA_def_property(srna, "texspace_loc", PROP_FLOAT, PROP_TRANSLATION);
+ 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_Meta_texspace_editable");
@@ -256,6 +325,7 @@ static void rna_def_metaball(BlenderRNA *brna)
RNA_def_property_collection_sdna(prop, NULL, "mat", "totcol");
RNA_def_property_struct_type(prop, "Material");
RNA_def_property_ui_text(prop, "Materials", "");
+ RNA_def_property_srna(prop, "IDMaterials"); /* see rna_ID.c */
/* anim */
rna_def_animdata_common(srna);
diff --git a/source/blender/makesrna/intern/rna_modifier.c b/source/blender/makesrna/intern/rna_modifier.c
index 7292e13ae89..8672c7babcf 100644
--- a/source/blender/makesrna/intern/rna_modifier.c
+++ b/source/blender/makesrna/intern/rna_modifier.c
@@ -36,6 +36,8 @@
#include "DNA_object_force.h"
#include "DNA_scene_types.h"
+#include "MEM_guardedalloc.h"
+
#include "BLI_math.h"
#include "BKE_animsys.h"
@@ -96,7 +98,6 @@ EnumPropertyItem modifier_type_items[] ={
#include "BKE_library.h"
#include "BKE_modifier.h"
#include "BKE_particle.h"
-#include "BKE_pointcache.h"
static void rna_UVProject_projectors_begin(CollectionPropertyIterator *iter, PointerRNA *ptr)
{
@@ -589,12 +590,12 @@ static void rna_def_modifier_subsurf(BlenderRNA *brna)
RNA_def_property_ui_range(prop, 0, 6, 1, 0);
RNA_def_property_ui_text(prop, "Render Levels", "Number of subdivisions to perform when rendering");
- prop= RNA_def_property(srna, "optimal_display", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_only_control_edges", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flags", eSubsurfModifierFlag_ControlEdges);
RNA_def_property_ui_text(prop, "Optimal Display", "Skip drawing/rendering of interior subdivided edges");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
- prop= RNA_def_property(srna, "subsurf_uv", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_subsurf_uv", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flags", eSubsurfModifierFlag_SubsurfUv);
RNA_def_property_ui_text(prop, "Subdivide UVs", "Use subsurf to subdivide UVs");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
@@ -634,7 +635,7 @@ static void rna_def_modifier_multires(BlenderRNA *brna)
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
RNA_def_property_ui_text(prop, "Total Levels", "Number of subdivisions for which displacements are stored");
- prop= RNA_def_property(srna, "external", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "is_external", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
RNA_def_property_boolean_funcs(prop, "rna_MultiresModifier_external_get", NULL);
RNA_def_property_ui_text(prop, "External", "Store multires displacements outside the .blend file, to save memory");
@@ -644,7 +645,7 @@ static void rna_def_modifier_multires(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "File Path", "Path to external displacements file");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
- prop= RNA_def_property(srna, "optimal_display", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_only_control_edges", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flags", eMultiresModifierFlag_ControlEdges);
RNA_def_property_ui_text(prop, "Optimal Display", "Skip drawing/rendering of interior subdivided edges");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
@@ -727,12 +728,14 @@ static void rna_def_modifier_build(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Start", "Specify the start frame of the effect");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
- prop= RNA_def_property(srna, "length", PROP_FLOAT, PROP_TIME);
+ prop= RNA_def_property(srna, "frame_duration", PROP_FLOAT, PROP_TIME);
+ RNA_def_property_float_sdna(prop, NULL, "length");
RNA_def_property_range(prop, 1, MAXFRAMEF);
RNA_def_property_ui_text(prop, "Length", "Specify the total time the build effect requires");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
- prop= RNA_def_property(srna, "randomize", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_random_order", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_sdna(prop, NULL, "randomize", 1);
RNA_def_property_ui_text(prop, "Randomize", "Randomize the faces or edges during build");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
@@ -752,42 +755,42 @@ static void rna_def_modifier_mirror(BlenderRNA *brna)
RNA_def_struct_sdna(srna, "MirrorModifierData");
RNA_def_struct_ui_icon(srna, ICON_MOD_MIRROR);
- prop= RNA_def_property(srna, "x", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_x", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", MOD_MIR_AXIS_X);
RNA_def_property_ui_text(prop, "X", "Enable X axis mirror");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
- prop= RNA_def_property(srna, "y", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_y", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", MOD_MIR_AXIS_Y);
RNA_def_property_ui_text(prop, "Y", "Enable Y axis mirror");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
- prop= RNA_def_property(srna, "z", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_z", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", MOD_MIR_AXIS_Z);
RNA_def_property_ui_text(prop, "Z", "Enable Z axis mirror");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
- prop= RNA_def_property(srna, "clip", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_clip", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", MOD_MIR_CLIPPING);
RNA_def_property_ui_text(prop, "Clip", "Prevents vertices from going through the mirror during transform");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
- prop= RNA_def_property(srna, "mirror_vertex_groups", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_mirror_vertex_groups", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", MOD_MIR_VGROUP);
RNA_def_property_ui_text(prop, "Mirror Vertex Groups", "Mirror vertex groups (e.g. .R->.L)");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
- prop= RNA_def_property(srna, "mirror_u", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_mirror_u", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", MOD_MIR_MIRROR_U);
RNA_def_property_ui_text(prop, "Mirror U", "Mirror the U texture coordinate around the 0.5 point");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
- prop= RNA_def_property(srna, "mirror_v", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_mirror_v", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", MOD_MIR_MIRROR_V);
RNA_def_property_ui_text(prop, "Mirror V", "Mirror the V texture coordinate around the 0.5 point");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
- prop= RNA_def_property(srna, "merge_limit", PROP_FLOAT, PROP_DISTANCE);
+ prop= RNA_def_property(srna, "merge_threshold", PROP_FLOAT, PROP_DISTANCE);
RNA_def_property_float_sdna(prop, NULL, "tolerance");
RNA_def_property_range(prop, 0, FLT_MAX);
RNA_def_property_ui_range(prop, 0, 1, 0.01, 6);
@@ -811,9 +814,10 @@ static void rna_def_modifier_decimate(BlenderRNA *brna)
RNA_def_struct_sdna(srna, "DecimateModifierData");
RNA_def_struct_ui_icon(srna, ICON_MOD_DECIM);
- prop= RNA_def_property(srna, "ratio", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "ratio", PROP_FLOAT, PROP_PERCENTAGE);
RNA_def_property_float_sdna(prop, NULL, "percent");
RNA_def_property_range(prop, 0, 1);
+ RNA_def_property_ui_range(prop, 0, 1, 1, 2);
RNA_def_property_ui_text(prop, "Ratio", "Defines the ratio of triangles to reduce to");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
@@ -840,37 +844,37 @@ static void rna_def_modifier_wave(BlenderRNA *brna)
RNA_def_struct_sdna(srna, "WaveModifierData");
RNA_def_struct_ui_icon(srna, ICON_MOD_WAVE);
- prop= RNA_def_property(srna, "x", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_x", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", MOD_WAVE_X);
RNA_def_property_ui_text(prop, "X", "X axis motion");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
- prop= RNA_def_property(srna, "y", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_y", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", MOD_WAVE_Y);
RNA_def_property_ui_text(prop, "Y", "Y axis motion");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
- prop= RNA_def_property(srna, "cyclic", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_cyclic", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", MOD_WAVE_CYCL);
RNA_def_property_ui_text(prop, "Cyclic", "Cyclic wave effect");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
- prop= RNA_def_property(srna, "normals", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_normal", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", MOD_WAVE_NORM);
RNA_def_property_ui_text(prop, "Normals", "Displace along normals");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
- prop= RNA_def_property(srna, "x_normal", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_normal_x", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", MOD_WAVE_NORM_X);
RNA_def_property_ui_text(prop, "X Normal", "Enable displacement along the X normal");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
- prop= RNA_def_property(srna, "y_normal", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_normal_y", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", MOD_WAVE_NORM_Y);
RNA_def_property_ui_text(prop, "Y Normal", "Enable displacement along the Y normal");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
- prop= RNA_def_property(srna, "z_normal", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_normal_z", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", MOD_WAVE_NORM_Z);
RNA_def_property_ui_text(prop, "Z Normal", "Enable displacement along the Z normal");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
@@ -882,6 +886,7 @@ static void rna_def_modifier_wave(BlenderRNA *brna)
RNA_def_property_update(prop, 0, "rna_Modifier_update");
prop= RNA_def_property(srna, "lifetime", PROP_FLOAT, PROP_TIME);
+ RNA_def_property_float_sdna(prop, NULL, "lifetime");
RNA_def_property_range(prop, MINAFRAMEF, MAXFRAMEF);
RNA_def_property_ui_text(prop, "Lifetime", "");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
@@ -930,7 +935,7 @@ static void rna_def_modifier_wave(BlenderRNA *brna)
RNA_def_property_flag(prop, PROP_EDITABLE);
RNA_def_property_update(prop, 0, "rna_Modifier_update");
- prop= RNA_def_property(srna, "texture_coordinates", PROP_ENUM, PROP_NONE);
+ prop= RNA_def_property(srna, "texture_coords", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "texmapping");
RNA_def_property_enum_items(prop, prop_texture_coordinates_items);
RNA_def_property_ui_text(prop, "Texture Coordinates", "Texture coordinates used for modulating input");
@@ -942,7 +947,7 @@ static void rna_def_modifier_wave(BlenderRNA *brna)
RNA_def_property_string_funcs(prop, NULL, NULL, "rna_WaveModifier_uvlayer_set");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
- prop= RNA_def_property(srna, "texture_coordinates_object", PROP_POINTER, PROP_NONE);
+ 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 Coordinates Object", "");
RNA_def_property_flag(prop, PROP_EDITABLE|PROP_ID_SELF_CHECK);
@@ -996,7 +1001,7 @@ static void rna_def_modifier_armature(BlenderRNA *brna)
RNA_def_property_string_funcs(prop, NULL, NULL, "rna_ArmatureModifier_vgroup_set");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
- prop= RNA_def_property(srna, "invert", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "invert_vertex_group", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "deformflag", ARM_DEF_INVERT_VGROUP);
RNA_def_property_ui_text(prop, "Invert", "Invert vertex group influence");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
@@ -1011,12 +1016,12 @@ static void rna_def_modifier_armature(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Use Bone Envelopes", "");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
- prop= RNA_def_property(srna, "quaternion", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_deform_preserve_volume", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "deformflag", ARM_DEF_QUATERNION);
RNA_def_property_ui_text(prop, "Quaternion", "Deform rotation interpolation with quaternions");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
- prop= RNA_def_property(srna, "multi_modifier", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_multi_modifier", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "multi", 0);
RNA_def_property_ui_text(prop, "Multi Modifier", "Use same input as previous modifier, and mix results using overall vgroup");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
@@ -1139,7 +1144,8 @@ static void rna_def_modifier_array(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Count", "Number of duplicates to make");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
- prop= RNA_def_property(srna, "length", PROP_FLOAT, PROP_DISTANCE);
+ prop= RNA_def_property(srna, "fit_length", PROP_FLOAT, PROP_DISTANCE);
+ RNA_def_property_float_sdna(prop, NULL, "length");
RNA_def_property_range(prop, 0, INT_MAX);
RNA_def_property_ui_range(prop, 0, 10000, 10, 2);
RNA_def_property_ui_text(prop, "Length", "Length to fit array within");
@@ -1153,38 +1159,38 @@ static void rna_def_modifier_array(BlenderRNA *brna)
RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
/* Offset parameters */
- prop= RNA_def_property(srna, "constant_offset", PROP_BOOLEAN, PROP_TRANSLATION);
+ prop= RNA_def_property(srna, "use_constant_offset", PROP_BOOLEAN, PROP_TRANSLATION);
RNA_def_property_boolean_sdna(prop, NULL, "offset_type", MOD_ARR_OFF_CONST);
RNA_def_property_ui_text(prop, "Constant Offset", "Add a constant offset");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
- prop= RNA_def_property(srna, "constant_offset_displacement", PROP_FLOAT, PROP_TRANSLATION);
+ prop= RNA_def_property(srna, "constant_offset_displace", PROP_FLOAT, PROP_TRANSLATION);
RNA_def_property_float_sdna(prop, NULL, "offset");
RNA_def_property_ui_text(prop, "Constant Offset Displacement", "");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
- prop= RNA_def_property(srna, "relative_offset", PROP_BOOLEAN, PROP_TRANSLATION);
+ prop= RNA_def_property(srna, "use_relative_offset", PROP_BOOLEAN, PROP_TRANSLATION);
RNA_def_property_boolean_sdna(prop, NULL, "offset_type", MOD_ARR_OFF_RELATIVE);
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= RNA_def_property(srna, "relative_offset_displacement", PROP_FLOAT, PROP_TRANSLATION);
+ prop= RNA_def_property(srna, "relative_offset_displace", PROP_FLOAT, PROP_TRANSLATION);
RNA_def_property_float_sdna(prop, NULL, "scale");
RNA_def_property_ui_text(prop, "Relative Offset Displacement", "");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
/* Vertex merging parameters */
- prop= RNA_def_property(srna, "merge_adjacent_vertices", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_merge_vertices", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flags", MOD_ARR_MERGE);
RNA_def_property_ui_text(prop, "Merge Vertices", "Merge vertices in adjacent duplicates");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
- prop= RNA_def_property(srna, "merge_end_vertices", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_merge_vertices_cap", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flags", MOD_ARR_MERGEFINAL);
RNA_def_property_ui_text(prop, "Merge Vertices", "Merge vertices in first and last duplicates");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
- prop= RNA_def_property(srna, "merge_distance", PROP_FLOAT, PROP_DISTANCE);
+ prop= RNA_def_property(srna, "merge_threshold", PROP_FLOAT, PROP_DISTANCE);
RNA_def_property_float_sdna(prop, NULL, "merge_dist");
RNA_def_property_range(prop, 0, FLT_MAX);
RNA_def_property_ui_range(prop, 0, 1, 1, 4);
@@ -1192,7 +1198,7 @@ static void rna_def_modifier_array(BlenderRNA *brna)
RNA_def_property_update(prop, 0, "rna_Modifier_update");
/* Offset object */
- prop= RNA_def_property(srna, "add_offset_object", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_object_offset", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "offset_type", MOD_ARR_OFF_OBJ);
RNA_def_property_ui_text(prop, "Object Offset", "Add another object's transformation to the total offset");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
@@ -1239,7 +1245,7 @@ static void rna_def_modifier_edgesplit(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Use Edge Angle", "Split edges with high angle between faces");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
- prop= RNA_def_property(srna, "use_sharp", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_edge_sharp", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flags", MOD_EDGESPLIT_FROMFLAG);
RNA_def_property_ui_text(prop, "Use Sharp Edges", "Split edges that are marked as sharp");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
@@ -1281,7 +1287,8 @@ static void rna_def_modifier_displace(BlenderRNA *brna)
RNA_def_property_flag(prop, PROP_EDITABLE);
RNA_def_property_update(prop, 0, "rna_Modifier_update");
- prop= RNA_def_property(srna, "midlevel", PROP_FLOAT, PROP_DISTANCE);
+ prop= RNA_def_property(srna, "mid_level", PROP_FLOAT, PROP_DISTANCE);
+ RNA_def_property_float_sdna(prop, NULL, "midlevel");
RNA_def_property_range(prop, 0, 1);
RNA_def_property_ui_range(prop, 0, 1, 10, 3);
RNA_def_property_ui_text(prop, "Midlevel", "Material value that gives no displacement");
@@ -1289,7 +1296,7 @@ static void rna_def_modifier_displace(BlenderRNA *brna)
prop= RNA_def_property(srna, "strength", PROP_FLOAT, PROP_NONE);
RNA_def_property_range(prop, -FLT_MAX, FLT_MAX);
- RNA_def_property_ui_range(prop, -100, 100, 10, 2);
+ RNA_def_property_ui_range(prop, -100, 100, 10, 3);
RNA_def_property_ui_text(prop, "Strength", "");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
@@ -1298,11 +1305,11 @@ static void rna_def_modifier_displace(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Direction", "");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
- prop= RNA_def_property(srna, "texture_coordinates", PROP_ENUM, PROP_NONE);
+ prop= RNA_def_property(srna, "texture_coords", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "texmapping");
RNA_def_property_enum_items(prop, prop_texture_coordinates_items);
RNA_def_property_ui_text(prop, "Texture Coordinates", "");
- RNA_def_property_update(prop, 0, "rna_Modifier_update");
+ RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
prop= RNA_def_property(srna, "uv_layer", PROP_STRING, PROP_NONE);
RNA_def_property_string_sdna(prop, NULL, "uvlayer_name");
@@ -1333,7 +1340,8 @@ static void rna_def_modifier_uvproject(BlenderRNA *brna)
RNA_def_property_string_funcs(prop, NULL, NULL, "rna_UVProjectModifier_uvlayer_set");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
- prop= RNA_def_property(srna, "num_projectors", PROP_INT, PROP_NONE);
+ prop= RNA_def_property(srna, "projector_count", PROP_INT, PROP_NONE);
+ RNA_def_property_int_sdna(prop, NULL, "num_projectors");
RNA_def_property_ui_text(prop, "Number of Projectors", "Number of projectors to use");
RNA_def_property_int_funcs(prop, NULL, "rna_UVProjectModifier_num_projectors_set", NULL);
RNA_def_property_range(prop, 1, MOD_UVPROJECT_MAX);
@@ -1352,32 +1360,32 @@ static void rna_def_modifier_uvproject(BlenderRNA *brna)
prop= RNA_def_property(srna, "aspect_x", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "aspectx");
RNA_def_property_range(prop, 1, FLT_MAX);
- RNA_def_property_ui_range(prop, 1, 1000, 0.2, 2);
+ RNA_def_property_ui_range(prop, 1, 1000, 1, 3);
RNA_def_property_ui_text(prop, "Horizontal Aspect Ratio", "");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
prop= RNA_def_property(srna, "aspect_y", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "aspecty");
RNA_def_property_range(prop, 1, FLT_MAX);
- RNA_def_property_ui_range(prop, 1, 1000, 0.2, 2);
+ RNA_def_property_ui_range(prop, 1, 1000, 1, 3);
RNA_def_property_ui_text(prop, "Vertical Aspect Ratio", "");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
prop= RNA_def_property(srna, "scale_x", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "scalex");
RNA_def_property_range(prop, 0, FLT_MAX);
- RNA_def_property_ui_range(prop, 0, 1000, 0.2, 2);
+ RNA_def_property_ui_range(prop, 0, 1000, 1, 3);
RNA_def_property_ui_text(prop, "Horizontal Scale", "");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
prop= RNA_def_property(srna, "scale_y", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "scaley");
RNA_def_property_range(prop, 0, FLT_MAX);
- RNA_def_property_ui_range(prop, 0, 1000, 0.2, 2);
+ RNA_def_property_ui_range(prop, 0, 1000, 1, 3);
RNA_def_property_ui_text(prop, "Vertical Scale", "");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
- prop= RNA_def_property(srna, "override_image", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_image_override", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flags", MOD_UVPROJECT_OVERRIDEIMAGE);
RNA_def_property_ui_text(prop, "Override Image", "Override faces' current images with the given image");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
@@ -1403,17 +1411,17 @@ static void rna_def_modifier_smooth(BlenderRNA *brna)
RNA_def_struct_sdna(srna, "SmoothModifierData");
RNA_def_struct_ui_icon(srna, ICON_MOD_SMOOTH);
- prop= RNA_def_property(srna, "x", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_x", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", MOD_SMOOTH_X);
RNA_def_property_ui_text(prop, "X", "");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
- prop= RNA_def_property(srna, "y", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_y", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", MOD_SMOOTH_Y);
RNA_def_property_ui_text(prop, "Y", "");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
- prop= RNA_def_property(srna, "z", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_z", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", MOD_SMOOTH_Z);
RNA_def_property_ui_text(prop, "Z", "");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
@@ -1421,11 +1429,12 @@ static void rna_def_modifier_smooth(BlenderRNA *brna)
prop= RNA_def_property(srna, "factor", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "fac");
RNA_def_property_range(prop, -FLT_MAX, FLT_MAX);
- RNA_def_property_ui_range(prop, -10, 10, 0.5, 2);
+ RNA_def_property_ui_range(prop, -10, 10, 1, 3);
RNA_def_property_ui_text(prop, "Factor", "");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
- prop= RNA_def_property(srna, "repeat", PROP_INT, PROP_NONE);
+ prop= RNA_def_property(srna, "iterations", PROP_INT, PROP_NONE);
+ RNA_def_property_int_sdna(prop, NULL, "repeat");
RNA_def_property_ui_range(prop, 0, 30, 1, 0);
RNA_def_property_ui_text(prop, "Repeat", "");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
@@ -1465,22 +1474,22 @@ static void rna_def_modifier_cast(BlenderRNA *brna)
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, "x", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_x", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", MOD_CAST_X);
RNA_def_property_ui_text(prop, "X", "");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
- prop= RNA_def_property(srna, "y", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_y", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", MOD_CAST_Y);
RNA_def_property_ui_text(prop, "Y", "");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
- prop= RNA_def_property(srna, "z", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_z", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", MOD_CAST_Z);
RNA_def_property_ui_text(prop, "Z", "");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
- prop= RNA_def_property(srna, "from_radius", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_radius_as_size", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", MOD_CAST_SIZE_FROM_RADIUS);
RNA_def_property_ui_text(prop, "From Radius", "Use radius as size of projection shape (0 = auto)");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
@@ -1499,13 +1508,13 @@ static void rna_def_modifier_cast(BlenderRNA *brna)
prop= RNA_def_property(srna, "radius", PROP_FLOAT, PROP_DISTANCE);
RNA_def_property_range(prop, 0, FLT_MAX);
- RNA_def_property_ui_range(prop, 0, 100, 10, 2);
+ RNA_def_property_ui_range(prop, 0, 100, 5, 2);
RNA_def_property_ui_text(prop, "Radius", "Only deform vertices within this distance from the center of the effect (leave as 0 for infinite.)");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
prop= RNA_def_property(srna, "size", PROP_FLOAT, PROP_NONE);
RNA_def_property_range(prop, 0, FLT_MAX);
- RNA_def_property_ui_range(prop, 0, 100, 10, 2);
+ RNA_def_property_ui_range(prop, 0, 100, 5, 2);
RNA_def_property_ui_text(prop, "Size", "Size of projection shape (leave as 0 for auto.)");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
@@ -1543,7 +1552,7 @@ static void rna_def_modifier_meshdeform(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Bound", "Whether geometry has been bound to control cage");
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
- prop= RNA_def_property(srna, "invert", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "invert_vertex_group", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", MOD_MDEF_INVERT_VGROUP);
RNA_def_property_ui_text(prop, "Invert", "Invert vertex group influence");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
@@ -1560,7 +1569,7 @@ static void rna_def_modifier_meshdeform(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Precision", "The grid size for binding");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
- prop= RNA_def_property(srna, "dynamic", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_dynamic_bind", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", MOD_MDEF_DYNAMIC_BIND);
RNA_def_property_ui_text(prop, "Dynamic", "Recompute binding dynamically on top of other deformers (slower and more memory consuming.)");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
@@ -1612,7 +1621,7 @@ static void rna_def_modifier_particleinstance(BlenderRNA *brna)
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_number", PROP_INT, PROP_NONE);
+ prop= RNA_def_property(srna, "particle_system_index", PROP_INT, PROP_NONE);
RNA_def_property_int_sdna(prop, NULL, "psys");
RNA_def_property_range(prop, 1, 10);
RNA_def_property_ui_text(prop, "Particle System Number", "");
@@ -1624,12 +1633,12 @@ static void rna_def_modifier_particleinstance(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Axis", "Pole axis for rotation");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
- prop= RNA_def_property(srna, "normal", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_normal", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", eParticleInstanceFlag_Parents);
RNA_def_property_ui_text(prop, "Normal", "Create instances from normal particles");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
- prop= RNA_def_property(srna, "children", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_children", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", eParticleInstanceFlag_Children);
RNA_def_property_ui_text(prop, "Children", "Create instances from child particles");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
@@ -1639,27 +1648,27 @@ static void rna_def_modifier_particleinstance(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Path", "Create instances along particle paths");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
- prop= RNA_def_property(srna, "unborn", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_unborn", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", eParticleInstanceFlag_Unborn);
RNA_def_property_ui_text(prop, "Unborn", "Show instances when particles are unborn");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
- prop= RNA_def_property(srna, "alive", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_alive", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", eParticleInstanceFlag_Alive);
RNA_def_property_ui_text(prop, "Alive", "Show instances when particles are alive");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
- prop= RNA_def_property(srna, "dead", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_dead", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", eParticleInstanceFlag_Dead);
RNA_def_property_ui_text(prop, "Dead", "Show instances when particles are dead");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
- prop= RNA_def_property(srna, "keep_shape", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_preserve_shape", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", eParticleInstanceFlag_KeepShape);
RNA_def_property_ui_text(prop, "Keep Shape", "Don't stretch the object");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
- prop= RNA_def_property(srna, "size", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_size", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", eParticleInstanceFlag_UseSize);
RNA_def_property_ui_text(prop, "Size", "Use particle size to scale the instances");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
@@ -1696,27 +1705,27 @@ static void rna_def_modifier_explode(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Protect", "Clean vertex group edges");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
- prop= RNA_def_property(srna, "split_edges", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_edge_split", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", eExplodeFlag_EdgeSplit);
RNA_def_property_ui_text(prop, "Split Edges", "Split face edges for nicer shrapnel");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
- prop= RNA_def_property(srna, "unborn", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_unborn", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", eExplodeFlag_Unborn);
RNA_def_property_ui_text(prop, "Unborn", "Show mesh when particles are unborn");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
- prop= RNA_def_property(srna, "alive", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_alive", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", eExplodeFlag_Alive);
RNA_def_property_ui_text(prop, "Alive", "Show mesh when particles are alive");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
- prop= RNA_def_property(srna, "dead", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_dead", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", eExplodeFlag_Dead);
RNA_def_property_ui_text(prop, "Dead", "Show mesh when particles are dead");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
- prop= RNA_def_property(srna, "size", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_size", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", eExplodeFlag_PaSize);
RNA_def_property_ui_text(prop, "Size", "Use particle size for the shrapnel");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
@@ -1829,7 +1838,7 @@ static void rna_def_modifier_bevel(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Width", "Bevel value/amount");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
- prop= RNA_def_property(srna, "only_vertices", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_only_vertices", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flags", BME_BEVEL_VERT);
RNA_def_property_ui_text(prop, "Only Vertices", "Bevel verts/corners, not edges");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
@@ -1846,7 +1855,7 @@ static void rna_def_modifier_bevel(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Edge Weight Method", "What edge weight to use for weighting a vertex");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
- prop= RNA_def_property(srna, "angle", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "angle_limit", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "bevel_angle");
RNA_def_property_range(prop, 0, 180);
RNA_def_property_ui_range(prop, 0, 180, 100, 2);
@@ -1870,7 +1879,7 @@ static void rna_def_modifier_shrinkwrap(BlenderRNA *brna)
RNA_def_struct_sdna(srna, "ShrinkwrapModifierData");
RNA_def_struct_ui_icon(srna, ICON_MOD_SHRINKWRAP);
- prop= RNA_def_property(srna, "mode", PROP_ENUM, PROP_NONE);
+ prop= RNA_def_property(srna, "wrap_method", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "shrinkType");
RNA_def_property_enum_items(prop, shrink_type_items);
RNA_def_property_ui_text(prop, "Mode", "");
@@ -1902,17 +1911,17 @@ static void rna_def_modifier_shrinkwrap(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Offset", "Distance to keep from the target");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
- prop= RNA_def_property(srna, "x", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_project_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, "X", "");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
- prop= RNA_def_property(srna, "y", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_project_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, "Y", "");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
- prop= RNA_def_property(srna, "z", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_project_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, "Z", "");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
@@ -1924,27 +1933,27 @@ static void rna_def_modifier_shrinkwrap(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Subsurf Levels", "Number of subdivisions that must be performed before extracting vertices' positions and normals");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
- prop= RNA_def_property(srna, "negative", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_negative_direction", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "shrinkOpts", MOD_SHRINKWRAP_PROJECT_ALLOW_NEG_DIR);
RNA_def_property_ui_text(prop, "Negative", "Allow vertices to move in the negative direction of axis");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
- prop= RNA_def_property(srna, "positive", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_positive_direction", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "shrinkOpts", MOD_SHRINKWRAP_PROJECT_ALLOW_POS_DIR);
RNA_def_property_ui_text(prop, "Positive", "Allow vertices to move in the positive direction of axis");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
- prop= RNA_def_property(srna, "cull_front_faces", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_cull_front_faces", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "shrinkOpts", MOD_SHRINKWRAP_CULL_TARGET_FRONTFACE);
RNA_def_property_ui_text(prop, "Cull Front Faces", "Stop vertices from projecting to a front face on the target");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
- prop= RNA_def_property(srna, "cull_back_faces", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_cull_back_faces", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "shrinkOpts", MOD_SHRINKWRAP_CULL_TARGET_BACKFACE);
RNA_def_property_ui_text(prop, "Cull Back Faces", "Stop vertices from projecting to a back face on the target");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
- prop= RNA_def_property(srna, "keep_above_surface", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_keep_above_surface", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "shrinkOpts", MOD_SHRINKWRAP_KEEP_ABOVE_SURFACE);
RNA_def_property_ui_text(prop, "Keep Above Surface", "");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
@@ -1999,7 +2008,7 @@ static void rna_def_modifier_mask(BlenderRNA *brna)
RNA_def_property_string_funcs(prop, NULL, NULL, "rna_MaskModifier_vgroup_set");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
- prop= RNA_def_property(srna, "invert", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "invert_vertex_group", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", MOD_MASK_INV);
RNA_def_property_ui_text(prop, "Invert", "Use vertices that are not part of region defined");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
@@ -2022,7 +2031,8 @@ static void rna_def_modifier_simpledeform(BlenderRNA *brna)
RNA_def_struct_sdna(srna, "SimpleDeformModifierData");
RNA_def_struct_ui_icon(srna, ICON_MOD_SIMPLEDEFORM);
- prop= RNA_def_property(srna, "mode", PROP_ENUM, PROP_NONE);
+ prop= RNA_def_property(srna, "deform_method", PROP_ENUM, PROP_NONE);
+ RNA_def_property_enum_sdna(prop, NULL, "mode");
RNA_def_property_enum_items(prop, simple_deform_mode_items);
RNA_def_property_ui_text(prop, "Mode", "");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
@@ -2038,14 +2048,14 @@ static void rna_def_modifier_simpledeform(BlenderRNA *brna)
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, "relative", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_relative", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "originOpts", MOD_SIMPLEDEFORM_ORIGIN_LOCAL);
RNA_def_property_ui_text(prop, "Relative", "Sets the origin of deform space to be relative to the object");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
prop= RNA_def_property(srna, "factor", PROP_FLOAT, PROP_NONE);
RNA_def_property_range(prop, -FLT_MAX, FLT_MAX);
- RNA_def_property_ui_range(prop, -10, 10, 0.5, 2);
+ RNA_def_property_ui_range(prop, -10, 10, 1, 3);
RNA_def_property_ui_text(prop, "Factor", "");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
@@ -2057,12 +2067,12 @@ static void rna_def_modifier_simpledeform(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Limits", "Lower/Upper limits for deform");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
- prop= RNA_def_property(srna, "lock_x_axis", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "lock_x", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "axis", MOD_SIMPLEDEFORM_LOCK_AXIS_X);
RNA_def_property_ui_text(prop, "Lock X Axis", "");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
- prop= RNA_def_property(srna, "lock_y_axis", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "lock_y", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "axis", MOD_SIMPLEDEFORM_LOCK_AXIS_Y);
RNA_def_property_ui_text(prop, "Lock Y Axis", "");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
@@ -2149,7 +2159,7 @@ static void rna_def_modifier_solidify(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "High Quality Normals", "Calculate normals which result in more even thickness (slow, disable when not needed)");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
- prop= RNA_def_property(srna, "invert", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "invert_vertex_group", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", MOD_SOLIDIFY_VGROUP_INV);
RNA_def_property_ui_text(prop, "Vertex Group Invert", "Invert the vertex group influence");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
@@ -2274,30 +2284,31 @@ void RNA_def_modifier(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Type", "");
/* flags */
- prop= RNA_def_property(srna, "realtime", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_viewport", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "mode", eModifierMode_Realtime);
RNA_def_property_ui_text(prop, "Realtime", "Realtime display of a modifier");
RNA_def_property_flag(prop, PROP_LIB_EXCEPTION);
RNA_def_property_update(prop, 0, "rna_Modifier_update");
RNA_def_property_ui_icon(prop, ICON_RESTRICT_VIEW_OFF, 0);
- prop= RNA_def_property(srna, "render", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_render", PROP_BOOLEAN, PROP_NONE);
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);
- prop= RNA_def_property(srna, "editmode", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_in_editmode", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "mode", eModifierMode_Editmode);
RNA_def_property_ui_text(prop, "Editmode", "Use modifier while in the edit mode");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
RNA_def_property_ui_icon(prop, ICON_EDITMODE_HLT, 0);
- prop= RNA_def_property(srna, "on_cage", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_on_cage", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "mode", eModifierMode_OnCage);
RNA_def_property_ui_text(prop, "On Cage", "Enable direct editing of modifier control cage");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
- prop= RNA_def_property(srna, "expanded", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_expanded", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "mode", eModifierMode_Expanded);
RNA_def_property_ui_text(prop, "Expanded", "Set modifier expanded in the user interface");
RNA_def_property_ui_icon(prop, ICON_TRIA_RIGHT, 1);
diff --git a/source/blender/makesrna/intern/rna_nla.c b/source/blender/makesrna/intern/rna_nla.c
index 59c7607e930..15c8608e523 100644
--- a/source/blender/makesrna/intern/rna_nla.c
+++ b/source/blender/makesrna/intern/rna_nla.c
@@ -314,7 +314,7 @@ static void rna_def_nlastrip(BlenderRNA *brna)
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");
- prop= RNA_def_property(srna, "blending", PROP_ENUM, PROP_NONE);
+ 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");
@@ -343,7 +343,7 @@ static void rna_def_nlastrip(BlenderRNA *brna)
RNA_def_property_float_funcs(prop, NULL, "rna_NlaStrip_blend_out_set", NULL);
RNA_def_property_ui_text(prop, "Blend Out", "");
- prop= RNA_def_property(srna, "auto_blending", PROP_BOOLEAN, PROP_NONE);
+ 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");
@@ -401,17 +401,17 @@ static void rna_def_nlastrip(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Strip Time", "Frame of referenced Action to evaluate");
// TODO: should the animated_influence/time settings be animatable themselves?
- prop= RNA_def_property(srna, "animated_influence", PROP_BOOLEAN, PROP_NONE);
+ 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");
- prop= RNA_def_property(srna, "animated_time", PROP_BOOLEAN, PROP_NONE);
+ 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");
- prop= RNA_def_property(srna, "animated_time_cyclic", PROP_BOOLEAN, PROP_NONE);
+ 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);
RNA_def_property_ui_text(prop, "Cyclic Strip Time", "Cycle the animated time within the action start & end");
RNA_def_property_update(prop, 0, "rna_NlaStrip_transform_update"); // is there a better update flag?
@@ -430,7 +430,7 @@ static void rna_def_nlastrip(BlenderRNA *brna)
RNA_def_property_boolean_sdna(prop, NULL, "flag", NLASTRIP_FLAG_MUTED);
RNA_def_property_ui_text(prop, "Muted", "NLA Strip is not evaluated");
- prop= RNA_def_property(srna, "reversed", PROP_BOOLEAN, PROP_NONE);
+ 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)");
@@ -463,7 +463,7 @@ static void rna_def_nlatrack(BlenderRNA *brna)
RNA_def_property_boolean_sdna(prop, NULL, "flag", NLATRACK_ACTIVE);
RNA_def_property_ui_text(prop, "Active", "NLA Track is active");
- prop= RNA_def_property(srna, "solo", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "is_solo", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_clear_flag(prop, PROP_EDITABLE); /* can be made editable by hooking it up to the necessary NLA API methods */
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)");
diff --git a/source/blender/makesrna/intern/rna_nodetree.c b/source/blender/makesrna/intern/rna_nodetree.c
index 5ebf43fc2b7..36385759c5a 100644
--- a/source/blender/makesrna/intern/rna_nodetree.c
+++ b/source/blender/makesrna/intern/rna_nodetree.c
@@ -139,6 +139,24 @@ static void rna_Matte_t2_set(PointerRNA *ptr, float value)
chroma->t2 = value;
}
+static void rna_Image_start_frame_set(PointerRNA *ptr, int value)
+{
+ bNode *node= (bNode*)ptr->data;
+ NodeImageFile *image = node->storage;
+
+ CLAMP(value, MINFRAME, image->efra);
+ image->sfra= value;
+}
+
+static void rna_Image_end_frame_set(PointerRNA *ptr, int value)
+{
+ bNode *node= (bNode*)ptr->data;
+ NodeImageFile *image = node->storage;
+
+ CLAMP(value, image->sfra, MAXFRAME);
+ image->efra= value;
+}
+
static void node_update(Main *bmain, Scene *scene, bNodeTree *ntree, bNode *node)
{
ED_node_generic_update(bmain, scene, ntree, node);
@@ -575,7 +593,7 @@ static void def_group(StructRNA *srna)
{
PropertyRNA *prop;
- prop = RNA_def_property(srna, "nodetree", PROP_POINTER, PROP_NONE);
+ prop = RNA_def_property(srna, "node_tree", PROP_POINTER, PROP_NONE);
RNA_def_property_pointer_sdna(prop, NULL, "id");
RNA_def_property_struct_type(prop, "NodeTree");
RNA_def_property_flag(prop, PROP_EDITABLE);
@@ -638,12 +656,12 @@ static void def_time(StructRNA *srna)
RNA_def_property_ui_text(prop, "Curve", "");
RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
- prop = RNA_def_property(srna, "start", PROP_INT, PROP_NONE);
+ prop = RNA_def_property(srna, "frame_start", PROP_INT, PROP_NONE);
RNA_def_property_int_sdna(prop, NULL, "custom1");
RNA_def_property_ui_text(prop, "Start Frame", "");
RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
- prop = RNA_def_property(srna, "end", PROP_INT, PROP_NONE);
+ prop = RNA_def_property(srna, "frame_end", PROP_INT, PROP_NONE);
RNA_def_property_int_sdna(prop, NULL, "custom2");
RNA_def_property_ui_text(prop, "End Frame", "");
RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
@@ -670,7 +688,7 @@ static void def_mix_rgb(StructRNA *srna)
RNA_def_property_ui_text(prop, "Blend Type", "");
RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
- prop = RNA_def_property(srna, "alpha", PROP_BOOLEAN, PROP_NONE);
+ prop = RNA_def_property(srna, "use_alpha", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "custom2", 1);
RNA_def_property_ui_text(prop, "Alpha", "Include alpha of second input in this operation");
RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
@@ -707,12 +725,12 @@ static void def_sh_material(StructRNA *srna)
RNA_def_property_ui_text(prop, "Material", "");
RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
- prop = RNA_def_property(srna, "diffuse", PROP_BOOLEAN, PROP_NONE);
+ prop = RNA_def_property(srna, "use_diffuse", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "custom1", SH_NODE_MAT_DIFF);
RNA_def_property_ui_text(prop, "Diffuse", "Material Node outputs Diffuse");
RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
- prop = RNA_def_property(srna, "specular", PROP_BOOLEAN, PROP_NONE);
+ prop = RNA_def_property(srna, "use_specular", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "custom1", SH_NODE_MAT_SPEC);
RNA_def_property_ui_text(prop, "Specular", "Material Node outputs Specular");
RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
@@ -747,23 +765,23 @@ static void def_sh_mapping(StructRNA *srna)
RNA_def_property_ui_range(prop, -10.f, 10.f, 0.1f, 2);
RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_mapping_update");
- prop = RNA_def_property(srna, "clamp_minimum", PROP_BOOLEAN, PROP_NONE);
+ prop = RNA_def_property(srna, "use_min", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", TEXMAP_CLIP_MIN);
RNA_def_property_ui_text(prop, "Clamp Minimum", "Clamp the output coordinate to a minimum value");
RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
- prop= RNA_def_property(srna, "minimum", PROP_FLOAT, PROP_XYZ);
+ prop= RNA_def_property(srna, "min", PROP_FLOAT, PROP_XYZ);
RNA_def_property_float_sdna(prop, NULL, "min");
RNA_def_property_ui_text(prop, "Minimum", "Minimum value to clamp coordinate to");
RNA_def_property_ui_range(prop, -10.f, 10.f, 0.1f, 2);
RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
- prop = RNA_def_property(srna, "clamp_maximum", PROP_BOOLEAN, PROP_NONE);
+ prop = RNA_def_property(srna, "use_max", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", TEXMAP_CLIP_MAX);
RNA_def_property_ui_text(prop, "Clamp Maximum", "Clamp the output coordinate to a maximum value");
RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
- prop= RNA_def_property(srna, "maximum", PROP_FLOAT, PROP_XYZ);
+ prop= RNA_def_property(srna, "max", PROP_FLOAT, PROP_XYZ);
RNA_def_property_float_sdna(prop, NULL, "max");
RNA_def_property_ui_text(prop, "Maximum", "Maximum value to clamp coordinate to");
RNA_def_property_ui_range(prop, -10.f, 10.f, 0.1f, 2);
@@ -795,7 +813,7 @@ static void def_cmp_alpha_over(StructRNA *srna)
PropertyRNA *prop;
// XXX: Tooltip
- prop = RNA_def_property(srna, "convert_premul", PROP_BOOLEAN, PROP_NONE);
+ prop = RNA_def_property(srna, "use_premultiply", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "custom1", 1);
RNA_def_property_ui_text(prop, "Convert Premul", "");
RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
@@ -815,19 +833,19 @@ static void def_cmp_hue_saturation(StructRNA *srna)
RNA_def_struct_sdna_from(srna, "NodeHueSat", "storage");
- prop = RNA_def_property(srna, "hue", PROP_FLOAT, PROP_NONE);
+ prop = RNA_def_property(srna, "color_hue", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "hue");
RNA_def_property_range(prop, 0.0f, 1.0f);
RNA_def_property_ui_text(prop, "Hue", "");
RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
- prop = RNA_def_property(srna, "sat", PROP_FLOAT, PROP_NONE);
+ prop = RNA_def_property(srna, "color_saturation", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "sat");
RNA_def_property_range(prop, 0.0f, 2.0f);
RNA_def_property_ui_text(prop, "Saturation", "");
RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
- prop = RNA_def_property(srna, "val", PROP_FLOAT, PROP_NONE);
+ prop = RNA_def_property(srna, "color_value", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "val");
RNA_def_property_range(prop, 0.0f, 2.0f);
RNA_def_property_ui_text(prop, "Value", "");
@@ -851,19 +869,19 @@ static void def_cmp_blur(StructRNA *srna)
RNA_def_struct_sdna_from(srna, "NodeBlurData", "storage");
- prop = RNA_def_property(srna, "sizex", PROP_INT, PROP_NONE);
+ prop = RNA_def_property(srna, "size_x", PROP_INT, PROP_NONE);
RNA_def_property_int_sdna(prop, NULL, "sizex");
- RNA_def_property_range(prop, 0, 256);
+ RNA_def_property_range(prop, 0, 2048);
RNA_def_property_ui_text(prop, "Size X", "");
RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
- prop = RNA_def_property(srna, "sizey", PROP_INT, PROP_NONE);
+ prop = RNA_def_property(srna, "size_y", PROP_INT, PROP_NONE);
RNA_def_property_int_sdna(prop, NULL, "sizey");
- RNA_def_property_range(prop, 0, 256);
+ RNA_def_property_range(prop, 0, 2048);
RNA_def_property_ui_text(prop, "Size Y", "");
RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
- prop = RNA_def_property(srna, "relative", PROP_BOOLEAN, PROP_NONE);
+ prop = RNA_def_property(srna, "use_relative", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "relative", 1);
RNA_def_property_ui_text(prop, "Relative", "Use relative (percent) values to define blur radius");
RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
@@ -892,12 +910,12 @@ static void def_cmp_blur(StructRNA *srna)
RNA_def_property_ui_text(prop, "Filter Type", "");
RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
- prop = RNA_def_property(srna, "bokeh", PROP_BOOLEAN, PROP_NONE);
+ prop = RNA_def_property(srna, "use_bokeh", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "bokeh", 1);
RNA_def_property_ui_text(prop, "Bokeh", "Uses circular filter (slower)");
RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
- prop = RNA_def_property(srna, "gamma", PROP_BOOLEAN, PROP_NONE);
+ prop = RNA_def_property(srna, "use_gamma_correction", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "gamma", 1);
RNA_def_property_ui_text(prop, "Gamma", "Applies filter on gamma corrected values");
RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
@@ -968,25 +986,29 @@ static void def_cmp_vector_blur(StructRNA *srna)
prop = RNA_def_property(srna, "samples", PROP_INT, PROP_NONE);
RNA_def_property_int_sdna(prop, NULL, "samples");
+ RNA_def_property_range(prop, 1, 256);
RNA_def_property_ui_text(prop, "Samples", "");
RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
- prop = RNA_def_property(srna, "min_speed", PROP_INT, PROP_NONE);
+ prop = RNA_def_property(srna, "speed_min", PROP_INT, PROP_NONE);
RNA_def_property_int_sdna(prop, NULL, "minspeed");
+ RNA_def_property_range(prop, 0, 1024);
RNA_def_property_ui_text(prop, "Min Speed", "Minimum speed for a pixel to be blurred; used to separate background from foreground");
RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
- prop = RNA_def_property(srna, "max_speed", PROP_INT, PROP_NONE);
+ prop = RNA_def_property(srna, "speed_max", PROP_INT, PROP_NONE);
RNA_def_property_int_sdna(prop, NULL, "maxspeed");
+ RNA_def_property_range(prop, 0, 1024);
RNA_def_property_ui_text(prop, "Max Speed", "Maximum speed, or zero for none");
RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
prop = RNA_def_property(srna, "factor", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "fac");
+ RNA_def_property_range(prop, 0.0f, 2.0f);
RNA_def_property_ui_text(prop, "Blur Factor", "Scaling factor for motion vectors; actually 'shutter speed' in frames");
RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
- prop = RNA_def_property(srna, "curved", PROP_BOOLEAN, PROP_NONE);
+ prop = RNA_def_property(srna, "use_curved", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "curved", 1);
RNA_def_property_ui_text(prop, "Curved", "Interpolate between frames in a bezier curve, rather than linearly");
RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
@@ -1033,30 +1055,30 @@ static void def_cmp_image(StructRNA *srna)
RNA_def_struct_sdna_from(srna, "ImageUser", "storage");
- prop = RNA_def_property(srna, "frames", PROP_INT, PROP_NONE);
+ prop = RNA_def_property(srna, "frame_duration", PROP_INT, PROP_NONE);
RNA_def_property_int_sdna(prop, NULL, "frames");
- RNA_def_property_range(prop, 1, MAXFRAMEF);
+ RNA_def_property_range(prop, 0, MAXFRAMEF);
RNA_def_property_ui_text(prop, "Frames", "Number of images used in animation");
RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
- prop = RNA_def_property(srna, "start", PROP_INT, PROP_NONE);
+ prop = RNA_def_property(srna, "frame_start", PROP_INT, PROP_NONE);
RNA_def_property_int_sdna(prop, NULL, "sfra");
- RNA_def_property_range(prop, 1, MAXFRAMEF);
+ RNA_def_property_range(prop, MINAFRAMEF, MAXFRAMEF);
RNA_def_property_ui_text(prop, "Start Frame", "");
RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
- prop = RNA_def_property(srna, "offset", PROP_INT, PROP_NONE);
+ prop = RNA_def_property(srna, "frame_offset", PROP_INT, PROP_NONE);
RNA_def_property_int_sdna(prop, NULL, "offset");
RNA_def_property_range(prop, MINAFRAMEF, MAXFRAMEF);
RNA_def_property_ui_text(prop, "Offset", "Offsets the number of the frame to use in the animation");
RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
- prop = RNA_def_property(srna, "cyclic", PROP_BOOLEAN, PROP_NONE);
+ prop = RNA_def_property(srna, "use_cyclic", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "cycl", 1);
RNA_def_property_ui_text(prop, "Cyclic", "");
RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
- prop = RNA_def_property(srna, "auto_refresh", PROP_BOOLEAN, PROP_NONE);
+ prop = RNA_def_property(srna, "use_auto_refresh", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", IMA_ANIM_ALWAYS);
RNA_def_property_ui_text(prop, "Auto-Refresh", "");
RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
@@ -1126,7 +1148,7 @@ static void def_cmp_output_file(StructRNA *srna)
RNA_def_property_ui_text(prop, "Image Type", "");
RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
- prop = RNA_def_property(srna, "exr_half", PROP_BOOLEAN, PROP_NONE);
+ prop = RNA_def_property(srna, "use_exr_half", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "subimtype", R_OPENEXR_HALF);
RNA_def_property_ui_text(prop, "Half", "");
RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
@@ -1142,16 +1164,17 @@ static void def_cmp_output_file(StructRNA *srna)
RNA_def_property_range(prop, 1, 100);
RNA_def_property_ui_text(prop, "Quality", "");
RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
-
- // TODO: should these be limited to the extents of the each other so that no cross-over occurs?
+
prop = RNA_def_property(srna, "frame_start", PROP_INT, PROP_NONE);
RNA_def_property_int_sdna(prop, NULL, "sfra");
+ RNA_def_property_int_funcs(prop, NULL, "rna_Image_start_frame_set", NULL);
RNA_def_property_range(prop, MINFRAMEF, MAXFRAMEF);
RNA_def_property_ui_text(prop, "Start Frame", "");
RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
prop = RNA_def_property(srna, "frame_end", PROP_INT, PROP_NONE);
RNA_def_property_int_sdna(prop, NULL, "efra");
+ RNA_def_property_int_funcs(prop, NULL, "rna_Image_end_frame_set", NULL);
RNA_def_property_range(prop, MINFRAMEF, MAXFRAMEF);
RNA_def_property_ui_text(prop, "End Frame", "");
RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
@@ -1196,7 +1219,7 @@ static void def_cmp_rotate(StructRNA *srna)
{2, "BICUBIC", 0, "Bicubic", ""},
{0, NULL, 0, NULL, NULL}};
- prop = RNA_def_property(srna, "filter", PROP_ENUM, PROP_NONE);
+ prop = RNA_def_property(srna, "filter_type", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "custom1");
RNA_def_property_enum_items(prop, rotate_items);
RNA_def_property_ui_text(prop, "Filter", "Method to use to filter rotation");
@@ -1230,19 +1253,19 @@ static void def_cmp_color_matte(StructRNA *srna)
RNA_def_struct_sdna_from(srna, "NodeChroma", "storage");
- prop = RNA_def_property(srna, "h", PROP_FLOAT, PROP_NONE);
+ prop = RNA_def_property(srna, "color_hue", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "t1");
RNA_def_property_range(prop, 0.0f, 1.0f);
RNA_def_property_ui_text(prop, "H", "Hue tolerance for colors to be considered a keying color");
RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
- prop = RNA_def_property(srna, "s", PROP_FLOAT, PROP_NONE);
+ prop = RNA_def_property(srna, "color_saturation", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "t2");
RNA_def_property_range(prop, 0.0f, 1.0f);
RNA_def_property_ui_text(prop, "S", "Saturation Tolerance for the color");
RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
- prop = RNA_def_property(srna, "v", PROP_FLOAT, PROP_NONE);
+ prop = RNA_def_property(srna, "color_value", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "t3");
RNA_def_property_range(prop, 0.0f, 1.0f);
RNA_def_property_ui_text(prop, "V", "Value Tolerance for the color");
@@ -1297,7 +1320,7 @@ static void def_cmp_color_spill(StructRNA *srna)
RNA_def_property_ui_text(prop, "Channel", "");
RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
- prop = RNA_def_property(srna, "algorithm", PROP_ENUM, PROP_NONE);
+ prop = RNA_def_property(srna, "limit_method", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "custom2");
RNA_def_property_enum_items(prop, algorithm_items);
RNA_def_property_ui_text(prop, "Algorithm", "");
@@ -1317,7 +1340,7 @@ static void def_cmp_color_spill(StructRNA *srna)
RNA_def_property_ui_text(prop, "Ratio", "Scale limit by value");
RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
- prop = RNA_def_property(srna, "unspill", PROP_BOOLEAN, PROP_NONE);
+ prop = RNA_def_property(srna, "use_unspill", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "unspill", 0);
RNA_def_property_ui_text(prop, "Unspill", "Compensate all channels (diffenrently) by hand");
RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
@@ -1347,14 +1370,14 @@ static void def_cmp_luma_matte(StructRNA *srna)
RNA_def_struct_sdna_from(srna, "NodeChroma", "storage");
- prop = RNA_def_property(srna, "high", PROP_FLOAT, PROP_NONE);
+ prop = RNA_def_property(srna, "limit_max", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "t1");
RNA_def_property_float_funcs(prop, NULL, "rna_Matte_t1_set", NULL);
RNA_def_property_range(prop, 0.0f, 1.0f);
RNA_def_property_ui_text(prop, "High", "Values higher than this setting are 100% opaque");
RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
- prop = RNA_def_property(srna, "low", PROP_FLOAT, PROP_NONE);
+ prop = RNA_def_property(srna, "limit_min", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "t2");
RNA_def_property_float_funcs(prop, NULL, "rna_Matte_t2_set", NULL);
RNA_def_property_range(prop, 0.0f, 1.0f);
@@ -1368,14 +1391,14 @@ static void def_cmp_chroma_matte(StructRNA *srna)
RNA_def_struct_sdna_from(srna, "NodeChroma", "storage");
- prop = RNA_def_property(srna, "acceptance", PROP_FLOAT, PROP_NONE);
+ prop = RNA_def_property(srna, "tolerance", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "t1");
RNA_def_property_float_funcs(prop, NULL, "rna_Matte_t1_set", NULL);
RNA_def_property_range(prop, 1.0f, 80.0f);
RNA_def_property_ui_text(prop, "Acceptance", "Tolerance for a color to be considered a keying color");
RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
- prop = RNA_def_property(srna, "cutoff", PROP_FLOAT, PROP_NONE);
+ prop = RNA_def_property(srna, "threshold", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "t2");
RNA_def_property_float_funcs(prop, NULL, "rna_Matte_t2_set", NULL);
RNA_def_property_range(prop, 0.0f, 30.0f);
@@ -1423,7 +1446,7 @@ static void def_cmp_channel_matte(StructRNA *srna)
RNA_def_property_ui_text(prop, "Color Space", "");
RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
- prop= RNA_def_property(srna, "channel", PROP_ENUM, PROP_NONE);
+ prop= RNA_def_property(srna, "matte_channel", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "custom2");
RNA_def_property_enum_items(prop, prop_tri_channel_items);
RNA_def_property_enum_funcs(prop, NULL, NULL, "rna_Node_channel_itemf");
@@ -1432,7 +1455,7 @@ static void def_cmp_channel_matte(StructRNA *srna)
RNA_def_struct_sdna_from(srna, "NodeChroma", "storage");
- prop = RNA_def_property(srna, "algorithm", PROP_ENUM, PROP_NONE);
+ prop = RNA_def_property(srna, "limit_method", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "algorithm");
RNA_def_property_enum_items(prop, algorithm_items);
RNA_def_property_ui_text(prop, "Algorithm", "Algorithm to use to limit channel");
@@ -1445,14 +1468,14 @@ static void def_cmp_channel_matte(StructRNA *srna)
RNA_def_property_ui_text(prop, "Limit Channel", "Limit by this channels value");
RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
- prop = RNA_def_property(srna, "high", PROP_FLOAT, PROP_NONE);
+ prop = RNA_def_property(srna, "limit_max", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "t1");
RNA_def_property_float_funcs(prop, NULL, "rna_Matte_t1_set", NULL);
RNA_def_property_range(prop, 0.0f, 1.0f);
RNA_def_property_ui_text(prop, "High", "Values higher than this setting are 100% opaque");
RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
- prop = RNA_def_property(srna, "low", PROP_FLOAT, PROP_NONE);
+ prop = RNA_def_property(srna, "limit_min", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "t2");
RNA_def_property_float_funcs(prop, NULL, "rna_Matte_t2_set", NULL);
RNA_def_property_range(prop, 0.0f, 1.0f);
@@ -1544,7 +1567,7 @@ static void def_cmp_defocus(StructRNA *srna)
RNA_def_property_ui_text(prop, "Angle", "Bokeh shape rotation offset in degrees");
RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
- prop = RNA_def_property(srna, "gamma_correction", PROP_BOOLEAN, PROP_NONE);
+ prop = RNA_def_property(srna, "use_gamma_correction", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "gamco", 1);
RNA_def_property_ui_text(prop, "Gamma Correction", "Enable gamma correction before and after main process");
RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
@@ -1556,7 +1579,7 @@ static void def_cmp_defocus(StructRNA *srna)
RNA_def_property_ui_text(prop, "fStop", "Amount of focal blur, 128=infinity=perfect focus, half the value doubles the blur radius");
RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
- prop = RNA_def_property(srna, "max_blur", PROP_FLOAT, PROP_NONE);
+ prop = RNA_def_property(srna, "blur_max", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "maxblur");
RNA_def_property_range(prop, 0.0f, 10000.0f);
RNA_def_property_ui_text(prop, "Max Blur", "blur limit, maximum CoC radius, 0=no limit");
@@ -1568,7 +1591,7 @@ static void def_cmp_defocus(StructRNA *srna)
RNA_def_property_ui_text(prop, "Threshold", "CoC radius threshold, prevents background bleed on in-focus midground, 0=off");
RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
- prop = RNA_def_property(srna, "preview", PROP_BOOLEAN, PROP_NONE);
+ prop = RNA_def_property(srna, "use_preview", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "preview", 1);
RNA_def_property_ui_text(prop, "Preview", "Enable sampling mode, useful for preview when using low samplecounts");
RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
@@ -1595,12 +1618,12 @@ static void def_cmp_invert(StructRNA *srna)
{
PropertyRNA *prop;
- prop = RNA_def_property(srna, "rgb", PROP_BOOLEAN, PROP_NONE);
+ prop = RNA_def_property(srna, "invert_rgb", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "custom1", CMP_CHAN_RGB);
RNA_def_property_ui_text(prop, "RGB", "");
RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
- prop = RNA_def_property(srna, "alpha", PROP_BOOLEAN, PROP_NONE);
+ prop = RNA_def_property(srna, "invert_alpha", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "custom1", CMP_CHAN_A);
RNA_def_property_ui_text(prop, "Alpha", "");
RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
@@ -1610,36 +1633,65 @@ static void def_cmp_crop(StructRNA *srna)
{
PropertyRNA *prop;
- prop = RNA_def_property(srna, "crop_size", PROP_BOOLEAN, PROP_NONE);
+ prop = RNA_def_property(srna, "use_crop_size", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "custom1", 1);
RNA_def_property_ui_text(prop, "Crop Image Size", "Whether to crop the size of the input image");
RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
-
+
+ prop = RNA_def_property(srna, "relative", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_sdna(prop, NULL, "custom2", 1);
+ RNA_def_property_ui_text(prop, "Relative", "Use relative values to crop image");
+ RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
+
RNA_def_struct_sdna_from(srna, "NodeTwoXYs", "storage");
- prop = RNA_def_property(srna, "x1", PROP_INT, PROP_NONE);
+ prop = RNA_def_property(srna, "min_x", PROP_INT, PROP_NONE);
RNA_def_property_int_sdna(prop, NULL, "x1");
RNA_def_property_range(prop, 0, 10000);
RNA_def_property_ui_text(prop, "X1", "");
RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
- prop = RNA_def_property(srna, "x2", PROP_INT, PROP_NONE);
+ prop = RNA_def_property(srna, "max_x", PROP_INT, PROP_NONE);
RNA_def_property_int_sdna(prop, NULL, "x2");
RNA_def_property_range(prop, 0, 10000);
RNA_def_property_ui_text(prop, "X2", "");
RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
- prop = RNA_def_property(srna, "y1", PROP_INT, PROP_NONE);
+ prop = RNA_def_property(srna, "min_y", PROP_INT, PROP_NONE);
RNA_def_property_int_sdna(prop, NULL, "y1");
RNA_def_property_range(prop, 0, 10000);
RNA_def_property_ui_text(prop, "Y1", "");
RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
- prop = RNA_def_property(srna, "y2", PROP_INT, PROP_NONE);
+ prop = RNA_def_property(srna, "max_y", PROP_INT, PROP_NONE);
RNA_def_property_int_sdna(prop, NULL, "y2");
RNA_def_property_range(prop, 0, 10000);
RNA_def_property_ui_text(prop, "Y2", "");
RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
+
+ prop = RNA_def_property(srna, "rel_min_x", PROP_FLOAT, PROP_NONE);
+ RNA_def_property_float_sdna(prop, NULL, "fac_x1");
+ RNA_def_property_range(prop, 0.0, 1.0);
+ RNA_def_property_ui_text(prop, "X1", "");
+ RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
+
+ prop = RNA_def_property(srna, "rel_max_x", PROP_FLOAT, PROP_NONE);
+ RNA_def_property_float_sdna(prop, NULL, "fac_x2");
+ RNA_def_property_range(prop, 0.0, 1.0);
+ RNA_def_property_ui_text(prop, "X2", "");
+ RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
+
+ prop = RNA_def_property(srna, "rel_min_y", PROP_FLOAT, PROP_NONE);
+ RNA_def_property_float_sdna(prop, NULL, "fac_y1");
+ RNA_def_property_range(prop, 0.0, 1.0);
+ RNA_def_property_ui_text(prop, "Y1", "");
+ RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
+
+ prop = RNA_def_property(srna, "rel_max_y", PROP_FLOAT, PROP_NONE);
+ RNA_def_property_float_sdna(prop, NULL, "fac_y2");
+ RNA_def_property_range(prop, 0.0, 1.0);
+ RNA_def_property_ui_text(prop, "Y2", "");
+ RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
}
static void def_cmp_dblur(StructRNA *srna)
@@ -1654,7 +1706,7 @@ static void def_cmp_dblur(StructRNA *srna)
RNA_def_property_ui_text(prop, "Iterations", "");
RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
- prop = RNA_def_property(srna, "wrap", PROP_BOOLEAN, PROP_NONE);
+ prop = RNA_def_property(srna, "use_wrap", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "wrap", 1);
RNA_def_property_ui_text(prop, "Wrap", "");
RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
@@ -1811,7 +1863,7 @@ static void def_cmp_glare(StructRNA *srna)
RNA_def_property_ui_text(prop, "Fade", "Streak fade-out factor");
RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
- prop = RNA_def_property(srna, "rotate_45", PROP_BOOLEAN, PROP_NONE);
+ prop = RNA_def_property(srna, "use_rotate_45", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "angle", 1);
RNA_def_property_ui_text(prop, "Rotate 45", "Simple star filter: add 45 degree rotation offset");
RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
@@ -1891,17 +1943,17 @@ static void def_cmp_lensdist(StructRNA *srna)
RNA_def_struct_sdna_from(srna, "NodeLensDist", "storage");
- prop = RNA_def_property(srna, "projector", PROP_BOOLEAN, PROP_NONE);
+ prop = RNA_def_property(srna, "use_projector", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "proj", 1);
RNA_def_property_ui_text(prop, "Projector", "Enable/disable projector mode. Effect is applied in horizontal direction only");
RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
- prop = RNA_def_property(srna, "jitter", PROP_BOOLEAN, PROP_NONE);
+ prop = RNA_def_property(srna, "use_jitter", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "jit", 1);
RNA_def_property_ui_text(prop, "Jitter", "Enable/disable jittering; faster, but also noisier");
RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
- prop = RNA_def_property(srna, "fit", PROP_BOOLEAN, PROP_NONE);
+ prop = RNA_def_property(srna, "use_fit", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "fit", 1);
RNA_def_property_ui_text(prop, "Fit", "For positive distortion factor only: scale image such that black areas are not visible");
RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
@@ -1917,7 +1969,7 @@ static void def_cmp_colorbalance(StructRNA *srna)
{1, "OFFSET_POWER_SLOPE", 0, "Offset/Power/Slope (ASC-CDL)", "ASC-CDL standard color correction"},
{0, NULL, 0, NULL, NULL}};
- prop = RNA_def_property(srna, "correction_formula", PROP_ENUM, PROP_NONE);
+ prop = RNA_def_property(srna, "correction_method", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "custom1");
RNA_def_property_enum_items(prop, type_items);
RNA_def_property_ui_text(prop, "Correction Formula", "");
@@ -1994,7 +2046,7 @@ static void def_tex_output(StructRNA *srna)
RNA_def_struct_sdna_from(srna, "TexNodeOutput", "storage");
- prop = RNA_def_property(srna, "output_name", PROP_STRING, PROP_NONE);
+ prop = RNA_def_property(srna, "filepath", PROP_STRING, PROP_NONE);
RNA_def_property_string_sdna(prop, NULL, "name");
RNA_def_property_ui_text(prop, "Output Name", "");
RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update");
diff --git a/source/blender/makesrna/intern/rna_object.c b/source/blender/makesrna/intern/rna_object.c
index 45ee6490d4f..3938f4c1538 100644
--- a/source/blender/makesrna/intern/rna_object.c
+++ b/source/blender/makesrna/intern/rna_object.c
@@ -41,6 +41,9 @@
#include "DNA_property_types.h"
#include "DNA_scene_types.h"
+#include "BLO_sys_types.h" /* needed for intptr_t used in ED_mesh.h */
+#include "ED_mesh.h"
+
#include "WM_api.h"
#include "WM_types.h"
@@ -73,6 +76,7 @@ static EnumPropertyItem collision_bounds_items[] = {
{OB_BOUND_CONE, "CONE", 0, "Cone", ""},
{OB_BOUND_POLYT, "CONVEX_HULL", 0, "Convex Hull", ""},
{OB_BOUND_POLYH, "TRIANGLE_MESH", 0, "Triangle Mesh", ""},
+ {OB_BOUND_CAPSULE, "CAPSULE", 0, "Capsule", ""},
//{OB_DYN_MESH, "DYNAMIC_MESH", 0, "Dynamic Mesh", ""},
{0, NULL, 0, NULL, NULL}};
@@ -122,12 +126,15 @@ EnumPropertyItem object_type_curve_items[] = {
#include "BKE_mesh.h"
#include "BKE_particle.h"
#include "BKE_scene.h"
+#include "BKE_deform.h"
#include "BLI_editVert.h" /* for EditMesh->mat_nr */
#include "ED_mesh.h"
#include "ED_object.h"
#include "ED_particle.h"
+#include "ED_curve.h"
+#include "ED_lattice.h"
static void rna_Object_internal_update(Main *bmain, Scene *scene, PointerRNA *ptr)
{
@@ -182,12 +189,24 @@ void rna_Object_internal_update_data(Main *bmain, Scene *scene, PointerRNA *ptr)
void rna_Object_active_shape_update(Main *bmain, Scene *scene, PointerRNA *ptr)
{
Object *ob= ptr->id.data;
- int editmode= (scene->obedit == ob && ob->type == OB_MESH);
- if(editmode) {
+ if(scene->obedit == ob) {
/* exit/enter editmode to get new shape */
- load_editMesh(scene, ob);
- make_editMesh(scene, ob);
+ switch(ob->type) {
+ case OB_MESH:
+ load_editMesh(scene, ob);
+ make_editMesh(scene, ob);
+ break;
+ case OB_CURVE:
+ case OB_SURF:
+ load_editNurb(ob);
+ make_editNurb(ob);
+ break;
+ case OB_LATTICE:
+ load_editLatt(ob);
+ make_editLatt(ob);
+ break;
+ }
}
rna_Object_internal_update_data(bmain, scene, ptr);
@@ -197,6 +216,7 @@ static void rna_Object_dependency_update(Main *bmain, Scene *scene, PointerRNA *
{
DAG_id_flush_update(ptr->id.data, OB_RECALC_OB);
DAG_scene_sort(bmain, scene);
+ WM_main_add_notifier(NC_OBJECT|ND_PARENT, ptr->id.data);
}
/* when changing the selection flag the scene needs updating */
@@ -239,6 +259,8 @@ 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);
}
static void rna_Base_layer_update(Main *bmain, Scene *scene, PointerRNA *ptr)
@@ -248,6 +270,8 @@ static void rna_Base_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);
}
static int rna_Object_data_editable(PointerRNA *ptr)
@@ -362,6 +386,7 @@ static EnumPropertyItem *rna_Object_collision_bounds_itemf(bContext *C, PointerR
RNA_enum_items_add_value(&item, &totitem, collision_bounds_items, OB_BOUND_CYLINDER);
RNA_enum_items_add_value(&item, &totitem, collision_bounds_items, OB_BOUND_SPHERE);
RNA_enum_items_add_value(&item, &totitem, collision_bounds_items, OB_BOUND_BOX);
+ RNA_enum_items_add_value(&item, &totitem, collision_bounds_items, OB_BOUND_CAPSULE);
}
RNA_enum_item_end(&item, &totitem);
@@ -434,32 +459,19 @@ int rna_object_vgroup_name_index_length(PointerRNA *ptr, int index)
void rna_object_vgroup_name_index_set(PointerRNA *ptr, const char *value, short *index)
{
Object *ob= (Object*)ptr->id.data;
- bDeformGroup *dg;
- int a;
-
- for(a=1, dg=ob->defbase.first; dg; dg=dg->next, a++) {
- if(strcmp(dg->name, value) == 0) {
- *index= a;
- return;
- }
- }
-
- *index= 0;
+ *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;
- bDeformGroup *dg;
-
- for(dg=ob->defbase.first; dg; dg=dg->next) {
- if(strcmp(dg->name, value) == 0) {
- BLI_strncpy(result, value, maxlen);
- return;
- }
+ bDeformGroup *dg= defgroup_find_name(ob, value);
+ if(dg) {
+ BLI_strncpy(result, value, maxlen);
+ return;
}
- BLI_strncpy(result, "", maxlen);
+ result[0]= '\0';
}
void rna_object_uvlayer_name_set(PointerRNA *ptr, const char *value, char *result, int maxlen)
@@ -1018,21 +1030,22 @@ static void rna_Object_active_constraint_set(PointerRNA *ptr, PointerRNA value)
constraints_set_active(&ob->constraints, (bConstraint *)value.data);
}
-static bConstraint *rna_Object_constraint_new(Object *object, int type)
+static bConstraint *rna_Object_constraints_new(Object *object, int type)
{
WM_main_add_notifier(NC_OBJECT|ND_CONSTRAINT|NA_ADDED, object);
return add_ob_constraint(object, NULL, type);
}
-static int rna_Object_constraint_remove(Object *object, int index)
+static void rna_Object_constraints_remove(Object *object, ReportList *reports, bConstraint *con)
{
- int ok = remove_constraint_index(&object->constraints, index);
- if(ok) {
- ED_object_constraint_set_active(object, NULL);
- WM_main_add_notifier(NC_OBJECT|ND_CONSTRAINT, object);
+ 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);
+ return;
}
- return ok;
+ remove_constraint(&object->constraints, con);
+ ED_object_constraint_set_active(object, NULL);
+ WM_main_add_notifier(NC_OBJECT|ND_CONSTRAINT, object);
}
static ModifierData *rna_Object_modifier_new(Object *object, bContext *C, ReportList *reports, char *name, int type)
@@ -1058,6 +1071,12 @@ static void rna_Object_boundbox_get(PointerRNA *ptr, float *values)
}
+static void rna_Object_add_vertex_to_group(Object *ob, int index_len, int *index, bDeformGroup *def, float weight, int assignmode)
+{
+ while(index_len--)
+ ED_vgroup_vert_add(ob, def, *index++, weight, assignmode);
+}
+
/* generic poll functions */
int rna_Lattice_object_poll(PointerRNA *ptr, PointerRNA value)
{
@@ -1207,11 +1226,11 @@ static void rna_def_object_game_settings(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Physics Type", "Selects the type of physical representation");
RNA_def_property_update(prop, NC_LOGIC, NULL);
- prop= RNA_def_property(srna, "actor", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_actor", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "gameflag", OB_ACTOR);
RNA_def_property_ui_text(prop, "Actor", "Object is detected by the Near and Radar sensor");
- prop= RNA_def_property(srna, "ghost", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_ghost", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "gameflag", OB_GHOST);
RNA_def_property_ui_text(prop, "Ghost", "Object does not restitute collisions, like a ghost");
@@ -1225,7 +1244,7 @@ static void rna_def_object_game_settings(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Radius", "Radius of bounding sphere and material physics");
RNA_def_property_update(prop, NC_OBJECT|ND_DRAW, NULL);
- prop= RNA_def_property(srna, "no_sleeping", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_sleep", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "gameflag", OB_COLLISION_RESPONSE);
RNA_def_property_ui_text(prop, "No Sleeping", "Disable auto (de)activation in physics simulation");
@@ -1239,40 +1258,40 @@ static void rna_def_object_game_settings(BlenderRNA *brna)
RNA_def_property_range(prop, 0.0, 1.0);
RNA_def_property_ui_text(prop, "Rotation Damping", "General rotation damping");
- prop= RNA_def_property(srna, "minimum_velocity", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "velocity_min", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "min_vel");
RNA_def_property_range(prop, 0.0, 1000.0);
RNA_def_property_ui_text(prop, "Velocity Min", "Clamp velocity to this minimum speed (except when totally still)");
- prop= RNA_def_property(srna, "maximum_velocity", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "velocity_max", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "max_vel");
RNA_def_property_range(prop, 0.0, 1000.0);
RNA_def_property_ui_text(prop, "Velocity Max", "Clamp velocity to this maximum speed");
/* lock position */
- prop= RNA_def_property(srna, "lock_x_axis", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "lock_location_x", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "gameflag2", OB_LOCK_RIGID_BODY_X_AXIS);
RNA_def_property_ui_text(prop, "Lock X Axis", "Disable simulation of linear motion along the X axis");
- prop= RNA_def_property(srna, "lock_y_axis", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "lock_location_y", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "gameflag2", OB_LOCK_RIGID_BODY_Y_AXIS);
RNA_def_property_ui_text(prop, "Lock Y Axis", "Disable simulation of linear motion along the Y axis");
- prop= RNA_def_property(srna, "lock_z_axis", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "lock_location_z", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "gameflag2", OB_LOCK_RIGID_BODY_Z_AXIS);
RNA_def_property_ui_text(prop, "Lock Z Axis", "Disable simulation of linear motion along the Z axis");
/* lock rotation */
- prop= RNA_def_property(srna, "lock_x_rot_axis", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "lock_rotation_x", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "gameflag2", OB_LOCK_RIGID_BODY_X_ROT_AXIS);
RNA_def_property_ui_text(prop, "Lock X Rotation Axis", "Disable simulation of angular motion along the X axis");
- prop= RNA_def_property(srna, "lock_y_rot_axis", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "lock_rotation_y", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "gameflag2", OB_LOCK_RIGID_BODY_Y_ROT_AXIS);
RNA_def_property_ui_text(prop, "Lock Y Rotation Axis", "Disable simulation of angular motion along the Y axis");
- prop= RNA_def_property(srna, "lock_z_rot_axis", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "lock_rotation_z", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "gameflag2", OB_LOCK_RIGID_BODY_Z_ROT_AXIS);
RNA_def_property_ui_text(prop, "Lock Z Rotation Axis", "Disable simulation of angular motion along the Z axis");
@@ -1282,11 +1301,11 @@ static void rna_def_object_game_settings(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Lock Z Rotation Axis", "Disable simulation of angular motion along the Z axis");
- prop= RNA_def_property(srna, "material_physics", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_material_physics", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "gameflag", OB_DO_FH);
RNA_def_property_ui_text(prop, "Use Material Physics", "Use physics settings in materials");
- prop= RNA_def_property(srna, "rotate_from_normal", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_rotate_from_normal", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "gameflag", OB_ROT_FH);
RNA_def_property_ui_text(prop, "Rotate From Normal", "Use face normal to rotate object, so that it points away from the surface");
@@ -1295,7 +1314,7 @@ static void rna_def_object_game_settings(BlenderRNA *brna)
RNA_def_property_range(prop, 0.0, 1.0);
RNA_def_property_ui_text(prop, "Form Factor", "Form factor scales the inertia tensor");
- prop= RNA_def_property(srna, "anisotropic_friction", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_anisotropic_friction", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "gameflag", OB_ANISOTROPIC_FRICTION);
RNA_def_property_ui_text(prop, "Anisotropic Friction", "Enable anisotropic friction");
@@ -1308,14 +1327,14 @@ static void rna_def_object_game_settings(BlenderRNA *brna)
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");
- prop= RNA_def_property(srna, "collision_bounds", PROP_ENUM, PROP_NONE);
+ prop= RNA_def_property(srna, "collision_bounds_type", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "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", "Selects the collision type");
RNA_def_property_update(prop, NC_OBJECT|ND_DRAW, NULL);
- prop= RNA_def_property(srna, "collision_compound", PROP_BOOLEAN, PROP_NONE);
+ 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");
@@ -1339,29 +1358,29 @@ static void rna_def_object_game_settings(BlenderRNA *brna)
/* state */
- prop= RNA_def_property(srna, "visible_state", PROP_BOOLEAN, PROP_LAYER_MEMBER);
+ prop= RNA_def_property(srna, "states_visible", PROP_BOOLEAN, PROP_LAYER_MEMBER);
RNA_def_property_boolean_sdna(prop, NULL, "state", 1);
RNA_def_property_array(prop, OB_MAX_STATES);
RNA_def_property_ui_text(prop, "State", "State determining which controllers are displayed");
RNA_def_property_boolean_funcs(prop, "rna_GameObjectSettings_state_get", "rna_GameObjectSettings_state_set");
- prop= RNA_def_property(srna, "used_state", PROP_BOOLEAN, PROP_LAYER_MEMBER);
+ prop= RNA_def_property(srna, "used_states", PROP_BOOLEAN, PROP_LAYER_MEMBER);
RNA_def_property_array(prop, OB_MAX_STATES);
RNA_def_property_ui_text(prop, "Used State", "States which are being used by controllers");
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
RNA_def_property_boolean_funcs(prop, "rna_GameObjectSettings_used_state_get", NULL);
- prop= RNA_def_property(srna, "initial_state", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "states_initial", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "init_state", 1);
RNA_def_property_array(prop, OB_MAX_STATES);
RNA_def_property_ui_text(prop, "Initial State", "Initial state when the game starts");
- prop= RNA_def_property(srna, "debug_state", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_debug_state", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "scaflag", OB_DEBUGSTATE);
RNA_def_property_ui_text(prop, "Debug State", "Print state debug info in the game engine");
RNA_def_property_ui_icon(prop, ICON_INFO, 0);
- prop= RNA_def_property(srna, "all_states", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_all_states", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "scaflag", OB_ALLSTATE);
RNA_def_property_ui_text(prop, "All", "Set all state bits");
@@ -1394,26 +1413,24 @@ static void rna_def_object_constraints(BlenderRNA *brna, PropertyRNA *cprop)
/* Constraint collection */
- func= RNA_def_function(srna, "new", "rna_Object_constraint_new");
+ func= RNA_def_function(srna, "new", "rna_Object_constraints_new");
RNA_def_function_ui_description(func, "Add a new constraint to this object");
- /* return type */
- parm= RNA_def_pointer(func, "constraint", "Constraint", "", "New constraint.");
- RNA_def_function_return(func, parm);
/* object to add */
parm= RNA_def_enum(func, "type", constraint_type_items, 1, "", "Constraint type to add.");
RNA_def_property_flag(parm, PROP_REQUIRED);
-
- func= RNA_def_function(srna, "remove", "rna_Object_constraint_remove");
- RNA_def_function_ui_description(func, "Remove a constraint from this object.");
/* return type */
- parm= RNA_def_boolean(func, "success", 0, "Success", "Removed the constraint successfully.");
+ parm= RNA_def_pointer(func, "constraint", "Constraint", "", "New constraint.");
RNA_def_function_return(func, parm);
- /* object to add */
- parm= RNA_def_int(func, "index", 0, 0, INT_MAX, "Index", "", 0, INT_MAX);
- RNA_def_property_flag(parm, PROP_REQUIRED);
+
+ func= RNA_def_function(srna, "remove", "rna_Object_constraints_remove");
+ RNA_def_function_ui_description(func, "Remove a constraint from this object.");
+ 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);
}
-/* armature.bones.* */
+/* object.modifiers */
static void rna_def_object_modifiers(BlenderRNA *brna, PropertyRNA *cprop)
{
StructRNA *srna;
@@ -1458,9 +1475,95 @@ static void rna_def_object_modifiers(BlenderRNA *brna, PropertyRNA *cprop)
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);
+}
+
+/* object.particle_systems */
+static void rna_def_object_particle_systems(BlenderRNA *brna, PropertyRNA *cprop)
+{
+ StructRNA *srna;
+
+ PropertyRNA *prop;
+
+ // FunctionRNA *func;
+ // PropertyRNA *parm;
+
+ RNA_def_property_srna(cprop, "ParticleSystems");
+ srna= RNA_def_struct(brna, "ParticleSystems", NULL);
+ RNA_def_struct_sdna(srna, "Object");
+ RNA_def_struct_ui_text(srna, "Particle Systems", "Collection of particle systems");
+
+ prop= RNA_def_property(srna, "active", PROP_POINTER, PROP_NONE);
+ 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);
+
+ prop= RNA_def_property(srna, "active_index", PROP_INT, PROP_UNSIGNED);
+ RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
+ RNA_def_property_int_funcs(prop, "rna_Object_active_particle_system_index_get", "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");
+}
+
+
+/* object.vertex_groups */
+static void rna_def_object_vertex_groups(BlenderRNA *brna, PropertyRNA *cprop)
+{
+ static EnumPropertyItem assign_mode_items[] = {
+ {WEIGHT_REPLACE, "REPLACE", 0, "Replace", "Replace"},
+ {WEIGHT_ADD, "ADD", 0, "Add", "Add"},
+ {WEIGHT_SUBTRACT, "SUBTRACT", 0, "Subtract", "Subtract"},
+ {0, NULL, 0, NULL, NULL}
+ };
+
+ StructRNA *srna;
+
+ PropertyRNA *prop;
+
+ FunctionRNA *func;
+ PropertyRNA *parm;
+
+ RNA_def_property_srna(cprop, "VertexGroups");
+ srna= RNA_def_struct(brna, "VertexGroups", NULL);
+ RNA_def_struct_sdna(srna, "Object");
+ RNA_def_struct_ui_text(srna, "Vertex Groups", "Collection of vertex groups");
+
+ prop= RNA_def_property(srna, "active", PROP_POINTER, PROP_NONE);
+ RNA_def_property_struct_type(prop, "VertexGroup");
+ 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");
+
+ prop= RNA_def_property(srna, "active_index", PROP_INT, PROP_NONE);
+ RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
+ RNA_def_property_int_sdna(prop, NULL, "actdef");
+ RNA_def_property_int_funcs(prop, "rna_Object_active_vertex_group_index_get", "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");
+
+ /* vertex groups */ // add_vertex_group
+ func= RNA_def_function(srna, "new", "ED_vgroup_add_name");
+ RNA_def_function_ui_description(func, "Add vertex group to object.");
+ parm= RNA_def_string(func, "name", "Group", 0, "", "Vertex group name."); /* optional */
+ parm= RNA_def_pointer(func, "group", "VertexGroup", "", "New vertex group.");
+ RNA_def_function_return(func, parm);
+
+ func= RNA_def_function(srna, "assign", "rna_Object_add_vertex_to_group");
+ RNA_def_function_ui_description(func, "Add vertex to a vertex group.");
+ /* TODO, see how array size of 0 works, this shouldnt be used */
+ parm= RNA_def_int_array(func, "index", 1, NULL, 0, 0, "", "Index List.", 0, 0);
+ RNA_def_property_flag(parm, PROP_DYNAMIC);
+ RNA_def_property_flag(parm, PROP_REQUIRED);
+ parm= RNA_def_pointer(func, "group", "VertexGroup", "", "Vertex group to add vertex to.");
+ RNA_def_property_flag(parm, PROP_REQUIRED);
+ parm= RNA_def_float(func, "weight", 0, 0.0f, 1.0f, "", "Vertex weight.", 0.0f, 1.0f);
+ RNA_def_property_flag(parm, PROP_REQUIRED);
+ parm= RNA_def_enum(func, "type", assign_mode_items, 0, "", "Vertex assign mode.");
RNA_def_property_flag(parm, PROP_REQUIRED);
}
+
static void rna_def_object(BlenderRNA *brna)
{
StructRNA *srna;
@@ -1518,6 +1621,7 @@ static void rna_def_object(BlenderRNA *brna)
{OB_BOUND_CYLINDER, "CYLINDER", 0, "Cylinder", ""},
{OB_BOUND_CONE, "CONE", 0, "Cone", ""},
{OB_BOUND_POLYH, "POLYHEDRON", 0, "Polyhedron", ""},
+ {OB_BOUND_CAPSULE, "CAPSULE", 0, "Capsule", ""},
{0, NULL, 0, NULL, NULL}};
static EnumPropertyItem dupli_items[] = {
@@ -1655,6 +1759,7 @@ static void rna_def_object(BlenderRNA *brna)
prop= RNA_def_property(srna, "active_material_index", PROP_INT, PROP_UNSIGNED);
RNA_def_property_int_sdna(prop, NULL, "actcol");
+ RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
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_OBJECT|ND_DRAW, NULL);
@@ -1663,6 +1768,7 @@ static void rna_def_object(BlenderRNA *brna)
prop= RNA_def_property(srna, "location", PROP_FLOAT, PROP_TRANSLATION);
RNA_def_property_float_sdna(prop, NULL, "loc");
RNA_def_property_editable_array_func(prop, "rna_Object_location_editable");
+ RNA_def_property_ui_range(prop, -FLT_MAX, FLT_MAX, 1, 3);
RNA_def_property_ui_text(prop, "Location", "Location of the object");
RNA_def_property_update(prop, NC_OBJECT|ND_TRANSFORM, "rna_Object_internal_update");
@@ -1700,6 +1806,7 @@ static void rna_def_object(BlenderRNA *brna)
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_Object_scale_editable");
+ 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");
@@ -1707,6 +1814,7 @@ static void rna_def_object(BlenderRNA *brna)
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");
@@ -1810,18 +1918,7 @@ static void rna_def_object(BlenderRNA *brna)
RNA_def_property_collection_sdna(prop, NULL, "defbase", NULL);
RNA_def_property_struct_type(prop, "VertexGroup");
RNA_def_property_ui_text(prop, "Vertex Groups", "Vertex groups of the object");
-
- prop= RNA_def_property(srna, "active_vertex_group", PROP_POINTER, PROP_NONE);
- RNA_def_property_struct_type(prop, "VertexGroup");
- 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");
-
- prop= RNA_def_property(srna, "active_vertex_group_index", PROP_INT, PROP_NONE);
- RNA_def_property_int_sdna(prop, NULL, "actdef");
- RNA_def_property_int_funcs(prop, "rna_Object_active_vertex_group_index_get", "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_object_vertex_groups(brna, prop);
/* empty */
prop= RNA_def_property(srna, "empty_draw_type", PROP_ENUM, PROP_NONE);
@@ -1870,17 +1967,7 @@ static void rna_def_object(BlenderRNA *brna)
RNA_def_property_collection_sdna(prop, NULL, "particlesystem", NULL);
RNA_def_property_struct_type(prop, "ParticleSystem");
RNA_def_property_ui_text(prop, "Particle Systems", "Particle systems emitted from the object");
-
- prop= RNA_def_property(srna, "active_particle_system", PROP_POINTER, PROP_NONE);
- 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);
-
- prop= RNA_def_property(srna, "active_particle_system_index", PROP_INT, PROP_UNSIGNED);
- RNA_def_property_int_funcs(prop, "rna_Object_active_particle_system_index_get", "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_object_particle_systems(brna, prop);
/* restrict */
prop= RNA_def_property(srna, "hide", PROP_BOOLEAN, PROP_NONE);
@@ -1909,7 +1996,7 @@ static void rna_def_object(BlenderRNA *brna)
/* duplicates */
// XXX: evil old crap
- prop= RNA_def_property(srna, "slow_parent", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_slow_parent", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "partype", PARSLOW);
RNA_def_property_ui_text(prop, "Slow Parent", "Create a delay in the parent relationship");
RNA_def_property_update(prop, NC_OBJECT|ND_DRAW, "rna_Object_internal_update");
@@ -1925,7 +2012,7 @@ static void rna_def_object(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Dupli Frames Speed", "Set dupliframes to use the frame"); // TODO, better descriptio!
RNA_def_property_update(prop, NC_OBJECT|ND_DRAW, "rna_Object_internal_update");
- prop= RNA_def_property(srna, "use_dupli_verts_rotation", PROP_BOOLEAN, PROP_NONE);
+ 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);
@@ -1978,7 +2065,7 @@ static void rna_def_object(BlenderRNA *brna)
RNA_def_property_struct_type(prop, "DupliObject");
RNA_def_property_ui_text(prop, "Dupli list", "Object duplis");
- prop= RNA_def_property(srna, "duplis_used", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "is_duplicator", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "transflag", OB_DUPLI);
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
@@ -1989,33 +2076,33 @@ static void rna_def_object(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Time Offset", "Animation offset in frames for F-Curve and dupligroup instances");
RNA_def_property_update(prop, NC_OBJECT|ND_TRANSFORM, "rna_Object_internal_update");
- prop= RNA_def_property(srna, "time_offset_edit", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_time_offset_edit", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "ipoflag", OB_OFFS_OB);
RNA_def_property_ui_text(prop, "Time Offset Edit", "Use time offset when inserting keys and display time offset for F-Curve and action views");
- prop= RNA_def_property(srna, "time_offset_parent", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_time_offset_parent", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "ipoflag", OB_OFFS_PARENT);
RNA_def_property_ui_text(prop, "Time Offset Parent", "Apply the time offset to this objects parent relationship");
RNA_def_property_update(prop, NC_OBJECT|ND_TRANSFORM, "rna_Object_internal_update");
- prop= RNA_def_property(srna, "time_offset_particle", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_time_offset_particle", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "ipoflag", OB_OFFS_PARTICLE);
RNA_def_property_ui_text(prop, "Time Offset Particle", "Let the time offset work on the particle effect");
RNA_def_property_update(prop, NC_OBJECT|ND_TRANSFORM, "rna_Object_internal_update");
- prop= RNA_def_property(srna, "time_offset_add_parent", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_time_offset_add_parent", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "ipoflag", OB_OFFS_PARENTADD);
RNA_def_property_ui_text(prop, "Time Offset Add Parent", "Add the parents time offset value");
RNA_def_property_update(prop, NC_OBJECT|ND_TRANSFORM, "rna_Object_internal_update");
/* drawing */
- prop= RNA_def_property(srna, "max_draw_type", PROP_ENUM, PROP_NONE);
+ prop= RNA_def_property(srna, "draw_type", PROP_ENUM, PROP_NONE);
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);
- prop= RNA_def_property(srna, "draw_bounds", PROP_BOOLEAN, PROP_NONE);
+ 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", "Displays the object's bounds");
RNA_def_property_update(prop, NC_OBJECT|ND_DRAW, NULL);
@@ -2026,32 +2113,32 @@ static void rna_def_object(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Draw Bounds Type", "Object boundary display type");
RNA_def_property_update(prop, NC_OBJECT|ND_DRAW, NULL);
- prop= RNA_def_property(srna, "draw_name", PROP_BOOLEAN, PROP_NONE);
+ 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", "Displays the object's name");
RNA_def_property_update(prop, NC_OBJECT|ND_DRAW, NULL);
- prop= RNA_def_property(srna, "draw_axis", PROP_BOOLEAN, PROP_NONE);
+ 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 Axis", "Displays the object's origin and axis");
RNA_def_property_update(prop, NC_OBJECT|ND_DRAW, NULL);
- prop= RNA_def_property(srna, "draw_texture_space", PROP_BOOLEAN, PROP_NONE);
+ 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", "Displays the object's texture space");
RNA_def_property_update(prop, NC_OBJECT|ND_DRAW, NULL);
- prop= RNA_def_property(srna, "draw_wire", PROP_BOOLEAN, PROP_NONE);
+ 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", "Adds the object's wireframe over solid drawing");
RNA_def_property_update(prop, NC_OBJECT|ND_DRAW, NULL);
- prop= RNA_def_property(srna, "draw_transparent", PROP_BOOLEAN, PROP_NONE);
+ 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", "Enables transparent materials for the object (Mesh only)");
RNA_def_property_update(prop, NC_OBJECT|ND_DRAW, NULL);
- prop= RNA_def_property(srna, "x_ray", PROP_BOOLEAN, PROP_NONE);
+ 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", "Makes the object draw in front of others");
RNA_def_property_update(prop, NC_OBJECT|ND_DRAW, NULL);
@@ -2075,13 +2162,13 @@ static void rna_def_object(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Pose", "Current pose for armatures");
/* shape keys */
- prop= RNA_def_property(srna, "shape_key_lock", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_shape_key", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "shapeflag", OB_SHAPE_LOCK);
RNA_def_property_ui_text(prop, "Shape Key Lock", "Always show the current Shape for this Object");
RNA_def_property_ui_icon(prop, ICON_UNPINNED, 1);
RNA_def_property_update(prop, 0, "rna_Object_internal_update_data");
- prop= RNA_def_property(srna, "shape_key_edit_mode", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_shape_key_edit_mode", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "shapeflag", OB_SHAPE_EDIT_MODE);
RNA_def_property_ui_text(prop, "Shape Key Edit Mode", "Apply shape keys in edit mode (for Meshes only)");
RNA_def_property_ui_icon(prop, ICON_EDITMODE_HLT, 0);
@@ -2117,10 +2204,10 @@ static void rna_def_dupli_object(BlenderRNA *brna)
/* RNA_def_property_pointer_funcs(prop, "rna_DupliObject_object_get", NULL, NULL, NULL); */
RNA_def_property_ui_text(prop, "Object", "Object being duplicated");
- prop= RNA_def_property(srna, "object_matrix", PROP_FLOAT, PROP_MATRIX);
+ prop= RNA_def_property(srna, "matrix_original", PROP_FLOAT, PROP_MATRIX);
RNA_def_property_float_sdna(prop, NULL, "omat");
RNA_def_property_array(prop, 16);
- RNA_def_property_ui_text(prop, "Object Matrix", "Duplicated object transformation matrix");
+ 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");
@@ -2171,4 +2258,3 @@ void RNA_def_object(BlenderRNA *brna)
}
#endif
-
diff --git a/source/blender/makesrna/intern/rna_object_api.c b/source/blender/makesrna/intern/rna_object_api.c
index 17e6630a48a..d48e714ea23 100644
--- a/source/blender/makesrna/intern/rna_object_api.c
+++ b/source/blender/makesrna/intern/rna_object_api.c
@@ -35,9 +35,9 @@
#include "DNA_object_types.h"
-#include "BLO_sys_types.h" /* needed for intptr_t used in ED_mesh.h */
+// #include "BLO_sys_types.h" /* needed for intptr_t used in ED_mesh.h */
-#include "ED_mesh.h"
+// #include "ED_mesh.h"
#ifdef RNA_RUNTIME
@@ -261,17 +261,6 @@ static void rna_Object_free_duplilist(Object *ob, ReportList *reports)
}
}
-static bDeformGroup *rna_Object_add_vertex_group(Object *ob, char *group_name)
-{
- return ED_vgroup_add_name(ob, group_name);
-}
-
-static void rna_Object_add_vertex_to_group(Object *ob, int vertex_index, bDeformGroup *def, float weight, int assignmode)
-{
- /* creates dverts if needed */
- ED_vgroup_vert_add(ob, def, vertex_index, weight, assignmode);
-}
-
/* copied from old API Object.makeDisplayList (Object.c)
* use _ suffix because this exists for internal rna */
static void rna_Object_update(Object *ob, Scene *sce, int object, int data, int time)
@@ -433,13 +422,6 @@ void RNA_api_object(StructRNA *srna)
{0, NULL, 0, NULL, NULL}
};
- static EnumPropertyItem assign_mode_items[] = {
- {WEIGHT_REPLACE, "REPLACE", 0, "Replace", "Replace"}, /* TODO: more meaningful descriptions */
- {WEIGHT_ADD, "ADD", 0, "Add", "Add"},
- {WEIGHT_SUBTRACT, "SUBTRACT", 0, "Subtract", "Subtract"},
- {0, NULL, 0, NULL, NULL}
- };
-
/* mesh */
func= RNA_def_function(srna, "create_mesh", "rna_Object_create_mesh");
RNA_def_function_ui_description(func, "Create a Mesh datablock with modifiers applied.");
@@ -464,24 +446,6 @@ void RNA_api_object(StructRNA *srna)
RNA_def_function_ui_description(func, "Free the list of dupli objects.");
RNA_def_function_flag(func, FUNC_USE_REPORTS);
- /* vertex groups */
- func= RNA_def_function(srna, "add_vertex_group", "rna_Object_add_vertex_group");
- RNA_def_function_ui_description(func, "Add vertex group to object.");
- parm= RNA_def_string(func, "name", "Group", 0, "", "Vertex group name."); /* optional */
- parm= RNA_def_pointer(func, "group", "VertexGroup", "", "New vertex group.");
- RNA_def_function_return(func, parm);
-
- func= RNA_def_function(srna, "add_vertex_to_group", "rna_Object_add_vertex_to_group");
- RNA_def_function_ui_description(func, "Add vertex to a vertex group.");
- parm= RNA_def_int(func, "vertex_index", 0, 0, 0, "", "Vertex index.", 0, 0);
- RNA_def_property_flag(parm, PROP_REQUIRED);
- parm= RNA_def_pointer(func, "group", "VertexGroup", "", "Vertex group to add vertex to.");
- RNA_def_property_flag(parm, PROP_REQUIRED);
- parm= RNA_def_float(func, "weight", 0, 0.0f, 1.0f, "", "Vertex weight.", 0.0f, 1.0f);
- RNA_def_property_flag(parm, PROP_REQUIRED);
- parm= RNA_def_enum(func, "type", assign_mode_items, 0, "", "Vertex assign mode.");
- RNA_def_property_flag(parm, PROP_REQUIRED);
-
/* Armature */
func= RNA_def_function(srna, "find_armature", "rna_Object_find_armature");
RNA_def_function_ui_description(func, "Find armature influencing this object as a parent or via a modifier.");
diff --git a/source/blender/makesrna/intern/rna_object_force.c b/source/blender/makesrna/intern/rna_object_force.c
index a3a1186eedc..3a8f66a3773 100644
--- a/source/blender/makesrna/intern/rna_object_force.c
+++ b/source/blender/makesrna/intern/rna_object_force.c
@@ -294,7 +294,7 @@ static void rna_Cache_active_point_cache_index_set(struct PointerRNA *ptr, int v
BLI_freelistN(&pidlist);
}
-static void rna_PointCache_step_range(PointerRNA *ptr, int *min, int *max)
+static void rna_PointCache_frame_step_range(PointerRNA *ptr, int *min, int *max)
{
Object *ob = ptr->id.data;
PointCache *cache= ptr->data;
@@ -695,6 +695,26 @@ static EnumPropertyItem *rna_Effector_shape_itemf(bContext *C, PointerRNA *ptr,
#else
+/* ptcache.point_caches */
+static void rna_def_ptcache_point_caches(BlenderRNA *brna, PropertyRNA *cprop)
+{
+ StructRNA *srna;
+ PropertyRNA *prop;
+
+ // FunctionRNA *func;
+ // PropertyRNA *parm;
+
+ RNA_def_property_srna(cprop, "PointCaches");
+ srna= RNA_def_struct(brna, "PointCaches", NULL);
+ RNA_def_struct_sdna(srna, "PointCache");
+ RNA_def_struct_ui_text(srna, "Point Caches", "Collection of point caches");
+
+ prop= RNA_def_property(srna, "active_index", PROP_INT, PROP_UNSIGNED);
+ RNA_def_property_int_funcs(prop, "rna_Cache_active_point_cache_index_get", "rna_Cache_active_point_cache_index_set", "rna_Cache_active_point_cache_index_range");
+ RNA_def_property_ui_text(prop, "Active Point Cache Index", "");
+ RNA_def_property_update(prop, NC_OBJECT, "rna_Cache_change");
+}
+
static void rna_def_pointcache(BlenderRNA *brna)
{
StructRNA *srna;
@@ -714,9 +734,10 @@ static void rna_def_pointcache(BlenderRNA *brna)
RNA_def_property_range(prop, 1, MAXFRAME);
RNA_def_property_ui_text(prop, "End", "Frame on which the simulation stops");
- prop= RNA_def_property(srna, "step", PROP_INT, PROP_NONE);
+ prop= RNA_def_property(srna, "frame_step", PROP_INT, PROP_NONE);
+ RNA_def_property_int_sdna(prop, NULL, "step");
RNA_def_property_range(prop, 1, 20);
- RNA_def_property_int_funcs(prop, NULL, NULL, "rna_PointCache_step_range");
+ RNA_def_property_int_funcs(prop, NULL, NULL, "rna_PointCache_frame_step_range");
RNA_def_property_ui_text(prop, "Cache Step", "Number of frames between cached frames");
RNA_def_property_update(prop, NC_OBJECT, "rna_Cache_change");
@@ -727,20 +748,20 @@ static void rna_def_pointcache(BlenderRNA *brna)
RNA_def_property_update(prop, NC_OBJECT, "rna_Cache_idname_change");
/* flags */
- prop= RNA_def_property(srna, "baked", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "is_baked", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", PTCACHE_BAKED);
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
- prop= RNA_def_property(srna, "baking", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "is_baking", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", PTCACHE_BAKING);
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
- prop= RNA_def_property(srna, "disk_cache", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_disk_cache", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", PTCACHE_DISK_CACHE);
RNA_def_property_ui_text(prop, "Disk Cache", "Save cache files to disk (.blend file must be saved first)");
RNA_def_property_update(prop, NC_OBJECT, "rna_Cache_toggle_disk_cache");
- prop= RNA_def_property(srna, "outdated", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "is_outdated", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", PTCACHE_OUTDATED);
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
RNA_def_property_ui_text(prop, "Cache is outdated", "");
@@ -760,7 +781,7 @@ static void rna_def_pointcache(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "File Path", "Cache file path");
RNA_def_property_update(prop, NC_OBJECT, "rna_Cache_idname_change");
- prop= RNA_def_property(srna, "quick_cache", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_quick_cache", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", PTCACHE_QUICK_CACHE);
RNA_def_property_ui_text(prop, "Quick Cache", "Update simulation with cache steps");
RNA_def_property_update(prop, NC_OBJECT, "rna_Cache_change");
@@ -770,7 +791,7 @@ static void rna_def_pointcache(BlenderRNA *brna)
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
RNA_def_property_ui_text(prop, "Cache Info", "Info on current cache status");
- prop= RNA_def_property(srna, "external", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_external", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", PTCACHE_EXTERNAL);
RNA_def_property_ui_text(prop, "External", "Read cache from an external location");
RNA_def_property_update(prop, NC_OBJECT, "rna_Cache_idname_change");
@@ -780,15 +801,11 @@ static void rna_def_pointcache(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Library Path", "Use this files path when library linked into another file.");
RNA_def_property_update(prop, NC_OBJECT, "rna_Cache_idname_change");
- prop= RNA_def_property(srna, "point_cache_list", PROP_COLLECTION, PROP_NONE);
+ prop= RNA_def_property(srna, "point_caches", PROP_COLLECTION, PROP_NONE);
RNA_def_property_collection_funcs(prop, "rna_Cache_list_begin", "rna_iterator_listbase_next", "rna_iterator_listbase_end", "rna_iterator_listbase_get", 0, 0, 0);
RNA_def_property_struct_type(prop, "PointCache");
RNA_def_property_ui_text(prop, "Point Cache List", "Point cache list");
-
- prop= RNA_def_property(srna, "active_point_cache_index", PROP_INT, PROP_UNSIGNED);
- RNA_def_property_int_funcs(prop, "rna_Cache_active_point_cache_index_get", "rna_Cache_active_point_cache_index_set", "rna_Cache_active_point_cache_index_range");
- RNA_def_property_ui_text(prop, "Active Point Cache Index", "");
- RNA_def_property_update(prop, NC_OBJECT, "rna_Cache_change");
+ rna_def_ptcache_point_caches(brna, prop);
}
static void rna_def_collision(BlenderRNA *brna)
@@ -801,7 +818,7 @@ static void rna_def_collision(BlenderRNA *brna)
RNA_def_struct_path_func(srna, "rna_CollisionSettings_path");
RNA_def_struct_ui_text(srna, "Collision Settings", "Collision settings for object in physics simulation");
- prop= RNA_def_property(srna, "enabled", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "deflect", 1);
RNA_def_property_ui_text(prop, "Enabled", "Enable this objects as a collider for physics systems");
RNA_def_property_update(prop, 0, "rna_CollisionSettings_dependency_update");
@@ -814,7 +831,7 @@ static void rna_def_collision(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Damping Factor", "Amount of damping during particle collision");
RNA_def_property_update(prop, 0, "rna_CollisionSettings_update");
- prop= RNA_def_property(srna, "random_damping", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "damping_random", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "pdef_rdamp");
RNA_def_property_range(prop, 0.0f, 1.0f);
RNA_def_property_ui_text(prop, "Random Damping", "Random variation of damping");
@@ -826,7 +843,7 @@ static void rna_def_collision(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Friction Factor", "Amount of friction during particle collision");
RNA_def_property_update(prop, 0, "rna_CollisionSettings_update");
- prop= RNA_def_property(srna, "random_friction", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "friction_random", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "pdef_rfrict");
RNA_def_property_range(prop, 0.0f, 1.0f);
RNA_def_property_ui_text(prop, "Random Friction", "Random variation of friction");
@@ -838,7 +855,7 @@ static void rna_def_collision(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Permeability", "Chance that the particle will pass through the mesh");
RNA_def_property_update(prop, 0, "rna_CollisionSettings_update");
- prop= RNA_def_property(srna, "kill_particles", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_particle_kill", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", PDEFLE_KILL_PART);
RNA_def_property_ui_text(prop, "Kill Particles", "Kill collided particles");
RNA_def_property_update(prop, 0, "rna_CollisionSettings_update");
@@ -851,13 +868,13 @@ static void rna_def_collision(BlenderRNA *brna)
/* Soft Body and Cloth Interaction */
- prop= RNA_def_property(srna, "inner_thickness", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "thickness_inner", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "pdef_sbift");
RNA_def_property_range(prop, 0.001f, 1.0f);
RNA_def_property_ui_text(prop, "Inner Thickness", "Inner face thickness");
RNA_def_property_update(prop, 0, "rna_CollisionSettings_update");
- prop= RNA_def_property(srna, "outer_thickness", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "thickness_outer", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "pdef_sboft");
RNA_def_property_range(prop, 0.001f, 1.0f);
RNA_def_property_ui_text(prop, "Outer Thickness", "Outer face thickness");
@@ -895,7 +912,7 @@ static void rna_def_effector_weight(BlenderRNA *brna)
RNA_def_struct_ui_icon(srna, ICON_PHYSICS);
/* Flags */
- prop= RNA_def_property(srna, "do_growing_hair", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "apply_to_hair_growing", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", EFF_WEIGHT_DO_HAIR);
RNA_def_property_ui_text(prop, "Use For Growing Hair", "Use force fields when growing hair");
RNA_def_property_update(prop, 0, "rna_EffectorWeight_update");
@@ -949,7 +966,7 @@ static void rna_def_effector_weight(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Wind", "Wind effector weight");
RNA_def_property_update(prop, 0, "rna_EffectorWeight_update");
- prop= RNA_def_property(srna, "curveguide", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "curve_guide", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "weight[5]");
RNA_def_property_range(prop, -200.0f, 200.0f);
RNA_def_property_ui_range(prop, 0.0f, 1.0f, 0.1, 3);
@@ -1158,25 +1175,25 @@ static void rna_def_field(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Falloff Power", "Falloff power (real gravitational falloff = 2)");
RNA_def_property_update(prop, 0, "rna_FieldSettings_update");
- prop= RNA_def_property(srna, "minimum_distance", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "distance_min", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "mindist");
RNA_def_property_range(prop, 0.0f, 1000.0f);
RNA_def_property_ui_text(prop, "Minimum Distance", "Minimum distance for the field's fall-off");
RNA_def_property_update(prop, 0, "rna_FieldSettings_update");
- prop= RNA_def_property(srna, "maximum_distance", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "distance_max", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "maxdist");
RNA_def_property_range(prop, 0.0f, 1000.0f);
RNA_def_property_ui_text(prop, "Maximum Distance", "Maximum distance for the field to work");
RNA_def_property_update(prop, 0, "rna_FieldSettings_update");
- prop= RNA_def_property(srna, "radial_minimum", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "radial_min", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "minrad");
RNA_def_property_range(prop, 0.0f, 1000.0f);
RNA_def_property_ui_text(prop, "Minimum Radial Distance", "Minimum radial distance for the field's fall-off");
RNA_def_property_update(prop, 0, "rna_FieldSettings_update");
- prop= RNA_def_property(srna, "radial_maximum", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "radial_max", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "maxrad");
RNA_def_property_range(prop, 0.0f, 1000.0f);
RNA_def_property_ui_text(prop, "Maximum Radial Distance", "Maximum radial distance for the field to work");
@@ -1229,42 +1246,42 @@ static void rna_def_field(BlenderRNA *brna)
// "Use a maximum angle for the field to work"
RNA_def_property_update(prop, 0, "rna_FieldSettings_update");
- prop= RNA_def_property(srna, "use_coordinates", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_object_coords", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", PFIELD_TEX_OBJECT);
RNA_def_property_ui_text(prop, "Use Coordinates", "Use object/global coordinates for texture");
RNA_def_property_update(prop, 0, "rna_FieldSettings_update");
- prop= RNA_def_property(srna, "global_coordinates", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_global_coords", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", PFIELD_GLOBAL_CO);
RNA_def_property_ui_text(prop, "Use Global Coordinates", "Use effector/global coordinates for turbulence");
RNA_def_property_update(prop, 0, "rna_FieldSettings_update");
- prop= RNA_def_property(srna, "force_2d", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_2d_force", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", PFIELD_TEX_2D);
RNA_def_property_ui_text(prop, "2D", "Apply force only in 2d");
RNA_def_property_update(prop, 0, "rna_FieldSettings_update");
- prop= RNA_def_property(srna, "root_coordinates", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_root_coords", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", PFIELD_TEX_ROOTCO);
RNA_def_property_ui_text(prop, "Root Texture Coordinates", "Texture coordinates from root particle locations");
RNA_def_property_update(prop, 0, "rna_FieldSettings_update");
- prop= RNA_def_property(srna, "do_location", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "apply_to_location", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", PFIELD_DO_LOCATION);
RNA_def_property_ui_text(prop, "Location", "Effect particles' location");
RNA_def_property_update(prop, 0, "rna_FieldSettings_update");
- prop= RNA_def_property(srna, "do_rotation", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "apply_to_rotation", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", PFIELD_DO_ROTATION);
RNA_def_property_ui_text(prop, "Rotation", "Effect particles' dynamic rotation");
RNA_def_property_update(prop, 0, "rna_FieldSettings_update");
- prop= RNA_def_property(srna, "do_absorption", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_absorption", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", PFIELD_VISIBILITY);
RNA_def_property_ui_text(prop, "Absorption", "Force gets absorbed by collision objects");
RNA_def_property_update(prop, 0, "rna_FieldSettings_update");
- prop= RNA_def_property(srna, "multiple_springs", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_multiple_springs", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", PFIELD_MULTIPLE_SPRINGS);
RNA_def_property_ui_text(prop, "Multiple Springs", "Every point is effected by multiple springs");
RNA_def_property_update(prop, 0, "rna_FieldSettings_update");
@@ -1291,7 +1308,7 @@ static void rna_def_field(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Free", "Guide-free time from particle life's end");
RNA_def_property_update(prop, 0, "rna_FieldSettings_update");
- prop= RNA_def_property(srna, "guide_path_add", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_guide_path_add", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", PFIELD_GUIDE_PATH_ADD);
RNA_def_property_ui_text(prop, "Additive", "Based on distance/falloff it adds a portion of the entire path");
RNA_def_property_update(prop, 0, "rna_FieldSettings_update");
@@ -1362,7 +1379,7 @@ static void rna_def_game_softbody(BlenderRNA *brna)
/* Floats */
- prop= RNA_def_property(srna, "linstiff", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "linear_stiffness", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "linStiff");
RNA_def_property_range(prop, 0.0f, 1.0f);
RNA_def_property_ui_text(prop, "Linear Stiffness", "Linear stiffness of the soft body links");
@@ -1372,24 +1389,24 @@ static void rna_def_game_softbody(BlenderRNA *brna)
RNA_def_property_range(prop, 0.0f, 1.0f);
RNA_def_property_ui_text(prop, "Friction", "Dynamic Friction");
- prop= RNA_def_property(srna, "threshold", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "shape_threshold", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "kMT");
RNA_def_property_range(prop, 0.0f, 1.0f);
RNA_def_property_ui_text(prop, "Threshold", "Shape matching threshold");
- prop= RNA_def_property(srna, "margin", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "collision_margin", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "margin");
RNA_def_property_range(prop, 0.01f, 1.0f);
RNA_def_property_ui_text(prop, "Margin", "Collision margin for soft body. Small value makes the algorithm unstable");
- prop= RNA_def_property(srna, "welding", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "weld_threshold", PROP_FLOAT, PROP_DISTANCE);
RNA_def_property_float_sdna(prop, NULL, "welding");
RNA_def_property_range(prop, 0.0f, 0.01f);
RNA_def_property_ui_text(prop, "Welding", "Welding threshold: distance between nearby vertices to be considered equal => set to 0.0 to disable welding test and speed up scene loading (ok if the mesh has no duplicates)");
/* Integers */
- prop= RNA_def_property(srna, "position_iterations", PROP_INT, PROP_NONE);
+ prop= RNA_def_property(srna, "location_iterations", PROP_INT, PROP_NONE);
RNA_def_property_int_sdna(prop, NULL, "piterations");
RNA_def_property_range(prop, 0, 10);
RNA_def_property_ui_text(prop, "Position Iterations", "Position solver iterations");
@@ -1401,19 +1418,19 @@ static void rna_def_game_softbody(BlenderRNA *brna)
/* Booleans */
- prop= RNA_def_property(srna, "shape_match", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_shape_match", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", OB_BSB_SHAPE_MATCHING);
RNA_def_property_ui_text(prop, "Shape Match", "Enable soft body shape matching goal");
- prop= RNA_def_property(srna, "bending_const", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_bending_constraints", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", OB_BSB_BENDING_CONSTRAINTS);
RNA_def_property_ui_text(prop, "Bending Const", "Enable bending constraints");
- prop= RNA_def_property(srna, "cluster_rigid_to_softbody", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_cluster_rigid_to_softbody", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "collisionflags", OB_BSB_COL_CL_RS);
RNA_def_property_ui_text(prop, "Rigid to Soft Body", "Enable cluster collision between soft and rigid body");
- prop= RNA_def_property(srna, "cluster_soft_to_softbody", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_cluster_soft_to_softbody", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "collisionflags", OB_BSB_COL_CL_SS);
RNA_def_property_ui_text(prop, "Soft to Soft Body", "Enable cluster collision between soft and soft body");
}
@@ -1457,7 +1474,7 @@ static void rna_def_softbody(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Mass", "General Mass value");
RNA_def_property_update(prop, 0, "rna_softbody_update");
- prop= RNA_def_property(srna, "mass_vertex_group", PROP_STRING, PROP_NONE);
+ prop= RNA_def_property(srna, "vertex_group_mass", PROP_STRING, PROP_NONE);
RNA_def_property_string_sdna(prop, NULL, "namedVG_Mass");
RNA_def_property_ui_text(prop, "Mass Vertex Group", "Control point mass values");
RNA_def_property_string_funcs(prop, NULL, NULL, "rna_SoftBodySettings_mass_vgroup_set");
@@ -1478,7 +1495,7 @@ static void rna_def_softbody(BlenderRNA *brna)
/* Goal */
- prop= RNA_def_property(srna, "goal_vertex_group", PROP_STRING, PROP_NONE);
+ prop= RNA_def_property(srna, "vertex_group_goal", PROP_STRING, PROP_NONE);
RNA_def_property_string_sdna(prop, NULL, "vertgroup");
RNA_def_property_clear_flag(prop, PROP_ANIMATABLE); /* not impossible .. but not supported yet */
RNA_def_property_string_funcs(prop, "rna_SoftBodySettings_goal_vgroup_get", "rna_SoftBodySettings_goal_vgroup_length", "rna_SoftBodySettings_goal_vgroup_set");
@@ -1529,7 +1546,7 @@ static void rna_def_softbody(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Push", "Edge spring stiffness when shorter than rest length");
RNA_def_property_update(prop, 0, "rna_softbody_update");
- prop= RNA_def_property(srna, "damp", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "damping", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "infrict");
RNA_def_property_range(prop, 0.0f, 50.0f);
RNA_def_property_ui_text(prop, "Damp", "Edge spring friction");
@@ -1553,7 +1570,7 @@ static void rna_def_softbody(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Plastic", "Permanent deform");
RNA_def_property_update(prop, 0, "rna_softbody_update");
- prop= RNA_def_property(srna, "bending", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "bend", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "secondspring");
RNA_def_property_range(prop, 0.0f, 10.0f);
RNA_def_property_ui_text(prop, "Bending", "Bending Stiffness");
@@ -1564,7 +1581,7 @@ static void rna_def_softbody(BlenderRNA *brna)
RNA_def_property_range(prop, 0.0f, 1.0f);
RNA_def_property_ui_text(prop, "Shear", "Shear Stiffness");
- prop= RNA_def_property(srna, "spring_vertex_group", PROP_STRING, PROP_NONE);
+ prop= RNA_def_property(srna, "vertex_group_spring", PROP_STRING, PROP_NONE);
RNA_def_property_string_sdna(prop, NULL, "namedVG_Spring_K");
RNA_def_property_ui_text(prop, "Spring Vertex Group", "Control point spring strength values");
RNA_def_property_string_funcs(prop, NULL, NULL, "rna_SoftBodySettings_spring_vgroup_set");
@@ -1600,19 +1617,19 @@ static void rna_def_softbody(BlenderRNA *brna)
/* Solver */
- prop= RNA_def_property(srna, "error_limit", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "error_threshold", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "rklimit");
RNA_def_property_range(prop, 0.001f, 10.0f);
RNA_def_property_ui_text(prop, "Error Limit", "The Runge-Kutta ODE solver error limit, low value gives more precision, high values speed");
RNA_def_property_update(prop, 0, "rna_softbody_update");
- prop= RNA_def_property(srna, "minstep", PROP_INT, PROP_NONE);
+ prop= RNA_def_property(srna, "step_min", PROP_INT, PROP_NONE);
RNA_def_property_int_sdna(prop, NULL, "minloops");
RNA_def_property_range(prop, 0, 30000);
RNA_def_property_ui_text(prop, "Min Step", "Minimal # solver steps/frame");
RNA_def_property_update(prop, 0, "rna_softbody_update");
- prop= RNA_def_property(srna, "maxstep", PROP_INT, PROP_NONE);
+ prop= RNA_def_property(srna, "step_max", PROP_INT, PROP_NONE);
RNA_def_property_int_sdna(prop, NULL, "maxloops");
RNA_def_property_range(prop, 0, 30000);
RNA_def_property_ui_text(prop, "Max Step", "Maximal # solver steps/frame");
@@ -1630,16 +1647,16 @@ static void rna_def_softbody(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Fuzzy", "Fuzziness while on collision, high values make collsion handling faster but less stable");
RNA_def_property_update(prop, 0, "rna_softbody_update");
- prop= RNA_def_property(srna, "auto_step", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_auto_step", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "solverflags", SBSO_OLDERR);
RNA_def_property_ui_text(prop, "V", "Use velocities for automagic step sizes");
RNA_def_property_update(prop, 0, "rna_softbody_update");
- prop= RNA_def_property(srna, "diagnose", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_diagnose", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "solverflags", SBSO_MONITOR);
RNA_def_property_ui_text(prop, "Print Performance to Console", "Turn on SB diagnose console prints");
- prop= RNA_def_property(srna, "estimate_matrix", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_estimate_matrix", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "solverflags", SBSO_ESTIMATEIPO);
RNA_def_property_ui_text(prop, "Estimate matrix", "estimate matrix .. split to COM , ROT ,SCALE ");
@@ -1649,17 +1666,17 @@ static void rna_def_softbody(BlenderRNA *brna)
/* but i did not want to start a new property struct */
/* so rather rename this from SoftBodySettings to SoftBody */
/* translation */
- prop= RNA_def_property(srna, "lcom", PROP_FLOAT, PROP_TRANSLATION);
+ prop= RNA_def_property(srna, "location_mass_center", PROP_FLOAT, PROP_TRANSLATION);
RNA_def_property_float_sdna(prop, NULL, "lcom");
RNA_def_property_ui_text(prop, "Center of mass", "Location of Center of mass");
/* matrix */
- prop= RNA_def_property(srna, "lrot", PROP_FLOAT, PROP_MATRIX);
+ prop= RNA_def_property(srna, "rotation_estimate", PROP_FLOAT, PROP_MATRIX);
RNA_def_property_float_sdna(prop, NULL, "lrot");
RNA_def_property_multi_array(prop, 2, matrix_dimsize);
RNA_def_property_ui_text(prop, "Rot Matrix", "Estimated rotation matrix");
- prop= RNA_def_property(srna, "lscale", PROP_FLOAT, PROP_MATRIX);
+ prop= RNA_def_property(srna, "scale_estimate", PROP_FLOAT, PROP_MATRIX);
RNA_def_property_float_sdna(prop, NULL, "lscale");
RNA_def_property_multi_array(prop, 2, matrix_dimsize);
RNA_def_property_ui_text(prop, "Scale Matrix", "Estimated scale matrix");
@@ -1680,18 +1697,18 @@ static void rna_def_softbody(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Use Edges", "Use Edges as springs");
RNA_def_property_update(prop, 0, "rna_softbody_update");
- prop= RNA_def_property(srna, "stiff_quads", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_stiff_quads", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_funcs(prop, "rna_SoftBodySettings_stiff_quads_get", "rna_SoftBodySettings_stiff_quads_set");
RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
RNA_def_property_ui_text(prop, "Stiff Quads", "Adds diagonal springs on 4-gons");
RNA_def_property_update(prop, 0, "rna_softbody_update");
- prop= RNA_def_property(srna, "edge_collision", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_edge_collision", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_funcs(prop, "rna_SoftBodySettings_edge_collision_get", "rna_SoftBodySettings_edge_collision_set");
RNA_def_property_ui_text(prop, "Edge Collision", "Edges collide too");
RNA_def_property_update(prop, 0, "rna_softbody_update");
- prop= RNA_def_property(srna, "face_collision", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_face_collision", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_funcs(prop, "rna_SoftBodySettings_face_collision_get", "rna_SoftBodySettings_face_collision_set");
RNA_def_property_ui_text(prop, "Face Collision", "Faces collide too, can be very slow");
RNA_def_property_update(prop, 0, "rna_softbody_update");
@@ -1702,7 +1719,7 @@ static void rna_def_softbody(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Aerodynamics Type", "Method of calculating aerodynamic interaction");
RNA_def_property_update(prop, 0, "rna_softbody_update");
- prop= RNA_def_property(srna, "self_collision", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_self_collision", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_funcs(prop, "rna_SoftBodySettings_self_collision_get", "rna_SoftBodySettings_self_collision_set");
RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
RNA_def_property_ui_text(prop, "Self Collision", "Enable naive vertex ball self collision");
diff --git a/source/blender/makesrna/intern/rna_particle.c b/source/blender/makesrna/intern/rna_particle.c
index a8ea4adb9b9..1151215f5f7 100644
--- a/source/blender/makesrna/intern/rna_particle.c
+++ b/source/blender/makesrna/intern/rna_particle.c
@@ -32,6 +32,7 @@
#include "rna_internal.h"
#include "DNA_modifier_types.h"
+#include "DNA_cloth_types.h"
#include "DNA_particle_types.h"
#include "DNA_object_force.h"
#include "DNA_object_types.h"
@@ -238,12 +239,25 @@ static void rna_Particle_redo_child(Main *bmain, Scene *scene, PointerRNA *ptr)
particle_recalc(bmain, scene, ptr, PSYS_RECALC_CHILD);
}
+static ParticleSystem *rna_particle_system_for_target(Object *ob, ParticleTarget *target)
+{
+ ParticleSystem *psys;
+ ParticleTarget *pt;
+
+ for(psys=ob->particlesystem.first; psys; psys=psys->next)
+ for(pt=psys->targets.first; pt; pt=pt->next)
+ if(pt == target)
+ return psys;
+
+ return NULL;
+}
+
static void rna_Particle_target_reset(Main *bmain, Scene *scene, PointerRNA *ptr)
{
if(ptr->type==&RNA_ParticleTarget) {
- ParticleTarget *pt = (ParticleTarget*)ptr->data;
Object *ob = (Object*)ptr->id.data;
- ParticleSystem *kpsys=NULL, *psys=psys_get_current(ob);
+ 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);
@@ -276,7 +290,8 @@ static void rna_Particle_target_redo(Main *bmain, Scene *scene, PointerRNA *ptr)
{
if(ptr->type==&RNA_ParticleTarget) {
Object *ob = (Object*)ptr->id.data;
- ParticleSystem *psys = psys_get_current(ob);
+ ParticleTarget *pt = (ParticleTarget*)ptr->data;
+ ParticleSystem *psys = rna_particle_system_for_target(ob, pt);
psys->recalc = PSYS_RECALC_REDO;
@@ -301,16 +316,15 @@ static void rna_Particle_hair_dynamics(Main *bmain, Scene *scene, PointerRNA *pt
}
static PointerRNA rna_particle_settings_get(PointerRNA *ptr)
{
- Object *ob= (Object*)ptr->id.data;
- ParticleSettings *part = psys_get_current(ob)->part;
+ ParticleSystem *psys= (ParticleSystem*)ptr->data;
+ ParticleSettings *part = psys->part;
return rna_pointer_inherit_refine(ptr, &RNA_ParticleSettings, part);
}
static void rna_particle_settings_set(PointerRNA *ptr, PointerRNA value)
{
- Object *ob= (Object*)ptr->id.data;
- ParticleSystem *psys = psys_get_current(ob);
+ ParticleSystem *psys= (ParticleSystem*)ptr->data;
if(psys->part)
psys->part->id.us--;
@@ -742,12 +756,12 @@ static void rna_def_particle_hair_key(BlenderRNA *brna)
RNA_def_property_range(prop, 0.0, 1.0);
RNA_def_property_ui_text(prop, "Weight", "Weight for cloth simulation");
- prop= RNA_def_property(srna, "location", PROP_FLOAT, PROP_TRANSLATION);
+ prop= RNA_def_property(srna, "co", PROP_FLOAT, PROP_TRANSLATION);
RNA_def_property_array(prop, 3);
RNA_def_property_ui_text(prop, "Location (Object Space)", "Location of the hair key in object space");
RNA_def_property_float_funcs(prop, "rna_ParticleHairKey_location_object_get", "rna_ParticleHairKey_location_object_set", NULL);
- prop= RNA_def_property(srna, "location_hairspace", PROP_FLOAT, PROP_TRANSLATION);
+ prop= RNA_def_property(srna, "co_hair_space", PROP_FLOAT, PROP_TRANSLATION);
RNA_def_property_float_sdna(prop, NULL, "co");
RNA_def_property_ui_text(prop, "Location", "Location of the hair key in its internal coordinate system, relative to the emitting face");
}
@@ -849,7 +863,7 @@ static void rna_def_particle(BlenderRNA *brna)
/* Hair & Keyed Keys */
- prop= RNA_def_property(srna, "hair", PROP_COLLECTION, PROP_NONE);
+ prop= RNA_def_property(srna, "is_hair", PROP_COLLECTION, PROP_NONE);
RNA_def_property_collection_sdna(prop, NULL, "hair", "totkey");
RNA_def_property_struct_type(prop, "ParticleHairKey");
RNA_def_property_ui_text(prop, "Hair", "");
@@ -862,7 +876,7 @@ static void rna_def_particle(BlenderRNA *brna)
// float fuv[4], foffset; /* coordinates on face/edge number "num" and depth along*/
// /* face normal for volume emission */
- prop= RNA_def_property(srna, "birthtime", PROP_FLOAT, PROP_TIME);
+ prop= RNA_def_property(srna, "birth_time", PROP_FLOAT, PROP_TIME);
RNA_def_property_float_sdna(prop, NULL, "time");
// RNA_def_property_range(prop, lowerLimitf, upperLimitf);
RNA_def_property_ui_text(prop, "Birth Time", "");
@@ -888,7 +902,7 @@ static void rna_def_particle(BlenderRNA *brna)
// int totkey;
/* flag */
- prop= RNA_def_property(srna, "is_existing", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "is_exist", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", PARS_UNEXIST);
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
RNA_def_property_ui_text(prop, "Exists", "");
@@ -936,7 +950,7 @@ static void rna_def_fluid_settings(BlenderRNA *brna)
RNA_def_struct_ui_text(srna, "SPH Fluid Settings", "Settings for particle fluids physics");
/* Fluid settings */
- prop= RNA_def_property(srna, "spring_k", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "spring_force", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "spring_k");
RNA_def_property_range(prop, 0.0f, 1.0f);
RNA_def_property_ui_text(prop, "Spring", "Spring force constant");
@@ -968,13 +982,13 @@ static void rna_def_fluid_settings(BlenderRNA *brna)
RNA_def_property_update(prop, 0, "rna_Particle_reset");
/* Double density relaxation */
- prop= RNA_def_property(srna, "stiffness_k", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "stiffness", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "stiffness_k");
RNA_def_property_range(prop, 0.0f, 100.0f);
RNA_def_property_ui_text(prop, "Stiffness ", "Constant K - Stiffness");
RNA_def_property_update(prop, 0, "rna_Particle_reset");
- prop= RNA_def_property(srna, "stiffness_knear", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "stiffness_near", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "stiffness_knear");
RNA_def_property_range(prop, 0.0f, 100.0f);
RNA_def_property_ui_text(prop, "Repulsion", "Repulsion factor: stiffness_knear");
@@ -1058,13 +1072,14 @@ static void rna_def_particle_settings(BlenderRNA *brna)
};
//TODO: names, tooltips
+#if 0
static EnumPropertyItem rot_from_items[] = {
{PART_ROT_KEYS, "KEYS", 0, "keys", ""},
{PART_ROT_ZINCR, "ZINCR", 0, "zincr", ""},
{PART_ROT_IINCR, "IINCR", 0, "iincr", ""},
{0, NULL, 0, NULL, NULL}
};
-
+#endif
static EnumPropertyItem integrator_type_items[] = {
{PART_INT_EULER, "EULER", 0, "Euler", ""},
{PART_INT_VERLET, "VERLET", 0, "Verlet", ""},
@@ -1119,95 +1134,95 @@ static void rna_def_particle_settings(BlenderRNA *brna)
RNA_def_struct_ui_icon(srna, ICON_PARTICLE_DATA);
/* flag */
- prop= RNA_def_property(srna, "react_start_end", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_react_start_end", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", PART_REACT_STA_END);
RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
RNA_def_property_ui_text(prop, "Start/End", "Give birth to unreacted particles eventually");
RNA_def_property_update(prop, 0, "rna_Particle_reset");
- prop= RNA_def_property(srna, "react_multiple", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_react_multiple", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", PART_REACT_MULTIPLE);
RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
RNA_def_property_ui_text(prop, "Multi React", "React multiple times");
RNA_def_property_update(prop, 0, "rna_Particle_reset");
- prop= RNA_def_property(srna, "unborn", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_unborn", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", PART_UNBORN);
RNA_def_property_ui_text(prop, "Unborn", "Show particles before they are emitted");
RNA_def_property_update(prop, 0, "rna_Particle_redo");
- prop= RNA_def_property(srna, "died", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_dead", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", PART_DIED);
RNA_def_property_ui_text(prop, "Died", "Show particles after they have died");
RNA_def_property_update(prop, 0, "rna_Particle_redo");
- prop= RNA_def_property(srna, "trand", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_emit_random", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", PART_TRAND);
RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
RNA_def_property_ui_text(prop, "Random", "Emit in random order of elements");
RNA_def_property_update(prop, 0, "rna_Particle_reset");
- prop= RNA_def_property(srna, "even_distribution", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_even_distribution", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", PART_EDISTR);
RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
RNA_def_property_ui_text(prop, "Even Distribution", "Use even distribution from faces based on face areas or edge lengths");
RNA_def_property_update(prop, 0, "rna_Particle_reset");
- prop= RNA_def_property(srna, "die_on_collision", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_die_on_collision", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", PART_DIE_ON_COL);
RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
RNA_def_property_ui_text(prop, "Die on hit", "Particles die when they collide with a deflector object");
RNA_def_property_update(prop, 0, "rna_Particle_reset");
- prop= RNA_def_property(srna, "size_deflect", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_size_deflect", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", PART_SIZE_DEFL);
RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
RNA_def_property_ui_text(prop, "Size Deflect", "Use particle's size in deflection");
RNA_def_property_update(prop, 0, "rna_Particle_reset");
- prop= RNA_def_property(srna, "rotation_dynamic", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_dynamic_rotation", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", PART_ROT_DYN);
RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
RNA_def_property_ui_text(prop, "Dynamic", "Sets rotation to dynamic/constant");
RNA_def_property_update(prop, 0, "rna_Particle_reset");
- prop= RNA_def_property(srna, "sizemass", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_multiply_size_mass", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", PART_SIZEMASS);
RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
RNA_def_property_ui_text(prop, "Mass from Size", "Multiply mass by particle size");
RNA_def_property_update(prop, 0, "rna_Particle_reset");
- prop= RNA_def_property(srna, "boids_2d", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "lock_boids_to_surface", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", PART_BOIDS_2D);
RNA_def_property_ui_text(prop, "Boids 2D", "Constrain boids to a surface");
RNA_def_property_update(prop, 0, "rna_Particle_reset");
- prop= RNA_def_property(srna, "branching", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_branching", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", PART_BRANCHING);
RNA_def_property_ui_text(prop, "Branching", "Branch child paths from each other");
RNA_def_property_update(prop, 0, "rna_Particle_redo_child");
- prop= RNA_def_property(srna, "animate_branching", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_animate_branching", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", PART_ANIM_BRANCHING);
RNA_def_property_ui_text(prop, "Animated", "Animate branching");
RNA_def_property_update(prop, 0, "rna_Particle_redo_child");
- prop= RNA_def_property(srna, "symmetric_branching", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_symmetric_branching", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", PART_SYMM_BRANCHING);
RNA_def_property_ui_text(prop, "Symmetric", "Start and end points are the same");
RNA_def_property_update(prop, 0, "rna_Particle_redo_child");
- prop= RNA_def_property(srna, "hair_bspline", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_hair_bspline", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", PART_HAIR_BSPLINE);
RNA_def_property_ui_text(prop, "B-Spline", "Interpolate hair using B-Splines");
RNA_def_property_update(prop, 0, "rna_Particle_redo");
- prop= RNA_def_property(srna, "grid_invert", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "invert_grid", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", PART_GRID_INVERT);
RNA_def_property_ui_text(prop, "Invert", "Invert what is considered object and what is not");
RNA_def_property_update(prop, 0, "rna_Particle_reset");
- prop= RNA_def_property(srna, "child_effector", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "apply_effector_to_children", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", PART_CHILD_EFFECT);
RNA_def_property_ui_text(prop, "Children", "Apply effectors to children");
RNA_def_property_update(prop, 0, "rna_Particle_redo");
@@ -1217,12 +1232,12 @@ static void rna_def_particle_settings(BlenderRNA *brna)
//RNA_def_property_ui_text(prop, "Use seams", "Use seams to determine parents");
//RNA_def_property_update(prop, 0, "rna_Particle_redo_child");
- prop= RNA_def_property(srna, "child_guide", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "apply_guide_to_children", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", PART_CHILD_GUIDE);
- RNA_def_property_ui_text(prop, "child_guide", "");
+ RNA_def_property_ui_text(prop, "apply_guide_to_children", "");
RNA_def_property_update(prop, 0, "rna_Particle_redo");
- prop= RNA_def_property(srna, "self_effect", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_self_effect", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", PART_SELF_EFFECT);
RNA_def_property_ui_text(prop, "Self Effect", "Particle effectors effect themselves");
RNA_def_property_update(prop, 0, "rna_Particle_reset");
@@ -1279,7 +1294,7 @@ static void rna_def_particle_settings(BlenderRNA *brna)
RNA_def_property_update(prop, 0, "rna_Particle_reset");
/*draw flag*/
- prop= RNA_def_property(srna, "velocity", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_velocity", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "draw", PART_DRAW_VEL);
RNA_def_property_ui_text(prop, "Velocity", "Show particle velocity");
RNA_def_property_update(prop, 0, "rna_Particle_redo");
@@ -1289,37 +1304,37 @@ static void rna_def_particle_settings(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Size", "Show particle size");
RNA_def_property_update(prop, 0, "rna_Particle_redo");
- prop= RNA_def_property(srna, "emitter", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_render_emitter", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "draw", PART_DRAW_EMITTER);
RNA_def_property_ui_text(prop, "Emitter", "Render emitter Object also");
RNA_def_property_update(prop, 0, "rna_Particle_redo");
- prop= RNA_def_property(srna, "draw_health", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_health", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "draw", PART_DRAW_HEALTH);
RNA_def_property_ui_text(prop, "Health", "Draw boid health");
RNA_def_property_update(prop, 0, "rna_Particle_redo");
- prop= RNA_def_property(srna, "abs_path_time", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_absolute_path_time", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "draw", PART_ABS_PATH_TIME);
RNA_def_property_ui_text(prop, "Absolute Path Time", "Path timing is in absolute frames");
RNA_def_property_update(prop, 0, "rna_Particle_abspathtime_update");
- prop= RNA_def_property(srna, "billboard_lock", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "lock_billboard", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "draw", PART_DRAW_BB_LOCK);
RNA_def_property_ui_text(prop, "Lock Billboard", "Lock the billboards align axis");
RNA_def_property_update(prop, 0, "rna_Particle_redo");
- prop= RNA_def_property(srna, "parent", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_parent_particles", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "draw", PART_DRAW_PARENT);
RNA_def_property_ui_text(prop, "Parents", "Render parent particles");
RNA_def_property_update(prop, 0, "rna_Particle_redo");
- prop= RNA_def_property(srna, "num", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_number", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "draw", PART_DRAW_NUM);
RNA_def_property_ui_text(prop, "Number", "Show particle number");
RNA_def_property_update(prop, 0, "rna_Particle_redo");
- prop= RNA_def_property(srna, "rand_group", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_group_pick_random", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "draw", PART_DRAW_RAND_GR);
RNA_def_property_ui_text(prop, "Pick Random", "Pick objects from group randomly");
RNA_def_property_update(prop, 0, "rna_Particle_redo");
@@ -1334,39 +1349,39 @@ static void rna_def_particle_settings(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Use Global", "Use object's global coordinates for duplication");
RNA_def_property_update(prop, 0, "rna_Particle_redo");
- prop= RNA_def_property(srna, "render_adaptive", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_render_adaptive", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "draw", PART_DRAW_REN_ADAPT);
RNA_def_property_ui_text(prop, "Adaptive render", "Draw steps of the particle path");
RNA_def_property_update(prop, 0, "rna_Particle_redo");
- prop= RNA_def_property(srna, "velocity_length", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_velocity_length", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "draw", PART_DRAW_VEL_LENGTH);
RNA_def_property_ui_text(prop, "Speed", "Multiply line length by particle speed");
RNA_def_property_update(prop, 0, "rna_Particle_redo");
- prop= RNA_def_property(srna, "material_color", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_material_color", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "draw", PART_DRAW_MAT_COL);
RNA_def_property_ui_text(prop, "Material Color", "Draw particles using material's diffuse color");
RNA_def_property_update(prop, 0, "rna_Particle_redo");
- prop= RNA_def_property(srna, "whole_group", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_whole_group", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "draw", PART_DRAW_WHOLE_GR);
RNA_def_property_ui_text(prop, "Whole Group", "Use whole group at once");
RNA_def_property_update(prop, 0, "rna_Particle_redo");
- prop= RNA_def_property(srna, "render_strand", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_strand_primitive", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "draw", PART_DRAW_REN_STRAND);
RNA_def_property_ui_text(prop, "Strand render", "Use the strand primitive for rendering");
RNA_def_property_update(prop, 0, "rna_Particle_redo");
- prop= RNA_def_property(srna, "draw_as", PROP_ENUM, PROP_NONE);
+ prop= RNA_def_property(srna, "draw_method", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "draw_as");
RNA_def_property_enum_items(prop, part_draw_as_items);
RNA_def_property_enum_funcs(prop, NULL, NULL, "rna_Particle_draw_as_itemf");
RNA_def_property_ui_text(prop, "Particle Drawing", "How particles are drawn in viewport");
RNA_def_property_update(prop, 0, "rna_Particle_redo");
- prop= RNA_def_property(srna, "ren_as", PROP_ENUM, PROP_NONE);
+ prop= RNA_def_property(srna, "render_type", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "ren_as");
RNA_def_property_enum_items(prop, part_ren_as_items);
RNA_def_property_enum_funcs(prop, NULL, NULL, "rna_Particle_ren_as_itemf");
@@ -1414,12 +1429,12 @@ static void rna_def_particle_settings(BlenderRNA *brna)
RNA_def_property_range(prop, 0, 45);
RNA_def_property_ui_text(prop, "Degrees", "How many degrees path has to curve to make another render segment");
- prop= RNA_def_property(srna, "adaptive_pix", PROP_INT, PROP_NONE);
+ prop= RNA_def_property(srna, "adaptive_pixel", PROP_INT, PROP_NONE);
RNA_def_property_int_sdna(prop, NULL, "adapt_pix");
RNA_def_property_range(prop, 0, 50);
RNA_def_property_ui_text(prop, "Pixel", "How many pixels path has to cover to make another render segment");
- prop= RNA_def_property(srna, "display", PROP_INT, PROP_NONE);
+ prop= RNA_def_property(srna, "draw_percentage", PROP_INT, PROP_NONE);
RNA_def_property_int_sdna(prop, NULL, "disp");
RNA_def_property_range(prop, 0, 100);
RNA_def_property_ui_text(prop, "Display", "Percentage of particles to display in 3D view");
@@ -1432,11 +1447,13 @@ static void rna_def_particle_settings(BlenderRNA *brna)
RNA_def_property_update(prop, 0, "rna_Particle_redo");
- //TODO: is this read only/internal?
+ // not used anywhere, why is this in DNA???
+#if 0
prop= RNA_def_property(srna, "rotate_from", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "rotfrom");
RNA_def_property_enum_items(prop, rot_from_items);
RNA_def_property_ui_text(prop, "Rotate From", "");
+#endif
prop= RNA_def_property(srna, "integrator", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_items(prop, integrator_type_items);
@@ -1471,7 +1488,7 @@ static void rna_def_particle_settings(BlenderRNA *brna)
RNA_def_property_enum_items(prop, bb_anim_items);
RNA_def_property_ui_text(prop, "Animate", "How to animate billboard textures");
- prop= RNA_def_property(srna, "billboard_split_offset", PROP_ENUM, PROP_NONE);
+ prop= RNA_def_property(srna, "billboard_offset_split", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "bb_split_offset");
RNA_def_property_enum_items(prop, bb_split_offset_items);
RNA_def_property_ui_text(prop, "Offset", "How to offset billboard textures");
@@ -1482,7 +1499,7 @@ static void rna_def_particle_settings(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Tilt", "Tilt of the billboards");
RNA_def_property_update(prop, 0, "rna_Particle_redo");
- prop= RNA_def_property(srna, "billboard_random_tilt", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "billboard_tilt_random", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "bb_rand_tilt");
RNA_def_property_range(prop, 0.0f, 1.0f);
RNA_def_property_ui_text(prop, "Random Tilt", "Random tilt of the billboards");
@@ -1497,11 +1514,11 @@ static void rna_def_particle_settings(BlenderRNA *brna)
RNA_def_property_update(prop, 0, "rna_Particle_redo");
/* simplification */
- prop= RNA_def_property(srna, "enable_simplify", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_simplify", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "simplify_flag", PART_SIMPLIFY_ENABLE);
RNA_def_property_ui_text(prop, "Child Simplification", "Remove child strands as the object becomes smaller on the screen");
- prop= RNA_def_property(srna, "viewport", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_simplify_viewport", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "simplify_flag", PART_SIMPLIFY_VIEWPORT);
RNA_def_property_ui_text(prop, "Viewport", "");
@@ -1545,7 +1562,7 @@ static void rna_def_particle_settings(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Lifetime", "Specify the life span of the particles");
RNA_def_property_update(prop, 0, "rna_Particle_reset");
- prop= RNA_def_property(srna, "random_lifetime", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "lifetime_random", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "randlife");
RNA_def_property_range(prop, 0.0f, 1.0f);
RNA_def_property_ui_text(prop, "Random", "Give the particle life a random variation");
@@ -1576,7 +1593,7 @@ static void rna_def_particle_settings(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Stiffness", "Hair stiffness for effectors");
RNA_def_property_update(prop, 0, "rna_Particle_redo");
- prop= RNA_def_property(srna, "amount", PROP_INT, PROP_UNSIGNED);
+ prop= RNA_def_property(srna, "count", PROP_INT, PROP_UNSIGNED);
RNA_def_property_int_sdna(prop, NULL, "totpart");
RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
/* This limit is for those freaks who have the machine power to handle it. */
@@ -1617,7 +1634,7 @@ static void rna_def_particle_settings(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Object", "Let the object give the particle a starting speed");
RNA_def_property_update(prop, 0, "rna_Particle_reset");
- prop= RNA_def_property(srna, "random_factor", PROP_FLOAT, PROP_NONE);
+ 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_range(prop, 0.0f, 200.0f);
RNA_def_property_ui_range(prop, 0, 100, 1, 3);
@@ -1650,7 +1667,7 @@ static void rna_def_particle_settings(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Reactor", "Let the vector away from the target particles location give the particle a starting speed");
RNA_def_property_update(prop, 0, "rna_Particle_reset");
- prop= RNA_def_property(srna, "object_aligned_factor", PROP_FLOAT, PROP_VELOCITY);
+ prop= RNA_def_property(srna, "object_align_factor", PROP_FLOAT, PROP_VELOCITY);
RNA_def_property_float_sdna(prop, NULL, "ob_vel");
RNA_def_property_array(prop, 3);
RNA_def_property_range(prop, -200.0f, 200.0f);
@@ -1671,13 +1688,13 @@ static void rna_def_particle_settings(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Phase", "Initial rotation phase");
RNA_def_property_update(prop, 0, "rna_Particle_reset");
- prop= RNA_def_property(srna, "random_rotation_factor", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "rotation_factor_random", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "randrotfac");
RNA_def_property_range(prop, 0.0f, 1.0f);
RNA_def_property_ui_text(prop, "Random Rotation", "Randomize rotation");
RNA_def_property_update(prop, 0, "rna_Particle_reset");
- prop= RNA_def_property(srna, "random_phase_factor", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "phase_factor_random", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "randphasefac");
RNA_def_property_range(prop, 0.0f, 1.0f);
RNA_def_property_ui_text(prop, "Random Phase", "Randomize rotation phase");
@@ -1697,7 +1714,7 @@ static void rna_def_particle_settings(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Size", "The size of the particles");
RNA_def_property_update(prop, 0, "rna_Particle_reset");
- prop= RNA_def_property(srna, "random_size", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "size_random", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "randsize");
RNA_def_property_range(prop, 0.0f, 1.0f);
RNA_def_property_ui_text(prop, "Random Size", "Give the particle size a random variation");
@@ -1724,14 +1741,14 @@ static void rna_def_particle_settings(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Brownian", "Specify the amount of Brownian motion");
RNA_def_property_update(prop, 0, "rna_Particle_reset");
- prop= RNA_def_property(srna, "damp_factor", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "damping", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "dampfac");
RNA_def_property_range(prop, 0.0f, 1.0f);
RNA_def_property_ui_text(prop, "Damp", "Specify the amount of damping");
RNA_def_property_update(prop, 0, "rna_Particle_reset");
/* random length */
- prop= RNA_def_property(srna, "random_length", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "length_random", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "randlength");
RNA_def_property_range(prop, 0.0f, 1.0f);
RNA_def_property_ui_text(prop, "Random Length", "Give path length a random variation");
@@ -1745,7 +1762,7 @@ static void rna_def_particle_settings(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Children Per Parent", "Amount of children/parent");
RNA_def_property_update(prop, 0, "rna_Particle_redo_child");
- prop= RNA_def_property(srna, "rendered_child_nbr", PROP_INT, PROP_NONE);
+ prop= RNA_def_property(srna, "rendered_child_count", PROP_INT, PROP_NONE);
RNA_def_property_int_sdna(prop, NULL, "ren_child_nbr");
RNA_def_property_range(prop, 0, 100000);
RNA_def_property_ui_range(prop, 0, 10000, 1, 0);
@@ -1764,7 +1781,7 @@ static void rna_def_particle_settings(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Child Size", "A multiplier for the child particle size");
RNA_def_property_update(prop, 0, "rna_Particle_redo_child");
- prop= RNA_def_property(srna, "child_random_size", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "child_size_random", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "childrandsize");
RNA_def_property_range(prop, 0.0f, 1.0f);
RNA_def_property_ui_text(prop, "Random Child Size", "Random variation to the size of the child particles");
@@ -1789,7 +1806,7 @@ static void rna_def_particle_settings(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Clump", "Amount of clumping");
RNA_def_property_update(prop, 0, "rna_Particle_redo_child");
- prop= RNA_def_property(srna, "clumppow", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "clump_shape", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "clumppow");
RNA_def_property_range(prop, -0.999f, 0.999f);
RNA_def_property_ui_text(prop, "Shape", "Shape of clumping");
@@ -1818,46 +1835,49 @@ static void rna_def_particle_settings(BlenderRNA *brna)
/* rough */
- prop= RNA_def_property(srna, "rough1", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "roughness_1", PROP_FLOAT, PROP_NONE);
+ RNA_def_property_float_sdna(prop, NULL, "rough1");
RNA_def_property_range(prop, 0.0f, 100000.0f);
RNA_def_property_ui_range(prop, 0.0f, 10.0f, 0.1, 3);
RNA_def_property_ui_text(prop, "Rough1", "Amount of location dependent rough");
RNA_def_property_update(prop, 0, "rna_Particle_redo_child");
- prop= RNA_def_property(srna, "rough1_size", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "roughness_1_size", PROP_FLOAT, PROP_NONE);
+ RNA_def_property_float_sdna(prop, NULL, "rough1_size");
RNA_def_property_range(prop, 0.01f, 100000.0f);
RNA_def_property_ui_range(prop, 0.01f, 10.0f, 0.1, 3);
RNA_def_property_ui_text(prop, "Size1", "Size of location dependent rough");
RNA_def_property_update(prop, 0, "rna_Particle_redo_child");
- prop= RNA_def_property(srna, "rough2", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "roughness_2", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "rough2");
RNA_def_property_range(prop, 0.0f, 100000.0f);
RNA_def_property_ui_range(prop, 0.0f, 10.0f, 0.1, 3);
RNA_def_property_ui_text(prop, "Rough2", "Amount of random rough");
RNA_def_property_update(prop, 0, "rna_Particle_redo_child");
- prop= RNA_def_property(srna, "rough2_size", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "roughness_2_size", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "rough2_size");
RNA_def_property_range(prop, 0.01f, 100000.0f);
RNA_def_property_ui_range(prop, 0.01f, 10.0f, 0.1, 3);
RNA_def_property_ui_text(prop, "Size2", "Size of random rough");
RNA_def_property_update(prop, 0, "rna_Particle_redo_child");
- prop= RNA_def_property(srna, "rough2_thres", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "roughness_2_threshold", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "rough2_thres");
RNA_def_property_range(prop, 0.0f, 1.0f);
RNA_def_property_ui_text(prop, "Threshold", "Amount of particles left untouched by random rough");
RNA_def_property_update(prop, 0, "rna_Particle_redo_child");
- prop= RNA_def_property(srna, "rough_endpoint", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "roughness_endpoint", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "rough_end");
RNA_def_property_range(prop, 0.0f, 100000.0f);
RNA_def_property_ui_range(prop, 0.0f, 10.0f, 0.1, 3);
RNA_def_property_ui_text(prop, "Rough Endpoint", "Amount of end point rough");
RNA_def_property_update(prop, 0, "rna_Particle_redo_child");
- prop= RNA_def_property(srna, "rough_end_shape", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "roughness_end_shape", PROP_FLOAT, PROP_NONE);
+ RNA_def_property_float_sdna(prop, NULL, "rough_end_shape");
RNA_def_property_range(prop, 0.0f, 10.0f);
RNA_def_property_ui_text(prop, "Shape", "Shape of end point rough");
RNA_def_property_update(prop, 0, "rna_Particle_redo_child");
@@ -1868,7 +1888,7 @@ static void rna_def_particle_settings(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Length", "Length of child paths");
RNA_def_property_update(prop, 0, "rna_Particle_redo_child");
- prop= RNA_def_property(srna, "child_length_thres", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "child_length_threshold", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "clength_thres");
RNA_def_property_range(prop, 0.0f, 1.0f);
RNA_def_property_ui_text(prop, "Threshold", "Amount of particles left untouched by child path length");
@@ -1943,7 +1963,8 @@ static void rna_def_particle_settings(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Dupli Group", "Show Objects in this Group in place of particles");
RNA_def_property_update(prop, 0, "rna_Particle_redo");
- prop= RNA_def_property(srna, "dupliweights", PROP_COLLECTION, PROP_NONE);
+ prop= RNA_def_property(srna, "dupli_weights", PROP_COLLECTION, PROP_NONE);
+ RNA_def_property_collection_sdna(prop, NULL, "dupliweights", NULL);
RNA_def_property_struct_type(prop, "ParticleDupliWeight");
RNA_def_property_ui_text(prop, "Dupli Group Weights", "Weights for all of the objects in the dupli group");
@@ -2037,12 +2058,13 @@ static void rna_def_particle_target(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Duration", "");
RNA_def_property_update(prop, 0, "rna_Particle_target_redo");
- prop= RNA_def_property(srna, "valid", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "is_valid", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", PTARGET_VALID);
RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
RNA_def_property_ui_text(prop, "Valid", "Keyed particles target is valid");
- prop= RNA_def_property(srna, "mode", PROP_ENUM, PROP_NONE);
+ prop= RNA_def_property(srna, "alliance", PROP_ENUM, PROP_NONE);
+ RNA_def_property_enum_sdna(prop, NULL, "mode");
RNA_def_property_enum_items(prop, mode_items);
RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
RNA_def_property_ui_text(prop, "Mode", "");
@@ -2088,12 +2110,12 @@ static void rna_def_particle_system(BlenderRNA *brna)
RNA_def_property_update(prop, 0, "rna_Particle_reset");
/* hair */
- prop= RNA_def_property(srna, "global_hair", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "is_global_hair", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", PSYS_GLOBAL_HAIR);
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
RNA_def_property_ui_text(prop, "Global Hair", "Hair keys are in global coordinate space");
- prop= RNA_def_property(srna, "hair_dynamics", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_hair_dynamics", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", PSYS_HAIR_DYNAMICS);
RNA_def_property_ui_text(prop, "Hair Dynamics", "Enable hair dynamics using cloth simulation");
RNA_def_property_update(prop, 0, "rna_Particle_hair_dynamics");
@@ -2119,7 +2141,7 @@ static void rna_def_particle_system(BlenderRNA *brna)
RNA_def_property_update(prop, 0, "rna_Particle_reset");
/* keyed */
- prop= RNA_def_property(srna, "keyed_timing", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_keyed_timing", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", PSYS_KEYED_TIMING);
RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
RNA_def_property_ui_text(prop, "Keyed timing", "Use key times");
@@ -2170,7 +2192,7 @@ static void rna_def_particle_system(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Vertex Group Density", "Vertex group to control density");
RNA_def_property_update(prop, 0, "rna_Particle_reset");
- prop= RNA_def_property(srna, "vertex_group_density_negate", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "invert_vertex_group_density", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "vg_neg", (1 << PSYS_VG_DENSITY));
RNA_def_property_ui_text(prop, "Vertex Group Density Negate", "Negate the effect of the density vertex group");
RNA_def_property_update(prop, 0, "rna_Particle_reset");
@@ -2180,7 +2202,7 @@ static void rna_def_particle_system(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Vertex Group Velocity", "Vertex group to control velocity");
RNA_def_property_update(prop, 0, "rna_Particle_reset");
- prop= RNA_def_property(srna, "vertex_group_velocity_negate", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "invert_vertex_group_velocity", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "vg_neg", (1 << PSYS_VG_VEL));
RNA_def_property_ui_text(prop, "Vertex Group Velocity Negate", "Negate the effect of the velocity vertex group");
RNA_def_property_update(prop, 0, "rna_Particle_reset");
@@ -2190,7 +2212,7 @@ static void rna_def_particle_system(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Vertex Group Length", "Vertex group to control length");
RNA_def_property_update(prop, 0, "rna_Particle_redo");
- prop= RNA_def_property(srna, "vertex_group_length_negate", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "invert_vertex_group_length", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "vg_neg", (1 << PSYS_VG_LENGTH));
RNA_def_property_ui_text(prop, "Vertex Group Length Negate", "Negate the effect of the length vertex group");
RNA_def_property_update(prop, 0, "rna_Particle_redo");
@@ -2200,7 +2222,7 @@ static void rna_def_particle_system(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Vertex Group Clump", "Vertex group to control clump");
RNA_def_property_update(prop, 0, "rna_Particle_redo_child");
- prop= RNA_def_property(srna, "vertex_group_clump_negate", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "invert_vertex_group_clump", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "vg_neg", (1 << PSYS_VG_CLUMP));
RNA_def_property_ui_text(prop, "Vertex Group Clump Negate", "Negate the effect of the clump vertex group");
RNA_def_property_update(prop, 0, "rna_Particle_redo_child");
@@ -2210,27 +2232,27 @@ static void rna_def_particle_system(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Vertex Group Kink", "Vertex group to control kink");
RNA_def_property_update(prop, 0, "rna_Particle_redo_child");
- prop= RNA_def_property(srna, "vertex_group_kink_negate", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "invert_vertex_group_kink", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "vg_neg", (1 << PSYS_VG_KINK));
RNA_def_property_ui_text(prop, "Vertex Group Kink Negate", "Negate the effect of the kink vertex group");
RNA_def_property_update(prop, 0, "rna_Particle_redo_child");
- prop= RNA_def_property(srna, "vertex_group_roughness1", PROP_STRING, PROP_NONE);
+ prop= RNA_def_property(srna, "vertex_group_roughness_1", PROP_STRING, PROP_NONE);
RNA_def_property_string_funcs(prop, "rna_ParticleVGroup_name_get_5", "rna_ParticleVGroup_name_len_5", "rna_ParticleVGroup_name_set_5");
RNA_def_property_ui_text(prop, "Vertex Group Roughness 1", "Vertex group to control roughness 1");
RNA_def_property_update(prop, 0, "rna_Particle_redo_child");
- prop= RNA_def_property(srna, "vertex_group_roughness1_negate", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "invert_vertex_group_roughness_1", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "vg_neg", (1 << PSYS_VG_ROUGH1));
RNA_def_property_ui_text(prop, "Vertex Group Roughness 1 Negate", "Negate the effect of the roughness 1 vertex group");
RNA_def_property_update(prop, 0, "rna_Particle_redo_child");
- prop= RNA_def_property(srna, "vertex_group_roughness2", PROP_STRING, PROP_NONE);
+ prop= RNA_def_property(srna, "vertex_group_roughness_2", PROP_STRING, PROP_NONE);
RNA_def_property_string_funcs(prop, "rna_ParticleVGroup_name_get_6", "rna_ParticleVGroup_name_len_6", "rna_ParticleVGroup_name_set_6");
RNA_def_property_ui_text(prop, "Vertex Group Roughness 2", "Vertex group to control roughness 2");
RNA_def_property_update(prop, 0, "rna_Particle_redo_child");
- prop= RNA_def_property(srna, "vertex_group_roughness2_negate", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "invert_vertex_group_roughness_2", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "vg_neg", (1 << PSYS_VG_ROUGH2));
RNA_def_property_ui_text(prop, "Vertex Group Roughness 2 Negate", "Negate the effect of the roughness 2 vertex group");
RNA_def_property_update(prop, 0, "rna_Particle_redo_child");
@@ -2240,7 +2262,7 @@ static void rna_def_particle_system(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Vertex Group Roughness End", "Vertex group to control roughness end");
RNA_def_property_update(prop, 0, "rna_Particle_redo_child");
- prop= RNA_def_property(srna, "vertex_group_roughness_end_negate", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "invert_vertex_group_roughness_end", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "vg_neg", (1 << PSYS_VG_ROUGHE));
RNA_def_property_ui_text(prop, "Vertex Group Roughness End Negate", "Negate the effect of the roughness end vertex group");
RNA_def_property_update(prop, 0, "rna_Particle_redo_child");
@@ -2250,7 +2272,7 @@ static void rna_def_particle_system(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Vertex Group Size", "Vertex group to control size");
RNA_def_property_update(prop, 0, "rna_Particle_reset");
- prop= RNA_def_property(srna, "vertex_group_size_negate", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "invert_vertex_group_size", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "vg_neg", (1 << PSYS_VG_SIZE));
RNA_def_property_ui_text(prop, "Vertex Group Size Negate", "Negate the effect of the size vertex group");
RNA_def_property_update(prop, 0, "rna_Particle_reset");
@@ -2260,7 +2282,7 @@ static void rna_def_particle_system(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Vertex Group Tangent", "Vertex group to control tangent");
RNA_def_property_update(prop, 0, "rna_Particle_reset");
- prop= RNA_def_property(srna, "vertex_group_tangent_negate", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "invert_vertex_group_tangent", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "vg_neg", (1 << PSYS_VG_TAN));
RNA_def_property_ui_text(prop, "Vertex Group Tangent Negate", "Negate the effect of the tangent vertex group");
RNA_def_property_update(prop, 0, "rna_Particle_reset");
@@ -2270,7 +2292,7 @@ static void rna_def_particle_system(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Vertex Group Rotation", "Vertex group to control rotation");
RNA_def_property_update(prop, 0, "rna_Particle_reset");
- prop= RNA_def_property(srna, "vertex_group_rotation_negate", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "invert_vertex_group_rotation", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "vg_neg", (1 << PSYS_VG_ROT));
RNA_def_property_ui_text(prop, "Vertex Group Rotation Negate", "Negate the effect of the rotation vertex group");
RNA_def_property_update(prop, 0, "rna_Particle_reset");
@@ -2280,7 +2302,7 @@ static void rna_def_particle_system(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Vertex Group Field", "Vertex group to control field");
RNA_def_property_update(prop, 0, "rna_Particle_reset");
- prop= RNA_def_property(srna, "vertex_group_field_negate", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "invert_vertex_group_field", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "vg_neg", (1 << PSYS_VG_EFFECTOR));
RNA_def_property_ui_text(prop, "Vertex Group Field Negate", "Negate the effect of the field vertex group");
RNA_def_property_update(prop, 0, "rna_Particle_reset");
@@ -2292,7 +2314,7 @@ static void rna_def_particle_system(BlenderRNA *brna)
RNA_def_property_struct_type(prop, "PointCache");
RNA_def_property_ui_text(prop, "Point Cache", "");
- prop= RNA_def_property(srna, "multiple_caches", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "has_multiple_caches", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_funcs(prop, "rna_ParticleSystem_multiple_caches_get", NULL);
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
RNA_def_property_ui_text(prop, "Multiple Caches", "Particle system has multiple point caches");
@@ -2305,12 +2327,12 @@ static void rna_def_particle_system(BlenderRNA *brna)
RNA_def_property_update(prop, 0, "rna_Particle_redo");
/* hair or cache editing */
- prop= RNA_def_property(srna, "editable", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "is_editable", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_funcs(prop, "rna_ParticleSystem_editable_get", NULL);
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
RNA_def_property_ui_text(prop, "Editable", "Particle system can be edited in particle mode");
- prop= RNA_def_property(srna, "edited", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "is_edited", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_funcs(prop, "rna_ParticleSystem_edited_get", NULL);
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
RNA_def_property_ui_text(prop, "Edited", "Particle system has been edited in particle mode");
diff --git a/source/blender/makesrna/intern/rna_pose.c b/source/blender/makesrna/intern/rna_pose.c
index 37b453ad7a4..e4a3be023ca 100644
--- a/source/blender/makesrna/intern/rna_pose.c
+++ b/source/blender/makesrna/intern/rna_pose.c
@@ -37,7 +37,6 @@
#include "DNA_scene_types.h"
#include "BLI_math.h"
-#include "BLI_ghash.h"
#include "WM_types.h"
@@ -49,6 +48,10 @@
#include "DNA_userdef_types.h"
+#include "MEM_guardedalloc.h"
+
+#include "BLI_ghash.h"
+
#include "BKE_context.h"
#include "BKE_constraint.h"
#include "BKE_depsgraph.h"
@@ -59,6 +62,8 @@
#include "MEM_guardedalloc.h"
+#include "WM_api.h"
+
#include "RNA_access.h"
static void rna_Pose_update(Main *bmain, Scene *scene, PointerRNA *ptr)
@@ -117,7 +122,7 @@ static void rna_BoneGroup_color_set_set(PointerRNA *ptr, int value)
}
}
-static IDProperty *rna_PoseBone_idproperties(PointerRNA *ptr, int create)
+static IDProperty *rna_PoseBone_idprops(PointerRNA *ptr, int create)
{
bPoseChannel *pchan= ptr->data;
@@ -439,12 +444,17 @@ static bConstraint *rna_PoseChannel_constraints_new(bPoseChannel *pchan, int typ
return add_pose_constraint(NULL, pchan, NULL, type);
}
-static int rna_PoseChannel_constraints_remove(bPoseChannel *pchan, int index)
+static void rna_PoseChannel_constraints_remove(ID *id, bPoseChannel *pchan, ReportList *reports, bConstraint *con)
{
+ if(BLI_findindex(&pchan->constraints, con) == -1) {
+ BKE_reportf(reports, RPT_ERROR, "Constraint '%s' not found in pose bone '%s'.", con->name, pchan->name);
+ return;
+ }
+
// TODO
- //ED_object_constraint_set_active(object, NULL);
- //WM_main_add_notifier(NC_OBJECT|ND_CONSTRAINT, object);
- return remove_constraint_index(&pchan->constraints, index);
+ //ED_object_constraint_set_active(id, NULL);
+ WM_main_add_notifier(NC_OBJECT|ND_CONSTRAINT, id);
+ remove_constraint(&pchan->constraints, con);
}
static int rna_PoseChannel_proxy_editable(PointerRNA *ptr)
@@ -649,12 +659,10 @@ 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.");
- /* return type */
- parm= RNA_def_boolean(func, "success", 0, "Success", "Removed the constraint successfully.");
- RNA_def_function_return(func, parm);
- /* object to add */
- parm= RNA_def_int(func, "index", 0, 0, INT_MAX, "Index", "", 0, INT_MAX);
- RNA_def_property_flag(parm, PROP_REQUIRED);
+ 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);
}
static void rna_def_pose_channel(BlenderRNA *brna)
@@ -682,7 +690,7 @@ static void rna_def_pose_channel(BlenderRNA *brna)
RNA_def_struct_sdna(srna, "bPoseChannel");
RNA_def_struct_ui_text(srna, "Pose Bone", "Channel defining pose data for a bone in a Pose");
RNA_def_struct_path_func(srna, "rna_PoseBone_path");
- RNA_def_struct_idproperties_func(srna, "rna_PoseBone_idproperties");
+ RNA_def_struct_idprops_func(srna, "rna_PoseBone_idprops");
/* Bone Constraints */
prop= RNA_def_property(srna, "constraints", PROP_COLLECTION, PROP_NONE);
@@ -803,55 +811,55 @@ static void rna_def_pose_channel(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Pose Tail Position", "Location of tail of the channel's bone");
/* IK Settings */
- prop= RNA_def_property(srna, "has_ik", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "is_in_ik_chain", PROP_BOOLEAN, PROP_NONE);
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");
- prop= RNA_def_property(srna, "ik_dof_x", PROP_BOOLEAN, PROP_NONE);
- RNA_def_property_boolean_negative_sdna(prop, NULL, "ikflag", BONE_IK_NO_XDOF);
- RNA_def_property_ui_text(prop, "IK X DoF", "Allow movement around the X axis");
+ 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");
- prop= RNA_def_property(srna, "ik_dof_y", PROP_BOOLEAN, PROP_NONE);
- RNA_def_property_boolean_negative_sdna(prop, NULL, "ikflag", BONE_IK_NO_YDOF);
- RNA_def_property_ui_text(prop, "IK Y DoF", "Allow movement around the Y axis");
+ 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");
- prop= RNA_def_property(srna, "ik_dof_z", PROP_BOOLEAN, PROP_NONE);
- RNA_def_property_boolean_negative_sdna(prop, NULL, "ikflag", BONE_IK_NO_ZDOF);
- RNA_def_property_ui_text(prop, "IK Z DoF", "Allow movement around the Z axis");
+ 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");
- prop= RNA_def_property(srna, "ik_limit_x", PROP_BOOLEAN, PROP_NONE);
+ 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");
- prop= RNA_def_property(srna, "ik_limit_y", PROP_BOOLEAN, PROP_NONE);
+ 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");
- prop= RNA_def_property(srna, "ik_limit_z", PROP_BOOLEAN, PROP_NONE);
+ 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");
- prop= RNA_def_property(srna, "ik_rot_control", PROP_BOOLEAN, PROP_NONE);
+ 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");
- prop= RNA_def_property(srna, "ik_lin_control", PROP_BOOLEAN, PROP_NONE);
+ 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");
@@ -927,14 +935,14 @@ static void rna_def_pose_channel(BlenderRNA *brna)
RNA_def_property_editable_func(prop, "rna_PoseChannel_proxy_editable");
RNA_def_property_update(prop, NC_OBJECT|ND_POSE, "rna_Pose_IK_update");
- prop= RNA_def_property(srna, "ik_rot_weight", PROP_FLOAT, PROP_NONE);
+ 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");
- prop= RNA_def_property(srna, "ik_lin_weight", PROP_FLOAT, PROP_NONE);
+ 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");
@@ -1043,13 +1051,13 @@ static void rna_def_pose_itasc(BlenderRNA *brna)
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");
- prop= RNA_def_property(srna, "num_iter", PROP_INT, PROP_NONE);
+ 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");
- prop= RNA_def_property(srna, "num_step", PROP_INT, PROP_NONE);
+ 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", "Divides the frame interval into this many steps");
@@ -1061,24 +1069,24 @@ static void rna_def_pose_itasc(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Mode", NULL);
RNA_def_property_update(prop, NC_OBJECT|ND_POSE, "rna_Itasc_update_rebuild");
- prop= RNA_def_property(srna, "reiteration", PROP_ENUM, PROP_NONE);
+ prop= RNA_def_property(srna, "reiteration_method", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_bitflag_sdna(prop, NULL, "flag");
RNA_def_property_enum_items(prop, prop_itasc_reiteration_items);
RNA_def_property_ui_text(prop, "Reiteration", "Defines if the solver is allowed to reiterate (converges until precision is met) on none, first or all frames");
RNA_def_property_update(prop, NC_OBJECT|ND_POSE, "rna_Itasc_update");
- prop= RNA_def_property(srna, "auto_step", PROP_BOOLEAN, PROP_NONE);
+ 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");
- prop= RNA_def_property(srna, "min_step", PROP_FLOAT, PROP_NONE);
+ 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");
- prop= RNA_def_property(srna, "max_step", PROP_FLOAT, PROP_NONE);
+ 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");
@@ -1090,7 +1098,7 @@ static void rna_def_pose_itasc(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Feedback", "Feedback coefficient for error correction. Average response time=1/feedback. Default=20");
RNA_def_property_update(prop, NC_OBJECT|ND_POSE, "rna_Itasc_update");
- prop= RNA_def_property(srna, "max_velocity", PROP_FLOAT, PROP_NONE);
+ 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");
@@ -1102,13 +1110,13 @@ static void rna_def_pose_itasc(BlenderRNA *brna)
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");
- prop= RNA_def_property(srna, "dampmax", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "damping_max", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "dampmax");
RNA_def_property_range(prop, 0.0f,1.0f);
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");
- prop= RNA_def_property(srna, "dampeps", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "damping_epsilon", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "dampeps");
RNA_def_property_range(prop, 0.0f,1.0f);
RNA_def_property_ui_text(prop, "Epsilon", "Singular value under which damping is progressively applied. Higher values=more stability, less reactivity. Default=0.1");
@@ -1132,6 +1140,34 @@ static void rna_def_pose_ikparam(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "IK Solver", "IK solver for which these parameters are defined, 0 for Legacy, 1 for iTaSC");
}
+/* pose.bone_groups */
+static void rna_def_bone_groups(BlenderRNA *brna, PropertyRNA *cprop)
+{
+ StructRNA *srna;
+ PropertyRNA *prop;
+
+// FunctionRNA *func;
+// PropertyRNA *parm;
+
+ RNA_def_property_srna(cprop, "BoneGroups");
+ srna= RNA_def_struct(brna, "BoneGroups", NULL);
+ RNA_def_struct_sdna(srna, "bPose");
+ RNA_def_struct_ui_text(srna, "Bone Groups", "Collection of bone groups");
+
+ prop= RNA_def_property(srna, "active", PROP_POINTER, PROP_NONE);
+ RNA_def_property_struct_type(prop, "BoneGroup");
+ RNA_def_property_flag(prop, PROP_EDITABLE);
+ 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");
+
+ 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");
+}
+
static void rna_def_pose(BlenderRNA *brna)
{
StructRNA *srna;
@@ -1153,19 +1189,7 @@ static void rna_def_pose(BlenderRNA *brna)
RNA_def_property_collection_sdna(prop, NULL, "agroups", NULL);
RNA_def_property_struct_type(prop, "BoneGroup");
RNA_def_property_ui_text(prop, "Bone Groups", "Groups of the bones");
-
- prop= RNA_def_property(srna, "active_bone_group", PROP_POINTER, PROP_NONE);
- RNA_def_property_struct_type(prop, "BoneGroup");
- RNA_def_property_flag(prop, PROP_EDITABLE);
- 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");
-
- prop= RNA_def_property(srna, "active_bone_group_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_bone_groups(brna, prop);
/* ik solvers */
prop= RNA_def_property(srna, "ik_solver", PROP_ENUM, PROP_NONE);
diff --git a/source/blender/makesrna/intern/rna_pose_api.c b/source/blender/makesrna/intern/rna_pose_api.c
index 922fa285f84..4560fa426f1 100644
--- a/source/blender/makesrna/intern/rna_pose_api.c
+++ b/source/blender/makesrna/intern/rna_pose_api.c
@@ -41,8 +41,16 @@
/* #include "DNA_anim_types.h" */
#include "DNA_action_types.h" /* bPose */
+#include "BKE_armature.h"
+static float rna_PoseBone_do_envelope(bPoseChannel *chan, float *vec)
+{
+ Bone *bone = chan->bone;
+
+ float scale = (bone->flag & BONE_MULT_VG_ENV) == BONE_MULT_VG_ENV ? bone->weight : 1.0f;
+ return distfactor_to_bone(vec, chan->pose_head, chan->pose_tail, bone->rad_head * scale, bone->rad_tail * scale, bone->dist * scale);
+}
#else
void RNA_api_pose(StructRNA *srna)
@@ -53,8 +61,16 @@ void RNA_api_pose(StructRNA *srna)
void RNA_api_pose_channel(StructRNA *srna)
{
-// FunctionRNA *func;
-// PropertyRNA *parm;
+ PropertyRNA *parm;
+ FunctionRNA *func;
+
+ 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);
+ 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);
+ RNA_def_function_return(func, parm);
}
diff --git a/source/blender/makesrna/intern/rna_property.c b/source/blender/makesrna/intern/rna_property.c
index 7bcb58ea28d..13f913b978b 100644
--- a/source/blender/makesrna/intern/rna_property.c
+++ b/source/blender/makesrna/intern/rna_property.c
@@ -121,7 +121,7 @@ void RNA_def_gameproperty(BlenderRNA *brna)
RNA_def_property_enum_funcs(prop, NULL, "rna_GameProperty_type_set", NULL);
RNA_def_property_update(prop, NC_LOGIC, NULL);
- prop= RNA_def_property(srna, "debug", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_debug", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", PROP_DEBUG);
RNA_def_property_ui_text(prop, "Debug", "Print debug information for this property");
RNA_def_property_update(prop, NC_LOGIC, NULL);
diff --git a/source/blender/makesrna/intern/rna_render.c b/source/blender/makesrna/intern/rna_render.c
index d00507e8bcf..e6b86ae8766 100644
--- a/source/blender/makesrna/intern/rna_render.c
+++ b/source/blender/makesrna/intern/rna_render.c
@@ -277,11 +277,11 @@ static void rna_def_render_engine(BlenderRNA *brna)
RNA_def_property_string_sdna(prop, NULL, "type->name");
RNA_def_property_flag(prop, PROP_REGISTER);
- prop= RNA_def_property(srna, "bl_preview", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "bl_use_preview", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "type->flag", RE_DO_PREVIEW);
RNA_def_property_flag(prop, PROP_REGISTER_OPTIONAL);
- prop= RNA_def_property(srna, "bl_postprocess", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "bl_use_postprocess", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_negative_sdna(prop, NULL, "type->flag", RE_DO_ALL);
RNA_def_property_flag(prop, PROP_REGISTER_OPTIONAL);
@@ -291,8 +291,8 @@ static void rna_def_render_engine(BlenderRNA *brna)
static void rna_def_render_result(BlenderRNA *brna)
{
StructRNA *srna;
- PropertyRNA *prop;
FunctionRNA *func;
+ PropertyRNA *parm;
srna= RNA_def_struct(brna, "RenderResult", NULL);
RNA_def_struct_ui_text(srna, "Render Result", "Result of rendering, including all layers and passes");
@@ -300,22 +300,22 @@ static void rna_def_render_result(BlenderRNA *brna)
func= RNA_def_function(srna, "load_from_file", "RE_result_load_from_file");
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);
- prop= RNA_def_string(func, "filename", "", 0, "Filename", "Filename to load into this render tile, must be no smaller then the render result");
- RNA_def_property_flag(prop, PROP_REQUIRED);
+ parm= RNA_def_string_file_name(func, "filename", "", FILE_MAX, "File Name", "Filename to load into this render tile, must be no smaller then the render result");
+ RNA_def_property_flag(parm, PROP_REQUIRED);
RNA_define_verify_sdna(0);
- prop= RNA_def_property(srna, "resolution_x", PROP_INT, PROP_NONE);
- RNA_def_property_int_sdna(prop, NULL, "rectx");
- RNA_def_property_clear_flag(prop, PROP_EDITABLE);
+ parm= RNA_def_property(srna, "resolution_x", PROP_INT, PROP_NONE);
+ RNA_def_property_int_sdna(parm, NULL, "rectx");
+ RNA_def_property_clear_flag(parm, PROP_EDITABLE);
- prop= RNA_def_property(srna, "resolution_y", PROP_INT, PROP_NONE);
- RNA_def_property_int_sdna(prop, NULL, "recty");
- RNA_def_property_clear_flag(prop, PROP_EDITABLE);
+ parm= RNA_def_property(srna, "resolution_y", PROP_INT, PROP_NONE);
+ RNA_def_property_int_sdna(parm, NULL, "recty");
+ RNA_def_property_clear_flag(parm, PROP_EDITABLE);
- prop= RNA_def_property(srna, "layers", PROP_COLLECTION, PROP_NONE);
- RNA_def_property_struct_type(prop, "RenderLayer");
- RNA_def_property_collection_funcs(prop, "rna_RenderResult_layers_begin", "rna_iterator_listbase_next", "rna_iterator_listbase_end", "rna_iterator_listbase_get", 0, 0, 0);
+ parm= RNA_def_property(srna, "layers", PROP_COLLECTION, PROP_NONE);
+ RNA_def_property_struct_type(parm, "RenderLayer");
+ RNA_def_property_collection_funcs(parm, "rna_RenderResult_layers_begin", "rna_iterator_listbase_next", "rna_iterator_listbase_end", "rna_iterator_listbase_get", 0, 0, 0);
RNA_define_verify_sdna(1);
}
diff --git a/source/blender/makesrna/intern/rna_rna.c b/source/blender/makesrna/intern/rna_rna.c
index d3c81e3f324..81b0df1d840 100644
--- a/source/blender/makesrna/intern/rna_rna.c
+++ b/source/blender/makesrna/intern/rna_rna.c
@@ -53,7 +53,7 @@ EnumPropertyItem property_unit_items[] = {
{0, NULL, 0, NULL, NULL}};
#ifdef RNA_RUNTIME
-
+#include "MEM_guardedalloc.h"
#include "BLI_ghash.h"
/* Struct */
@@ -201,7 +201,7 @@ static void rna_Struct_properties_next(CollectionPropertyIterator *iter)
/* try id properties */
if(!iter->valid) {
- group= RNA_struct_idproperties(&iter->builtin_parent, 0);
+ group= RNA_struct_idprops(&iter->builtin_parent, 0);
if(group) {
rna_iterator_listbase_end(iter);
@@ -335,7 +335,7 @@ PointerRNA rna_builtin_properties_lookup_string(PointerRNA *ptr, const char *key
if(ptr->data) {
IDProperty *group, *idp;
- group= RNA_struct_idproperties(ptr, 0);
+ group= RNA_struct_idprops(ptr, 0);
if(group) {
for(idp=group->data.group.first; idp; idp=idp->next) {
@@ -493,6 +493,13 @@ static int rna_Property_registered_optional_get(PointerRNA *ptr)
return prop->flag & PROP_REGISTER_OPTIONAL;
}
+static int rna_Property_runtime_get(PointerRNA *ptr)
+{
+ PropertyRNA *prop= (PropertyRNA*)ptr->data;
+ return prop->flag & PROP_RUNTIME;
+}
+
+
static int rna_BoolProperty_default_get(PointerRNA *ptr)
{
PropertyRNA *prop= (PropertyRNA*)ptr->data;
@@ -811,6 +818,12 @@ static int rna_Function_registered_optional_get(PointerRNA *ptr)
return func->flag & FUNC_REGISTER_OPTIONAL;
}
+static int rna_Function_no_self_get(PointerRNA *ptr)
+{
+ FunctionRNA *func= (FunctionRNA*)ptr->data;
+ return !(func->flag & FUNC_NO_SELF);
+}
+
/* Blender RNA */
static void rna_BlenderRNA_structs_begin(CollectionPropertyIterator *iter, PointerRNA *ptr)
@@ -998,20 +1011,25 @@ static void rna_def_property(BlenderRNA *brna)
RNA_def_property_boolean_funcs(prop, "rna_Property_is_never_none_get", NULL);
RNA_def_property_ui_text(prop, "Never None", "True when this value can't be set to None");
- prop= RNA_def_property(srna, "use_output", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "is_output", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
RNA_def_property_boolean_funcs(prop, "rna_Property_use_output_get", NULL);
RNA_def_property_ui_text(prop, "Return", "True when this property is an output value from an RNA function");
- prop= RNA_def_property(srna, "registered", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "is_registered", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
RNA_def_property_boolean_funcs(prop, "rna_Property_registered_get", NULL);
RNA_def_property_ui_text(prop, "Registered", "Property is registered as part of type registration");
- prop= RNA_def_property(srna, "registered_optional", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "is_registered_optional", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
RNA_def_property_boolean_funcs(prop, "rna_Property_registered_optional_get", NULL);
RNA_def_property_ui_text(prop, "Registered Optionally", "Property is optionally registered as part of type registration");
+
+ prop= RNA_def_property(srna, "is_runtime", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_clear_flag(prop, PROP_EDITABLE);
+ RNA_def_property_boolean_funcs(prop, "rna_Property_runtime_get", NULL);
+ RNA_def_property_ui_text(prop, "Read Only", "Property is editable through RNA");
}
static void rna_def_function(BlenderRNA *brna)
@@ -1040,15 +1058,20 @@ static void rna_def_function(BlenderRNA *brna)
RNA_def_property_collection_funcs(prop, "rna_Function_parameters_begin", "rna_iterator_listbase_next", "rna_iterator_listbase_end", "rna_iterator_listbase_get", 0, 0, 0);
RNA_def_property_ui_text(prop, "Parameters", "Parameters for the function");
- prop= RNA_def_property(srna, "registered", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "is_registered", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
RNA_def_property_boolean_funcs(prop, "rna_Function_registered_get", NULL);
RNA_def_property_ui_text(prop, "Registered", "Function is registered as callback as part of type registration");
- prop= RNA_def_property(srna, "registered_optional", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "is_registered_optional", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
RNA_def_property_boolean_funcs(prop, "rna_Function_registered_optional_get", NULL);
RNA_def_property_ui_text(prop, "Registered Optionally", "Function is optionally registered as callback part of type registration");
+
+ prop= RNA_def_property(srna, "use_self", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_clear_flag(prop, PROP_EDITABLE);
+ RNA_def_property_boolean_funcs(prop, "rna_Function_no_self_get", NULL);
+ RNA_def_property_ui_text(prop, "No Self", "Function does not pass its self as an argument (becomes a class method in python)");
}
static void rna_def_number_property(StructRNA *srna, PropertyType type)
@@ -1151,7 +1174,7 @@ static void rna_def_string_property(StructRNA *srna)
RNA_def_property_string_funcs(prop, "rna_StringProperty_default_get", "rna_StringProperty_default_length", NULL);
RNA_def_property_ui_text(prop, "Default", "string default value");
- prop= RNA_def_property(srna, "max_length", PROP_INT, PROP_UNSIGNED);
+ prop= RNA_def_property(srna, "length_max", PROP_INT, PROP_UNSIGNED);
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
RNA_def_property_int_funcs(prop, "rna_StringProperty_max_length_get", NULL, NULL);
RNA_def_property_ui_text(prop, "Maximum Length", "Maximum length of the string, 0 means unlimited");
diff --git a/source/blender/makesrna/intern/rna_scene.c b/source/blender/makesrna/intern/rna_scene.c
index 8b5b36f93d3..e434fad5ff1 100644
--- a/source/blender/makesrna/intern/rna_scene.c
+++ b/source/blender/makesrna/intern/rna_scene.c
@@ -151,6 +151,8 @@ EnumPropertyItem image_type_items[] = {
#include "DNA_object_types.h"
#include "DNA_mesh_types.h"
+#include "MEM_guardedalloc.h"
+
#include "BKE_context.h"
#include "BKE_global.h"
#include "BKE_image.h"
@@ -163,6 +165,7 @@ EnumPropertyItem image_type_items[] = {
#include "BKE_mesh.h"
#include "BKE_sound.h"
#include "BKE_screen.h"
+#include "BKE_animsys.h"
#include "BLI_threads.h"
#include "BLI_editVert.h"
@@ -208,7 +211,10 @@ static Base *rna_Scene_object_link(Scene *scene, bContext *C, ReportList *report
ob->recalc |= OB_RECALC_ALL;
- DAG_scene_sort(G.main, scene);
+ /* slows down importers too much, run scene.update() */
+ /* DAG_scene_sort(G.main, scene); */
+
+ WM_main_add_notifier(NC_SCENE|ND_OB_ACTIVE, scene);
return base;
}
@@ -642,6 +648,22 @@ static void rna_RenderSettings_active_layer_index_range(PointerRNA *ptr, int *mi
*max= MAX2(0, *max);
}
+static PointerRNA rna_RenderSettings_active_layer_get(PointerRNA *ptr)
+{
+ RenderData *rd= (RenderData*)ptr->data;
+ SceneRenderLayer *srl = BLI_findlink(&rd->layers, rd->actlay);
+
+ return rna_pointer_inherit_refine(ptr, &RNA_SceneRenderLayer, srl);
+}
+
+static void rna_RenderSettings_active_layer_set(PointerRNA *ptr, PointerRNA value)
+{
+ RenderData *rd= (RenderData*)ptr->data;
+ SceneRenderLayer *srl= (SceneRenderLayer*)value.data;
+
+ rd->actlay = BLI_findindex(&rd->layers, srl);
+}
+
static void rna_RenderSettings_engine_set(PointerRNA *ptr, int value)
{
RenderData *rd= (RenderData*)ptr->data;
@@ -918,6 +940,23 @@ static void rna_TimeLine_remove(Scene *scene, ReportList *reports, TimeMarker *m
MEM_freeN(marker);
}
+static KeyingSet *rna_Scene_keying_set_new(Scene *sce, ReportList *reports, char name[])
+{
+ KeyingSet *ks= NULL;
+
+ /* call the API func, and set the active keyingset index */
+ ks= BKE_keyingset_add(&sce->keyingsets, name, KEYINGSET_ABSOLUTE, 0);
+
+ if (ks) {
+ sce->active_keyingset= BLI_countlist(&sce->keyingsets);
+ return ks;
+ }
+ else {
+ BKE_report(reports, RPT_ERROR, "Keying Set could not be added.");
+ return NULL;
+ }
+}
+
#else
static void rna_def_transform_orientation(BlenderRNA *brna)
@@ -985,7 +1024,7 @@ static void rna_def_tool_settings(BlenderRNA *brna)
RNA_def_property_struct_type(prop, "Sculpt");
RNA_def_property_ui_text(prop, "Sculpt", "");
- prop = RNA_def_property(srna, "auto_normalize", PROP_BOOLEAN, PROP_NONE);
+ prop = RNA_def_property(srna, "use_auto_normalize", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "auto_normalize", 1);
RNA_def_property_ui_text(prop, "WPaint Auto-Normalize",
"Ensure all bone-deforming vertex groups add up to 1.0 while "
@@ -1008,19 +1047,19 @@ static void rna_def_tool_settings(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Particle Edit", "");
/* Transform */
- prop= RNA_def_property(srna, "proportional_editing", PROP_ENUM, PROP_NONE);
+ prop= RNA_def_property(srna, "proportional_edit", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "proportional");
RNA_def_property_enum_items(prop, proportional_editing_items);
RNA_def_property_ui_text(prop, "Proportional Editing", "Proportional editing mode");
RNA_def_property_update(prop, NC_SCENE|ND_TOOLSETTINGS, NULL); /* header redraw */
- prop= RNA_def_property(srna, "proportional_editing_objects", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_proportional_edit_objects", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "proportional_objects", 0);
RNA_def_property_ui_text(prop, "Proportional Editing Objects", "Proportional editing object mode");
RNA_def_property_ui_icon(prop, ICON_PROP_OFF, 1);
RNA_def_property_update(prop, NC_SCENE|ND_TOOLSETTINGS, NULL); /* header redraw */
- prop= RNA_def_property(srna, "proportional_editing_falloff", PROP_ENUM, PROP_NONE);
+ prop= RNA_def_property(srna, "proportional_edit_falloff", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "prop_mode");
RNA_def_property_enum_items(prop, proportional_falloff_items);
RNA_def_property_ui_text(prop, "Proportional Editing Falloff", "Falloff type for proportional editing mode");
@@ -1033,17 +1072,17 @@ static void rna_def_tool_settings(BlenderRNA *brna)
RNA_def_property_ui_range(prop, 0.01, 10.0, 10.0, 2);
RNA_def_property_update(prop, NC_GEOM|ND_DATA, NULL);
- prop= RNA_def_property(srna, "automerge_editing", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_mesh_automerge", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "automerge", 0);
RNA_def_property_ui_text(prop, "AutoMerge Editing", "Automatically merge vertices moved to the same location");
- prop= RNA_def_property(srna, "snap", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_snap", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "snap_flag", SCE_SNAP);
RNA_def_property_ui_text(prop, "Snap", "Snap during transform");
RNA_def_property_ui_icon(prop, ICON_SNAP_OFF, 1);
RNA_def_property_update(prop, NC_SCENE|ND_TOOLSETTINGS, NULL); /* header redraw */
- prop= RNA_def_property(srna, "snap_align_rotation", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_snap_align_rotation", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "snap_flag", SCE_SNAP_ROTATE);
RNA_def_property_ui_text(prop, "Snap Align Rotation", "Align rotation with the snapping target");
RNA_def_property_ui_icon(prop, ICON_SNAP_NORMAL, 0);
@@ -1061,53 +1100,53 @@ static void rna_def_tool_settings(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Snap Target", "Which part to snap onto the target");
RNA_def_property_update(prop, NC_SCENE|ND_TOOLSETTINGS, NULL); /* header redraw */
- prop= RNA_def_property(srna, "snap_peel_object", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_snap_peel_object", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "snap_flag", SCE_SNAP_PEEL_OBJECT);
RNA_def_property_ui_text(prop, "Snap Peel Object", "Consider objects as whole when finding volume center");
RNA_def_property_ui_icon(prop, ICON_SNAP_PEEL_OBJECT, 0);
RNA_def_property_update(prop, NC_SCENE|ND_TOOLSETTINGS, NULL); /* header redraw */
- prop= RNA_def_property(srna, "snap_project", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_snap_project", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "snap_flag", SCE_SNAP_PROJECT);
RNA_def_property_ui_text(prop, "Project Individual Elements", "Project vertices on the surface of other objects");
RNA_def_property_ui_icon(prop, ICON_RETOPO, 0);
RNA_def_property_update(prop, NC_SCENE|ND_TOOLSETTINGS, NULL); /* header redraw */
/* Auto Keying */
- prop= RNA_def_property(srna, "use_auto_keying", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_keyframe_insert_auto", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "autokey_mode", AUTOKEY_ON);
RNA_def_property_ui_text(prop, "Auto Keying", "Automatic keyframe insertion for Objects and Bones");
RNA_def_property_ui_icon(prop, ICON_REC, 0);
- prop= RNA_def_property(srna, "autokey_mode", PROP_ENUM, PROP_NONE);
+ prop= RNA_def_property(srna, "auto_keying_mode", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "autokey_mode");
RNA_def_property_enum_items(prop, auto_key_items);
RNA_def_property_ui_text(prop, "Auto-Keying Mode", "Mode of automatic keyframe insertion for Objects and Bones");
- prop= RNA_def_property(srna, "record_with_nla", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_record_with_nla", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "autokey_flag", ANIMRECORD_FLAG_WITHNLA);
RNA_def_property_ui_text(prop, "Layered", "Add a new NLA Track + Strip for every loop/pass made over the animation to allow non-destructive tweaking");
/* UV */
- prop= RNA_def_property(srna, "uv_selection_mode", PROP_ENUM, PROP_NONE);
+ prop= RNA_def_property(srna, "uv_select_mode", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "uv_selectmode");
RNA_def_property_enum_items(prop, uv_select_mode_items);
RNA_def_property_ui_text(prop, "UV Selection Mode", "UV selection and display mode");
RNA_def_property_update(prop, NC_SPACE|ND_SPACE_IMAGE, NULL);
- prop= RNA_def_property(srna, "uv_sync_selection", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_uv_select_sync", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "uv_flag", UV_SYNC_SELECTION);
RNA_def_property_ui_text(prop, "UV Sync Selection", "Keep UV and edit mode mesh selection in sync");
RNA_def_property_ui_icon(prop, ICON_EDIT, 0);
RNA_def_property_update(prop, NC_SPACE|ND_SPACE_IMAGE, NULL);
- prop= RNA_def_property(srna, "uv_local_view", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_uv_local_view", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "uv_flag", UV_SHOW_SAME_IMAGE);
RNA_def_property_ui_text(prop, "UV Local View", "Draw only faces with the currently displayed image assigned");
RNA_def_property_update(prop, NC_SPACE|ND_SPACE_IMAGE, NULL);
/* Mesh */
- prop= RNA_def_property(srna, "mesh_selection_mode", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "mesh_select_mode", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "selectmode", 1);
RNA_def_property_array(prop, 3);
RNA_def_property_boolean_funcs(prop, NULL, "rna_Scene_editmesh_select_mode_set");
@@ -1125,20 +1164,20 @@ static void rna_def_tool_settings(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Edge Tag Mode", "The edge flag to tag when selecting the shortest path");
/* etch-a-ton */
- prop= RNA_def_property(srna, "bone_sketching", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_bone_sketching", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "bone_sketching", BONE_SKETCHING);
RNA_def_property_ui_text(prop, "Use Bone Sketching", "DOC BROKEN");
// RNA_def_property_ui_icon(prop, ICON_EDIT, 0);
- prop= RNA_def_property(srna, "etch_quick", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_etch_quick", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "bone_sketching", BONE_SKETCHING_QUICK);
RNA_def_property_ui_text(prop, "Quick Sketching", "DOC BROKEN");
- prop= RNA_def_property(srna, "etch_overdraw", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_etch_overdraw", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "bone_sketching", BONE_SKETCHING_ADJUST);
RNA_def_property_ui_text(prop, "Overdraw Sketching", "DOC BROKEN");
- prop= RNA_def_property(srna, "etch_autoname", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_etch_autoname", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "skgen_retarget_options", SK_RETARGET_AUTONAME);
RNA_def_property_ui_text(prop, "Autoname", "DOC BROKEN");
@@ -1272,7 +1311,7 @@ void rna_def_render_layer_common(StructRNA *srna, int scene)
else RNA_def_property_clear_flag(prop, PROP_EDITABLE);
/* layers */
- prop= RNA_def_property(srna, "visible_layers", PROP_BOOLEAN, PROP_LAYER_MEMBER);
+ 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_ui_text(prop, "Visible Layers", "Scene layers included in this render layer");
@@ -1281,7 +1320,7 @@ void rna_def_render_layer_common(StructRNA *srna, int scene)
if(scene) RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
else RNA_def_property_clear_flag(prop, PROP_EDITABLE);
- prop= RNA_def_property(srna, "zmask_layers", PROP_BOOLEAN, PROP_LAYER);
+ prop= RNA_def_property(srna, "layers_zmask", PROP_BOOLEAN, PROP_LAYER);
RNA_def_property_boolean_sdna(prop, NULL, "lay_zmask", 1);
RNA_def_property_array(prop, 20);
RNA_def_property_ui_text(prop, "Zmask Layers", "Zmask scene layers");
@@ -1289,219 +1328,219 @@ void rna_def_render_layer_common(StructRNA *srna, int scene)
else RNA_def_property_clear_flag(prop, PROP_EDITABLE);
/* layer options */
- prop= RNA_def_property(srna, "enabled", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_negative_sdna(prop, NULL, "layflag", SCE_LAY_DISABLE);
RNA_def_property_ui_text(prop, "Enabled", "Disable or enable the render layer");
if(scene) RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
else RNA_def_property_clear_flag(prop, PROP_EDITABLE);
- prop= RNA_def_property(srna, "zmask", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_zmask", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "layflag", SCE_LAY_ZMASK);
RNA_def_property_ui_text(prop, "Zmask", "Only render what's in front of the solid z values");
if(scene) RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
else RNA_def_property_clear_flag(prop, PROP_EDITABLE);
- prop= RNA_def_property(srna, "zmask_negate", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "invert_zmask", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "layflag", SCE_LAY_NEG_ZMASK);
RNA_def_property_ui_text(prop, "Zmask Negate", "For Zmask, only render what is behind solid z values instead of in front");
if(scene) RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
else RNA_def_property_clear_flag(prop, PROP_EDITABLE);
- prop= RNA_def_property(srna, "all_z", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_all_z", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "layflag", SCE_LAY_ALL_Z);
RNA_def_property_ui_text(prop, "All Z", "Fill in Z values for solid faces in invisible layers, for masking");
if(scene) RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
else RNA_def_property_clear_flag(prop, PROP_EDITABLE);
- prop= RNA_def_property(srna, "solid", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_solid", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "layflag", SCE_LAY_SOLID);
RNA_def_property_ui_text(prop, "Solid", "Render Solid faces in this Layer");
if(scene) RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
else RNA_def_property_clear_flag(prop, PROP_EDITABLE);
- prop= RNA_def_property(srna, "halo", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_halo", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "layflag", SCE_LAY_HALO);
RNA_def_property_ui_text(prop, "Halo", "Render Halos in this Layer (on top of Solid)");
if(scene) RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
else RNA_def_property_clear_flag(prop, PROP_EDITABLE);
- prop= RNA_def_property(srna, "ztransp", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_ztransp", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "layflag", SCE_LAY_ZTRA);
RNA_def_property_ui_text(prop, "ZTransp", "Render Z-Transparent faces in this Layer (On top of Solid and Halos)");
if(scene) RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
else RNA_def_property_clear_flag(prop, PROP_EDITABLE);
- prop= RNA_def_property(srna, "sky", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_sky", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "layflag", SCE_LAY_SKY);
RNA_def_property_ui_text(prop, "Sky", "Render Sky in this Layer");
if(scene) RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
else RNA_def_property_clear_flag(prop, PROP_EDITABLE);
- prop= RNA_def_property(srna, "edge", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_edge_enhance", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "layflag", SCE_LAY_EDGE);
RNA_def_property_ui_text(prop, "Edge", "Render Edge-enhance in this Layer (only works for Solid faces)");
if(scene) RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
else RNA_def_property_clear_flag(prop, PROP_EDITABLE);
- prop= RNA_def_property(srna, "strand", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_strand", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "layflag", SCE_LAY_STRAND);
RNA_def_property_ui_text(prop, "Strand", "Render Strands in this Layer");
if(scene) RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
else RNA_def_property_clear_flag(prop, PROP_EDITABLE);
/* passes */
- prop= RNA_def_property(srna, "pass_combined", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_pass_combined", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "passflag", SCE_PASS_COMBINED);
RNA_def_property_ui_text(prop, "Combined", "Deliver full combined RGBA buffer");
if(scene) RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, "rna_SceneRenderLayer_pass_update");
else RNA_def_property_clear_flag(prop, PROP_EDITABLE);
- prop= RNA_def_property(srna, "pass_z", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_pass_z", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "passflag", SCE_PASS_Z);
RNA_def_property_ui_text(prop, "Z", "Deliver Z values pass");
if(scene) RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, "rna_SceneRenderLayer_pass_update");
else RNA_def_property_clear_flag(prop, PROP_EDITABLE);
- prop= RNA_def_property(srna, "pass_vector", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_pass_vector", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "passflag", SCE_PASS_VECTOR);
RNA_def_property_ui_text(prop, "Vector", "Deliver speed vector pass");
if(scene) RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, "rna_SceneRenderLayer_pass_update");
else RNA_def_property_clear_flag(prop, PROP_EDITABLE);
- prop= RNA_def_property(srna, "pass_normal", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_pass_normal", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "passflag", SCE_PASS_NORMAL);
RNA_def_property_ui_text(prop, "Normal", "Deliver normal pass");
if(scene) RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, "rna_SceneRenderLayer_pass_update");
else RNA_def_property_clear_flag(prop, PROP_EDITABLE);
- prop= RNA_def_property(srna, "pass_uv", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_pass_uv", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "passflag", SCE_PASS_UV);
RNA_def_property_ui_text(prop, "UV", "Deliver texture UV pass");
if(scene) RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, "rna_SceneRenderLayer_pass_update");
else RNA_def_property_clear_flag(prop, PROP_EDITABLE);
- prop= RNA_def_property(srna, "pass_mist", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_pass_mist", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "passflag", SCE_PASS_MIST);
RNA_def_property_ui_text(prop, "Mist", "Deliver mist factor pass (0.0-1.0)");
if(scene) RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, "rna_SceneRenderLayer_pass_update");
else RNA_def_property_clear_flag(prop, PROP_EDITABLE);
- prop= RNA_def_property(srna, "pass_object_index", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_pass_object_index", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "passflag", SCE_PASS_INDEXOB);
RNA_def_property_ui_text(prop, "Object Index", "Deliver object index pass");
if(scene) RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, "rna_SceneRenderLayer_pass_update");
else RNA_def_property_clear_flag(prop, PROP_EDITABLE);
- prop= RNA_def_property(srna, "pass_color", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_pass_color", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "passflag", SCE_PASS_RGBA);
RNA_def_property_ui_text(prop, "Color", "Deliver shade-less color pass");
if(scene) RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, "rna_SceneRenderLayer_pass_update");
else RNA_def_property_clear_flag(prop, PROP_EDITABLE);
- prop= RNA_def_property(srna, "pass_diffuse", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_pass_diffuse", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "passflag", SCE_PASS_DIFFUSE);
RNA_def_property_ui_text(prop, "Diffuse", "Deliver diffuse pass");
if(scene) RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, "rna_SceneRenderLayer_pass_update");
else RNA_def_property_clear_flag(prop, PROP_EDITABLE);
- prop= RNA_def_property(srna, "pass_specular", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_pass_specular", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "passflag", SCE_PASS_SPEC);
RNA_def_property_ui_text(prop, "Specular", "Deliver specular pass");
if(scene) RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, "rna_SceneRenderLayer_pass_update");
else RNA_def_property_clear_flag(prop, PROP_EDITABLE);
- prop= RNA_def_property(srna, "pass_shadow", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_pass_shadow", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "passflag", SCE_PASS_SHADOW);
RNA_def_property_ui_text(prop, "Shadow", "Deliver shadow pass");
if(scene) RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, "rna_SceneRenderLayer_pass_update");
else RNA_def_property_clear_flag(prop, PROP_EDITABLE);
- prop= RNA_def_property(srna, "pass_ao", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_pass_ambient_occlusion", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "passflag", SCE_PASS_AO);
RNA_def_property_ui_text(prop, "AO", "Deliver AO pass");
if(scene) RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, "rna_SceneRenderLayer_pass_update");
else RNA_def_property_clear_flag(prop, PROP_EDITABLE);
- prop= RNA_def_property(srna, "pass_reflection", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_pass_reflection", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "passflag", SCE_PASS_REFLECT);
RNA_def_property_ui_text(prop, "Reflection", "Deliver raytraced reflection pass");
if(scene) RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, "rna_SceneRenderLayer_pass_update");
else RNA_def_property_clear_flag(prop, PROP_EDITABLE);
- prop= RNA_def_property(srna, "pass_refraction", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_pass_refraction", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "passflag", SCE_PASS_REFRACT);
RNA_def_property_ui_text(prop, "Refraction", "Deliver raytraced refraction pass");
if(scene) RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, "rna_SceneRenderLayer_pass_update");
else RNA_def_property_clear_flag(prop, PROP_EDITABLE);
- prop= RNA_def_property(srna, "pass_emit", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_pass_emit", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "passflag", SCE_PASS_EMIT);
RNA_def_property_ui_text(prop, "Emit", "Deliver emission pass");
if(scene) RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, "rna_SceneRenderLayer_pass_update");
else RNA_def_property_clear_flag(prop, PROP_EDITABLE);
- prop= RNA_def_property(srna, "pass_environment", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_pass_environment", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "passflag", SCE_PASS_ENVIRONMENT);
RNA_def_property_ui_text(prop, "Environment", "Deliver environment lighting pass");
if(scene) RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, "rna_SceneRenderLayer_pass_update");
else RNA_def_property_clear_flag(prop, PROP_EDITABLE);
- prop= RNA_def_property(srna, "pass_indirect", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_pass_indirect", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "passflag", SCE_PASS_INDIRECT);
RNA_def_property_ui_text(prop, "Indirect", "Deliver indirect lighting pass");
if(scene) RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, "rna_SceneRenderLayer_pass_update");
else RNA_def_property_clear_flag(prop, PROP_EDITABLE);
- prop= RNA_def_property(srna, "pass_specular_exclude", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "exclude_specular", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "pass_xor", SCE_PASS_SPEC);
RNA_def_property_ui_text(prop, "Specular Exclude", "Exclude specular pass from combined");
RNA_def_property_ui_icon(prop, ICON_RESTRICT_RENDER_OFF, 1);
if(scene) RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, "rna_SceneRenderLayer_pass_update");
else RNA_def_property_clear_flag(prop, PROP_EDITABLE);
- prop= RNA_def_property(srna, "pass_shadow_exclude", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "exclude_shadow", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "pass_xor", SCE_PASS_SHADOW);
RNA_def_property_ui_text(prop, "Shadow Exclude", "Exclude shadow pass from combined");
RNA_def_property_ui_icon(prop, ICON_RESTRICT_RENDER_OFF, 1);
if(scene) RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, "rna_SceneRenderLayer_pass_update");
else RNA_def_property_clear_flag(prop, PROP_EDITABLE);
- prop= RNA_def_property(srna, "pass_ao_exclude", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "exclude_ambient_occlusion", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "pass_xor", SCE_PASS_AO);
RNA_def_property_ui_text(prop, "AO Exclude", "Exclude AO pass from combined");
RNA_def_property_ui_icon(prop, ICON_RESTRICT_RENDER_OFF, 1);
if(scene) RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, "rna_SceneRenderLayer_pass_update");
else RNA_def_property_clear_flag(prop, PROP_EDITABLE);
- prop= RNA_def_property(srna, "pass_reflection_exclude", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "exclude_reflection", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "pass_xor", SCE_PASS_REFLECT);
RNA_def_property_ui_text(prop, "Reflection Exclude", "Exclude raytraced reflection pass from combined");
RNA_def_property_ui_icon(prop, ICON_RESTRICT_RENDER_OFF, 1);
if(scene) RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, "rna_SceneRenderLayer_pass_update");
else RNA_def_property_clear_flag(prop, PROP_EDITABLE);
- prop= RNA_def_property(srna, "pass_refraction_exclude", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "exclude_refraction", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "pass_xor", SCE_PASS_REFRACT);
RNA_def_property_ui_text(prop, "Refraction Exclude", "Exclude raytraced refraction pass from combined");
RNA_def_property_ui_icon(prop, ICON_RESTRICT_RENDER_OFF, 1);
if(scene) RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, "rna_SceneRenderLayer_pass_update");
else RNA_def_property_clear_flag(prop, PROP_EDITABLE);
- prop= RNA_def_property(srna, "pass_emit_exclude", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "exclude_emit", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "pass_xor", SCE_PASS_EMIT);
RNA_def_property_ui_text(prop, "Emit Exclude", "Exclude emission pass from combined");
RNA_def_property_ui_icon(prop, ICON_RESTRICT_RENDER_OFF, 1);
if(scene) RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, "rna_SceneRenderLayer_pass_update");
else RNA_def_property_clear_flag(prop, PROP_EDITABLE);
- prop= RNA_def_property(srna, "pass_environment_exclude", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "exclude_environment", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "pass_xor", SCE_PASS_ENVIRONMENT);
RNA_def_property_ui_text(prop, "Environment Exclude", "Exclude environment pass from combined");
RNA_def_property_ui_icon(prop, ICON_RESTRICT_RENDER_OFF, 1);
if(scene) RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, "rna_SceneRenderLayer_pass_update");
else RNA_def_property_clear_flag(prop, PROP_EDITABLE);
- prop= RNA_def_property(srna, "pass_indirect_exclude", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "exclude_indirect", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "pass_xor", SCE_PASS_INDIRECT);
RNA_def_property_ui_text(prop, "Indirect Exclude", "Exclude indirect pass from combined");
RNA_def_property_ui_icon(prop, ICON_RESTRICT_RENDER_OFF, 1);
@@ -1684,19 +1723,19 @@ static void rna_def_scene_game_data(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Freq", "Displays clock frequency of fullscreen display");
RNA_def_property_update(prop, NC_SCENE, NULL);
- prop= RNA_def_property(srna, "fullscreen", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_fullscreen", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "fullscreen", 1.0);
RNA_def_property_ui_text(prop, "Fullscreen", "Starts player in a new fullscreen display");
RNA_def_property_update(prop, NC_SCENE, NULL);
/* Framing */
- prop= RNA_def_property(srna, "framing_type", PROP_ENUM, PROP_NONE);
+ prop= RNA_def_property(srna, "frame_type", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "framing.type");
RNA_def_property_enum_items(prop, framing_types_items);
RNA_def_property_ui_text(prop, "Framing Types", "Select the type of Framing you want");
RNA_def_property_update(prop, NC_SCENE, NULL);
- prop= RNA_def_property(srna, "framing_color", PROP_FLOAT, PROP_COLOR);
+ prop= RNA_def_property(srna, "frame_color", PROP_FLOAT, PROP_COLOR);
RNA_def_property_float_sdna(prop, NULL, "framing.col");
RNA_def_property_array(prop, 3);
RNA_def_property_ui_text(prop, "Framing Color", "Set colour of the bars");
@@ -1715,7 +1754,7 @@ static void rna_def_scene_game_data(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Stereo Mode", "Stereographic techniques");
RNA_def_property_update(prop, NC_SCENE, NULL);
- prop= RNA_def_property(srna, "eye_separation", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "stereo_eye_separation", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "eyeseparation");
RNA_def_property_range(prop, 0.01, 5.0);
RNA_def_property_ui_text(prop, "Eye Separation", "Set the distance between the eyes - the camera focal length/30 should be fine");
@@ -1812,7 +1851,7 @@ static void rna_def_scene_game_data(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "DBVT culling", "Use optimized Bullet DBVT tree for view frustum and occlusion culling");
// not used // deprecated !!!!!!!!!!!!!
- prop= RNA_def_property(srna, "activity_culling", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_activity_culling", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "mode", (1 << 3)); //XXX mode hardcoded
RNA_def_property_ui_text(prop, "Activity Culling", "Activity culling is enabled");
@@ -1851,7 +1890,7 @@ static void rna_def_scene_game_data(BlenderRNA *brna)
RNA_def_property_boolean_sdna(prop, NULL, "flag", GAME_ENABLE_ANIMATION_RECORD);
RNA_def_property_ui_text(prop, "Record Animation", "Record animation to fcurves");
- prop= RNA_def_property(srna, "auto_start", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_auto_start", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_funcs(prop, "rna_GameSettings_auto_start_get", "rna_GameSettings_auto_start_set");
RNA_def_property_ui_text(prop, "Auto Start", "Automatically start game at load time");
@@ -1862,32 +1901,32 @@ static void rna_def_scene_game_data(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Material Mode", "Material mode to use for rendering");
RNA_def_property_update(prop, NC_SCENE|NA_EDITED, NULL);
- prop= RNA_def_property(srna, "glsl_lights", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_glsl_lights", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", GAME_GLSL_NO_LIGHTS);
RNA_def_property_ui_text(prop, "GLSL Lights", "Use lights for GLSL rendering");
RNA_def_property_update(prop, NC_SCENE|NA_EDITED, "rna_Scene_glsl_update");
- prop= RNA_def_property(srna, "glsl_shaders", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_glsl_shaders", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", GAME_GLSL_NO_SHADERS);
RNA_def_property_ui_text(prop, "GLSL Shaders", "Use shaders for GLSL rendering");
RNA_def_property_update(prop, NC_SCENE|NA_EDITED, "rna_Scene_glsl_update");
- prop= RNA_def_property(srna, "glsl_shadows", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_glsl_shadows", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", GAME_GLSL_NO_SHADOWS);
RNA_def_property_ui_text(prop, "GLSL Shadows", "Use shadows for GLSL rendering");
RNA_def_property_update(prop, NC_SCENE|NA_EDITED, "rna_Scene_glsl_update");
- prop= RNA_def_property(srna, "glsl_ramps", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_glsl_ramps", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", GAME_GLSL_NO_RAMPS);
RNA_def_property_ui_text(prop, "GLSL Ramps", "Use ramps for GLSL rendering");
RNA_def_property_update(prop, NC_SCENE|NA_EDITED, "rna_Scene_glsl_update");
- prop= RNA_def_property(srna, "glsl_nodes", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_glsl_nodes", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", GAME_GLSL_NO_NODES);
RNA_def_property_ui_text(prop, "GLSL Nodes", "Use nodes for GLSL rendering");
RNA_def_property_update(prop, NC_SCENE|NA_EDITED, "rna_Scene_glsl_update");
- prop= RNA_def_property(srna, "glsl_extra_textures", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_glsl_extra_textures", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", GAME_GLSL_NO_EXTRA_TEX);
RNA_def_property_ui_text(prop, "GLSL Extra Textures", "Use extra textures like normal or specular maps for GLSL rendering");
RNA_def_property_update(prop, NC_SCENE|NA_EDITED, "rna_Scene_glsl_update");
@@ -1932,6 +1971,35 @@ static void rna_def_scene_render_layer(BlenderRNA *brna)
rna_def_render_layer_common(srna, 1);
}
+/* curve.splines */
+static void rna_def_render_layers(BlenderRNA *brna, PropertyRNA *cprop)
+{
+ StructRNA *srna;
+ PropertyRNA *prop;
+
+ // FunctionRNA *func;
+ // PropertyRNA *parm;
+
+ RNA_def_property_srna(cprop, "RenderLayers");
+ srna= RNA_def_struct(brna, "RenderLayers", NULL);
+ RNA_def_struct_sdna(srna, "RenderData");
+ RNA_def_struct_ui_text(srna, "Render Layers", "Collection of render layers");
+
+ prop= RNA_def_property(srna, "active_index", PROP_INT, PROP_NONE);
+ RNA_def_property_int_sdna(prop, NULL, "actlay");
+ RNA_def_property_int_funcs(prop, "rna_RenderSettings_active_layer_index_get", "rna_RenderSettings_active_layer_index_set", "rna_RenderSettings_active_layer_index_range");
+ RNA_def_property_ui_text(prop, "Active Layer Index", "Active index in render layer array");
+ RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
+
+ prop= RNA_def_property(srna, "active", PROP_POINTER, PROP_UNSIGNED);
+ RNA_def_property_struct_type(prop, "SceneRenderLayer");
+ RNA_def_property_pointer_funcs(prop, "rna_RenderSettings_active_layer_get", "rna_RenderSettings_active_layer_set", NULL, NULL);
+ RNA_def_property_flag(prop, PROP_EDITABLE);
+ RNA_def_property_ui_text(prop, "Active Render Layer", "Active Render Layer");
+ RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
+
+}
+
static void rna_def_scene_render_data(BlenderRNA *brna)
{
StructRNA *srna;
@@ -2197,14 +2265,14 @@ static void rna_def_scene_render_data(BlenderRNA *brna)
/* Tiff */
- prop= RNA_def_property(srna, "tiff_bit", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_tiff_16bit", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "subimtype", R_TIFF_16BIT);
RNA_def_property_ui_text(prop, "16 Bit", "Save TIFF with 16 bits per channel");
RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
/* Cineon and DPX */
- prop= RNA_def_property(srna, "cineon_log", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_cineon_log", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "subimtype", R_CINEON_LOG);
RNA_def_property_ui_text(prop, "Log", "Convert to logarithmic color space");
RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
@@ -2236,7 +2304,7 @@ static void rna_def_scene_render_data(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Codec", "Codec settings for OpenEXR");
RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
- prop= RNA_def_property(srna, "exr_half", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_exr_half", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "subimtype", R_OPENEXR_HALF);
RNA_def_property_ui_text(prop, "Half", "Use 16 bit floats instead of 32 bit floats per channel");
RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
@@ -2436,13 +2504,29 @@ static void rna_def_scene_render_data(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "FPS Base", "Framerate base");
RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
+ /* frame mapping */
+ prop= RNA_def_property(srna, "frame_map_old", PROP_INT, PROP_NONE);
+ RNA_def_property_int_sdna(prop, NULL, "framapto");
+ RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
+ RNA_def_property_range(prop, 1, 900);
+ RNA_def_property_ui_text(prop, "Frame Map Old", "Specify old mapping value in frames");
+ RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
+
+ prop= RNA_def_property(srna, "frame_map_new", PROP_INT, PROP_NONE);
+ RNA_def_property_int_sdna(prop, NULL, "images");
+ RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
+ RNA_def_property_range(prop, 1, 900);
+ RNA_def_property_ui_text(prop, "Frame Map New", "Specify how many frames the Map Old will last");
+ RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
+
+
prop= RNA_def_property(srna, "dither_intensity", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "dither_intensity");
RNA_def_property_range(prop, 0.0f, 2.0f);
RNA_def_property_ui_text(prop, "Dither Intensity", "Amount of dithering noise added to the rendered image to break up banding");
RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
- prop= RNA_def_property(srna, "pixel_filter", PROP_ENUM, PROP_NONE);
+ prop= RNA_def_property(srna, "pixel_filter_type", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "filtertype");
RNA_def_property_enum_items(prop, pixel_filter_items);
RNA_def_property_ui_text(prop, "Pixel Filter", "Reconstruction filter used for combining anti-aliasing samples");
@@ -2466,7 +2550,7 @@ static void rna_def_scene_render_data(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Octree Resolution", "Resolution of raytrace accelerator. Use higher resolutions for larger scenes");
RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
- prop= RNA_def_property(srna, "raytrace_structure", PROP_ENUM, PROP_NONE);
+ prop= RNA_def_property(srna, "raytrace_method", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "raytrace_structure");
RNA_def_property_enum_items(prop, raytrace_structure_items);
RNA_def_property_ui_text(prop, "Raytrace Acceleration Structure", "Type of raytrace accelerator structure");
@@ -2482,7 +2566,7 @@ static void rna_def_scene_render_data(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Use Local Coords", "Vertex coordinates are stored localy on each primitive. Increases memory usage, but may have impact on speed");
RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
- prop= RNA_def_property(srna, "render_antialiasing", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_antialiasing", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "mode", R_OSA);
RNA_def_property_ui_text(prop, "Anti-Aliasing", "Render and combine multiple samples per pixel to prevent jagged edges");
RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
@@ -2493,7 +2577,7 @@ static void rna_def_scene_render_data(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Anti-Aliasing Samples", "Amount of anti-aliasing samples per pixel");
RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
- prop= RNA_def_property(srna, "fields", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_fields", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "mode", R_FIELDS);
RNA_def_property_ui_text(prop, "Fields", "Render image to two fields per frame, for interlaced TV output");
RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
@@ -2504,7 +2588,7 @@ static void rna_def_scene_render_data(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Field Order", "Order of video fields. Select which lines get rendered first, to create smooth motion for TV output");
RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
- prop= RNA_def_property(srna, "fields_still", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_fields_still", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "mode", R_FIELDSTILL);
RNA_def_property_ui_text(prop, "Fields Still", "Disable the time difference between fields");
RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
@@ -2530,7 +2614,7 @@ static void rna_def_scene_render_data(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Subsurface Scattering", "Calculate sub-surface scattering in materials rendering");
RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
- prop= RNA_def_property(srna, "use_raytracing", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_raytrace", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "mode", R_RAYTRACE);
RNA_def_property_ui_text(prop, "Raytracing", "Pre-calculate the raytrace accelerator and render raytracing effects");
RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
@@ -2540,7 +2624,7 @@ static void rna_def_scene_render_data(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Textures", "Use textures to affect material properties");
RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
- prop= RNA_def_property(srna, "edge", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_edge_enhance", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "mode", R_EDGE);
RNA_def_property_ui_text(prop, "Edge", "Create a toon outline around the edges of geometry");
RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
@@ -2572,7 +2656,7 @@ static void rna_def_scene_render_data(BlenderRNA *brna)
RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
/* motion blur */
- prop= RNA_def_property(srna, "motion_blur", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_motion_blur", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "mode", R_MBLUR);
RNA_def_property_ui_text(prop, "Motion Blur", "Use multi-sampled 3D scene motion blur");
RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
@@ -2620,7 +2704,7 @@ static void rna_def_scene_render_data(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Border Maximum Y", "Sets maximum Y value for the render border");
RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
- prop= RNA_def_property(srna, "crop_to_border", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_crop_to_border", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "mode", R_CROP);
RNA_def_property_ui_text(prop, "Crop to Border", "Crop the rendered frame to the defined border size");
RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
@@ -2645,7 +2729,7 @@ static void rna_def_scene_render_data(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Sequencer", "Process the render (and composited) result through the video sequence editor pipeline, if sequencer strips exist");
RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
- prop= RNA_def_property(srna, "color_management", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_color_management", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "color_mgt_flag", R_COLOR_MANAGEMENT);
RNA_def_property_ui_text(prop, "Color Management", "Use linear workflow - gamma corrected imaging pipeline");
RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, "rna_RenderSettings_color_management_update");
@@ -2673,29 +2757,29 @@ static void rna_def_scene_render_data(BlenderRNA *brna)
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
RNA_def_property_ui_text(prop, "Movie Format", "When true the format is a movie");
- prop= RNA_def_property(srna, "free_image_textures", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_free_image_textures", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "scemode", R_FREE_IMAGE);
RNA_def_property_ui_text(prop, "Free Image Textures", "Free all image texture from memory after render, to save memory before compositing");
RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
- prop= RNA_def_property(srna, "free_unused_nodes", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_free_unused_nodes", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "scemode", R_COMP_FREE);
RNA_def_property_ui_text(prop, "Free Unused Nodes", "Free Nodes that are not used while compositing, to save memory");
RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
- prop= RNA_def_property(srna, "save_buffers", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_save_buffers", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "scemode", R_EXR_TILE_FILE);
RNA_def_property_boolean_funcs(prop, "rna_RenderSettings_save_buffers_get", NULL);
RNA_def_property_ui_text(prop, "Save Buffers","Save tiles for all RenderLayers and SceneNodes to files in the temp directory (saves memory, required for Full Sample)");
RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
- prop= RNA_def_property(srna, "full_sample", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_full_sample", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "scemode", R_FULL_SAMPLE);
RNA_def_property_boolean_funcs(prop, "rna_RenderSettings_full_sample_get", NULL);
RNA_def_property_ui_text(prop, "Full Sample","Save for every anti-aliasing sample the entire RenderLayer results. This solves anti-aliasing issues with compositing");
RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
- prop= RNA_def_property(srna, "backbuf", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_backbuf", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "bufflag", R_BACKBUF);
RNA_def_property_ui_text(prop, "Back Buffer", "Render backbuffer image");
RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
@@ -2706,7 +2790,7 @@ static void rna_def_scene_render_data(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Display", "Select where rendered images will be displayed");
RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
- prop= RNA_def_property(srna, "output_path", PROP_STRING, PROP_DIRPATH);
+ prop= RNA_def_property(srna, "filepath", PROP_STRING, PROP_DIRPATH);
RNA_def_property_string_sdna(prop, NULL, "pic");
RNA_def_property_ui_text(prop, "Output Path", "Directory/name to save animations, # characters defines the position and length of frame numbers");
RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
@@ -2732,19 +2816,19 @@ static void rna_def_scene_render_data(BlenderRNA *brna)
RNA_def_property_enum_items(prop, fixed_oversample_items);
RNA_def_property_ui_text(prop, "Anti-Aliasing Level", "");
- prop= RNA_def_property(srna, "bake_active", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_bake_selected_to_active", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "bake_flag", R_BAKE_TO_ACTIVE);
RNA_def_property_ui_text(prop, "Selected to Active", "Bake shading on the surface of selected objects to the active object");
- prop= RNA_def_property(srna, "bake_normalized", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_bake_normalize", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "bake_flag", R_BAKE_NORMALIZE);
RNA_def_property_ui_text(prop, "Normalized", "With displacement normalize to the distance, with ambient occlusion normalize without using material settings");
- prop= RNA_def_property(srna, "bake_clear", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_bake_clear", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "bake_flag", R_BAKE_CLEAR);
RNA_def_property_ui_text(prop, "Clear", "Clear Images before baking");
- prop= RNA_def_property(srna, "bake_enable_aa", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_bake_antialiasing", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "bake_flag", R_BAKE_OSA);
RNA_def_property_ui_text(prop, "Anti-Aliasing", "Enables Anti-aliasing");
@@ -2765,52 +2849,52 @@ static void rna_def_scene_render_data(BlenderRNA *brna)
/* stamp */
- prop= RNA_def_property(srna, "stamp_time", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_stamp_time", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "stamp", R_STAMP_TIME);
RNA_def_property_ui_text(prop, "Stamp Time", "Include the render frame as HH:MM:SS.FF in image metadata");
RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
- prop= RNA_def_property(srna, "stamp_date", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_stamp_date", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "stamp", R_STAMP_DATE);
RNA_def_property_ui_text(prop, "Stamp Date", "Include the current date in image metadata");
RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
- prop= RNA_def_property(srna, "stamp_frame", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_stamp_frame", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "stamp", R_STAMP_FRAME);
RNA_def_property_ui_text(prop, "Stamp Frame", "Include the frame number in image metadata");
RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
- prop= RNA_def_property(srna, "stamp_camera", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_stamp_camera", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "stamp", R_STAMP_CAMERA);
RNA_def_property_ui_text(prop, "Stamp Camera", "Include the name of the active camera in image metadata");
RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
- prop= RNA_def_property(srna, "stamp_scene", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_stamp_scene", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "stamp", R_STAMP_SCENE);
RNA_def_property_ui_text(prop, "Stamp Scene", "Include the name of the active scene in image metadata");
RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
- prop= RNA_def_property(srna, "stamp_note", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_stamp_note", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "stamp", R_STAMP_NOTE);
RNA_def_property_ui_text(prop, "Stamp Note", "Include a custom note in image metadata");
RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
- prop= RNA_def_property(srna, "stamp_marker", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_stamp_marker", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "stamp", R_STAMP_MARKER);
RNA_def_property_ui_text(prop, "Stamp Marker", "Include the name of the last marker in image metadata");
RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
- prop= RNA_def_property(srna, "stamp_filename", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_stamp_filename", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "stamp", R_STAMP_FILENAME);
RNA_def_property_ui_text(prop, "Stamp Filename", "Include the filename of the .blend file in image metadata");
RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
- prop= RNA_def_property(srna, "stamp_sequencer_strip", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_stamp_sequencer_strip", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "stamp", R_STAMP_SEQSTRIP);
RNA_def_property_ui_text(prop, "Stamp Sequence Strip", "Include the name of the foreground sequence strip in image metadata");
RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
- prop= RNA_def_property(srna, "stamp_render_time", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_stamp_render_time", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "stamp", R_STAMP_RENDERTIME);
RNA_def_property_ui_text(prop, "Stamp Render Time", "Include the render time in the stamp image");
RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
@@ -2820,7 +2904,7 @@ static void rna_def_scene_render_data(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Stamp Note Text", "Custom text to appear in the stamp note");
RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
- prop= RNA_def_property(srna, "render_stamp", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_stamp", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "stamp", R_STAMP_DRAW);
RNA_def_property_ui_text(prop, "Render Stamp", "Render the stamp info text in the rendered image");
RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
@@ -2858,12 +2942,12 @@ static void rna_def_scene_render_data(BlenderRNA *brna)
prop= RNA_def_property(srna, "sequencer_gl_preview", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "seq_prev_type");
- RNA_def_property_enum_items(prop, viewport_shading_items);
+ RNA_def_property_enum_items(prop, viewport_shade_items);
RNA_def_property_ui_text(prop, "Sequencer Preview Shading", "Method to draw in the sequencer view");
prop= RNA_def_property(srna, "sequencer_gl_render", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "seq_rend_type");
- RNA_def_property_enum_items(prop, viewport_shading_items);
+ RNA_def_property_enum_items(prop, viewport_shade_items);
RNA_def_property_ui_text(prop, "Sequencer Preview Shading", "Method to draw in the sequencer view");
/* layers */
@@ -2872,18 +2956,14 @@ static void rna_def_scene_render_data(BlenderRNA *brna)
RNA_def_property_collection_sdna(prop, NULL, "layers", NULL);
RNA_def_property_struct_type(prop, "SceneRenderLayer");
RNA_def_property_ui_text(prop, "Render Layers", "");
+ rna_def_render_layers(brna, prop);
- prop= RNA_def_property(srna, "single_layer", PROP_BOOLEAN, PROP_NONE);
+
+ prop= RNA_def_property(srna, "use_single_layer", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "scemode", R_SINGLE_LAYER);
RNA_def_property_ui_text(prop, "Single Layer", "Only render the active layer");
RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
- prop= RNA_def_property(srna, "active_layer_index", PROP_INT, PROP_NONE);
- RNA_def_property_int_sdna(prop, NULL, "actlay");
- RNA_def_property_int_funcs(prop, "rna_RenderSettings_active_layer_index_get", "rna_RenderSettings_active_layer_index_set", "rna_RenderSettings_active_layer_index_range");
- RNA_def_property_ui_text(prop, "Active Layer Index", "Active index in render layer array");
- RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
-
/* engine */
prop= RNA_def_property(srna, "engine", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_items(prop, engine_items);
@@ -2891,7 +2971,7 @@ static void rna_def_scene_render_data(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Engine", "Engine to use for rendering");
RNA_def_property_update(prop, NC_WINDOW, NULL);
- prop= RNA_def_property(srna, "multiple_engines", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "has_multiple_engines", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_funcs(prop, "rna_RenderSettings_multiple_engines_get", NULL);
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
RNA_def_property_ui_text(prop, "Multiple Engines", "More than one rendering engine is available");
@@ -2929,7 +3009,7 @@ static void rna_def_scene_render_data(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Simplify AO and SSS", "Global approximate AA and SSS quality factor");
RNA_def_property_update(prop, 0, "rna_Scene_simplify_update");
- prop= RNA_def_property(srna, "simplify_triangulate", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_simplify_triangulate", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "simplify_flag", R_SIMPLE_NO_TRIANGULATE);
RNA_def_property_ui_text(prop, "Skip Quad to Triangles", "Disables non-planer quads being triangulated");
@@ -2952,7 +3032,7 @@ static void rna_def_scene_objects(BlenderRNA *brna, PropertyRNA *cprop)
RNA_def_struct_ui_text(srna, "Scene Objects", "Collection of scene objects");
func= RNA_def_function(srna, "link", "rna_Scene_object_link");
- RNA_def_function_ui_description(func, "Link object to scene.");
+ RNA_def_function_ui_description(func, "Link object to scene, run scene.update() after.");
RNA_def_function_flag(func, FUNC_USE_CONTEXT|FUNC_USE_REPORTS);
parm= RNA_def_pointer(func, "object", "Object", "", "Object to add to scene.");
RNA_def_property_flag(parm, PROP_REQUIRED);
@@ -3011,7 +3091,7 @@ static void rna_def_timeline_markers(BlenderRNA *brna, PropertyRNA *cprop)
RNA_def_struct_sdna(srna, "Scene");
RNA_def_struct_ui_text(srna, "Timeline Markers", "Collection of timeline markers");
- func= RNA_def_function(srna, "add", "rna_TimeLine_add");
+ func= RNA_def_function(srna, "new", "rna_TimeLine_add");
RNA_def_function_ui_description(func, "Add a keyframe to the curve.");
parm= RNA_def_string(func, "name", "Marker", 0, "", "New name for the marker (not unique).");
RNA_def_property_flag(parm, PROP_REQUIRED);
@@ -3027,6 +3107,71 @@ static void rna_def_timeline_markers(BlenderRNA *brna, PropertyRNA *cprop)
RNA_def_property_flag(parm, PROP_REQUIRED|PROP_NEVER_NULL);
}
+/* scene.keying_sets */
+static void rna_def_scene_keying_sets(BlenderRNA *brna, PropertyRNA *cprop)
+{
+ StructRNA *srna;
+ PropertyRNA *prop;
+
+ FunctionRNA *func;
+ PropertyRNA *parm;
+
+ RNA_def_property_srna(cprop, "KeyingSets");
+ srna= RNA_def_struct(brna, "KeyingSets", NULL);
+ RNA_def_struct_sdna(srna, "Scene");
+ RNA_def_struct_ui_text(srna, "Keying Sets", "Scene keying sets");
+
+ /* Add Keying Set */
+ func= RNA_def_function(srna, "new", "rna_Scene_keying_set_new");
+ RNA_def_function_ui_description(func, "Add a new Keying Set to Scene.");
+ RNA_def_function_flag(func, FUNC_USE_REPORTS);
+ /* name */
+ RNA_def_string(func, "name", "KeyingSet", 64, "Name", "Name of Keying Set");
+
+ /* returns the new KeyingSet */
+ parm= RNA_def_pointer(func, "keyingset", "KeyingSet", "", "Newly created Keying Set.");
+ RNA_def_function_return(func, parm);
+
+ prop= RNA_def_property(srna, "active", PROP_POINTER, PROP_NONE);
+ RNA_def_property_struct_type(prop, "KeyingSet");
+ RNA_def_property_flag(prop, PROP_EDITABLE);
+ RNA_def_property_pointer_funcs(prop, "rna_Scene_active_keying_set_get", "rna_Scene_active_keying_set_set", NULL, NULL);
+ RNA_def_property_ui_text(prop, "Active Keying Set", "Active Keying Set used to insert/delete keyframes");
+ RNA_def_property_update(prop, NC_SCENE|ND_KEYINGSET, NULL);
+
+ prop= RNA_def_property(srna, "active_index", PROP_INT, PROP_NONE);
+ RNA_def_property_int_sdna(prop, NULL, "active_keyingset");
+ RNA_def_property_int_funcs(prop, "rna_Scene_active_keying_set_index_get", "rna_Scene_active_keying_set_index_set", NULL);
+ RNA_def_property_ui_text(prop, "Active Keying Set Index", "Current Keying Set index (negative for 'builtin' and positive for 'absolute')");
+ RNA_def_property_update(prop, NC_SCENE|ND_KEYINGSET, NULL);
+}
+
+static void rna_def_scene_keying_sets_all(BlenderRNA *brna, PropertyRNA *cprop)
+{
+ StructRNA *srna;
+ PropertyRNA *prop;
+
+ RNA_def_property_srna(cprop, "KeyingSetsAll");
+ srna= RNA_def_struct(brna, "KeyingSetsAll", NULL);
+ RNA_def_struct_sdna(srna, "Scene");
+ RNA_def_struct_ui_text(srna, "Keying Sets All", "All available keying sets");
+
+ /* NOTE: no add/remove available here, without screwing up this amalgamated list... */
+
+ prop= RNA_def_property(srna, "active", PROP_POINTER, PROP_NONE);
+ RNA_def_property_struct_type(prop, "KeyingSet");
+ RNA_def_property_flag(prop, PROP_EDITABLE);
+ RNA_def_property_pointer_funcs(prop, "rna_Scene_active_keying_set_get", "rna_Scene_active_keying_set_set", NULL, NULL);
+ RNA_def_property_ui_text(prop, "Active Keying Set", "Active Keying Set used to insert/delete keyframes");
+ RNA_def_property_update(prop, NC_SCENE|ND_KEYINGSET, NULL);
+
+ prop= RNA_def_property(srna, "active_index", PROP_INT, PROP_NONE);
+ RNA_def_property_int_sdna(prop, NULL, "active_keyingset");
+ RNA_def_property_int_funcs(prop, "rna_Scene_active_keying_set_index_get", "rna_Scene_active_keying_set_index_set", NULL);
+ RNA_def_property_ui_text(prop, "Active Keying Set Index", "Current Keying Set index (negative for 'builtin' and positive for 'absolute')");
+ RNA_def_property_update(prop, NC_SCENE|ND_KEYINGSET, NULL);
+}
+
void RNA_def_scene(BlenderRNA *brna)
{
StructRNA *srna;
@@ -3062,7 +3207,7 @@ void RNA_def_scene(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Camera", "Active camera used for rendering the scene");
RNA_def_property_update(prop, NC_SCENE|NA_EDITED, "rna_Scene_view3d_update");
- prop= RNA_def_property(srna, "set", PROP_POINTER, PROP_NONE);
+ prop= RNA_def_property(srna, "background_set", PROP_POINTER, PROP_NONE);
RNA_def_property_pointer_sdna(prop, NULL, "set");
RNA_def_property_struct_type(prop, "Scene");
RNA_def_property_flag(prop, PROP_EDITABLE|PROP_ID_SELF_CHECK);
@@ -3082,7 +3227,7 @@ void RNA_def_scene(BlenderRNA *brna)
RNA_def_property_update(prop, NC_WINDOW, NULL);
/* Bases/Objects */
- prop= RNA_def_property(srna, "bases", PROP_COLLECTION, PROP_NONE);
+ prop= RNA_def_property(srna, "object_bases", PROP_COLLECTION, PROP_NONE);
RNA_def_property_collection_sdna(prop, NULL, "base", NULL);
RNA_def_property_struct_type(prop, "ObjectBase");
RNA_def_property_ui_text(prop, "Bases", "");
@@ -3146,14 +3291,14 @@ void RNA_def_scene(BlenderRNA *brna)
RNA_def_property_update(prop, NC_SCENE|ND_FRAME, NULL);
RNA_def_property_ui_icon(prop, ICON_PREVIEW_RANGE, 0);
- prop= RNA_def_property(srna, "preview_range_frame_start", PROP_INT, PROP_TIME);
+ prop= RNA_def_property(srna, "frame_preview_start", PROP_INT, PROP_TIME);
RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
RNA_def_property_int_sdna(prop, NULL, "r.psfra");
RNA_def_property_int_funcs(prop, NULL, "rna_Scene_preview_range_start_frame_set", NULL);
RNA_def_property_ui_text(prop, "Preview Range Start Frame", "Alternative start frame for UI playback");
RNA_def_property_update(prop, NC_SCENE|ND_FRAME, NULL);
- prop= RNA_def_property(srna, "preview_range_frame_end", PROP_INT, PROP_TIME);
+ prop= RNA_def_property(srna, "frame_preview_end", PROP_INT, PROP_TIME);
RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
RNA_def_property_int_sdna(prop, NULL, "r.pefra");
RNA_def_property_int_funcs(prop, NULL, "rna_Scene_preview_range_end_frame_set", NULL);
@@ -3161,7 +3306,7 @@ void RNA_def_scene(BlenderRNA *brna)
RNA_def_property_update(prop, NC_SCENE|ND_FRAME, NULL);
/* Stamp */
- prop= RNA_def_property(srna, "stamp_note", PROP_STRING, PROP_NONE);
+ prop= RNA_def_property(srna, "use_stamp_note", PROP_STRING, PROP_NONE);
RNA_def_property_string_sdna(prop, NULL, "r.stamp_udata");
RNA_def_property_ui_text(prop, "Stamp Note", "User define note for the render stamping");
RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
@@ -3170,14 +3315,14 @@ void RNA_def_scene(BlenderRNA *brna)
rna_def_animdata_common(srna);
/* Readonly Properties */
- prop= RNA_def_property(srna, "nla_tweakmode_on", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "is_nla_tweakmode", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", SCE_NLA_EDIT_ON);
RNA_def_property_clear_flag(prop, PROP_EDITABLE); /* DO NOT MAKE THIS EDITABLE, OR NLA EDITOR BREAKS */
RNA_def_property_ui_text(prop, "NLA TweakMode", "Indicates whether there is any action referenced by NLA being edited. Strictly read-only");
RNA_def_property_update(prop, NC_SPACE|ND_SPACE_GRAPH, NULL);
/* Frame dropping flag for playback and sync enum */
- prop= RNA_def_property(srna, "frame_drop", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_frame_drop", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", SCE_FRAME_DROP);
RNA_def_property_ui_text(prop, "Frame Dropping", "Play back dropping frames if frame display is too slow");
RNA_def_property_update(prop, NC_SCENE, NULL);
@@ -3190,7 +3335,8 @@ void RNA_def_scene(BlenderRNA *brna)
/* Nodes (Compositing) */
- prop= RNA_def_property(srna, "nodetree", PROP_POINTER, PROP_NONE);
+ prop= RNA_def_property(srna, "node_tree", PROP_POINTER, PROP_NONE);
+ RNA_def_property_pointer_sdna(prop, NULL, "nodetree");
RNA_def_property_ui_text(prop, "Node Tree", "Compositing node tree");
prop= RNA_def_property(srna, "use_nodes", PROP_BOOLEAN, PROP_NONE);
@@ -3211,25 +3357,14 @@ void RNA_def_scene(BlenderRNA *brna)
RNA_def_property_struct_type(prop, "KeyingSet");
RNA_def_property_ui_text(prop, "Absolute Keying Sets", "Absolute Keying Sets for this Scene");
RNA_def_property_update(prop, NC_SCENE|ND_KEYINGSET, NULL);
+ rna_def_scene_keying_sets(brna, prop);
- prop= RNA_def_property(srna, "all_keying_sets", PROP_COLLECTION, PROP_NONE);
+ prop= RNA_def_property(srna, "keying_sets_all", PROP_COLLECTION, PROP_NONE);
RNA_def_property_collection_funcs(prop, "rna_Scene_all_keyingsets_begin", "rna_Scene_all_keyingsets_next", "rna_iterator_listbase_end", "rna_iterator_listbase_get", 0, 0, 0);
RNA_def_property_struct_type(prop, "KeyingSet");
- RNA_def_property_ui_text(prop, "All Keying Sets", "All Keying Sets available for use (builtins and Absolute Keying Sets for this Scene)");
- RNA_def_property_update(prop, NC_SCENE|ND_KEYINGSET, NULL);
-
- prop= RNA_def_property(srna, "active_keying_set", PROP_POINTER, PROP_NONE);
- RNA_def_property_struct_type(prop, "KeyingSet");
- RNA_def_property_flag(prop, PROP_EDITABLE);
- RNA_def_property_pointer_funcs(prop, "rna_Scene_active_keying_set_get", "rna_Scene_active_keying_set_set", NULL, NULL);
- RNA_def_property_ui_text(prop, "Active Keying Set", "Active Keying Set used to insert/delete keyframes");
- RNA_def_property_update(prop, NC_SCENE|ND_KEYINGSET, NULL);
-
- prop= RNA_def_property(srna, "active_keying_set_index", PROP_INT, PROP_NONE);
- RNA_def_property_int_sdna(prop, NULL, "active_keyingset");
- RNA_def_property_int_funcs(prop, "rna_Scene_active_keying_set_index_get", "rna_Scene_active_keying_set_index_set", NULL);
- RNA_def_property_ui_text(prop, "Active Keying Set Index", "Current Keying Set index (negative for 'builtin' and positive for 'absolute')");
+ RNA_def_property_ui_text(prop, "All Keying Sets", "All Keying Sets available for use (Builtins and Absolute Keying Sets for this Scene)");
RNA_def_property_update(prop, NC_SCENE|ND_KEYINGSET, NULL);
+ rna_def_scene_keying_sets_all(brna, prop);
/* Tool Settings */
prop= RNA_def_property(srna, "tool_settings", PROP_POINTER, PROP_NONE);
@@ -3273,41 +3408,41 @@ void RNA_def_scene(BlenderRNA *brna)
rna_def_timeline_markers(brna, prop);
/* Audio Settings */
- prop= RNA_def_property(srna, "mute_audio", PROP_BOOLEAN, PROP_NONE);
- RNA_def_property_boolean_sdna(prop, NULL, "audio.flag", AUDIO_MUTE);
+ prop= RNA_def_property(srna, "use_audio", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_negative_sdna(prop, NULL, "audio.flag", AUDIO_MUTE);
RNA_def_property_ui_text(prop, "Audio Muted", "Play back of audio from Sequence Editor will be muted");
RNA_def_property_update(prop, NC_SCENE, NULL);
- prop= RNA_def_property(srna, "sync_audio", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_audio_sync", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "audio.flag", AUDIO_SYNC);
RNA_def_property_ui_text(prop, "Audio Sync", "Play back and sync with audio clock, dropping frames if frame display is too slow");
RNA_def_property_update(prop, NC_SCENE, NULL);
- prop= RNA_def_property(srna, "scrub_audio", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_audio_scrub", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "audio.flag", AUDIO_SCRUB);
RNA_def_property_ui_text(prop, "Audio Scrubbing", "Play audio from Sequence Editor while scrubbing");
RNA_def_property_update(prop, NC_SCENE, NULL);
- prop= RNA_def_property(srna, "speed_of_sound", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "audio_doppler_speed", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "audio.speed_of_sound");
RNA_def_property_range(prop, 0.01f, FLT_MAX);
RNA_def_property_ui_text(prop, "Speed of Sound", "Speed of sound for Doppler effect calculation");
RNA_def_property_update(prop, NC_SCENE, NULL);
- prop= RNA_def_property(srna, "doppler_factor", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "audio_doppler_factor", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "audio.doppler_factor");
RNA_def_property_range(prop, 0.0, FLT_MAX);
RNA_def_property_ui_text(prop, "Doppler Factor", "Pitch factor for Doppler effect calculation");
RNA_def_property_update(prop, NC_SCENE, NULL);
- prop= RNA_def_property(srna, "distance_model", PROP_ENUM, PROP_NONE);
+ prop= RNA_def_property(srna, "audio_distance_model", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_bitflag_sdna(prop, NULL, "audio.distance_model");
RNA_def_property_enum_items(prop, audio_distance_model_items);
RNA_def_property_ui_text(prop, "Distance Model", "Distance model for distance attenuation calculation");
RNA_def_property_update(prop, NC_SCENE, NULL);
/* Game Settings */
- prop= RNA_def_property(srna, "game_data", PROP_POINTER, PROP_NONE);
+ prop= RNA_def_property(srna, "game_settings", PROP_POINTER, PROP_NONE);
RNA_def_property_flag(prop, PROP_NEVER_NULL);
RNA_def_property_pointer_sdna(prop, NULL, "gm");
RNA_def_property_struct_type(prop, "SceneGameData");
diff --git a/source/blender/makesrna/intern/rna_scene_api.c b/source/blender/makesrna/intern/rna_scene_api.c
index c3b60514d2a..800922ceba0 100644
--- a/source/blender/makesrna/intern/rna_scene_api.c
+++ b/source/blender/makesrna/intern/rna_scene_api.c
@@ -47,9 +47,11 @@
-static void rna_Scene_set_frame(Scene *scene, int frame)
+static void rna_Scene_frame_set(Scene *scene, int frame, float subframe)
{
scene->r.cfra= frame;
+ scene->r.subframe= subframe;
+
CLAMP(scene->r.cfra, MINAFRAME, MAXFRAME);
scene_update_for_newframe(G.main, scene, (1<<20) - 1);
@@ -61,33 +63,6 @@ static void rna_Scene_update_tagged(Scene *scene)
scene_update_tagged(G.main, scene);
}
-static KeyingSet *rna_Scene_add_keying_set(Scene *sce, ReportList *reports,
- char name[], int absolute, int insertkey_needed, int insertkey_visual)
-{
- KeyingSet *ks= NULL;
- short flag=0, keyingflag=0;
-
- /* validate flags */
- if (absolute)
- flag |= KEYINGSET_ABSOLUTE;
- if (insertkey_needed)
- keyingflag |= INSERTKEY_NEEDED;
- if (insertkey_visual)
- keyingflag |= INSERTKEY_MATRIX;
-
- /* call the API func, and set the active keyingset index */
- ks= BKE_keyingset_add(&sce->keyingsets, name, flag, keyingflag);
-
- if (ks) {
- sce->active_keyingset= BLI_countlist(&sce->keyingsets);
- return ks;
- }
- else {
- BKE_report(reports, RPT_ERROR, "Keying Set could not be added.");
- return NULL;
- }
-}
-
static void rna_SceneRender_get_frame_path(RenderData *rd, int frame, char *name)
{
if(BKE_imtype_is_movie(rd->imtype))
@@ -103,28 +78,14 @@ void RNA_api_scene(StructRNA *srna)
FunctionRNA *func;
PropertyRNA *parm;
- func= RNA_def_function(srna, "set_frame", "rna_Scene_set_frame");
+ func= RNA_def_function(srna, "frame_set", "rna_Scene_frame_set");
RNA_def_function_ui_description(func, "Set scene frame updating all objects immediately.");
parm= RNA_def_int(func, "frame", 0, MINAFRAME, MAXFRAME, "", "Frame number to set.", MINAFRAME, MAXFRAME);
RNA_def_property_flag(parm, PROP_REQUIRED);
+ parm= RNA_def_float(func, "subframe", 0.0, 0.0, 1.0, "", "Sub-frame time, between 0.0 and 1.0", 0.0, 1.0);
func= RNA_def_function(srna, "update", "rna_Scene_update_tagged");
RNA_def_function_ui_description(func, "Update data tagged to be updated from previous access to data or operators.");
-
- /* Add Keying Set */
- func= RNA_def_function(srna, "add_keying_set", "rna_Scene_add_keying_set");
- RNA_def_function_ui_description(func, "Add a new Keying Set to Scene.");
- RNA_def_function_flag(func, FUNC_USE_REPORTS);
- /* returns the new KeyingSet */
- parm= RNA_def_pointer(func, "keyingset", "KeyingSet", "", "Newly created Keying Set.");
- RNA_def_function_return(func, parm);
- /* name */
- RNA_def_string(func, "name", "KeyingSet", 64, "Name", "Name of Keying Set");
- /* flags */
- RNA_def_boolean(func, "absolute", 1, "Absolute", "Keying Set defines specific paths/settings to be keyframed (i.e. is not reliant on context info)");
- /* keying flags */
- RNA_def_boolean(func, "insertkey_needed", 0, "Insert Keyframes - Only Needed", "Only insert keyframes where they're needed in the relevant F-Curves.");
- RNA_def_boolean(func, "insertkey_visual", 0, "Insert Keyframes - Visual", "Insert keyframes based on 'visual transforms'.");
}
void RNA_api_scene_render(StructRNA *srna)
@@ -133,7 +94,7 @@ void RNA_api_scene_render(StructRNA *srna)
PropertyRNA *parm;
func= RNA_def_function(srna, "frame_path", "rna_SceneRender_get_frame_path");
- RNA_def_function_ui_description(func, "Set scene frame updating all objects immediately.");
+ RNA_def_function_ui_description(func, "Return the absolute path to the filename to be written for a given frame.");
parm= 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(func, "name", "", FILE_MAX, "File Name", "the resulting filename from the scenes render settings.");
RNA_def_property_flag(parm, PROP_THICK_WRAP); /* needed for string return value */
diff --git a/source/blender/makesrna/intern/rna_screen.c b/source/blender/makesrna/intern/rna_screen.c
index cb028e6da1a..da8aab32f31 100644
--- a/source/blender/makesrna/intern/rna_screen.c
+++ b/source/blender/makesrna/intern/rna_screen.c
@@ -74,7 +74,7 @@ static void rna_Screen_scene_update(bContext *C, PointerRNA *ptr)
}
}
-static int rna_Screen_animation_playing_get(PointerRNA *ptr)
+static int rna_Screen_is_animation_playing_get(PointerRNA *ptr)
{
bScreen *sc= (bScreen*)ptr->data;
return (sc->animtimer != NULL);
@@ -194,12 +194,12 @@ static void rna_def_screen(BlenderRNA *brna)
RNA_def_property_struct_type(prop, "Area");
RNA_def_property_ui_text(prop, "Areas", "Areas the screen is subdivided into");
- prop= RNA_def_property(srna, "animation_playing", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "is_animation_playing", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
- RNA_def_property_boolean_funcs(prop, "rna_Screen_animation_playing_get", NULL);
+ RNA_def_property_boolean_funcs(prop, "rna_Screen_is_animation_playing_get", NULL);
RNA_def_property_ui_text(prop, "Animation Playing", "Animation playback is active");
- prop= RNA_def_property(srna, "fullscreen", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_fullscreen", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
RNA_def_property_boolean_funcs(prop, "rna_Screen_fullscreen_get", NULL);
RNA_def_property_ui_text(prop, "Fullscreen", "An area is maximised, filling this screen");
diff --git a/source/blender/makesrna/intern/rna_sculpt_paint.c b/source/blender/makesrna/intern/rna_sculpt_paint.c
index 435c90eb623..3b83ec2d3ad 100644
--- a/source/blender/makesrna/intern/rna_sculpt_paint.c
+++ b/source/blender/makesrna/intern/rna_sculpt_paint.c
@@ -49,6 +49,7 @@ static EnumPropertyItem particle_edit_hair_brush_items[] = {
{0, NULL, 0, NULL, NULL}};
#ifdef RNA_RUNTIME
+#include "MEM_guardedalloc.h"
#include "BKE_context.h"
#include "BKE_pointcache.h"
@@ -188,7 +189,7 @@ static void rna_def_paint(BlenderRNA *brna)
RNA_def_property_boolean_sdna(prop, NULL, "flags", PAINT_SHOW_BRUSH_ON_SURFACE);
RNA_def_property_ui_text(prop, "Show Brush On Surface", "");
- prop= RNA_def_property(srna, "fast_navigate", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_low_resolution", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flags", PAINT_FAST_NAVIGATE);
RNA_def_property_ui_text(prop, "Fast Navigate", "For multires, show low resolution while navigating the view");
}
@@ -201,22 +202,22 @@ static void rna_def_sculpt(BlenderRNA *brna)
srna= RNA_def_struct(brna, "Sculpt", "Paint");
RNA_def_struct_ui_text(srna, "Sculpt", "");
- prop= RNA_def_property(srna, "radial_symm", PROP_INT, PROP_XYZ);
+ prop= RNA_def_property(srna, "radial_symmetry", PROP_INT, PROP_XYZ);
RNA_def_property_int_sdna(prop, NULL, "radial_symm");
RNA_def_property_int_default(prop, 1);
RNA_def_property_range(prop, 1, 64);
RNA_def_property_ui_range(prop, 0, 32, 1, 1);
RNA_def_property_ui_text(prop, "Radial Symmetry Count X Axis", "Number of times to copy strokes across the surface");
- prop= RNA_def_property(srna, "symmetry_x", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_symmetry_x", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flags", SCULPT_SYMM_X);
RNA_def_property_ui_text(prop, "Symmetry X", "Mirror brush across the X axis");
- prop= RNA_def_property(srna, "symmetry_y", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_symmetry_y", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flags", SCULPT_SYMM_Y);
RNA_def_property_ui_text(prop, "Symmetry Y", "Mirror brush across the Y axis");
- prop= RNA_def_property(srna, "symmetry_z", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_symmetry_z", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flags", SCULPT_SYMM_Z);
RNA_def_property_ui_text(prop, "Symmetry Z", "Mirror brush across the Z axis");
@@ -236,7 +237,7 @@ static void rna_def_sculpt(BlenderRNA *brna)
RNA_def_property_boolean_sdna(prop, NULL, "flags", SCULPT_SYMMETRY_FEATHER);
RNA_def_property_ui_text(prop, "Symmetry Feathering", "Reduce the strength of the brush where it overlaps symmetrical daubs");
- prop= RNA_def_property(srna, "use_openmp", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_threaded", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flags", SCULPT_USE_OPENMP);
RNA_def_property_ui_text(prop, "Use OpenMP", "Take advantage of multiple CPU cores to improve sculpting performance");
}
@@ -250,15 +251,15 @@ static void rna_def_vertex_paint(BlenderRNA *brna)
RNA_def_struct_sdna(srna, "VPaint");
RNA_def_struct_ui_text(srna, "Vertex Paint", "Properties of vertex and weight paint mode");
- prop= RNA_def_property(srna, "all_faces", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_all_faces", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", VP_AREA);
RNA_def_property_ui_text(prop, "All Faces", "Paint on all faces inside brush");
-
- prop= RNA_def_property(srna, "normals", PROP_BOOLEAN, PROP_NONE);
+
+ prop= RNA_def_property(srna, "use_normal", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", VP_NORMALS);
RNA_def_property_ui_text(prop, "Normals", "Applies the vertex normal before painting");
- prop= RNA_def_property(srna, "spray", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_spray", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", VP_SPRAY);
RNA_def_property_ui_text(prop, "Spray", "Keep applying paint effect while holding mouse");
}
@@ -290,7 +291,7 @@ static void rna_def_image_paint(BlenderRNA *brna)
RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", IMAGEPAINT_PROJECT_XRAY);
RNA_def_property_ui_text(prop, "Occlude", "Only paint onto the faces directly under the brush (slower)");
- prop= RNA_def_property(srna, "use_backface_cull", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_backface_culling", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", IMAGEPAINT_PROJECT_BACKFACE);
RNA_def_property_ui_text(prop, "Cull", "Ignore faces pointing away from the view (faster)");
@@ -365,21 +366,21 @@ static void rna_def_particle_edit(BlenderRNA *brna)
RNA_def_property_enum_funcs(prop, NULL, "rna_ParticleEdit_tool_set", "rna_ParticleEdit_tool_itemf");
RNA_def_property_ui_text(prop, "Tool", "");
- prop= RNA_def_property(srna, "selection_mode", PROP_ENUM, PROP_NONE);
+ prop= RNA_def_property(srna, "select_mode", PROP_ENUM, PROP_NONE);
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");
- prop= RNA_def_property(srna, "keep_lengths", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_preserve_length", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", PE_KEEP_LENGTHS);
RNA_def_property_ui_text(prop, "Keep Lengths", "Keep path lengths constant");
- prop= RNA_def_property(srna, "keep_root", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_preserve_root", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", PE_LOCK_FIRST);
RNA_def_property_ui_text(prop, "Keep Root", "Keep root keys unmodified");
- prop= RNA_def_property(srna, "emitter_deflect", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_emitter_deflect", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", PE_DEFLECT_EMITTER);
RNA_def_property_ui_text(prop, "Deflect Emitter", "Keep paths from intersecting the emitter");
@@ -388,25 +389,25 @@ static void rna_def_particle_edit(BlenderRNA *brna)
RNA_def_property_ui_range(prop, 0.0f, 10.0f, 10, 3);
RNA_def_property_ui_text(prop, "Emitter Distance", "Distance to keep particles away from the emitter");
- prop= RNA_def_property(srna, "fade_time", PROP_BOOLEAN, PROP_NONE);
+ 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");
- prop= RNA_def_property(srna, "auto_velocity", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_auto_velocity", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", PE_AUTO_VELOCITY);
RNA_def_property_ui_text(prop, "Auto Velocity", "Calculate point velocities automatically");
- prop= RNA_def_property(srna, "draw_particles", PROP_BOOLEAN, PROP_NONE);
+ 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");
- prop= RNA_def_property(srna, "add_interpolate", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_default_interpolate", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", PE_INTERPOLATE_ADDED);
RNA_def_property_ui_text(prop, "Interpolate", "Interpolate new particles from the existing ones");
- prop= RNA_def_property(srna, "add_keys", PROP_INT, PROP_NONE);
+ prop= RNA_def_property(srna, "default_key_count", PROP_INT, PROP_NONE);
RNA_def_property_int_sdna(prop, NULL, "totaddkey");
RNA_def_property_range(prop, 2, INT_MAX);
RNA_def_property_ui_range(prop, 2, 20, 10, 3);
@@ -433,12 +434,12 @@ static void rna_def_particle_edit(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Type", "");
RNA_def_property_update(prop, NC_OBJECT|ND_DRAW, "rna_ParticleEdit_redo");
- prop= RNA_def_property(srna, "editable", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "is_editable", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_funcs(prop, "rna_ParticleEdit_editable_get", NULL);
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
RNA_def_property_ui_text(prop, "Editable", "A valid edit mode exists");
- prop= RNA_def_property(srna, "hair", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "is_hair", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_funcs(prop, "rna_ParticleEdit_hair_get", NULL);
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
RNA_def_property_ui_text(prop, "Hair", "Editing hair");
diff --git a/source/blender/makesrna/intern/rna_sensor.c b/source/blender/makesrna/intern/rna_sensor.c
index 7a130efa37c..6dddb042533 100644
--- a/source/blender/makesrna/intern/rna_sensor.c
+++ b/source/blender/makesrna/intern/rna_sensor.c
@@ -156,6 +156,8 @@ static void rna_Sensor_keyboard_key_set(struct PointerRNA *ptr, int value)
if (ISKEYBOARD(value))
ks->key = value;
+ else
+ ks->key = 0;
}
static void rna_Sensor_keyboard_modifier_set(struct PointerRNA *ptr, int value)
@@ -165,6 +167,8 @@ static void rna_Sensor_keyboard_modifier_set(struct PointerRNA *ptr, int value)
if (ISKEYBOARD(value))
ks->qual = value;
+ else
+ ks->qual = 0;
}
static void rna_Sensor_keyboard_modifier2_set(struct PointerRNA *ptr, int value)
@@ -174,6 +178,8 @@ static void rna_Sensor_keyboard_modifier2_set(struct PointerRNA *ptr, int value)
if (ISKEYBOARD(value))
ks->qual2 = value;
+ else
+ ks->qual2 = 0;
}
static void rna_Sensor_tap_set(struct PointerRNA *ptr, int value)
@@ -260,13 +266,13 @@ static void rna_def_sensor(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Type", "");
RNA_def_property_update(prop, NC_LOGIC, NULL);
- prop= RNA_def_property(srna, "pinned", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "pin", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", SENS_PIN);
RNA_def_property_ui_text(prop, "Pinned", "Display when not linked to a visible states controller");
RNA_def_property_ui_icon(prop, ICON_UNPINNED, 1);
RNA_def_property_update(prop, NC_LOGIC, NULL);
- prop= RNA_def_property(srna, "expanded", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_expanded", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", SENS_SHOW);
RNA_def_property_ui_text(prop, "Expanded", "Set sensor expanded in the user interface");
RNA_def_property_ui_icon(prop, ICON_TRIA_RIGHT, 1);
@@ -276,17 +282,18 @@ static void rna_def_sensor(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Invert Output", "Invert the level(output) of this sensor");
RNA_def_property_update(prop, NC_LOGIC, NULL);
- prop= RNA_def_property(srna, "level", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_level", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_sdna(prop, NULL, "level", 1);
RNA_def_property_ui_text(prop, "Level", "Level detector, trigger controllers of new states(only applicable upon logic state transition)");
RNA_def_property_boolean_funcs(prop, NULL, "rna_Sensor_level_set");
RNA_def_property_update(prop, NC_LOGIC, NULL);
- prop= RNA_def_property(srna, "pulse_true_level", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_pulse_true_level", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "pulse", SENS_PULSE_REPEAT);
RNA_def_property_ui_text(prop, "Pulse True Level", "Activate TRUE level triggering (pulse mode)");
RNA_def_property_update(prop, NC_LOGIC, NULL);
- prop= RNA_def_property(srna, "pulse_false_level", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_pulse_false_level", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "pulse", SENS_NEG_PULSE_MODE);
RNA_def_property_ui_text(prop, "Pulse False Level", "Activate FALSE level triggering (pulse mode)");
RNA_def_property_update(prop, NC_LOGIC, NULL);
@@ -297,7 +304,7 @@ static void rna_def_sensor(BlenderRNA *brna)
RNA_def_property_range(prop, 0, 10000);
RNA_def_property_update(prop, NC_LOGIC, NULL);
- prop= RNA_def_property(srna, "tap", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_tap", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "tap", 1);
RNA_def_property_boolean_funcs(prop, NULL, "rna_Sensor_tap_set");
RNA_def_property_ui_text(prop, "Tap", "Trigger controllers only for an instant, even while the sensor remains true");
@@ -402,14 +409,14 @@ static void rna_def_keyboard_sensor(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Key", "");
RNA_def_property_update(prop, NC_LOGIC, NULL);
- prop= RNA_def_property(srna, "modifier_key", PROP_ENUM, PROP_NONE);
+ prop= RNA_def_property(srna, "modifier_key_1", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "qual");
RNA_def_property_enum_items(prop, event_type_items);
RNA_def_property_enum_funcs(prop, NULL, "rna_Sensor_keyboard_modifier_set", NULL);
RNA_def_property_ui_text(prop, "Modifier Key", "Modifier key code");
RNA_def_property_update(prop, NC_LOGIC, NULL);
- prop= RNA_def_property(srna, "second_modifier_key", PROP_ENUM, PROP_NONE);
+ prop= RNA_def_property(srna, "modifier_key_2", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "qual2");
RNA_def_property_enum_items(prop, event_type_items);
RNA_def_property_enum_funcs(prop, NULL, "rna_Sensor_keyboard_modifier2_set", NULL);
@@ -426,7 +433,7 @@ static void rna_def_keyboard_sensor(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Log Toggle", "Property that receive the keystrokes in case a string is logged");
RNA_def_property_update(prop, NC_LOGIC, NULL);
- prop= RNA_def_property(srna, "all_keys", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_all_keys", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "type", 1);
RNA_def_property_ui_text(prop, "All Keys", "Trigger this sensor on any keystroke");
RNA_def_property_update(prop, NC_LOGIC, NULL);
@@ -464,12 +471,12 @@ static void rna_def_property_sensor(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Value", "Check for this value in types in Equal or Not Equal types");
RNA_def_property_update(prop, NC_LOGIC, NULL);
- prop= RNA_def_property(srna, "min_value", PROP_STRING, PROP_NONE);
+ prop= RNA_def_property(srna, "value_min", PROP_STRING, PROP_NONE);
RNA_def_property_string_sdna(prop, NULL, "value");
RNA_def_property_ui_text(prop, "Minimum Value", "Specify minimum value in Interval type");
RNA_def_property_update(prop, NC_LOGIC, NULL);
- prop= RNA_def_property(srna, "max_value", PROP_STRING, PROP_NONE);
+ prop= RNA_def_property(srna, "value_max", PROP_STRING, PROP_NONE);
RNA_def_property_string_sdna(prop, NULL, "maxvalue");
RNA_def_property_ui_text(prop, "Maximum Value", "Specify maximum value in Interval type");
RNA_def_property_update(prop, NC_LOGIC, NULL);
@@ -548,7 +555,7 @@ static void rna_def_delay_sensor(BlenderRNA *brna)
RNA_def_property_range(prop, 0, 5000);
RNA_def_property_update(prop, NC_LOGIC, NULL);
- prop= RNA_def_property(srna, "repeat", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_repeat", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", SENS_DELAY_REPEAT);
RNA_def_property_ui_text(prop, "Repeat", "Toggle repeat option. If selected, the sensor restarts after Delay+Dur logic tics");
RNA_def_property_update(prop, NC_LOGIC, NULL);
@@ -563,12 +570,12 @@ static void rna_def_collision_sensor(BlenderRNA *brna)
RNA_def_struct_ui_text(srna, "Collision Sensor", "Sensor to detect objects colliding with the current object, with more settings than the Touch sensor");
RNA_def_struct_sdna_from(srna, "bCollisionSensor", "data");
- prop= RNA_def_property(srna, "pulse", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_pulse", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "mode", SENS_COLLISION_PULSE);
RNA_def_property_ui_text(prop, "Pulse", "Changes to the set of colliding objects generates pulse");
RNA_def_property_update(prop, NC_LOGIC, NULL);
- prop= RNA_def_property(srna, "collision_type", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_material", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "mode", SENS_COLLISION_MATERIAL);
RNA_def_property_ui_text(prop, "M/P", "Toggle collision on material or property");
RNA_def_property_update(prop, NC_LOGIC, NULL);
@@ -695,7 +702,7 @@ static void rna_def_ray_sensor(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Material", "Only look for Objects with this material");
*/
- prop= RNA_def_property(srna, "x_ray_mode", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_x_ray", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "mode", SENS_RAY_XRAY);
RNA_def_property_ui_text(prop, "X-Ray Mode", "Toggle X-Ray option (see through objects that don't have the property)");
RNA_def_property_update(prop, NC_LOGIC, NULL);
@@ -773,7 +780,7 @@ static void rna_def_joystick_sensor(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Event Type", "The type of event this joystick sensor is triggered on");
RNA_def_property_update(prop, NC_LOGIC, NULL);
- prop= RNA_def_property(srna, "all_events", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_all_events", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", SENS_JOY_ANY_EVENT);
RNA_def_property_ui_text(prop, "All Events", "Triggered by all events on this joysticks current type (axis/button/hat)");
RNA_def_property_update(prop, NC_LOGIC, NULL);
diff --git a/source/blender/makesrna/intern/rna_sequencer.c b/source/blender/makesrna/intern/rna_sequencer.c
index b39a9fecebf..3593efaa743 100644
--- a/source/blender/makesrna/intern/rna_sequencer.c
+++ b/source/blender/makesrna/intern/rna_sequencer.c
@@ -36,6 +36,7 @@
#include "DNA_sequence_types.h"
#include "BKE_animsys.h"
+#include "BKE_global.h"
#include "BKE_sequencer.h"
#include "MEM_guardedalloc.h"
@@ -149,7 +150,7 @@ static void rna_Sequence_anim_startofs_final_set(PointerRNA *ptr, int value)
seq->anim_startofs = MIN2(value, seq->len + seq->anim_startofs);
- reload_sequence_new_file(scene, seq, FALSE);
+ reload_sequence_new_file(G.main, scene, seq, FALSE);
rna_Sequence_frame_change_update(scene, seq);
}
@@ -160,7 +161,7 @@ static void rna_Sequence_anim_endofs_final_set(PointerRNA *ptr, int value)
seq->anim_endofs = MIN2(value, seq->len + seq->anim_endofs);
- reload_sequence_new_file(scene, seq, FALSE);
+ reload_sequence_new_file(G.main, scene, seq, FALSE);
rna_Sequence_frame_change_update(scene, seq);
}
@@ -551,7 +552,7 @@ static void rna_Sequence_mute_update(Main *bmain, Scene *scene, PointerRNA *ptr)
static void rna_Sequence_filepath_update(Main *bmain, Scene *scene, PointerRNA *ptr)
{
Sequence *seq= (Sequence*)(ptr->data);
- reload_sequence_new_file(scene, seq, TRUE);
+ reload_sequence_new_file(G.main, scene, seq, TRUE);
calc_sequence(scene, seq);
rna_Sequence_update(bmain, scene, ptr);
}
@@ -670,22 +671,26 @@ static void rna_def_strip_crop(BlenderRNA *brna)
RNA_def_struct_ui_text(srna, "Sequence Crop", "Cropping parameters for a sequence strip");
RNA_def_struct_sdna(srna, "StripCrop");
- prop= RNA_def_property(srna, "top", PROP_INT, PROP_UNSIGNED);
+ prop= RNA_def_property(srna, "max_y", PROP_INT, PROP_UNSIGNED);
+ RNA_def_property_int_sdna(prop, NULL, "top");
RNA_def_property_ui_text(prop, "Top", "");
RNA_def_property_ui_range(prop, 0, 4096, 1, 0);
RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update");
- prop= RNA_def_property(srna, "bottom", PROP_INT, PROP_UNSIGNED);
+ prop= RNA_def_property(srna, "min_x", PROP_INT, PROP_UNSIGNED);
+ RNA_def_property_int_sdna(prop, NULL, "bottom");
RNA_def_property_ui_text(prop, "Bottom", "");
RNA_def_property_ui_range(prop, 0, 4096, 1, 0);
RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update");
- prop= RNA_def_property(srna, "left", PROP_INT, PROP_UNSIGNED);
+ prop= RNA_def_property(srna, "min_y", PROP_INT, PROP_UNSIGNED);
+ RNA_def_property_int_sdna(prop, NULL, "left");
RNA_def_property_ui_text(prop, "Left", "");
RNA_def_property_ui_range(prop, 0, 4096, 1, 0);
RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update");
- prop= RNA_def_property(srna, "right", PROP_INT, PROP_UNSIGNED);
+ prop= RNA_def_property(srna, "max_x", PROP_INT, PROP_UNSIGNED);
+ RNA_def_property_int_sdna(prop, NULL, "right");
RNA_def_property_ui_text(prop, "Right", "");
RNA_def_property_ui_range(prop, 0, 4096, 1, 0);
RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update");
@@ -763,17 +768,17 @@ static void rna_def_strip_color_balance(BlenderRNA *brna)
RNA_def_property_ui_range(prop, 0, 2, 0.1, 3);
RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update");
- prop= RNA_def_property(srna, "inverse_gain", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "invert_gain", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", SEQ_COLOR_BALANCE_INVERSE_GAIN);
RNA_def_property_ui_text(prop, "Inverse Gain", "");
RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update");
- prop= RNA_def_property(srna, "inverse_gamma", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "invert_gamma", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", SEQ_COLOR_BALANCE_INVERSE_GAMMA);
RNA_def_property_ui_text(prop, "Inverse Gamma", "");
RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update");
- prop= RNA_def_property(srna, "inverse_lift", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "invert_lift", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", SEQ_COLOR_BALANCE_INVERSE_LIFT);
RNA_def_property_ui_text(prop, "Inverse Lift", "");
RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update");
@@ -882,14 +887,14 @@ static void rna_def_sequence(BlenderRNA *brna)
/* strip positioning */
- prop= RNA_def_property(srna, "frame_final_length", PROP_INT, PROP_TIME);
+ prop= RNA_def_property(srna, "frame_final_duration", PROP_INT, PROP_TIME);
RNA_def_property_range(prop, 1, MAXFRAME);
RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
RNA_def_property_ui_text(prop, "Length", "The length of the contents of this strip before the handles are applied");
RNA_def_property_int_funcs(prop, "rna_Sequence_frame_length_get", "rna_Sequence_frame_length_set",NULL);
RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update");
- prop= RNA_def_property(srna, "frame_length", PROP_INT, PROP_TIME);
+ prop= RNA_def_property(srna, "frame_duration", PROP_INT, PROP_TIME);
RNA_def_property_int_sdna(prop, NULL, "len");
RNA_def_property_clear_flag(prop, PROP_EDITABLE|PROP_ANIMATABLE);
RNA_def_property_range(prop, 1, MAXFRAME);
@@ -951,12 +956,13 @@ static void rna_def_sequence(BlenderRNA *brna)
/* blending */
- prop= RNA_def_property(srna, "blend_mode", PROP_ENUM, PROP_NONE);
+ prop= RNA_def_property(srna, "blend_type", PROP_ENUM, PROP_NONE);
+ RNA_def_property_enum_sdna(prop, NULL, "blend_mode");
RNA_def_property_enum_items(prop, blend_mode_items);
RNA_def_property_ui_text(prop, "Blend Mode", "");
RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update");
- prop= RNA_def_property(srna, "blend_opacity", PROP_FLOAT, PROP_FACTOR);
+ prop= RNA_def_property(srna, "blend_alpha", PROP_FLOAT, PROP_FACTOR);
RNA_def_property_range(prop, 0.0f, 1.0f);
RNA_def_property_ui_text(prop, "Blend Opacity", "");
RNA_def_property_float_funcs(prop, "rna_Sequence_opacity_get", "rna_Sequence_opacity_set", NULL); // stupid 0-100 -> 0-1
@@ -968,7 +974,7 @@ static void rna_def_sequence(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Effect fader position", "");
RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update");
- prop= RNA_def_property(srna, "use_effect_default_fade", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_default_fade", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", SEQ_USE_EFFECT_DEFAULT_FADE);
RNA_def_property_ui_text(prop, "Use Default Fade", "Fade effect using the built-in default (usually make transition as long as effect strip)");
RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update");
@@ -1036,37 +1042,37 @@ static void rna_def_filter_video(StructRNA *srna)
{
PropertyRNA *prop;
- prop= RNA_def_property(srna, "de_interlace", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_deinterlace", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", SEQ_FILTERY);
RNA_def_property_ui_text(prop, "De-Interlace", "For video movies to remove fields");
RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update_reopen_files");
- prop= RNA_def_property(srna, "premultiply", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_premultiply", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", SEQ_MAKE_PREMUL);
RNA_def_property_ui_text(prop, "Premultiply", "Convert RGB from key alpha to premultiplied alpha");
RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, NULL);
- prop= RNA_def_property(srna, "flip_x", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_flip_x", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", SEQ_FLIPX);
RNA_def_property_ui_text(prop, "Flip X", "Flip on the X axis");
RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update");
- prop= RNA_def_property(srna, "flip_y", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_flip_y", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", SEQ_FLIPY);
RNA_def_property_ui_text(prop, "Flip Y", "Flip on the Y axis");
RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update");
- prop= RNA_def_property(srna, "convert_float", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_float", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", SEQ_MAKE_FLOAT);
RNA_def_property_ui_text(prop, "Convert Float", "Convert input to float data");
RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update");
- prop= RNA_def_property(srna, "reverse_frames", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_reverse_frames", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", SEQ_REVERSE_FRAMES);
RNA_def_property_ui_text(prop, "Flip Time", "Reverse frame order");
RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update");
- prop= RNA_def_property(srna, "multiply_colors", PROP_FLOAT, PROP_UNSIGNED);
+ prop= RNA_def_property(srna, "color_multiply", PROP_FLOAT, PROP_UNSIGNED);
RNA_def_property_float_sdna(prop, NULL, "mul");
RNA_def_property_range(prop, 0.0f, 20.0f);
RNA_def_property_ui_text(prop, "Multiply Colors", "");
@@ -1128,12 +1134,12 @@ static void rna_def_proxy(StructRNA *srna)
RNA_def_property_pointer_sdna(prop, NULL, "strip->proxy");
RNA_def_property_ui_text(prop, "Proxy", "");
- prop= RNA_def_property(srna, "proxy_custom_directory", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_proxy_custom_directory", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", SEQ_USE_PROXY_CUSTOM_DIR);
RNA_def_property_ui_text(prop, "Proxy Custom Directory", "Use a custom directory to store data");
RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update");
- prop= RNA_def_property(srna, "proxy_custom_file", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_proxy_custom_file", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", SEQ_USE_PROXY_CUSTOM_FILE);
RNA_def_property_ui_text(prop, "Proxy Custom File", "Use a custom file to read proxy data from");
RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update");
@@ -1143,7 +1149,7 @@ static void rna_def_input(StructRNA *srna)
{
PropertyRNA *prop;
- prop= RNA_def_property(srna, "animation_start_offset", PROP_INT, PROP_UNSIGNED);
+ prop= RNA_def_property(srna, "animation_offset_start", PROP_INT, PROP_UNSIGNED);
RNA_def_property_int_sdna(prop, NULL, "anim_startofs");
RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
RNA_def_property_int_funcs(prop, NULL, "rna_Sequence_anim_startofs_final_set", NULL); // overlap tests
@@ -1151,7 +1157,7 @@ static void rna_def_input(StructRNA *srna)
RNA_def_property_ui_text(prop, "Animation Start Offset", "Animation start offset (trim start)");
RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update");
- prop= RNA_def_property(srna, "animation_end_offset", PROP_INT, PROP_UNSIGNED);
+ prop= RNA_def_property(srna, "animation_offset_end", PROP_INT, PROP_UNSIGNED);
RNA_def_property_int_sdna(prop, NULL, "anim_endofs");
RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
RNA_def_property_int_funcs(prop, NULL, "rna_Sequence_anim_endofs_final_set", NULL); // overlap tests
@@ -1330,7 +1336,7 @@ static void rna_def_plugin(BlenderRNA *brna)
RNA_def_struct_ui_text(srna, "Plugin Sequence", "Sequence strip applying an effect, loaded from an external plugin");
RNA_def_struct_sdna_from(srna, "PluginSeq", "plugin");
- prop= RNA_def_property(srna, "filename", PROP_STRING, PROP_FILEPATH);
+ prop= RNA_def_property(srna, "filename", PROP_STRING, PROP_FILENAME);
RNA_def_property_string_sdna(prop, NULL, "name");
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
RNA_def_property_ui_text(prop, "Filename", "");
@@ -1416,7 +1422,7 @@ static void rna_def_glow(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Boost Factor", "Brightness multiplier");
RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update");
- prop= RNA_def_property(srna, "blur_distance", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "blur_radius", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "dDist");
RNA_def_property_range(prop, 0.5f, 20.0f);
RNA_def_property_ui_text(prop, "Blur Distance", "Radius of glow effect");
@@ -1428,7 +1434,7 @@ static void rna_def_glow(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Quality", "Accuracy of the blur effect");
RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update");
- prop= RNA_def_property(srna, "only_boost", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_only_boost", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "bNoComp", 0);
RNA_def_property_ui_text(prop, "Only Boost", "Show the glow buffer only");
RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update");
@@ -1468,7 +1474,7 @@ static void rna_def_transform(BlenderRNA *brna)
RNA_def_property_ui_range(prop, 0, 10, 3, 10);
RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update");
- prop= RNA_def_property(srna, "uniform_scale", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_uniform_scale", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "uniform_scale", 0);
RNA_def_property_ui_text(prop, "Uniform Scale", "Scale uniformly, preserving aspect ratio");
RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update");
@@ -1536,17 +1542,17 @@ static void rna_def_speed_control(BlenderRNA *brna)
RNA_def_property_ui_range(prop, 0.0f, 100.0f, 1, 0);
RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update");
- prop= RNA_def_property(srna, "curve_velocity", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_curve_velocity", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flags", SEQ_SPEED_INTEGRATE);
RNA_def_property_ui_text(prop, "F-Curve Velocity", "Interpret the F-Curve value as a velocity instead of a frame number");
RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update");
- prop= RNA_def_property(srna, "frame_blending", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_frame_blend", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flags", SEQ_SPEED_BLEND);
RNA_def_property_ui_text(prop, "Frame Blending", "Blend two frames into the target for a smoother result");
RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update");
- prop= RNA_def_property(srna, "curve_compress_y", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_curve_compress_y", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flags", SEQ_SPEED_COMPRESS_IPO_Y);
RNA_def_property_ui_text(prop, "F-Curve Compress Y", "Scale F-Curve value to get the target frame number, F-Curve value runs from 0.0 to 1.0");
RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update");
diff --git a/source/blender/makesrna/intern/rna_smoke.c b/source/blender/makesrna/intern/rna_smoke.c
index f921595304d..53f27bc06fb 100644
--- a/source/blender/makesrna/intern/rna_smoke.c
+++ b/source/blender/makesrna/intern/rna_smoke.c
@@ -131,7 +131,7 @@ static void rna_def_smoke_domain_settings(BlenderRNA *brna)
RNA_def_struct_sdna(srna, "SmokeDomainSettings");
RNA_def_struct_path_func(srna, "rna_SmokeDomainSettings_path");
- prop= RNA_def_property(srna, "maxres", PROP_INT, PROP_NONE);
+ prop= RNA_def_property(srna, "resolution_max", PROP_INT, PROP_NONE);
RNA_def_property_int_sdna(prop, NULL, "maxres");
RNA_def_property_range(prop, 24, 512);
RNA_def_property_ui_range(prop, 24, 512, 2, 0);
@@ -145,12 +145,12 @@ static void rna_def_smoke_domain_settings(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Amplification", "Enhance the resolution of smoke by this factor using noise");
RNA_def_property_update(prop, NC_OBJECT|ND_MODIFIER, "rna_Smoke_reset");
- prop= RNA_def_property(srna, "highres", PROP_BOOLEAN, PROP_NONE);
+ 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_update(prop, NC_OBJECT|ND_MODIFIER, "rna_Smoke_reset");
- prop= RNA_def_property(srna, "viewhighres", PROP_BOOLEAN, PROP_NONE);
+ 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);
@@ -175,7 +175,7 @@ static void rna_def_smoke_domain_settings(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Heat", "Higher value results in faster rising smoke");
RNA_def_property_update(prop, NC_OBJECT|ND_MODIFIER, "rna_Smoke_reset");
- prop= RNA_def_property(srna, "coll_group", PROP_POINTER, PROP_NONE);
+ 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);
@@ -189,7 +189,7 @@ static void rna_def_smoke_domain_settings(BlenderRNA *brna)
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");
- prop= RNA_def_property(srna, "eff_group", PROP_POINTER, PROP_NONE);
+ 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);
@@ -205,17 +205,17 @@ static void rna_def_smoke_domain_settings(BlenderRNA *brna)
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, 100.0);
- RNA_def_property_ui_range(prop, 1.0, 1000.0, 1, 0);
+ 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, 0, NULL);
- prop= RNA_def_property(srna, "dissolve_smoke", PROP_BOOLEAN, PROP_NONE);
+ 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, 0, NULL);
- prop= RNA_def_property(srna, "dissolve_smoke_log", PROP_BOOLEAN, PROP_NONE);
+ 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, 0, NULL);
@@ -230,19 +230,19 @@ static void rna_def_smoke_domain_settings(BlenderRNA *brna)
RNA_def_property_pointer_sdna(prop, NULL, "point_cache[1]");
RNA_def_property_ui_text(prop, "Point Cache", "");
- prop= RNA_def_property(srna, "smoke_cache_comp", PROP_ENUM, PROP_NONE);
+ prop= RNA_def_property(srna, "point_cache_compress_type", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "cache_comp");
RNA_def_property_enum_items(prop, smoke_cache_comp_items);
RNA_def_property_ui_text(prop, "Cache Compression", "Compression method to be used");
RNA_def_property_update(prop, 0, NULL);
- prop= RNA_def_property(srna, "smoke_cache_high_comp", PROP_ENUM, PROP_NONE);
+ prop= RNA_def_property(srna, "point_cache_compress_high_type", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "cache_high_comp");
RNA_def_property_enum_items(prop, smoke_cache_comp_items);
RNA_def_property_ui_text(prop, "Cache Compression", "Compression method to be used");
RNA_def_property_update(prop, 0, NULL);
- prop= RNA_def_property(srna, "smoke_domain_colli", PROP_ENUM, PROP_NONE);
+ prop= RNA_def_property(srna, "collision_extents", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "border_collisions");
RNA_def_property_enum_items(prop, smoke_domain_colli_items);
RNA_def_property_ui_text(prop, "Border Collisions", "Selects which domain border will be treated as collision object.");
@@ -253,7 +253,7 @@ static void rna_def_smoke_domain_settings(BlenderRNA *brna)
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
RNA_def_property_ui_text(prop, "Effector Weights", "");
- prop= RNA_def_property(srna, "smoothemitter", PROP_BOOLEAN, PROP_NONE);
+ 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", "Smoothens emitted smoke to avoid blockiness.");
RNA_def_property_update(prop, 0, NULL);
@@ -298,19 +298,19 @@ static void rna_def_smoke_flow_settings(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Temp. Diff.", "Temperature difference to ambient temperature");
RNA_def_property_update(prop, 0, NULL);
- prop= RNA_def_property(srna, "psys", PROP_POINTER, PROP_NONE);
+ prop= RNA_def_property(srna, "particle_system", PROP_POINTER, PROP_NONE);
RNA_def_property_pointer_sdna(prop, NULL, "psys");
RNA_def_property_struct_type(prop, "ParticleSystem");
RNA_def_property_flag(prop, PROP_EDITABLE);
RNA_def_property_ui_text(prop, "Particle Systems", "Particle systems emitted from the object");
RNA_def_property_update(prop, 0, "rna_Smoke_reset_dependancy");
- prop= RNA_def_property(srna, "outflow", PROP_BOOLEAN, PROP_NONE);
+ 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", "Deletes smoke from simulation");
RNA_def_property_update(prop, 0, NULL);
- prop= RNA_def_property(srna, "absolute", PROP_BOOLEAN, PROP_NONE);
+ 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 allows given density value in emitter area.");
RNA_def_property_update(prop, 0, NULL);
@@ -320,7 +320,7 @@ static void rna_def_smoke_flow_settings(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Initial Velocity", "Smoke inherits it's velocity from the emitter particle");
RNA_def_property_update(prop, 0, NULL);
- prop= RNA_def_property(srna, "velocity_multiplier", PROP_FLOAT, PROP_NONE);
+ 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);
diff --git a/source/blender/makesrna/intern/rna_sound.c b/source/blender/makesrna/intern/rna_sound.c
index 9048a3c3072..674fbbad9c6 100644
--- a/source/blender/makesrna/intern/rna_sound.c
+++ b/source/blender/makesrna/intern/rna_sound.c
@@ -79,7 +79,7 @@ static void rna_def_sound(BlenderRNA *brna)
RNA_def_property_pointer_sdna(prop, NULL, "packedfile");
RNA_def_property_ui_text(prop, "Packed File", "");
- prop= RNA_def_property(srna, "caching", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_memory_cache", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_funcs(prop, "rna_Sound_caching_get", "rna_Sound_caching_set");
RNA_def_property_ui_text(prop, "Caching", "The sound file is decoded and loaded into RAM");
RNA_def_property_update(prop, 0, "rna_Sound_filepath_update");
diff --git a/source/blender/makesrna/intern/rna_space.c b/source/blender/makesrna/intern/rna_space.c
index 436e9f60dc7..eeb45aec538 100644
--- a/source/blender/makesrna/intern/rna_space.c
+++ b/source/blender/makesrna/intern/rna_space.c
@@ -89,7 +89,7 @@ EnumPropertyItem autosnap_items[] = {
{SACTSNAP_MARKER, "MARKER", 0, "Nearest Marker", "Snap to nearest marker"},
{0, NULL, 0, NULL, NULL}};
-EnumPropertyItem viewport_shading_items[] = {
+EnumPropertyItem viewport_shade_items[] = {
{OB_BOUNDBOX, "BOUNDBOX", ICON_BBOX, "Bounding Box", "Display the object's local bounding boxes only"},
{OB_WIRE, "WIREFRAME", ICON_WIRE, "Wireframe", "Display the object as wire edges"},
{OB_SOLID, "SOLID", ICON_SOLID, "Solid", "Display the object solid, lit with default OpenGL lights"},
@@ -567,31 +567,30 @@ static void rna_SpaceProperties_align_set(PointerRNA *ptr, int value)
}
/* Space Console */
-static void rna_ConsoleLine_line_get(PointerRNA *ptr, char *value)
+static void rna_ConsoleLine_body_get(PointerRNA *ptr, char *value)
{
ConsoleLine *ci= (ConsoleLine*)ptr->data;
strcpy(value, ci->line);
}
-static int rna_ConsoleLine_line_length(PointerRNA *ptr)
+static int rna_ConsoleLine_body_length(PointerRNA *ptr)
{
ConsoleLine *ci= (ConsoleLine*)ptr->data;
return ci->len;
}
-static void rna_ConsoleLine_line_set(PointerRNA *ptr, const char *value)
+static void rna_ConsoleLine_body_set(PointerRNA *ptr, const char *value)
{
ConsoleLine *ci= (ConsoleLine*)ptr->data;
int len= strlen(value);
- if(len < ci->len_alloc) { /* allocated size is enough? */
- strcpy(ci->line, value);
- }
- else { /* allocate a new strnig */
+ if((len >= ci->len_alloc) || (len * 2 < ci->len_alloc) ) { /* allocate a new strnig */
MEM_freeN(ci->line);
- ci->line= BLI_strdup(value);
- ci->len_alloc= len;
+ ci->line= MEM_mallocN((len + 1) * sizeof(char), "rna_consoleline");
+ ci->len_alloc= len + 1;
}
+
+ memcpy(ci->line, value, len + 1);
ci->len= len;
if(ci->cursor > len) /* clamp the cursor */
@@ -735,7 +734,7 @@ static void rna_def_space_image_uv(BlenderRNA *brna)
RNA_def_struct_ui_text(srna, "Space UV Editor", "UV editor data for the image editor space");
/* selection */
- prop= RNA_def_property(srna, "sticky_selection_mode", PROP_ENUM, PROP_NONE);
+ prop= RNA_def_property(srna, "sticky_select_mode", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "sticky");
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");
@@ -748,12 +747,12 @@ static void rna_def_space_image_uv(BlenderRNA *brna)
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);
- prop= RNA_def_property(srna, "draw_smooth_edges", PROP_BOOLEAN, PROP_NONE);
+ 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);
- prop= RNA_def_property(srna, "draw_stretch", PROP_BOOLEAN, PROP_NONE);
+ 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);
@@ -764,17 +763,17 @@ static void rna_def_space_image_uv(BlenderRNA *brna)
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);
- prop= RNA_def_property(srna, "draw_modified_edges", PROP_BOOLEAN, PROP_NONE);
+ 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);
- prop= RNA_def_property(srna, "draw_other_objects", PROP_BOOLEAN, PROP_NONE);
+ 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);
- prop= RNA_def_property(srna, "normalized_coordinates", PROP_BOOLEAN, PROP_NONE);
+ 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);
@@ -787,22 +786,22 @@ static void rna_def_space_image_uv(BlenderRNA *brna)
/* todo: move edge and face drawing options here from G.f */
- prop= RNA_def_property(srna, "snap_to_pixels", PROP_BOOLEAN, PROP_NONE);
+ 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);
- prop= RNA_def_property(srna, "constrain_to_image_bounds", PROP_BOOLEAN, PROP_NONE);
+ 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);
- prop= RNA_def_property(srna, "live_unwrap", PROP_BOOLEAN, PROP_NONE);
+ 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);
- prop= RNA_def_property(srna, "pivot", PROP_ENUM, PROP_NONE);
+ 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");
@@ -839,22 +838,22 @@ static void rna_def_space_outliner(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Display Mode", "Type of information to display");
RNA_def_property_update(prop, NC_SPACE|ND_SPACE_OUTLINER, NULL);
- prop= RNA_def_property(srna, "display_filter", PROP_STRING, PROP_NONE);
+ 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);
- prop= RNA_def_property(srna, "match_case_sensitive", PROP_BOOLEAN, PROP_NONE);
+ 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);
- prop= RNA_def_property(srna, "match_complete", PROP_BOOLEAN, PROP_NONE);
+ 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);
- prop= RNA_def_property(srna, "show_restriction_columns", PROP_BOOLEAN, PROP_NONE);
+ 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);
@@ -976,9 +975,9 @@ static void rna_def_space_view3d(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Lock Bone", "3D View center is locked to this bone's position");
RNA_def_property_update(prop, NC_SPACE|ND_SPACE_VIEW3D, NULL);
- prop= RNA_def_property(srna, "viewport_shading", PROP_ENUM, PROP_NONE);
+ 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_shading_items);
+ RNA_def_property_enum_items(prop, viewport_shade_items);
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, NULL);
@@ -1029,52 +1028,52 @@ static void rna_def_space_view3d(BlenderRNA *brna)
RNA_def_property_range(prop, 1, 1024);
RNA_def_property_update(prop, NC_SPACE|ND_SPACE_VIEW3D, NULL);
- prop= RNA_def_property(srna, "display_floor", PROP_BOOLEAN, PROP_NONE);
+ 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);
- prop= RNA_def_property(srna, "display_x_axis", PROP_BOOLEAN, PROP_NONE);
+ 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);
- prop= RNA_def_property(srna, "display_y_axis", PROP_BOOLEAN, PROP_NONE);
+ 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);
- prop= RNA_def_property(srna, "display_z_axis", PROP_BOOLEAN, PROP_NONE);
+ 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);
- prop= RNA_def_property(srna, "outline_selected", PROP_BOOLEAN, PROP_NONE);
+ 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);
- prop= RNA_def_property(srna, "all_object_origins", PROP_BOOLEAN, PROP_NONE);
+ 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);
- prop= RNA_def_property(srna, "relationship_lines", PROP_BOOLEAN, PROP_NONE);
+ 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);
- prop= RNA_def_property(srna, "textured_solid", PROP_BOOLEAN, PROP_NONE);
+ 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);
- prop= RNA_def_property(srna, "display_render_override", PROP_BOOLEAN, PROP_NONE);
+ 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);
- prop= RNA_def_property(srna, "occlude_geometry", PROP_BOOLEAN, PROP_NONE);
+ 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);
@@ -1086,7 +1085,7 @@ static void rna_def_space_view3d(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Background Images", "List of background images");
RNA_def_property_update(prop, NC_SPACE|ND_SPACE_VIEW3D, NULL);
- prop= RNA_def_property(srna, "display_background_images", PROP_BOOLEAN, PROP_NONE);
+ 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);
@@ -1097,31 +1096,31 @@ static void rna_def_space_view3d(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Pivot Point", "Pivot center for rotation/scaling");
RNA_def_property_update(prop, NC_SPACE|ND_SPACE_VIEW3D, NULL);
- prop= RNA_def_property(srna, "pivot_point_align", PROP_BOOLEAN, PROP_NONE);
+ 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 object centers only");
RNA_def_property_ui_icon(prop, ICON_ALIGN, 0);
RNA_def_property_update(prop, NC_SPACE|ND_SPACE_VIEW3D, NULL);
- prop= RNA_def_property(srna, "manipulator", PROP_BOOLEAN, PROP_NONE);
+ 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);
- prop= RNA_def_property(srna, "manipulator_translate", PROP_BOOLEAN, PROP_NONE);
+ 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);
- prop= RNA_def_property(srna, "manipulator_rotate", PROP_BOOLEAN, PROP_NONE);
+ 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);
- prop= RNA_def_property(srna, "manipulator_scale", PROP_BOOLEAN, PROP_NONE);
+ 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);
@@ -1153,7 +1152,7 @@ static void rna_def_space_view3d(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Visible Layers", "Layers visible in this 3D View");
RNA_def_property_update(prop, NC_SPACE|ND_SPACE_VIEW3D, NULL);
- prop= RNA_def_property(srna, "used_layers", PROP_BOOLEAN, PROP_LAYER_MEMBER);
+ prop= RNA_def_property(srna, "layers_used", PROP_BOOLEAN, PROP_LAYER_MEMBER);
RNA_def_property_boolean_sdna(prop, NULL, "lay_used", 1);
RNA_def_property_array(prop, 20);
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
@@ -1180,12 +1179,12 @@ static void rna_def_space_view3d(BlenderRNA *brna)
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");
- prop= RNA_def_property(srna, "box_preview", PROP_BOOLEAN, PROP_NONE);
+ 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");
- prop= RNA_def_property(srna, "box_clip", PROP_BOOLEAN, PROP_NONE);
+ 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_update");
@@ -1274,7 +1273,7 @@ static void rna_def_space_buttons(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Align", "Arrangement of the panels");
RNA_def_property_update(prop, NC_SPACE|ND_SPACE_PROPERTIES, NULL);
- prop= RNA_def_property(srna, "brush_texture", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_brush_texture", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", SB_BRUSH_TEX);
RNA_def_property_ui_text(prop, "Brush Texture", "Show brush textures");
RNA_def_property_update(prop, NC_SPACE|ND_SPACE_PROPERTIES, NULL);
@@ -1326,7 +1325,7 @@ static void rna_def_space_image(BlenderRNA *brna)
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");
- prop= RNA_def_property(srna, "image_pin", PROP_BOOLEAN, PROP_NONE);
+ 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);
@@ -1338,7 +1337,7 @@ static void rna_def_space_image(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Line sample", "Sampled colors along line");
/* image draw */
- prop= RNA_def_property(srna, "draw_repeated", PROP_BOOLEAN, PROP_NONE);
+ 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);
@@ -1358,7 +1357,7 @@ static void rna_def_space_image(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "UV Editor", "UV editor settings");
/* paint */
- prop= RNA_def_property(srna, "image_painting", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_image_paint", PROP_BOOLEAN, PROP_NONE);
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);
@@ -1376,7 +1375,7 @@ static void rna_def_space_image(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Use Grease Pencil", "Display and edit the grease pencil freehand annotations overlay");
/* update */
- prop= RNA_def_property(srna, "update_automatically", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_realtime_update", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "lock", 0);
RNA_def_property_ui_text(prop, "Update Automatically", "Update other affected window spaces automatically to reflect changes during interactive operations such as transform");
@@ -1446,12 +1445,12 @@ static void rna_def_space_sequencer(BlenderRNA *brna)
RNA_def_property_update(prop, NC_SPACE|ND_SPACE_SEQUENCER, NULL);
/* flag's */
- prop= RNA_def_property(srna, "show_cframe_indicator", PROP_BOOLEAN, PROP_NONE);
+ 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);
- prop= RNA_def_property(srna, "draw_frames", PROP_BOOLEAN, PROP_NONE);
+ 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);
@@ -1461,12 +1460,12 @@ static void rna_def_space_sequencer(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Transform Markers", "Transform markers as well as strips");
RNA_def_property_update(prop, NC_SPACE|ND_SPACE_SEQUENCER, NULL);
- prop= RNA_def_property(srna, "separate_color_preview", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_separate_color", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", SEQ_DRAW_COLOR_SEPERATED);
RNA_def_property_ui_text(prop, "Separate Colors", "Separate color channels in preview");
RNA_def_property_update(prop, NC_SPACE|ND_SPACE_SEQUENCER, NULL);
- prop= RNA_def_property(srna, "draw_safe_margin", PROP_BOOLEAN, PROP_NONE);
+ 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);
@@ -1536,31 +1535,28 @@ static void rna_def_space_text(BlenderRNA *brna)
RNA_def_property_update(prop, NC_SPACE|ND_SPACE_TEXT, NULL);
/* display */
- prop= RNA_def_property(srna, "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);
-
- prop= RNA_def_property(srna, "word_wrap", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_word_wrap", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "wordwrap", 0);
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);
- prop= RNA_def_property(srna, "line_numbers", PROP_BOOLEAN, PROP_NONE);
+ 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);
- prop= RNA_def_property(srna, "overwrite", PROP_BOOLEAN, PROP_NONE);
- RNA_def_property_ui_text(prop, "Overwrite", "Overwrite characters when typing rather than inserting them");
+ 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);
- prop= RNA_def_property(srna, "live_edit", PROP_BOOLEAN, PROP_NONE);
- RNA_def_property_ui_text(prop, "Live Edit", "Run python while editing");
+ 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);
prop= RNA_def_property(srna, "tab_width", PROP_INT, PROP_NONE);
@@ -1575,13 +1571,24 @@ static void rna_def_space_text(BlenderRNA *brna)
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);
+ /* 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);
+
+ 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);
+
/* find */
- prop= RNA_def_property(srna, "find_all", PROP_BOOLEAN, PROP_NONE);
+ 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);
- prop= RNA_def_property(srna, "find_wrap", PROP_BOOLEAN, PROP_NONE);
+ 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);
@@ -1635,7 +1642,7 @@ static void rna_def_space_dopesheet(BlenderRNA *brna)
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);
- prop= RNA_def_property(srna, "show_cframe_indicator", PROP_BOOLEAN, PROP_NONE);
+ 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);
@@ -1646,12 +1653,12 @@ static void rna_def_space_dopesheet(BlenderRNA *brna)
RNA_def_property_update(prop, NC_SPACE|ND_SPACE_DOPESHEET, NULL);
/* editing */
- prop= RNA_def_property(srna, "automerge_keyframes", PROP_BOOLEAN, PROP_NONE);
+ 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);
- prop= RNA_def_property(srna, "realtime_updates", PROP_BOOLEAN, PROP_NONE);
+ 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);
@@ -1667,7 +1674,7 @@ static void rna_def_space_dopesheet(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "DopeSheet", "Settings for filtering animation data");
/* autosnap */
- prop= RNA_def_property(srna, "autosnap", PROP_ENUM, PROP_NONE);
+ prop= RNA_def_property(srna, "auto_snap", PROP_ENUM, PROP_NONE);
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");
@@ -1713,7 +1720,7 @@ static void rna_def_space_graph(BlenderRNA *brna)
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);
- prop= RNA_def_property(srna, "show_cframe_indicator", PROP_BOOLEAN, PROP_NONE);
+ 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);
@@ -1728,23 +1735,23 @@ static void rna_def_space_graph(BlenderRNA *brna)
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);
- prop= RNA_def_property(srna, "only_selected_curves_handles", PROP_BOOLEAN, PROP_NONE);
+ 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);
- prop= RNA_def_property(srna, "only_selected_keyframe_handles", PROP_BOOLEAN, PROP_NONE);
+ 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);
/* editing */
- prop= RNA_def_property(srna, "automerge_keyframes", PROP_BOOLEAN, PROP_NONE);
+ 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);
- prop= RNA_def_property(srna, "realtime_updates", PROP_BOOLEAN, PROP_NONE);
+ 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);
@@ -1755,7 +1762,7 @@ static void rna_def_space_graph(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Show Cursor", "Show 2D cursor");
RNA_def_property_update(prop, NC_SPACE|ND_SPACE_GRAPH, NULL);
- prop= RNA_def_property(srna, "cursor_value", PROP_FLOAT, PROP_NONE);
+ 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);
@@ -1773,7 +1780,7 @@ static void rna_def_space_graph(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "DopeSheet", "Settings for filtering animation data");
/* autosnap */
- prop= RNA_def_property(srna, "autosnap", PROP_ENUM, PROP_NONE);
+ prop= RNA_def_property(srna, "auto_snap", PROP_ENUM, PROP_NONE);
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");
@@ -1803,7 +1810,7 @@ static void rna_def_space_nla(BlenderRNA *brna)
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);
- prop= RNA_def_property(srna, "show_cframe_indicator", PROP_BOOLEAN, PROP_NONE);
+ 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);
@@ -1814,7 +1821,7 @@ static void rna_def_space_nla(BlenderRNA *brna)
RNA_def_property_update(prop, NC_SPACE|ND_SPACE_NLA, NULL);
/* editing */
- prop= RNA_def_property(srna, "realtime_updates", PROP_BOOLEAN, PROP_NONE);
+ 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);
@@ -1826,7 +1833,7 @@ static void rna_def_space_nla(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "DopeSheet", "Settings for filtering animation data");
/* autosnap */
- prop= RNA_def_property(srna, "autosnap", PROP_ENUM, PROP_NONE);
+ prop= RNA_def_property(srna, "auto_snap", PROP_ENUM, PROP_NONE);
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");
@@ -1843,48 +1850,48 @@ static void rna_def_space_time(BlenderRNA *brna)
RNA_def_struct_ui_text(srna, "Space Timeline Editor", "Timeline editor space data");
/* Define Anim Playback Areas */
- prop= RNA_def_property(srna, "play_top_left", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_play_top_left_3d_editor", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "redraws", TIME_REGION);
RNA_def_property_ui_text(prop, "Top-Left 3D Editor", "");
RNA_def_property_update(prop, NC_SPACE|ND_SPACE_TIME, "rna_SpaceTime_redraw_update");
- prop= RNA_def_property(srna, "play_all_3d", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_play_3d_editors", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "redraws", 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_SpaceTime_redraw_update");
- prop= RNA_def_property(srna, "play_anim", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_play_animation_editors", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "redraws", TIME_ALL_ANIM_WIN);
RNA_def_property_ui_text(prop, "Animation Editors", "");
RNA_def_property_update(prop, NC_SPACE|ND_SPACE_TIME, "rna_SpaceTime_redraw_update");
- prop= RNA_def_property(srna, "play_buttons", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_play_properties_editors", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "redraws", TIME_ALL_BUTS_WIN);
RNA_def_property_ui_text(prop, "Property Editors", "");
RNA_def_property_update(prop, NC_SPACE|ND_SPACE_TIME, "rna_SpaceTime_redraw_update");
- prop= RNA_def_property(srna, "play_image", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_play_image_editors", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "redraws", TIME_ALL_IMAGE_WIN);
RNA_def_property_ui_text(prop, "Image Editors", "");
RNA_def_property_update(prop, NC_SPACE|ND_SPACE_TIME, "rna_SpaceTime_redraw_update");
- prop= RNA_def_property(srna, "play_sequencer", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_play_sequence_editors", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "redraws", TIME_SEQ);
RNA_def_property_ui_text(prop, "Sequencer Editors", "");
RNA_def_property_update(prop, NC_SPACE|ND_SPACE_TIME, "rna_SpaceTime_redraw_update");
- prop= RNA_def_property(srna, "play_nodes", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_play_node_editors", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "redraws", TIME_NODES);
RNA_def_property_ui_text(prop, "Node Editors", "");
RNA_def_property_update(prop, NC_SPACE|ND_SPACE_TIME, "rna_SpaceTime_redraw_update");
/* Other options */
- prop= RNA_def_property(srna, "only_selected", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_only_selected", PROP_BOOLEAN, PROP_NONE);
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 channels only");
RNA_def_property_update(prop, NC_SPACE|ND_SPACE_TIME, NULL);
- prop= RNA_def_property(srna, "show_cframe_indicator", PROP_BOOLEAN, PROP_NONE);
+ 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);
@@ -1925,8 +1932,8 @@ static void rna_def_console_line(BlenderRNA *brna)
RNA_def_struct_ui_text(srna, "Console Input", "Input line for the interactive console");
// XXX using non-inited "prop", uh? RNA_def_property_update(prop, NC_SPACE|ND_SPACE_CONSOLE, NULL);
- prop= RNA_def_property(srna, "line", PROP_STRING, PROP_NONE);
- RNA_def_property_string_funcs(prop, "rna_ConsoleLine_line_get", "rna_ConsoleLine_line_length", "rna_ConsoleLine_line_set");
+ prop= RNA_def_property(srna, "body", PROP_STRING, PROP_NONE);
+ 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);
@@ -1963,11 +1970,11 @@ static void rna_def_space_console(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Type", "Console type");
RNA_def_property_update(prop, NC_SPACE|ND_SPACE_CONSOLE, NULL);
- prop= RNA_def_property(srna, "selection_start", PROP_INT, PROP_UNSIGNED); /* copied from text editor */
+ 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);
- prop= RNA_def_property(srna, "selection_end", PROP_INT, PROP_UNSIGNED); /* copied from text editor */
+ 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);
@@ -1987,7 +1994,7 @@ static void rna_def_space_console(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Show Operator", "Display the operator log");
RNA_def_property_update(prop, NC_SPACE|ND_SPACE_CONSOLE_REPORT, NULL);
- prop= RNA_def_property(srna, "show_report_warn", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_report_warning", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "rpt_mask", CONSOLE_RPT_WARN);
RNA_def_property_ui_text(prop, "Show Warn", "Display warnings");
RNA_def_property_update(prop, NC_SPACE|ND_SPACE_CONSOLE_REPORT, NULL);
@@ -2040,85 +2047,90 @@ static void rna_def_fileselect_params(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Title", "Title for the file browser");
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
- prop= RNA_def_property(srna, "directory", PROP_STRING, PROP_NONE);
+ 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);
- prop= RNA_def_property(srna, "file", PROP_STRING, PROP_NONE);
+ 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);
- prop= RNA_def_property(srna, "display", PROP_ENUM, PROP_NONE);
+ 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);
- prop= RNA_def_property(srna, "do_filter", PROP_BOOLEAN, PROP_NONE);
+ 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);
- prop= RNA_def_property(srna, "hide_dot", PROP_BOOLEAN, PROP_NONE);
- RNA_def_property_boolean_sdna(prop, NULL, "flag", FILE_HIDE_DOT);
- RNA_def_property_ui_text(prop, "Hide Dot Files", "Hide hidden dot files");
+ 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);
- prop= RNA_def_property(srna, "sort", PROP_ENUM, PROP_NONE);
+ 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);
- prop= RNA_def_property(srna, "filter_image", PROP_BOOLEAN, PROP_NONE);
+ 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);
- prop= RNA_def_property(srna, "filter_blender", PROP_BOOLEAN, PROP_NONE);
+ 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);
- prop= RNA_def_property(srna, "filter_movie", PROP_BOOLEAN, PROP_NONE);
+ 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);
- prop= RNA_def_property(srna, "filter_script", PROP_BOOLEAN, PROP_NONE);
+ 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);
- prop= RNA_def_property(srna, "filter_font", PROP_BOOLEAN, PROP_NONE);
+ 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);
- prop= RNA_def_property(srna, "filter_sound", PROP_BOOLEAN, PROP_NONE);
+ 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);
- prop= RNA_def_property(srna, "filter_text", PROP_BOOLEAN, PROP_NONE);
+ 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_BLANK, 0);
RNA_def_property_update(prop, NC_SPACE|ND_SPACE_FILE_PARAMS, NULL);
- prop= RNA_def_property(srna, "filter_folder", PROP_BOOLEAN, PROP_NONE);
+ 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);
+
+ 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);
}
@@ -2134,6 +2146,10 @@ static void rna_def_space_filebrowser(BlenderRNA *brna)
prop= RNA_def_property(srna, "params", PROP_POINTER, PROP_NONE);
RNA_def_property_pointer_sdna(prop, NULL, "params");
RNA_def_property_ui_text(prop, "Filebrowser Parameter", "Parameters and Settings for the Filebrowser");
+
+ prop= RNA_def_property(srna, "operator", PROP_POINTER, PROP_NONE);
+ RNA_def_property_pointer_sdna(prop, NULL, "op");
+ RNA_def_property_ui_text(prop, "Operator", "");
}
static void rna_def_space_info(BlenderRNA *brna)
@@ -2154,7 +2170,7 @@ static void rna_def_space_userpref(BlenderRNA *brna)
RNA_def_struct_sdna(srna, "SpaceUserPref");
RNA_def_struct_ui_text(srna, "Space User Preferences", "User preferences space data");
- prop= RNA_def_property(srna, "filter", PROP_STRING, PROP_NONE);
+ prop= RNA_def_property(srna, "filter_text", PROP_STRING, PROP_NONE);
RNA_def_property_string_sdna(prop, NULL, "filter");
RNA_def_property_ui_text(prop, "Filter", "Search term for filtering in the UI");
@@ -2202,11 +2218,12 @@ static void rna_def_space_node(BlenderRNA *brna)
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
RNA_def_property_ui_text(prop, "ID From", "Datablock from which the edited datablock is linked");
- prop= RNA_def_property(srna, "nodetree", PROP_POINTER, PROP_NONE);
+ prop= RNA_def_property(srna, "node_tree", PROP_POINTER, PROP_NONE);
+ RNA_def_property_pointer_sdna(prop, NULL, "nodetree");
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
RNA_def_property_ui_text(prop, "Node Tree", "Node tree being displayed and edited");
- prop= RNA_def_property(srna, "backdrop", PROP_BOOLEAN, PROP_NONE);
+ 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);
@@ -2222,59 +2239,59 @@ static void rna_def_space_logic(BlenderRNA *brna)
RNA_def_struct_ui_text(srna, "Space Logic Editor", "Logic editor space data");
/* sensors */
- prop= RNA_def_property(srna, "sensors_show_selected_objects", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_sensors_selected_objects", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "scaflag", BUTS_SENS_SEL);
RNA_def_property_ui_text(prop, "Show Selected Object", "Show sensors of all selected objects");
RNA_def_property_update(prop, NC_LOGIC, NULL);
- prop= RNA_def_property(srna, "sensors_show_active_objects", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_sensors_active_object", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "scaflag", BUTS_SENS_ACT);
RNA_def_property_ui_text(prop, "Show Active Object", "Show sensors of active object");
RNA_def_property_update(prop, NC_LOGIC, NULL);
- prop= RNA_def_property(srna, "sensors_show_linked_controller", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_sensors_linked_controller", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "scaflag", BUTS_SENS_LINK);
RNA_def_property_ui_text(prop, "Show Linked to Controller", "Show linked objects to the controller");
RNA_def_property_update(prop, NC_LOGIC, NULL);
- prop= RNA_def_property(srna, "sensors_show_active_states", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_sensors_active_states", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "scaflag", BUTS_SENS_STATE);
RNA_def_property_ui_text(prop, "Show Active States", "Show only sensors connected to active states");
RNA_def_property_update(prop, NC_LOGIC, NULL);
/* controllers */
- prop= RNA_def_property(srna, "controllers_show_selected_objects", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_controllers_selected_objects", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "scaflag", BUTS_CONT_SEL);
RNA_def_property_ui_text(prop, "Show Selected Object", "Show controllers of all selected objects");
RNA_def_property_update(prop, NC_LOGIC, NULL);
- prop= RNA_def_property(srna, "controllers_show_active_objects", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_controllers_active_object", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "scaflag", BUTS_CONT_ACT);
RNA_def_property_ui_text(prop, "Show Active Object", "Show controllers of active object");
RNA_def_property_update(prop, NC_LOGIC, NULL);
- prop= RNA_def_property(srna, "controllers_show_linked_controller", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_controllers_linked_controller", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "scaflag", BUTS_CONT_LINK);
RNA_def_property_ui_text(prop, "Show Linked to Controller", "Show linked objects to sensor/actuator");
RNA_def_property_update(prop, NC_LOGIC, NULL);
/* actuators */
- prop= RNA_def_property(srna, "actuators_show_selected_objects", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_actuators_selected_objects", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "scaflag", BUTS_ACT_SEL);
RNA_def_property_ui_text(prop, "Show Selected Object", "Show actuators of all selected objects");
RNA_def_property_update(prop, NC_LOGIC, NULL);
- prop= RNA_def_property(srna, "actuators_show_active_objects", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_actuators_active_object", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "scaflag", BUTS_ACT_ACT);
RNA_def_property_ui_text(prop, "Show Active Object", "Show actuators of active object");
RNA_def_property_update(prop, NC_LOGIC, NULL);
- prop= RNA_def_property(srna, "actuators_show_linked_controller", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_actuators_linked_controller", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "scaflag", BUTS_ACT_LINK);
RNA_def_property_ui_text(prop, "Show Linked to Actuator", "Show linked objects to the actuator");
RNA_def_property_update(prop, NC_LOGIC, NULL);
- prop= RNA_def_property(srna, "actuators_show_active_states", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_actuators_active_states", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "scaflag", BUTS_ACT_STATE);
RNA_def_property_ui_text(prop, "Show Active States", "Show only actuators connected to active states");
RNA_def_property_update(prop, NC_LOGIC, NULL);
diff --git a/source/blender/makesrna/intern/rna_text.c b/source/blender/makesrna/intern/rna_text.c
index d8651e5d05d..15e7ce525ba 100644
--- a/source/blender/makesrna/intern/rna_text.c
+++ b/source/blender/makesrna/intern/rna_text.c
@@ -76,7 +76,7 @@ static int rna_Text_modified_get(PointerRNA *ptr)
return text_file_modified(text);
}
-static void rna_TextLine_line_get(PointerRNA *ptr, char *value)
+static void rna_TextLine_body_get(PointerRNA *ptr, char *value)
{
TextLine *line= (TextLine*)ptr->data;
@@ -86,21 +86,23 @@ static void rna_TextLine_line_get(PointerRNA *ptr, char *value)
strcpy(value, "");
}
-static int rna_TextLine_line_length(PointerRNA *ptr)
+static int rna_TextLine_body_length(PointerRNA *ptr)
{
TextLine *line= (TextLine*)ptr->data;
return line->len;
}
-static void rna_TextLine_line_set(PointerRNA *ptr, const char *value)
+static void rna_TextLine_body_set(PointerRNA *ptr, const char *value)
{
TextLine *line= (TextLine*)ptr->data;
+ int len= strlen(value);
if(line->line)
MEM_freeN(line->line);
-
- line->line= BLI_strdup(value);
- line->len= strlen(line->line);
+
+ line->line= MEM_mallocN((len + 1) * sizeof(char), "rna_text_body");
+ line->len= len;
+ memcpy(line->line, value, len + 1);
if(line->format) {
MEM_freeN(line->format);
@@ -118,8 +120,8 @@ static void rna_def_text_line(BlenderRNA *brna)
srna = RNA_def_struct(brna, "TextLine", NULL);
RNA_def_struct_ui_text(srna, "Text Line", "Line of text in a Text datablock");
- prop= RNA_def_property(srna, "line", PROP_STRING, PROP_NONE);
- RNA_def_property_string_funcs(prop, "rna_TextLine_line_get", "rna_TextLine_line_length", "rna_TextLine_line_set");
+ 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);
}
@@ -137,11 +139,13 @@ static void rna_def_text_marker(BlenderRNA *brna)
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
RNA_def_property_ui_text(prop, "Line", "Line in which the marker is located");
- prop= RNA_def_property(srna, "start", PROP_INT, PROP_UNSIGNED);
+ prop= RNA_def_property(srna, "character_index_start", PROP_INT, PROP_UNSIGNED);
+ RNA_def_property_int_sdna(prop, NULL, "start");
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
RNA_def_property_ui_text(prop, "Start", "Start position of the marker in the line");
- prop= RNA_def_property(srna, "end", PROP_INT, PROP_UNSIGNED);
+ prop= RNA_def_property(srna, "character_index_end", PROP_INT, PROP_UNSIGNED);
+ RNA_def_property_int_sdna(prop, NULL, "end");
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
RNA_def_property_ui_text(prop, "End", "Start position of the marker in the line");
@@ -150,12 +154,12 @@ static void rna_def_text_marker(BlenderRNA *brna)
RNA_def_property_range(prop, 0, (int)0xFFFF);
RNA_def_property_ui_text(prop, "Group", "");
- prop= RNA_def_property(srna, "temporary", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "is_temporary", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flags", TMARK_TEMP);
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
RNA_def_property_ui_text(prop, "Temporary", "Marker is temporary");
- prop= RNA_def_property(srna, "edit_all", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_edit_all", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flags", TMARK_EDITALL);
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
RNA_def_property_ui_text(prop, "Edit All", "Edit all markers of the same group as one");
@@ -178,17 +182,17 @@ static void rna_def_text(BlenderRNA *brna)
RNA_def_property_string_funcs(prop, "rna_Text_filename_get", "rna_Text_filename_length", "rna_Text_filename_set");
RNA_def_property_ui_text(prop, "File Path", "Filename of the text file");
- prop= RNA_def_property(srna, "dirty", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "is_dirty", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flags", TXT_ISDIRTY);
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
RNA_def_property_ui_text(prop, "Dirty", "Text file has been edited since last save");
- prop= RNA_def_property(srna, "modified", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "is_modified", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
RNA_def_property_boolean_funcs(prop, "rna_Text_modified_get", NULL);
RNA_def_property_ui_text(prop, "Modified", "Text file on disk is different than the one in memory");
- prop= RNA_def_property(srna, "memory", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "is_in_memory", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flags", TXT_ISMEM);
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
RNA_def_property_ui_text(prop, "Memory", "Text file is in memory, without a corresponding file on disk");
@@ -197,7 +201,7 @@ static void rna_def_text(BlenderRNA *brna)
RNA_def_property_boolean_sdna(prop, NULL, "flags", TXT_ISSCRIPT);
RNA_def_property_ui_text(prop, "Register", "Register this text as a module on loading, Text name must end with \".py\"");
- prop= RNA_def_property(srna, "tabs_as_spaces", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_tabs_as_spaces", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flags", TXT_TABSTOSPACES);
RNA_def_property_ui_text(prop, "Tabs as Spaces", "Automatically converts all new tabs into spaces");
@@ -217,14 +221,14 @@ static void rna_def_text(BlenderRNA *brna)
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
RNA_def_property_ui_text(prop, "Current Character", "Index of current character in current line, and also start index of character in selection if one exists");
- prop= RNA_def_property(srna, "selection_end_line", PROP_POINTER, PROP_NONE);
+ prop= RNA_def_property(srna, "select_end_line", PROP_POINTER, PROP_NONE);
RNA_def_property_flag(prop, PROP_NEVER_NULL);
RNA_def_property_pointer_sdna(prop, NULL, "sell");
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
RNA_def_property_struct_type(prop, "TextLine");
RNA_def_property_ui_text(prop, "Selection End Line", "End line of selection");
- prop= RNA_def_property(srna, "selection_end_character", PROP_INT, PROP_UNSIGNED);
+ prop= RNA_def_property(srna, "select_end_character", PROP_INT, PROP_UNSIGNED);
RNA_def_property_int_sdna(prop, NULL, "selc");
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
RNA_def_property_ui_text(prop, "Selection End Character", "Index of character after end of selection in the selection end line");
diff --git a/source/blender/makesrna/intern/rna_texture.c b/source/blender/makesrna/intern/rna_texture.c
index 277a6b9e282..567166fd15f 100644
--- a/source/blender/makesrna/intern/rna_texture.c
+++ b/source/blender/makesrna/intern/rna_texture.c
@@ -60,7 +60,7 @@ EnumPropertyItem texture_type_items[] = {
{TEX_MARBLE, "MARBLE", ICON_TEXTURE, "Marble", ""},
{TEX_MUSGRAVE, "MUSGRAVE", ICON_TEXTURE, "Musgrave", ""},
{TEX_NOISE, "NOISE", ICON_TEXTURE, "Noise", ""},
- {TEX_PLUGIN, "PLUGIN", ICON_PLUGIN, "Plugin", ""},
+ //{TEX_PLUGIN, "PLUGIN", ICON_PLUGIN, "Plugin", ""}, /* Nothing yet */
{TEX_POINTDENSITY, "POINT_DENSITY", ICON_TEXTURE, "Point Density", ""},
{TEX_STUCCI, "STUCCI", ICON_TEXTURE, "Stucci", ""},
{TEX_VORONOI, "VORONOI", ICON_TEXTURE, "Voronoi", ""},
@@ -388,22 +388,22 @@ static void rna_def_texmapping(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Scale", "");
RNA_def_property_update(prop, 0, "rna_Texture_update");
- prop= RNA_def_property(srna, "minimum", PROP_FLOAT, PROP_XYZ);
+ prop= RNA_def_property(srna, "min", PROP_FLOAT, PROP_XYZ);
RNA_def_property_float_sdna(prop, NULL, "min");
RNA_def_property_ui_text(prop, "Minimum", "Minimum value for clipping");
RNA_def_property_update(prop, 0, "rna_Texture_update");
- prop= RNA_def_property(srna, "maximum", PROP_FLOAT, PROP_XYZ);
+ prop= RNA_def_property(srna, "max", PROP_FLOAT, PROP_XYZ);
RNA_def_property_float_sdna(prop, NULL, "max");
RNA_def_property_ui_text(prop, "Maximum", "Maximum value for clipping");
RNA_def_property_update(prop, 0, "rna_Texture_update");
- prop= RNA_def_property(srna, "has_minimum", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_min", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", TEXMAP_CLIP_MIN);
RNA_def_property_ui_text(prop, "Has Minimum", "Whether to use minimum clipping value");
RNA_def_property_update(prop, 0, "rna_Texture_update");
- prop= RNA_def_property(srna, "has_maximum", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_max", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", TEXMAP_CLIP_MAX);
RNA_def_property_ui_text(prop, "Has Maximum", "Whether to use maximum clipping value");
RNA_def_property_update(prop, 0, "rna_Texture_update");
@@ -464,7 +464,8 @@ static void rna_def_mtex(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Offset", "Fine tunes texture mapping X, Y and Z locations");
RNA_def_property_update(prop, 0, "rna_TextureSlot_update");
- prop= RNA_def_property(srna, "size", PROP_FLOAT, PROP_XYZ);
+ prop= RNA_def_property(srna, "scale", PROP_FLOAT, PROP_XYZ);
+ RNA_def_property_float_sdna(prop, NULL, "size");
RNA_def_property_ui_range(prop, -100, 100, 10, 2);
RNA_def_property_ui_text(prop, "Size", "Sets scaling for the texture's X, Y and Z sizes");
RNA_def_property_update(prop, 0, "rna_TextureSlot_update");
@@ -481,17 +482,17 @@ static void rna_def_mtex(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Blend Type", "");
RNA_def_property_update(prop, 0, "rna_TextureSlot_update");
- prop= RNA_def_property(srna, "stencil", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_stencil", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "texflag", MTEX_STENCIL);
RNA_def_property_ui_text(prop, "Stencil", "Use this texture as a blending value on the next texture");
RNA_def_property_update(prop, 0, "rna_TextureSlot_update");
- prop= RNA_def_property(srna, "negate", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "invert", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "texflag", MTEX_NEGATIVE);
RNA_def_property_ui_text(prop, "Negate", "Inverts the values of the texture to reverse its effect");
RNA_def_property_update(prop, 0, "rna_TextureSlot_update");
- prop= RNA_def_property(srna, "rgb_to_intensity", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_rgb_to_intensity", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "texflag", MTEX_RGBTOINT);
RNA_def_property_ui_text(prop, "RGB to Intensity", "Converts texture RGB values to intensity (gray) values");
RNA_def_property_update(prop, 0, "rna_TextureSlot_update");
@@ -514,18 +515,18 @@ static void rna_def_filter_common(StructRNA *srna)
{
PropertyRNA *prop;
- prop= RNA_def_property(srna, "mipmap", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_mipmap", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "imaflag", TEX_MIPMAP);
RNA_def_property_boolean_funcs(prop, NULL, "rna_ImageTexture_mipmap_set");
RNA_def_property_ui_text(prop, "MIP Map", "Uses auto-generated MIP maps for the image");
RNA_def_property_update(prop, 0, "rna_Texture_update");
- prop= RNA_def_property(srna, "mipmap_gauss", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_mipmap_gauss", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "imaflag", TEX_GAUSS_MIP);
RNA_def_property_ui_text(prop, "MIP Map Gaussian filter", "Uses Gauss filter to sample down MIP maps");
RNA_def_property_update(prop, 0, "rna_Texture_update");
- prop= RNA_def_property(srna, "filter", PROP_ENUM, PROP_NONE);
+ prop= RNA_def_property(srna, "filter_type", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "texfilter");
RNA_def_property_enum_items(prop, texture_filter_items);
RNA_def_property_ui_text(prop, "Filter", "Texture filter to use for sampling image");
@@ -543,7 +544,7 @@ static void rna_def_filter_common(StructRNA *srna)
RNA_def_property_ui_text(prop, "Filter Eccentricity", "Maximum eccentricity. Higher gives less blur at distant/oblique angles, but is also slower");
RNA_def_property_update(prop, 0, "rna_Texture_update");
- prop= RNA_def_property(srna, "filter_size_minimum", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_filter_size_min", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "imaflag", TEX_FILTER_MIN);
RNA_def_property_ui_text(prop, "Minimum Filter Size", "Use Filter Size as a minimal filter value in pixels");
RNA_def_property_update(prop, 0, "rna_Texture_update");
@@ -615,7 +616,7 @@ static void rna_def_environment_map(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Zoom", "");
RNA_def_property_update(prop, 0, "rna_Texture_update");
- prop= RNA_def_property(srna, "ignore_layers", PROP_BOOLEAN, PROP_LAYER_MEMBER);
+ prop= RNA_def_property(srna, "layers_ignore", PROP_BOOLEAN, PROP_LAYER_MEMBER);
RNA_def_property_boolean_sdna(prop, NULL, "notlay", 1);
RNA_def_property_array(prop, 20);
RNA_def_property_ui_text(prop, "Ignore Layers", "Hide objects on these layers when generating the Environment Map");
@@ -666,7 +667,7 @@ static void rna_def_texture_clouds(BlenderRNA *brna)
RNA_def_struct_ui_text(srna, "Clouds Texture", "Procedural noise texture");
RNA_def_struct_sdna(srna, "Tex");
- prop= RNA_def_property(srna, "noise_size", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "noise_scale", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "noisesize");
RNA_def_property_range(prop, 0.0001, FLT_MAX);
RNA_def_property_ui_range(prop, 0.0001, 2, 10, 2);
@@ -692,7 +693,7 @@ static void rna_def_texture_clouds(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Noise Type", "");
RNA_def_property_update(prop, 0, "rna_Texture_nodes_update");
- prop= RNA_def_property(srna, "stype", PROP_ENUM, PROP_NONE);
+ prop= RNA_def_property(srna, "cloud_type", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "stype");
RNA_def_property_enum_items(prop, prop_clouds_stype);
RNA_def_property_ui_text(prop, "Color", "");
@@ -727,7 +728,7 @@ static void rna_def_texture_wood(BlenderRNA *brna)
RNA_def_struct_ui_text(srna, "Wood Texture", "Procedural noise texture");
RNA_def_struct_sdna(srna, "Tex");
- prop= RNA_def_property(srna, "noise_size", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "noise_scale", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "noisesize");
RNA_def_property_range(prop, 0.0001, FLT_MAX);
RNA_def_property_ui_range(prop, 0.0001, 2, 10, 2);
@@ -753,13 +754,13 @@ static void rna_def_texture_wood(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Noise Type", "");
RNA_def_property_update(prop, 0, "rna_Texture_nodes_update");
- prop= RNA_def_property(srna, "stype", PROP_ENUM, PROP_NONE);
+ prop= RNA_def_property(srna, "wood_type", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "stype");
RNA_def_property_enum_items(prop, prop_wood_stype);
RNA_def_property_ui_text(prop, "Pattern", "");
RNA_def_property_update(prop, 0, "rna_Texture_nodes_update");
- prop= RNA_def_property(srna, "noisebasis2", PROP_ENUM, PROP_NONE);
+ prop= RNA_def_property(srna, "noisebasis_2", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "noisebasis2");
RNA_def_property_enum_items(prop, prop_wood_noisebasis2);
RNA_def_property_ui_text(prop, "Noise Basis 2", "");
@@ -794,7 +795,7 @@ static void rna_def_texture_marble(BlenderRNA *brna)
RNA_def_struct_ui_text(srna, "Marble Texture", "Procedural noise texture");
RNA_def_struct_sdna(srna, "Tex");
- prop= RNA_def_property(srna, "noise_size", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "noise_scale", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "noisesize");
RNA_def_property_range(prop, 0.0001, FLT_MAX);
RNA_def_property_ui_range(prop, 0.0001, 2, 10, 2);
@@ -821,7 +822,7 @@ static void rna_def_texture_marble(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Noise Type", "");
RNA_def_property_update(prop, 0, "rna_Texture_nodes_update");
- prop= RNA_def_property(srna, "stype", PROP_ENUM, PROP_NONE);
+ prop= RNA_def_property(srna, "marble_type", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "stype");
RNA_def_property_enum_items(prop, prop_marble_stype);
RNA_def_property_ui_text(prop, "Pattern", "");
@@ -833,7 +834,7 @@ static void rna_def_texture_marble(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Noise Basis", "Sets the noise basis used for turbulence");
RNA_def_property_update(prop, 0, "rna_Texture_nodes_update");
- prop= RNA_def_property(srna, "noisebasis2", PROP_ENUM, PROP_NONE);
+ prop= RNA_def_property(srna, "noisebasis_2", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "noisebasis2");
RNA_def_property_enum_items(prop, prop_marble_noisebasis2);
RNA_def_property_ui_text(prop, "Noise Basis 2", "");
@@ -901,7 +902,7 @@ static void rna_def_texture_blend(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Progression", "Sets the style of the color blending");
RNA_def_property_update(prop, 0, "rna_Texture_nodes_update");
- prop= RNA_def_property(srna, "flip_axis", PROP_ENUM, PROP_NONE);
+ prop= RNA_def_property(srna, "use_flip_axis", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_bitflag_sdna(prop, NULL, "flag");
RNA_def_property_enum_items(prop, prop_flip_axis_items);
RNA_def_property_ui_text(prop, "Flip Axis", "Flips the texture's X and Y axis");
@@ -937,7 +938,7 @@ static void rna_def_texture_stucci(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Noise Basis", "Sets the noise basis used for turbulence");
RNA_def_property_update(prop, 0, "rna_Texture_update");
- prop= RNA_def_property(srna, "noise_size", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "noise_scale", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "noisesize");
RNA_def_property_range(prop, 0.0001, FLT_MAX);
RNA_def_property_ui_range(prop, 0.0001, 2, 10, 2);
@@ -950,7 +951,7 @@ static void rna_def_texture_stucci(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Noise Type", "");
RNA_def_property_update(prop, 0, "rna_Texture_update");
- prop= RNA_def_property(srna, "stype", PROP_ENUM, PROP_NONE);
+ prop= RNA_def_property(srna, "stucci_type", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "stype");
RNA_def_property_enum_items(prop, prop_stucci_stype);
RNA_def_property_ui_text(prop, "Pattern", "");
@@ -990,13 +991,13 @@ static void rna_def_texture_image(BlenderRNA *brna)
RNA_def_struct_ui_text(srna, "Image Texture", "");
RNA_def_struct_sdna(srna, "Tex");
- prop= RNA_def_property(srna, "interpolation", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_interpolation", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "imaflag", TEX_INTERPOL);
RNA_def_property_ui_text(prop, "Interpolation", "Interpolates pixels using Area filter");
RNA_def_property_update(prop, 0, "rna_Texture_update");
/* XXX: I think flip_axis should be a generic Texture property, enabled for all the texture types */
- prop= RNA_def_property(srna, "flip_axis", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_flip_axis", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "imaflag", TEX_IMAROT);
RNA_def_property_ui_text(prop, "Flip Axis", "Flips the texture's X and Y axis");
RNA_def_property_update(prop, 0, "rna_Texture_update");
@@ -1006,7 +1007,7 @@ static void rna_def_texture_image(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Use Alpha", "Uses the alpha channel information in the image");
RNA_def_property_update(prop, 0, "rna_Texture_update");
- prop= RNA_def_property(srna, "calculate_alpha", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_calculate_alpha", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "imaflag", TEX_CALCALPHA);
RNA_def_property_ui_text(prop, "Calculate Alpha", "Calculates an alpha channel based on RGB values in the image");
RNA_def_property_update(prop, 0, "rna_Texture_update");
@@ -1036,22 +1037,22 @@ static void rna_def_texture_image(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Repeat Y", "Sets a repetition multiplier in the Y direction");
RNA_def_property_update(prop, 0, "rna_Texture_update");
- prop= RNA_def_property(srna, "mirror_x", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_mirror_x", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", TEX_REPEAT_XMIR);
RNA_def_property_ui_text(prop, "Mirror X", "Mirrors the image repetition on the X direction");
RNA_def_property_update(prop, 0, "rna_Texture_update");
- prop= RNA_def_property(srna, "mirror_y", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_mirror_y", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", TEX_REPEAT_YMIR);
RNA_def_property_ui_text(prop, "Mirror Y", "Mirrors the image repetition on the Y direction");
RNA_def_property_update(prop, 0, "rna_Texture_update");
- prop= RNA_def_property(srna, "checker_odd", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_checker_odd", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", TEX_CHECKER_ODD);
RNA_def_property_ui_text(prop, "Checker Odd", "Sets odd checker tiles");
RNA_def_property_update(prop, 0, "rna_Texture_update");
- prop= RNA_def_property(srna, "checker_even", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_checker_even", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", TEX_CHECKER_EVEN);
RNA_def_property_ui_text(prop, "Checker Even", "Sets even checker tiles");
RNA_def_property_update(prop, 0, "rna_Texture_update");
@@ -1118,7 +1119,7 @@ static void rna_def_texture_image(BlenderRNA *brna)
RNA_def_property_update(prop, 0, "rna_Texture_update");
/* Normal Map */
- prop= RNA_def_property(srna, "normal_map", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_normal_map", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "imaflag", TEX_NORMALMAP);
RNA_def_property_ui_text(prop, "Normal Map", "Uses image RGB values for normal mapping");
RNA_def_property_update(prop, 0, "rna_Texture_update");
@@ -1197,7 +1198,7 @@ static void rna_def_texture_musgrave(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Type", "");
RNA_def_property_update(prop, 0, "rna_Texture_update");
- prop= RNA_def_property(srna, "highest_dimension", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "dimension_max", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "mg_H");
RNA_def_property_range(prop, 0.0001, 2);
RNA_def_property_ui_text(prop, "Highest Dimension", "Highest fractal dimension");
@@ -1233,7 +1234,7 @@ static void rna_def_texture_musgrave(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Noise Intensity", "");
RNA_def_property_update(prop, 0, "rna_Texture_update");
- prop= RNA_def_property(srna, "noise_size", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "noise_scale", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "noisesize");
RNA_def_property_range(prop, 0.0001, FLT_MAX);
RNA_def_property_ui_range(prop, 0.0001, 2, 10, 2);
@@ -1316,7 +1317,7 @@ static void rna_def_texture_voronoi(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Distance Metric", "");
RNA_def_property_update(prop, 0, "rna_Texture_update");
- prop= RNA_def_property(srna, "coloring", PROP_ENUM, PROP_NONE);
+ prop= RNA_def_property(srna, "color_mode", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "vn_coltype");
RNA_def_property_enum_items(prop, prop_coloring_items);
RNA_def_property_ui_text(prop, "Coloring", "");
@@ -1328,7 +1329,7 @@ static void rna_def_texture_voronoi(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Noise Intensity", "");
RNA_def_property_update(prop, 0, "rna_Texture_update");
- prop= RNA_def_property(srna, "noise_size", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "noise_scale", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "noisesize");
RNA_def_property_range(prop, 0.0001, FLT_MAX);
RNA_def_property_ui_range(prop, 0.0001, 2, 10, 2);
@@ -1357,7 +1358,7 @@ static void rna_def_texture_distorted_noise(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Distortion Amount", "");
RNA_def_property_update(prop, 0, "rna_Texture_update");
- prop= RNA_def_property(srna, "noise_size", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "noise_scale", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "noisesize");
RNA_def_property_range(prop, 0.0001, FLT_MAX);
RNA_def_property_ui_range(prop, 0.0001, 2, 10, 2);
@@ -1451,13 +1452,13 @@ static void rna_def_texture_pointdensity(BlenderRNA *brna)
RNA_def_property_flag(prop, PROP_EDITABLE);
RNA_def_property_update(prop, 0, "rna_Texture_update");
- prop= RNA_def_property(srna, "particle_cache", PROP_ENUM, PROP_NONE);
+ prop= RNA_def_property(srna, "particle_cache_space", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "psys_cache_space");
RNA_def_property_enum_items(prop, particle_cache_items);
RNA_def_property_ui_text(prop, "Particle Cache", "Co-ordinate system to cache particles in");
RNA_def_property_update(prop, 0, "rna_Texture_update");
- prop= RNA_def_property(srna, "vertices_cache", PROP_ENUM, PROP_NONE);
+ prop= RNA_def_property(srna, "vertex_cache_space", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "ob_cache_space");
RNA_def_property_enum_items(prop, vertice_cache_items);
RNA_def_property_ui_text(prop, "Vertices Cache", "Co-ordinate system to cache vertices in");
@@ -1475,7 +1476,7 @@ static void rna_def_texture_pointdensity(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Falloff", "Method of attenuating density by distance from the point");
RNA_def_property_update(prop, 0, "rna_Texture_update");
- prop= RNA_def_property(srna, "falloff_softness", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "falloff_soft", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "falloff_softness");
RNA_def_property_range(prop, 0.01, FLT_MAX);
RNA_def_property_ui_text(prop, "Softness", "Softness of the 'soft' falloff option");
@@ -1500,12 +1501,12 @@ static void rna_def_texture_pointdensity(BlenderRNA *brna)
RNA_def_property_update(prop, 0, "rna_Texture_update");
/* Turbulence */
- prop= RNA_def_property(srna, "turbulence", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_turbulence", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", TEX_PD_TURBULENCE);
RNA_def_property_ui_text(prop, "Turbulence", "Add directed noise to the density at render-time");
RNA_def_property_update(prop, 0, "rna_Texture_update");
- prop= RNA_def_property(srna, "turbulence_size", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "turbulence_scale", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "noise_size");
RNA_def_property_range(prop, 0.01, FLT_MAX);
RNA_def_property_ui_text(prop, "Size", "Scale of the added turbulent noise");
@@ -1540,7 +1541,7 @@ static void rna_def_texture_pointdensity(BlenderRNA *brna)
RNA_def_struct_sdna(srna, "Tex");
RNA_def_struct_ui_text(srna, "Point Density", "Settings for the Point Density texture");
- prop= RNA_def_property(srna, "pointdensity", PROP_POINTER, PROP_NONE);
+ prop= RNA_def_property(srna, "point_density", PROP_POINTER, PROP_NONE);
RNA_def_property_pointer_sdna(prop, NULL, "pd");
RNA_def_property_struct_type(prop, "PointDensity");
RNA_def_property_ui_text(prop, "Point Density", "The point density settings associated with this texture");
@@ -1614,7 +1615,7 @@ static void rna_def_texture_voxeldata(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "File Format", "Format of the source data set to render ");
RNA_def_property_update(prop, 0, "rna_Texture_voxeldata_update");
- prop= RNA_def_property(srna, "source_path", PROP_STRING, PROP_FILEPATH);
+ prop= RNA_def_property(srna, "filepath", PROP_STRING, PROP_FILEPATH);
RNA_def_property_string_sdna(prop, NULL, "source_path");
RNA_def_property_ui_text(prop, "Source Path", "The external source data file to use");
RNA_def_property_update(prop, 0, "rna_Texture_voxeldata_update");
@@ -1624,12 +1625,12 @@ static void rna_def_texture_voxeldata(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Resolution", "Resolution of the voxel grid");
RNA_def_property_update(prop, 0, "rna_Texture_voxeldata_update");
- prop= RNA_def_property(srna, "still", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_still_frame", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", TEX_VD_STILL);
RNA_def_property_ui_text(prop, "Still Frame Only", "Always render a still frame from the voxel data sequence");
RNA_def_property_update(prop, 0, "rna_Texture_voxeldata_update");
- prop= RNA_def_property(srna, "still_frame_number", PROP_INT, PROP_NONE);
+ prop= RNA_def_property(srna, "still_frame", PROP_INT, PROP_NONE);
RNA_def_property_int_sdna(prop, NULL, "still_frame");
RNA_def_property_range(prop, -MAXFRAME, MAXFRAME);
RNA_def_property_ui_text(prop, "Still Frame Number", "The frame number to always use");
@@ -1646,7 +1647,7 @@ static void rna_def_texture_voxeldata(BlenderRNA *brna)
RNA_def_struct_sdna(srna, "Tex");
RNA_def_struct_ui_text(srna, "Voxel Data", "Settings for the Voxel Data texture");
- prop= RNA_def_property(srna, "voxeldata", PROP_POINTER, PROP_NONE);
+ prop= RNA_def_property(srna, "voxel_data", PROP_POINTER, PROP_NONE);
RNA_def_property_pointer_sdna(prop, NULL, "vd");
RNA_def_property_struct_type(prop, "VoxelData");
RNA_def_property_ui_text(prop, "Voxel Data", "The voxel data associated with this texture");
@@ -1696,7 +1697,7 @@ static void rna_def_texture(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Color Ramp", "");
RNA_def_property_update(prop, 0, "rna_Texture_update");
- prop= RNA_def_property(srna, "brightness", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "intensity", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "bright");
RNA_def_property_range(prop, 0, 2);
RNA_def_property_ui_text(prop, "Brightness", "");
diff --git a/source/blender/makesrna/intern/rna_ui.c b/source/blender/makesrna/intern/rna_ui.c
index 080e01b4909..f2c33f354c2 100644
--- a/source/blender/makesrna/intern/rna_ui.c
+++ b/source/blender/makesrna/intern/rna_ui.c
@@ -207,6 +207,7 @@ static StructRNA *rna_Panel_register(const bContext *C, ReportList *reports, voi
pt->ext.call= call;
pt->ext.free= free;
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;
@@ -418,6 +419,7 @@ static StructRNA *rna_Menu_register(const bContext *C, ReportList *reports, void
mt->ext.call= call;
mt->ext.free= free;
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;
@@ -545,10 +547,11 @@ static void rna_def_ui_layout(BlenderRNA *brna)
prop= RNA_def_property(srna, "operator_context", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_items(prop, operator_context_items);
RNA_def_property_enum_funcs(prop, "rna_UILayout_op_context_get", "rna_UILayout_op_context_set", NULL);
-
+
prop= RNA_def_property(srna, "enabled", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_funcs(prop, "rna_UILayout_enabled_get", "rna_UILayout_enabled_set");
-
+ RNA_def_property_ui_text(prop, "Enabled", "When false, this (sub)layout is greyed out.");
+
#if 0
prop= RNA_def_property(srna, "red_alert", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_funcs(prop, "rna_UILayout_red_alert_get", "rna_UILayout_red_alert_set");
@@ -565,10 +568,11 @@ static void rna_def_ui_layout(BlenderRNA *brna)
prop= RNA_def_property(srna, "scale_x", PROP_FLOAT, PROP_UNSIGNED);
RNA_def_property_float_funcs(prop, "rna_UILayout_scale_x_get", "rna_UILayout_scale_x_set", NULL);
-
+ RNA_def_property_ui_text(prop, "Scale X", "Scale factor along the X for items in this (sub)layout.");
+
prop= RNA_def_property(srna, "scale_y", PROP_FLOAT, PROP_UNSIGNED);
RNA_def_property_float_funcs(prop, "rna_UILayout_scale_y_get", "rna_UILayout_scale_y_set", NULL);
-
+ RNA_def_property_ui_text(prop, "Scale Y", "Scale factor along the Y for items in this (sub)layout.");
RNA_api_ui_layout(srna);
}
@@ -579,6 +583,11 @@ static void rna_def_panel(BlenderRNA *brna)
PropertyRNA *parm;
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}};
+
srna= RNA_def_struct(brna, "Panel", NULL);
RNA_def_struct_ui_text(srna, "Panel", "Panel containing UI elements");
RNA_def_struct_sdna(srna, "Panel");
@@ -588,7 +597,7 @@ 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_REGISTER|FUNC_REGISTER_OPTIONAL);
+ RNA_def_function_flag(func, FUNC_NO_SELF|FUNC_REGISTER|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);
@@ -642,15 +651,11 @@ static void rna_def_panel(BlenderRNA *brna)
RNA_def_property_flag(prop, PROP_REGISTER_OPTIONAL); /* should this be optional? - Campbell */
RNA_def_property_ui_text(prop, "Context", "The context in which the panel belongs to. (TODO: explain the possible combinations bl_context/bl_region_type/bl_space_type)");
- prop= RNA_def_property(srna, "bl_default_closed", PROP_BOOLEAN, PROP_NONE);
- RNA_def_property_boolean_sdna(prop, NULL, "type->flag", PNL_DEFAULT_CLOSED);
- RNA_def_property_flag(prop, PROP_REGISTER_OPTIONAL);
- RNA_def_property_ui_text(prop, "Default closed", "Defines if the panel has to be open or collapsed at the time of its creation. Note that once the panel has been created with bl_default_closed = True, at reload (F8) it stays open.");
-
- prop= RNA_def_property(srna, "bl_show_header", PROP_BOOLEAN, PROP_NONE);
- RNA_def_property_boolean_negative_sdna(prop, NULL, "type->flag", PNL_NO_HEADER);
- RNA_def_property_flag(prop, PROP_REGISTER_OPTIONAL);
- RNA_def_property_ui_text(prop, "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).");
+ 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_ui_text(prop, "Options", "Options for this panel type");
}
static void rna_def_header(BlenderRNA *brna)
@@ -711,7 +716,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_REGISTER|FUNC_REGISTER_OPTIONAL);
+ RNA_def_function_flag(func, FUNC_NO_SELF|FUNC_REGISTER|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);
diff --git a/source/blender/makesrna/intern/rna_ui_api.c b/source/blender/makesrna/intern/rna_ui_api.c
index 1c751433e31..1d86faa5e53 100644
--- a/source/blender/makesrna/intern/rna_ui_api.c
+++ b/source/blender/makesrna/intern/rna_ui_api.c
@@ -41,7 +41,7 @@ static void rna_uiItemR(uiLayout *layout, PointerRNA *ptr, char *propname, char
int flag= 0;
if(!prop) {
- printf("rna_uiItemR: property not found: %s\n", propname);
+ printf("rna_uiItemR: property not found: %s.%s\n", RNA_struct_identifier(ptr->type), propname);
return;
}
@@ -127,11 +127,13 @@ void RNA_api_ui_layout(StructRNA *srna)
func= RNA_def_function(srna, "row", "uiLayoutRow");
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, "Sub-layout. Items placed in this sublayout are placed next to each other in a row.");
RNA_def_boolean(func, "align", 0, "", "Align buttons to each other.");
-
+
func= RNA_def_function(srna, "column", "uiLayoutColumn");
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, "Sub-layout. Items placed in this sublayout are placed under each other in a column.");
RNA_def_boolean(func, "align", 0, "", "Align buttons to each other.");
func= RNA_def_function(srna, "column_flow", "uiLayoutColumnFlow");
@@ -144,7 +146,8 @@ void RNA_api_ui_layout(StructRNA *srna)
func= RNA_def_function(srna, "box", "uiLayoutBox");
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.");
+
/* split layout */
func= RNA_def_function(srna, "split", "uiLayoutSplit");
parm= RNA_def_pointer(func, "layout", "UILayout", "", "Sub-layout to put items in.");
@@ -154,6 +157,7 @@ void RNA_api_ui_layout(StructRNA *srna)
/* items */
func= RNA_def_function(srna, "prop", "rna_uiItemR");
+ RNA_def_function_ui_description(func, "Item. Exposes an RNA item and places it into the layout.");
api_ui_item_rna_common(func);
api_ui_item_common(func);
RNA_def_boolean(func, "expand", 0, "", "Expand button to show more detail.");
@@ -178,7 +182,7 @@ void RNA_api_ui_layout(StructRNA *srna)
RNA_def_property_flag(parm, PROP_REQUIRED);
api_ui_item_common(func);
- func= RNA_def_function(srna, "prop_object", "uiItemPointerR");
+ 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);
@@ -192,6 +196,7 @@ void RNA_api_ui_layout(StructRNA *srna)
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);
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", "uiItemEnumO_string");
api_ui_item_op_common(func);
@@ -241,6 +246,7 @@ void RNA_api_ui_layout(StructRNA *srna)
RNA_def_property_flag(parm, PROP_REQUIRED); */
func= RNA_def_function(srna, "label", "uiItemL");
+ RNA_def_function_ui_description(func, "Item. Display text in the layout.");
api_ui_item_common(func);
func= RNA_def_function(srna, "menu", "uiItemM");
@@ -250,9 +256,10 @@ void RNA_api_ui_layout(StructRNA *srna)
RNA_def_property_flag(parm, PROP_REQUIRED);
func= RNA_def_function(srna, "separator", "uiItemS");
+ RNA_def_function_ui_description(func, "Item. Inserts empty space into the layout between items.");
/* context */
- func= RNA_def_function(srna, "set_context_pointer", "uiLayoutSetContextPointer");
+ func= RNA_def_function(srna, "context_pointer_set", "uiLayoutSetContextPointer");
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.");
@@ -263,11 +270,6 @@ void RNA_api_ui_layout(StructRNA *srna)
RNA_def_function_flag(func, FUNC_USE_CONTEXT);
RNA_def_boolean(func, "menus", 1, "", "The header has menus, and should show menu expander.");
- func= RNA_def_function(srna, "template_dopesheet_filter", "uiTemplateDopeSheetFilter");
- RNA_def_function_flag(func, FUNC_USE_CONTEXT);
- parm= RNA_def_pointer(func, "dopesheet", "DopeSheet", "", "DopeSheet settings holding filter options.");
- RNA_def_property_flag(parm, PROP_REQUIRED|PROP_RNAPTR|PROP_NEVER_NULL);
-
func= RNA_def_function(srna, "template_ID", "uiTemplateID");
RNA_def_function_flag(func, FUNC_USE_CONTEXT);
api_ui_item_rna_common(func);
@@ -306,44 +308,50 @@ void RNA_api_ui_layout(StructRNA *srna)
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);
parm= RNA_def_pointer(func, "layout", "UILayout", "", "Sub-layout to put items in.");
RNA_def_function_return(func, parm);
- RNA_def_boolean(func, "compact", 0, "", "Show a smaller version of the template, split on two lines.");
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);
parm= RNA_def_pointer(func, "layout", "UILayout", "", "Sub-layout to put items in.");
RNA_def_function_return(func, parm);
- RNA_def_boolean(func, "compact", 0, "", "Show a smaller version of the template, split on two lines.");
func= RNA_def_function(srna, "template_preview", "uiTemplatePreview");
+ RNA_def_function_ui_description(func, "Item. A preview window for materials, textures, lamps, etc.");
parm= RNA_def_pointer(func, "id", "ID", "", "ID datablock.");
RNA_def_property_flag(parm, PROP_REQUIRED);
RNA_def_pointer(func, "parent", "ID", "", "ID datablock.");
RNA_def_pointer(func, "slot", "TextureSlot", "", "Texture slot.");
func= RNA_def_function(srna, "template_curve_mapping", "uiTemplateCurveMapping");
+ RNA_def_function_ui_description(func, "Item. A curve mapping widget used for e.g falloff curves for lamps.");
api_ui_item_rna_common(func);
RNA_def_enum(func, "type", curve_type_items, 0, "Type", "Type of curves to display.");
RNA_def_boolean(func, "levels", 0, "", "Show black/white levels.");
RNA_def_boolean(func, "brush", 0, "", "Show brush options.");
func= RNA_def_function(srna, "template_color_ramp", "uiTemplateColorRamp");
+ RNA_def_function_ui_description(func, "Item. A color ramp widget.");
api_ui_item_rna_common(func);
RNA_def_boolean(func, "expand", 0, "", "Expand button to show more detail.");
func= RNA_def_function(srna, "template_histogram", "uiTemplateHistogram");
+ RNA_def_function_ui_description(func, "Item. A histogramm widget to analyze imaga data.");
api_ui_item_rna_common(func);
RNA_def_boolean(func, "expand", 0, "", "Expand button to show more detail.");
func= RNA_def_function(srna, "template_waveform", "uiTemplateWaveform");
+ RNA_def_function_ui_description(func, "Item. A waveform widget to analyze imaga data.");
api_ui_item_rna_common(func);
RNA_def_boolean(func, "expand", 0, "", "Expand button to show more detail.");
func= RNA_def_function(srna, "template_vectorscope", "uiTemplateVectorscope");
+ RNA_def_function_ui_description(func, "Item. A vectorscope widget to analyze imaga data.");
api_ui_item_rna_common(func);
RNA_def_boolean(func, "expand", 0, "", "Expand button to show more detail.");
@@ -357,14 +365,12 @@ void RNA_api_ui_layout(StructRNA *srna)
RNA_def_property_flag(parm, PROP_REQUIRED);
func= RNA_def_function(srna, "template_color_wheel", "uiTemplateColorWheel");
+ RNA_def_function_ui_description(func, "Item. A color wheel widget to pick colors.");
api_ui_item_rna_common(func);
RNA_def_boolean(func, "value_slider", 0, "", "Display the value slider to the right of the color wheel");
RNA_def_boolean(func, "lock", 0, "", "Lock the color wheel display to value 1.0 regardless of actual color");
RNA_def_boolean(func, "lock_luminosity", 0, "", "Keep the color at its original vector length");
RNA_def_boolean(func, "cubic", 1, "", "Cubic saturation for picking values close to white");
-
- func= RNA_def_function(srna, "template_triColorSet", "uiTemplateTriColorSet");
- api_ui_item_rna_common(func);
func= RNA_def_function(srna, "template_image_layers", "uiTemplateImageLayers");
RNA_def_function_flag(func, FUNC_USE_CONTEXT);
@@ -374,6 +380,7 @@ void RNA_api_ui_layout(StructRNA *srna)
RNA_def_property_flag(parm, PROP_REQUIRED);
func= RNA_def_function(srna, "template_image", "uiTemplateImage");
+ RNA_def_function_ui_description(func, "Item(s). User interface for selecting images and their source paths.");
RNA_def_function_flag(func, FUNC_USE_CONTEXT);
api_ui_item_rna_common(func);
parm= RNA_def_pointer(func, "image_user", "ImageUser", "", "");
@@ -381,6 +388,7 @@ void RNA_api_ui_layout(StructRNA *srna)
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);
diff --git a/source/blender/makesrna/intern/rna_userdef.c b/source/blender/makesrna/intern/rna_userdef.c
index 9faaf53f93a..7459adc121f 100644
--- a/source/blender/makesrna/intern/rna_userdef.c
+++ b/source/blender/makesrna/intern/rna_userdef.c
@@ -257,12 +257,14 @@ static void rna_def_userdef_theme_ui_font_style(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Shadow Size", "Shadow size in pixels (0, 3 and 5 supported)");
RNA_def_property_update(prop, 0, "rna_userdef_update");
- prop= RNA_def_property(srna, "shadx", PROP_INT, PROP_NONE);
+ prop= RNA_def_property(srna, "shadow_offset_x", PROP_INT, PROP_NONE);
+ RNA_def_property_int_sdna(prop, NULL, "shadx");
RNA_def_property_range(prop, -10, 10);
RNA_def_property_ui_text(prop, "Shadow X Offset", "Shadow offset in pixels");
RNA_def_property_update(prop, 0, "rna_userdef_update");
- prop= RNA_def_property(srna, "shady", PROP_INT, PROP_NONE);
+ prop= RNA_def_property(srna, "shadow_offset_y", PROP_INT, PROP_NONE);
+ RNA_def_property_int_sdna(prop, NULL, "shady");
RNA_def_property_range(prop, -10, 10);
RNA_def_property_ui_text(prop, "Shadow Y Offset", "Shadow offset in pixels");
RNA_def_property_update(prop, 0, "rna_userdef_update");
@@ -293,21 +295,21 @@ static void rna_def_userdef_theme_ui_style(BlenderRNA *brna)
RNA_def_property_range(prop, 0.5, 2.0);
RNA_def_property_ui_text(prop, "Panel Zoom", "Default zoom level for panel areas");
- prop= RNA_def_property(srna, "paneltitle", PROP_POINTER, PROP_NONE);
+ 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 Font", "");
RNA_def_property_update(prop, 0, "rna_userdef_update");
- prop= RNA_def_property(srna, "grouplabel", 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");
RNA_def_property_ui_text(prop, "Group Label Font", "");
RNA_def_property_update(prop, 0, "rna_userdef_update");
- prop= RNA_def_property(srna, "widgetlabel", PROP_POINTER, PROP_NONE);
+ prop= RNA_def_property(srna, "widget_label", PROP_POINTER, PROP_NONE);
RNA_def_property_flag(prop, PROP_NEVER_NULL);
RNA_def_property_pointer_sdna(prop, NULL, "widgetlabel");
RNA_def_property_struct_type(prop, "ThemeFontStyle");
@@ -362,7 +364,7 @@ static void rna_def_userdef_theme_ui_wcol(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Text Selected", "");
RNA_def_property_update(prop, 0, "rna_userdef_update");
- prop= RNA_def_property(srna, "shaded", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_shaded", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "shaded", 1);
RNA_def_property_ui_text(prop, "Shaded", "");
RNA_def_property_update(prop, 0, "rna_userdef_update");
@@ -1211,7 +1213,7 @@ static void rna_def_userdef_theme_space_node(BlenderRNA *brna)
rna_def_userdef_theme_spaces_main(srna, SPACE_NODE);
- prop= RNA_def_property(srna, "wires", PROP_FLOAT, PROP_COLOR);
+ prop= RNA_def_property(srna, "wire", PROP_FLOAT, PROP_COLOR);
RNA_def_property_float_sdna(prop, NULL, "wire");
RNA_def_property_array(prop, 3);
RNA_def_property_ui_text(prop, "Wires", "");
@@ -1639,7 +1641,7 @@ static void rna_def_userdef_theme_colorset(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Active", "Color used for active bones");
RNA_def_property_update(prop, 0, "rna_userdef_update");
- prop= RNA_def_property(srna, "colored_constraints", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_colored_constraints", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", TH_WIRECOLOR_CONSTCOLS);
RNA_def_property_ui_text(prop, "Colored Constraints", "Allow the use of colors indicating constraints/keyed status");
RNA_def_property_update(prop, 0, "rna_userdef_update");
@@ -1843,7 +1845,7 @@ static void rna_def_userdef_solidlight(BlenderRNA *brna)
RNA_def_struct_sdna(srna, "SolidLight");
RNA_def_struct_ui_text(srna, "Solid Light", "Light used for OpenGL lighting in solid draw mode");
- prop= RNA_def_property(srna, "enabled", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", 1);
RNA_def_property_ui_text(prop, "Enabled", "Enable this OpenGL light in solid draw mode");
RNA_def_property_update(prop, 0, "rna_UserDef_viewport_lights_update");
@@ -1888,21 +1890,21 @@ static void rna_def_userdef_view(BlenderRNA *brna)
/* View */
/* display */
- prop= RNA_def_property(srna, "tooltips", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_tooltips", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", USER_TOOLTIPS);
RNA_def_property_ui_text(prop, "Tooltips", "Display tooltips");
- prop= RNA_def_property(srna, "display_object_info", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_object_info", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "uiflag", USER_DRAWVIEWINFO);
RNA_def_property_ui_text(prop, "Display Object Info", "Display objects name and frame number in 3D view");
RNA_def_property_update(prop, 0, "rna_userdef_update");
- prop= RNA_def_property(srna, "global_scene", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_global_scene", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", USER_SCENEGLOBAL);
RNA_def_property_ui_text(prop, "Global Scene", "Forces the current Scene to be displayed in all Screens");
RNA_def_property_update(prop, 0, "rna_userdef_update");
- prop= RNA_def_property(srna, "use_large_cursors", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_large_cursors", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "curssize", 0);
RNA_def_property_ui_text(prop, "Large Cursors", "Use large mouse cursors when available");
RNA_def_property_update(prop, 0, "rna_userdef_update");
@@ -1922,7 +1924,7 @@ static void rna_def_userdef_view(BlenderRNA *brna)
RNA_def_property_update(prop, 0, "rna_userdef_update");
/* menus */
- prop= RNA_def_property(srna, "open_mouse_over", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_mouse_over_open", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "uiflag", USER_MENUOPENAUTO);
RNA_def_property_ui_text(prop, "Open On Mouse Over", "Open menu buttons and pulldowns automatically when the mouse is hovering");
@@ -1947,33 +1949,33 @@ static void rna_def_userdef_view(BlenderRNA *brna)
RNA_def_property_range(prop, 1, 40);
RNA_def_property_ui_text(prop, "Hold RMB Open Toolbox Delay", "Time in 1/10 seconds to hold the Right Mouse Button before opening the toolbox");
- prop= RNA_def_property(srna, "use_column_layout", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_column_layout", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "uiflag", USER_PLAINMENUS);
RNA_def_property_ui_text(prop, "Toolbox Column Layout", "Use a column layout for toolbox");
- prop= RNA_def_property(srna, "directional_menus", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_directional_menus", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_negative_sdna(prop, NULL, "uiflag", USER_MENUFIXEDORDER);
RNA_def_property_ui_text(prop, "Contents Follow Opening Direction", "Otherwise menus, etc will always be top to bottom, left to right, no matter opening direction");
- prop= RNA_def_property(srna, "global_pivot", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_global_pivot", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "uiflag", USER_LOCKAROUND);
RNA_def_property_ui_text(prop, "Global Pivot", "Lock the same rotation/scaling pivot in all 3D Views");
- prop= RNA_def_property(srna, "auto_depth", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_mouse_auto_depth", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "uiflag", USER_ORBIT_ZBUF);
RNA_def_property_ui_text(prop, "Auto Depth", "Use the depth under the mouse to improve view pan/rotate/zoom functionality");
/* view zoom */
- prop= RNA_def_property(srna, "zoom_to_mouse", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_zoom_to_mouse", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "uiflag", USER_ZOOM_TO_MOUSEPOS);
RNA_def_property_ui_text(prop, "Zoom To Mouse Position", "Zoom in towards the mouse pointer's position in the 3D view, rather than the 2D window center");
/* view rotation */
- prop= RNA_def_property(srna, "auto_perspective", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_auto_perspective", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "uiflag", USER_AUTOPERSP);
RNA_def_property_ui_text(prop, "Auto Perspective", "Automatically switch between orthographic and perspective when changing from top/front/side views");
- prop= RNA_def_property(srna, "rotate_around_selection", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_rotate_around_active", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "uiflag", USER_ORBIT_SELECTION);
RNA_def_property_ui_text(prop, "Rotate Around Selection", "Use selection as the pivot point");
@@ -2006,7 +2008,7 @@ static void rna_def_userdef_view(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Rotation Angle", "The rotation step for numerical pad keys (2 4 6 8)");
/* 3D transform widget */
- prop= RNA_def_property(srna, "use_manipulator", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_manipulator", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "tw_flag", 1);
RNA_def_property_ui_text(prop, "Manipulator", "Use 3D transform manipulator");
RNA_def_property_update(prop, 0, "rna_userdef_update");
@@ -2035,7 +2037,7 @@ static void rna_def_userdef_view(BlenderRNA *brna)
RNA_def_property_update(prop, 0, "rna_userdef_update");
/* View2D Grid Displays */
- prop= RNA_def_property(srna, "view2d_grid_minimum_spacing", PROP_INT, PROP_NONE);
+ prop= RNA_def_property(srna, "view2d_grid_spacing_min", PROP_INT, PROP_NONE);
RNA_def_property_int_sdna(prop, NULL, "v2d_min_gridsize");
RNA_def_property_range(prop, 1, 500); // XXX: perhaps the lower range should only go down to 5?
RNA_def_property_ui_text(prop, "2D View Minimum Grid Spacing", "Minimum number of pixels between each gridline in 2D Viewports");
@@ -2048,13 +2050,6 @@ static void rna_def_userdef_view(BlenderRNA *brna)
RNA_def_property_enum_funcs(prop, NULL, "rna_userdef_timecode_style_set", NULL);
RNA_def_property_ui_text(prop, "TimeCode Style", "Format of Time Codes displayed when not displaying timing in terms of frames");
RNA_def_property_update(prop, 0, "rna_userdef_update");
-
- /* Properties Window */
- prop= RNA_def_property(srna, "properties_width_check", PROP_INT, PROP_NONE);
- RNA_def_property_int_sdna(prop, NULL, "propwidth");
- RNA_def_property_range(prop, 150, 400);
- RNA_def_property_ui_text(prop, "Width Check", "Dual Column layout will change to single column layout when the width of the area gets below this value (needs restart to take effect)");
- RNA_def_property_update(prop, 0, "rna_userdef_update");
}
static void rna_def_userdef_edit(BlenderRNA *brna)
@@ -2094,11 +2089,11 @@ static void rna_def_userdef_edit(BlenderRNA *brna)
RNA_def_property_enum_items(prop, object_align_items);
RNA_def_property_ui_text(prop, "Align Object To", "When adding objects from a 3D View menu, either align them to that view's direction or the world coordinates");
- prop= RNA_def_property(srna, "enter_edit_mode", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_enter_edit_mode", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", USER_ADD_EDITMODE);
RNA_def_property_ui_text(prop, "Enter Edit Mode", "Enter Edit Mode automatically after adding a new object");
- prop= RNA_def_property(srna, "drag_immediately", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_drag_immediately", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", USER_RELEASECONFIRM);
RNA_def_property_ui_text(prop, "Release confirm", "Moving things with a mouse drag confirms when releasing the button");
@@ -2113,7 +2108,7 @@ static void rna_def_userdef_edit(BlenderRNA *brna)
RNA_def_property_range(prop, 0, 32767);
RNA_def_property_ui_text(prop, "Undo Memory Size", "Maximum memory usage in megabytes (0 means unlimited)");
- prop= RNA_def_property(srna, "global_undo", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_global_undo", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "uiflag", USER_GLOBALUNDO);
RNA_def_property_ui_text(prop, "Global Undo", "Global undo works by keeping a full copy of the file itself in memory, so takes extra memory");
@@ -2128,16 +2123,16 @@ static void rna_def_userdef_edit(BlenderRNA *brna)
RNA_def_property_enum_funcs(prop, "rna_userdef_autokeymode_get", "rna_userdef_autokeymode_set", NULL);
RNA_def_property_ui_text(prop, "Auto Keying Mode", "Mode of automatic keyframe insertion for Objects and Bones");
- prop= RNA_def_property(srna, "auto_keyframe_insert_available", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_keyframe_insert_available", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "autokey_flag", AUTOKEY_FLAG_INSERTAVAIL);
RNA_def_property_ui_text(prop, "Auto Keyframe Insert Available", "Automatic keyframe insertion in available curves");
- prop= RNA_def_property(srna, "auto_keyframe_insert_keyingset", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_keyframe_insert_keyingset", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "autokey_flag", AUTOKEY_FLAG_ONLYKEYINGSET);
RNA_def_property_ui_text(prop, "Auto Keyframe Insert Keying Set", "Automatic keyframe insertion using active Keying Set");
/* keyframing settings */
- prop= RNA_def_property(srna, "keyframe_insert_needed", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_keyframe_insert_needed", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "autokey_flag", AUTOKEY_FLAG_INSERTNEEDED);
RNA_def_property_ui_text(prop, "Keyframe Insert Needed", "Keyframe insertion only when keyframe needed");
@@ -2145,7 +2140,7 @@ static void rna_def_userdef_edit(BlenderRNA *brna)
RNA_def_property_boolean_sdna(prop, NULL, "autokey_flag", AUTOKEY_FLAG_AUTOMATKEY);
RNA_def_property_ui_text(prop, "Visual Keying", "Use Visual keying automatically for constrained objects");
- prop= RNA_def_property(srna, "insertkey_xyz_to_rgb", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_insertkey_xyz_to_rgb", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "autokey_flag", AUTOKEY_FLAG_XYZ2RGB);
RNA_def_property_ui_text(prop, "New 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");
@@ -2175,11 +2170,11 @@ static void rna_def_userdef_edit(BlenderRNA *brna)
RNA_def_property_range(prop, 0, 100);
RNA_def_property_ui_text(prop, "Grease Pencil Euclidean Distance", "Distance moved by mouse when drawing stroke (in pixels) to include");
- prop= RNA_def_property(srna, "grease_pencil_smooth_stroke", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_grease_pencil_smooth_stroke", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "gp_settings", GP_PAINT_DOSMOOTH);
RNA_def_property_ui_text(prop, "Grease Pencil Smooth Stroke", "Smooth the final stroke");
- prop= RNA_def_property(srna, "grease_pencil_simplify_stroke", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_grease_pencil_simplify_stroke", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "gp_settings", GP_PAINT_DOSIMPLIFY);
RNA_def_property_ui_text(prop, "Grease Pencil Simplify Stroke", "Simplify the final stroke");
@@ -2190,58 +2185,58 @@ static void rna_def_userdef_edit(BlenderRNA *brna)
/* sculpt and paint */
- prop= RNA_def_property(srna, "sculpt_paint_overlay_col", PROP_FLOAT, PROP_COLOR);
+ prop= RNA_def_property(srna, "sculpt_paint_overlay_color", PROP_FLOAT, PROP_COLOR);
RNA_def_property_float_sdna(prop, NULL, "sculpt_paint_overlay_col");
RNA_def_property_array(prop, 3);
RNA_def_property_ui_text(prop, "Sculpt/Paint Overlay Color", "Color of texture overlay");
/* duplication linking */
- prop= RNA_def_property(srna, "duplicate_mesh", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_duplicate_mesh", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "dupflag", USER_DUP_MESH);
RNA_def_property_ui_text(prop, "Duplicate Mesh", "Causes mesh data to be duplicated with the object");
- prop= RNA_def_property(srna, "duplicate_surface", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_duplicate_surface", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "dupflag", USER_DUP_SURF);
RNA_def_property_ui_text(prop, "Duplicate Surface", "Causes surface data to be duplicated with the object");
- prop= RNA_def_property(srna, "duplicate_curve", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_duplicate_curve", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "dupflag", USER_DUP_CURVE);
RNA_def_property_ui_text(prop, "Duplicate Curve", "Causes curve data to be duplicated with the object");
- prop= RNA_def_property(srna, "duplicate_text", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_duplicate_text", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "dupflag", USER_DUP_FONT);
RNA_def_property_ui_text(prop, "Duplicate Text", "Causes text data to be duplicated with the object");
- prop= RNA_def_property(srna, "duplicate_metaball", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_duplicate_metaball", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "dupflag", USER_DUP_MBALL);
RNA_def_property_ui_text(prop, "Duplicate Metaball", "Causes metaball data to be duplicated with the object");
- prop= RNA_def_property(srna, "duplicate_armature", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_duplicate_armature", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "dupflag", USER_DUP_ARM);
RNA_def_property_ui_text(prop, "Duplicate Armature", "Causes armature data to be duplicated with the object");
- prop= RNA_def_property(srna, "duplicate_lamp", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_duplicate_lamp", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "dupflag", USER_DUP_LAMP);
RNA_def_property_ui_text(prop, "Duplicate Lamp", "Causes lamp data to be duplicated with the object");
- prop= RNA_def_property(srna, "duplicate_material", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_duplicate_material", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "dupflag", USER_DUP_MAT);
RNA_def_property_ui_text(prop, "Duplicate Material", "Causes material data to be duplicated with the object");
- prop= RNA_def_property(srna, "duplicate_texture", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_duplicate_texture", PROP_BOOLEAN, PROP_NONE);
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
- prop= RNA_def_property(srna, "duplicate_fcurve", PROP_BOOLEAN, PROP_NONE);
+ 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
- prop= RNA_def_property(srna, "duplicate_action", PROP_BOOLEAN, PROP_NONE);
+ 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");
- prop= RNA_def_property(srna, "duplicate_particle", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_duplicate_particle", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "dupflag", USER_DUP_PSYS);
RNA_def_property_ui_text(prop, "Duplicate Particle", "Causes particle systems to be duplicated with the object");
}
@@ -2365,7 +2360,7 @@ static void rna_def_userdef_system(BlenderRNA *brna)
/* Language */
- prop= RNA_def_property(srna, "international_fonts", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_international_fonts", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "transopts", USER_DOTRANSLATE);
RNA_def_property_ui_text(prop, "International Fonts", "Use international fonts");
RNA_def_property_update(prop, 0, "rna_userdef_update");
@@ -2381,6 +2376,11 @@ static void rna_def_userdef_system(BlenderRNA *brna)
RNA_def_property_range(prop, 32, 32768);
RNA_def_property_ui_text(prop, "Scrollback", "Maximum number of lines to store for the console buffer");
+ prop= RNA_def_property(srna, "author", PROP_STRING, PROP_NONE);
+ RNA_def_property_string_sdna(prop, NULL, "author");
+ RNA_def_property_string_maxlength(prop, 80);
+ RNA_def_property_ui_text(prop, "Author", "Name that will be used in exported files when format supports such feature");
+
/* Language Selection */
prop= RNA_def_property(srna, "language", PROP_ENUM, PROP_NONE);
@@ -2388,17 +2388,17 @@ static void rna_def_userdef_system(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Language", "Language use for translation");
RNA_def_property_update(prop, 0, "rna_userdef_update");
- prop= RNA_def_property(srna, "translate_tooltips", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_translate_tooltips", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "transopts", USER_TR_TOOLTIPS);
RNA_def_property_ui_text(prop, "Translate Tooltips", "Translate Tooltips");
RNA_def_property_update(prop, 0, "rna_userdef_update");
- prop= RNA_def_property(srna, "translate_buttons", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_translate_buttons", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "transopts", USER_TR_BUTTONS);
RNA_def_property_ui_text(prop, "Translate Buttons", "Translate button labels");
RNA_def_property_update(prop, 0, "rna_userdef_update");
- prop= RNA_def_property(srna, "translate_toolbox", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_translate_toolbox", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "transopts", USER_TR_MENUS);
RNA_def_property_ui_text(prop, "Translate Toolbox", "Translate toolbox menu");
RNA_def_property_update(prop, 0, "rna_userdef_update");
@@ -2432,16 +2432,16 @@ static void rna_def_userdef_system(BlenderRNA *brna)
RNA_def_property_enum_sdna(prop, NULL, "color_picker_type");
RNA_def_property_ui_text(prop, "Color Picker Type", "Different styles of displaying the color picker widget");
- prop= RNA_def_property(srna, "enable_all_codecs", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_preview_images", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "uiflag", USER_ALLWINCODECS);
RNA_def_property_ui_text(prop, "Enable All Codecs", "Enables automatic saving of preview images in the .blend file (Windows only)");
- prop= RNA_def_property(srna, "auto_execute_scripts", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_scripts_auto_execute", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", USER_SCRIPT_AUTOEXEC_DISABLE);
RNA_def_property_ui_text(prop, "Auto Run Python Scripts", "Allow any .blend file to run scripts automatically (unsafe with blend files from an untrusted source)");
RNA_def_property_update(prop, 0, "rna_userdef_script_autoexec_update");
- prop= RNA_def_property(srna, "tabs_as_spaces", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_tabs_as_spaces", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", USER_TXT_TABSTOSPACES_DISABLE);
RNA_def_property_ui_text(prop, "Tabs as Spaces", "Automatically converts all new tabs into spaces for new and loaded text files");
@@ -2461,7 +2461,7 @@ static void rna_def_userdef_system(BlenderRNA *brna)
RNA_def_property_range(prop, 0, 32727);
RNA_def_property_ui_text(prop, "Frame Server Port", "Frameserver Port for Frameserver Rendering");
- prop= RNA_def_property(srna, "clip_alpha", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "gl_clip_alpha", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "glalphaclip");
RNA_def_property_range(prop, 0.0f, 1.0f);
RNA_def_property_ui_text(prop, "Clip Alpha", "Clip alpha below this threshold in the 3D textured view");
@@ -2472,7 +2472,7 @@ static void rna_def_userdef_system(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Mipmaps", "Scale textures for the 3D View (looks nicer but uses more memory and slows image reloading)");
RNA_def_property_update(prop, 0, "rna_userdef_mipmap_update");
- prop= RNA_def_property(srna, "use_vbos", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_vertex_buffer_objects", PROP_BOOLEAN, PROP_NONE);
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");
@@ -2590,26 +2590,26 @@ static void rna_def_userdef_input(BlenderRNA *brna)
RNA_def_property_enum_funcs(prop, NULL, "rna_userdef_select_mouse_set", NULL);
RNA_def_property_ui_text(prop, "Select Mouse", "The mouse button used for selection");
- prop= RNA_def_property(srna, "zoom_style", PROP_ENUM, PROP_NONE);
+ prop= RNA_def_property(srna, "view_zoom_method", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "viewzoom");
RNA_def_property_enum_items(prop, view_zoom_styles);
RNA_def_property_ui_text(prop, "Zoom Style", "Which style to use for viewport scaling");
- prop= RNA_def_property(srna, "zoom_axis", PROP_ENUM, PROP_NONE);
+ prop= RNA_def_property(srna, "view_zoom_axis", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_bitflag_sdna(prop, NULL, "uiflag");
RNA_def_property_enum_items(prop, view_zoom_axes);
RNA_def_property_ui_text(prop, "Zoom Axis", "Axis of mouse movement to zoom in or out on");
- prop= RNA_def_property(srna, "invert_zoom_direction", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "invert_mouse_wheel_zoom", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "uiflag", USER_ZOOM_INVERT);
RNA_def_property_ui_text(prop, "Invert Zoom Direction", "Invert the axis of mouse movement for zooming");
- prop= RNA_def_property(srna, "view_rotation", PROP_ENUM, PROP_NONE);
+ prop= RNA_def_property(srna, "view_rotate_method", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_bitflag_sdna(prop, NULL, "flag");
RNA_def_property_enum_items(prop, view_rotation_items);
RNA_def_property_ui_text(prop, "View Rotation", "Rotation style in the viewport");
- prop= RNA_def_property(srna, "continuous_mouse", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_mouse_continuous", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "uiflag", USER_CONTINUOUS_MOUSE);
RNA_def_property_ui_text(prop, "Continuous Grab", "Allow moving the mouse outside the view on some manipulations (transform, ui control drag)");
@@ -2623,25 +2623,25 @@ static void rna_def_userdef_input(BlenderRNA *brna)
RNA_def_property_range(prop, 0, 200);
RNA_def_property_ui_text(prop, "NDof Rotation Speed", "The overall rotation speed of an NDOF device, as percent of standard");
- prop= RNA_def_property(srna, "double_click_time", PROP_INT, PROP_NONE);
+ prop= RNA_def_property(srna, "mouse_double_click_time", PROP_INT, PROP_NONE);
RNA_def_property_int_sdna(prop, NULL, "dbl_click_time");
RNA_def_property_range(prop, 1, 1000);
RNA_def_property_ui_text(prop, "Double Click Timeout", "The time (in ms) for a double click");
- prop= RNA_def_property(srna, "emulate_3_button_mouse", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_mouse_emulate_3_button", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", USER_TWOBUTTONMOUSE);
RNA_def_property_ui_text(prop, "Emulate 3 Button Mouse", "Emulates Middle Mouse with Alt+LeftMouse (doesn't work with Left Mouse Select option)");
- prop= RNA_def_property(srna, "emulate_numpad", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_emulate_numpad", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", USER_NONUMPAD);
RNA_def_property_ui_text(prop, "Emulate Numpad", "Causes the 1 to 0 keys to act as the numpad (useful for laptops)");
/* middle mouse button */
- prop= RNA_def_property(srna, "use_middle_mouse_paste", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_mouse_mmb_paste", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "uiflag", USER_MMB_PASTE);
RNA_def_property_ui_text(prop, "Middle Mouse Paste", "In text window, paste with middle mouse button instead of panning");
- prop= RNA_def_property(srna, "wheel_invert_zoom", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "invert_zoom_wheel", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "uiflag", USER_WHEELZOOMDIR);
RNA_def_property_ui_text(prop, "Wheel Invert Zoom", "Swap the Mouse Wheel zoom direction");
@@ -2655,6 +2655,10 @@ static void rna_def_userdef_input(BlenderRNA *brna)
RNA_def_property_collection_sdna(prop, NULL, "keymaps", NULL);
RNA_def_property_struct_type(prop, "KeyMap");
RNA_def_property_ui_text(prop, "Edited Keymaps", "");
+
+ prop= RNA_def_property(srna, "active_keyconfig", PROP_STRING, PROP_DIRPATH);
+ RNA_def_property_string_sdna(prop, NULL, "keyconfigstr");
+ RNA_def_property_ui_text(prop, "Key Config", "The name of the active key configuration");
}
static void rna_def_userdef_filepaths(BlenderRNA *brna)
@@ -2677,11 +2681,11 @@ static void rna_def_userdef_filepaths(BlenderRNA *brna)
RNA_def_struct_nested(brna, srna, "UserPreferences");
RNA_def_struct_ui_text(srna, "File Paths", "Default paths for external files");
- prop= RNA_def_property(srna, "hide_dot_files_datablocks", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_hidden_files_datablocks", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "uiflag", USER_HIDE_DOT);
RNA_def_property_ui_text(prop, "Hide Dot Files/Datablocks", "Hide files/datablocks that start with a dot(.*)");
- prop= RNA_def_property(srna, "filter_file_extensions", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_filter_files", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "uiflag", USER_FILTERFILEEXTS);
RNA_def_property_ui_text(prop, "Filter File Extensions", "Display only files with extensions in the image select window");
@@ -2689,19 +2693,19 @@ static void rna_def_userdef_filepaths(BlenderRNA *brna)
RNA_def_property_boolean_sdna(prop, NULL, "flag", USER_RELPATHS);
RNA_def_property_ui_text(prop, "Relative Paths", "Default relative path option for the file selector");
- prop= RNA_def_property(srna, "compress_file", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_file_compression", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", USER_FILECOMPRESS);
RNA_def_property_ui_text(prop, "Compress File", "Enable file compression when saving .blend files");
- prop= RNA_def_property(srna, "load_ui", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_load_ui", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", USER_FILENOUI);
RNA_def_property_ui_text(prop, "Load UI", "Load user interface setup when loading .blend files");
- prop= RNA_def_property(srna, "fonts_directory", PROP_STRING, PROP_DIRPATH);
+ prop= RNA_def_property(srna, "font_directory", PROP_STRING, PROP_DIRPATH);
RNA_def_property_string_sdna(prop, NULL, "fontdir");
RNA_def_property_ui_text(prop, "Fonts Directory", "The default directory to search for loading fonts");
- prop= RNA_def_property(srna, "textures_directory", PROP_STRING, PROP_DIRPATH);
+ prop= RNA_def_property(srna, "texture_directory", PROP_STRING, PROP_DIRPATH);
RNA_def_property_string_sdna(prop, NULL, "textudir");
RNA_def_property_ui_text(prop, "Textures Directory", "The default directory to search for textures");
@@ -2717,11 +2721,11 @@ static void rna_def_userdef_filepaths(BlenderRNA *brna)
RNA_def_property_string_sdna(prop, NULL, "renderdir");
RNA_def_property_ui_text(prop, "Render Output Directory", "The default directory for rendering output");
- prop= RNA_def_property(srna, "python_scripts_directory", PROP_STRING, PROP_DIRPATH);
+ prop= RNA_def_property(srna, "script_directory", PROP_STRING, PROP_DIRPATH);
RNA_def_property_string_sdna(prop, NULL, "pythondir");
RNA_def_property_ui_text(prop, "Python Scripts Directory", "The default directory to search for Python scripts (resets python module search path: sys.path)");
- prop= RNA_def_property(srna, "sounds_directory", PROP_STRING, PROP_DIRPATH);
+ prop= RNA_def_property(srna, "sound_directory", PROP_STRING, PROP_DIRPATH);
RNA_def_property_string_sdna(prop, NULL, "sounddir");
RNA_def_property_ui_text(prop, "Sounds Directory", "The default directory to search for sounds");
@@ -2751,7 +2755,7 @@ static void rna_def_userdef_filepaths(BlenderRNA *brna)
RNA_def_property_range(prop, 0, 32);
RNA_def_property_ui_text(prop, "Save Versions", "The number of old versions to maintain in the current directory, when manually saving");
- prop= RNA_def_property(srna, "auto_save_temporary_files", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_auto_save_temporary_files", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", USER_AUTOSAVE);
RNA_def_property_ui_text(prop, "Auto Save Temporary Files", "Automatic saving of temporary files");
RNA_def_property_update(prop, 0, "rna_userdef_autosave_update");
@@ -2766,7 +2770,7 @@ static void rna_def_userdef_filepaths(BlenderRNA *brna)
RNA_def_property_range(prop, 0, 30);
RNA_def_property_ui_text(prop, "Recent Files", "Maximum number of recently opened files to remember");
- prop= RNA_def_property(srna, "save_preview_images", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_save_preview_images", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", USER_SAVE_PREVIEWS);
RNA_def_property_ui_text(prop, "Save Preview Images", "Enables automatic saving of preview images in the .blend file");
}
@@ -2792,7 +2796,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);
+ RNA_def_property_flag(parm, PROP_REQUIRED|PROP_NEVER_NULL);
}
void RNA_def_userdef(BlenderRNA *brna)
@@ -2828,7 +2832,7 @@ void RNA_def_userdef(BlenderRNA *brna)
RNA_def_property_struct_type(prop, "Theme");
RNA_def_property_ui_text(prop, "Themes", "");
- prop= RNA_def_property(srna, "uistyles", PROP_COLLECTION, PROP_NONE);
+ prop= RNA_def_property(srna, "ui_styles", PROP_COLLECTION, PROP_NONE);
RNA_def_property_collection_sdna(prop, NULL, "uistyles", NULL);
RNA_def_property_struct_type(prop, "ThemeStyle");
RNA_def_property_ui_text(prop, "Styles", "");
@@ -2881,4 +2885,3 @@ void RNA_def_userdef(BlenderRNA *brna)
}
#endif
-
diff --git a/source/blender/makesrna/intern/rna_vfont.c b/source/blender/makesrna/intern/rna_vfont.c
index c19fbd7d5d3..41387e806b9 100644
--- a/source/blender/makesrna/intern/rna_vfont.c
+++ b/source/blender/makesrna/intern/rna_vfont.c
@@ -17,7 +17,7 @@
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
- * Contributor(s): Blender Foundation (2008), Juho Vepsäläinen
+ * Contributor(s): Blender Foundation (2008), Juho Vepsäläinen
*
* ***** END GPL LICENSE BLOCK *****
*/
diff --git a/source/blender/makesrna/intern/rna_wm.c b/source/blender/makesrna/intern/rna_wm.c
index eeac6813f78..62d0c99f6c5 100644
--- a/source/blender/makesrna/intern/rna_wm.c
+++ b/source/blender/makesrna/intern/rna_wm.c
@@ -324,7 +324,7 @@ static StructRNA *rna_OperatorProperties_refine(PointerRNA *ptr)
return ptr->type;
}
-static IDProperty *rna_OperatorProperties_idproperties(PointerRNA *ptr, int create)
+static IDProperty *rna_OperatorProperties_idprops(PointerRNA *ptr, int create)
{
if(create && !ptr->data) {
IDPropertyTemplate val = {0};
@@ -361,7 +361,7 @@ static PointerRNA rna_Operator_properties_get(PointerRNA *ptr)
static PointerRNA rna_OperatorTypeMacro_properties_get(PointerRNA *ptr)
{
wmOperatorTypeMacro *otmacro= (wmOperatorTypeMacro*)ptr->data;
- wmOperatorType *ot = WM_operatortype_exists(otmacro->idname);
+ wmOperatorType *ot = WM_operatortype_find(otmacro->idname, TRUE);
return rna_pointer_inherit_refine(ptr, ot->srna, otmacro->properties);
}
@@ -612,6 +612,43 @@ static int rna_wmKeyMapItem_name_length(PointerRNA *ptr)
return 0;
}
+static void rna_wmClipboard_get(PointerRNA *ptr, char *value)
+{
+ char *pbuf;
+
+ pbuf= WM_clipboard_text_get(FALSE);
+ if(pbuf) {
+ strcpy(value, pbuf);
+ MEM_freeN(pbuf);
+ }
+ else {
+ value[0]= '\0';
+ }
+}
+
+static int rna_wmClipboard_length(PointerRNA *ptr)
+{
+ char *pbuf;
+ int length;
+
+ pbuf = WM_clipboard_text_get(FALSE);
+ if(pbuf) {
+ length = strlen(pbuf);
+ MEM_freeN(pbuf);
+ }
+ else {
+ length= 0;
+ }
+
+
+ return length;
+}
+
+static void rna_wmClipboard_set(PointerRNA *ptr, const char *value)
+{
+ WM_clipboard_text_set((void *) value, FALSE);
+}
+
#ifndef DISABLE_PYTHON
static void rna_Operator_unregister(const bContext *C, StructRNA *type)
{
@@ -660,7 +697,7 @@ static int operator_poll(bContext *C, wmOperatorType *ot)
return visible;
}
-static int operator_exec(bContext *C, wmOperator *op)
+static int operator_execute(bContext *C, wmOperator *op)
{
PointerRNA opr;
ParameterList list;
@@ -683,6 +720,30 @@ static int operator_exec(bContext *C, wmOperator *op)
return result;
}
+/* same as execute() but no return value */
+static int operator_check(bContext *C, wmOperator *op)
+{
+ PointerRNA opr;
+ ParameterList list;
+ FunctionRNA *func;
+ void *ret;
+ int result;
+
+ RNA_pointer_create(&CTX_wm_screen(C)->id, op->type->ext.srna, op, &opr);
+ func= RNA_struct_find_function(&opr, "check");
+
+ RNA_parameter_list_create(&list, &opr, func);
+ RNA_parameter_set_lookup(&list, "context", &C);
+ op->type->ext.call(&opr, func, &list);
+
+ RNA_parameter_get_lookup(&list, "result", &ret);
+ result= *(int*)ret;
+
+ RNA_parameter_list_free(&list);
+
+ return result;
+}
+
static int operator_invoke(bContext *C, wmOperator *op, wmEvent *event)
{
PointerRNA opr;
@@ -759,7 +820,7 @@ static StructRNA *rna_Operator_register(const bContext *C, ReportList *reports,
wmOperatorType dummyot = {0};
wmOperator dummyop= {0};
PointerRNA dummyotr;
- int have_function[5];
+ int have_function[6];
/* setup dummy operator & operator type to store static properties in */
dummyop.type= &dummyot;
@@ -796,23 +857,24 @@ static StructRNA *rna_Operator_register(const bContext *C, ReportList *reports,
/* check if we have registered this operator type before, and remove it */
{
- wmOperatorType *ot= WM_operatortype_exists(dummyot.idname);
+ wmOperatorType *ot= WM_operatortype_find(dummyot.idname, TRUE);
if(ot && ot->ext.srna)
rna_Operator_unregister(C, ot->ext.srna);
}
/* create a new menu type */
dummyot.ext.srna= RNA_def_struct(&BLENDER_RNA, dummyot.idname, "Operator");
+ RNA_def_struct_flag(dummyot.ext.srna, STRUCT_NO_IDPROPERTIES); /* operator properties are registered separately */
dummyot.ext.data= data;
dummyot.ext.call= call;
dummyot.ext.free= free;
dummyot.pyop_poll= (have_function[0])? operator_poll: NULL;
- dummyot.exec= (have_function[1])? operator_exec: NULL;
- dummyot.invoke= (have_function[2])? operator_invoke: NULL;
- dummyot.modal= (have_function[3])? operator_modal: NULL;
- dummyot.ui= (have_function[4])? operator_draw: 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;
WM_operatortype_append_ptr(operator_wrapper, (void *)&dummyot);
/* update while blender is running */
@@ -865,7 +927,7 @@ static StructRNA *rna_MacroOperator_register(const bContext *C, ReportList *repo
/* check if we have registered this operator type before, and remove it */
{
- wmOperatorType *ot= WM_operatortype_exists(dummyot.idname);
+ wmOperatorType *ot= WM_operatortype_find(dummyot.idname, TRUE);
if(ot && ot->ext.srna)
rna_Operator_unregister(C, ot->ext.srna);
}
@@ -901,7 +963,7 @@ static StructRNA* rna_MacroOperator_refine(PointerRNA *opr)
return (op->type && op->type->ext.srna)? op->type->ext.srna: &RNA_Macro;
}
-static wmKeyMapItem *rna_KeyMap_add_item(wmKeyMap *km, ReportList *reports, char *idname, int type, int value, int any, int shift, int ctrl, int alt, int oskey, int keymodifier)
+static wmKeyMapItem *rna_KeyMap_item_new(wmKeyMap *km, ReportList *reports, char *idname, int type, int value, int any, int shift, int ctrl, int alt, int oskey, int keymodifier)
{
// wmWindowManager *wm = CTX_wm_manager(C);
int modifier= 0;
@@ -922,7 +984,7 @@ static wmKeyMapItem *rna_KeyMap_add_item(wmKeyMap *km, ReportList *reports, char
return WM_keymap_add_item(km, idname, type, value, modifier, keymodifier);
}
-static wmKeyMapItem *rna_KeyMap_add_modal_item(wmKeyMap *km, bContext *C, ReportList *reports, char* propvalue_str, int type, int value, int any, int shift, int ctrl, int alt, int oskey, int keymodifier)
+static wmKeyMapItem *rna_KeyMap_item_new_modal(wmKeyMap *km, bContext *C, ReportList *reports, char* propvalue_str, int type, int value, int any, int shift, int ctrl, int alt, int oskey, int keymodifier)
{
wmWindowManager *wm = CTX_wm_manager(C);
int modifier= 0;
@@ -961,6 +1023,30 @@ static wmKeyMapItem *rna_KeyMap_add_modal_item(wmKeyMap *km, bContext *C, Report
return WM_modalkeymap_add_item(km, type, value, modifier, keymodifier, propvalue);
}
+static wmKeyMap *rna_keymap_new(wmKeyConfig *keyconf, char *idname, int spaceid, int regionid, int modal)
+{
+ if (modal == 0) {
+ return WM_keymap_find(keyconf, idname, spaceid, regionid);
+ } else {
+ return WM_modalkeymap_add(keyconf, idname, NULL); /* items will be lazy init */
+ }
+}
+
+static wmKeyMap *rna_keymap_find(wmKeyConfig *keyconf, char *idname, int spaceid, int regionid)
+{
+ return WM_keymap_list_find(&keyconf->keymaps, idname, spaceid, regionid);
+}
+
+static wmKeyMap *rna_keymap_find_modal(wmKeyConfig *keyconf, char *idname)
+{
+ wmOperatorType *ot = WM_operatortype_find(idname, 0);
+
+ if (!ot)
+ return NULL;
+ else
+ return ot->modalkeymap;
+}
+
#else /* RNA_RUNTIME */
static void rna_def_operator(BlenderRNA *brna)
@@ -1023,7 +1109,7 @@ static void rna_def_operator(BlenderRNA *brna)
srna= RNA_def_struct(brna, "OperatorProperties", NULL);
RNA_def_struct_ui_text(srna, "Operator Properties", "Input properties of an Operator");
RNA_def_struct_refine_func(srna, "rna_OperatorProperties_refine");
- RNA_def_struct_idproperties_func(srna, "rna_OperatorProperties_idproperties");
+ RNA_def_struct_idprops_func(srna, "rna_OperatorProperties_idprops");
}
static void rna_def_macro_operator(BlenderRNA *brna)
@@ -1237,6 +1323,43 @@ static void rna_def_window(BlenderRNA *brna)
RNA_def_property_update(prop, 0, "rna_Window_screen_update");
}
+/* curve.splines */
+static void rna_def_wm_keyconfigs(BlenderRNA *brna, PropertyRNA *cprop)
+{
+ StructRNA *srna;
+ PropertyRNA *prop;
+
+ FunctionRNA *func;
+ PropertyRNA *parm;
+
+ RNA_def_property_srna(cprop, "KeyConfigurations");
+ srna= RNA_def_struct(brna, "KeyConfigurations", NULL);
+ RNA_def_struct_sdna(srna, "wmWindowManager");
+ RNA_def_struct_ui_text(srna, "KeyConfigs", "Collection of KeyConfigs");
+
+ prop= RNA_def_property(srna, "active", PROP_POINTER, PROP_NONE);
+ RNA_def_property_struct_type(prop, "KeyConfig");
+ RNA_def_property_pointer_funcs(prop, "rna_WindowManager_active_keyconfig_get", "rna_WindowManager_active_keyconfig_set", NULL, NULL);
+ RNA_def_property_flag(prop, PROP_EDITABLE);
+ RNA_def_property_ui_text(prop, "Active KeyConfig", "Active wm KeyConfig");
+
+ prop= RNA_def_property(srna, "default", PROP_POINTER, PROP_NEVER_NULL);
+ RNA_def_property_pointer_sdna(prop, NULL, "defaultconf");
+ RNA_def_property_struct_type(prop, "KeyConfig");
+ RNA_def_property_ui_text(prop, "Default Key Configuration", "");
+
+ /* funcs */
+ func= RNA_def_function(srna, "new", "WM_keyconfig_new_user"); // add_keyconfig
+ parm= RNA_def_string(func, "name", "", 0, "Name", "");
+ RNA_def_property_flag(parm, PROP_REQUIRED);
+ parm= RNA_def_pointer(func, "keyconfig", "KeyConfig", "Key Configuration", "Added key configuration.");
+ RNA_def_function_return(func, parm);
+
+ func= RNA_def_function(srna, "remove", "WM_keyconfig_remove"); // remove_keyconfig
+ parm= RNA_def_pointer(func, "keyconfig", "KeyConfig", "Key Configuration", "Removed key configuration.");
+ RNA_def_property_flag(parm, PROP_REQUIRED);
+}
+
static void rna_def_windowmanager(BlenderRNA *brna)
{
StructRNA *srna;
@@ -1258,17 +1381,11 @@ static void rna_def_windowmanager(BlenderRNA *brna)
prop= RNA_def_property(srna, "keyconfigs", PROP_COLLECTION, PROP_NONE);
RNA_def_property_struct_type(prop, "KeyConfig");
RNA_def_property_ui_text(prop, "Key Configurations", "Registered key configurations");
+ rna_def_wm_keyconfigs(brna, prop);
- prop= RNA_def_property(srna, "active_keyconfig", PROP_POINTER, PROP_NEVER_NULL);
- RNA_def_property_struct_type(prop, "KeyConfig");
- RNA_def_property_flag(prop, PROP_EDITABLE);
- RNA_def_property_pointer_funcs(prop, "rna_WindowManager_active_keyconfig_get", "rna_WindowManager_active_keyconfig_set", 0, NULL);
- RNA_def_property_ui_text(prop, "Active Key Configuration", "");
-
- prop= RNA_def_property(srna, "default_keyconfig", PROP_POINTER, PROP_NEVER_NULL);
- RNA_def_property_pointer_sdna(prop, NULL, "defaultconf");
- RNA_def_property_struct_type(prop, "KeyConfig");
- RNA_def_property_ui_text(prop, "Default Key Configuration", "");
+ prop= RNA_def_property(srna, "clipboard", PROP_STRING, PROP_NONE);
+ RNA_def_property_string_funcs(prop, "rna_wmClipboard_get", "rna_wmClipboard_length", "rna_wmClipboard_set");
+ RNA_def_property_ui_text(prop, "Text Clipboard", "");
RNA_api_wm(srna);
}
@@ -1287,7 +1404,7 @@ static void rna_def_keymap_items(BlenderRNA *brna, PropertyRNA *cprop)
RNA_def_struct_sdna(srna, "wmKeyMap");
RNA_def_struct_ui_text(srna, "KeyMap Items", "Collection of keymap items");
- func= RNA_def_function(srna, "add", "rna_KeyMap_add_item");
+ func= RNA_def_function(srna, "new", "rna_KeyMap_item_new");
RNA_def_function_flag(func, FUNC_USE_REPORTS);
parm= RNA_def_string(func, "idname", "", 0, "Operator Identifier", "");
RNA_def_property_flag(parm, PROP_REQUIRED);
@@ -1304,7 +1421,7 @@ static void rna_def_keymap_items(BlenderRNA *brna, PropertyRNA *cprop)
parm= RNA_def_pointer(func, "item", "KeyMapItem", "Item", "Added key map item.");
RNA_def_function_return(func, parm);
- func= RNA_def_function(srna, "add_modal", "rna_KeyMap_add_modal_item");
+ func= RNA_def_function(srna, "new_modal", "rna_KeyMap_item_new_modal");
RNA_def_function_flag(func, FUNC_USE_CONTEXT|FUNC_USE_REPORTS);
parm= RNA_def_string(func, "propvalue", "", 0, "Property Value", "");
RNA_def_property_flag(parm, PROP_REQUIRED);
@@ -1321,6 +1438,56 @@ static void rna_def_keymap_items(BlenderRNA *brna, PropertyRNA *cprop)
parm= RNA_def_pointer(func, "item", "KeyMapItem", "Item", "Added key map item.");
RNA_def_function_return(func, parm);
+ func= RNA_def_function(srna, "remove", "WM_keymap_remove_item");
+ parm= RNA_def_pointer(func, "item", "KeyMapItem", "Item", "");
+ RNA_def_property_flag(parm, PROP_REQUIRED);
+
+ func= RNA_def_function(srna, "from_id", "WM_keymap_item_find_id");
+ parm= RNA_def_property(func, "id", PROP_INT, PROP_NONE);
+ RNA_def_property_flag(parm, PROP_REQUIRED);
+ RNA_def_property_ui_text(parm, "id", "ID of the item");
+ parm= RNA_def_pointer(func, "item", "KeyMapItem", "Item", "");
+ RNA_def_function_return(func, parm);
+
+}
+
+static void rna_def_wm_keymaps(BlenderRNA *brna, PropertyRNA *cprop)
+{
+ StructRNA *srna;
+ //PropertyRNA *prop;
+
+ FunctionRNA *func;
+ PropertyRNA *parm;
+
+
+ RNA_def_property_srna(cprop, "KeyMaps");
+ srna= RNA_def_struct(brna, "KeyMaps", NULL);
+ RNA_def_struct_sdna(srna, "wmKeyConfig");
+ RNA_def_struct_ui_text(srna, "Key Maps", "Collection of keymaps");
+
+ func= RNA_def_function(srna, "new", "rna_keymap_new"); // add_keymap
+ parm= RNA_def_string(func, "name", "", 0, "Name", "");
+ RNA_def_property_flag(parm, PROP_REQUIRED);
+ RNA_def_enum(func, "space_type", space_type_items, SPACE_EMPTY, "Space Type", "");
+ RNA_def_enum(func, "region_type", region_type_items, RGN_TYPE_WINDOW, "Region Type", "");
+ RNA_def_boolean(func, "modal", 0, "Modal", "");
+ parm= RNA_def_pointer(func, "keymap", "KeyMap", "Key Map", "Added key map.");
+ RNA_def_function_return(func, parm);
+
+ func= RNA_def_function(srna, "find", "rna_keymap_find"); // find_keymap
+ parm= RNA_def_string(func, "name", "", 0, "Name", "");
+ RNA_def_property_flag(parm, PROP_REQUIRED);
+ RNA_def_enum(func, "space_type", space_type_items, SPACE_EMPTY, "Space Type", "");
+ RNA_def_enum(func, "region_type", region_type_items, RGN_TYPE_WINDOW, "Region Type", "");
+ parm= RNA_def_pointer(func, "keymap", "KeyMap", "Key Map", "Corresponding key map.");
+ RNA_def_function_return(func, parm);
+
+ func= RNA_def_function(srna, "find_modal", "rna_keymap_find_modal"); // find_keymap_modal
+ parm= RNA_def_string(func, "name", "", 0, "Operator Name", "");
+ RNA_def_property_flag(parm, PROP_REQUIRED);
+ parm= RNA_def_pointer(func, "keymap", "KeyMap", "Key Map", "Corresponding key map.");
+ RNA_def_function_return(func, parm);
+
}
static void rna_def_keyconfig(BlenderRNA *brna)
@@ -1347,12 +1514,13 @@ static void rna_def_keyconfig(BlenderRNA *brna)
RNA_def_property_string_sdna(prop, NULL, "idname");
RNA_def_property_ui_text(prop, "Name", "Name of the key configuration");
RNA_def_struct_name_property(srna, prop);
-
+
prop= RNA_def_property(srna, "keymaps", PROP_COLLECTION, PROP_NONE);
RNA_def_property_struct_type(prop, "KeyMap");
RNA_def_property_ui_text(prop, "Key Maps", "Key maps configured as part of this configuration");
+ rna_def_wm_keymaps(brna, prop);
- prop= RNA_def_property(srna, "user_defined", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "is_user_defined", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", KEYCONF_USER);
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
RNA_def_property_ui_text(prop, "User Defined", "Indicates that a keyconfig was defined by the user");
@@ -1387,21 +1555,21 @@ static void rna_def_keyconfig(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Items", "Items in the keymap, linking an operator to an input event");
rna_def_keymap_items(brna, prop);
- prop= RNA_def_property(srna, "user_defined", PROP_BOOLEAN, PROP_NEVER_NULL);
+ prop= RNA_def_property(srna, "is_user_defined", PROP_BOOLEAN, PROP_NEVER_NULL);
RNA_def_property_boolean_sdna(prop, NULL, "flag", KEYMAP_USER);
RNA_def_property_ui_text(prop, "User Defined", "Keymap is defined by the user");
- prop= RNA_def_property(srna, "modal", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "is_modal", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", KEYMAP_MODAL);
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
RNA_def_property_ui_text(prop, "Modal Keymap", "Indicates that a keymap is used for translate modal events for an operator");
- prop= RNA_def_property(srna, "items_expanded", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_expanded_items", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", KEYMAP_EXPANDED);
RNA_def_property_ui_text(prop, "Items Expanded", "Expanded in the user interface");
RNA_def_property_ui_icon(prop, ICON_TRIA_RIGHT, 1);
- prop= RNA_def_property(srna, "children_expanded", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_expanded_children", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", KEYMAP_CHILDREN_EXPANDED);
RNA_def_property_ui_text(prop, "Children Expanded", "Children expanded in the user interface");
RNA_def_property_ui_icon(prop, ICON_TRIA_RIGHT, 1);
@@ -1486,7 +1654,7 @@ static void rna_def_keyconfig(BlenderRNA *brna)
RNA_def_property_enum_items(prop, event_type_items);
RNA_def_property_ui_text(prop, "Key Modifier", "Regular key pressed as a modifier");
- prop= RNA_def_property(srna, "expanded", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "show_expanded", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", KMI_EXPANDED);
RNA_def_property_ui_text(prop, "Expanded", "Show key map event and property details in the user interface");
RNA_def_property_ui_icon(prop, ICON_TRIA_RIGHT, 1);
diff --git a/source/blender/makesrna/intern/rna_wm_api.c b/source/blender/makesrna/intern/rna_wm_api.c
index 5df35ed4210..36dd6efc256 100644
--- a/source/blender/makesrna/intern/rna_wm_api.c
+++ b/source/blender/makesrna/intern/rna_wm_api.c
@@ -39,31 +39,6 @@
#include "BKE_context.h"
-
-static wmKeyMap *rna_keymap_add(wmKeyConfig *keyconf, char *idname, int spaceid, int regionid, int modal)
-{
- if (modal == 0) {
- return WM_keymap_find(keyconf, idname, spaceid, regionid);
- } else {
- return WM_modalkeymap_add(keyconf, idname, NULL); /* items will be lazy init */
- }
-}
-
-static wmKeyMap *rna_keymap_find(wmKeyConfig *keyconf, char *idname, int spaceid, int regionid)
-{
- return WM_keymap_list_find(&keyconf->keymaps, idname, spaceid, regionid);
-}
-
-static wmKeyMap *rna_keymap_find_modal(wmKeyConfig *keyconf, char *idname)
-{
- wmOperatorType *ot = WM_operatortype_find(idname, 0);
-
- if (!ot)
- return NULL;
- else
- return ot->modalkeymap;
-}
-
static wmKeyMap *rna_keymap_active(wmKeyMap *km, bContext *C)
{
wmWindowManager *wm = CTX_wm_manager(C);
@@ -132,16 +107,6 @@ void RNA_api_wm(StructRNA *srna)
RNA_def_function_ui_description(func, "Show up the file selector.");
rna_generic_op_invoke(func, 0);
- func= RNA_def_function(srna, "add_keyconfig", "WM_keyconfig_add_user");
- parm= RNA_def_string(func, "name", "", 0, "Name", "");
- RNA_def_property_flag(parm, PROP_REQUIRED);
- parm= RNA_def_pointer(func, "keyconfig", "KeyConfig", "Key Configuration", "Added key configuration.");
- RNA_def_function_return(func, parm);
-
- func= RNA_def_function(srna, "remove_keyconfig", "WM_keyconfig_remove");
- parm= RNA_def_pointer(func, "keyconfig", "KeyConfig", "Key Configuration", "Removed key configuration.");
- RNA_def_property_flag(parm, PROP_REQUIRED);
-
func= RNA_def_function(srna, "add_modal_handler", "rna_event_add_modal_handler");
RNA_def_function_flag(func, FUNC_NO_SELF|FUNC_USE_CONTEXT);
parm= RNA_def_pointer(func, "operator", "Operator", "", "Operator to call.");
@@ -186,7 +151,7 @@ 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_REGISTER_OPTIONAL);
+ RNA_def_function_flag(func, FUNC_NO_SELF|FUNC_REGISTER_OPTIONAL);
RNA_def_function_return(func, RNA_def_boolean(func, "visible", 1, "", ""));
RNA_def_pointer(func, "context", "Context", "", "");
@@ -200,6 +165,15 @@ void RNA_api_operator(StructRNA *srna)
RNA_def_property_flag(parm, PROP_ENUM_FLAG);
RNA_def_function_return(func, parm);
+ /* check */
+ func= RNA_def_function(srna, "check", NULL);
+ RNA_def_function_ui_description(func, "Check the operator settings.");
+ RNA_def_function_flag(func, FUNC_REGISTER_OPTIONAL);
+ RNA_def_pointer(func, "context", "Context", "", "");
+
+ parm= RNA_def_boolean(func, "result", 0, "result", ""); // better name?
+ RNA_def_function_return(func, parm);
+
/* invoke */
func= RNA_def_function(srna, "invoke", NULL);
RNA_def_function_ui_description(func, "Invoke the operator.");
@@ -246,7 +220,7 @@ 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_REGISTER_OPTIONAL);
+ RNA_def_function_flag(func, FUNC_NO_SELF|FUNC_REGISTER_OPTIONAL);
RNA_def_function_return(func, RNA_def_boolean(func, "visible", 1, "", ""));
RNA_def_pointer(func, "context", "Context", "", "");
@@ -259,31 +233,8 @@ void RNA_api_macro(StructRNA *srna)
void RNA_api_keyconfig(StructRNA *srna)
{
- FunctionRNA *func;
- PropertyRNA *parm;
-
- func= RNA_def_function(srna, "add_keymap", "rna_keymap_add");
- parm= RNA_def_string(func, "name", "", 0, "Name", "");
- RNA_def_property_flag(parm, PROP_REQUIRED);
- RNA_def_enum(func, "space_type", space_type_items, SPACE_EMPTY, "Space Type", "");
- RNA_def_enum(func, "region_type", region_type_items, RGN_TYPE_WINDOW, "Region Type", "");
- RNA_def_boolean(func, "modal", 0, "Modal", "");
- parm= RNA_def_pointer(func, "keymap", "KeyMap", "Key Map", "Added key map.");
- RNA_def_function_return(func, parm);
-
- func= RNA_def_function(srna, "find_keymap", "rna_keymap_find");
- parm= RNA_def_string(func, "name", "", 0, "Name", "");
- RNA_def_property_flag(parm, PROP_REQUIRED);
- RNA_def_enum(func, "space_type", space_type_items, SPACE_EMPTY, "Space Type", "");
- RNA_def_enum(func, "region_type", region_type_items, RGN_TYPE_WINDOW, "Region Type", "");
- parm= RNA_def_pointer(func, "keymap", "KeyMap", "Key Map", "Corresponding key map.");
- RNA_def_function_return(func, parm);
-
- func= RNA_def_function(srna, "find_keymap_modal", "rna_keymap_find_modal");
- parm= RNA_def_string(func, "name", "", 0, "Operator Name", "");
- RNA_def_property_flag(parm, PROP_REQUIRED);
- parm= RNA_def_pointer(func, "keymap", "KeyMap", "Key Map", "Corresponding key map.");
- RNA_def_function_return(func, parm);
+ // FunctionRNA *func;
+ // PropertyRNA *parm;
}
void RNA_api_keymap(StructRNA *srna)
@@ -296,17 +247,6 @@ void RNA_api_keymap(StructRNA *srna)
parm= RNA_def_pointer(func, "keymap", "KeyMap", "Key Map", "Active key map.");
RNA_def_function_return(func, parm);
- func= RNA_def_function(srna, "remove_item", "WM_keymap_remove_item");
- parm= RNA_def_pointer(func, "item", "KeyMapItem", "Item", "");
- RNA_def_property_flag(parm, PROP_REQUIRED);
-
- func= RNA_def_function(srna, "item_from_id", "WM_keymap_item_find_id");
- parm= RNA_def_property(func, "id", PROP_INT, PROP_NONE);
- RNA_def_property_flag(parm, PROP_REQUIRED);
- RNA_def_property_ui_text(parm, "id", "ID of the item");
- parm= RNA_def_pointer(func, "item", "KeyMapItem", "Item", "");
- RNA_def_function_return(func, parm);
-
func= RNA_def_function(srna, "copy_to_user", "WM_keymap_copy_to_user");
parm= RNA_def_pointer(func, "keymap", "KeyMap", "Key Map", "User editable key map.");
RNA_def_function_return(func, parm);
diff --git a/source/blender/makesrna/intern/rna_world.c b/source/blender/makesrna/intern/rna_world.c
index f4517c8a5ee..ecf253acbce 100644
--- a/source/blender/makesrna/intern/rna_world.c
+++ b/source/blender/makesrna/intern/rna_world.c
@@ -119,22 +119,22 @@ static void rna_def_world_mtex(BlenderRNA *brna)
RNA_def_struct_ui_text(srna, "World Texture Slot", "Texture slot for textures in a World datablock");
/* map to */
- prop= RNA_def_property(srna, "map_blend", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_map_blend", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "mapto", WOMAP_BLEND);
RNA_def_property_ui_text(prop, "Blend", "Affect the color progression of the background");
RNA_def_property_update(prop, 0, "rna_World_update");
- prop= RNA_def_property(srna, "map_horizon", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_map_horizon", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "mapto", WOMAP_HORIZ);
RNA_def_property_ui_text(prop, "Horizon", "Affect the color of the horizon");
RNA_def_property_update(prop, 0, "rna_World_update");
- prop= RNA_def_property(srna, "map_zenith_up", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_map_zenith_up", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "mapto", WOMAP_ZENUP);
RNA_def_property_ui_text(prop, "Zenith Up", "Affect the color of the zenith above");
RNA_def_property_update(prop, 0, "rna_World_update");
- prop= RNA_def_property(srna, "map_zenith_down", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_map_zenith_down", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "mapto", WOMAP_ZENDOWN);
RNA_def_property_ui_text(prop, "Zenith Down", "Affect the color of the zenith below");
RNA_def_property_update(prop, 0, "rna_World_update");
@@ -144,7 +144,7 @@ static void rna_def_world_mtex(BlenderRNA *brna)
RNA_def_property_boolean_sdna(prop, NULL, "mapto", WOMAP_MIST);
RNA_def_property_ui_text(prop, "Mist", "Causes the texture to affect the intensity of the mist");*/
- prop= RNA_def_property(srna, "texture_coordinates", PROP_ENUM, PROP_NONE);
+ prop= RNA_def_property(srna, "texture_coords", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "texco");
RNA_def_property_enum_items(prop, texco_items);
RNA_def_property_ui_text(prop, "Texture Coordinates", "Texture coordinates used to map the texture onto the background");
@@ -227,21 +227,21 @@ static void rna_def_lighting(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Factor", "Factor for ambient occlusion blending");
RNA_def_property_update(prop, 0, "rna_World_update");
- prop= RNA_def_property(srna, "ao_blend_mode", PROP_ENUM, PROP_NONE);
+ prop= RNA_def_property(srna, "ao_blend_type", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "aomix");
RNA_def_property_enum_items(prop, blend_mode_items);
RNA_def_property_ui_text(prop, "Blend Mode", "Defines how AO mixes with material shading");
RNA_def_property_update(prop, 0, "rna_World_update");
/* environment lighting */
- prop= RNA_def_property(srna, "use_environment_lighting", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_environment_light", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "mode", WO_ENV_LIGHT);
RNA_def_property_ui_text(prop, "Use Environment Lighting", "Add light coming from the environment");
RNA_def_property_update(prop, 0, "rna_World_update");
prop= RNA_def_property(srna, "environment_energy", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "ao_env_energy");
- RNA_def_property_ui_range(prop, 0, FLT_MAX, 0.1, 2);
+ RNA_def_property_ui_range(prop, 0, FLT_MAX, 1, 3);
RNA_def_property_ui_text(prop, "Environment Color", "Defines the strength of environment light");
RNA_def_property_update(prop, 0, "rna_World_update");
@@ -252,7 +252,7 @@ static void rna_def_lighting(BlenderRNA *brna)
RNA_def_property_update(prop, 0, "rna_World_update");
/* indirect lighting */
- prop= RNA_def_property(srna, "use_indirect_lighting", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_indirect_light", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "mode", WO_INDIRECT_LIGHT);
RNA_def_property_ui_text(prop, "Use Indirect Lighting", "Add indirect light bouncing of surrounding objects");
RNA_def_property_update(prop, 0, "rna_World_update");
@@ -311,7 +311,7 @@ static void rna_def_lighting(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Adapt To Speed", "Use the speed vector pass to reduce AO samples in fast moving pixels. Higher values result in more aggressive sample reduction. Requires Vec pass enabled (for Raytrace Adaptive QMC)");
RNA_def_property_update(prop, 0, "rna_World_update");
- prop= RNA_def_property(srna, "error_tolerance", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "error_threshold", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "ao_approx_error");
RNA_def_property_range(prop, 0.0001, 10);
RNA_def_property_ui_text(prop, "Error Tolerance", "Low values are slower and higher quality (for Approximate)");
@@ -324,12 +324,12 @@ static void rna_def_lighting(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Correction", "Ad-hoc correction for over-occlusion due to the approximation (for Approximate)");
RNA_def_property_update(prop, 0, "rna_World_update");
- prop= RNA_def_property(srna, "falloff", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_falloff", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "aomode", WO_AODIST);
RNA_def_property_ui_text(prop, "Falloff", "");
RNA_def_property_update(prop, 0, "rna_World_update");
- prop= RNA_def_property(srna, "pixel_cache", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_cache", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "aomode", WO_AOCACHE);
RNA_def_property_ui_text(prop, "Pixel Cache", "Cache AO results in pixels and interpolate over neighbouring pixels for speedup (for Approximate)");
RNA_def_property_update(prop, 0, "rna_World_update");
@@ -422,7 +422,7 @@ static void rna_def_world_stars(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Size", "Average screen dimension of stars");
RNA_def_property_update(prop, 0, "rna_World_update");
- prop= RNA_def_property(srna, "min_distance", PROP_FLOAT, PROP_DISTANCE);
+ prop= RNA_def_property(srna, "distance_min", PROP_FLOAT, PROP_DISTANCE);
RNA_def_property_float_sdna(prop, NULL, "starmindist");
RNA_def_property_range(prop, 0, 1000);
RNA_def_property_ui_text(prop, "Minimum Distance", "Minimum distance to the camera for stars");
@@ -434,7 +434,7 @@ static void rna_def_world_stars(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Average Separation", "Average distance between any two stars");
RNA_def_property_update(prop, 0, "rna_World_draw_update");
- prop= RNA_def_property(srna, "color_randomization", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "color_random", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "starcolnoise");
RNA_def_property_range(prop, 0, 1);
RNA_def_property_ui_text(prop, "Color Randomization", "Randomize star colors");
@@ -469,8 +469,8 @@ void RNA_def_world(BlenderRNA *brna)
RNA_def_struct_ui_icon(srna, ICON_WORLD_DATA);
rna_def_animdata_common(srna);
- rna_def_mtex_common(srna, "rna_World_mtex_begin", "rna_World_active_texture_get",
- "rna_World_active_texture_set", "WorldTextureSlot", "rna_World_update");
+ rna_def_mtex_common(brna, srna, "rna_World_mtex_begin", "rna_World_active_texture_get",
+ "rna_World_active_texture_set", "WorldTextureSlot", "WorldTextureSlots", "rna_World_update");
/* colors */
prop= RNA_def_property(srna, "horizon_color", PROP_FLOAT, PROP_COLOR);
@@ -502,42 +502,42 @@ void RNA_def_world(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Exposure", "Amount of exponential color correction for light");
RNA_def_property_update(prop, 0, "rna_World_update");
- prop= RNA_def_property(srna, "range", PROP_FLOAT, PROP_NONE);
+ prop= RNA_def_property(srna, "color_range", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "range");
RNA_def_property_range(prop, 0.2, 5.0);
RNA_def_property_ui_text(prop, "Range", "The color range that will be mapped to 0-1");
RNA_def_property_update(prop, 0, "rna_World_update");
/* sky type */
- prop= RNA_def_property(srna, "blend_sky", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_sky_blend", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "skytype", WO_SKYBLEND);
RNA_def_property_ui_text(prop, "Blend Sky", "Render background with natural progression from horizon to zenith");
RNA_def_property_update(prop, 0, "rna_World_update");
- prop= RNA_def_property(srna, "paper_sky", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_sky_paper", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "skytype", WO_SKYPAPER);
RNA_def_property_ui_text(prop, "Paper Sky", "Flatten blend or texture coordinates");
RNA_def_property_update(prop, 0, "rna_World_update");
- prop= RNA_def_property(srna, "real_sky", PROP_BOOLEAN, PROP_NONE);
+ prop= RNA_def_property(srna, "use_sky_real", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "skytype", WO_SKYREAL);
RNA_def_property_ui_text(prop, "Real Sky", "Render background with a real horizon, relative to the camera angle");
RNA_def_property_update(prop, 0, "rna_World_update");
/* nested structs */
- prop= RNA_def_property(srna, "lighting", PROP_POINTER, PROP_NONE);
+ prop= RNA_def_property(srna, "light_settings", PROP_POINTER, PROP_NONE);
RNA_def_property_flag(prop, PROP_NEVER_NULL);
RNA_def_property_struct_type(prop, "WorldLighting");
RNA_def_property_pointer_funcs(prop, "rna_World_lighting_get", NULL, NULL, NULL);
RNA_def_property_ui_text(prop, "Lighting", "World lighting settings");
- prop= RNA_def_property(srna, "mist", PROP_POINTER, PROP_NONE);
+ prop= RNA_def_property(srna, "mist_settings", PROP_POINTER, PROP_NONE);
RNA_def_property_flag(prop, PROP_NEVER_NULL);
RNA_def_property_struct_type(prop, "WorldMistSettings");
RNA_def_property_pointer_funcs(prop, "rna_World_mist_get", NULL, NULL, NULL);
RNA_def_property_ui_text(prop, "Mist", "World mist settings");
- prop= RNA_def_property(srna, "stars", PROP_POINTER, PROP_NONE);
+ prop= RNA_def_property(srna, "star_settings", PROP_POINTER, PROP_NONE);
RNA_def_property_flag(prop, PROP_NEVER_NULL);
RNA_def_property_struct_type(prop, "WorldStarsSettings");
RNA_def_property_pointer_funcs(prop, "rna_World_stars_get", NULL, NULL, NULL);
diff --git a/source/blender/makesrna/rna_cleanup/rna_booleans.txt b/source/blender/makesrna/rna_cleanup/rna_booleans.txt
deleted file mode 100644
index 51be6427c88..00000000000
--- a/source/blender/makesrna/rna_cleanup/rna_booleans.txt
+++ /dev/null
@@ -1,1330 +0,0 @@
-ActionActuator.continue_last_frame -> use_continue_last_frame: boolean Restore last frame when switching on/off, otherwise play from the start each time
-ActionGroup.expanded -> show_expanded: boolean Action Group is expanded
-
-Actuator.expanded -> show_expanded: boolean Set actuator expanded in the user interface
-AnimData.nla_enabled -> use_nla: boolean NLA stack is evaluated when evaluating this block
-AnimVizMotionPaths.highlight_keyframes -> show_keyframe_highlight: boolean Emphasize position of keyframes on Motion Paths
-AnimVizMotionPaths.search_all_action_keyframes -> show_keyframe_action_all: boolean For bone motion paths, search whole Action for keyframes instead of in group with matching name only (is slower)
-AnimVizMotionPaths.show_frame_numbers -> show_frame_numbers: boolean Show frame numbers on Motion Paths
-AnimVizMotionPaths.show_keyframe_numbers -> show_keyframe_numbers: boolean Show frame numbers of Keyframes on Motion Paths
-AnimVizOnionSkinning.only_selected -> show_only_selected: boolean For Pose-Mode drawing, only draw ghosts for selected bones
-Area.show_menus -> show_menus: boolean Show menus in the header
-AreaLamp.dither -> use_dither: boolean Use 2x2 dithering for sampling (Constant Jittered sampling)
-AreaLamp.jitter -> use_jitter: boolean Use noise for sampling (Constant Jittered sampling)
-AreaLamp.only_shadow -> use_only_shadow: boolean Causes light to cast shadows only without illuminating objects
-AreaLamp.shadow_layer -> use_shadow_layer: boolean Causes only objects on the same layer to cast shadows
-AreaLamp.umbra -> use_umbra: boolean Emphasize parts that are fully shadowed (Constant Jittered sampling)
-Armature.auto_ik -> use_auto_ik: boolean Add temporaral IK constraints while grabbing bones in Pose Mode
-Armature.deform_envelope -> use_deform_envelopes: boolean Enable Bone Envelopes when defining deform
-Armature.deform_quaternion -> use_deform_preserve_volume: boolean Deform rotation interpolation with quaternions
-Armature.deform_vertexgroups -> use_deform_vertex_groups: boolean Enable Vertex Groups when defining deform
-Armature.delay_deform -> use_deform_delay: boolean Don't deform children when manipulating bones in Pose Mode
-Armature.draw_axes -> show_axes: boolean Draw bone axes
-Armature.draw_custom_bone_shapes -> show_bone_custom_shapes: boolean Draw bones with their custom shapes
-Armature.draw_group_colors -> show_group_colors: boolean Draw bone group colors
-Armature.draw_names -> show_names: boolean Draw bone names
-Armature.show_ghost_only_selected -> show_only_ghost_selected: boolean
-Armature.layer -> layers: boolean Armature layer visibility
-Armature.layer_protection -> layers_protected: boolean Protected layers in Proxy Instances are restored to Proxy settings on file reload and undo
-Armature.x_axis_mirror -> use_mirror_x: boolean Apply changes to matching bone on opposite side of X-Axis
-ArmatureModifier.invert -> invert_vertex_group: boolean Invert vertex group influence
-ArmatureModifier.multi_modifier -> use_multi_modifier: boolean Use same input as previous modifier, and mix results using overall vgroup
-ArmatureModifier.quaternion -> use_deform_preserve_volume: boolean Deform rotation interpolation with quaternions
-ArmatureModifier.use_deform_envelopes -> use_deform_envelopes: boolean
-ArmatureModifier.use_deform_vertex_groups -> use_deform_vertex_groups: boolean
-ArrayModifier.add_offset_object -> use_object_offset: boolean Add another object's transformation to the total offset
-ArrayModifier.constant_offset -> use_constant_offset: boolean Add a constant offset
-ArrayModifier.merge_adjacent_vertices -> use_merge_adjacent_vertices: boolean Merge vertices in adjacent duplicates
-ArrayModifier.merge_end_vertices -> use_merge_end_vertices: boolean Merge vertices in first and last duplicates
-ArrayModifier.relative_offset -> use_relative_offset: boolean Add an offset relative to the object's bounding box
-BackgroundImage.show_expanded -> show_expanded: boolean Show the expanded in the user interface
-BevelModifier.only_vertices -> use_only_vertices: boolean Bevel verts/corners, not edges
-
-BoidRule.in_air -> use_in_air: boolean Use rule when boid is flying
-BoidRule.on_land -> use_on_land: boolean Use rule when boid is on land
-BoidRuleAvoid.predict -> use_predict: boolean Predict target movement
-BoidRuleAvoidCollision.boids -> use_avoid: boolean Avoid collision with other boids
-BoidRuleAvoidCollision.deflectors -> use_avoid_collision: boolean Avoid collision with deflector objects
-BoidRuleFollowLeader.line -> use_line: boolean Follow leader in a line
-BoidRuleGoal.predict -> use_predict: boolean Predict target movement
-BoidSettings.allow_climb -> use_climb: boolean Allow boids to climb goal objects
-BoidSettings.allow_flight -> use_flight: boolean Allow boids to move in air
-BoidSettings.allow_land -> use_land: boolean Allow boids to move on land
-Bone.connected -> use_connect: boolean, (read-only) When bone has a parent, bone's head is struck to the parent's tail
-Bone.cyclic_offset -> use_cyclic_offset: boolean When bone doesn't have a parent, it receives cyclic offset effects
-Bone.deform -> use_deform: boolean Bone does not deform any geometry
-Bone.draw_wire -> show_wire: boolean Bone is always drawn as Wireframe regardless of viewport draw mode. Useful for non-obstructive custom bone shapes
-
-Bone.hinge -> use_hinge: boolean Bone inherits rotation or scale from parent bone
-Bone.inherit_scale -> use_inherit_scale: boolean Bone inherits scaling from parent bone
-Bone.layer -> layers: boolean Layers bone exists in
-Bone.local_location -> use_local_location: boolean Bone location is set in local space
-Bone.multiply_vertexgroup_with_envelope -> use_envelope_multiply: boolean When deforming bone, multiply effects of Vertex Group weights with Envelope influence
-BooleanProperty.default -> default: boolean, (read-only) Default value for this number
-BooleanProperty.default_array -> default_array: boolean, (read-only) Default value for this array
-Brush.use_accumulate -> use_accumulate: boolean Accumulate stroke dabs on top of each other
-Brush.use_airbrush -> use_airbrush: boolean Keep applying paint effect while holding mouse (spray)
-Brush.use_alpha -> use_alpha: boolean When this is disabled, lock alpha while painting
-Brush.use_anchor -> use_anchor: boolean Keep the brush anchored to the initial location
-Brush.use_jitter_pressure -> use_pressure_jitter: boolean Enable tablet pressure sensitivity for jitter
-Brush.use_persistent -> use_persistent: boolean Sculpts on a persistent layer of the mesh
-Brush.use_rake -> use_rake: boolean Rotate the brush texture to match the stroke direction
-Brush.use_size_pressure -> use_pressure_size: boolean Enable tablet pressure sensitivity for size
-Brush.use_smooth_stroke -> use_smooth_stroke: boolean Brush lags behind mouse and follows a smoother path
-Brush.use_space -> use_space: boolean Limit brush application to the distance specified by spacing
-Brush.use_spacing_pressure -> use_pressure_spacing: boolean Enable tablet pressure sensitivity for spacing
-Brush.use_strength_pressure -> use_pressure_strength: boolean Enable tablet pressure sensitivity for strength
-Brush.use_wrap -> use_wrap: boolean Enable torus wrapping while painting
-BuildModifier.randomize -> use_random_order: boolean Randomize the faces or edges during build
-Camera.panorama -> use_panorama: boolean Render the scene with a cylindrical camera for pseudo-fisheye lens effects
-Camera.show_limits -> show_limits: boolean Draw the clipping range and focus point on the camera
-Camera.show_mist -> show_mist: boolean Draw a line from the Camera to indicate the mist area
-Camera.show_name -> show_name: boolean Show the active Camera's name in Camera view
-Camera.show_passepartout -> show_passepartout: boolean Show a darkened overlay outside the image area in Camera view
-Camera.show_title_safe -> show_title_safe: boolean Show indicators for the title safe zone in Camera view
-CastModifier.from_radius -> use_radius_as_size: boolean Use radius as size of projection shape (0 = auto)
-CastModifier.use_transform -> use_transform: boolean Use object transform to control projection shape
-CastModifier.x -> use_x: boolean
-CastModifier.y -> use_y: boolean
-CastModifier.z -> use_z: boolean
-ChildOfConstraint.use_location_x -> use_location_x: boolean Use X Location of Parent
-ChildOfConstraint.use_location_y -> use_location_y: boolean Use Y Location of Parent
-ChildOfConstraint.use_location_z -> use_location_z: boolean Use Z Location of Parent
-ChildOfConstraint.use_rotation_x -> use_rotation_x: boolean Use X Rotation of Parent
-ChildOfConstraint.use_rotation_y -> use_rotation_y: boolean Use Y Rotation of Parent
-ChildOfConstraint.use_rotation_z -> use_rotation_z: boolean Use Z Rotation of Parent
-ChildOfConstraint.use_scale_x -> use_scale_x: boolean Use X Scale of Parent
-ChildOfConstraint.use_scale_y -> use_scale_y: boolean Use Y Scale of Parent
-ChildOfConstraint.use_scale_z -> use_scale_z: boolean Use Z Scale of Parent
-ClampToConstraint.cyclic -> use_cyclic: boolean Treat curve as cyclic curve (no clamping to curve bounding box
-ClothCollisionSettings.enable_collision -> use_collision: boolean Enable collisions with other objects
-ClothCollisionSettings.enable_self_collision -> use_self_collision: boolean Enable self collisions
-ClothSettings.pin_cloth -> use_pin_cloth: boolean Enable pinning of cloth vertices to other objects/positions
-ClothSettings.stiffness_scaling -> use_stiffness_scale: boolean If enabled, stiffness can be scaled along a weight painted vertex group
-CollisionSensor.collision_type -> use_material: boolean Use material instead of property
-CollisionSensor.pulse -> use_pulse: boolean Changes to the set of colliding objects generates pulse
-CollisionSettings.enabled -> use: boolean Enable this objects as a collider for physics systems
-CollisionSettings.kill_particles -> use_particle_kill: boolean Kill colliding particles
-CompositorNodeAlphaOver.convert_premul -> use_premultiply: boolean
-CompositorNodeBlur.bokeh -> use_bokeh: boolean
-CompositorNodeBlur.gamma -> use_gamma_correction: boolean
-CompositorNodeBlur.relative -> use_relative: boolean
-CompositorNodeColorSpill.unspill -> use_unspill: boolean Compensate all channels (diffenrently) by hand
-CompositorNodeCrop.crop_size -> use_crop_size: boolean Whether to crop the size of the input image
-CompositorNodeDBlur.wrap -> use_wrap: boolean
-CompositorNodeDefocus.gamma_correction -> use_gamma_correction: boolean Enable gamma correction before and after main process
-CompositorNodeDefocus.preview -> use_preview: boolean Enable sampling mode, useful for preview when using low samplecounts
-CompositorNodeDefocus.use_zbuffer -> use_zbuffer: boolean Disable when using an image as input instead of actual zbuffer (auto enabled if node not image based, eg. time node)
-CompositorNodeGlare.rotate_45 -> use_rotate_45: boolean Simple star filter: add 45 degree rotation offset
-CompositorNodeImage.auto_refresh -> use_auto_refresh: boolean
-CompositorNodeImage.cyclic -> use_cyclic: boolean
-CompositorNodeInvert.alpha -> invert_alpha: boolean
-CompositorNodeInvert.rgb -> invert_rgb: boolean
-CompositorNodeLensdist.fit -> use_fit: boolean For positive distortion factor only: scale image such that black areas are not visible
-CompositorNodeLensdist.jitter -> use_jitter: boolean Enable/disable jittering; faster, but also noisier
-CompositorNodeLensdist.projector -> use_projector: boolean Enable/disable projector mode. Effect is applied in horizontal direction only
-CompositorNodeMapValue.use_max -> use_max: boolean
-CompositorNodeMapValue.use_min -> use_min: boolean
-CompositorNodeMixRGB.alpha -> use_alpha: boolean Include alpha of second input in this operation
-CompositorNodeOutputFile.exr_half -> use_exr_half: boolean
-CompositorNodeVecBlur.curved -> use_curved: boolean Interpolate between frames in a bezier curve, rather than linearly
-Constraint.active -> active: boolean Constraint is the one being edited
-Constraint.disabled -> is_valid: boolean, (read-only) Constraint has invalid settings and will not be evaluated
-Constraint.expanded -> show_expanded: boolean Constraint's panel is expanded in UI
-Constraint.proxy_local -> is_proxy_local: boolean Constraint was added in this proxy instance (i.e. did not belong to source Armature)
-ConstraintActuator.detect_material -> use_material_detect: boolean Detect material instead of property
-ConstraintActuator.fh_normal -> use_fh_normal: boolean Add a horizontal spring force on slopes
-ConstraintActuator.fh_paralel_axis -> use_fh_paralel_axis: boolean Keep object axis parallel to normal
-ConstraintActuator.force_distance -> use_force_distance: boolean Force distance of object to point of impact of ray
-ConstraintActuator.local -> use_local: boolean Set ray along object's axis or global axis
-ConstraintActuator.normal -> use_normal: boolean Set object axis along (local axis) or parallel (global axis) to the normal at hit position
-ConstraintActuator.persistent -> use_persistent: boolean Persistent actuator: stays active even if ray does not reach target
-ControlFluidSettings.active -> use: boolean Object contributes to the fluid simulation
-ControlFluidSettings.reverse_frames -> use_reverse_frames: boolean Reverse control object movement
-Controller.expanded -> show_expanded: boolean Set controller expanded in the user interface
-Controller.priority -> use_priority: boolean Mark controller for execution before all non-marked controllers (good for startup scripts)
-Controller.state -> states: boolean, (read-only) Set Controller state index (1 to 30)
-CopyLocationConstraint.invert_x -> invert_x: boolean Invert the X location
-CopyLocationConstraint.invert_y -> invert_y: boolean Invert the Y location
-CopyLocationConstraint.invert_z -> invert_z: boolean Invert the Z location
-CopyLocationConstraint.use_offset -> use_offset: boolean Add original location into copied location
-CopyLocationConstraint.use_x -> use_x: boolean Copy the target's X location
-CopyLocationConstraint.use_y -> use_y: boolean Copy the target's Y location
-CopyLocationConstraint.use_z -> use_z: boolean Copy the target's Z location
-CopyRotationConstraint.invert_x -> invert_x: boolean Invert the X rotation
-CopyRotationConstraint.invert_y -> invert_y: boolean Invert the Y rotation
-CopyRotationConstraint.invert_z -> invert_z: boolean Invert the Z rotation
-CopyRotationConstraint.use_offset -> use_offset: boolean Add original rotation into copied rotation
-CopyRotationConstraint.use_x -> use_x: boolean Copy the target's X rotation
-CopyRotationConstraint.use_y -> use_y: boolean Copy the target's Y rotation
-CopyRotationConstraint.use_z -> use_z: boolean Copy the target's Z rotation
-CopyScaleConstraint.use_offset -> use_offset: boolean Add original scale into copied scale
-CopyScaleConstraint.use_x -> use_x: boolean Copy the target's X scale
-CopyScaleConstraint.use_y -> use_y: boolean Copy the target's Y scale
-CopyScaleConstraint.use_z -> use_z: boolean Copy the target's Z scale
-Curve.auto_texspace -> use_auto_texspace: boolean Adjusts active object's texture space automatically when transforming object
-Curve.back -> use_fill_back: boolean Draw filled back for extruded/beveled curves
-Curve.draw_handles -> show_handles: boolean Display bezier handles in editmode
-Curve.draw_normals -> show_normals: boolean Display 3D curve normals in editmode
-Curve.front -> use_fill_front: boolean Draw filled front for extruded/beveled curves
-Curve.map_along_length -> use_map_along_length: boolean Generate texture mapping coordinates following the curve direction, rather than the local bounding box
-Curve.use_deform_fill -> use_fill_deform: boolean Fill curve after applying deformation
-Curve.use_path -> use_path: boolean Enable the curve to become a translation path
-Curve.use_path_follow -> use_path_follow: boolean Make curve path children to rotate along the path
-Curve.use_radius -> use_radius: boolean Option for paths: apply the curve radius with path following it and deforming
-Curve.use_stretch -> use_stretch: boolean Option for curve-deform: makes deformed child to stretch along entire path
-Curve.use_time_offset -> use_time_offset: boolean Children will use Time Offset value as path distance offset
-
-CurveMapping.clip -> use_clip: boolean Force the curve view to fit a defined boundary
-DelaySensor.repeat -> use_repeat: boolean Toggle repeat option. If selected, the sensor restarts after Delay+Dur logic tics
-DomainFluidSettings.generate_speed_vectors -> use_speed_vectors: boolean Generate speed vectors for vector blur
-DomainFluidSettings.override_time -> use_time_override: boolean Use a custom start and end time (in seconds) instead of the scene's timeline
-DomainFluidSettings.reverse_frames -> use_reverse_frames: boolean Reverse fluid frames
-NEGATE * DopeSheet.collapse_summary -> show_expanded_summary: boolean Collapse summary when shown, so all other channels get hidden. (DopeSheet Editors Only)
-DopeSheet.display_armature -> show_armatures: boolean Include visualization of Armature related Animation data
-DopeSheet.display_camera -> show_cameras: boolean Include visualization of Camera related Animation data
-DopeSheet.display_curve -> show_curves: boolean Include visualization of Curve related Animation data
-DopeSheet.display_lamp -> show_lamps: boolean Include visualization of Lamp related Animation data
-DopeSheet.display_material -> show_materials: boolean Include visualization of Material related Animation data
-DopeSheet.display_mesh -> show_meshes: boolean Include visualization of Mesh related Animation data
-DopeSheet.display_metaball -> show_metaballs: boolean Include visualization of Metaball related Animation data
-DopeSheet.display_node -> show_nodes: boolean Include visualization of Node related Animation data
-DopeSheet.display_particle -> show_particles: boolean Include visualization of Particle related Animation data
-DopeSheet.display_scene -> show_scenes: boolean Include visualization of Scene related Animation data
-DopeSheet.display_shapekeys -> show_shapekeys: boolean Include visualization of ShapeKey related Animation data
-DopeSheet.display_summary -> show_summary: boolean Display an additional 'summary' line. (DopeSheet Editors only)
-DopeSheet.display_texture -> show_textures: boolean Include visualization of Texture related Animation data
-DopeSheet.display_transforms -> show_transforms: boolean Include visualization of Object-level Animation data (mostly Transforms)
-DopeSheet.display_world -> show_worlds: boolean Include visualization of World related Animation data
-DopeSheet.include_missing_nla -> show_missing_nla: boolean Include Animation Data blocks with no NLA data. (NLA Editor only)
-DopeSheet.only_group_objects -> show_only_group_objects: boolean Only include channels from Objects in the specified Group
-DopeSheet.only_selected -> show_only_selected: boolean Only include channels relating to selected objects and data
-Driver.invalid -> is_valid: boolean Driver could not be evaluated in past, so should be skipped
-Driver.show_debug_info -> show_debug_info: boolean Show intermediate values for the driver calculations to allow debugging of drivers
-DriverTarget.use_local_space_transforms -> use_local_space_transform: boolean Use transforms in Local Space (as opposed to the worldspace default)
-EdgeSplitModifier.use_edge_angle -> use_edge_angle: boolean Split edges with high angle between faces
-EdgeSplitModifier.use_sharp -> use_edge_sharp: boolean Split edges that are marked as sharp
-EditBone.connected -> use_connect: boolean When bone has a parent, bone's head is struck to the parent's tail
-EditBone.cyclic_offset -> use_cyclic_offset: boolean When bone doesn't have a parent, it receives cyclic offset effects
-EditBone.deform -> use_deform: boolean Bone does not deform any geometry
-EditBone.draw_wire -> show_wire: boolean Bone is always drawn as Wireframe regardless of viewport draw mode. Useful for non-obstructive custom bone shapes
-
-EditBone.hinge -> use_hinge: boolean Bone inherits rotation or scale from parent bone
-EditBone.inherit_scale -> use_inherit_scale: boolean Bone inherits scaling from parent bone
-EditBone.layer -> layers: boolean Layers bone exists in
-EditBone.local_location -> use_local_location: boolean Bone location is set in local space
-EditBone.multiply_vertexgroup_with_envelope -> use_envelope_multiply: boolean When deforming bone, multiply effects of Vertex Group weights with Envelope influence
-
-EditObjectActuator.enable_3d_tracking -> use_3d_tracking: boolean Enable 3D tracking
-EditObjectActuator.local_angular_velocity -> use_local_angular_velocity: boolean Apply the rotation locally
-EditObjectActuator.local_linear_velocity -> use_local_linear_velocity: boolean Apply the transformation locally
-EditObjectActuator.replace_display_mesh -> use_replace_display_mesh: boolean Replace the display mesh
-EditObjectActuator.replace_physics_mesh -> use_replace_physics_mesh: boolean Replace the physics mesh (triangle bounds only - compound shapes not supported)
-EffectSequence.convert_float -> use_float: boolean Convert input to float data
-EffectSequence.de_interlace -> use_deinterlace: boolean For video movies to remove fields
-EffectSequence.flip_x -> use_flip_x: boolean Flip on the X axis
-EffectSequence.flip_y -> use_flip_y: boolean Flip on the Y axis
-EffectSequence.premultiply -> use_premultiply: boolean Convert RGB from key alpha to premultiplied alpha
-EffectSequence.proxy_custom_directory -> use_proxy_custom_directory: boolean Use a custom directory to store data
-EffectSequence.proxy_custom_file -> use_proxy_custom_file: boolean Use a custom file to read proxy data from
-EffectSequence.reverse_frames -> use_reverse_frames: boolean Reverse frame order
-EffectSequence.use_color_balance -> use_color_balance: boolean (3-Way color correction) on input
-EffectSequence.use_crop -> use_crop: boolean Crop image before processing
-EffectSequence.use_proxy -> use_proxy: boolean Use a preview proxy for this strip
-EffectSequence.use_translation -> use_translation: boolean Translate image before processing
-EffectorWeights.do_growing_hair -> apply_to_hair_growing: boolean Use force fields when growing hair
-EnvironmentMap.ignore_layers -> layers_ignore: boolean Hide objects on these layers when generating the Environment Map
-EnvironmentMapTexture.use_filter_size_min -> use_minimum_filter_size: boolean Use Filter Size as a minimal filter value in pixels
-EnvironmentMapTexture.mipmap -> use_mipmap: boolean Uses auto-generated MIP maps for the image
-EnvironmentMapTexture.mipmap_gauss -> use_mipmap_gauss: boolean Uses Gauss filter to sample down MIP maps
-Event.alt -> is_pressed_alt: boolean, (read-only) True when the Alt/Option key is held
-Event.ctrl -> is_pressed_ctrl: boolean, (read-only) True when the Ctrl key is held
-Event.oskey -> is_pressed_cmd: boolean, (read-only) True when the Cmd key is held
-Event.shift -> is_pressed_shift: boolean, (read-only) True when the Shift key is held
-ExplodeModifier.alive -> show_alive: boolean Show mesh when particles are alive
-ExplodeModifier.dead -> show_dead: boolean Show mesh when particles are dead
-ExplodeModifier.size -> use_size: boolean Use particle size for the shrapnel
-ExplodeModifier.split_edges -> use_edge_split: boolean Split face edges for nicer shrapnel
-ExplodeModifier.unborn -> show_unborn: boolean Show mesh when particles are unborn
-FCurve.auto_clamped_handles -> use_auto_handle_clamp: boolean All auto-handles for F-Curve are clamped
-FModifier.active -> active: boolean F-Curve Modifier is the one being edited
-NEGATE * FModifier.disabled -> use: boolean, (read-only) F-Curve Modifier has invalid settings and will not be evaluated
-FModifier.expanded -> show_expanded: boolean F-Curve Modifier's panel is expanded in UI
-FModifierFunctionGenerator.additive -> use_additive: boolean Values generated by this modifier are applied on top of the existing values instead of overwriting them
-FModifierGenerator.additive -> use_additive: boolean Values generated by this modifier are applied on top of the existing values instead of overwriting them
-FModifierLimits.use_maximum_x -> use_max_x: boolean Use the maximum X value
-FModifierLimits.use_maximum_y -> use_max_y: boolean Use the maximum Y value
-FModifierLimits.use_minimum_x -> use_min_x: boolean Use the minimum X value
-FModifierLimits.use_minimum_y -> use_min_y: boolean Use the minimum Y value
-FModifierStepped.use_frame_end -> use_frame_end: boolean Restrict modifier to only act before its 'end' frame
-FModifierStepped.use_frame_start -> use_frame_start: boolean Restrict modifier to only act after its 'start' frame
-FcurveActuator.add -> use_add: boolean F-Curve is added to the current loc/rot/scale in global or local coordinate according to Local flag
-FcurveActuator.child -> apply_to_children: boolean Update F-Curve on all children Objects as well
-FcurveActuator.force -> use_force: boolean Apply F-Curve as a global or local force depending on the local option (dynamic objects only)
-FcurveActuator.local -> use_local: boolean Let the F-Curve act in local coordinates, used in Force and Add mode
-FieldSettings.do_absorption -> use_absorption: boolean Force gets absorbed by collision objects
-FieldSettings.do_location -> apply_to_location: boolean Effect particles' location
-FieldSettings.do_rotation -> apply_to_rotation: boolean Effect particles' dynamic rotation
-FieldSettings.force_2d -> use_2d_force: boolean Apply force only in 2d
-FieldSettings.global_coordinates -> use_global_coordinates: boolean Use effector/global coordinates for turbulence
-FieldSettings.guide_path_add -> use_guide_path_add: boolean Based on distance/falloff it adds a portion of the entire path
-FieldSettings.multiple_springs -> use_multiple_springs: boolean Every point is effected by multiple springs
-FieldSettings.root_coordinates -> use_root_coordinates: boolean Texture coordinates from root particle locations
-FieldSettings.use_coordinates -> use_object_coordinates: boolean Use object/global coordinates for texture
-FieldSettings.use_guide_path_weight -> use_guide_path_weight: boolean Use curve weights to influence the particle influence along the curve
-FieldSettings.use_max_distance -> use_max_distance: boolean Use a maximum distance for the field to work
-FieldSettings.use_min_distance -> use_min_distance: boolean Use a minimum distance for the field's fall-off
-FieldSettings.use_radial_max -> use_radial_max: boolean Use a maximum radial distance for the field to work
-FieldSettings.use_radial_min -> use_radial_min: boolean Use a minimum radial distance for the field's fall-off
-FileSelectParams.do_filter -> use_filter: boolean Enable filtering of files
-FileSelectParams.filter_blender -> use_filter_blender: boolean Show .blend files
-FileSelectParams.filter_folder -> use_filter_folder: boolean Show folders
-FileSelectParams.filter_font -> use_filter_font: boolean Show font files
-FileSelectParams.filter_image -> use_filter_image: boolean Show image files
-FileSelectParams.filter_movie -> use_filter_movie: boolean Show movie files
-FileSelectParams.filter_script -> use_filter_script: boolean Show script files
-FileSelectParams.filter_sound -> use_filter_sound: boolean Show sound files
-FileSelectParams.filter_text -> use_filter_text: boolean Show text files
-NEGATE * FileSelectParams.hide_dot -> show_hidden: boolean Hide hidden dot files
-Filter2DActuator.enable_motion_blur -> use_motion_blur: boolean Enable/Disable Motion Blur
-FloorConstraint.sticky -> use_sticky: boolean Immobilize object while constrained
-FloorConstraint.use_rotation -> use_rotation: boolean Use the target's rotation to determine floor
-FluidFluidSettings.active -> use: boolean Object contributes to the fluid simulation
-FluidFluidSettings.export_animated_mesh -> use_animated_mesh: boolean Export this mesh as an animated one. Slower, only use if really necessary (e.g. armatures or parented objects), animated pos/rot/scale IPOs do not require it
-FollowPathConstraint.use_curve_follow -> use_curve_follow: boolean Object will follow the heading and banking of the curve
-FollowPathConstraint.use_curve_radius -> use_curve_radius: boolean Objects scale by the curve radius
-FollowPathConstraint.use_fixed_position -> use_fixed_location: boolean Object will stay locked to a single point somewhere along the length of the curve regardless of time
-Function.registered -> is_registered: boolean, (read-only) Function is registered as callback as part of type registration
-Function.registered_optional -> is_registered_optional: boolean, (read-only) Function is optionally registered as callback part of type registration
-GPencilFrame.paint_lock -> is_edited: boolean Frame is being edited (painted on)
-GPencilLayer.active -> active: boolean Set active layer for editing
-GPencilLayer.frame_lock -> lock_frame: boolean Lock current frame displayed by layer
-GPencilLayer.hide -> hide: boolean Set layer Visibility
-
-GPencilLayer.show_points -> show_points: boolean Draw the points which make up the strokes (for debugging purposes)
-GPencilLayer.use_onion_skinning -> use_onion_skinning: boolean Ghost frames on either side of frame
-GameBooleanProperty.value -> value: boolean Property value
-GameObjectSettings.actor -> use_actor: boolean Object is detected by the Near and Radar sensor
-GameObjectSettings.all_states -> use_all_states: boolean Set all state bits
-GameObjectSettings.anisotropic_friction -> use_anisotropic_friction: boolean Enable anisotropic friction
-GameObjectSettings.collision_compound -> use_collision_compound: boolean Add children to form a compound collision object
-GameObjectSettings.debug_state -> show_debug_state: boolean Print state debug info in the game engine
-GameObjectSettings.ghost -> use_ghost: boolean Object does not restitute collisions, like a ghost
-GameObjectSettings.initial_state -> states_initial: boolean Initial state when the game starts
-GameObjectSettings.lock_x_axis -> lock_location_x: boolean Disable simulation of linear motion along the X axis
-GameObjectSettings.lock_x_rot_axis -> lock_rotation_x: boolean Disable simulation of angular motion along the X axis
-GameObjectSettings.lock_y_axis -> lock_location_y: boolean Disable simulation of linear motion along the Y axis
-GameObjectSettings.lock_y_rot_axis -> lock_rotation_y: boolean Disable simulation of angular motion along the Y axis
-GameObjectSettings.lock_z_axis -> lock_location_z: boolean Disable simulation of linear motion along the Z axis
-GameObjectSettings.lock_z_rot_axis -> lock_rotation_z: boolean Disable simulation of angular motion along the Z axis
-GameObjectSettings.material_physics -> use_material_physics: boolean Use physics settings in materials
-NEGATE * GameObjectSettings.no_sleeping -> use_sleep: boolean Disable auto (de)activation in physics simulation
-GameObjectSettings.rotate_from_normal -> use_rotate_from_normal: boolean Use face normal to rotate object, so that it points away from the surface
-GameObjectSettings.show_actuators -> show_actuators: boolean Shows actuators for this object in the user interface
-GameObjectSettings.show_controllers -> show_controllers: boolean Shows controllers for this object in the user interface
-GameObjectSettings.show_sensors -> show_sensors: boolean Shows sensors for this object in the user interface
-GameObjectSettings.show_state_panel -> show_state_panel: boolean Show state panel
-GameObjectSettings.use_activity_culling -> use_activity_culling: boolean Disable simulation of angular motion along the Z axis
-GameObjectSettings.use_collision_bounds -> use_collision_bounds: boolean Specify a collision bounds type other than the default
-GameObjectSettings.used_state -> states_used: boolean, (read-only) States which are being used by controllers
-GameObjectSettings.visible_state -> states_visible: boolean State determining which controllers are displayed
-GameProperty.debug -> show_debug: boolean Print debug information for this property
-GameSoftBodySettings.bending_const -> use_bending_constraints: boolean Enable bending constraints
-GameSoftBodySettings.cluster_rigid_to_softbody -> use_cluster_rigid_to_softbody: boolean Enable cluster collision between soft and rigid body
-GameSoftBodySettings.cluster_soft_to_softbody -> use_cluster_soft_to_softbody: boolean Enable cluster collision between soft and soft body
-GameSoftBodySettings.shape_match -> use_shape_match: boolean Enable soft body shape matching goal
-GlowSequence.only_boost -> use_only_boost: boolean Show the glow buffer only
-GreasePencil.use_stroke_endpoints -> use_stroke_endpoints: boolean Only use the first and last parts of the stroke for snapping
-Group.layer -> layers: boolean Layers visible when this groups is instanced as a dupli
-ID.fake_user -> use_fake_user: boolean Saves this datablock even if it has no users
-ID.tag -> tag: boolean Tools can use this to tag data, (initial state is undefined)
-Image.animated -> use_animation: boolean Use as animated texture in the game engine
-Image.clamp_x -> use_clamp_x: boolean Disable texture repeating horizontally
-Image.clamp_y -> use_clamp_y: boolean Disable texture repeating vertically
-Image.dirty -> is_dirty: boolean, (read-only) Image has changed and is not saved
-Image.fields -> use_fields: boolean Use fields of the image
-Image.has_data -> has_data: boolean, (read-only) True if this image has data
-Image.premultiply -> use_premultiply: boolean Convert RGB from key alpha to premultiplied alpha
-Image.tiles -> use_tiles: boolean Use of tilemode for faces (default shift-LMB to pick the tile for selected faces)
-ImagePaint.invert_stencil -> invert_stencil: boolean Invert the stencil layer
-ImagePaint.show_brush -> show_brush: boolean Enables brush shape while not drawing
-ImagePaint.show_brush_draw -> show_brush_draw: boolean Enables brush shape while drawing
-ImagePaint.use_backface_cull -> use_backface_culling: boolean Ignore faces pointing away from the view (faster)
-ImagePaint.use_clone_layer -> use_clone_layer: boolean Use another UV layer as clone source, otherwise use 3D the cursor as the source
-ImagePaint.use_normal_falloff -> use_normal_falloff: boolean Paint most on faces pointing towards the view
-ImagePaint.use_occlude -> use_occlude: boolean Only paint onto the faces directly under the brush (slower)
-ImagePaint.use_projection -> use_projection: boolean Use projection painting for improved consistency in the brush strokes
-ImagePaint.use_stencil_layer -> use_stencil_layer: boolean Set the mask layer from the UV layer buttons
-ImageSequence.convert_float -> use_float: boolean Convert input to float data
-ImageSequence.de_interlace -> use_deinterlace: boolean For video movies to remove fields
-ImageSequence.flip_x -> use_flip_x: boolean Flip on the X axis
-ImageSequence.flip_y -> use_flip_y: boolean Flip on the Y axis
-ImageSequence.premultiply -> use_premultiply: boolean Convert RGB from key alpha to premultiplied alpha
-ImageSequence.proxy_custom_directory -> use_proxy_custom_directory: boolean Use a custom directory to store data
-ImageSequence.proxy_custom_file -> use_proxy_custom_file: boolean Use a custom file to read proxy data from
-ImageSequence.reverse_frames -> use_reverse_frames: boolean Reverse frame order
-ImageSequence.use_color_balance -> use_color_balance: boolean (3-Way color correction) on input
-ImageSequence.use_crop -> use_crop: boolean Crop image before processing
-ImageSequence.use_proxy -> use_proxy: boolean Use a preview proxy for this strip
-ImageSequence.use_translation -> use_translation: boolean Translate image before processing
-ImageTexture.calculate_alpha -> use_calculate_alpha: boolean Calculates an alpha channel based on RGB values in the image
-ImageTexture.checker_even -> use_checker_even: boolean Sets even checker tiles
-ImageTexture.checker_odd -> use_checker_odd: boolean Sets odd checker tiles
-ImageTexture.filter_size_minimum -> use_minimum_filter_size: boolean Use Filter Size as a minimal filter value in pixels
-ImageTexture.flip_axis -> use_flip_axis: boolean Flips the texture's X and Y axis
-ImageTexture.interpolation -> use_interpolation: boolean Interpolates pixels using Area filter
-ImageTexture.invert_alpha -> invert_alpha: boolean Inverts all the alpha values in the image
-ImageTexture.mipmap -> use_mipmap: boolean Uses auto-generated MIP maps for the image
-ImageTexture.mipmap_gauss -> use_mipmap_gauss: boolean Uses Gauss filter to sample down MIP maps
-ImageTexture.mirror_x -> use_mirror_x: boolean Mirrors the image repetition on the X direction
-ImageTexture.mirror_y -> use_mirror_y: boolean Mirrors the image repetition on the Y direction
-ImageTexture.normal_map -> use_normal_map: boolean Uses image RGB values for normal mapping
-ImageTexture.use_alpha -> use_alpha: boolean Uses the alpha channel information in the image
-ImageUser.auto_refresh -> use_auto_refresh: boolean Always refresh image on frame changes
-ImageUser.cyclic -> use_cyclic: boolean Cycle the images in the movie
-InflowFluidSettings.active -> use: boolean Object contributes to the fluid simulation
-InflowFluidSettings.export_animated_mesh -> use_animated_mesh: boolean Export this mesh as an animated one. Slower, only use if really necessary (e.g. armatures or parented objects), animated pos/rot/scale IPOs do not require it
-InflowFluidSettings.local_coordinates -> use_local_coordinates: boolean Use local coordinates for inflow. (e.g. for rotating objects)
-Itasc.auto_step -> use_auto_step: boolean Automatically determine the optimal number of steps for best performance/accuracy trade off
-JoystickSensor.all_events -> use_all_events: boolean Triggered by all events on this joysticks current type (axis/button/hat)
-Key.relative -> use_relative: boolean Makes shape keys relative
-KeyConfig.user_defined -> is_user_defined: boolean, (read-only) Indicates that a keyconfig was defined by the user
-KeyMap.children_expanded -> show_expanded_children: boolean Children expanded in the user interface
-KeyMap.items_expanded -> show_expanded_items: boolean Expanded in the user interface
-KeyMap.modal -> is_modal: boolean, (read-only) Indicates that a keymap is used for translate modal events for an operator
-KeyMap.user_defined -> is_user_defined: boolean Keymap is defined by the user
-KeyMapItem.active -> active: boolean Activate or deactivate item
-KeyMapItem.alt -> pressed_alt: boolean Alt key pressed
-KeyMapItem.any -> pressed_any: boolean Any modifier keys pressed
-KeyMapItem.ctrl -> pressed_ctrl: boolean Control key pressed
-KeyMapItem.expanded -> show_expanded: boolean Show key map event and property details in the user interface
-KeyMapItem.oskey -> pressed_cmd: boolean Operating system key pressed
-KeyMapItem.shift -> pressed_shift: boolean Shift key pressed
-KeyboardSensor.all_keys -> use_all_keys: boolean Trigger this sensor on any keystroke
-KeyingSet.absolute -> use_absolute: boolean Keying Set defines specific paths/settings to be keyframed (i.e. is not reliant on context info)
-KeyingSet.insertkey_needed -> use_insertkey_needed: boolean Only insert keyframes where they're needed in the relevant F-Curves
-KeyingSet.insertkey_visual -> use_insertkey_visual: boolean Insert keyframes based on 'visual transforms'
-KeyingSet.insertkey_xyz_to_rgb -> use_insertkey_xyz_to_rgb: boolean Color for newly added transformation F-Curves (Location, Rotation, Scale) and also Color is based on the transform axis
-KeyingSetInfo.insertkey_needed -> use_insertkey_needed: boolean Only insert keyframes where they're needed in the relevant F-Curves
-KeyingSetInfo.insertkey_visual -> use_insertkey_visual: boolean Insert keyframes based on 'visual transforms'
-KeyingSetInfo.insertkey_xyz_to_rgb -> use_insertkey_xyz_to_rgb: boolean Color for newly added transformation F-Curves (Location, Rotation, Scale) and also Color is based on the transform axis
-KeyingSetPath.entire_array -> use_entire_array: boolean When an 'array/vector' type is chosen (Location, Rotation, Color, etc.), entire array is to be used
-KeyingSetPath.insertkey_needed -> use_insertkey_needed: boolean Only insert keyframes where they're needed in the relevant F-Curves
-KeyingSetPath.insertkey_visual -> use_insertkey_visual: boolean Insert keyframes based on 'visual transforms'
-KeyingSetPath.insertkey_xyz_to_rgb -> use_insertkey_xyz_to_rgb: boolean Color for newly added transformation F-Curves (Location, Rotation, Scale) and also Color is based on the transform axis
-KinematicConstraint.pos_lock_x -> lock_location_x: boolean Constraint position along X axis
-KinematicConstraint.pos_lock_y -> lock_location_y: boolean Constraint position along Y axis
-KinematicConstraint.pos_lock_z -> lock_location_z: boolean Constraint position along Z axis
-KinematicConstraint.rot_lock_x -> lock_rotation_x: boolean Constraint rotation along X axis
-KinematicConstraint.rot_lock_y -> lock_rotation_y: boolean Constraint rotation along Y axis
-KinematicConstraint.rot_lock_z -> lock_rotation_z: boolean Constraint rotation along Z axis
-KinematicConstraint.use_position -> use_location: boolean Chain follows position of target
-KinematicConstraint.use_rotation -> use_rotation: boolean Chain follows rotation of target
-KinematicConstraint.use_stretch -> use_stretch: boolean Enable IK Stretching
-KinematicConstraint.use_tail -> use_tail: boolean Include bone's tail as last element in chain
-KinematicConstraint.use_target -> use_target: boolean Disable for targetless IK
-Lamp.diffuse -> use_diffuse: boolean Lamp does diffuse shading
-Lamp.layer -> use_own_layer: boolean Illuminates objects only on the same layer the lamp is on
-Lamp.negative -> use_negative: boolean Lamp casts negative light
-Lamp.specular -> use_specular: boolean Lamp creates specular highlights
-LampSkySettings.use_atmosphere -> use_atmosphere: boolean Apply sun effect on atmosphere
-LampSkySettings.use_sky -> use_sky: boolean Apply sun effect on sky
-LampTextureSlot.map_color -> use_map_color: boolean Lets the texture affect the basic color of the lamp
-LampTextureSlot.map_shadow -> use_map_shadow: boolean Lets the texture affect the shadow color of the lamp
-Lattice.outside -> use_outside: boolean Only draw, and take into account, the outer vertices
-LimitLocationConstraint.limit_transform -> limit_transform: boolean Transforms are affected by this constraint as well
-LimitLocationConstraint.use_maximum_x -> use_max_x: boolean Use the maximum X value
-LimitLocationConstraint.use_maximum_y -> use_max_y: boolean Use the maximum Y value
-LimitLocationConstraint.use_maximum_z -> use_max_z: boolean Use the maximum Z value
-LimitLocationConstraint.use_minimum_x -> use_min_x: boolean Use the minimum X value
-LimitLocationConstraint.use_minimum_y -> use_min_y: boolean Use the minimum Y value
-LimitLocationConstraint.use_minimum_z -> use_min_z: boolean Use the minimum Z value
-LimitRotationConstraint.limit_transform -> limit_transform: boolean Transforms are affected by this constraint as well
-LimitRotationConstraint.use_limit_x -> use_limit_x: boolean Use the minimum X value
-LimitRotationConstraint.use_limit_y -> use_limit_y: boolean Use the minimum Y value
-LimitRotationConstraint.use_limit_z -> use_limit_z: boolean Use the minimum Z value
-LimitScaleConstraint.limit_transform -> limit_transform: boolean Transforms are affected by this constraint as well
-LimitScaleConstraint.use_maximum_x -> use_max_x: boolean Use the maximum X value
-LimitScaleConstraint.use_maximum_y -> use_max_y: boolean Use the maximum Y value
-LimitScaleConstraint.use_maximum_z -> use_max_z: boolean Use the maximum Z value
-LimitScaleConstraint.use_minimum_x -> use_min_x: boolean Use the minimum X value
-LimitScaleConstraint.use_minimum_y -> use_min_y: boolean Use the minimum Y value
-LimitScaleConstraint.use_minimum_z -> use_min_z: boolean Use the minimum Z value
-Main.debug -> show_debug: boolean Print debugging information in console
-Main.file_is_saved -> is_saved: boolean, (read-only) Has the current session been saved to disk as a .blend file
-MaskModifier.invert -> invert_vertex_group: boolean Use vertices that are not part of region defined
-Material.cast_approximate -> use_cast_approximate: boolean Allow this material to cast shadows when using approximate ambient occlusion.
-Material.cast_buffer_shadows -> use_cast_buffer_shadows: boolean Allow this material to cast shadows from shadow buffer lamps
-Material.cast_shadows_only -> use_cast_shadows_only: boolean Makes objects with this material appear invisible, only casting shadows (not rendered)
-Material.cubic -> use_cubic: boolean Use cubic interpolation for diffuse values, for smoother transitions
-NEGATE * Material.exclude_mist -> use_mist: boolean Excludes this material from mist effects (in world settings)
-Material.face_texture -> use_face_texture: boolean Replaces the object's base color with color from face assigned image textures
-Material.face_texture_alpha -> use_face_texture_alpha: boolean Replaces the object's base alpha value with alpha from face assigned image textures
-Material.full_oversampling -> use_full_oversampling: boolean Force this material to render full shading/textures for all anti-aliasing samples
-Material.invert_z -> invert_z: boolean Renders material's faces with an inverted Z buffer (scanline only)
-Material.light_group_exclusive -> use_light_group_exclusive: boolean Material uses the light group exclusively - these lamps are excluded from other scene lighting
-Material.object_color -> use_object_color: boolean Modulate the result with a per-object color
-Material.only_shadow -> use_only_shadow: boolean Renders shadows as the material's alpha value, making materials transparent except for shadowed areas
-Material.ray_shadow_bias -> use_ray_shadow_bias: boolean Prevents raytraced shadow errors on surfaces with smooth shaded normals (terminator problem)
-Material.receive_transparent_shadows -> use_transparent_shadows: boolean Allow this object to receive transparent shadows casted through other objects
-Material.shadeless -> use_shadeless: boolean Makes this material insensitive to light or shadow
-Material.shadows -> use_shadows: boolean Allows this material to receive shadows
-Material.tangent_shading -> use_tangent_shading: boolean Use the material's tangent vector instead of the normal for shading - for anisotropic shading effects
-Material.traceable -> use_traceable: boolean Include this material and geometry that uses it in ray tracing calculations
-Material.transparency -> use_transparency: boolean Render material as transparent
-Material.use_diffuse_ramp -> use_diffuse_ramp: boolean Toggle diffuse ramp operations
-Material.use_nodes -> use_nodes: boolean Use shader nodes to render the material
-Material.use_sky -> use_sky: boolean Renders this material with zero alpha, with sky background in place (scanline only)
-Material.use_specular_ramp -> use_specular_ramp: boolean Toggle specular ramp operations
-Material.use_textures -> use_textures: boolean Enable/Disable each texture
-Material.vertex_color_light -> use_vertex_color_light: boolean Add vertex colors as additional lighting
-Material.vertex_color_paint -> use_vertex_color_paint: boolean Replaces object base color with vertex colors (multiplies with 'texture face' face assigned textures)
-MaterialHalo.flare_mode -> use_flare_mode: boolean Renders halo as a lensflare
-MaterialHalo.lines -> use_lines: boolean Renders star shaped lines over halo
-MaterialHalo.ring -> use_ring: boolean Renders rings over halo
-MaterialHalo.shaded -> use_shading: boolean Lets halo receive light and shadows from external objects
-MaterialHalo.soft -> use_soft: boolean Softens the edges of halos at intersections with other geometry
-MaterialHalo.star -> use_star: boolean Renders halo as a star
-MaterialHalo.texture -> use_texture: boolean Gives halo a texture
-MaterialHalo.vertex_normal -> use_vertex_normal: boolean Uses the vertex normal to specify the dimension of the halo
-MaterialHalo.xalpha -> use_extreme_alpha: boolean Uses extreme alpha
-MaterialPhysics.align_to_normal -> use_align_to_normal: boolean Align dynamic game objects along the surface normal, when inside the physics distance area
-MaterialRaytraceMirror.enabled -> use: boolean Enable raytraced reflections
-MaterialStrand.blender_units -> use_blender_units: boolean Use Blender units for widths instead of pixels
-MaterialStrand.surface_diffuse -> use_surface_diffuse: boolean Make diffuse shading more similar to shading the surface
-MaterialStrand.tangent_shading -> use_tangent_shading: boolean Uses direction of strands as normal for tangent-shading
-MaterialSubsurfaceScattering.enabled -> use: boolean Enable diffuse subsurface scatting effects in a material
-MaterialTextureSlot.enabled -> use: boolean Enable this material texture slot
-MaterialTextureSlot.from_dupli -> use_from_dupli: boolean Dupli's instanced from verts, faces or particles, inherit texture coordinate from their parent
-MaterialTextureSlot.from_original -> use_from_original: boolean Dupli's derive their object coordinates from the original objects transformation
-MaterialTextureSlot.map_alpha -> use_map_alpha: boolean Causes the texture to affect the alpha value
-MaterialTextureSlot.map_ambient -> use_map_ambient: boolean Causes the texture to affect the value of ambient
-MaterialTextureSlot.map_colordiff -> use_map_colordiff: boolean Causes the texture to affect basic color of the material
-MaterialTextureSlot.map_coloremission -> use_map_coloremission: boolean Causes the texture to affect the color of emission
-MaterialTextureSlot.map_colorreflection -> use_map_colorreflection: boolean Causes the texture to affect the color of scattered light
-MaterialTextureSlot.map_colorspec -> use_map_colorspec: boolean Causes the texture to affect the specularity color
-MaterialTextureSlot.map_colortransmission -> use_map_colortransmission: boolean Causes the texture to affect the result color after other light has been scattered/absorbed
-MaterialTextureSlot.map_density -> use_map_density: boolean Causes the texture to affect the volume's density
-MaterialTextureSlot.map_diffuse -> use_map_diffuse: boolean Causes the texture to affect the value of the materials diffuse reflectivity
-MaterialTextureSlot.map_displacement -> use_map_displacement: boolean Let the texture displace the surface
-MaterialTextureSlot.map_emission -> use_map_emission: boolean Causes the texture to affect the volume's emission
-MaterialTextureSlot.map_emit -> use_map_emit: boolean Causes the texture to affect the emit value
-MaterialTextureSlot.map_hardness -> use_map_hardness: boolean Causes the texture to affect the hardness value
-MaterialTextureSlot.map_mirror -> use_map_mirror: boolean Causes the texture to affect the mirror color
-MaterialTextureSlot.map_normal -> use_map_normal: boolean Causes the texture to affect the rendered normal
-MaterialTextureSlot.map_raymir -> use_map_raymir: boolean Causes the texture to affect the ray-mirror value
-MaterialTextureSlot.map_reflection -> use_map_reflect: boolean Causes the texture to affect the reflected light's brightness
-MaterialTextureSlot.map_scattering -> use_map_scatter: boolean Causes the texture to affect the volume's scattering
-MaterialTextureSlot.map_specular -> use_map_specular: boolean Causes the texture to affect the value of specular reflectivity
-MaterialTextureSlot.map_translucency -> use_map_translucency: boolean Causes the texture to affect the translucency value
-MaterialTextureSlot.map_warp -> use_map_warp: boolean Let the texture warp texture coordinates of next channels
-MaterialTextureSlot.new_bump -> use_new_bump: boolean Use new, corrected bump mapping code (backwards compatibility option)
-MaterialVolume.external_shadows -> use_external_shadows: boolean Receive shadows from sources outside the volume (temporary)
-MaterialVolume.light_cache -> use_light_cache: boolean Pre-calculate the shading information into a voxel grid, speeds up shading at slightly less accuracy
-Mesh.all_edges -> show_all_edges: boolean Displays all edges for wireframe in all view modes in the 3D view
-Mesh.auto_texspace -> use_auto_texspace: boolean Adjusts active object's texture space automatically when transforming object
-Mesh.autosmooth -> use_autosmooth: boolean Treats all set-smoothed faces with angles less than the specified angle as 'smooth' during render
-Mesh.double_sided -> show_double_sided: boolean Render/display the mesh with double or single sided lighting
-Mesh.draw_bevel_weights -> show_bevel_weights: boolean Displays weights created for the Bevel modifier
-Mesh.draw_creases -> show_creases: boolean Displays creases created for subsurf weighting
-Mesh.draw_edge_angle -> show_edge_angle: boolean Displays the angles in the selected edges in degrees
-Mesh.draw_edge_lenght -> show_edge_lenght: boolean Displays selected edge lengths
-Mesh.draw_edges -> show_edges: boolean Displays selected edges using highlights in the 3D view and UV editor
-Mesh.draw_face_area -> show_face_area: boolean Displays the area of selected faces
-Mesh.draw_faces -> show_faces: boolean Displays all faces as shades in the 3D view and UV editor
-Mesh.draw_normals -> show_normals: boolean Displays face normals as lines
-Mesh.draw_seams -> show_seams: boolean Displays UV unwrapping seams
-Mesh.draw_sharp -> show_sharp: boolean Displays sharp edges, used with the EdgeSplit modifier
-Mesh.draw_vertex_normals -> show_vertex_normals: boolean Displays vertex normals as lines
-Mesh.use_mirror_topology -> use_mirror_topology: boolean Use topology based mirroring
-Mesh.use_mirror_x -> use_mirror_x: boolean X Axis mirror editing
-Mesh.use_paint_mask -> use_paint_mask: boolean Face selection masking for painting
-Mesh.vertex_normal_flip -> use_vertex_normal_flip: boolean Flip vertex normals towards the camera during render
-MeshColorLayer.active -> active: boolean Sets the layer as active for display and editing
-MeshColorLayer.active_render -> active_render: boolean Sets the layer as active for rendering
-MeshDeformModifier.dynamic -> use_dynamic_bind: boolean Recompute binding dynamically on top of other deformers (slower and more memory consuming.)
-MeshDeformModifier.invert -> invert_vertex_group: boolean Invert vertex group influence
-MeshDeformModifier.is_bound -> is_bound: boolean, (read-only) Whether geometry has been bound to control cage
-MeshEdge.fgon -> is_fgon: boolean, (read-only) Fgon edge
-MeshEdge.loose -> is_loose: boolean, (read-only) Loose edge
-MeshEdge.seam -> use_seam: boolean Seam edge for UV unwrapping
-MeshEdge.sharp -> use_sharp: boolean Sharp edge for the EdgeSplit modifier
-
-MeshFace.smooth -> use_smooth: boolean
-MeshTextureFace.alpha_sort -> use_alpha_sort: boolean Enable sorting of faces for correct alpha drawing (slow, use Clip Alpha instead when possible)
-MeshTextureFace.billboard -> use_billboard: boolean Billboard with Z-axis constraint
-MeshTextureFace.collision -> use_collision: boolean Use face for collision and ray-sensor detection
-MeshTextureFace.halo -> use_halo: boolean Screen aligned billboard
-MeshTextureFace.invisible -> hide: boolean Make face invisible
-MeshTextureFace.light -> use_light: boolean Use light for face
-MeshTextureFace.object_color -> use_object_color: boolean Use ObColor instead of vertex colors
-MeshTextureFace.shadow -> use_shadow_face: boolean Face is used for shadow
-MeshTextureFace.shared -> use_blend_shared: boolean Blend vertex colors across face when vertices are shared
-MeshTextureFace.tex -> use_texture: boolean Render face with texture
-MeshTextureFace.text -> use_bitmap_text: boolean Enable bitmap text on face
-MeshTextureFace.twoside -> use_twoside: boolean Render face two-sided
-MeshTextureFace.uv_pinned -> pin_uv: boolean
-MeshTextureFace.uv_selected -> select_uv: boolean
-MeshTextureFaceLayer.active -> active: boolean Sets the layer as active for display and editing
-MeshTextureFaceLayer.active_clone -> active_clone: boolean Sets the layer as active for cloning
-MeshTextureFaceLayer.active_render -> active_render: boolean Sets the layer as active for rendering
-MetaBall.auto_texspace -> use_auto_texspace: boolean Adjusts active object's texture space automatically when transforming object
-MetaElement.hide -> hide: boolean Hide element
-MetaElement.negative -> use_negative: boolean Set metaball as negative one
-MetaSequence.convert_float -> use_float: boolean Convert input to float data
-MetaSequence.de_interlace -> use_deinterlace: boolean For video movies to remove fields
-MetaSequence.flip_x -> use_flip_x: boolean Flip on the X axis
-MetaSequence.flip_y -> use_flip_y: boolean Flip on the Y axis
-MetaSequence.premultiply -> use_premultiply: boolean Convert RGB from key alpha to premultiplied alpha
-MetaSequence.proxy_custom_directory -> use_proxy_custom_directory: boolean Use a custom directory to store data
-MetaSequence.proxy_custom_file -> use_proxy_custom_file: boolean Use a custom file to read proxy data from
-MetaSequence.reverse_frames -> use_reverse_frames: boolean Reverse frame order
-MetaSequence.use_color_balance -> use_color_balance: boolean (3-Way color correction) on input
-MetaSequence.use_crop -> use_crop: boolean Crop image before processing
-MetaSequence.use_proxy -> use_proxy: boolean Use a preview proxy for this strip
-MetaSequence.use_translation -> use_translation: boolean Translate image before processing
-MirrorModifier.clip -> use_clip: boolean Prevents vertices from going through the mirror during transform
-MirrorModifier.mirror_u -> use_mirror_u: boolean Mirror the U texture coordinate around the 0.5 point
-MirrorModifier.mirror_v -> use_mirror_v: boolean Mirror the V texture coordinate around the 0.5 point
-MirrorModifier.mirror_vertex_groups -> use_mirror_vertex_groups: boolean Mirror vertex groups (e.g. .R->.L)
-MirrorModifier.x -> use_x: boolean Enable X axis mirror
-MirrorModifier.y -> use_y: boolean Enable Y axis mirror
-MirrorModifier.z -> use_z: boolean Enable Z axis mirror
-Modifier.editmode -> show_in_editmode: boolean Use modifier while in the edit mode
-Modifier.expanded -> show_expanded: boolean Set modifier expanded in the user interface
-Modifier.on_cage -> show_on_cage: boolean Enable direct editing of modifier control cage
-Modifier.realtime -> show_realtime: boolean Realtime display of a modifier
-Modifier.render -> use_render: boolean Use modifier during rendering
-MotionPath.editing -> is_edited: boolean Path is being edited
-MotionPath.use_bone_head -> use_bone_head: boolean, (read-only) For PoseBone paths, use the bone head location when calculating this path
-MovieSequence.convert_float -> use_float: boolean Convert input to float data
-MovieSequence.de_interlace -> use_deinterlace: boolean For video movies to remove fields
-MovieSequence.flip_x -> use_flip_x: boolean Flip on the X axis
-MovieSequence.flip_y -> use_flip_y: boolean Flip on the Y axis
-MovieSequence.premultiply -> use_premultiply: boolean Convert RGB from key alpha to premultiplied alpha
-MovieSequence.proxy_custom_directory -> use_proxy_custom_directory: boolean Use a custom directory to store data
-MovieSequence.proxy_custom_file -> use_proxy_custom_file: boolean Use a custom file to read proxy data from
-MovieSequence.reverse_frames -> use_reverse_frames: boolean Reverse frame order
-MovieSequence.use_color_balance -> use_color_balance: boolean (3-Way color correction) on input
-MovieSequence.use_crop -> use_crop: boolean Crop image before processing
-MovieSequence.use_proxy -> use_proxy: boolean Use a preview proxy for this strip
-MovieSequence.use_translation -> use_translation: boolean Translate image before processing
-MulticamSequence.convert_float -> use_float: boolean Convert input to float data
-MulticamSequence.de_interlace -> use_deinterlace: boolean For video movies to remove fields
-MulticamSequence.flip_x -> use_flip_x: boolean Flip on the X axis
-MulticamSequence.flip_y -> use_flip_y: boolean Flip on the Y axis
-MulticamSequence.premultiply -> use_premultiply: boolean Convert RGB from key alpha to premultiplied alpha
-MulticamSequence.proxy_custom_directory -> use_proxy_custom_directory: boolean Use a custom directory to store data
-MulticamSequence.proxy_custom_file -> use_proxy_custom_file: boolean Use a custom file to read proxy data from
-MulticamSequence.reverse_frames -> use_reverse_frames: boolean Reverse frame order
-MulticamSequence.use_color_balance -> use_color_balance: boolean (3-Way color correction) on input
-MulticamSequence.use_crop -> use_crop: boolean Crop image before processing
-MulticamSequence.use_proxy -> use_proxy: boolean Use a preview proxy for this strip
-MulticamSequence.use_translation -> use_translation: boolean Translate image before processing
-MultiresModifier.external -> is_external: boolean, (read-only) Store multires displacements outside the .blend file, to save memory
-MultiresModifier.optimal_display -> show_only_control_edges: boolean Skip drawing/rendering of interior subdivided edges
-NetRenderSettings.master_broadcast -> use_master_broadcast: boolean broadcast master server address on local network
-NetRenderSettings.master_clear -> use_master_clear: boolean delete saved files on exit
-NetRenderSettings.slave_clear -> use_slave_clear: boolean delete downloaded files on exit
-NetRenderSettings.slave_outputlog -> use_slave_output_log: boolean Output render text log to console as well as sending it to the master
-NetRenderSettings.slave_thumb -> use_slave_thumb: boolean Generate thumbnails on slaves instead of master
-NlaStrip.active -> active: boolean, (read-only) NLA Strip is active
-NlaStrip.animated_influence -> use_animated_influence: boolean Influence setting is controlled by an F-Curve rather than automatically determined
-NlaStrip.animated_time -> use_animated_time: boolean Strip time is controlled by an F-Curve rather than automatically determined
-NlaStrip.animated_time_cyclic -> use_animated_time_cyclic: boolean Cycle the animated time within the action start & end
-NlaStrip.auto_blending -> use_auto_blend: boolean Number of frames for Blending In/Out is automatically determined from overlapping strips
-NlaStrip.muted -> mute: boolean NLA Strip is not evaluated
-NlaStrip.reversed -> use_reverse: boolean NLA Strip is played back in reverse order (only when timing is automatically determined)
-NlaTrack.active -> active: boolean, (read-only) NLA Track is active
-NlaTrack.solo -> is_solo: boolean, (read-only) NLA Track is evaluated itself (i.e. active Action and all other NLA Tracks in the same AnimData block are disabled)
-Object.draw_axis -> show_axis: boolean Displays the object's origin and axis
-Object.draw_bounds -> show_bounds: boolean Displays the object's bounds
-Object.draw_name -> show_name: boolean Displays the object's name
-Object.draw_texture_space -> show_texture_space: boolean Displays the object's texture space
-Object.draw_transparent -> show_transparent: boolean Enables transparent materials for the object (Mesh only)
-Object.draw_wire -> show_wire: boolean Adds the object's wireframe over solid drawing
-Object.duplis_used -> is_duplicator: boolean, (read-only)
-Object.layers -> layers: boolean Layers the object is on
-Object.lock_location -> lock_location: boolean Lock editing of location in the interface
-Object.lock_rotation -> lock_rotation: boolean Lock editing of rotation in the interface
-Object.lock_rotation_w -> lock_rotation_w: boolean Lock editing of 'angle' component of four-component rotations in the interface
-Object.lock_rotations_4d -> lock_rotations_4d: boolean Lock editing of four component rotations by components (instead of as Eulers)
-Object.lock_scale -> lock_scale: boolean Lock editing of scale in the interface
-
-Object.shape_key_edit_mode -> use_shape_key_edit_mode: boolean Apply shape keys in edit mode (for Meshes only)
-Object.shape_key_lock -> show_shape_key: boolean Always show the current Shape for this Object
-Object.slow_parent -> use_slow_parent: boolean Create a delay in the parent relationship
-Object.time_offset_add_parent -> use_time_offset_add_parent: boolean Add the parents time offset value
-Object.time_offset_edit -> use_time_offset_edit: boolean Use time offset when inserting keys and display time offset for F-Curve and action views
-Object.time_offset_parent -> use_time_offset_parent: boolean Apply the time offset to this objects parent relationship
-Object.time_offset_particle -> use_time_offset_particle: boolean Let the time offset work on the particle effect
-Object.use_dupli_faces_scale -> use_dupli_faces_scale: boolean Scale dupli based on face size
-Object.use_dupli_frames_speed -> use_dupli_frames_speed: boolean Set dupliframes to use the frame
-Object.use_dupli_verts_rotation -> use_dupli_verts_rotation: boolean Rotate dupli according to vertex normal
-Object.x_ray -> show_x_ray: boolean Makes the object draw in front of others
-ObjectActuator.add_linear_velocity -> use_add_linear_velocity: boolean Toggles between ADD and SET linV
-ObjectActuator.local_angular_velocity -> use_local_angular_velocity: boolean Angular velocity is defined in local coordinates
-ObjectActuator.local_force -> use_local_force: boolean Force is defined in local coordinates
-ObjectActuator.local_linear_velocity -> use_local_linear_velocity: boolean Velocity is defined in local coordinates
-ObjectActuator.local_location -> use_local_location: boolean Location is defined in local coordinates
-ObjectActuator.local_rotation -> use_local_rotation: boolean Rotation is defined in local coordinates
-ObjectActuator.local_torque -> use_local_torque: boolean Torque is defined in local coordinates
-ObjectActuator.servo_limit_x -> use_servo_limit_x: boolean Set limit to force along the X axis
-ObjectActuator.servo_limit_y -> use_servo_limit_y: boolean Set limit to force along the Y axis
-ObjectActuator.servo_limit_z -> use_servo_limit_z: boolean Set limit to force along the Z axis
-ObjectBase.layers -> layers: boolean Layers the object base is on
-ObstacleFluidSettings.active -> use: boolean Object contributes to the fluid simulation
-ObstacleFluidSettings.export_animated_mesh -> use_animated_mesh: boolean Export this mesh as an animated one. Slower, only use if really necessary (e.g. armatures or parented objects), animated pos/rot/scale IPOs do not require it
-Operator.has_reports -> has_reports: boolean, (read-only) Operator has a set of reports (warnings and errors) from last execution
-OperatorStrokeElement.flip -> use_flip: boolean
-OutflowFluidSettings.active -> use: boolean Object contributes to the fluid simulation
-OutflowFluidSettings.export_animated_mesh -> use_animated_mesh: boolean Export this mesh as an animated one. Slower, only use if really necessary (e.g. armatures or parented objects), animated pos/rot/scale IPOs do not require it
-Paint.fast_navigate -> show_low_resolution: boolean For multires, show low resolution while navigating the view
-Paint.show_brush -> show_brush: boolean
-Panel.bl_default_closed -> bl_use_closed: boolean
-Panel.bl_show_header -> bl_show_header: boolean
-ParentActuator.compound -> use_compound: boolean Add this object shape to the parent shape (only if the parent shape is already compound)
-ParentActuator.ghost -> use_ghost: boolean Make this object ghost while parented (only if not compound)
-ParticleBrush.use_puff_volume -> use_puff_volume: boolean Apply puff to unselected end-points, (helps maintain hair volume when puffing root)
-ParticleEdit.add_interpolate -> use_add_interpolate: boolean Interpolate new particles from the existing ones
-ParticleEdit.auto_velocity -> use_auto_velocity: boolean Calculate point velocities automatically
-ParticleEdit.draw_particles -> show_particles: boolean Draw actual particles
-ParticleEdit.editable -> is_editable: boolean, (read-only) A valid edit mode exists
-ParticleEdit.emitter_deflect -> use_emitter_deflect: boolean Keep paths from intersecting the emitter
-ParticleEdit.fade_time -> use_fade_time: boolean Fade paths and keys further away from current frame
-ParticleEdit.hair -> is_hair: boolean, (read-only) Editing hair
-ParticleEdit.keep_lengths -> use_preserve_lengths: boolean Keep path lengths constant
-ParticleEdit.keep_root -> use_preserve_root: boolean Keep root keys unmodified
-ParticleFluidSettings.drops -> use_drops: boolean Show drop particles
-ParticleFluidSettings.floats -> use_floats: boolean Show floating foam particles
-ParticleFluidSettings.tracer -> use_tracer: boolean Show tracer particles
-ParticleInstanceModifier.alive -> use_alive: boolean Show instances when particles are alive
-ParticleInstanceModifier.children -> use_children: boolean Create instances from child particles
-ParticleInstanceModifier.dead -> use_dead: boolean Show instances when particles are dead
-ParticleInstanceModifier.keep_shape -> use_preserve_shape: boolean Don't stretch the object
-ParticleInstanceModifier.normal -> use_normal: boolean Create instances from normal particles
-ParticleInstanceModifier.size -> use_size: boolean Use particle size to scale the instances
-ParticleInstanceModifier.unborn -> use_unborn: boolean Show instances when particles are unborn
-ParticleInstanceModifier.use_path -> use_path: boolean Create instances along particle paths
-ParticleSettings.abs_path_time -> use_absolute_path_time: boolean Path timing is in absolute frames
-ParticleSettings.animate_branching -> use_animate_branching: boolean Animate branching
-ParticleSettings.billboard_lock -> lock_billboard: boolean Lock the billboards align axis
-ParticleSettings.boids_2d -> lock_boids_to_surface: boolean Constrain boids to a surface
-ParticleSettings.branching -> use_branching: boolean Branch child paths from each other
-ParticleSettings.child_effector -> apply_effector_to_children: boolean Apply effectors to children
-ParticleSettings.child_guide -> apply_guide_to_children: boolean
-ParticleSettings.die_on_collision -> use_die_on_collision: boolean Particles die when they collide with a deflector object
-ParticleSettings.died -> use_died: boolean Show particles after they have died
-ParticleSettings.draw_health -> show_health: boolean Draw boid health
-ParticleSettings.emitter -> use_render_emitter: boolean Render emitter Object also
-ParticleSettings.enable_simplify -> use_simplify: boolean Remove child strands as the object becomes smaller on the screen
-ParticleSettings.even_distribution -> use_even_distribution: boolean Use even distribution from faces based on face areas or edge lengths
-ParticleSettings.grid_invert -> invert_grid: boolean Invert what is considered object and what is not
-ParticleSettings.hair_bspline -> use_hair_bspline: boolean Interpolate hair using B-Splines
-ParticleSettings.material_color -> show_material_color: boolean Draw particles using material's diffuse color
-ParticleSettings.num -> show_number: boolean Show particle number
-ParticleSettings.parent -> use_parents: boolean Render parent particles
-ParticleSettings.rand_group -> use_group_pick_random: boolean Pick objects from group randomly
-ParticleSettings.react_multiple -> use_react_multiple: boolean React multiple times
-ParticleSettings.react_start_end -> use_react_start_end: boolean Give birth to unreacted particles eventually
-ParticleSettings.render_adaptive -> use_render_adaptive: boolean Use adapative rendering for paths
-ParticleSettings.render_strand -> use_strand_primitive: boolean Use the strand primitive for rendering
-ParticleSettings.rotation_dynamic -> use_dynamic_rotation: boolean Sets rotation to dynamic/constant
-ParticleSettings.self_effect -> use_self_effect: boolean Particle effectors effect themselves
-ParticleSettings.show_size -> show_size: boolean Show particle size
-ParticleSettings.size_deflect -> use_size_deflect: boolean Use particle's size in deflection
-ParticleSettings.sizemass -> use_multiply_size_mass: boolean Multiply mass by particle size
-ParticleSettings.symmetric_branching -> use_symmetric_branching: boolean Start and end points are the same
-ParticleSettings.trand -> use_emit_random: boolean Emit in random order of elements
-ParticleSettings.unborn -> use_unborn: boolean Show particles before they are emitted
-ParticleSettings.use_global_dupli -> use_global_dupli: boolean Use object's global coordinates for duplication
-ParticleSettings.use_group_count -> use_group_count: boolean Use object multiple times in the same group
-ParticleSettings.velocity -> show_velocity: boolean Show particle velocity
-ParticleSettings.velocity_length -> use_velocity_length: boolean Multiply line length by particle speed
-ParticleSettings.viewport -> use_simplify_viewport: boolean
-ParticleSettings.whole_group -> use_whole_group: boolean Use whole group at once
-ParticleSystem.editable -> is_editable: boolean, (read-only) Particle system can be edited in particle mode
-ParticleSystem.edited -> is_edited: boolean, (read-only) Particle system has been edited in particle mode
-ParticleSystem.global_hair -> is_global_hair: boolean, (read-only) Hair keys are in global coordinate space
-ParticleSystem.hair_dynamics -> use_hair_dynamics: boolean Enable hair dynamics using cloth simulation
-ParticleSystem.keyed_timing -> use_keyed_timing: boolean Use key times
-ParticleSystem.multiple_caches -> has_multiple_caches: boolean, (read-only) Particle system has multiple point caches
-ParticleSystem.vertex_group_clump_negate -> invert_vertex_group_clump: boolean Negate the effect of the clump vertex group
-ParticleSystem.vertex_group_density_negate -> invert_vertex_group_density: boolean Negate the effect of the density vertex group
-ParticleSystem.vertex_group_field_negate -> invert_vertex_group_field: boolean Negate the effect of the field vertex group
-ParticleSystem.vertex_group_kink_negate -> invert_vertex_group_kink: boolean Negate the effect of the kink vertex group
-ParticleSystem.vertex_group_length_negate -> invert_vertex_group_length: boolean Negate the effect of the length vertex group
-ParticleSystem.vertex_group_rotation_negate -> invert_vertex_group_rotation: boolean Negate the effect of the rotation vertex group
-ParticleSystem.vertex_group_roughness1_negate -> invert_vertex_group_roughness1: boolean Negate the effect of the roughness 1 vertex group
-ParticleSystem.vertex_group_roughness2_negate -> invert_vertex_group_roughness2: boolean Negate the effect of the roughness 2 vertex group
-ParticleSystem.vertex_group_roughness_end_negate -> invert_vertex_group_roughness_end: boolean Negate the effect of the roughness end vertex group
-ParticleSystem.vertex_group_size_negate -> invert_vertex_group_size: boolean Negate the effect of the size vertex group
-ParticleSystem.vertex_group_tangent_negate -> invert_vertex_group_tangent: boolean Negate the effect of the tangent vertex group
-ParticleSystem.vertex_group_velocity_negate -> invert_vertex_group_velocity: boolean Negate the effect of the velocity vertex group
-ParticleTarget.valid -> is_valid: boolean Keyed particles target is valid
-PivotConstraint.use_relative_position -> use_relative_location: boolean Offset will be an absolute point in space instead of relative to the target
-PointCache.baked -> is_baked: boolean, (read-only)
-PointCache.baking -> is_baking: boolean, (read-only)
-PointCache.disk_cache -> use_disk_cache: boolean Save cache files to disk (.blend file must be saved first)
-PointCache.external -> use_external: boolean Read cache from an external location
-PointCache.has_skipped_frames-> has_skipped_frames: boolean, (read-only)
-PointCache.outdated -> is_outdated: boolean, (read-only)
-PointCache.quick_cache -> use_quick_cache: boolean Update simulation with cache steps
-PointCache.use_library_path -> use_library_path: boolean Use this files path when library linked into another file.
-PointDensity.turbulence -> use_turbulence: boolean Add directed noise to the density at render-time
-PointLamp.only_shadow -> use_only_shadow: boolean Causes light to cast shadows only without illuminating objects
-PointLamp.shadow_layer -> use_shadow_layer: boolean Causes only objects on the same layer to cast shadows
-PointLamp.sphere -> use_sphere: boolean Sets light intensity to zero beyond lamp distance
-PoseBone.has_ik -> is_in_ik_chain: boolean, (read-only) Is part of an IK chain
-NEGATE * PoseBone.ik_dof_x -> lock_ik_x: boolean Allow movement around the X axis
-NEGATE * PoseBone.ik_dof_y -> lock_ik_y: boolean Allow movement around the Y axis
-NEGATE * PoseBone.ik_dof_z -> lock_ik_z: boolean Allow movement around the Z axis
-PoseBone.ik_limit_x -> lock_ik_x: boolean Limit movement around the X axis
-PoseBone.ik_limit_y -> lock_ik_y: boolean Limit movement around the Y axis
-PoseBone.ik_limit_z -> lock_ik_z: boolean Limit movement around the Z axis
-PoseBone.ik_lin_control -> use_ik_lin_control: boolean Apply channel size as IK constraint if stretching is enabled
-PoseBone.ik_rot_control -> use_ik_rot_control: boolean Apply channel rotation as IK constraint
-PoseBone.lock_location -> lock_location: boolean Lock editing of location in the interface
-PoseBone.lock_rotation -> lock_rotation: boolean Lock editing of rotation in the interface
-PoseBone.lock_rotation_w -> lock_rotation_w: boolean Lock editing of 'angle' component of four-component rotations in the interface
-PoseBone.lock_rotations_4d -> lock_rotations_4d: boolean Lock editing of four component rotations by components (instead of as Eulers)
-PoseBone.lock_scale -> lock_scale: boolean Lock editing of scale in the interface
-
-PoseTemplateSettings.generate_def_rig -> use_generate_deform_rig: boolean Create a copy of the metarig, constrainted by the generated rig
-Property.is_never_none -> is_never_none: boolean, (read-only) True when this value can't be set to None
-Property.is_readonly -> is_readonly: boolean, (read-only) Property is editable through RNA
-Property.is_required -> is_required: boolean, (read-only) False when this property is an optional argument in an RNA function
-Property.registered -> is_registered: boolean, (read-only) Property is registered as part of type registration
-Property.registered_optional -> is_registered_optional: boolean, (read-only) Property is optionally registered as part of type registration
-Property.use_output -> is_output: boolean, (read-only) True when this property is an output value from an RNA function
-PythonConstraint.script_error -> has_script_error: boolean, (read-only) The linked Python script has thrown an error
-PythonConstraint.use_targets -> use_targets: boolean Use the targets indicated in the constraint panel
-PythonController.debug -> use_debug: boolean Continuously reload the module from disk for editing external modules without restarting
-RandomActuator.always_true -> use_always_true: boolean Always false or always true
-RaySensor.x_ray_mode -> use_x_ray: boolean See through objects that don't have the property
-RegionView3D.box_clip -> use_box_clip: boolean Clip objects based on what's visible in other side views
-RegionView3D.box_preview -> show_synced_view: boolean Sync view position between side views
-RegionView3D.lock_rotation -> lock_rotation: boolean Lock view rotation in side views
-RenderEngine.bl_postprocess -> bl_use_postprocess: boolean
-RenderEngine.bl_preview -> bl_use_preview: boolean
-RenderLayer.all_z -> use_all_z: boolean, (read-only) Fill in Z values for solid faces in invisible layers, for masking
-RenderLayer.edge -> use_edge_enhance: boolean, (read-only) Render Edge-enhance in this Layer (only works for Solid faces)
-RenderLayer.enabled -> use: boolean, (read-only) Disable or enable the render layer
-RenderLayer.halo -> use_halo: boolean, (read-only) Render Halos in this Layer (on top of Solid)
-RenderLayer.pass_ao -> use_pass_ambient_occlusion: boolean, (read-only) Deliver AO pass
-RenderLayer.pass_ao_exclude -> exclude_ambient_occlusion: boolean, (read-only) Exclude AO pass from combined
-RenderLayer.pass_color -> use_pass_color: boolean, (read-only) Deliver shade-less color pass
-RenderLayer.pass_combined -> use_pass_combined: boolean, (read-only) Deliver full combined RGBA buffer
-RenderLayer.pass_diffuse -> use_pass_diffuse: boolean, (read-only) Deliver diffuse pass
-RenderLayer.pass_emit -> use_pass_emit: boolean, (read-only) Deliver emission pass
-RenderLayer.pass_emit_exclude -> exclude_emit: boolean, (read-only) Exclude emission pass from combined
-RenderLayer.pass_environment -> use_pass_environment: boolean, (read-only) Deliver environment lighting pass
-RenderLayer.pass_environment_exclude -> exclude_environment: boolean, (read-only) Exclude environment pass from combined
-RenderLayer.pass_indirect -> use_pass_indirect: boolean, (read-only) Deliver indirect lighting pass
-RenderLayer.pass_indirect_exclude -> exclude_indirect: boolean, (read-only) Exclude indirect pass from combined
-RenderLayer.pass_mist -> use_pass_mist: boolean, (read-only) Deliver mist factor pass (0.0-1.0)
-RenderLayer.pass_normal -> use_pass_normal: boolean, (read-only) Deliver normal pass
-RenderLayer.pass_object_index -> use_pass_object_index: boolean, (read-only) Deliver object index pass
-RenderLayer.pass_reflection -> use_pass_reflection: boolean, (read-only) Deliver raytraced reflection pass
-RenderLayer.pass_reflection_exclude -> exclude_reflection: boolean, (read-only) Exclude raytraced reflection pass from combined
-RenderLayer.pass_refraction -> use_pass_refraction: boolean, (read-only) Deliver raytraced refraction pass
-RenderLayer.pass_refraction_exclude -> exclude_refraction: boolean, (read-only) Exclude raytraced refraction pass from combined
-RenderLayer.pass_shadow -> use_pass_shadow: boolean, (read-only) Deliver shadow pass
-RenderLayer.pass_shadow_exclude -> exclude_shadow: boolean, (read-only) Exclude shadow pass from combined
-RenderLayer.pass_specular -> use_pass_specular: boolean, (read-only) Deliver specular pass
-RenderLayer.pass_specular_exclude -> exclude_specular: boolean, (read-only) Exclude specular pass from combined
-RenderLayer.pass_uv -> use_pass_uv: boolean, (read-only) Deliver texture UV pass
-RenderLayer.pass_vector -> use_pass_vector: boolean, (read-only) Deliver speed vector pass
-RenderLayer.pass_z -> use_pass_z: boolean, (read-only) Deliver Z values pass
-RenderLayer.sky -> use_sky: boolean, (read-only) Render Sky in this Layer
-RenderLayer.solid -> use_solid: boolean, (read-only) Render Solid faces in this Layer
-RenderLayer.strand -> use_strand: boolean, (read-only) Render Strands in this Layer
-RenderLayer.visible_layers -> layers: boolean, (read-only) Scene layers included in this render layer
-RenderLayer.zmask -> use_zmask: boolean, (read-only) Only render what's in front of the solid z values
-RenderLayer.zmask_layers -> layers_zmask: boolean, (read-only) Zmask scene layers
-RenderLayer.zmask_negate -> invert_zmask: boolean, (read-only) For Zmask, only render what is behind solid z values instead of in front
-RenderLayer.ztransp -> use_ztransp: boolean, (read-only) Render Z-Transparent faces in this Layer (On top of Solid and Halos)
-RenderSettings.backbuf -> use_backbuf: boolean Render backbuffer image
-RenderSettings.bake_active -> use_bake_active_to_selected: boolean Bake shading on the surface of selected objects to the active object
-RenderSettings.bake_clear -> use_bake_clear: boolean Clear Images before baking
-RenderSettings.bake_enable_aa -> use_bake_antialiasing: boolean Enables Anti-aliasing
-RenderSettings.bake_normalized -> use_bake_normalized: boolean With displacement normalize to the distance, with ambient occlusion normalize without using material settings
-RenderSettings.cineon_log -> use_cineon_log: boolean Convert to logarithmic color space
-RenderSettings.color_management -> use_color_management: boolean Use color profiles and gamma corrected imaging pipeline
-RenderSettings.crop_to_border -> use_crop_to_border: boolean Crop the rendered frame to the defined border size
-RenderSettings.edge -> use_edge_enhance: boolean use_Create a toon outline around the edges of geometry
-RenderSettings.exr_half -> use_exr_half: boolean Use 16 bit floats instead of 32 bit floats per channel
-RenderSettings.exr_preview -> use_exr_preview: boolean When rendering animations, save JPG preview images in same directory
-RenderSettings.exr_zbuf -> use_exr_zbuf: boolean Save the z-depth per pixel (32 bit unsigned int zbuffer)
-RenderSettings.ffmpeg_autosplit -> use_ffmpeg_autosplit: boolean Autosplit output at 2GB boundary
-RenderSettings.fields -> use_fields: boolean Render image to two fields per frame, for interlaced TV output
-RenderSettings.fields_still -> use_fields_still: boolean Disable the time difference between fields
-RenderSettings.free_image_textures -> use_free_image_textures: boolean Free all image texture from memory after render, to save memory before compositing
-RenderSettings.free_unused_nodes -> use_free_unused_nodes: boolean Free Nodes that are not used while compositing, to save memory
-RenderSettings.full_sample -> use_full_sample: boolean Save for every anti-aliasing sample the entire RenderLayer results. This solves anti-aliasing issues with compositing
-RenderSettings.is_movie_format -> is_movie_format: boolean, (read-only) When true the format is a movie
-RenderSettings.jpeg2k_ycc -> use_jpeg2k_ycc: boolean Save luminance-chrominance-chrominance channels instead of RGB colors
-RenderSettings.motion_blur -> use_motion_blur: boolean Use multi-sampled 3D scene motion blur
-RenderSettings.multiple_engines -> has_multiple_engines: boolean, (read-only) More than one rendering engine is available
-RenderSettings.render_antialiasing -> use_antialiasing: boolean Render and combine multiple samples per pixel to prevent jagged edges
-RenderSettings.render_stamp -> use_stamp: boolean Render the stamp info text in the rendered image
-RenderSettings.save_buffers -> use_save_buffers: boolean Save tiles for all RenderLayers and SceneNodes to files in the temp directory (saves memory, required for Full Sample)
-RenderSettings.simplify_triangulate -> use_simplify_triangulate: boolean Disables non-planer quads being triangulated
-RenderSettings.single_layer -> use_single_layer: boolean Only render the active layer
-RenderSettings.stamp_camera -> use_stamp_camera: boolean Include the name of the active camera in image metadata
-RenderSettings.stamp_date -> use_stamp_date: boolean Include the current date in image metadata
-RenderSettings.stamp_filename -> use_stamp_filename: boolean Include the filename of the .blend file in image metadata
-RenderSettings.stamp_frame -> use_stamp_frame: boolean Include the frame number in image metadata
-RenderSettings.stamp_marker -> use_stamp_marker: boolean Include the name of the last marker in image metadata
-RenderSettings.stamp_note -> use_stamp_note: boolean Include a custom note in image metadata
-RenderSettings.stamp_render_time -> use_stamp_render_time: boolean Include the render time in the stamp image
-RenderSettings.stamp_scene -> use_stamp_scene: boolean Include the name of the active scene in image metadata
-RenderSettings.stamp_sequencer_strip -> use_stamp_sequencer_strip: boolean Include the name of the foreground sequence strip in image metadata
-RenderSettings.stamp_time -> use_stamp_time: boolean Include the render frame as HH:MM:SS.FF in image metadata
-RenderSettings.tiff_bit -> use_tiff_16bit: boolean Save TIFF with 16 bits per channel
-RenderSettings.use_border -> use_border: boolean Render a user-defined border region, within the frame size. Note, this disables save_buffers and full_sample
-RenderSettings.use_compositing -> use_compositing: boolean Process the render result through the compositing pipeline, if compositing nodes are enabled
-RenderSettings.use_envmaps -> use_envmaps: boolean Calculate environment maps while rendering
-RenderSettings.use_file_extension -> use_file_extension: boolean Add the file format extensions to the rendered file name (eg: filename + .jpg)
-RenderSettings.use_game_engine -> use_game_engine: boolean, (read-only) Current rendering engine is a game engine
-RenderSettings.use_instances -> use_instances: boolean Instance support leads to effective memory reduction when using duplicates
-RenderSettings.use_local_coords -> use_local_coords: boolean Vertex coordinates are stored localy on each primitive. Increases memory usage, but may have impact on speed
-RenderSettings.use_overwrite -> use_overwrite: boolean Overwrite existing files while rendering
-RenderSettings.use_placeholder -> use_placeholder: boolean Create empty placeholder files while rendering frames (similar to Unix 'touch')
-RenderSettings.use_radiosity -> use_radiosity: boolean Calculate radiosity in a pre-process before rendering
-RenderSettings.use_raytracing -> use_raytrace: boolean Pre-calculate the raytrace accelerator and render raytracing effects
-RenderSettings.use_sequencer -> use_sequencer: boolean Process the render (and composited) result through the video sequence editor pipeline, if sequencer strips exist
-RenderSettings.use_sequencer_gl_preview -> use_sequencer_gl_preview: boolean
-RenderSettings.use_sequencer_gl_render -> use_sequencer_gl_render: boolean
-RenderSettings.use_shadows -> use_shadows: boolean Calculate shadows while rendering
-RenderSettings.use_simplify -> use_simplify: boolean Enable simplification of scene for quicker preview renders
-RenderSettings.use_sss -> use_sss: boolean Calculate sub-surface scattering in materials rendering
-RenderSettings.use_textures -> use_textures: boolean Use textures to affect material properties
-NEGATE * RigidBodyJointConstraint.disable_linked_collision -> use_linked_collision: boolean Disable collision between linked bodies
-RigidBodyJointConstraint.draw_pivot -> show_pivot: boolean Display the pivot point and rotation in 3D view
-Scene.frame_drop -> use_frame_drop: boolean Play back dropping frames if frame display is too slow
-Scene.layers -> layers: boolean Layers visible when rendering the scene
-Scene.mute_audio -> mute_audio: boolean Play back of audio from Sequence Editor will be muted
-Scene.nla_tweakmode_on -> use_nla_tweakmode: boolean, (read-only) Indicates whether there is any action referenced by NLA being edited. Strictly read-only
-Scene.pov_radio_always_sample -> use_pov_radio_always_sample: boolean Only use the data from the pretrace step and not gather any new samples during the final radiosity pass
-Scene.pov_radio_display_advanced -> show_pov_radio_advanced: boolean Show advanced options
-Scene.pov_radio_enable -> use_pov_radio: boolean Enable povrays radiosity calculation
-Scene.pov_radio_media -> use_pov_radio_media: boolean Radiosity estimation can be affected by media
-Scene.pov_radio_normal -> use_pov_radio_normal: boolean Radiosity estimation can be affected by normals
-Scene.scrub_audio -> use_audio_scrub: boolean Play audio from Sequence Editor while scrubbing
-Scene.sync_audio -> use_audio_sync: boolean Play back and sync with audio clock, dropping frames if frame display is too slow
-Scene.use_gravity -> use_gravity: boolean Use global gravity for all dynamics
-Scene.use_nodes -> use_nodes: boolean Enable the compositing node tree
-Scene.use_preview_range -> use_preview_range: boolean Use an alternative start/end frame for UI playback, rather than the scene start/end frame
-SceneGameData.activity_culling -> use_activity_culling: boolean Activity culling is enabled
-SceneGameData.auto_start -> use_auto_start: boolean Automatically start game at load time
-SceneGameData.fullscreen -> show_fullscreen: boolean Starts player in a new fullscreen display
-SceneGameData.glsl_extra_textures -> use_glsl_extra_textures: boolean Use extra textures like normal or specular maps for GLSL rendering
-SceneGameData.glsl_lights -> use_glsl_lights: boolean Use lights for GLSL rendering
-SceneGameData.glsl_nodes -> use_glsl_nodes: boolean Use nodes for GLSL rendering
-SceneGameData.glsl_ramps -> use_glsl_ramps: boolean Use ramps for GLSL rendering
-SceneGameData.glsl_shaders -> use_glsl_shaders: boolean Use shaders for GLSL rendering
-SceneGameData.glsl_shadows -> use_glsl_shadows: boolean Use shadows for GLSL rendering
-SceneGameData.show_debug_properties -> show_debug_properties: boolean Show properties marked for debugging while the game runs
-SceneGameData.show_framerate_profile -> show_framerate_profile: boolean Show framerate and profiling information while the game runs
-SceneGameData.show_physics_visualization -> show_physics_visualization: boolean Show a visualization of physics bounds and interactions
-SceneGameData.use_animation_record -> use_animation_record: boolean Record animation to fcurves
-SceneGameData.use_deprecation_warnings -> use_deprecation_warnings: boolean Print warnings when using deprecated features in the python API
-SceneGameData.use_display_lists -> use_display_lists: boolean Use display lists to speed up rendering by keeping geometry on the GPU
-SceneGameData.use_frame_rate -> use_frame_rate: boolean Respect the frame rate rather than rendering as many frames as possible
-SceneGameData.use_occlusion_culling -> use_occlusion_culling: boolean Use optimized Bullet DBVT tree for view frustum and occlusion culling
-SceneRenderLayer.all_z -> use_all_z: boolean Fill in Z values for solid faces in invisible layers, for masking
-SceneRenderLayer.edge -> use_edge_enhance: boolean Render Edge-enhance in this Layer (only works for Solid faces)
-SceneRenderLayer.enabled -> use: boolean Disable or enable the render layer
-SceneRenderLayer.halo -> use_halo: boolean Render Halos in this Layer (on top of Solid)
-SceneRenderLayer.pass_ao -> use_pass_ambient_occlusion: boolean Deliver AO pass
-SceneRenderLayer.pass_ao_exclude -> exclude_ambient_occlusion: boolean Exclude AO pass from combined
-SceneRenderLayer.pass_color -> use_pass_color: boolean Deliver shade-less color pass
-SceneRenderLayer.pass_combined -> use_pass_combined: boolean Deliver full combined RGBA buffer
-SceneRenderLayer.pass_diffuse -> use_pass_diffuse: boolean Deliver diffuse pass
-SceneRenderLayer.pass_emit -> use_pass_emit: boolean Deliver emission pass
-SceneRenderLayer.pass_emit_exclude -> exclude_emit: boolean Exclude emission pass from combined
-SceneRenderLayer.pass_environment -> use_pass_environment: boolean Deliver environment lighting pass
-SceneRenderLayer.pass_environment_exclude -> exclude_environment: boolean Exclude environment pass from combined
-SceneRenderLayer.pass_indirect -> use_pass_indirect: boolean Deliver indirect lighting pass
-SceneRenderLayer.pass_indirect_exclude -> exclude_indirect: boolean Exclude indirect pass from combined
-SceneRenderLayer.pass_mist -> use_pass_mist: boolean Deliver mist factor pass (0.0-1.0)
-SceneRenderLayer.pass_normal -> use_pass_normal: boolean Deliver normal pass
-SceneRenderLayer.pass_object_index -> use_pass_object_index: boolean Deliver object index pass
-SceneRenderLayer.pass_reflection -> use_pass_reflection: boolean Deliver raytraced reflection pass
-SceneRenderLayer.pass_reflection_exclude -> exclude_reflection: boolean Exclude raytraced reflection pass from combined
-SceneRenderLayer.pass_refraction -> use_pass_refraction: boolean Deliver raytraced refraction pass
-SceneRenderLayer.pass_refraction_exclude -> exclude_refraction: boolean Exclude raytraced refraction pass from combined
-SceneRenderLayer.pass_shadow -> use_pass_shadow: boolean Deliver shadow pass
-SceneRenderLayer.pass_shadow_exclude -> exclude_shadow: boolean Exclude shadow pass from combined
-SceneRenderLayer.pass_specular -> use_pass_specular: boolean Deliver specular pass
-SceneRenderLayer.pass_specular_exclude -> exclude_specular: boolean Exclude specular pass from combined
-SceneRenderLayer.pass_uv -> use_pass_uv: boolean Deliver texture UV pass
-SceneRenderLayer.pass_vector -> use_pass_vector: boolean Deliver speed vector pass
-SceneRenderLayer.pass_z -> use_pass_z: boolean Deliver Z values pass
-SceneRenderLayer.sky -> use_sky: boolean Render Sky in this Layer
-SceneRenderLayer.solid -> use_solid: boolean Render Solid faces in this Layer
-SceneRenderLayer.strand -> use_strand: boolean Render Strands in this Layer
-SceneRenderLayer.visible_layers -> layers: boolean Scene layers included in this render layer
-SceneRenderLayer.zmask -> use_zmask: boolean Only render what's in front of the solid z values
-SceneRenderLayer.zmask_layers -> layers_zmask: boolean Zmask scene layers
-SceneRenderLayer.zmask_negate -> invert_zmask: boolean For Zmask, only render what is behind solid z values instead of in front
-SceneRenderLayer.ztransp -> use_ztransp: boolean Render Z-Transparent faces in this Layer (On top of Solid and Halos)
-SceneSequence.convert_float -> use_float: boolean Convert input to float data
-SceneSequence.de_interlace -> use_deinterlace: boolean For video movies to remove fields
-SceneSequence.flip_x -> use_flip_x: boolean Flip on the X axis
-SceneSequence.flip_y -> use_flip_y: boolean Flip on the Y axis
-SceneSequence.premultiply -> use_premultiply: boolean Convert RGB from key alpha to premultiplied alpha
-SceneSequence.proxy_custom_directory -> use_proxy_custom_directory: boolean Use a custom directory to store data
-SceneSequence.proxy_custom_file -> use_proxy_custom_file: boolean Use a custom file to read proxy data from
-SceneSequence.reverse_frames -> use_reverse_frames: boolean Reverse frame order
-SceneSequence.use_color_balance -> use_color_balance: boolean (3-Way color correction) on input
-SceneSequence.use_crop -> use_crop: boolean Crop image before processing
-SceneSequence.use_proxy -> use_proxy: boolean Use a preview proxy for this strip
-SceneSequence.use_translation -> use_translation: boolean Translate image before processing
-Scopes.use_full_resolution -> use_full_resolution: boolean Sample every pixel of the image
-Screen.animation_playing -> is_animation_playing: boolean, (read-only) Animation playback is active
-Screen.fullscreen -> is_fullscreen: boolean, (read-only) An area is maximised, filling this screen
-ScrewModifier.use_normal_calculate -> use_normal_calculate: boolean Calculate the order of edges (needed for meshes, but not curves)
-ScrewModifier.use_normal_flip -> use_normal_flip: boolean Flip normals of lathed faces
-ScrewModifier.use_object_screw_offset -> use_object_screw_offset: boolean Use the distance between the objects to make a screw
-Sculpt.lock_x -> lock_x: boolean Disallow changes to the X axis of vertices
-Sculpt.lock_y -> lock_y: boolean Disallow changes to the Y axis of vertices
-Sculpt.lock_z -> lock_z: boolean Disallow changes to the Z axis of vertices
-Sculpt.symmetry_x -> use_symmetry_x: boolean Mirror brush across the X axis
-Sculpt.symmetry_y -> use_symmetry_y: boolean Mirror brush across the Y axis
-Sculpt.symmetry_z -> use_symmetry_z: boolean Mirror brush across the Z axis
-Sensor.expanded -> show_expanded: boolean Set sensor expanded in the user interface
-Sensor.invert -> invert: boolean Invert the level(output) of this sensor
-Sensor.level -> use_level: boolean Level detector, trigger controllers of new states (only applicable upon logic state transition)
-Sensor.pulse_false_level -> use_pulse_false_level: boolean Activate FALSE level triggering (pulse mode)
-Sensor.pulse_true_level -> use_pulse_true_level: boolean Activate TRUE level triggering (pulse mode)
-Sensor.tap -> use_tap: boolean Trigger controllers only for an instant, even while the sensor remains true
-Sequence.frame_locked -> use_frame_lock: boolean Lock the animation curve to the global frame counter
-Sequence.lock -> lock: boolean Lock strip so that it can't be transformed
-Sequence.mute -> mute: boolean
-Sequence.use_effect_default_fade -> use_default_fade: boolean Fade effect using the built-in default (usually make transition as long as effect strip)
-SequenceColorBalance.inverse_gain -> invert_gain: boolean
-SequenceColorBalance.inverse_gamma -> invert_gamma: boolean
-SequenceColorBalance.inverse_lift -> invert_lift: boolean
-ShaderNodeExtendedMaterial.diffuse -> use_diffuse: boolean Material Node outputs Diffuse
-ShaderNodeExtendedMaterial.invert_normal -> invert_normal: boolean Material Node uses inverted normal
-ShaderNodeExtendedMaterial.specular -> use_specular: boolean Material Node outputs Specular
-ShaderNodeMapping.clamp_maximum -> use_max: boolean Clamp the output coordinate to a maximum value
-ShaderNodeMapping.clamp_minimum -> use_min: boolean Clamp the output coordinate to a minimum value
-ShaderNodeMaterial.diffuse -> use_diffuse: boolean Material Node outputs Diffuse
-ShaderNodeMaterial.invert_normal -> invert_normal: boolean Material Node uses inverted normal
-ShaderNodeMaterial.specular -> use_specular: boolean Material Node outputs Specular
-ShaderNodeMixRGB.alpha -> use_alpha: boolean Include alpha of second input in this operation
-ShapeActionActuator.continue_last_frame -> use_continue_last_frame: boolean Restore last frame when switching on/off, otherwise play from the start each time
-ShapeKey.mute -> mute: boolean Mute this shape key
-ShrinkwrapModifier.cull_back_faces -> use_cull_back_faces: boolean Stop vertices from projecting to a back face on the target
-ShrinkwrapModifier.cull_front_faces -> use_cull_front_faces: boolean Stop vertices from projecting to a front face on the target
-ShrinkwrapModifier.keep_above_surface -> use_keep_above_surface: boolean
-ShrinkwrapModifier.negative -> use_negative_direction: boolean Allow vertices to move in the negative direction of axis
-ShrinkwrapModifier.positive -> use_positive_direction: boolean Allow vertices to move in the positive direction of axis
-ShrinkwrapModifier.x -> use_project_x: boolean
-ShrinkwrapModifier.y -> use_project_y: boolean
-ShrinkwrapModifier.z -> use_project_z: boolean
-SimpleDeformModifier.lock_x_axis -> lock_x: boolean
-SimpleDeformModifier.lock_y_axis -> lock_y: boolean
-SimpleDeformModifier.relative -> use_relative: boolean Sets the origin of deform space to be relative to the object
-SmokeDomainSettings.dissolve_smoke -> use_dissolve_smoke: boolean Enable smoke to disappear over time
-SmokeDomainSettings.dissolve_smoke_log -> use_dissolve_smoke_log: boolean Using 1/x
-SmokeDomainSettings.highres -> use_high_resolution: boolean Enable high resolution (using amplification)
-SmokeDomainSettings.initial_velocity -> use_initial_velocity: boolean Smoke inherits it's velocity from the emitter particle
-SmokeDomainSettings.viewhighres -> show_high_resolution: boolean Show high resolution (using amplification)
-NEGATE * SmokeFlowSettings.outflow -> use_outflow: boolean Deletes smoke from simulation
-SmoothModifier.x -> use_x: boolean
-SmoothModifier.y -> use_y: boolean
-SmoothModifier.z -> use_z: boolean
-SoftBodySettings.auto_step -> use_auto_step: boolean Use velocities for automagic step sizes
-SoftBodySettings.diagnose -> use_diagnose: boolean Turn on SB diagnose console prints
-SoftBodySettings.edge_collision -> use_edge_collision: boolean Edges collide too
-SoftBodySettings.estimate_matrix -> use_estimate_matrix: boolean estimate matrix .. split to COM , ROT ,SCALE
-SoftBodySettings.face_collision -> use_face_collision: boolean Faces collide too, SLOOOOOW warning
-SoftBodySettings.new_aero -> use_new_aero: boolean New aero(uses angle and length)
-SoftBodySettings.self_collision -> use_self_collision: boolean Enable naive vertex ball self collision
-SoftBodySettings.stiff_quads -> use_stiff_quads: boolean Adds diagonal springs on 4-gons
-SoftBodySettings.use_edges -> use_edges: boolean Use Edges as springs
-SoftBodySettings.use_goal -> use_goal: boolean Define forces for vertices to stick to animated position
-SolidifyModifier.invert -> invert_vertex_group: boolean Invert the vertex group influence
-SolidifyModifier.use_even_offset -> use_even_offset: boolean Maintain thickness by adjusting for sharp corners (slow, disable when not needed)
-SolidifyModifier.use_quality_normals -> use_quality_normals: boolean Calculate normals which result in more even thickness (slow, disable when not needed)
-SolidifyModifier.use_rim -> use_rim: boolean Create edge loops between the inner and outer surfaces on face edges (slow, disable when not needed)
-SolidifyModifier.use_rim_material -> use_rim_material: boolean Use in the next material for rim faces
-Sound.caching -> use_ram_cache: boolean The sound file is decoded and loaded into RAM
-SoundActuator.enable_sound_3d -> use_3d_sound: boolean Enable/Disable 3D Sound
-SpaceConsole.show_report_debug -> show_report_debug: boolean Display debug reporting info
-SpaceConsole.show_report_error -> show_report_error: boolean Display error text
-SpaceConsole.show_report_info -> show_report_info: boolean Display general information
-SpaceConsole.show_report_operator -> show_report_operator: boolean Display the operator log
-SpaceConsole.show_report_warn -> show_report_warning: boolean Display warnings
-SpaceDopeSheetEditor.automerge_keyframes -> use_automerge_keyframes: boolean Automatically merge nearby keyframes
-SpaceDopeSheetEditor.realtime_updates -> use_realtime_updates: boolean When transforming keyframes, changes to the animation data are flushed to other views
-SpaceDopeSheetEditor.show_cframe_indicator -> show_frame_indicator: boolean Show frame number beside the current frame indicator line
-SpaceDopeSheetEditor.show_seconds -> show_seconds: boolean, (read-only) Show timing in seconds not frames
-SpaceDopeSheetEditor.show_sliders -> show_sliders: boolean Show sliders beside F-Curve channels
-SpaceDopeSheetEditor.use_marker_sync -> use_marker_sync: boolean Sync Markers with keyframe edits
-SpaceGraphEditor.automerge_keyframes -> use_automerge_keyframes: boolean Automatically merge nearby keyframes
-SpaceGraphEditor.has_ghost_curves -> has_ghost_curves: boolean Graph Editor instance has some ghost curves stored
-SpaceGraphEditor.only_selected_curves_handles -> use_only_selected_curves_handles: boolean Only keyframes of selected F-Curves are visible and editable
-SpaceGraphEditor.only_selected_keyframe_handles -> use_only_selected_keyframe_handles: boolean Only show and edit handles of selected keyframes
-SpaceGraphEditor.realtime_updates -> use_realtime_updates: boolean When transforming keyframes, changes to the animation data are flushed to other views
-SpaceGraphEditor.show_cframe_indicator -> show_frame_indicator: boolean Show frame number beside the current frame indicator line
-SpaceGraphEditor.show_cursor -> show_cursor: boolean Show 2D cursor
-SpaceGraphEditor.show_handles -> show_handles: boolean Show handles of Bezier control points
-SpaceGraphEditor.show_seconds -> show_seconds: boolean, (read-only) Show timing in seconds not frames
-SpaceGraphEditor.show_sliders -> show_sliders: boolean Show sliders beside F-Curve channels
-SpaceImageEditor.draw_repeated -> show_repeated: boolean Draw the image repeated outside of the main view
-SpaceImageEditor.image_painting -> use_image_paint: boolean Enable image painting mode
-SpaceImageEditor.image_pin -> use_image_pin: boolean Display current image regardless of object selection
-SpaceImageEditor.show_paint -> show_paint: boolean, (read-only) Show paint related properties
-SpaceImageEditor.show_render -> show_render: boolean, (read-only) Show render related properties
-SpaceImageEditor.show_uvedit -> show_uvedit: boolean, (read-only) Show UV editing related properties
-SpaceImageEditor.update_automatically -> use_realtime_updates: boolean Update other affected window spaces automatically to reflect changes during interactive operations such as transform
-SpaceImageEditor.use_grease_pencil -> use_grease_pencil: boolean Display and edit the grease pencil freehand annotations overlay
-SpaceLogicEditor.actuators_show_active_objects -> show_actuators_active_objects: boolean Show actuators of active object
-SpaceLogicEditor.actuators_show_active_states -> show_actuators_active_states: boolean Show only actuators connected to active states
-SpaceLogicEditor.actuators_show_linked_controller -> show_actuators_linked_controller: boolean Show linked objects to the actuator
-SpaceLogicEditor.actuators_show_selected_objects -> show_actuators_selected_objects: boolean Show actuators of all selected objects
-SpaceLogicEditor.controllers_show_active_objects -> show_controllers_active_objects: boolean Show controllers of active object
-SpaceLogicEditor.controllers_show_linked_controller -> show_controllers_linked_controller: boolean Show linked objects to sensor/actuator
-SpaceLogicEditor.controllers_show_selected_objects -> show_controllers_selected_objects: boolean Show controllers of all selected objects
-SpaceLogicEditor.sensors_show_active_objects -> show_sensors_active_objects: boolean Show sensors of active object
-SpaceLogicEditor.sensors_show_active_states -> show_sensors_active_states: boolean Show only sensors connected to active states
-SpaceLogicEditor.sensors_show_linked_controller -> show_sensors_linked_controller: boolean Show linked objects to the controller
-SpaceLogicEditor.sensors_show_selected_objects -> show_sensors_selected_objects: boolean Show sensors of all selected objects
-SpaceNLA.realtime_updates -> use_realtime_updates: boolean When transforming strips, changes to the animation data are flushed to other views
-SpaceNLA.show_cframe_indicator -> show_frame_indicator: boolean Show frame number beside the current frame indicator line
-SpaceNLA.show_seconds -> show_seconds: boolean, (read-only) Show timing in seconds not frames
-SpaceNLA.show_strip_curves -> show_strip_curves: boolean Show influence curves on strips
-SpaceNodeEditor.backdrop -> show_backdrop: boolean Use active Viewer Node output as backdrop for compositing nodes
-SpaceOutliner.match_case_sensitive -> use_match_case_sensitive: boolean Only use case sensitive matches of search string
-SpaceOutliner.match_complete -> use_match_complete: boolean Only use complete matches of search string
-SpaceOutliner.show_restriction_columns -> show_restriction_columns: boolean Show column
-SpaceProperties.brush_texture -> show_brush_texture: boolean Show brush textures
-SpaceProperties.use_pin_id -> use_pin_id: boolean Use the pinned context
-SpaceSequenceEditor.draw_frames -> show_frames: boolean Draw frames rather than seconds
-SpaceSequenceEditor.draw_safe_margin -> show_safe_margin: boolean Draw title safe margins in preview
-SpaceSequenceEditor.separate_color_preview -> show_separate_color: boolean Separate color channels in preview
-SpaceSequenceEditor.show_cframe_indicator -> show_frame_indicator: boolean Show frame number beside the current frame indicator line
-SpaceSequenceEditor.use_grease_pencil -> use_grease_pencil: boolean Display and edit the grease pencil freehand annotations overlay
-SpaceSequenceEditor.use_marker_sync -> use_marker_sync: boolean Transform markers as well as strips
-SpaceTextEditor.find_all -> use_find_all: boolean Search in all text datablocks, instead of only the active one
-SpaceTextEditor.find_wrap -> use_find_wrap: boolean Search again from the start of the file when reaching the end
-SpaceTextEditor.line_numbers -> show_line_numbers: boolean Show line numbers next to the text
-SpaceTextEditor.live_edit -> use_live_edit: boolean Run python while editing
-SpaceTextEditor.overwrite -> use_overwrite: boolean Overwrite characters when typing rather than inserting them
-SpaceTextEditor.syntax_highlight -> show_syntax_highlight: boolean Syntax highlight for scripting
-SpaceTextEditor.word_wrap -> use_word_wrap: boolean Wrap words if there is not enough horizontal space
-SpaceTimeline.only_selected -> show_only_selected: boolean Show keyframes for active Object and/or its selected channels only
-SpaceTimeline.play_all_3d -> use_play_3d_editors: boolean
-SpaceTimeline.play_anim -> use_play_animation_editors: boolean
-SpaceTimeline.play_buttons -> use_play_properties_editors: boolean
-SpaceTimeline.play_image -> use_play_image_editors: boolean
-SpaceTimeline.play_nodes -> use_play_node_editors: boolean
-SpaceTimeline.play_sequencer -> use_play_sequence_editors: boolean
-SpaceTimeline.play_top_left -> use_play_top_left_3d_editor: boolean
-SpaceTimeline.show_cframe_indicator -> show_frame_indicator: boolean Show frame number beside the current frame indicator line
-SpaceUVEditor.constrain_to_image_bounds -> use_constrain_to_image_bounds: boolean Constraint to stay within the image bounds while editing
-SpaceUVEditor.draw_modified_edges -> show_modified_edges: boolean Draw edges after modifiers are applied
-SpaceUVEditor.draw_other_objects -> show_other_objects: boolean Draw other selected objects that share the same image
-SpaceUVEditor.draw_smooth_edges -> show_smooth_edges: boolean Draw UV edges anti-aliased
-SpaceUVEditor.draw_stretch -> show_stretch: boolean Draw faces colored according to the difference in shape between UVs and their 3D coordinates (blue for low distortion, red for high distortion)
-SpaceUVEditor.live_unwrap -> use_live_unwrap: boolean Continuously unwrap the selected UV island while transforming pinned vertices
-SpaceUVEditor.normalized_coordinates -> show_normalized_coordinates: boolean Display UV coordinates from 0.0 to 1.0 rather than in pixels
-SpaceUVEditor.snap_to_pixels -> use_snap_to_pixels: boolean Snap UVs to pixel locations while editing
-SpaceView3D.all_object_origins -> show_all_objects_origin: boolean Show the object origin center dot for all (selected and unselected) objects
-SpaceView3D.display_background_images -> show_background_images: boolean Display reference images behind objects in the 3D View
-SpaceView3D.display_floor -> show_floor: boolean Show the ground plane grid in perspective view
-SpaceView3D.display_render_override -> show_only_render: boolean Display only objects which will be rendered
-SpaceView3D.display_x_axis -> show_axis_x: boolean Show the X axis line in perspective view
-SpaceView3D.display_y_axis -> show_axis_y: boolean Show the Y axis line in perspective view
-SpaceView3D.display_z_axis -> show_axis_z: boolean Show the Z axis line in perspective view
-SpaceView3D.layers -> layers: boolean Layers visible in this 3D View
-SpaceView3D.lock_camera_and_layers -> lock_camera_and_layers: boolean Use the scene's active camera and layers in this view, rather than local layers
-SpaceView3D.manipulator -> use_manipulator: boolean Use a 3D manipulator widget for controlling transforms
-SpaceView3D.manipulator_rotate -> use_manipulator_rotate: boolean Use the manipulator for rotation transformations
-SpaceView3D.manipulator_scale -> use_manipulator_scale: boolean Use the manipulator for scale transformations
-SpaceView3D.manipulator_translate -> use_manipulator_translate: boolean Use the manipulator for movement transformations
-SpaceView3D.occlude_geometry -> use_occlude_geometry: boolean Limit selection to visible (clipped with depth buffer)
-SpaceView3D.outline_selected -> show_outline_selected: boolean Show an outline highlight around selected objects in non-wireframe views
-SpaceView3D.pivot_point_align -> use_pivot_point_align: boolean Manipulate object centers only
-SpaceView3D.relationship_lines -> show_relationship_lines: boolean Show dashed lines indicating parent or constraint relationships
-SpaceView3D.textured_solid -> show_textured_solid: boolean Display face-assigned textures in solid view
-SpaceView3D.used_layers -> layers_used: boolean, (read-only) Layers that contain something
-SpeedControlSequence.curve_compress_y -> use_curve_compress_y: boolean Scale F-Curve value to get the target frame number, F-Curve value runs from 0.0 to 1.0
-SpeedControlSequence.curve_velocity -> use_curve_velocity: boolean Interpret the F-Curve value as a velocity instead of a frame number
-SpeedControlSequence.frame_blending -> use_frame_blend: boolean Blend two frames into the target for a smoother result
-Spline.bezier_u -> use_bezier_u: boolean Make this nurbs curve or surface act like a bezier spline in the U direction (Order U must be 3 or 4, Cyclic U must be disabled)
-Spline.bezier_v -> use_bezier_v: boolean Make this nurbs surface act like a bezier spline in the V direction (Order V must be 3 or 4, Cyclic V must be disabled)
-Spline.cyclic_u -> use_cyclic_u: boolean Make this curve or surface a closed loop in the U direction
-Spline.cyclic_v -> use_cyclic_v: boolean Make this surface a closed loop in the V direction
-Spline.endpoint_u -> use_endpoint_u: boolean Make this nurbs curve or surface meet the endpoints in the U direction (Cyclic U must be disabled)
-Spline.endpoint_v -> use_endpoint_v: boolean Make this nurbs surface meet the endpoints in the V direction (Cyclic V must be disabled)
-Spline.hide -> hide: boolean Hide this curve in editmode
-Spline.smooth -> use_smooth: boolean Smooth the normals of the surface or beveled curve
-SplineIKConstraint.chain_offset -> use_chain_offset: boolean Offset the entire chain relative to the root joint
-SplineIKConstraint.even_divisions -> use_even_divisions: boolean Ignore the relative lengths of the bones when fitting to the curve
-SplineIKConstraint.use_curve_radius -> use_curve_radius: boolean Average radius of the endpoints is used to tweak the X and Z Scaling of the bones, on top of XZ Scale mode
-SplineIKConstraint.y_stretch -> use_y_stretch: boolean Stretch the Y axis of the bones to fit the curve
-
-SpotLamp.auto_clip_end -> use_auto_clip_end: boolean Automatic calculation of clipping-end, based on visible vertices
-SpotLamp.auto_clip_start -> use_auto_clip_start: boolean Automatic calculation of clipping-start, based on visible vertices
-SpotLamp.halo -> use_halo: boolean Renders spotlight with a volumetric halo (Buffer Shadows)
-SpotLamp.only_shadow -> use_only_shadow: boolean Causes light to cast shadows only without illuminating objects
-SpotLamp.shadow_layer -> use_shadow_layer: boolean Causes only objects on the same layer to cast shadows
-SpotLamp.show_cone -> show_cone: boolean Draw transparent cone in 3D view to visualize which objects are contained in it
-SpotLamp.sphere -> use_sphere: boolean Sets light intensity to zero beyond lamp distance
-SpotLamp.square -> use_square: boolean Casts a square spot light shape
-StateActuator.state -> states: boolean
-SubsurfModifier.optimal_display -> show_only_control_edges: boolean Skip drawing/rendering of interior subdivided edges
-SubsurfModifier.subsurf_uv -> use_subsurf_uv: boolean Use subsurf to subdivide UVs
-SunLamp.only_shadow -> use_only_shadow: boolean Causes light to cast shadows only without illuminating objects
-SunLamp.shadow_layer -> use_shadow_layer: boolean Causes only objects on the same layer to cast shadows
-SurfaceCurve.map_along_length -> use_map_along_length: boolean Generate texture mapping coordinates following the curve direction, rather than the local bounding box
-SurfaceCurve.vertex_normal_flip -> use_vertex_normal_flip: boolean Flip vertex normals towards the camera during render
-TexMapping.has_maximum -> use_max: boolean Whether to use maximum clipping value
-TexMapping.has_minimum -> use_min: boolean Whether to use minimum clipping value
-Text.dirty -> is_dirty: boolean, (read-only) Text file has been edited since last save
-Text.memory -> is_in_memory: boolean, (read-only) Text file is in memory, without a corresponding file on disk
-Text.modified -> is_modified: boolean, (read-only) Text file on disk is different than the one in memory
-Text.tabs_as_spaces -> use_tabs_as_spaces: boolean Automatically converts all new tabs into spaces
-Text.use_module -> use_module: boolean Register this text as a module on loading, Text name must end with '.py'
-TextCharacterFormat.bold -> use_bold: boolean
-TextCharacterFormat.italic -> use_italic: boolean
-TextCharacterFormat.style -> use_style: boolean
-TextCharacterFormat.underline -> use_underline: boolean
-TextCharacterFormat.wrap -> use_wrap: boolean
-TextCurve.fast -> use_fast_editing: boolean Don't fill polygons while editing
-TextCurve.map_along_length -> use_map_along_length: boolean Generate texture mapping coordinates following the curve direction, rather than the local bounding box
-TextCurve.vertex_normal_flip -> use_vertex_normal_flip: boolean Flip vertex normals towards the camera during render
-TextMarker.edit_all -> use_edit_all: boolean, (read-only) Edit all markers of the same group as one
-TextMarker.temporary -> is_temporary: boolean, (read-only) Marker is temporary
-Texture.use_color_ramp -> use_color_ramp: boolean Toggle color ramp operations
-Texture.use_nodes -> use_nodes: boolean Make this a node-based texture
-Texture.use_preview_alpha -> use_preview_alpha: boolean Show Alpha in Preview Render
-TextureNodeMixRGB.alpha -> use_alpha: boolean Include alpha of second input in this operation
-TextureSlot.negate -> invert: boolean Inverts the values of the texture to reverse its effect
-TextureSlot.rgb_to_intensity -> use_rgb_to_intensity: boolean Converts texture RGB values to intensity (gray) values
-TextureSlot.stencil -> use_stencil: boolean Use this texture as a blending value on the next texture
-ThemeBoneColorSet.colored_constraints -> show_colored_constraints: boolean Allow the use of colors indicating constraints/keyed status
-ThemeWidgetColors.shaded -> show_shaded: boolean
-ToolSettings.auto_normalize -> use_auto_normalize: boolean Ensure all bone-deforming vertex groups add up to 1.0 while weight painting
-ToolSettings.automerge_editing -> use_automerge_editing: boolean Automatically merge vertices moved to the same location
-ToolSettings.bone_sketching -> use_bone_sketching: boolean DOC BROKEN
-ToolSettings.etch_autoname -> use_etch_autoname: boolean DOC BROKEN
-ToolSettings.etch_overdraw -> use_etch_overdraw: boolean DOC BROKEN
-ToolSettings.etch_quick -> use_etch_quick: boolean DOC BROKEN
-ToolSettings.mesh_selection_mode -> mesh_selection_mode: boolean Which mesh elements selection works on
-ToolSettings.record_with_nla -> use_record_with_nla: boolean Add a new NLA Track + Strip for every loop/pass made over the animation to allow non-destructive tweaking
-ToolSettings.snap -> use_snap: boolean Snap during transform
-ToolSettings.snap_align_rotation -> use_snap_align_rotation: boolean Align rotation with the snapping target
-ToolSettings.snap_peel_object -> use_snap_peel_object: boolean Consider objects as whole when finding volume center
-ToolSettings.snap_project -> use_snap_project: boolean Project vertices on the surface of other objects
-ToolSettings.use_auto_keying -> use_keyframe_insert_auto: boolean Automatic keyframe insertion for Objects and Bones
-ToolSettings.uv_local_view -> show_local_view: boolean Draw only faces with the currently displayed image assigned
-ToolSettings.uv_sync_selection -> use_uv_sync_selection: boolean Keep UV and edit mode mesh selection in sync
-TrackToConstraint.target_z -> use_target_z: boolean Target's Z axis, not World Z axis, will constraint the Up direction
-TransformConstraint.extrapolate_motion -> use_motion_extrapolate: boolean Extrapolate ranges
-TransformSequence.uniform_scale -> use_uniform_scale: boolean Scale uniformly, preserving aspect ratio
-UILayout.active -> show_active: boolean
-UILayout.enabled -> show_enabled: boolean
-UVProjectModifier.override_image -> use_image_override: boolean Override faces' current images with the given image
-UnitSettings.use_separate -> use_separate: boolean Display units in pairs
-UserPreferencesEdit.auto_keyframe_insert_available -> use_keyframe_insert_available: boolean Automatic keyframe insertion in available curves
-UserPreferencesEdit.auto_keyframe_insert_keyingset -> use_keyframe_insert_keyingset: boolean Automatic keyframe insertion using active Keying Set
-UserPreferencesEdit.drag_immediately -> use_drag_immediately: boolean Moving things with a mouse drag confirms when releasing the button
-UserPreferencesEdit.duplicate_action -> use_duplicate_action: boolean Causes actions to be duplicated with the object
-UserPreferencesEdit.duplicate_armature -> use_duplicate_armature: boolean Causes armature data to be duplicated with the object
-UserPreferencesEdit.duplicate_curve -> use_duplicate_curve: boolean Causes curve data to be duplicated with the object
-UserPreferencesEdit.duplicate_fcurve -> use_duplicate_fcurve: boolean Causes F-curve data to be duplicated with the object
-UserPreferencesEdit.duplicate_lamp -> use_duplicate_lamp: boolean Causes lamp data to be duplicated with the object
-UserPreferencesEdit.duplicate_material -> use_duplicate_material: boolean Causes material data to be duplicated with the object
-UserPreferencesEdit.duplicate_mesh -> use_duplicate_mesh: boolean Causes mesh data to be duplicated with the object
-UserPreferencesEdit.duplicate_metaball -> use_duplicate_metaball: boolean Causes metaball data to be duplicated with the object
-UserPreferencesEdit.duplicate_particle -> use_duplicate_particle: boolean Causes particle systems to be duplicated with the object
-UserPreferencesEdit.duplicate_surface -> use_duplicate_surface: boolean Causes surface data to be duplicated with the object
-UserPreferencesEdit.duplicate_text -> use_duplicate_text: boolean Causes text data to be duplicated with the object
-UserPreferencesEdit.duplicate_texture -> use_duplicate_texture: boolean Causes texture data to be duplicated with the object
-UserPreferencesEdit.enter_edit_mode -> use_enter_edit_mode: boolean Enter Edit Mode automatically after adding a new object
-UserPreferencesEdit.global_undo -> use_global_undo: boolean Global undo works by keeping a full copy of the file itself in memory, so takes extra memory
-UserPreferencesEdit.grease_pencil_simplify_stroke -> use_grease_pencil_simplify_stroke: boolean Simplify the final stroke
-UserPreferencesEdit.grease_pencil_smooth_stroke -> use_grease_pencil_smooth_stroke: boolean Smooth the final stroke
-UserPreferencesEdit.insertkey_xyz_to_rgb -> use_insertkey_xyz_to_rgb: boolean Color for newly added transformation F-Curves (Location, Rotation, Scale) and also Color is based on the transform axis
-UserPreferencesEdit.keyframe_insert_needed -> use_keyframe_insert_needed: boolean Keyframe insertion only when keyframe needed
-UserPreferencesEdit.use_auto_keying -> use_auto_keying: boolean Automatic keyframe insertion for Objects and Bones
-UserPreferencesEdit.use_negative_frames -> use_negative_frames: boolean Current frame number can be manually set to a negative value
-UserPreferencesEdit.use_visual_keying -> use_visual_keying: boolean Use Visual keying automatically for constrained objects
-UserPreferencesFilePaths.auto_save_temporary_files -> use_auto_save_temporary_files: boolean Automatic saving of temporary files
-UserPreferencesFilePaths.compress_file -> use_file_compression: boolean Enable file compression when saving .blend files
-UserPreferencesFilePaths.filter_file_extensions -> use_filter_files: boolean Display only files with extensions in the image select window
-UserPreferencesFilePaths.hide_dot_files_datablocks -> show_hidden_files_datablocks: boolean Hide files/datablocks that start with a dot(.*)
-UserPreferencesFilePaths.load_ui -> use_load_ui: boolean Load user interface setup when loading .blend files
-UserPreferencesFilePaths.save_preview_images -> use_save_preview_images: boolean Enables automatic saving of preview images in the .blend file
-UserPreferencesFilePaths.use_relative_paths -> use_relative_paths: boolean Default relative path option for the file selector
-UserPreferencesInput.continuous_mouse -> use_continuous_mouse: boolean Allow moving the mouse outside the view on some manipulations (transform, ui control drag)
-UserPreferencesInput.emulate_3_button_mouse -> use_emulate_3_button_mouse: boolean Emulates Middle Mouse with Alt+LeftMouse (doesn't work with Left Mouse Select option)
-UserPreferencesInput.emulate_numpad -> use_emulate_numpad: boolean Causes the 1 to 0 keys to act as the numpad (useful for laptops)
-UserPreferencesInput.invert_zoom_direction -> invert_zoom_direction: boolean Invert the axis of mouse movement for zooming
-UserPreferencesSystem.auto_execute_scripts -> use_scripts_auto_execute: boolean Allow any .blend file to run scripts automatically (unsafe with blend files from an untrusted source)
-UserPreferencesSystem.enable_all_codecs -> use_preview_images: boolean Enables automatic saving of preview images in the .blend file (Windows only)
-UserPreferencesSystem.international_fonts -> use_international_fonts: boolean Use international fonts
-UserPreferencesSystem.tabs_as_spaces -> use_tabs_as_spaces: boolean Automatically converts all new tabs into spaces for new and loaded text files
-UserPreferencesSystem.translate_buttons -> use_translate_buttons: boolean Translate button labels
-UserPreferencesSystem.translate_toolbox -> use_translate_toolbox: boolean Translate toolbox menu
-UserPreferencesSystem.translate_tooltips -> use_translate_tooltips: boolean Translate Tooltips
-UserPreferencesSystem.use_antialiasing -> use_antialiasing: boolean Use anti-aliasing for the 3D view (may impact redraw performance)
-UserPreferencesSystem.use_mipmaps -> use_mipmaps: boolean Scale textures for the 3D View (looks nicer but uses more memory and slows image reloading)
-UserPreferencesSystem.use_textured_fonts -> use_textured_fonts: boolean Use textures for drawing international fonts
-UserPreferencesSystem.use_vbos -> use_vertex_buffer_objects: boolean Use Vertex Buffer Objects (or Vertex Arrays, if unsupported) for viewport rendering
-UserPreferencesSystem.use_weight_color_range -> use_weight_color_range: boolean Enable color range used for weight visualization in weight painting mode
-UserPreferencesView.auto_depth -> use_mouse_auto_depth: boolean Use the depth under the mouse to improve view pan/rotate/zoom functionality
-UserPreferencesView.auto_perspective -> use_auto_perspective: boolean Automatically switch between orthographic and perspective when changing from top/front/side views
-UserPreferencesView.directional_menus -> use_directional_menus: boolean Otherwise menus, etc will always be top to bottom, left to right, no matter opening direction
-UserPreferencesView.display_object_info -> show_object_info: boolean Display objects name and frame number in 3D view
-UserPreferencesView.global_pivot -> use_global_pivot: boolean Lock the same rotation/scaling pivot in all 3D Views
-UserPreferencesView.global_scene -> use_global_scene: boolean Forces the current Scene to be displayed in all Screens
-UserPreferencesView.open_mouse_over -> use_mouse_over_open: boolean Open menu buttons and pulldowns automatically when the mouse is hovering
-UserPreferencesView.rotate_around_selection -> use_rotate_around_selection: boolean Use selection as the pivot point
-UserPreferencesView.show_mini_axis -> show_mini_axis: boolean Show a small rotating 3D axis in the bottom left corner of the 3D View
-UserPreferencesView.show_playback_fps -> show_playback_fps: boolean Show the frames per second screen refresh rate, while animation is played back
-UserPreferencesView.show_splash -> show_splash: boolean Display splash screen on startup
-UserPreferencesView.show_view_name -> show_view_name: boolean Show the name of the view's direction in each 3D View
-UserPreferencesView.tooltips -> show_tooltips: boolean Display tooltips
-UserPreferencesView.use_column_layout -> show_column_layout: boolean Use a column layout for toolbox
-UserPreferencesView.use_large_cursors -> show_large_cursors: boolean Use large mouse cursors when available
-UserPreferencesView.use_manipulator -> show_manipulator: boolean Use 3D transform manipulator
-UserPreferencesView.use_middle_mouse_paste -> use_mouse_mmb_paste: boolean In text window, paste with middle mouse button instead of panning
-UserPreferencesView.wheel_invert_zoom -> invert_mouse_wheel_zoom: boolean Swap the Mouse Wheel zoom direction
-UserPreferencesView.zoom_to_mouse -> use_zoom_to_mouse: boolean Zoom in towards the mouse pointer's position in the 3D view, rather than the 2D window center
-UserSolidLight.enabled -> use: boolean Enable this OpenGL light in solid draw mode
-VertexPaint.all_faces -> use_all_faces: boolean Paint on all faces inside brush
-VertexPaint.normals -> use_normal: boolean Applies the vertex normal before painting
-VertexPaint.spray -> use_spray: boolean Keep applying paint effect while holding mouse
-VisibilityActuator.children -> apply_to_children: boolean Set all the children of this object to the same visibility/occlusion recursively
-VisibilityActuator.occlusion -> use_occlusion: boolean Set the object to occlude objects behind it. Initialized from the object type in physics button
-VisibilityActuator.visible -> use_visible: boolean Set the objects visible. Initialized from the objects render restriction toggle (access in the outliner)
-VoxelData.still -> use_still_frame: boolean Always render a still frame from the voxel data sequence
-WaveModifier.cyclic -> use_cyclic: boolean Cyclic wave effect
-WaveModifier.normals -> use_normal: boolean Displace along normal
-WaveModifier.x -> use_x: boolean X axis motion
-WaveModifier.x_normal -> use_normal_x: boolean Enable displacement along the X normal
-WaveModifier.y -> use_y: boolean Y axis motion
-WaveModifier.y_normal -> use_normal_y: boolean Enable displacement along the Y normal
-WaveModifier.z_normal -> use_normal_z: boolean Enable displacement along the Z normal
-World.blend_sky -> use_sky_blend: boolean Render background with natural progression from horizon to zenith
-World.paper_sky -> use_sky_paper: boolean Flatten blend or texture coordinates
-World.real_sky -> use_sky_real: boolean Render background with a real horizon, relative to the camera angle
-WorldLighting.falloff -> use_falloff: boolean
-WorldLighting.pixel_cache -> use_cache: boolean Cache AO results in pixels and interpolate over neighbouring pixels for speedup (for Approximate)
-WorldLighting.use_ambient_occlusion -> use_ambient_occlusian: boolean Use Ambient Occlusion to add shadowing based on distance between objects
-WorldLighting.use_environment_lighting -> use_environment_lighting: boolean Add light coming from the environment
-WorldLighting.use_indirect_lighting -> use_indirect_lighting: boolean Add indirect light bouncing of surrounding objects
-WorldMistSettings.use_mist -> use_mist: boolean Occlude objects with the environment color as they are further away
-WorldStarsSettings.use_stars -> use_stars: boolean Enable starfield generation
-WorldTextureSlot.map_blend -> use_map_blend: boolean Affect the color progression of the background
-WorldTextureSlot.map_horizon -> use_map_horizon: boolean Affect the color of the horizon
-WorldTextureSlot.map_zenith_down -> use_map_zenith_down: boolean Affect the color of the zenith below
-WorldTextureSlot.map_zenith_up -> use_map_zenith_up: boolean Affect the color of the zenith above
diff --git a/source/blender/makesrna/rna_cleanup/rna_cleaner.py b/source/blender/makesrna/rna_cleanup/rna_cleaner.py
index a0ce76d261d..ae17ade36d7 100755
--- a/source/blender/makesrna/rna_cleanup/rna_cleaner.py
+++ b/source/blender/makesrna/rna_cleanup/rna_cleaner.py
@@ -6,6 +6,9 @@ This script is used to help cleaning RNA api.
Typical line in the input file (elements in [] are optional).
[comment *] ToolSettings.snap_align_rotation -> use_snap_align_rotation: boolean [Align rotation with the snapping target]
+
+Geterate output format from blender run this:
+ ./blender.bin --background --python ./release/scripts/modules/rna_info.py 2> source/blender/makesrna/rna_cleanup/out.txt
"""
@@ -73,18 +76,21 @@ def check_commandline():
return (inputfile, sort_priority)
-def check_prefix(prop):
+def check_prefix(prop, btype):
# reminder: props=[comment, changed, bclass, bfrom, bto, kwcheck, btype, description]
- if '_' in prop:
- prefix = prop.split('_')[0]
- if prefix not in kw_prefixes:
- return 'BAD-PREFIX: ' + prefix
+ if btype == "boolean":
+ if '_' in prop:
+ prefix = prop.split('_')[0]
+ if prefix not in kw_prefixes:
+ return 'BAD-PREFIX: ' + prefix
+ else:
+ return prefix + '_'
+ elif prop in kw:
+ return 'SPECIAL-KEYWORD: ' + prop
else:
- return prefix + '_'
- elif prop in kw:
- return 'SPECIAL-KEYWORD: ' + prop
+ return 'BAD-KEYWORD: ' + prop
else:
- return 'BAD-KEYWORD: ' + prop
+ return ""
def check_if_changed(a,b):
@@ -103,14 +109,25 @@ def get_props_from_txt(input_filename):
props_list=[]
props_length_max=[0,0,0,0,0,0,0,0]
- for line in file_lines:
+
+ done_text = "+"
+ done = 0
+ tot = 0
+
+ for iii, line in enumerate(file_lines):
# debug
#print(line)
-
+ line_strip = line.strip()
# empty line or comment
- if not line.strip() or line.startswith('#'):
+ if not line_strip:
continue
+
+ if line_strip == "EOF":
+ break
+
+ if line.startswith("#"):
+ line = line[1:]
# class
[bclass, tail] = [x.strip() for x in line.split('.', 1)]
@@ -135,22 +152,28 @@ def get_props_from_txt(input_filename):
# type, description
try:
[btype, description] = tail.split(None, 1)
- if '"' in description:
- description.replace('"', "'")
+ # make life easy and strip quotes
+ description = description.replace("'", "").replace('"', "").replace("\\", "").strip()
except ValueError:
[btype, description] = [tail,'NO DESCRIPTION']
# keyword-check
- kwcheck = check_prefix(bto)
+ kwcheck = check_prefix(bto, btype)
# changed
changed = check_if_changed(bfrom, bto)
# lists formatting
- props=[comment, changed, bclass, bfrom, bto, kwcheck, btype, repr(description)]
+ props=[comment, changed, bclass, bfrom, bto, kwcheck, btype, description]
props_list.append(props)
props_length_max=list(map(max,zip(props_length_max,list(map(len,props)))))
+ if done_text in comment:
+ done += 1
+ tot += 1
+
+ print("Total done %.2f" % (done / tot * 100.0) )
+
return (props_list,props_length_max)
@@ -165,9 +188,10 @@ def get_props_from_py(input_filename):
props_length_max = [0 for i in rna_api[0]] # this way if the vector will take more elements we are safe
for index,props in enumerate(rna_api):
comment, changed, bclass, bfrom, bto, kwcheck, btype, description = props
- kwcheck = check_prefix(bto) # keyword-check
+ kwcheck = check_prefix(bto, btype) # keyword-check
changed = check_if_changed(bfrom, bto) # changed?
description = repr(description)
+ description = description.replace("'", "").replace('"', "").replace("\\", "").strip()
rna_api[index] = [comment, changed, bclass, bfrom, bto, kwcheck, btype, description]
props_length = list(map(len,props)) # lengths
props_length_max = list(map(max,zip(props_length_max,props_length))) # max lengths
@@ -189,11 +213,14 @@ def sort(props_list, sort_priority):
"""
# order based on the i-th element in lists
- i = sort_choices.index(sort_priority)
- if i == 0:
- props_list = sorted(props_list, key=lambda p: p[i], reverse=True)
+ if sort_priority == "class.to":
+ props_list = sorted(props_list, key=lambda p: (p[2], p[4]))
else:
- props_list = sorted(props_list, key=lambda p: p[i])
+ i = sort_choices.index(sort_priority)
+ if i == 0:
+ props_list = sorted(props_list, key=lambda p: p[i], reverse=True)
+ else:
+ props_list = sorted(props_list, key=lambda p: p[i])
print ('\nSorted by %s.' % font_bold(sort_priority))
return props_list
@@ -233,16 +260,21 @@ def write_files(basename, props_list, props_length_max):
props_list = [['NOTE', 'CHANGED', 'CLASS', 'FROM', 'TO', 'KEYWORD-CHECK', 'TYPE', 'DESCRIPTION']] + props_list
for props in props_list:
#txt
+
+ # quick way we can tell if it changed
+ if props[3] == props[4]: txt += "#"
+ else: txt += " "
+
if props[0] != '': txt += '%s * ' % props[0] # comment
- txt += '%s.%s -> %s: %s %s\n' % tuple(props[2:5] + props[6:]) # skipping keyword-check
+ txt += '%s.%s -> %s: %s "%s"\n' % tuple(props[2:5] + props[6:]) # skipping keyword-check
# rna_api
if props[0] == 'NOTE': indent = '# '
else: indent = ' '
- rna += indent + '("%s", "%s", "%s", "%s", %s),\n' % tuple(props[2:5] + props[6:]) # description is already string formatted
+ rna += indent + '("%s", "%s", "%s", "%s", "%s"),\n' % tuple(props[2:5] + props[6:]) # description is already string formatted
# py
blanks = [' '* (x[0]-x[1]) for x in zip(props_length_max,list(map(len,props)))]
props = [('"%s"%s' if props[-1] != x[0] else "%s%s") % (x[0],x[1]) for x in zip(props,blanks)]
- py += indent + '(%s, %s, %s, %s, %s, %s, %s, %s),\n' % tuple(props)
+ py += indent + '(%s, %s, %s, %s, %s, %s, %s, "%s"),\n' % tuple(props)
f_txt.write(txt)
f_py.write("rna_api = [\n%s]\n" % py)
@@ -266,10 +298,10 @@ def main():
global sort_choices, default_sort_choice
global kw_prefixes, kw
- sort_choices = ['note','changed','class','from','to','kw']
- default_sort_choice = sort_choices[0]
+ sort_choices = ['note','changed','class','from','to','kw', 'class.to']
+ default_sort_choice = sort_choices[-1]
kw_prefixes = [ 'active','apply','bl','exclude','has','invert','is','lock', \
- 'pressed','show','show_only','use','use_only','layers','states']
+ 'pressed','show','show_only','use','use_only','layers','states', 'select']
kw = ['active','hide','invert','select','layers','mute','states','use','lock']
input_filename, sort_priority = check_commandline()
diff --git a/source/blender/makesrna/rna_cleanup/rna_cleaner_merge.py b/source/blender/makesrna/rna_cleanup/rna_cleaner_merge.py
new file mode 100755
index 00000000000..8d2fe07b774
--- /dev/null
+++ b/source/blender/makesrna/rna_cleanup/rna_cleaner_merge.py
@@ -0,0 +1,61 @@
+#! /usr/bin/env python3.1
+
+import sys
+
+'''
+Example usage:
+ python3 rna_cleaner_merge.py out_work.py rna_booleans_work.py
+'''
+def main():
+
+ def work_line_id(line):
+ return line[2].split("|")[-1], line[3] # class/from
+
+
+ if not (sys.argv[-1].endswith(".py") and sys.argv[-2].endswith(".py")):
+ print("Only accepts 2 py files as arguments.")
+
+ sys.path.insert(0, ".")
+
+ mod_from = __import__(sys.argv[-1][:-3])
+ mod_to = __import__(sys.argv[-2][:-3])
+
+ mod_to_dict = dict([(work_line_id(line), line) for line in mod_to.rna_api])
+ mod_from_dict = dict([(work_line_id(line), line) for line in mod_from.rna_api])
+
+ rna_api_new = []
+
+ for key, val_orig in mod_to_dict.items():
+ try:
+ val_new = mod_from_dict.pop(key)
+ except:
+ # print("not found", key)
+ val_new = val_orig
+
+ # always take the class from the base
+ val = list(val_orig)
+ val[0] = val_new[0] # comment
+ val[4] = val_new[4] # -> to
+ val = tuple(val)
+ rna_api_new.append(val)
+
+ def write_work_file(file_path, rna_api):
+ rna_api = list(rna_api)
+ rna_api.sort(key=work_line_id)
+ file_out = open(file_path, "w")
+ file_out.write("rna_api = [\n")
+ for line in rna_api:
+ file_out.write(" %s,\n" % (repr(line)))
+ file_out.write("]\n")
+ file_out.close()
+
+ file_path = sys.argv[-2][:-3] + "_merged.py"
+ write_work_file(file_path, rna_api_new)
+
+ if mod_from_dict:
+ file_path = sys.argv[-2][:-3] + "_lost.py"
+ write_work_file(file_path, list(mod_from_dict.values()))
+ print("Warning '%s' contains lost %d items from module %s.py" % (file_path, len(mod_from_dict), mod_from.__name__))
+
+if __name__ == "__main__":
+ main()
diff --git a/source/blender/makesrna/rna_cleanup/rna_properties.txt b/source/blender/makesrna/rna_cleanup/rna_properties.txt
index 0c0b7e1070b..92adbf4373e 100644
--- a/source/blender/makesrna/rna_cleanup/rna_properties.txt
+++ b/source/blender/makesrna/rna_cleanup/rna_properties.txt
@@ -1,3190 +1,4605 @@
-Action.fcurves -> fcurves: collection, (read-only) The individual F-Curves that make up the Action
-Action.groups -> groups: collection, (read-only) Convenient groupings of F-Curves
-Action.pose_markers -> pose_markers: collection, (read-only) Markers specific to this Action, for labeling poses
-ActionActuator.action -> action: pointer
-ActionActuator.blendin -> blendin: int Number of frames of motion blending
-ActionActuator.frame_end -> frame_end: int
-ActionActuator.frame_property -> frame_property: string Assign the action's current frame number to this property
-ActionActuator.frame_start -> frame_start: int
-ActionActuator.mode -> mode: enum Action playback type
-ActionActuator.priority -> priority: int Execution priority - lower numbers will override actions with higher numbers. With 2 or more actions at once, the overriding channels must be lower in the stack
-ActionActuator.property -> property: string Use this property to define the Action position
-ActionConstraint.action -> action: pointer
-ActionConstraint.frame_end -> frame_end: int Last frame of the Action to use
-ActionConstraint.frame_start -> frame_start: int First frame of the Action to use
-ActionConstraint.maximum -> max: float Maximum value for target channel range
-ActionConstraint.minimum -> min: float Minimum value for target channel range
-ActionConstraint.subtarget -> subtarget: string
-ActionConstraint.target -> target: pointer Target Object
-ActionConstraint.transform_channel -> transform_channel: enum Transformation channel from the target that is used to key the Action
-ActionGroup.channels -> channels: collection, (read-only) F-Curves in this group
-ActionGroup.custom_color -> custom_color: int Index of custom color set
-ActionGroup.name -> name: string
-Actuator.name -> name: string
-Actuator.type -> type: enum
-ActuatorSensor.actuator -> actuator: string Actuator name, actuator active state modifications will be detected
-Addon.module -> module: string Module name
-AnimData.action -> action: pointer Active Action for this datablock
-AnimData.action_blending -> action_blend_type: enum Method used for combining Active Action's result with result of NLA stack
-AnimData.action_extrapolation -> action_extrapolation: enum Action to take for gaps past the Active Action's range (when evaluating with NLA)
-AnimData.action_influence -> action_influence: float Amount the Active Action contributes to the result of the NLA stack
-AnimData.drivers -> drivers: collection, (read-only) The Drivers/Expressions for this datablock
-AnimData.nla_tracks -> nla_tracks: collection, (read-only) NLA Tracks (i.e. Animation Layers)
-AnimViz.motion_paths -> motion_paths: pointer, (read-only) Motion Path settings for visualisation
-AnimViz.onion_skinning -> onion_skin_frames: pointer, (read-only) Onion Skinning (ghosting) settings for visualisation
-AnimVizMotionPaths.after_current -> after_current: int Number of frames to show after the current frame (only for 'Around Current Frame' Onion-skinning method)
-AnimVizMotionPaths.bake_location -> bake_location: enum When calculating Bone Paths, use Head or Tips
-AnimVizMotionPaths.before_current -> before_current: int Number of frames to show before the current frame (only for 'Around Current Frame' Onion-skinning method)
-AnimVizMotionPaths.frame_end -> frame_end: int End frame of range of paths to display/calculate (not for 'Around Current Frame' Onion-skinning method)
-AnimVizMotionPaths.frame_start -> frame_start: int Starting frame of range of paths to display/calculate (not for 'Around Current Frame' Onion-skinning method)
-AnimVizMotionPaths.frame_step -> frame_step: int Number of frames between paths shown (not for 'On Keyframes' Onion-skinning method)
-AnimVizMotionPaths.type -> type: enum Type of range to show for Motion Paths
-AnimVizOnionSkinning.after_current -> after_current: int Number of frames to show after the current frame (only for 'Around Current Frame' Onion-skinning method)
-AnimVizOnionSkinning.before_current -> before_current: int Number of frames to show before the current frame (only for 'Around Current Frame' Onion-skinning method)
-AnimVizOnionSkinning.frame_end -> frame_end: int End frame of range of Ghosts to display (not for 'Around Current Frame' Onion-skinning method)
-AnimVizOnionSkinning.frame_start -> frame_start: int Starting frame of range of Ghosts to display (not for 'Around Current Frame' Onion-skinning method)
-AnimVizOnionSkinning.frame_step -> frame_step: int Number of frames between ghosts shown (not for 'On Keyframes' Onion-skinning method)
-AnimVizOnionSkinning.type -> type: enum Method used for determining what ghosts get drawn
-Area.active_space -> active_space: pointer, (read-only) Space currently being displayed in this area
-Area.regions -> regions: collection, (read-only) Regions this area is subdivided in
-Area.spaces -> spaces: collection, (read-only) Spaces contained in this area, the first space is active
-Area.type -> type: enum Space type
-AreaLamp.gamma -> gamma: float Light gamma correction value
-AreaLamp.shadow_adaptive_threshold -> shadow_adaptive_threshold: float Threshold for Adaptive Sampling (Raytraced shadows)
-AreaLamp.shadow_color -> shadow_color: float Color of shadows cast by the lamp
-AreaLamp.shadow_method -> shadow_method: enum Method to compute lamp shadow with
-AreaLamp.shadow_ray_samples_x -> shadow_ray_samples_x: int Amount of samples taken extra (samples x samples)
-AreaLamp.shadow_ray_samples_y -> shadow_ray_samples_y: int Amount of samples taken extra (samples x samples)
-AreaLamp.shadow_ray_sampling_method -> shadow_ray_sample_method: enum Method for generating shadow samples: Adaptive QMC is fastest, Constant QMC is less noisy but slower
-AreaLamp.shadow_soft_size -> shadow_soft_size: float Light size for ray shadow sampling (Raytraced shadows)
-AreaLamp.shape -> shape: enum Shape of the area lamp
-AreaLamp.size -> size: float Size of the area of the area Lamp, X direction size for Rectangle shapes
-AreaLamp.size_y -> size_y: float Size of the area of the area Lamp in the Y direction for Rectangle shapes
-Armature.animation_data -> animation_data: pointer, (read-only) Animation data for this datablock
-Armature.bones -> bones: collection, (read-only)
-Armature.drawtype -> drawtype: enum
-Armature.edit_bones -> edit_bones: collection, (read-only)
-Armature.ghost_frame_end -> ghost_frame_end: int End frame of range of Ghosts to display (not for 'Around Current Frame' Onion-skinning method)
-Armature.ghost_frame_start -> ghost_frame_start: int Starting frame of range of Ghosts to display (not for 'Around Current Frame' Onion-skinning method)
-Armature.ghost_size -> ghost_size: int Frame step for Ghosts (not for 'On Keyframes' Onion-skinning method)
-Armature.ghost_step -> ghost_step: int Number of frame steps on either side of current frame to show as ghosts (only for 'Around Current Frame' Onion-skinning method)
-Armature.ghost_type -> ghost_type: enum Method of Onion-skinning for active Action
-Armature.pose_position -> pose_position: enum Show armature in binding pose or final posed state
-ArmatureActuator.bone -> bone: string Bone on which the constraint is defined
-ArmatureActuator.constraint -> constraint: string Name of the constraint you want to control
-ArmatureActuator.mode -> mode: enum
-ArmatureActuator.secondary_target -> secondary_target: pointer Set weight of this constraint
-ArmatureActuator.target -> target: pointer Set this object as the target of the constraint
-ArmatureActuator.weight -> weight: float Set weight of this constraint
-ArmatureBones.active -> active: pointer Armatures active bone
-ArmatureEditBones.active -> active: pointer Armatures active edit bone
-ArmatureModifier.object -> object: pointer Armature object to deform with
-ArmatureModifier.vertex_group -> vertex_group: string Vertex group name
-ArmatureSensor.bone -> bone: string Identify the bone to check value from
-ArmatureSensor.constraint -> constraint: string Identify the bone constraint to check value from
-ArmatureSensor.test_type -> test_type: enum Type of value and test
-ArmatureSensor.value -> value: float Specify value to be used in comparison
-ArrayModifier.constant_offset_displacement -> constant_offset_displacement: float
-ArrayModifier.count -> count: int Number of duplicates to make
-ArrayModifier.curve -> curve: pointer Curve object to fit array length to
-ArrayModifier.end_cap -> end_cap: pointer Mesh object to use as an end cap
-ArrayModifier.fit_type -> fit_type: enum Array length calculation method
-ArrayModifier.length -> length: float Length to fit array within
-ArrayModifier.merge_distance -> merge_distance: float Limit below which to merge vertices
-ArrayModifier.offset_object -> offset_object: pointer
-ArrayModifier.relative_offset_displacement -> relative_offset_displacement: float
-ArrayModifier.start_cap -> start_cap: pointer Mesh object to use as a start cap
-BackgroundImage.image -> image: pointer Image displayed and edited in this space
-BackgroundImage.image_user -> image_user: pointer, (read-only) Parameters defining which layer, pass and frame of the image is displayed
-BackgroundImage.offset_x -> offset_x: float Offsets image horizontally from the world origin
-BackgroundImage.offset_y -> offset_y: float Offsets image vertically from the world origin
-BackgroundImage.size -> size: float Scaling factor for the background image
-BackgroundImage.transparency -> transparency: float Amount to blend the image against the background color
-BackgroundImage.view_axis -> view_axis: enum The axis to display the image on
-BevelModifier.angle -> angle: float Angle above which to bevel edges
-BevelModifier.edge_weight_method -> edge_weight_method: enum What edge weight to use for weighting a vertex
-BevelModifier.limit_method -> limit_method: enum
-BevelModifier.width -> width: float Bevel value/amount
-BezierSplinePoint.co -> co: float Coordinates of the control point
-BezierSplinePoint.handle1 -> handle_left: float Coordinates of the first handle
-BezierSplinePoint.handle1_type -> handle_left_type: enum Handle types
-BezierSplinePoint.handle2 -> handle_right: float Coordinates of the second handle
-BezierSplinePoint.handle2_type -> handle_right_type: enum Handle types
-BezierSplinePoint.radius -> radius: float, (read-only) Radius for bevelling
-BezierSplinePoint.tilt -> tilt: float Tilt in 3D View
-BezierSplinePoint.weight -> weight: float Softbody goal weight
-BlendTexture.flip_axis -> flip_axis: enum Flips the texture's X and Y axis
-BlendTexture.progression -> progression: enum Sets the style of the color blending
-BlenderRNA.structs -> structs: collection, (read-only)
-BoidRule.name -> name: string Boid rule name
-BoidRule.type -> type: enum, (read-only)
-BoidRuleAverageSpeed.level -> level: float How much velocity's z-component is kept constant
-BoidRuleAverageSpeed.speed -> speed: float Percentage of maximum speed
-BoidRuleAverageSpeed.wander -> wander: float How fast velocity's direction is randomized
-BoidRuleAvoid.fear_factor -> fear_factor: float Avoid object if danger from it is above this threshold
-BoidRuleAvoid.object -> object: pointer Object to avoid
-BoidRuleAvoidCollision.look_ahead -> look_ahead: float Time to look ahead in seconds
-BoidRuleFight.distance -> distance: float Attack boids at max this distance
-BoidRuleFight.flee_distance -> flee_distance: float Flee to this distance
-BoidRuleFollowLeader.distance -> distance: float Distance behind leader to follow
-BoidRuleFollowLeader.object -> object: pointer Follow this object instead of a boid
-BoidRuleFollowLeader.queue_size -> queue_size: int How many boids in a line
-BoidRuleGoal.object -> object: pointer Goal object
-BoidSettings.accuracy -> accuracy: float Accuracy of attack
-BoidSettings.active_boid_state -> active_boid_state: pointer, (read-only)
-BoidSettings.active_boid_state_index -> active_boid_state_index: int
-BoidSettings.aggression -> aggression: float Boid will fight this times stronger enemy
-BoidSettings.air_max_acc -> air_acc_max: float Maximum acceleration in air (relative to maximum speed)
-BoidSettings.air_max_ave -> air_ave_max: float Maximum angular velocity in air (relative to 180 degrees)
-BoidSettings.air_max_speed -> air_speed_max: float Maximum speed in air
-BoidSettings.air_min_speed -> air_speed_min: float Minimum speed in air (relative to maximum speed)
-BoidSettings.air_personal_space -> air_personal_space: float Radius of boids personal space in air (% of particle size)
-BoidSettings.banking -> bank: float Amount of rotation around velocity vector on turns
-BoidSettings.health -> health: float Initial boid health when born
-BoidSettings.height -> height: float Boid height relative to particle size
-BoidSettings.land_jump_speed -> land_jump_speed: float Maximum speed for jumping
-BoidSettings.land_max_acc -> land_acc_max: float Maximum acceleration on land (relative to maximum speed)
-BoidSettings.land_max_ave -> land_ave_max: float Maximum angular velocity on land (relative to 180 degrees)
-BoidSettings.land_max_speed -> land_speed_max: float Maximum speed on land
-BoidSettings.land_personal_space -> land_personal_space: float Radius of boids personal space on land (% of particle size)
-BoidSettings.land_stick_force -> land_stick_force: float How strong a force must be to start effecting a boid on land
-BoidSettings.landing_smoothness -> land_smooth: float How smoothly the boids land
-BoidSettings.range -> range: float The maximum distance from which a boid can attack
-BoidSettings.states -> states: collection, (read-only)
-BoidSettings.strength -> strength: float Maximum caused damage on attack per second
-BoidState.active_boid_rule -> active_boid_rule: pointer, (read-only)
-BoidState.active_boid_rule_index -> active_boid_rule_index: int
-BoidState.falloff -> falloff: float
-BoidState.name -> name: string Boid state name
-BoidState.rule_fuzziness -> rule_fuzzy: float
-BoidState.rules -> rules: collection, (read-only)
-BoidState.ruleset_type -> ruleset_type: enum How the rules in the list are evaluated
-BoidState.volume -> volume: float
-Bone.bbone_in -> bbone_in: float Length of first Bezier Handle (for B-Bones only)
-Bone.bbone_out -> bbone_out: float Length of second Bezier Handle (for B-Bones only)
-Bone.bbone_segments -> bbone_segments: int Number of subdivisions of bone (for B-Bones only)
-Bone.children -> children: collection, (read-only) Bones which are children of this bone
-Bone.envelope_distance -> envelope_distance: float Bone deformation distance (for Envelope deform only)
-Bone.envelope_weight -> envelope_weight: float Bone deformation weight (for Envelope deform only)
-Bone.head -> head: float Location of head end of the bone relative to its parent
-Bone.head_local -> head_local: float Location of head end of the bone relative to armature
-Bone.head_radius -> head_radius: float Radius of head of bone (for Envelope deform only)
-Bone.matrix -> matrix: float 3x3 bone matrix
-Bone.matrix_local -> matrix_local: float 4x4 bone matrix relative to armature
-Bone.name -> name: string
-Bone.parent -> parent: pointer, (read-only) Parent bone (in same Armature)
-Bone.tail -> tail: float Location of tail end of the bone
-Bone.tail_local -> tail_local: float Location of tail end of the bone relative to armature
-Bone.tail_radius -> tail_radius: float Radius of tail of bone (for Envelope deform only)
-BoneGroup.color_set -> color_set: enum Custom color set to use
-BoneGroup.colors -> colors: pointer, (read-only) Copy of the colors associated with the group's color set
-BoneGroup.name -> name: string
-BooleanModifier.object -> object: pointer Mesh object to use for Boolean operation
-BooleanModifier.operation -> operation: enum
-BooleanProperty.array_length -> array_length: int, (read-only) Maximum length of the array, 0 means unlimited
-Brush.blend -> blend: enum Brush blending mode
-Brush.clone_alpha -> clone_alpha: float Opacity of clone image display
-Brush.clone_image -> clone_image: pointer Image for clone tool
-Brush.clone_offset -> clone_offset: float
-Brush.color -> color: float
-Brush.curve -> curve: pointer, (read-only) Editable falloff curve
-Brush.direction -> direction: enum Mapping type to use for this image in the game engine
-Brush.imagepaint_tool -> imagepaint_tool: enum
-Brush.jitter -> jitter: float Jitter the position of the brush while painting
-Brush.rate -> rate: float Interval between paints for Airbrush
-Brush.sculpt_tool -> sculpt_tool: enum
-Brush.size -> size: int Diameter of the brush
-Brush.smooth_stroke_factor -> smooth_stroke_factor: float Higher values give a smoother stroke
-Brush.smooth_stroke_radius -> smooth_stroke_radius: int Minimum distance from last point before stroke continues
-Brush.spacing -> spacing: float Spacing between brush stamps
-Brush.strength -> strength: float The amount of pressure on the brush
-Brush.texture -> texture: pointer
-Brush.texture_slot -> texture_slot: pointer, (read-only)
-Brush.vertexpaint_tool -> vertexpaint_tool: enum
-BrushTextureSlot.angle -> angle: float Defines brush texture rotation
-BrushTextureSlot.map_mode -> map_mode: enum
-BuildModifier.frame_start -> frame_start: float Specify the start frame of the effect
-BuildModifier.length -> length: float Specify the total time the build effect requires
-BuildModifier.seed -> seed: int Specify the seed for random if used
-Camera.angle -> angle: float Perspective Camera lens field of view in degrees
-Camera.animation_data -> animation_data: pointer, (read-only) Animation data for this datablock
-Camera.clip_end -> clip_end: float Camera far clipping distance
-Camera.clip_start -> clip_start: float Camera near clipping distance
-Camera.dof_distance -> dof_distance: float Distance to the focus point for depth of field
-Camera.dof_object -> dof_object: pointer Use this object to define the depth of field focal point
-Camera.draw_size -> draw_size: float Apparent size of the Camera object in the 3D View
-Camera.lens -> lens: float Perspective Camera lens value in millimeters
-Camera.lens_unit -> lens_unit: enum Unit to edit lens in for the user interface
-Camera.ortho_scale -> ortho_scale: float Orthographic Camera scale (similar to zoom)
-Camera.passepartout_alpha -> passepartout_alpha: float Opacity (alpha) of the darkened overlay in Camera view
-Camera.shift_x -> shift_x: float Perspective Camera horizontal shift
-Camera.shift_y -> shift_y: float Perspective Camera vertical shift
-Camera.type -> type: enum Camera types
-CameraActuator.axis -> axis: enum Specify the axis the Camera will try to get behind
-CameraActuator.height -> height: float
-CameraActuator.max -> max: float
-CameraActuator.min -> min: float
-CameraActuator.object -> object: pointer Look at this Object
-CastModifier.cast_type -> cast_type: enum
-CastModifier.factor -> factor: float
-CastModifier.object -> object: pointer Control object: if available, its location determines the center of the effect
-CastModifier.radius -> radius: float Only deform vertices within this distance from the center of the effect (leave as 0 for infinite.)
-CastModifier.size -> size: float Size of projection shape (leave as 0 for auto.)
-CastModifier.vertex_group -> vertex_group: string Vertex group name
-ChildOfConstraint.subtarget -> subtarget: string
-ChildOfConstraint.target -> target: pointer Target Object
-ClampToConstraint.main_axis -> main_axis: enum Main axis of movement
-ClampToConstraint.target -> target: pointer Target Object
-ClothCollisionSettings.collision_quality -> collision_quality: int How many collision iterations should be done. (higher is better quality but slower)
-ClothCollisionSettings.friction -> friction: float Friction force if a collision happened. (higher = less movement)
-ClothCollisionSettings.group -> group: pointer Limit colliders to this Group
-ClothCollisionSettings.min_distance -> distance_min: float Minimum distance between collision objects before collision response takes in
-ClothCollisionSettings.self_collision_quality -> self_collision_quality: int How many self collision iterations should be done. (higher is better quality but slower)
-ClothCollisionSettings.self_friction -> self_friction: float Friction/damping with self contact
-ClothCollisionSettings.self_min_distance -> self_distance_min: float 0.5 means no distance at all, 1.0 is maximum distance
-ClothModifier.collision_settings -> collision_settings: pointer, (read-only)
-ClothModifier.point_cache -> point_cache: pointer, (read-only)
-ClothModifier.settings -> settings: pointer, (read-only)
-ClothSettings.air_damping -> air_damping: float Air has normally some thickness which slows falling things down
-ClothSettings.bending_stiffness -> bending_stiffness: float Wrinkle coefficient. (higher = less smaller but more big wrinkles)
-ClothSettings.bending_stiffness_max -> bending_stiffness_max: float Maximum bending stiffness value
-ClothSettings.bending_vertex_group -> bending_vertex_group: string Vertex group for fine control over bending stiffness
-ClothSettings.collider_friction -> collider_friction: float
-ClothSettings.effector_weights -> effector_weights: pointer, (read-only)
-ClothSettings.goal_default -> goal_default: float Default Goal (vertex target position) value, when no Vertex Group used
-ClothSettings.goal_friction -> goal_friction: float Goal (vertex target position) friction
-ClothSettings.goal_max -> goal_max: float Goal maximum, vertex group weights are scaled to match this range
-ClothSettings.goal_min -> goal_min: float Goal minimum, vertex group weights are scaled to match this range
-ClothSettings.goal_spring -> goal_spring: float Goal (vertex target position) spring stiffness
-ClothSettings.gravity -> gravity: float Gravity or external force vector
-ClothSettings.internal_friction -> internal_friction: float
-ClothSettings.mass -> mass: float Mass of cloth material
-ClothSettings.mass_vertex_group -> mass_vertex_group: string Vertex Group for pinning of vertices
-ClothSettings.pin_stiffness -> pin_stiffness: float Pin (vertex target position) spring stiffness
-ClothSettings.pre_roll -> pre_roll: int Simulation starts on this frame
-ClothSettings.quality -> quality: int Quality of the simulation in steps per frame. (higher is better quality but slower)
-ClothSettings.rest_shape_key -> rest_shape_key: pointer Shape key to use the rest spring lengths from
-ClothSettings.spring_damping -> spring_damping: float Damping of cloth velocity. (higher = more smooth, less jiggling)
-ClothSettings.structural_stiffness -> structural_stiffness: float Overall stiffness of structure
-ClothSettings.structural_stiffness_max -> structural_stiffness_max: float Maximum structural stiffness value
-ClothSettings.structural_stiffness_vertex_group -> structural_stiffness_vertex_group: string Vertex group for fine control over structural stiffness
-CloudsTexture.nabla -> nabla: float Size of derivative offset used for calculating normal
-CloudsTexture.noise_basis -> noise_basis: enum Sets the noise basis used for turbulence
-CloudsTexture.noise_depth -> noise_depth: int Sets the depth of the cloud calculation
-CloudsTexture.noise_size -> noise_size: float Sets scaling for noise input
-CloudsTexture.noise_type -> noise_type: enum
-CloudsTexture.stype -> stype: enum
-CollectionProperty.fixed_type -> fixed_type: pointer, (read-only) Fixed pointer type, empty if variable type
-CollisionModifier.settings -> settings: pointer, (read-only)
-CollisionSensor.material -> material: string Only look for Objects with this material
-CollisionSensor.property -> property: string Only look for Objects with this property
-CollisionSettings.absorption -> absorption: float How much of effector force gets lost during collision with this object (in percent)
-CollisionSettings.damping -> damping: float Amount of damping during collision
-CollisionSettings.damping_factor -> damping_factor: float Amount of damping during particle collision
-CollisionSettings.friction_factor -> friction_factor: float Amount of friction during particle collision
-CollisionSettings.inner_thickness -> inner_thickness: float Inner face thickness
-CollisionSettings.outer_thickness -> outer_thickness: float Outer face thickness
-CollisionSettings.permeability -> permeability: float Chance that the particle will pass through the mesh
-CollisionSettings.random_damping -> random_damping: float Random variation of damping
-CollisionSettings.random_friction -> random_friction: float Random variation of friction
-CollisionSettings.stickness -> stickness: float Amount of stickness to surface collision
-ColorRamp.elements -> elements: collection, (read-only)
-ColorRamp.interpolation -> interpolation: enum
-ColorRampElement.color -> color: float
-ColorRampElement.position -> position: float
-ColorSequence.color -> color: float
-CompositorNode.type -> type: enum, (read-only)
-CompositorNodeAlphaOver.premul -> premul: float Mix Factor
-CompositorNodeBilateralblur.iterations -> iterations: int
-CompositorNodeBilateralblur.sigma_color -> sigma_color: float
-CompositorNodeBilateralblur.sigma_space -> sigma_space: float
-CompositorNodeBlur.factor -> factor: float
-CompositorNodeBlur.factor_x -> factor_x: float
-CompositorNodeBlur.factor_y -> factor_y: float
-CompositorNodeBlur.filter_type -> filter_type: enum
-CompositorNodeBlur.sizex -> size_x: int
-CompositorNodeBlur.sizey -> size_y: int
-CompositorNodeChannelMatte.algorithm -> algorithm: enum Algorithm to use to limit channel
-CompositorNodeChannelMatte.channel -> channel: enum Channel used to determine matte
-CompositorNodeChannelMatte.color_space -> color_space: enum
-CompositorNodeChannelMatte.high -> high: float Values higher than this setting are 100% opaque
-CompositorNodeChannelMatte.limit_channel -> limit_channel: enum Limit by this channels value
-CompositorNodeChannelMatte.low -> low: float Values lower than this setting are 100% keyed
-CompositorNodeChromaMatte.acceptance -> acceptance: float Tolerance for a color to be considered a keying color
-CompositorNodeChromaMatte.cutoff -> cutoff: float Tolerance below which colors will be considered as exact matches
-CompositorNodeChromaMatte.gain -> gain: float Alpha gain
-CompositorNodeChromaMatte.lift -> lift: float Alpha lift
-CompositorNodeChromaMatte.shadow_adjust -> shadow_adjust: float Adjusts the brightness of any shadows captured
-CompositorNodeColorBalance.correction_formula -> correction_formula: enum
-CompositorNodeColorBalance.gain -> gain: float Correction for Highlights
-CompositorNodeColorBalance.gamma -> gamma: float Correction for Midtones
-CompositorNodeColorBalance.lift -> lift: float Correction for Shadows
-CompositorNodeColorBalance.offset -> offset: float Correction for Shadows
-CompositorNodeColorBalance.power -> power: float Correction for Midtones
-CompositorNodeColorBalance.slope -> slope: float Correction for Highlights
-CompositorNodeColorMatte.h -> h: float Hue tolerance for colors to be considered a keying color
-CompositorNodeColorMatte.s -> s: float Saturation Tolerance for the color
-CompositorNodeColorMatte.v -> v: float Value Tolerance for the color
-CompositorNodeColorSpill.algorithm -> algorithm: enum
-CompositorNodeColorSpill.channel -> channel: enum
-CompositorNodeColorSpill.limit_channel -> limit_channel: enum
-CompositorNodeColorSpill.ratio -> ratio: float Scale limit by value
-CompositorNodeColorSpill.unspill_blue -> unspill_blue: float Blue spillmap scale
-CompositorNodeColorSpill.unspill_green -> unspill_green: float Green spillmap scale
-CompositorNodeColorSpill.unspill_red -> unspill_red: float Red spillmap scale
-CompositorNodeCrop.x1 -> x1: int
-CompositorNodeCrop.x2 -> x2: int
-CompositorNodeCrop.y1 -> y1: int
-CompositorNodeCrop.y2 -> y2: int
-CompositorNodeCurveRGB.mapping -> mapping: pointer, (read-only)
-CompositorNodeCurveVec.mapping -> mapping: pointer, (read-only)
-CompositorNodeDBlur.angle -> angle: float
-CompositorNodeDBlur.center_x -> center_x: float
-CompositorNodeDBlur.center_y -> center_y: float
-CompositorNodeDBlur.distance -> distance: float
-CompositorNodeDBlur.iterations -> iterations: int
-CompositorNodeDBlur.spin -> spin: float
-CompositorNodeDBlur.zoom -> zoom: float
-CompositorNodeDefocus.angle -> angle: int Bokeh shape rotation offset in degrees
-CompositorNodeDefocus.bokeh -> bokeh: enum
-CompositorNodeDefocus.f_stop -> f_stop: float Amount of focal blur, 128=infinity=perfect focus, half the value doubles the blur radius
-CompositorNodeDefocus.max_blur -> blur_max: float blur limit, maximum CoC radius, 0=no limit
-CompositorNodeDefocus.samples -> samples: int Number of samples (16=grainy, higher=less noise)
-CompositorNodeDefocus.threshold -> threshold: float CoC radius threshold, prevents background bleed on in-focus midground, 0=off
-CompositorNodeDefocus.z_scale -> z_scale: float Scales the Z input when not using a zbuffer, controls maximum blur designated by the color white or input value 1
-CompositorNodeDiffMatte.falloff -> falloff: float Color distances below this additional threshold are partially keyed
-CompositorNodeDiffMatte.tolerance -> tolerance: float Color distances below this threshold are keyed
-CompositorNodeDilateErode.distance -> distance: int Distance to grow/shrink (number of iterations)
-CompositorNodeDistanceMatte.falloff -> falloff: float Color distances below this additional threshold are partially keyed
-CompositorNodeDistanceMatte.tolerance -> tolerance: float Color distances below this threshold are keyed
-CompositorNodeFilter.filter_type -> filter_type: enum
-CompositorNodeFlip.axis -> axis: enum
-CompositorNodeGlare.angle_offset -> angle_offset: float Streak angle offset in degrees
-CompositorNodeGlare.color_modulation -> color_modulation: float Amount of Color Modulation, modulates colors of streaks and ghosts for a spectral dispersion effect
-CompositorNodeGlare.fade -> fade: float Streak fade-out factor
-CompositorNodeGlare.glare_type -> glare_type: enum
-CompositorNodeGlare.iterations -> iterations: int
-CompositorNodeGlare.mix -> mix: float -1 is original image only, 0 is exact 50/50 mix, 1 is processed image only
-CompositorNodeGlare.quality -> quality: enum If not set to high quality, the effect will be applied to a low-res copy of the source image
-CompositorNodeGlare.size -> size: int Glow/glare size (not actual size; relative to initial size of bright area of pixels)
-CompositorNodeGlare.streaks -> streaks: int Total number of streaks
-CompositorNodeGlare.threshold -> threshold: float The glare filter will only be applied to pixels brighter than this value
-CompositorNodeHueCorrect.mapping -> mapping: pointer, (read-only)
-CompositorNodeHueSat.hue -> hue: float
-CompositorNodeHueSat.sat -> sat: float
-CompositorNodeHueSat.val -> val: float
-CompositorNodeIDMask.index -> index: int Pass index number to convert to alpha
-CompositorNodeImage.frames -> frames: int Number of images used in animation
-CompositorNodeImage.image -> image: pointer
-CompositorNodeImage.layer -> layer: enum
-CompositorNodeImage.offset -> offset: int Offsets the number of the frame to use in the animation
-CompositorNodeImage.start -> start: int
-CompositorNodeLevels.channel -> channel: enum
-CompositorNodeLumaMatte.high -> high: float Values higher than this setting are 100% opaque
-CompositorNodeLumaMatte.low -> low: float Values lower than this setting are 100% keyed
-CompositorNodeMapUV.alpha -> alpha: int
-CompositorNodeMapValue.max -> max: float
-CompositorNodeMapValue.min -> min: float
-CompositorNodeMapValue.offset -> offset: float
-CompositorNodeMapValue.size -> size: float
-CompositorNodeMath.operation -> operation: enum
-CompositorNodeMixRGB.blend_type -> blend_type: enum
-CompositorNodeOutputFile.exr_codec -> exr_codec: enum
-CompositorNodeOutputFile.filepath -> filepath: string Output path for the image, same functionality as render output.
-CompositorNodeOutputFile.frame_end -> frame_end: int
-CompositorNodeOutputFile.frame_start -> frame_start: int
-CompositorNodeOutputFile.image_type -> image_type: enum
-CompositorNodeOutputFile.quality -> quality: int
-CompositorNodePremulKey.mapping -> mapping: enum Conversion between premultiplied alpha and key alpha
-CompositorNodeRLayers.layer -> layer: enum
-CompositorNodeRLayers.scene -> scene: pointer
-CompositorNodeRotate.filter -> filter: enum Method to use to filter rotation
-CompositorNodeScale.space -> space: enum Coordinate space to scale relative to
-CompositorNodeSplitViewer.axis -> axis: enum
-CompositorNodeSplitViewer.factor -> factor: int
-CompositorNodeTexture.node_output -> node_output: int For node-based textures, which output node to use
-CompositorNodeTexture.texture -> texture: pointer
-CompositorNodeTime.curve -> curve: pointer, (read-only)
-CompositorNodeTime.end -> end: int
-CompositorNodeTime.start -> start: int
-CompositorNodeTonemap.adaptation -> adaptation: float If 0, global; if 1, based on pixel intensity
-CompositorNodeTonemap.contrast -> contrast: float Set to 0 to use estimate from input image
-CompositorNodeTonemap.correction -> correction: float If 0, same for all channels; if 1, each independent
-CompositorNodeTonemap.gamma -> gamma: float If not used, set to 1
-CompositorNodeTonemap.intensity -> intensity: float If less than zero, darkens image; otherwise, makes it brighter
-CompositorNodeTonemap.key -> key: float The value the average luminance is mapped to
-CompositorNodeTonemap.offset -> offset: float Normally always 1, but can be used as an extra control to alter the brightness curve
-CompositorNodeTonemap.tonemap_type -> tonemap_type: enum
-CompositorNodeValToRGB.color_ramp -> color_ramp: pointer, (read-only)
-CompositorNodeVecBlur.factor -> factor: float Scaling factor for motion vectors; actually 'shutter speed' in frames
-CompositorNodeVecBlur.max_speed -> speed_max: int Maximum speed, or zero for none
-CompositorNodeVecBlur.min_speed -> speed_min: int Minimum speed for a pixel to be blurred; used to separate background from foreground
-CompositorNodeVecBlur.samples -> samples: int
-ConsoleLine.current_character -> current_character: int
-ConsoleLine.line -> line: string Text in the line
-Constraint.influence -> influence: float Amount of influence constraint will have on the final solution
-Constraint.lin_error -> lin_error: float, (read-only) Amount of residual error in Blender space unit for constraints that work on position
-Constraint.name -> name: string Constraint name
-Constraint.owner_space -> owner_space: enum Space that owner is evaluated in
-Constraint.rot_error -> rot_error: float, (read-only) Amount of residual error in radiant for constraints that work on orientation
-Constraint.target_space -> target_space: enum Space that target is evaluated in
-Constraint.type -> type: enum, (read-only)
-ConstraintActuator.damping -> damping: int Damping factor: time constant (in frame) of low pass filter
-ConstraintActuator.damping_rotation -> damping_rotation: int Use a different damping for orientation
-ConstraintActuator.direction -> direction: enum Set the direction of the ray
-ConstraintActuator.direction_axis -> direction_axis: enum Select the axis to be aligned along the reference direction
-ConstraintActuator.distance -> distance: float Set the maximum length of ray
-ConstraintActuator.fh_damping -> fh_damping: float Damping factor of the Fh spring force
-ConstraintActuator.fh_height -> fh_height: float Height of the Fh area
-ConstraintActuator.limit -> limit: enum
-ConstraintActuator.limit_max -> limit_max: float
-ConstraintActuator.limit_min -> limit_min: float
-ConstraintActuator.material -> material: string Ray detects only Objects with this material
-ConstraintActuator.max_angle -> angle_max: float Maximum angle (in degree) allowed with target direction. No correction is done if angle with target direction is between min and max
-ConstraintActuator.max_rotation -> rotation_max: float Reference Direction
-ConstraintActuator.min_angle -> angle_min: float Minimum angle (in degree) to maintain with target direction. No correction is done if angle with target direction is between min and max
-ConstraintActuator.mode -> mode: enum The type of the constraint
-ConstraintActuator.property -> property: string Ray detect only Objects with this property
-ConstraintActuator.range -> range: float Set the maximum length of ray
-ConstraintActuator.spring -> spring: float Spring force within the Fh area
-ConstraintActuator.time -> time: int Maximum activation time in frame, 0 for unlimited
-ConstraintTarget.subtarget -> subtarget: string
-ConstraintTarget.target -> target: pointer Target Object
-Context.area -> area: pointer, (read-only)
-Context.main -> main: pointer, (read-only)
-Context.manager -> manager: pointer, (read-only)
-Context.mode -> mode: enum, (read-only)
-Context.region -> region: pointer, (read-only)
-Context.scene -> scene: pointer, (read-only)
-Context.screen -> screen: pointer, (read-only)
-Context.space_data -> space_data: pointer, (read-only)
-Context.tool_settings -> tool_settings: pointer, (read-only)
-Context.user_preferences -> user_preferences: pointer, (read-only)
-Context.window -> window: pointer, (read-only)
-ControlFluidSettings.attraction_radius -> attraction_radius: float Specifies the force field radius around the control object
-ControlFluidSettings.attraction_strength -> attraction_strength: float Force strength for directional attraction towards the control object
-ControlFluidSettings.end_time -> end_time: float Specifies time when the control particles are deactivated
-ControlFluidSettings.quality -> quality: float Specifies the quality which is used for object sampling. (higher = better but slower)
-ControlFluidSettings.start_time -> start_time: float Specifies time when the control particles are activated
-ControlFluidSettings.velocity_radius -> velocity_radius: float Specifies the force field radius around the control object
-ControlFluidSettings.velocity_strength -> velocity_strength: float Force strength of how much of the control object's velocity is influencing the fluid velocity
-Controller.name -> name: string
-Controller.state_number -> state_number: int Set Controller state index (1 to 30)
-Controller.type -> type: enum
-CopyLocationConstraint.head_tail -> head_tail: float Target along length of bone: Head=0, Tail=1
-CopyLocationConstraint.subtarget -> subtarget: string
-CopyLocationConstraint.target -> target: pointer Target Object
-CopyRotationConstraint.subtarget -> subtarget: string
-CopyRotationConstraint.target -> target: pointer Target Object
-CopyScaleConstraint.subtarget -> subtarget: string
-CopyScaleConstraint.target -> target: pointer Target Object
-CopyTransformsConstraint.head_tail -> head_tail: float Target along length of bone: Head=0, Tail=1
-CopyTransformsConstraint.subtarget -> subtarget: string
-CopyTransformsConstraint.target -> target: pointer Target Object
-Curve.animation_data -> animation_data: pointer, (read-only) Animation data for this datablock
-Curve.bevel_depth -> bevel_depth: float Bevel depth when not using a bevel object
-Curve.bevel_object -> bevel_object: pointer Curve object name that defines the bevel shape
-Curve.bevel_resolution -> bevel_resolution: int Bevel resolution when depth is non-zero and no specific bevel object has been defined
-Curve.dimensions -> dimensions: enum Select 2D or 3D curve type
-Curve.eval_time -> eval_time: float Parametric position along the length of the curve that Objects 'following' it should be at. Position is evaluated by dividing by the 'Path Length' value
-Curve.extrude -> extrude: float Amount of curve extrusion when not using a bevel object
-Curve.materials -> materials: collection, (read-only)
-Curve.path_length -> path_length: int The number of frames that are needed to traverse the path, defining the maximum value for the 'Evaluation Time' setting
-Curve.render_resolution_u -> render_resolution_u: int Surface resolution in U direction used while rendering. Zero skips this property
-Curve.render_resolution_v -> render_resolution_v: int Surface resolution in V direction used while rendering. Zero skips this property
-Curve.resolution_u -> resolution_u: int Surface resolution in U direction
-Curve.resolution_v -> resolution_v: int Surface resolution in V direction
-Curve.shape_keys -> shape_keys: pointer, (read-only)
-Curve.splines -> splines: collection, (read-only) Collection of splines in this curve data object
-Curve.taper_object -> taper_object: pointer Curve object name that defines the taper (width)
-Curve.texspace_loc -> texspace_loc: float Texture space location
-Curve.texspace_size -> texspace_size: float Texture space size
-Curve.twist_mode -> twist_mode: enum The type of tilt calculation for 3D Curves
-Curve.twist_smooth -> twist_smooth: float Smoothing iteration for tangents
-Curve.width -> width: float Scale the original width (1.0) based on given factor
-CurveMap.extend -> extend: enum, (read-only) Extrapolate the curve or extend it horizontally
-CurveMap.points -> points: collection, (read-only)
-CurveMapPoint.handle_type -> handle_type: enum, (read-only) Curve interpolation at this point: bezier or vector
-CurveMapPoint.location -> location: float, (read-only) X/Y coordinates of the curve point
-CurveMapping.black_level -> black_level: float For RGB curves, the color that black is mapped to
-CurveMapping.clip_max_x -> clip_max_x: float
-CurveMapping.clip_max_y -> clip_max_y: float
-CurveMapping.clip_min_x -> clip_min_x: float
-CurveMapping.clip_min_y -> clip_min_y: float
-CurveMapping.curves -> curves: collection, (read-only)
-CurveMapping.white_level -> white_level: float For RGB curves, the color that white is mapped to
-CurveModifier.deform_axis -> deform_axis: enum The axis that the curve deforms along
-CurveModifier.object -> object: pointer Curve object to deform with
-CurveModifier.vertex_group -> vertex_group: string Vertex group name
-CurveSplines.active -> active: pointer Active curve spline
-DampedTrackConstraint.subtarget -> subtarget: string
-DampedTrackConstraint.target -> target: pointer Target Object
-DampedTrackConstraint.track -> track: enum Axis that points to the target object
-DecimateModifier.face_count -> face_count: int, (read-only) The current number of faces in the decimated mesh
-DecimateModifier.ratio -> ratio: float Defines the ratio of triangles to reduce to
-DelaySensor.delay -> delay: int Delay in number of logic tics before the positive trigger (default 60 per second)
-DelaySensor.duration -> duration: int If >0, delay in number of logic tics before the negative trigger following the positive trigger
-DisplaceModifier.direction -> direction: enum
-DisplaceModifier.midlevel -> midlevel: float Material value that gives no displacement
-DisplaceModifier.strength -> strength: float
-DisplaceModifier.texture -> texture: pointer
-DisplaceModifier.texture_coordinate_object -> texture_coordinate_object: pointer
-DisplaceModifier.texture_coordinates -> texture_coordinates: enum
-DisplaceModifier.uv_layer -> uv_layer: string UV layer name
-DisplaceModifier.vertex_group -> vertex_group: string Vertex group name
-DistortedNoiseTexture.distortion -> distortion: float
-DistortedNoiseTexture.nabla -> nabla: float Size of derivative offset used for calculating normal
-DistortedNoiseTexture.noise_basis -> noise_basis: enum Sets the noise basis used for turbulence
-DistortedNoiseTexture.noise_distortion -> noise_distortion: enum Sets the noise basis for the distortion
-DistortedNoiseTexture.noise_size -> noise_size: float Sets scaling for noise input
-DomainFluidSettings.compressibility -> compressibility: float Allowed compressibility due to gravitational force for standing fluid. (directly affects simulation step size)
-DomainFluidSettings.end_time -> end_time: float Simulation time of the last blender frame
-DomainFluidSettings.generate_particles -> generate_particles: float Amount of particles to generate (0=off, 1=normal, >1=more)
-DomainFluidSettings.gravity -> gravity: float Gravity in X, Y and Z direction
-DomainFluidSettings.grid_levels -> grid_levels: int Number of coarsened grids to use (-1 for automatic)
-DomainFluidSettings.memory_estimate -> memory_estimate: string, (read-only) Estimated amount of memory needed for baking the domain
-DomainFluidSettings.partial_slip_factor -> partial_slip_factor: float Amount of mixing between no- and free-slip, 0 is no slip and 1 is free slip
-DomainFluidSettings.path -> path: string Directory (and/or filename prefix) to store baked fluid simulation files in
-DomainFluidSettings.preview_resolution -> preview_resolution: int Preview resolution in X,Y and Z direction
-DomainFluidSettings.real_world_size -> real_world_size: float Size of the simulation domain in metres
-DomainFluidSettings.render_display_mode -> render_display_mode: enum How to display the mesh for rendering
-DomainFluidSettings.resolution -> resolution: int Domain resolution in X,Y and Z direction
-DomainFluidSettings.slip_type -> slip_type: enum
-DomainFluidSettings.start_time -> start_time: float Simulation time of the first blender frame
-DomainFluidSettings.surface_smoothing -> surface_smooth: float Amount of surface smoothing. A value of 0 is off, 1 is normal smoothing and more than 1 is extra smoothing
-DomainFluidSettings.surface_subdivisions -> surface_subdivisions: int Number of isosurface subdivisions. This is necessary for the inclusion of particles into the surface generation. Warning - can lead to longer computation times!
-DomainFluidSettings.tracer_particles -> tracer_particles: int Number of tracer particles to generate
-DomainFluidSettings.viewport_display_mode -> viewport_display_mode: enum How to display the mesh in the viewport
-DomainFluidSettings.viscosity_base -> viscosity_base: float Viscosity setting: value that is multiplied by 10 to the power of (exponent*-1)
-DomainFluidSettings.viscosity_exponent -> viscosity_exponent: int Negative exponent for the viscosity value (to simplify entering small values e.g. 5*10^-6.)
-DomainFluidSettings.viscosity_preset -> viscosity_preset: enum Set viscosity of the fluid to a preset value, or use manual input
-DopeSheet.filtering_group -> filtering_group: pointer Group that included Object should be a member of
-DopeSheet.source -> source: pointer, (read-only) ID-Block representing source data, currently ID_SCE (for Dopesheet), and ID_SC (for Grease Pencil)
-Driver.expression -> expression: string Expression to use for Scripted Expression
-Driver.type -> type: enum Driver type
-Driver.variables -> variables: collection, (read-only) Properties acting as inputs for this driver
-DriverTarget.bone_target -> bone_target: string Name of PoseBone to use as target
-DriverTarget.data_path -> data_path: string RNA Path (from ID-block) to property used
-DriverTarget.id -> id: pointer ID-block that the specific property used can be found from (id_type property must be set first)
-DriverTarget.id_type -> id_type: enum Type of ID-block that can be used
-DriverTarget.transform_type -> transform_type: enum Driver variable type
-DriverVariable.name -> name: string Name to use in scripted expressions/functions. (No spaces or dots are allowed. Also, must not start with a symbol or digit)
-DriverVariable.targets -> targets: collection, (read-only) Sources of input data for evaluating this variable
-DriverVariable.type -> type: enum Driver variable type
-DupliObject.matrix -> matrix: float Object duplicate transformation matrix
-DupliObject.object -> object: pointer, (read-only) Object being duplicated
-DupliObject.object_matrix -> object_matrix: float Duplicated object transformation matrix
-EdgeSplitModifier.split_angle -> split_angle: float Angle above which to split edges
-EditBone.bbone_in -> bbone_in: float Length of first Bezier Handle (for B-Bones only)
-EditBone.bbone_out -> bbone_out: float Length of second Bezier Handle (for B-Bones only)
-EditBone.bbone_segments -> bbone_segments: int Number of subdivisions of bone (for B-Bones only)
-EditBone.envelope_distance -> envelope_distance: float Bone deformation distance (for Envelope deform only)
-EditBone.envelope_weight -> envelope_weight: float Bone deformation weight (for Envelope deform only)
-EditBone.head -> head: float Location of head end of the bone
-EditBone.head_radius -> head_radius: float Radius of head of bone (for Envelope deform only)
-EditBone.matrix -> matrix: float, (read-only) Read-only matrix calculated from the roll (armature space)
-EditBone.name -> name: string
-EditBone.parent -> parent: pointer Parent edit bone (in same Armature)
-EditBone.roll -> roll: float Bone rotation around head-tail axis
-EditBone.tail -> tail: float Location of tail end of the bone
-EditBone.tail_radius -> tail_radius: float Radius of tail of bone (for Envelope deform only)
-EditObjectActuator.angular_velocity -> angular_velocity: float Angular velocity upon creation
-EditObjectActuator.dynamic_operation -> dynamic_operation: enum
-EditObjectActuator.linear_velocity -> linear_velocity: float Velocity upon creation
-EditObjectActuator.mass -> mass: float The mass of the object
-EditObjectActuator.mesh -> mesh: pointer Replace the existing, when left blank 'Phys' will remake the existing physics mesh
-EditObjectActuator.mode -> mode: enum The mode of the actuator
-EditObjectActuator.object -> object: pointer Add this Object and all its children (cant be on an visible layer)
-EditObjectActuator.time -> time: int Duration the new Object lives or the track takes
-EditObjectActuator.track_object -> track_object: pointer Track to this Object
-EffectSequence.color_balance -> color_balance: pointer, (read-only)
-EffectSequence.crop -> crop: pointer, (read-only)
-EffectSequence.multiply_colors -> color_multiply: float
-EffectSequence.proxy -> proxy: pointer, (read-only)
-EffectSequence.strobe -> strobe: float Only display every nth frame
-EffectSequence.transform -> transform: pointer, (read-only)
-EffectorWeights.all -> all: float All effector's weight
-EffectorWeights.boid -> boid: float Boid effector weight
-EffectorWeights.charge -> charge: float Charge effector weight
-EffectorWeights.curveguide -> curveguide: float Curve guide effector weight
-EffectorWeights.drag -> drag: float Drag effector weight
-EffectorWeights.force -> force: float Force effector weight
-EffectorWeights.gravity -> gravity: float Global gravity weight
-EffectorWeights.group -> group: pointer Limit effectors to this Group
-EffectorWeights.harmonic -> harmonic: float Harmonic effector weight
-EffectorWeights.lennardjones -> lennardjones: float Lennard-Jones effector weight
-EffectorWeights.magnetic -> magnetic: float Magnetic effector weight
-EffectorWeights.texture -> texture: float Texture effector weight
-EffectorWeights.turbulence -> turbulence: float Turbulence effector weight
-EffectorWeights.vortex -> vortex: float Vortex effector weight
-EffectorWeights.wind -> wind: float Wind effector weight
-EnumProperty.default -> default: enum, (read-only) Default value for this enum
-EnumProperty.items -> items: collection, (read-only) Possible values for the property
-EnumPropertyItem.description -> description: string, (read-only) Description of the item's purpose
-EnumPropertyItem.identifier -> identifier: string, (read-only) Unique name used in the code and scripting
-EnumPropertyItem.name -> name: string, (read-only) Human readable name
-EnumPropertyItem.value -> value: int, (read-only) Value of the item
-EnvironmentMap.clip_end -> clip_end: float Objects further than this are not visible to map
-EnvironmentMap.clip_start -> clip_start: float Objects nearer than this are not visible to map
-EnvironmentMap.depth -> depth: int Number of times a map will be rendered recursively (mirror effects.)
-EnvironmentMap.mapping -> mapping: enum
-EnvironmentMap.resolution -> resolution: int Pixel resolution of the rendered environment map
-EnvironmentMap.source -> source: enum
-EnvironmentMap.viewpoint_object -> viewpoint_object: pointer Object to use as the environment map's viewpoint location
-EnvironmentMap.zoom -> zoom: float
-EnvironmentMapTexture.environment_map -> environment_map: pointer, (read-only) Gets the environment map associated with this texture
-EnvironmentMapTexture.filter -> filter: enum Texture filter to use for sampling image
-EnvironmentMapTexture.filter_eccentricity -> filter_eccentricity: int Maximum eccentricity. Higher gives less blur at distant/oblique angles, but is also slower
-EnvironmentMapTexture.filter_probes -> filter_probes: int Maximum number of samples. Higher gives less blur at distant/oblique angles, but is also slower
-EnvironmentMapTexture.filter_size -> filter_size: float Multiplies the filter size used by MIP Map and Interpolation
-EnvironmentMapTexture.image -> image: pointer Source image file to read the environment map from
-EnvironmentMapTexture.image_user -> image_user: pointer, (read-only) Parameters defining which layer, pass and frame of the image is displayed
-Event.ascii -> ascii: string, (read-only) Single ASCII character for this event
-Event.mouse_prev_x -> mouse_prev_x: int, (read-only) The window relative vertical location of the mouse
-Event.mouse_prev_y -> mouse_prev_y: int, (read-only) The window relative horizontal location of the mouse
-Event.mouse_region_x -> mouse_region_x: int, (read-only) The region relative vertical location of the mouse
-Event.mouse_region_y -> mouse_region_y: int, (read-only) The region relative horizontal location of the mouse
-Event.mouse_x -> mouse_x: int, (read-only) The window relative vertical location of the mouse
-Event.mouse_y -> mouse_y: int, (read-only) The window relative horizontal location of the mouse
-Event.type -> type: enum, (read-only)
-Event.value -> value: enum, (read-only) The type of event, only applies to some
-ExplodeModifier.protect -> protect: float Clean vertex group edges
-ExplodeModifier.vertex_group -> vertex_group: string
-ExpressionController.expression -> expression: string
-FCurve.array_index -> array_index: int Index to the specific property affected by F-Curve if applicable
-FCurve.color -> color: float Color of the F-Curve in the Graph Editor
-FCurve.color_mode -> color_mode: enum Method used to determine color of F-Curve in Graph Editor
-FCurve.data_path -> data_path: string RNA Path to property affected by F-Curve
-FCurve.driver -> driver: pointer, (read-only) Channel Driver (only set for Driver F-Curves)
-FCurve.extrapolation -> extrapolation: enum
-FCurve.group -> group: pointer Action Group that this F-Curve belongs to
-FCurve.keyframe_points -> keyframe_points: collection, (read-only) User-editable keyframes
-FCurve.modifiers -> modifiers: collection, (read-only) Modifiers affecting the shape of the F-Curve
-FCurve.sampled_points -> sampled_points: collection, (read-only) Sampled animation data
-FCurveModifiers.active -> active: pointer Active F-Curve Modifier
-FCurveSample.co -> co: float Point coordinates
-FModifier.type -> type: enum, (read-only) F-Curve Modifier Type
-FModifierCycles.after_cycles -> after_cycles: float Maximum number of cycles to allow after last keyframe. (0 = infinite)
-FModifierCycles.after_mode -> after_mode: enum Cycling mode to use after last keyframe
-FModifierCycles.before_cycles -> before_cycles: float Maximum number of cycles to allow before first keyframe. (0 = infinite)
-FModifierCycles.before_mode -> before_mode: enum Cycling mode to use before first keyframe
-FModifierEnvelope.control_points -> control_points: collection, (read-only) Control points defining the shape of the envelope
-FModifierEnvelope.default_maximum -> default_max: float Upper distance from Reference Value for 1:1 default influence
-FModifierEnvelope.default_minimum -> default_min: float Lower distance from Reference Value for 1:1 default influence
-FModifierEnvelope.reference_value -> reference_value: float Value that envelope's influence is centered around / based on
-FModifierEnvelopeControlPoint.frame -> frame: float Frame this control-point occurs on
-FModifierEnvelopeControlPoint.maximum -> max: float Upper bound of envelope at this control-point
-FModifierEnvelopeControlPoint.minimum -> min: float Lower bound of envelope at this control-point
-FModifierFunctionGenerator.amplitude -> amplitude: float Scale factor determining the maximum/minimum values
-FModifierFunctionGenerator.function_type -> function_type: enum Type of built-in function to use
-FModifierFunctionGenerator.phase_multiplier -> phase_multiplier: float Scale factor determining the 'speed' of the function
-FModifierFunctionGenerator.phase_offset -> phase_offset: float Constant factor to offset time by for function
-FModifierFunctionGenerator.value_offset -> value_offset: float Constant factor to offset values by
-FModifierGenerator.coefficients -> coefficients: float Coefficients for 'x' (starting from lowest power of x^0)
-FModifierGenerator.mode -> mode: enum Type of generator to use
-FModifierGenerator.poly_order -> poly_order: int The highest power of 'x' for this polynomial. (number of coefficients - 1)
-FModifierLimits.maximum_x -> max_x: float Highest X value to allow
-FModifierLimits.maximum_y -> max_y: float Highest Y value to allow
-FModifierLimits.minimum_x -> min_x: float Lowest X value to allow
-FModifierLimits.minimum_y -> min_y: float Lowest Y value to allow
-FModifierNoise.depth -> depth: int Amount of fine level detail present in the noise
-FModifierNoise.modification -> modification: enum Method of modifying the existing F-Curve
-FModifierNoise.phase -> phase: float A random seed for the noise effect
-FModifierNoise.size -> size: float Scaling (in time) of the noise
-FModifierNoise.strength -> strength: float Amplitude of the noise - the amount that it modifies the underlying curve
-FModifierStepped.frame_end -> frame_end: float Frame that modifier's influence ends (if applicable)
-FModifierStepped.frame_start -> frame_start: float Frame that modifier's influence starts (if applicable)
-FModifierStepped.offset -> offset: float Reference number of frames before frames get held. Use to get hold for '1-3' vs '5-7' holding patterns
-FModifierStepped.step_size -> step_size: float Number of frames to hold each value
-FcurveActuator.frame_end -> frame_end: int
-FcurveActuator.frame_property -> frame_property: string Assign the action's current frame number to this property
-FcurveActuator.frame_start -> frame_start: int
-FcurveActuator.play_type -> play_type: enum Specify the way you want to play the animation
-FcurveActuator.property -> property: string Use this property to define the F-Curve position
-FieldSettings.falloff_power -> falloff_power: float Falloff power (real gravitational falloff = 2)
-FieldSettings.falloff_type -> falloff_type: enum Fall-off shape
-FieldSettings.flow -> flow: float Convert effector force into air flow velocity
-FieldSettings.guide_clump_amount -> guide_clump_amount: float Amount of clumping
-FieldSettings.guide_clump_shape -> guide_clump_shape: float Shape of clumping
-FieldSettings.guide_free -> guide_free: float Guide-free time from particle life's end
-FieldSettings.guide_kink_amplitude -> guide_kink_amplitude: float The amplitude of the offset
-FieldSettings.guide_kink_axis -> guide_kink_axis: enum Which axis to use for offset
-FieldSettings.guide_kink_frequency -> guide_kink_frequency: float The frequency of the offset (1/total length)
-FieldSettings.guide_kink_shape -> guide_kink_shape: float Adjust the offset to the beginning/end
-FieldSettings.guide_kink_type -> guide_kink_type: enum Type of periodic offset on the curve
-FieldSettings.guide_minimum -> guide_minimum: float The distance from which particles are affected fully
-FieldSettings.harmonic_damping -> harmonic_damping: float Damping of the harmonic force
-FieldSettings.inflow -> inflow: float Inwards component of the vortex force
-FieldSettings.linear_drag -> linear_drag: float Drag component proportional to velocity
-FieldSettings.maximum_distance -> distance_max: float Maximum distance for the field to work
-FieldSettings.minimum_distance -> distance_min: float Minimum distance for the field's fall-off
-FieldSettings.noise -> noise: float Noise of the force
-FieldSettings.quadratic_drag -> quadratic_drag: float Drag component proportional to the square of velocity
-FieldSettings.radial_falloff -> radial_falloff: float Radial falloff power (real gravitational falloff = 2)
-FieldSettings.radial_maximum -> radial_max: float Maximum radial distance for the field to work
-FieldSettings.radial_minimum -> radial_min: float Minimum radial distance for the field's fall-off
-FieldSettings.rest_length -> rest_length: float Rest length of the harmonic force
-FieldSettings.seed -> seed: int Seed of the noise
-FieldSettings.shape -> shape: enum Which direction is used to calculate the effector force
-FieldSettings.size -> size: float Size of the noise
-FieldSettings.strength -> strength: float Strength of force field
-FieldSettings.texture -> texture: pointer Texture to use as force
-FieldSettings.texture_mode -> texture_mode: enum How the texture effect is calculated (RGB & Curl need a RGB texture else Gradient will be used instead)
-FieldSettings.texture_nabla -> texture_nabla: float Defines size of derivative offset used for calculating gradient and curl
-FieldSettings.type -> type: enum Type of field
-FieldSettings.z_direction -> z_direction: enum Effect in full or only positive/negative Z direction
-FileSelectParams.directory -> directory: string Directory displayed in the file browser
-FileSelectParams.display -> display: enum Display mode for the file list
-FileSelectParams.file -> file: string Active file in the file browser
-FileSelectParams.sort -> sort: enum
-FileSelectParams.title -> title: string, (read-only) Title for the file browser
-Filter2DActuator.filter_pass -> filter_pass: int Set filter order
-Filter2DActuator.glsl_shader -> glsl_shader: pointer
-Filter2DActuator.mode -> mode: enum
-Filter2DActuator.motion_blur_value -> motion_blur_value: float Set motion blur value
-FloatProperty.array_length -> array_length: int, (read-only) Maximum length of the array, 0 means unlimited
-FloatProperty.default -> default: float, (read-only) Default value for this number
-FloatProperty.default_array -> default_array: float, (read-only) Default value for this array
-FloatProperty.hard_max -> hard_max: float, (read-only) Maximum value used by buttons
-FloatProperty.hard_min -> hard_min: float, (read-only) Minimum value used by buttons
-FloatProperty.precision -> precision: int, (read-only) Number of digits after the dot used by buttons
-FloatProperty.soft_max -> soft_max: float, (read-only) Maximum value used by buttons
-FloatProperty.soft_min -> soft_min: float, (read-only) Minimum value used by buttons
-FloatProperty.step -> step: float, (read-only) Step size used by number buttons, for floats 1/100th of the step size
-FloorConstraint.floor_location -> floor_location: enum Location of target that object will not pass through
-FloorConstraint.offset -> offset: float Offset of floor from object origin
-FloorConstraint.subtarget -> subtarget: string
-FloorConstraint.target -> target: pointer Target Object
-FluidFluidSettings.initial_velocity -> initial_velocity: float Initial velocity of fluid
-FluidFluidSettings.volume_initialization -> volume_initialization: enum Volume initialization type
-FluidSettings.type -> type: enum Type of participation in the fluid simulation
-FluidSimulationModifier.settings -> settings: pointer, (read-only) Settings for how this object is used in the fluid simulation
-FollowPathConstraint.forward -> forward: enum Axis that points forward along the path
-FollowPathConstraint.offset -> offset: int Offset from the position corresponding to the time frame
-FollowPathConstraint.offset_factor -> offset_factor: float Percentage value defining target position along length of bone
-FollowPathConstraint.target -> target: pointer Target Object
-FollowPathConstraint.up -> up: enum Axis that points upward
-Function.description -> description: string, (read-only) Description of the Function's purpose
-Function.identifier -> identifier: string, (read-only) Unique name used in the code and scripting
-Function.parameters -> parameters: collection, (read-only) Parameters for the function
-GPencilFrame.frame_number -> frame_number: int The frame on which this sketch appears
-GPencilFrame.strokes -> strokes: collection, (read-only) Freehand curves defining the sketch on this frame
-GPencilLayer.active_frame -> active_frame: pointer, (read-only) Frame currently being displayed for this layer
-GPencilLayer.color -> color: float Color for all strokes in this layer
-GPencilLayer.frames -> frames: collection, (read-only) Sketches for this layer on different frames
-GPencilLayer.info -> info: string Layer name
-GPencilLayer.line_thickness -> line_width: int Thickness of strokes (in pixels)
-GPencilLayer.max_ghost_range -> ghost_range_max: int Maximum number of frames on either side of the active frame to show (0 = show the 'first' available sketch on either side)
-GPencilLayer.opacity -> opacity: float Layer Opacity
-GPencilStroke.points -> points: collection, (read-only) Stroke data points
-GPencilStrokePoint.co -> co: float
-GPencilStrokePoint.pressure -> pressure: float Pressure of tablet at point when drawing it
-GameActuator.filename -> filename: string Load this blend file, use the "//" prefix for a path relative to the current blend file
-GameActuator.mode -> mode: enum
-GameFloatProperty.value -> value: float Property value
-GameIntProperty.value -> value: int Property value
-GameObjectSettings.actuators -> actuators: collection, (read-only) Game engine actuators to act on events
-GameObjectSettings.collision_bounds -> collision_bounds: enum Selects the collision type
-GameObjectSettings.collision_margin -> collision_margin: float Extra margin around object for collision detection, small amount required for stability
-GameObjectSettings.controllers -> controllers: collection, (read-only) Game engine controllers to process events, connecting sensor to actuators
-GameObjectSettings.damping -> damping: float General movement damping
-GameObjectSettings.form_factor -> form_factor: float Form factor scales the inertia tensor
-GameObjectSettings.friction_coefficients -> friction_coefficients: float Relative friction coefficient in the in the X, Y and Z directions, when anisotropic friction is enabled
-GameObjectSettings.mass -> mass: float Mass of the object
-GameObjectSettings.maximum_velocity -> velocity_max: float Clamp velocity to this maximum speed
-GameObjectSettings.minimum_velocity -> velocity_min: float Clamp velocity to this minimum speed (except when totally still)
-GameObjectSettings.physics_type -> physics_type: enum Selects the type of physical representation
-GameObjectSettings.properties -> properties: collection, (read-only) Game engine properties
-GameObjectSettings.radius -> radius: float Radius of bounding sphere and material physics
-GameObjectSettings.rotation_damping -> rotation_damping: float General rotation damping
-GameObjectSettings.sensors -> sensors: collection, (read-only) Game engine sensor to detect events
-GameObjectSettings.soft_body -> soft_body: pointer, (read-only) Settings for Bullet soft body simulation
-GameProperty.name -> name: string Available as GameObject attributes in the game engine's python API
-GameProperty.type -> type: enum
-GameSoftBodySettings.cluster_iterations -> cluster_iterations: int Specify the number of cluster iterations
-GameSoftBodySettings.dynamic_friction -> dynamic_friction: float Dynamic Friction
-GameSoftBodySettings.linstiff -> linear_stiffness: float Linear stiffness of the soft body links
-GameSoftBodySettings.margin -> margin: float Collision margin for soft body. Small value makes the algorithm unstable
-GameSoftBodySettings.position_iterations -> position_iterations: int Position solver iterations
-GameSoftBodySettings.threshold -> threshold: float Shape matching threshold
-GameSoftBodySettings.welding -> weld_threshold: float Welding threshold: distance between nearby vertices to be considered equal => set to 0.0 to disable welding test and speed up scene loading (ok if the mesh has no duplicates)
-GameStringProperty.value -> value: string Property value
-GameTimerProperty.value -> value: float Property value
-GlowSequence.blur_distance -> blur_distance: float Radius of glow effect
-GlowSequence.boost_factor -> boost_factor: float Brightness multiplier
-GlowSequence.clamp -> clamp: float rightness limit of intensity
-GlowSequence.quality -> quality: int Accuracy of the blur effect
-GlowSequence.threshold -> threshold: float Minimum intensity to trigger a glow
-GreasePencil.draw_mode -> draw_mode: enum
-GreasePencil.layers -> layers: collection, (read-only)
-Group.dupli_offset -> dupli_offset: float Offset from the origin to use when instancing as DupliGroup
-Group.objects -> objects: collection, (read-only) A collection of this groups objects
-Header.bl_idname -> bl_idname: string
-Header.bl_space_type -> bl_space_type: enum
-Header.layout -> layout: pointer, (read-only)
-Histogram.mode -> mode: enum Channels to display when drawing the histogram
-HookModifier.falloff -> falloff: float If not zero, the distance from the hook where influence ends
-HookModifier.force -> force: float Relative force of the hook
-HookModifier.object -> object: pointer Parent Object for hook, also recalculates and clears offset
-HookModifier.subtarget -> subtarget: string Name of Parent Bone for hook (if applicable), also recalculates and clears offset
-HookModifier.vertex_group -> vertex_group: string Vertex group name
-ID.library -> library: pointer, (read-only) Library file the datablock is linked from
-ID.name -> name: string Unique datablock ID name
-ID.users -> users: int, (read-only) Number of times this datablock is referenced
-IDProperty.collection -> collection: collection, (read-only)
-IDProperty.double -> double: float
-IDProperty.double_array -> double_array: float
-IDProperty.float -> float: float
-IDProperty.float_array -> float_array: float
-IDProperty.group -> group: pointer, (read-only)
-IDProperty.int -> int: int
-IDProperty.int_array -> int_array: int
-IDProperty.string -> string: string
-IDPropertyGroup.name -> name: string Unique name used in the code and scripting
-IKParam.ik_solver -> ik_solver: enum, (read-only) IK solver for which these parameters are defined, 0 for Legacy, 1 for iTaSC
-Image.animation_end -> animation_end: int End frame of an animated texture
-Image.animation_speed -> animation_speed: int Speed of the animation in frames per second
-Image.animation_start -> animation_start: int Start frame of an animated texture
-Image.bindcode -> bindcode: int, (read-only) OpenGL bindcode
-Image.depth -> depth: int, (read-only) Image bit depth
-Image.display_aspect -> display_aspect: float Display Aspect for this image, does not affect rendering
-Image.field_order -> field_order: enum Order of video fields. Select which lines are displayed first
-Image.file_format -> file_format: enum Format used for re-saving this file
-Image.filepath -> filepath: string Image/Movie file name
-Image.filepath_raw -> filepath_raw: string Image/Movie file name (without data refreshing)
-Image.generated_height -> generated_height: int Generated image height
-Image.generated_type -> generated_type: enum Generated image type
-Image.generated_width -> generated_width: int Generated image width
-Image.mapping -> mapping: enum Mapping type to use for this image in the game engine
-Image.packed_file -> packed_file: pointer, (read-only)
-Image.size -> size: int, (read-only) Width and height in pixels, zero when image data cant be loaded
-Image.source -> source: enum Where the image comes from
-Image.tiles_x -> tiles_x: int Degree of repetition in the X direction
-Image.tiles_y -> tiles_y: int Degree of repetition in the Y direction
-Image.type -> type: enum, (read-only) How to generate the image
-ImagePaint.normal_angle -> normal_angle: int Paint most on faces pointing towards the view according to this angle
-ImagePaint.screen_grab_size -> screen_grab_size: int Size to capture the image for re-projecting
-ImagePaint.seam_bleed -> seam_bleed: int Extend paint beyond the faces UVs to reduce seams (in pixels, slower)
-ImageSequence.animation_end_offset -> animation_end_offset: int Animation end offset (trim end)
-ImageSequence.animation_start_offset -> animation_start_offset: int Animation start offset (trim start)
-ImageSequence.color_balance -> color_balance: pointer, (read-only)
-ImageSequence.crop -> crop: pointer, (read-only)
-ImageSequence.directory -> directory: string
-ImageSequence.elements -> elements: collection, (read-only)
-ImageSequence.multiply_colors -> multiply_colors: float
-ImageSequence.proxy -> proxy: pointer, (read-only)
-ImageSequence.strobe -> strobe: float Only display every nth frame
-ImageSequence.transform -> transform: pointer, (read-only)
-ImageTexture.checker_distance -> checker_distance: float Sets distance between checker tiles
-ImageTexture.crop_max_x -> crop_max_x: float Sets maximum X value to crop the image
-ImageTexture.crop_max_y -> crop_max_y: float Sets maximum Y value to crop the image
-ImageTexture.crop_min_x -> crop_min_x: float Sets minimum X value to crop the image
-ImageTexture.crop_min_y -> crop_min_y: float Sets minimum Y value to crop the image
-ImageTexture.extension -> extension: enum Sets how the image is extrapolated past its original bounds
-ImageTexture.filter -> filter: enum Texture filter to use for sampling image
-ImageTexture.filter_eccentricity -> filter_eccentricity: int Maximum eccentricity. Higher gives less blur at distant/oblique angles, but is also slower
-ImageTexture.filter_probes -> filter_probes: int Maximum number of samples. Higher gives less blur at distant/oblique angles, but is also slower
-ImageTexture.filter_size -> filter_size: float Multiplies the filter size used by MIP Map and Interpolation
-ImageTexture.image -> image: pointer
-ImageTexture.image_user -> image_user: pointer, (read-only) Parameters defining which layer, pass and frame of the image is displayed
-ImageTexture.normal_space -> normal_space: enum Sets space of normal map image
-ImageTexture.repeat_x -> repeat_x: int Sets a repetition multiplier in the X direction
-ImageTexture.repeat_y -> repeat_y: int Sets a repetition multiplier in the Y direction
-ImageUser.fields_per_frame -> fields_per_frame: int The number of fields per rendered frame (2 fields is 1 image)
-ImageUser.frame_start -> frame_start: int Sets the global starting frame of the movie
-ImageUser.frames -> frames: int Sets the number of images of a movie to use
-ImageUser.multilayer_layer -> multilayer_layer: int, (read-only) Layer in multilayer image
-ImageUser.multilayer_pass -> multilayer_pass: int, (read-only) Pass in multilayer image
-ImageUser.offset -> offset: int Offsets the number of the frame to use in the animation
-InflowFluidSettings.inflow_velocity -> inflow_velocity: float Initial velocity of fluid
-InflowFluidSettings.volume_initialization -> volume_initialization: enum Volume initialization type
-IntProperty.array_length -> array_length: int, (read-only) Maximum length of the array, 0 means unlimited
-IntProperty.default -> default: int, (read-only) Default value for this number
-IntProperty.default_array -> default_array: int, (read-only) Default value for this array
-IntProperty.hard_max -> hard_max: int, (read-only) Maximum value used by buttons
-IntProperty.hard_min -> hard_min: int, (read-only) Minimum value used by buttons
-IntProperty.soft_max -> soft_max: int, (read-only) Maximum value used by buttons
-IntProperty.soft_min -> soft_min: int, (read-only) Minimum value used by buttons
-IntProperty.step -> step: int, (read-only) Step size used by number buttons, for floats 1/100th of the step size
-Itasc.dampeps -> dampeps: float Singular value under which damping is progressively applied. Higher values=more stability, less reactivity. Default=0.1
-Itasc.dampmax -> dampmax: float Maximum damping coefficient when singular value is nearly 0. Higher values=more stability, less reactivity. Default=0.5
-Itasc.feedback -> feedback: float Feedback coefficient for error correction. Average response time=1/feedback. Default=20
-Itasc.max_step -> step_max: float Higher bound for timestep in second in case of automatic substeps
-Itasc.max_velocity -> velocity_max: float Maximum joint velocity in rad/s. Default=50
-Itasc.min_step -> step_min: float Lower bound for timestep in second in case of automatic substeps
-Itasc.mode -> mode: enum
-Itasc.num_iter -> num_iter: int Maximum number of iterations for convergence in case of reiteration
-Itasc.num_step -> num_step: int Divides the frame interval into this many steps
-Itasc.precision -> precision: float Precision of convergence in case of reiteration
-Itasc.reiteration -> reiteration: enum Defines if the solver is allowed to reiterate (converges until precision is met) on none, first or all frames
-Itasc.solver -> solver: enum Solving method selection: Automatic damping or manual damping
-JoystickSensor.axis_direction -> axis_direction: enum The direction of the axis
-JoystickSensor.axis_number -> axis_number: int Specify which axis pair to use, 1 is usually the main direction input
-JoystickSensor.axis_threshold -> axis_threshold: int Specify the precision of the axis
-JoystickSensor.button_number -> button_number: int Specify which button to use
-JoystickSensor.event_type -> event_type: enum The type of event this joystick sensor is triggered on
-JoystickSensor.hat_direction -> hat_direction: enum Specify hat direction
-JoystickSensor.hat_number -> hat_number: int Specify which hat to use
-JoystickSensor.joystick_index -> joystick_index: int Specify which joystick to use
-JoystickSensor.single_axis_number -> single_axis_number: int Specify a single axis (verticle/horizontal/other) to detect
-Key.animation_data -> animation_data: pointer, (read-only) Animation data for this datablock
-Key.keys -> keys: collection, (read-only) Shape keys
-Key.reference_key -> reference_key: pointer, (read-only)
-Key.slurph -> slurph: int Creates a delay in amount of frames in applying keypositions, first vertex goes first
-Key.user -> user: pointer, (read-only) Datablock using these shape keys
-KeyConfig.keymaps -> keymaps: collection, (read-only) Key maps configured as part of this configuration
-KeyConfig.name -> name: string Name of the key configuration
-KeyMap.items -> items: collection, (read-only) Items in the keymap, linking an operator to an input event
-KeyMap.name -> name: string, (read-only) Name of the key map
-KeyMap.region_type -> region_type: enum, (read-only) Optional region type keymap is associated with
-KeyMap.space_type -> space_type: enum, (read-only) Optional space type keymap is associated with
-KeyMapItem.id -> id: int, (read-only) ID of the item
-KeyMapItem.idname -> idname: string Identifier of operator to call on input event
-KeyMapItem.key_modifier -> key_modifier: enum Regular key pressed as a modifier
-KeyMapItem.map_type -> map_type: enum Type of event mapping
-KeyMapItem.name -> name: string, (read-only) Name of operator to call on input event
-KeyMapItem.properties -> properties: pointer, (read-only) Properties to set when the operator is called
-KeyMapItem.propvalue -> propvalue: enum The value this event translates to in a modal keymap
-KeyMapItem.type -> type: enum Type of event
-KeyMapItem.value -> value: enum
-KeyboardSensor.key -> key: enum
-KeyboardSensor.log -> log: string Property that receive the keystrokes in case a string is logged
-KeyboardSensor.modifier_key -> modifier_key: enum Modifier key code
-KeyboardSensor.second_modifier_key -> second_modifier_key: enum Modifier key code
-KeyboardSensor.target -> target: string Property that indicates whether to log keystrokes as a string
-Keyframe.co -> co: float Coordinates of the control point
-Keyframe.handle1 -> handle_left: float Coordinates of the first handle
-Keyframe.handle1_type -> handle_left_type: enum Handle types
-Keyframe.handle2 -> handle_right: float Coordinates of the second handle
-Keyframe.handle2_type -> handle_right_type: enum Handle types
-Keyframe.interpolation -> interpolation: enum Interpolation method to use for segment of the curve from this Keyframe until the next Keyframe
-Keyframe.type -> type: enum The type of keyframe
-KeyingSet.active_path -> active_path: pointer Active Keying Set used to insert/delete keyframes
-KeyingSet.active_path_index -> active_path_index: int Current Keying Set index
-KeyingSet.name -> name: string
-KeyingSet.paths -> paths: collection, (read-only) Keying Set Paths to define settings that get keyframed together
-KeyingSet.type_info -> type_info: pointer, (read-only) Callback function defines for built-in Keying Sets
-KeyingSetInfo.bl_idname -> bl_idname: string
-KeyingSetInfo.bl_label -> bl_label: string
-KeyingSetPath.array_index -> array_index: int Index to the specific setting if applicable
-KeyingSetPath.data_path -> data_path: string Path to property setting
-KeyingSetPath.group -> group: string Name of Action Group to assign setting(s) for this path to
-KeyingSetPath.grouping -> group_method: enum Method used to define which Group-name to use
-KeyingSetPath.id -> id: pointer ID-Block that keyframes for Keying Set should be added to (for Absolute Keying Sets only)
-KeyingSetPath.id_type -> id_type: enum Type of ID-block that can be used
-KinematicConstraint.axis_reference -> axis_reference: enum Constraint axis Lock options relative to Bone or Target reference
-KinematicConstraint.chain_length -> chain_length: int How many bones are included in the IK effect - 0 uses all bones
-KinematicConstraint.distance -> distance: float Radius of limiting sphere
-KinematicConstraint.ik_type -> ik_type: enum
-KinematicConstraint.iterations -> iterations: int Maximum number of solving iterations
-KinematicConstraint.limit_mode -> limit_mode: enum Distances in relation to sphere of influence to allow
-KinematicConstraint.orient_weight -> orient_weight: float For Tree-IK: Weight of orientation control for this target
-KinematicConstraint.pole_angle -> pole_angle: float Pole rotation offset
-KinematicConstraint.pole_subtarget -> pole_subtarget: string
-KinematicConstraint.pole_target -> pole_target: pointer Object for pole rotation
-KinematicConstraint.subtarget -> subtarget: string
-KinematicConstraint.target -> target: pointer Target Object
-KinematicConstraint.weight -> weight: float For Tree-IK: Weight of position control for this target
-Lamp.active_texture -> active_texture: pointer Active texture slot being displayed
-Lamp.active_texture_index -> active_texture_index: int Index of active texture slot
-Lamp.animation_data -> animation_data: pointer, (read-only) Animation data for this datablock
-Lamp.color -> color: float Light color
-Lamp.distance -> distance: float Falloff distance - the light is at half the original intensity at this point
-Lamp.energy -> energy: float Amount of light that the lamp emits
-Lamp.texture_slots -> texture_slots: collection, (read-only) Texture slots defining the mapping and influence of textures
-Lamp.type -> type: enum Type of Lamp
-LampSkySettings.atmosphere_distance_factor -> atmosphere_distance_factor: float Multiplier to convert blender units to physical distance
-LampSkySettings.atmosphere_extinction -> atmosphere_extinction: float Extinction scattering contribution factor
-LampSkySettings.atmosphere_inscattering -> atmosphere_inscattering: float Scatter contribution factor
-LampSkySettings.atmosphere_turbidity -> atmosphere_turbidity: float Sky turbidity
-LampSkySettings.backscattered_light -> backscattered_light: float Backscattered light
-LampSkySettings.horizon_brightness -> horizon_intensity: float Horizon brightness
-LampSkySettings.sky_blend -> sky_blend: float Blend factor with sky
-LampSkySettings.sky_blend_type -> sky_blend_type: enum Blend mode for combining sun sky with world sky
-LampSkySettings.sky_color_space -> sky_color_space: enum Color space to use for internal XYZ->RGB color conversion
-LampSkySettings.sky_exposure -> sky_exposure: float Strength of sky shading exponential exposure correction
-LampSkySettings.spread -> spread: float Horizon Spread
-LampSkySettings.sun_brightness -> sun_intensity: float Sun brightness
-LampSkySettings.sun_intensity -> sun_intensity: float Sun intensity
-LampSkySettings.sun_size -> sun_size: float Sun size
-LampTextureSlot.color_factor -> color_factor: float Amount texture affects color values
-LampTextureSlot.object -> object: pointer Object to use for mapping with Object texture coordinates
-LampTextureSlot.shadow_factor -> shadow_factor: float Amount texture affects shadow
-LampTextureSlot.texture_coordinates -> texture_coordinates: enum
-Lattice.interpolation_type_u -> interpolation_type_u: enum
-Lattice.interpolation_type_v -> interpolation_type_v: enum
-Lattice.interpolation_type_w -> interpolation_type_w: enum
-Lattice.points -> points: collection, (read-only) Points of the lattice
-Lattice.points_u -> points_u: int Points in U direction
-Lattice.points_v -> points_v: int Points in V direction
-Lattice.points_w -> points_w: int Points in W direction
-Lattice.shape_keys -> shape_keys: pointer, (read-only)
-Lattice.vertex_group -> vertex_group: string Vertex group to apply the influence of the lattice
-LatticeModifier.object -> object: pointer Lattice object to deform with
-LatticeModifier.vertex_group -> vertex_group: string Vertex group name
-LatticePoint.co -> co: float, (read-only)
-LatticePoint.deformed_co -> deformed_co: float
-LatticePoint.groups -> groups: collection, (read-only) Weights for the vertex groups this point is member of
-Library.filepath -> filepath: string Path to the library .blend file
-Library.parent -> parent: pointer, (read-only)
-LimitDistanceConstraint.distance -> distance: float Radius of limiting sphere
-LimitDistanceConstraint.limit_mode -> limit_mode: enum Distances in relation to sphere of influence to allow
-LimitDistanceConstraint.subtarget -> subtarget: string
-LimitDistanceConstraint.target -> target: pointer Target Object
-LimitLocationConstraint.maximum_x -> max_x: float Highest X value to allow
-LimitLocationConstraint.maximum_y -> max_y: float Highest Y value to allow
-LimitLocationConstraint.maximum_z -> max_z: float Highest Z value to allow
-LimitLocationConstraint.minimum_x -> min_x: float Lowest X value to allow
-LimitLocationConstraint.minimum_y -> min_y: float Lowest Y value to allow
-LimitLocationConstraint.minimum_z -> min_z: float Lowest Z value to allow
-LimitRotationConstraint.maximum_x -> max_x: float Highest X value to allow
-LimitRotationConstraint.maximum_y -> max_y: float Highest Y value to allow
-LimitRotationConstraint.maximum_z -> max_z: float Highest Z value to allow
-LimitRotationConstraint.minimum_x -> min_x: float Lowest X value to allow
-LimitRotationConstraint.minimum_y -> min_y: float Lowest Y value to allow
-LimitRotationConstraint.minimum_z -> min_z: float Lowest Z value to allow
-LimitScaleConstraint.maximum_x -> max_x: float Highest X value to allow
-LimitScaleConstraint.maximum_y -> max_y: float Highest Y value to allow
-LimitScaleConstraint.maximum_z -> max_z: float Highest Z value to allow
-LimitScaleConstraint.minimum_x -> min_x: float Lowest X value to allow
-LimitScaleConstraint.minimum_y -> min_y: float Lowest Y value to allow
-LimitScaleConstraint.minimum_z -> min_z: float Lowest Z value to allow
-LockedTrackConstraint.locked -> locked: enum Axis that points upward
-LockedTrackConstraint.subtarget -> subtarget: string
-LockedTrackConstraint.target -> target: pointer Target Object
-LockedTrackConstraint.track -> track: enum Axis that points to the target object
-Macro.bl_description -> bl_description: string
-Macro.bl_idname -> bl_idname: string
-Macro.bl_label -> bl_label: string
-Macro.bl_options -> bl_options: enum Options for this operator type
-Macro.name -> name: string, (read-only)
-Macro.properties -> properties: pointer, (read-only)
-MagicTexture.noise_depth -> noise_depth: int Sets the depth of the cloud calculation
-MagicTexture.turbulence -> turbulence: float Sets the turbulence of the bandnoise and ringnoise types
-Main.actions -> actions: collection, (read-only) Action datablocks.
-Main.armatures -> armatures: collection, (read-only) Armature datablocks.
-Main.brushes -> brushes: collection, (read-only) Brush datablocks.
-Main.cameras -> cameras: collection, (read-only) Camera datablocks.
-Main.curves -> curves: collection, (read-only) Curve datablocks.
-Main.filepath -> filepath: string, (read-only) Path to the .blend file
-Main.fonts -> fonts: collection, (read-only) Vector font datablocks.
-Main.gpencil -> gpencil: collection, (read-only) Grease Pencil datablocks.
-Main.groups -> groups: collection, (read-only) Group datablocks.
-Main.images -> images: collection, (read-only) Image datablocks.
-Main.lamps -> lamps: collection, (read-only) Lamp datablocks.
-Main.lattices -> lattices: collection, (read-only) Lattice datablocks.
-Main.libraries -> libraries: collection, (read-only) Library datablocks.
-Main.materials -> materials: collection, (read-only) Material datablocks.
-Main.meshes -> meshes: collection, (read-only) Mesh datablocks.
-Main.metaballs -> metaballs: collection, (read-only) Metaball datablocks.
-Main.node_groups -> node_groups: collection, (read-only) Node group datablocks.
-Main.objects -> objects: collection, (read-only) Object datablocks.
-Main.particles -> particles: collection, (read-only) Particle datablocks.
-Main.scenes -> scenes: collection, (read-only) Scene datablocks.
-Main.screens -> screens: collection, (read-only) Screen datablocks.
-Main.scripts -> scripts: collection, (read-only) Script datablocks (DEPRECATED).
-Main.sounds -> sounds: collection, (read-only) Sound datablocks.
-Main.texts -> texts: collection, (read-only) Text datablocks.
-Main.textures -> textures: collection, (read-only) Texture datablocks.
-Main.window_managers -> window_managers: collection, (read-only) Window manager datablocks.
-Main.worlds -> worlds: collection, (read-only) World datablocks.
-MaintainVolumeConstraint.axis -> axis: enum The free scaling axis of the object
-MaintainVolumeConstraint.volume -> volume: float Volume of the bone at rest
-MarbleTexture.nabla -> nabla: float Size of derivative offset used for calculating normal
-MarbleTexture.noise_basis -> noise_basis: enum Sets the noise basis used for turbulence
-MarbleTexture.noise_depth -> noise_depth: int Sets the depth of the cloud calculation
-MarbleTexture.noise_size -> noise_size: float Sets scaling for noise input
-MarbleTexture.noise_type -> noise_type: enum
-MarbleTexture.noisebasis2 -> noisebasis2: enum
-MarbleTexture.stype -> stype: enum
-MarbleTexture.turbulence -> turbulence: float Sets the turbulence of the bandnoise and ringnoise types
-MaskModifier.armature -> armature: pointer Armature to use as source of bones to mask
-MaskModifier.mode -> mode: enum
-MaskModifier.vertex_group -> vertex_group: string Vertex group name
-Material.active_node_material -> active_node_material: pointer Active node material
-Material.active_texture -> active_texture: pointer Active texture slot being displayed
-Material.active_texture_index -> active_texture_index: int Index of active texture slot
-Material.alpha -> alpha: float Alpha transparency of the material
-Material.ambient -> ambient: float Amount of global ambient color the material receives
-Material.animation_data -> animation_data: pointer, (read-only) Animation data for this datablock
-Material.darkness -> darkness: float Minnaert darkness
-Material.diffuse_color -> diffuse_color: float
-Material.diffuse_fresnel -> diffuse_fresnel: float Power of Fresnel
-Material.diffuse_fresnel_factor -> diffuse_fresnel_factor: float Blending factor of Fresnel
-Material.diffuse_intensity -> diffuse_intensity: float Amount of diffuse reflection
-Material.diffuse_ramp -> diffuse_ramp: pointer, (read-only) Color ramp used to affect diffuse shading
-Material.diffuse_ramp_blend -> diffuse_ramp_blend: enum
-Material.diffuse_ramp_factor -> diffuse_ramp_factor: float Blending factor (also uses alpha in Colorband)
-Material.diffuse_ramp_input -> diffuse_ramp_input: enum
-Material.diffuse_shader -> diffuse_shader: enum
-Material.diffuse_toon_size -> diffuse_toon_size: float Size of diffuse toon area
-Material.diffuse_toon_smooth -> diffuse_toon_smooth: float Smoothness of diffuse toon area
-Material.emit -> emit: float Amount of light to emit
-Material.halo -> halo: pointer, (read-only) Halo settings for the material
-Material.light_group -> light_group: pointer Limit lighting to lamps in this Group
-Material.mirror_color -> mirror_color: float Mirror color of the material
-Material.node_tree -> node_tree: pointer, (read-only) Node tree for node based materials
-Material.physics -> physics: pointer, (read-only) Game physics settings
-Material.preview_render_type -> preview_render_type: enum Type of preview render
-Material.raytrace_mirror -> raytrace_mirror: pointer, (read-only) Raytraced reflection settings for the material
-Material.raytrace_transparency -> raytrace_transparency: pointer, (read-only) Raytraced transparency settings for the material
-Material.roughness -> rough: float Oren-Nayar Roughness
-Material.shadow_buffer_bias -> shadow_buffer_bias: float Factor to multiply shadow buffer bias with (0 is ignore.)
-Material.shadow_casting_alpha -> shadow_cast_alpha: float Shadow casting alpha, in use for Irregular and Deep shadow buffer
-Material.shadow_ray_bias -> shadow_ray_bias: float Shadow raytracing bias to prevent terminator problems on shadow boundary
-Material.specular_alpha -> specular_alpha: float Alpha transparency for specular areas
-Material.specular_color -> specular_color: float Specular color of the material
-Material.specular_hardness -> specular_hard: int
-Material.specular_intensity -> specular_intensity: float
-Material.specular_ior -> specular_ior: float
-Material.specular_ramp -> specular_ramp: pointer, (read-only) Color ramp used to affect specular shading
-Material.specular_ramp_blend -> specular_ramp_blend: enum
-Material.specular_ramp_factor -> specular_ramp_factor: float Blending factor (also uses alpha in Colorband)
-Material.specular_ramp_input -> specular_ramp_input: enum
-Material.specular_shader -> specular_shader: enum
-Material.specular_slope -> specular_slope: float The standard deviation of surface slope
-Material.specular_toon_size -> specular_toon_size: float Size of specular toon area
-Material.specular_toon_smooth -> specular_toon_smooth: float Smoothness of specular toon area
-Material.strand -> strand: pointer, (read-only) Strand settings for the material
-Material.subsurface_scattering -> subsurface_scattering: pointer, (read-only) Subsurface scattering settings for the material
-Material.texture_slots -> texture_slots: collection, (read-only) Texture slots defining the mapping and influence of textures
-Material.translucency -> translucency: float Amount of diffuse shading on the back side
-Material.transparency_method -> transparency_method: enum Method to use for rendering transparency
-Material.type -> type: enum Material type defining how the object is rendered
-Material.volume -> volume: pointer, (read-only) Volume settings for the material
-Material.z_offset -> z_offset: float Gives faces an artificial offset in the Z buffer for Z transparency
-MaterialHalo.add -> add: float Sets the strength of the add effect
-MaterialHalo.flare_boost -> flare_boost: float Gives the flare extra strength
-MaterialHalo.flare_seed -> flare_seed: int Specifies an offset in the flare seed table
-MaterialHalo.flare_size -> flare_size: float Sets the factor by which the flare is larger than the halo
-MaterialHalo.flare_subsize -> flare_subsize: float Sets the dimension of the subflares, dots and circles
-MaterialHalo.flares_sub -> flares_sub: int Sets the number of subflares
-MaterialHalo.hardness -> hard: int Sets the hardness of the halo
-MaterialHalo.line_number -> line_number: int Sets the number of star shaped lines rendered over the halo
-MaterialHalo.rings -> rings: int Sets the number of rings rendered over the halo
-MaterialHalo.seed -> seed: int Randomizes ring dimension and line location
-MaterialHalo.size -> size: float Sets the dimension of the halo
-MaterialHalo.star_tips -> star_tips: int Sets the number of points on the star shaped halo
-MaterialPhysics.damp -> damp: float Damping of the spring force, when inside the physics distance area
-MaterialPhysics.distance -> distance: float Distance of the physics area
-MaterialPhysics.elasticity -> elasticity: float Elasticity of collisions
-MaterialPhysics.force -> force: float Upward spring force, when inside the physics distance area
-MaterialPhysics.friction -> friction: float Coulomb friction coefficient, when inside the physics distance area
-MaterialRaytraceMirror.depth -> depth: int Maximum allowed number of light inter-reflections
-MaterialRaytraceMirror.distance -> distance: float Maximum distance of reflected rays. Reflections further than this range fade to sky color or material color
-MaterialRaytraceMirror.fade_to -> fade_to: enum The color that rays with no intersection within the Max Distance take. Material color can be best for indoor scenes, sky color for outdoor
-MaterialRaytraceMirror.fresnel -> fresnel: float Power of Fresnel for mirror reflection
-MaterialRaytraceMirror.fresnel_factor -> fresnel_factor: float Blending factor for Fresnel
-MaterialRaytraceMirror.gloss_anisotropic -> gloss_anisotropic: float The shape of the reflection, from 0.0 (circular) to 1.0 (fully stretched along the tangent
-MaterialRaytraceMirror.gloss_factor -> gloss_factor: float The shininess of the reflection. Values < 1.0 give diffuse, blurry reflections
-MaterialRaytraceMirror.gloss_samples -> gloss_samples: int Number of cone samples averaged for blurry reflections
-MaterialRaytraceMirror.gloss_threshold -> gloss_threshold: float Threshold for adaptive sampling. If a sample contributes less than this amount (as a percentage), sampling is stopped
-MaterialRaytraceMirror.reflect_factor -> reflect_factor: float Sets the amount mirror reflection for raytrace
-MaterialRaytraceTransparency.depth -> depth: int Maximum allowed number of light inter-refractions
-MaterialRaytraceTransparency.falloff -> falloff: float Falloff power for transmissivity filter effect (1.0 is linear)
-MaterialRaytraceTransparency.filter -> filter: float Amount to blend in the material's diffuse color in raytraced transparency (simulating absorption)
-MaterialRaytraceTransparency.fresnel -> fresnel: float Power of Fresnel for transparency (Ray or ZTransp)
-MaterialRaytraceTransparency.fresnel_factor -> fresnel_factor: float Blending factor for Fresnel
-MaterialRaytraceTransparency.gloss_factor -> gloss_factor: float The clarity of the refraction. Values < 1.0 give diffuse, blurry refractions
-MaterialRaytraceTransparency.gloss_samples -> gloss_samples: int Number of cone samples averaged for blurry refractions
-MaterialRaytraceTransparency.gloss_threshold -> gloss_threshold: float Threshold for adaptive sampling. If a sample contributes less than this amount (as a percentage), sampling is stopped
-MaterialRaytraceTransparency.ior -> ior: float Sets angular index of refraction for raytraced refraction
-MaterialRaytraceTransparency.limit -> limit: float Maximum depth for light to travel through the transparent material before becoming fully filtered (0.0 is disabled)
-MaterialSlot.link -> link: enum Link material to object or the object's data
-MaterialSlot.material -> material: pointer Material datablock used by this material slot
-MaterialSlot.name -> name: string, (read-only) Material slot name
-MaterialStrand.blend_distance -> blend_distance: float Worldspace distance over which to blend in the surface normal
-MaterialStrand.min_size -> size_min: float Minimum size of strands in pixels
-MaterialStrand.root_size -> root_size: float Start size of strands in pixels or Blender units
-MaterialStrand.shape -> shape: float Positive values make strands rounder, negative makes strands spiky
-MaterialStrand.tip_size -> tip_size: float End size of strands in pixels or Blender units
-MaterialStrand.uv_layer -> uv_layer: string Name of UV layer to override
-MaterialStrand.width_fade -> width_fade: float Transparency along the width of the strand
-MaterialSubsurfaceScattering.back -> back: float Back scattering weight
-MaterialSubsurfaceScattering.color -> color: float Scattering color
-MaterialSubsurfaceScattering.color_factor -> color_factor: float Blend factor for SSS colors
-MaterialSubsurfaceScattering.error_tolerance -> error_tolerance: float Error tolerance (low values are slower and higher quality)
-MaterialSubsurfaceScattering.front -> front: float Front scattering weight
-MaterialSubsurfaceScattering.ior -> ior: float Index of refraction (higher values are denser)
-MaterialSubsurfaceScattering.radius -> radius: float Mean red/green/blue scattering path length
-MaterialSubsurfaceScattering.scale -> scale: float Object scale factor
-MaterialSubsurfaceScattering.texture_factor -> texture_factor: float Texture scatting blend factor
-MaterialTextureSlot.alpha_factor -> alpha_factor: float Amount texture affects alpha
-MaterialTextureSlot.ambient_factor -> ambient_factor: float Amount texture affects ambient
-MaterialTextureSlot.colordiff_factor -> colordiff_factor: float Amount texture affects diffuse color
-MaterialTextureSlot.coloremission_factor -> coloremission_factor: float Amount texture affects emission color
-MaterialTextureSlot.colorreflection_factor -> colorreflection_factor: float Amount texture affects color of out-scattered light
-MaterialTextureSlot.colorspec_factor -> colorspec_factor: float Amount texture affects specular color
-MaterialTextureSlot.colortransmission_factor -> colortransmission_factor: float Amount texture affects result color after light has been scattered/absorbed
-MaterialTextureSlot.density_factor -> density_factor: float Amount texture affects density
-MaterialTextureSlot.diffuse_factor -> diffuse_factor: float Amount texture affects diffuse reflectivity
-MaterialTextureSlot.displacement_factor -> displacement_factor: float Amount texture displaces the surface
-MaterialTextureSlot.emission_factor -> emission_factor: float Amount texture affects emission
-MaterialTextureSlot.emit_factor -> emit_factor: float Amount texture affects emission
-MaterialTextureSlot.hardness_factor -> hard_factor: float Amount texture affects hardness
-MaterialTextureSlot.mapping -> mapping: enum
-MaterialTextureSlot.mirror_factor -> mirror_factor: float Amount texture affects mirror color
-MaterialTextureSlot.normal_factor -> normal_factor: float Amount texture affects normal values
-MaterialTextureSlot.normal_map_space -> normal_map_space: enum
-MaterialTextureSlot.object -> object: pointer Object to use for mapping with Object texture coordinates
-MaterialTextureSlot.raymir_factor -> raymir_factor: float Amount texture affects ray mirror
-MaterialTextureSlot.reflection_factor -> reflection_factor: float Amount texture affects brightness of out-scattered light
-MaterialTextureSlot.scattering_factor -> scattering_factor: float Amount texture affects scattering
-MaterialTextureSlot.specular_factor -> specular_factor: float Amount texture affects specular reflectivity
-MaterialTextureSlot.texture_coordinates -> texture_coordinates: enum
-MaterialTextureSlot.translucency_factor -> translucency_factor: float Amount texture affects translucency
-MaterialTextureSlot.uv_layer -> uv_layer: string UV layer to use for mapping with UV texture coordinates
-MaterialTextureSlot.warp_factor -> warp_factor: float Amount texture affects texture coordinates of next channels
-MaterialTextureSlot.x_mapping -> x_mapping: enum
-MaterialTextureSlot.y_mapping -> y_mapping: enum
-MaterialTextureSlot.z_mapping -> z_mapping: enum
-MaterialVolume.asymmetry -> asymmetry: float Back scattering (-1.0) to Forward scattering (1.0) and the range in between
-MaterialVolume.cache_resolution -> cache_resolution: int Resolution of the voxel grid, low resolutions are faster, high resolutions use more memory
-MaterialVolume.density -> density: float The base density of the volume
-MaterialVolume.density_scale -> density_scale: float Multiplier for the material's density
-MaterialVolume.depth_cutoff -> depth_cutoff: float Stop ray marching early if transmission drops below this luminance - higher values give speedups in dense volumes at the expense of accuracy
-MaterialVolume.emission -> emission: float Amount of light that gets emitted by the volume
-MaterialVolume.emission_color -> emission_color: float
-MaterialVolume.lighting_mode -> light_mode: enum Method of shading, attenuating, and scattering light through the volume
-MaterialVolume.ms_diffusion -> ms_diffusion: float Diffusion factor, the strength of the blurring effect
-MaterialVolume.ms_intensity -> ms_intensity: float Multiplier for multiple scattered light energy
-MaterialVolume.ms_spread -> ms_spread: float Proportional distance over which the light is diffused
-MaterialVolume.reflection -> reflection: float Multiplier to make out-scattered light brighter or darker (non-physically correct)
-MaterialVolume.reflection_color -> reflection_color: float Colour of light scattered out of the volume (does not affect transmission)
-MaterialVolume.scattering -> scattering: float Amount of light that gets scattered out by the volume - the more out-scattering, the shallower the light will penetrate
-MaterialVolume.step_calculation -> step_calculation: enum Method of calculating the steps through the volume
-MaterialVolume.step_size -> step_size: float Distance between subsequent volume depth samples
-MaterialVolume.transmission_color -> transmission_color: float Result color of the volume, after other light has been scattered/absorbed
-Menu.bl_idname -> bl_idname: string
-Menu.bl_label -> bl_label: string
-Menu.layout -> layout: pointer, (read-only)
-Mesh.active_uv_texture -> active_uv_texture: pointer Active UV texture
-Mesh.active_uv_texture_index -> active_uv_texture_index: int Active UV texture index
-Mesh.active_vertex_color -> active_vertex_color: pointer Active vertex color layer
-Mesh.active_vertex_color_index -> active_vertex_color_index: int Active vertex color index
-Mesh.animation_data -> animation_data: pointer, (read-only) Animation data for this datablock
-Mesh.autosmooth_angle -> autosmooth_angle: int Defines maximum angle between face normals that 'Auto Smooth' will operate on
-Mesh.edges -> edges: collection, (read-only) Edges of the mesh
-Mesh.faces -> faces: collection, (read-only) Faces of the mesh
-Mesh.float_layers -> float_layers: collection, (read-only)
-Mesh.int_layers -> int_layers: collection, (read-only)
-Mesh.materials -> materials: collection, (read-only)
-Mesh.shape_keys -> shape_keys: pointer, (read-only)
-Mesh.sticky -> sticky: collection, (read-only) Sticky texture coordinates
-Mesh.string_layers -> string_layers: collection, (read-only)
-Mesh.texco_mesh -> texco_mesh: pointer Derive texture coordinates from another mesh
-Mesh.texspace_loc -> texspace_loc: float Texture space location
-Mesh.texspace_size -> texspace_size: float Texture space size
-Mesh.texture_mesh -> texture_mesh: pointer Use another mesh for texture indices (vertex indices must be aligned)
-Mesh.total_edge_sel -> total_edge_sel: int, (read-only) Selected edge count in editmode
-Mesh.total_face_sel -> total_face_sel: int, (read-only) Selected face count in editmode
-Mesh.total_vert_sel -> total_vert_sel: int, (read-only) Selected vertex count in editmode
-Mesh.uv_texture_clone -> uv_texture_clone: pointer UV texture to be used as cloning source
-Mesh.uv_texture_clone_index -> uv_texture_clone_index: int Clone UV texture index
-Mesh.uv_texture_stencil -> uv_texture_stencil: pointer UV texture to mask the painted area
-Mesh.uv_texture_stencil_index -> uv_texture_stencil_index: int Mask UV texture index
-Mesh.uv_textures -> uv_textures: collection, (read-only)
-Mesh.vertex_colors -> vertex_colors: collection, (read-only)
-Mesh.verts -> verts: collection, (read-only) Vertices of the mesh
-MeshColor.color1 -> color1: float
-MeshColor.color2 -> color2: float
-MeshColor.color3 -> color3: float
-MeshColor.color4 -> color4: float
-MeshColorLayer.data -> data: collection, (read-only)
-MeshColorLayer.name -> name: string
-MeshDeformModifier.object -> object: pointer Mesh object to deform with
-MeshDeformModifier.precision -> precision: int The grid size for binding
-MeshDeformModifier.vertex_group -> vertex_group: string Vertex group name
-MeshEdge.bevel_weight -> bevel_weight: float Weight used by the Bevel modifier
-MeshEdge.crease -> crease: float Weight used by the Subsurf modifier for creasing
-MeshEdge.index -> index: int, (read-only) Index number of the vertex
-MeshEdge.verts -> verts: int Vertex indices
-MeshFace.area -> area: float, (read-only) read only area of the face
-MeshFace.index -> index: int, (read-only) Index number of the vertex
-MeshFace.material_index -> material_index: int
-MeshFace.normal -> normal: float, (read-only) local space unit length normal vector for this face
-MeshFace.verts -> verts: int Vertex indices
-MeshFace.verts_raw -> verts_raw: int Fixed size vertex indices array
-MeshFaces.active -> active: int The active face for this mesh
-MeshFaces.active_tface -> active_tface: pointer, (read-only) Active Texture Face
-MeshFloatProperty.value -> value: float
-MeshFloatPropertyLayer.data -> data: collection, (read-only)
-MeshFloatPropertyLayer.name -> name: string
-MeshIntProperty.value -> value: int
-MeshIntPropertyLayer.data -> data: collection, (read-only)
-MeshIntPropertyLayer.name -> name: string
-MeshSticky.co -> co: float Sticky texture coordinate location
-MeshStringProperty.value -> value: string
-MeshStringPropertyLayer.data -> data: collection, (read-only)
-MeshStringPropertyLayer.name -> name: string
-MeshTextureFace.image -> image: pointer
-MeshTextureFace.transp -> transp: enum Transparency blending mode
-MeshTextureFace.uv -> uv: float
-MeshTextureFace.uv1 -> uv1: float
-MeshTextureFace.uv2 -> uv2: float
-MeshTextureFace.uv3 -> uv3: float
-MeshTextureFace.uv4 -> uv4: float
-MeshTextureFace.uv_raw -> uv_raw: float Fixed size UV coordinates array
-MeshTextureFaceLayer.data -> data: collection, (read-only)
-MeshTextureFaceLayer.name -> name: string
-MeshVertex.bevel_weight -> bevel_weight: float Weight used by the Bevel modifier 'Only Vertices' option
-MeshVertex.co -> co: float
-MeshVertex.groups -> groups: collection, (read-only) Weights for the vertex groups this vertex is member of
-MeshVertex.index -> index: int, (read-only) Index number of the vertex
-MeshVertex.normal -> normal: float Vertex Normal
-MessageActuator.body_message -> body_message: string Optional message body Text
-MessageActuator.body_property -> body_property: string The message body will be set by the Property Value
-MessageActuator.body_type -> body_type: enum Toggle message type: either Text or a PropertyName
-MessageActuator.subject -> subject: string Optional message subject. This is what can be filtered on
-MessageActuator.to_property -> to_property: string Optional send message to objects with this name only, or empty to broadcast
-MessageSensor.subject -> subject: string Optional subject filter: only accept messages with this subject, or empty for all
-MetaBall.active_element -> active_element: pointer, (read-only) Last selected element
-MetaBall.animation_data -> animation_data: pointer, (read-only) Animation data for this datablock
-MetaBall.elements -> elements: collection, (read-only) Meta elements
-MetaBall.flag -> flag: enum Metaball edit update behavior
-MetaBall.materials -> materials: collection, (read-only)
-MetaBall.render_size -> render_size: float Polygonization resolution in rendering
-MetaBall.texspace_loc -> texspace_loc: float Texture space location
-MetaBall.texspace_size -> texspace_size: float Texture space size
-MetaBall.threshold -> threshold: float Influence of meta elements
-MetaBall.wire_size -> wire_size: float Polygonization resolution in the 3D viewport
-MetaElement.location -> location: float
-MetaElement.radius -> radius: float
-MetaElement.rotation -> rotation: float
-MetaElement.size_x -> size_x: float Size of element, use of components depends on element type
-MetaElement.size_y -> size_y: float Size of element, use of components depends on element type
-MetaElement.size_z -> size_z: float Size of element, use of components depends on element type
-MetaElement.stiffness -> stiffness: float Stiffness defines how much of the element to fill
-MetaElement.type -> type: enum Metaball types
-MetaSequence.animation_end_offset -> animation_end_offset: int Animation end offset (trim end)
-MetaSequence.animation_start_offset -> animation_start_offset: int Animation start offset (trim start)
-MetaSequence.color_balance -> color_balance: pointer, (read-only)
-MetaSequence.crop -> crop: pointer, (read-only)
-MetaSequence.multiply_colors -> multiply_colors: float
-MetaSequence.proxy -> proxy: pointer, (read-only)
-MetaSequence.sequences -> sequences: collection, (read-only)
-MetaSequence.strobe -> strobe: float Only display every nth frame
-MetaSequence.transform -> transform: pointer, (read-only)
-MirrorModifier.merge_limit -> merge_limit: float Distance from axis within which mirrored vertices are merged
-MirrorModifier.mirror_object -> mirror_object: pointer Object to use as mirror
-Modifier.name -> name: string Modifier name
-Modifier.type -> type: enum, (read-only)
-MotionPath.frame_end -> frame_end: int, (read-only) End frame of the stored range
-MotionPath.frame_start -> frame_start: int, (read-only) Starting frame of the stored range
-MotionPath.length -> length: int, (read-only) Number of frames cached
-MotionPath.points -> points: collection, (read-only) Cached positions per frame
-MotionPathVert.co -> co: float
-MouseSensor.mouse_event -> mouse_event: enum Specify the type of event this mouse sensor should trigger on
-MovieSequence.animation_end_offset -> animation_end_offset: int Animation end offset (trim end)
-MovieSequence.animation_start_offset -> animation_start_offset: int Animation start offset (trim start)
-MovieSequence.color_balance -> color_balance: pointer, (read-only)
-MovieSequence.crop -> crop: pointer, (read-only)
-MovieSequence.filepath -> filepath: string
-MovieSequence.mpeg_preseek -> mpeg_preseek: int For MPEG movies, preseek this many frames
-MovieSequence.multiply_colors -> multiply_colors: float
-MovieSequence.proxy -> proxy: pointer, (read-only)
-MovieSequence.strobe -> strobe: float Only display every nth frame
-MovieSequence.transform -> transform: pointer, (read-only)
-MulticamSequence.animation_end_offset -> animation_end_offset: int Animation end offset (trim end)
-MulticamSequence.animation_start_offset -> animation_start_offset: int Animation start offset (trim start)
-MulticamSequence.color_balance -> color_balance: pointer, (read-only)
-MulticamSequence.crop -> crop: pointer, (read-only)
-MulticamSequence.multicam_source -> multicam_source: int
-MulticamSequence.multiply_colors -> multiply_colors: float
-MulticamSequence.proxy -> proxy: pointer, (read-only)
-MulticamSequence.strobe -> strobe: float Only display every nth frame
-MulticamSequence.transform -> transform: pointer, (read-only)
-MultiresModifier.filepath -> filepath: string Path to external displacements file
-MultiresModifier.levels -> levels: int Number of subdivisions to use in the viewport
-MultiresModifier.render_levels -> render_levels: int
-MultiresModifier.sculpt_levels -> sculpt_levels: int Number of subdivisions to use in sculpt mode
-MultiresModifier.subdivision_type -> subdivision_type: enum Selects type of subdivision algorithm
-MultiresModifier.total_levels -> total_levels: int, (read-only) Number of subdivisions for which displacements are stored
-MusgraveTexture.gain -> gain: float The gain multiplier
-MusgraveTexture.highest_dimension -> highest_dimension: float Highest fractal dimension
-MusgraveTexture.lacunarity -> lacunarity: float Gap between successive frequencies
-MusgraveTexture.musgrave_type -> musgrave_type: enum
-MusgraveTexture.nabla -> nabla: float Size of derivative offset used for calculating normal
-MusgraveTexture.noise_basis -> noise_basis: enum Sets the noise basis used for turbulence
-MusgraveTexture.noise_intensity -> noise_intensity: float
-MusgraveTexture.noise_size -> noise_size: float Sets scaling for noise input
-MusgraveTexture.octaves -> octaves: float Number of frequencies used
-MusgraveTexture.offset -> offset: float The fractal offset
-NearSensor.distance -> distance: float Trigger distance
-NearSensor.property -> property: string Only look for objects with this property
-NearSensor.reset_distance -> reset_distance: float
-NetRenderJob.name -> name: string
-NetRenderSettings.active_blacklisted_slave_index -> active_blacklisted_slave_index: int
-NetRenderSettings.active_job_index -> active_job_index: int
-NetRenderSettings.active_slave_index -> active_slave_index: int
-NetRenderSettings.chunks -> chunks: int Number of frame to dispatch to each slave in one chunk
-NetRenderSettings.job_category -> job_category: string Category of the job
-NetRenderSettings.job_id -> job_id: string id of the last sent render job
-NetRenderSettings.job_name -> job_name: string Name of the job
-NetRenderSettings.jobs -> jobs: collection, (read-only)
-NetRenderSettings.mode -> mode: enum Mode of operation of this instance
-NetRenderSettings.path -> path: string Path for temporary files
-NetRenderSettings.priority -> priority: int Priority of the job
-NetRenderSettings.server_address -> server_address: string IP or name of the master render server
-NetRenderSettings.server_port -> server_port: int port of the master render server
-NetRenderSettings.slaves -> slaves: collection, (read-only)
-NetRenderSettings.slaves_blacklist -> slaves_blacklist: collection, (read-only)
-NetRenderSlave.name -> name: string
-NlaStrip.action -> action: pointer Action referenced by this strip
-NlaStrip.action_frame_end -> action_frame_end: float
-NlaStrip.action_frame_start -> action_frame_start: float
-NlaStrip.blend_in -> blend_in: float Number of frames at start of strip to fade in influence
-NlaStrip.blend_out -> blend_out: float
-NlaStrip.blending -> blend_type: enum Method used for combining strip's result with accumulated result
-NlaStrip.extrapolation -> extrapolation: enum Action to take for gaps past the strip extents
-NlaStrip.fcurves -> fcurves: collection, (read-only) F-Curves for controlling the strip's influence and timing
-NlaStrip.frame_end -> frame_end: float
-NlaStrip.frame_start -> frame_start: float
-NlaStrip.influence -> influence: float Amount the strip contributes to the current result
-NlaStrip.modifiers -> modifiers: collection, (read-only) Modifiers affecting all the F-Curves in the referenced Action
-NlaStrip.name -> name: string
-NlaStrip.repeat -> repeat: float Number of times to repeat the action range
-NlaStrip.scale -> scale: float Scaling factor for action
-NlaStrip.strip_time -> strip_time: float Frame of referenced Action to evaluate
-NlaStrip.strips -> strips: collection, (read-only) NLA Strips that this strip acts as a container for (if it is of type Meta)
-NlaStrip.type -> type: enum, (read-only) Type of NLA Strip
-NlaTrack.name -> name: string
-NlaTrack.strips -> strips: collection, (read-only) NLA Strips on this NLA-track
-Node.inputs -> inputs: collection, (read-only)
-Node.location -> location: float
-Node.name -> name: string Node name
-Node.outputs -> outputs: collection, (read-only)
-NodeGroup.nodetree -> nodetree: pointer
-NodeTree.animation_data -> animation_data: pointer, (read-only) Animation data for this datablock
-NodeTree.grease_pencil -> grease_pencil: pointer Grease Pencil datablock
-NodeTree.nodes -> nodes: collection, (read-only)
-Object.active_material -> active_material: pointer Active material being displayed
-Object.active_material_index -> active_material_index: int Index of active material slot
-Object.active_particle_system -> active_particle_system: pointer, (read-only) Active particle system being displayed
-Object.active_particle_system_index -> active_particle_system_index: int Index of active particle system slot
-Object.active_shape_key -> active_shape_key: pointer, (read-only) Current shape key
-Object.active_shape_key_index -> active_shape_key_index: int Current shape key index
-Object.active_vertex_group -> active_vertex_group: pointer, (read-only) Vertex groups of the object
-Object.active_vertex_group_index -> active_vertex_group_index: int Active index in vertex group array
-Object.animation_data -> animation_data: pointer, (read-only) Animation data for this datablock
-Object.animation_visualisation -> animation_visualisation: pointer, (read-only) Animation data for this datablock
-Object.bound_box -> bound_box: float, (read-only) Objects bound box in object-space coordinates
-Object.collision -> collision: pointer, (read-only) Settings for using the objects as a collider in physics simulation
-Object.color -> color: float Object color and alpha, used when faces have the ObColor mode enabled
-Object.constraints -> constraints: collection, (read-only) Constraints affecting the transformation of the object
-Object.data -> data: pointer Object data
-Object.delta_location -> delta_location: float Extra translation added to the location of the object
-Object.delta_rotation_euler -> delta_rotation_euler: float Extra rotation added to the rotation of the object (when using Euler rotations)
-Object.delta_rotation_quaternion -> delta_rotation_quaternion: float Extra rotation added to the rotation of the object (when using Quaternion rotations)
-Object.delta_scale -> delta_scale: float Extra scaling added to the scale of the object
-Object.dimensions -> dimensions: float Absolute bounding box dimensions of the object
-Object.draw_bounds_type -> draw_bounds_type: enum Object boundary display type
-Object.dupli_faces_scale -> dupli_faces_scale: float Scale the DupliFace objects
-Object.dupli_frames_end -> dupli_frames_end: int End frame for DupliFrames
-Object.dupli_frames_off -> dupli_frames_off: int Recurring frames to exclude from the Dupliframes
-Object.dupli_frames_on -> dupli_frames_on: int Number of frames to use between DupOff frames
-Object.dupli_frames_start -> dupli_frames_start: int Start frame for DupliFrames
-Object.dupli_group -> dupli_group: pointer Instance an existing group
-Object.dupli_list -> dupli_list: collection, (read-only) Object duplis
-Object.dupli_type -> dupli_type: enum If not None, object duplication method to use
-Object.empty_draw_size -> empty_draw_size: float Size of display for empties in the viewport
-Object.empty_draw_type -> empty_draw_type: enum Viewport display style for empties
-Object.field -> field: pointer, (read-only) Settings for using the objects as a field in physics simulation
-Object.game -> game: pointer, (read-only) Game engine related settings for the object
-Object.grease_pencil -> grease_pencil: pointer Grease Pencil datablock
-Object.location -> location: float Location of the object
-Object.material_slots -> material_slots: collection, (read-only) Material slots in the object
-Object.matrix_local -> matrix_local: float Parent relative transformation matrix
-Object.matrix_world -> matrix_world: float Worldspace transformation matrix
-Object.max_draw_type -> draw_type: enum Maximum draw type to display object with in viewport
-Object.mode -> mode: enum, (read-only) Object interaction mode
-Object.modifiers -> modifiers: collection, (read-only) Modifiers affecting the geometric data of the object
-Object.motion_path -> motion_path: pointer, (read-only) Motion Path for this element
-Object.parent -> parent: pointer Parent Object
-Object.parent_bone -> parent_bone: string Name of parent bone in case of a bone parenting relation
-Object.parent_type -> parent_type: enum Type of parent relation
-Object.parent_vertices -> parent_vertices: int, (read-only) Indices of vertices in cases of a vertex parenting relation
-Object.particle_systems -> particle_systems: collection, (read-only) Particle systems emitted from the object
-Object.pass_index -> pass_index: int Index # for the IndexOB render pass
-Object.pose -> pose: pointer, (read-only) Current pose for armatures
-Object.pose_library -> pose_library: pointer, (read-only) Action used as a pose library for armatures
-Object.proxy -> proxy: pointer, (read-only) Library object this proxy object controls
-Object.proxy_group -> proxy_group: pointer, (read-only) Library group duplicator object this proxy object controls
-Object.rotation_axis_angle -> rotation_axis_angle: float Angle of Rotation for Axis-Angle rotation representation
-Object.rotation_euler -> rotation_euler: float Rotation in Eulers
-Object.rotation_mode -> rotation_mode: enum
-Object.rotation_quaternion -> rotation_quaternion: float Rotation in Quaternions
-Object.scale -> scale: float Scaling of the object
-Object.soft_body -> soft_body: pointer, (read-only) Settings for soft body simulation
-Object.time_offset -> time_offset: float Animation offset in frames for F-Curve and dupligroup instances
-Object.track_axis -> track_axis: enum Axis that points in 'forward' direction
-Object.type -> type: enum, (read-only) Type of Object
-Object.up_axis -> up_axis: enum Axis that points in the upward direction
-Object.vertex_groups -> vertex_groups: collection, (read-only) Vertex groups of the object
-ObjectActuator.angular_velocity -> angular_velocity: float Sets the angular velocity
-ObjectActuator.damping -> damping: int Number of frames to reach the target velocity
-ObjectActuator.derivate_coefficient -> derivate_coefficient: float Not required, high values can cause instability
-ObjectActuator.force -> force: float Sets the force
-ObjectActuator.force_max_x -> force_max_x: float Set the upper limit for force
-ObjectActuator.force_max_y -> force_max_y: float Set the upper limit for force
-ObjectActuator.force_max_z -> force_max_z: float Set the upper limit for force
-ObjectActuator.force_min_x -> force_min_x: float Set the lower limit for force
-ObjectActuator.force_min_y -> force_min_y: float Set the lower limit for force
-ObjectActuator.force_min_z -> force_min_z: float Set the lower limit for force
-ObjectActuator.integral_coefficient -> integral_coefficient: float Low value (0.01) for slow response, high value (0.5) for fast response
-ObjectActuator.linear_velocity -> linear_velocity: float Sets the linear velocity (in Servo mode it sets the target relative linear velocity, it will be achieved by automatic application of force. Null velocity is a valid target)
-ObjectActuator.loc -> loc: float Sets the location
-ObjectActuator.mode -> mode: enum Specify the motion system
-ObjectActuator.proportional_coefficient -> proportional_coefficient: float Typical value is 60x integral coefficient
-ObjectActuator.reference_object -> reference_object: pointer Reference object for velocity calculation, leave empty for world reference
-ObjectActuator.rot -> rot: float Sets the rotation
-ObjectActuator.torque -> torque: float Sets the torque
-ObjectBase.object -> object: pointer, (read-only) Object this base links to
-ObjectConstraints.active -> active: pointer Active Object constraint
-ObstacleFluidSettings.impact_factor -> impact_factor: float This is an unphysical value for moving objects - it controls the impact an obstacle has on the fluid, =0 behaves a bit like outflow (deleting fluid), =1 is default, while >1 results in high forces. Can be used to tweak total mass
-ObstacleFluidSettings.partial_slip_factor -> partial_slip_factor: float Amount of mixing between no- and free-slip, 0 is no slip and 1 is free slip
-ObstacleFluidSettings.slip_type -> slip_type: enum
-ObstacleFluidSettings.volume_initialization -> volume_initialization: enum Volume initialization type
-Operator.bl_description -> bl_description: string
-Operator.bl_idname -> bl_idname: string
-Operator.bl_label -> bl_label: string
-Operator.bl_options -> bl_options: enum Options for this operator type
-Operator.layout -> layout: pointer, (read-only)
-Operator.name -> name: string, (read-only)
-Operator.properties -> properties: pointer, (read-only)
-OperatorFileListElement.name -> name: string the name of a file or directory within a file list
-OperatorMousePath.loc -> loc: float Mouse location
-OperatorMousePath.time -> time: float Time of mouse location
-OperatorStrokeElement.location -> location: float
-OperatorStrokeElement.mouse -> mouse: float
-OperatorStrokeElement.pressure -> pressure: float Tablet pressure
-OperatorStrokeElement.time -> time: float
-OperatorTypeMacro.properties -> properties: pointer, (read-only)
-OutflowFluidSettings.volume_initialization -> volume_initialization: enum Volume initialization type
-PackedFile.size -> size: int, (read-only) Size of packed file in bytes
-Paint.active_brush_index -> active_brush_index: int
-Paint.active_brush_name -> active_brush_name: string
-Paint.brush -> brush: pointer Active paint brush
-Paint.brushes -> brushes: collection, (read-only) Brushes selected for this paint mode
-Panel.bl_context -> bl_context: string
-Panel.bl_idname -> bl_idname: string
-Panel.bl_label -> bl_label: string
-Panel.bl_region_type -> bl_region_type: enum
-Panel.bl_space_type -> bl_space_type: enum
-Panel.layout -> layout: pointer, (read-only)
-Panel.text -> text: string
-ParentActuator.mode -> mode: enum
-ParentActuator.object -> object: pointer Set this object as parent
-Particle.alive_state -> alive_state: enum
-Particle.angular_velocity -> angular_velocity: float
-Particle.birthtime -> birthtime: float
-Particle.die_time -> die_time: float
-Particle.hair -> hair: collection, (read-only)
-Particle.keys -> keys: collection, (read-only)
-Particle.lifetime -> lifetime: float
-Particle.location -> location: float
-Particle.prev_angular_velocity -> prev_angular_velocity: float
-Particle.prev_location -> prev_location: float
-Particle.prev_rotation -> prev_rotation: float
-Particle.prev_velocity -> prev_velocity: float
-Particle.rotation -> rotation: float
-Particle.size -> size: float
-Particle.velocity -> velocity: float
-ParticleBrush.count -> count: int Particle count
-ParticleBrush.curve -> curve: pointer, (read-only)
-ParticleBrush.length_mode -> length_mode: enum
-ParticleBrush.puff_mode -> puff_mode: enum
-ParticleBrush.size -> size: int Brush size
-ParticleBrush.steps -> steps: int Brush steps
-ParticleBrush.strength -> strength: float Brush strength
-ParticleDupliWeight.count -> count: int The number of times this object is repeated with respect to other objects
-ParticleDupliWeight.name -> name: string, (read-only) Particle dupliobject name
-ParticleEdit.add_keys -> add_keys: int How many keys to make new particles with
-ParticleEdit.brush -> brush: pointer, (read-only)
-ParticleEdit.draw_step -> draw_step: int How many steps to draw the path with
-ParticleEdit.emitter_distance -> emitter_distance: float Distance to keep particles away from the emitter
-ParticleEdit.fade_frames -> fade_frames: int How many frames to fade
-ParticleEdit.object -> object: pointer, (read-only) The edited object
-ParticleEdit.selection_mode -> selection_mode: enum Particle select and display mode
-ParticleEdit.tool -> tool: enum
-ParticleEdit.type -> type: enum
-ParticleFluidSettings.alpha_influence -> alpha_influence: float Amount of particle alpha change, inverse of size influence: 0=off (all same alpha), 1=full. (large particles get lower alphas, smaller ones higher values)
-ParticleFluidSettings.particle_influence -> particle_influence: float Amount of particle size scaling: 0=off (all same size), 1=full (range 0.2-2.0), >1=stronger
-ParticleFluidSettings.path -> path: string Directory (and/or filename prefix) to store and load particles from
-ParticleHairKey.location -> location: float Location of the hair key in object space
-ParticleHairKey.location_hairspace -> location_hairspace: float Location of the hair key in its internal coordinate system, relative to the emitting face
-ParticleHairKey.time -> time: float Relative time of key over hair length
-ParticleHairKey.weight -> weight: float Weight for cloth simulation
-ParticleInstanceModifier.axis -> axis: enum Pole axis for rotation
-ParticleInstanceModifier.object -> object: pointer Object that has the particle system
-ParticleInstanceModifier.particle_system_number -> particle_system_number: int
-ParticleInstanceModifier.position -> position: float Position along path
-ParticleInstanceModifier.random_position -> random_position: float Randomize position along path
-ParticleKey.angular_velocity -> angular_velocity: float Key angular velocity
-ParticleKey.location -> location: float Key location
-ParticleKey.rotation -> rotation: float Key rotation quaterion
-ParticleKey.time -> time: float Time of key over the simulation
-ParticleKey.velocity -> velocity: float Key velocity
-ParticleSettings.active_dupliweight -> active_dupliweight: pointer, (read-only)
-ParticleSettings.active_dupliweight_index -> active_dupliweight_index: int
-ParticleSettings.adaptive_angle -> adaptive_angle: int How many degrees path has to curve to make another render segment
-ParticleSettings.adaptive_pix -> adaptive_pix: int How many pixels path has to cover to make another render segment
-ParticleSettings.amount -> amount: int Total number of particles
-ParticleSettings.angular_velocity_factor -> angular_velocity_factor: float Angular velocity amount
-ParticleSettings.angular_velocity_mode -> angular_velocity_mode: enum Particle angular velocity mode
-ParticleSettings.animation_data -> animation_data: pointer, (read-only) Animation data for this datablock
-ParticleSettings.billboard_align -> billboard_align: enum In respect to what the billboards are aligned
-ParticleSettings.billboard_animation -> billboard_animation: enum How to animate billboard textures
-ParticleSettings.billboard_object -> billboard_object: pointer Billboards face this object (default is active camera)
-ParticleSettings.billboard_offset -> billboard_offset: float
-ParticleSettings.billboard_random_tilt -> billboard_random_tilt: float Random tilt of the billboards
-ParticleSettings.billboard_split_offset -> billboard_split_offset: enum How to offset billboard textures
-ParticleSettings.billboard_tilt -> billboard_tilt: float Tilt of the billboards
-ParticleSettings.billboard_uv_split -> billboard_uv_split: int Amount of rows/columns to split UV coordinates for billboards
-ParticleSettings.boids -> boids: pointer, (read-only)
-ParticleSettings.branch_threshold -> branch_threshold: float Threshold of branching
-ParticleSettings.brownian_factor -> brownian_factor: float Specify the amount of Brownian motion
-ParticleSettings.child_length -> child_length: float Length of child paths
-ParticleSettings.child_length_thres -> child_length_thres: float Amount of particles left untouched by child path length
-ParticleSettings.child_nbr -> child_nbr: int Amount of children/parent
-ParticleSettings.child_radius -> child_radius: float Radius of children around parent
-ParticleSettings.child_random_size -> child_random_size: float Random variation to the size of the child particles
-ParticleSettings.child_roundness -> child_roundness: float Roundness of children around parent
-ParticleSettings.child_size -> child_size: float A multiplier for the child particle size
-ParticleSettings.child_type -> child_type: enum Create child particles
-ParticleSettings.clump_factor -> clump_factor: float Amount of clumping
-ParticleSettings.clumppow -> clumppow: float Shape of clumping
-ParticleSettings.damp_factor -> damp_factor: float Specify the amount of damping
-ParticleSettings.display -> display: int Percentage of particles to display in 3D view
-ParticleSettings.distribution -> distribution: enum How to distribute particles on selected element
-ParticleSettings.drag_factor -> drag_factor: float Specify the amount of air-drag
-ParticleSettings.draw_as -> draw_as: enum How particles are drawn in viewport
-ParticleSettings.draw_size -> draw_size: int Size of particles on viewport in pixels (0=default)
-ParticleSettings.draw_step -> draw_step: int How many steps paths are drawn with (power of 2)
-ParticleSettings.dupli_group -> dupli_group: pointer Show Objects in this Group in place of particles
-ParticleSettings.dupli_object -> dupli_object: pointer Show this Object in place of particles
-ParticleSettings.dupliweights -> dupliweights: collection, (read-only) Weights for all of the objects in the dupli group
-ParticleSettings.effect_hair -> effect_hair: float Hair stiffness for effectors
-ParticleSettings.effector_weights -> effector_weights: pointer, (read-only)
-ParticleSettings.emit_from -> emit_from: enum Where to emit particles from
-ParticleSettings.fluid -> fluid: pointer, (read-only)
-ParticleSettings.force_field_1 -> force_field_1: pointer, (read-only)
-ParticleSettings.force_field_2 -> force_field_2: pointer, (read-only)
-ParticleSettings.frame_end -> frame_end: float Frame # to stop emitting particles
-ParticleSettings.frame_start -> frame_start: float Frame # to start emitting particles
-ParticleSettings.grid_resolution -> grid_resolution: int The resolution of the particle grid
-ParticleSettings.hair_step -> hair_step: int Number of hair segments
-ParticleSettings.integrator -> integrator: enum Select physics integrator type
-ParticleSettings.jitter_factor -> jitter_factor: float Amount of jitter applied to the sampling
-ParticleSettings.keyed_loops -> keyed_loops: int Number of times the keys are looped
-ParticleSettings.keys_step -> keys_step: int
-ParticleSettings.kink -> kink: enum Type of periodic offset on the path
-ParticleSettings.kink_amplitude -> kink_amplitude: float The amplitude of the offset
-ParticleSettings.kink_axis -> kink_axis: enum Which axis to use for offset
-ParticleSettings.kink_frequency -> kink_frequency: float The frequency of the offset (1/total length)
-ParticleSettings.kink_shape -> kink_shape: float Adjust the offset to the beginning/end
-ParticleSettings.lifetime -> lifetime: float Specify the life span of the particles
-ParticleSettings.line_length_head -> line_length_head: float Length of the line's head
-ParticleSettings.line_length_tail -> line_length_tail: float Length of the line's tail
-ParticleSettings.mass -> mass: float Specify the mass of the particles
-ParticleSettings.material -> material: int Specify material used for the particles
-ParticleSettings.normal_factor -> normal_factor: float Let the surface normal give the particle a starting speed
-ParticleSettings.object_aligned_factor -> object_aligned_factor: float Let the emitter object orientation give the particle a starting speed
-ParticleSettings.object_factor -> object_factor: float Let the object give the particle a starting speed
-ParticleSettings.particle_factor -> particle_factor: float Let the target particle give the particle a starting speed
-ParticleSettings.particle_size -> particle_size: float The size of the particles
-ParticleSettings.path_end -> path_end: float End time of drawn path
-ParticleSettings.path_start -> path_start: float Starting time of drawn path
-ParticleSettings.phase_factor -> phase_factor: float Initial rotation phase
-ParticleSettings.physics_type -> physics_type: enum Particle physics type
-ParticleSettings.random_factor -> random_factor: float Give the starting speed a random variation
-ParticleSettings.random_length -> random_length: float Give path length a random variation
-ParticleSettings.random_lifetime -> random_lifetime: float Give the particle life a random variation
-ParticleSettings.random_phase_factor -> random_phase_factor: float Randomize rotation phase
-ParticleSettings.random_rotation_factor -> random_rotation_factor: float Randomize rotation
-ParticleSettings.random_size -> random_size: float Give the particle size a random variation
-ParticleSettings.react_event -> react_event: enum The event of target particles to react on
-ParticleSettings.reaction_shape -> reaction_shape: float Power of reaction strength dependence on distance to target
-ParticleSettings.reactor_factor -> reactor_factor: float Let the vector away from the target particles location give the particle a starting speed
-ParticleSettings.ren_as -> ren_as: enum How particles are rendered
-ParticleSettings.render_step -> render_step: int How many steps paths are rendered with (power of 2)
-ParticleSettings.rendered_child_nbr -> rendered_child_nbr: int Amount of children/parent for rendering
-ParticleSettings.rotate_from -> rotate_from: enum
-ParticleSettings.rotation_mode -> rotation_mode: enum Particles initial rotation
-ParticleSettings.rough1 -> rough1: float Amount of location dependent rough
-ParticleSettings.rough1_size -> rough1_size: float Size of location dependent rough
-ParticleSettings.rough2 -> rough2: float Amount of random rough
-ParticleSettings.rough2_size -> rough2_size: float Size of random rough
-ParticleSettings.rough2_thres -> rough2_thres: float Amount of particles left untouched by random rough
-ParticleSettings.rough_end_shape -> rough_end_shape: float Shape of end point rough
-ParticleSettings.rough_endpoint -> rough_endpoint: float Amount of end point rough
-ParticleSettings.simplify_rate -> simplify_rate: float Speed of simplification
-ParticleSettings.simplify_refsize -> simplify_refsize: int Reference size in pixels, after which simplification begins
-ParticleSettings.simplify_transition -> simplify_transition: float Transition period for fading out strands
-ParticleSettings.simplify_viewport -> simplify_viewport: float Speed of Simplification
-ParticleSettings.subframes -> subframes: int Subframes to simulate for improved stability and finer granularity simulations
-ParticleSettings.tangent_factor -> tangent_factor: float Let the surface tangent give the particle a starting speed
-ParticleSettings.tangent_phase -> tangent_phase: float Rotate the surface tangent
-ParticleSettings.time_tweak -> time_tweak: float A multiplier for physics timestep (1.0 means one frame = 1/25 seconds)
-ParticleSettings.trail_count -> trail_count: int Number of trail particles
-ParticleSettings.type -> type: enum
-ParticleSettings.userjit -> userjit: int Emission locations / face (0 = automatic)
-ParticleSettings.virtual_parents -> virtual_parents: float Relative amount of virtual parents
-ParticleSystem.active_particle_target -> active_particle_target: pointer, (read-only)
-ParticleSystem.active_particle_target_index -> active_particle_target_index: int
-ParticleSystem.billboard_normal_uv -> billboard_normal_uv: string UV Layer to control billboard normals
-ParticleSystem.billboard_split_uv -> billboard_split_uv: string UV Layer to control billboard splitting
-ParticleSystem.billboard_time_index_uv -> billboard_time_index_uv: string UV Layer to control billboard time index (X-Y)
-ParticleSystem.child_particles -> child_particles: collection, (read-only) Child particles generated by the particle system
-ParticleSystem.cloth -> cloth: pointer, (read-only) Cloth dynamics for hair
-ParticleSystem.name -> name: string Particle system name
-ParticleSystem.parent -> parent: pointer Use this object's coordinate system instead of global coordinate system
-ParticleSystem.particles -> particles: collection, (read-only) Particles generated by the particle system
-ParticleSystem.point_cache -> point_cache: pointer, (read-only)
-ParticleSystem.reactor_target_object -> reactor_target_object: pointer For reactor systems, the object that has the target particle system (empty if same object)
-ParticleSystem.reactor_target_particle_system -> reactor_target_particle_system: int For reactor systems, index of particle system on the target object
-ParticleSystem.seed -> seed: int Offset in the random number table, to get a different randomized result
-ParticleSystem.settings -> settings: pointer Particle system settings
-ParticleSystem.targets -> targets: collection, (read-only) Target particle systems
-ParticleSystem.vertex_group_clump -> vertex_group_clump: string Vertex group to control clump
-ParticleSystem.vertex_group_density -> vertex_group_density: string Vertex group to control density
-ParticleSystem.vertex_group_field -> vertex_group_field: string Vertex group to control field
-ParticleSystem.vertex_group_kink -> vertex_group_kink: string Vertex group to control kink
-ParticleSystem.vertex_group_length -> vertex_group_length: string Vertex group to control length
-ParticleSystem.vertex_group_rotation -> vertex_group_rotation: string Vertex group to control rotation
-ParticleSystem.vertex_group_roughness1 -> vertex_group_rough1: string Vertex group to control roughness 1
-ParticleSystem.vertex_group_roughness2 -> vertex_group_rough2: string Vertex group to control roughness 2
-ParticleSystem.vertex_group_roughness_end -> vertex_group_rough_end: string Vertex group to control roughness end
-ParticleSystem.vertex_group_size -> vertex_group_size: string Vertex group to control size
-ParticleSystem.vertex_group_tangent -> vertex_group_tangent: string Vertex group to control tangent
-ParticleSystem.vertex_group_velocity -> vertex_group_velocity: string Vertex group to control velocity
-ParticleSystemModifier.particle_system -> particle_system: pointer, (read-only) Particle System that this modifier controls
-ParticleTarget.duration -> duration: float
-ParticleTarget.mode -> mode: enum
-ParticleTarget.name -> name: string, (read-only) Particle target name
-ParticleTarget.object -> object: pointer The object that has the target particle system (empty if same object)
-ParticleTarget.system -> system: int The index of particle system on the target object
-ParticleTarget.time -> time: float
-PivotConstraint.enabled_rotation_range -> enabled_rotation_range: enum Rotation range on which pivoting should occur
-PivotConstraint.head_tail -> head_tail: float Target along length of bone: Head=0, Tail=1
-PivotConstraint.offset -> offset: float Offset of pivot from target (when set), or from owner's location (when Fixed Position is off), or the absolute pivot point
-PivotConstraint.subtarget -> subtarget: string
-PivotConstraint.target -> target: pointer Target Object, defining the position of the pivot when defined
-PluginSequence.filename -> filename: string, (read-only)
-PointCache.active_point_cache_index -> active_point_cache_index: int
-PointCache.filepath -> filepath: string Cache file path
-PointCache.frame_end -> frame_end: int Frame on which the simulation stops
-PointCache.frame_start -> frame_start: int Frame on which the simulation starts
-PointCache.index -> index: int Index number of cache files
-PointCache.info -> info: string, (read-only) Info on current cache status
-PointCache.name -> name: string Cache name
-PointCache.point_cache_list -> point_cache_list: collection, (read-only) Point cache list
-PointCache.step -> step: int Number of frames between cached frames
-PointDensity.color_ramp -> color_ramp: pointer, (read-only)
-PointDensity.color_source -> color_source: enum Data to derive color results from
-PointDensity.falloff -> falloff: enum Method of attenuating density by distance from the point
-PointDensity.falloff_softness -> falloff_soft: float Softness of the 'soft' falloff option
-PointDensity.noise_basis -> noise_basis: enum Noise formula used for turbulence
-PointDensity.object -> object: pointer Object to take point data from
-PointDensity.particle_cache -> particle_cache: enum Co-ordinate system to cache particles in
-PointDensity.particle_system -> particle_system: pointer Particle System to render as points
-PointDensity.point_source -> point_source: enum Point data to use as renderable point density
-PointDensity.radius -> radius: float Radius from the shaded sample to look for points within
-PointDensity.speed_scale -> speed_scale: float Multiplier to bring particle speed within an acceptable range
-PointDensity.turbulence_depth -> turbulence_depth: int Level of detail in the added turbulent noise
-PointDensity.turbulence_influence -> turbulence_influence: enum Method for driving added turbulent noise
-PointDensity.turbulence_size -> turbulence_size: float Scale of the added turbulent noise
-PointDensity.turbulence_strength -> turbulence_strength: float
-PointDensity.vertices_cache -> vertices_cache: enum Co-ordinate system to cache vertices in
-PointDensityTexture.pointdensity -> pointdensity: pointer, (read-only) The point density settings associated with this texture
-PointLamp.falloff_curve -> falloff_curve: pointer, (read-only) Custom Lamp Falloff Curve
-PointLamp.falloff_type -> falloff_type: enum Intensity Decay with distance
-PointLamp.linear_attenuation -> linear_attenuation: float Linear distance attenuation
-PointLamp.quadratic_attenuation -> quadratic_attenuation: float Quadratic distance attenuation
-PointLamp.shadow_adaptive_threshold -> shadow_adaptive_threshold: float Threshold for Adaptive Sampling (Raytraced shadows)
-PointLamp.shadow_color -> shadow_color: float Color of shadows cast by the lamp
-PointLamp.shadow_method -> shadow_method: enum Method to compute lamp shadow with
-PointLamp.shadow_ray_samples -> shadow_ray_samples: int Amount of samples taken extra (samples x samples)
-PointLamp.shadow_ray_sampling_method -> shadow_ray_sample_method: enum Method for generating shadow samples: Adaptive QMC is fastest, Constant QMC is less noisy but slower
-PointLamp.shadow_soft_size -> shadow_soft_size: float Light size for ray shadow sampling (Raytraced shadows)
-PointerProperty.fixed_type -> fixed_type: pointer, (read-only) Fixed pointer type, empty if variable type
-Pose.active_bone_group -> active_bone_group: pointer Active bone group for this pose
-Pose.active_bone_group_index -> active_bone_group_index: int Active index in bone groups array
-Pose.animation_visualisation -> animation_visualisation: pointer, (read-only) Animation data for this datablock
-Pose.bone_groups -> bone_groups: collection, (read-only) Groups of the bones
-Pose.bones -> bones: collection, (read-only) Individual pose bones for the armature
-Pose.ik_param -> ik_param: pointer, (read-only) Parameters for IK solver
-Pose.ik_solver -> ik_solver: enum Selection of IK solver for IK chain, current choice is 0 for Legacy, 1 for iTaSC
-PoseBone.bone -> bone: pointer, (read-only) Bone associated with this PoseBone
-PoseBone.bone_group -> bone_group: pointer Bone Group this pose channel belongs to
-PoseBone.bone_group_index -> bone_group_index: int Bone Group this pose channel belongs to (0=no group)
-PoseBone.child -> child: pointer, (read-only) Child of this pose bone
-PoseBone.constraints -> constraints: collection, (read-only) Constraints that act on this PoseChannel
-PoseBone.custom_shape -> custom_shape: pointer Object that defines custom draw type for this bone
-PoseBone.custom_shape_transform -> custom_shape_transform: pointer Bone that defines the display transform of this custom shape
-PoseBone.head -> head: float, (read-only) Location of head of the channel's bone
-PoseBone.ik_lin_weight -> ik_lin_weight: float Weight of scale constraint for IK
-PoseBone.ik_max_x -> ik_max_x: float Maximum angles for IK Limit
-PoseBone.ik_max_y -> ik_max_y: float Maximum angles for IK Limit
-PoseBone.ik_max_z -> ik_max_z: float Maximum angles for IK Limit
-PoseBone.ik_min_x -> ik_min_x: float Minimum angles for IK Limit
-PoseBone.ik_min_y -> ik_min_y: float Minimum angles for IK Limit
-PoseBone.ik_min_z -> ik_min_z: float Minimum angles for IK Limit
-PoseBone.ik_rot_weight -> ik_rot_weight: float Weight of rotation constraint for IK
-PoseBone.ik_stiffness_x -> ik_stiffness_x: float IK stiffness around the X axis
-PoseBone.ik_stiffness_y -> ik_stiffness_y: float IK stiffness around the Y axis
-PoseBone.ik_stiffness_z -> ik_stiffness_z: float IK stiffness around the Z axis
-PoseBone.ik_stretch -> ik_stretch: float Allow scaling of the bone for IK
-PoseBone.location -> location: float
-PoseBone.matrix -> matrix: float, (read-only) Final 4x4 matrix for this channel
-PoseBone.matrix_channel -> matrix_channel: float, (read-only) 4x4 matrix, before constraints
-PoseBone.matrix_local -> matrix_local: float Matrix representing the parent relative location, scale and rotation. Provides an alternative access to these properties.
-PoseBone.motion_path -> motion_path: pointer, (read-only) Motion Path for this element
-PoseBone.name -> name: string
-PoseBone.parent -> parent: pointer, (read-only) Parent of this pose bone
-PoseBone.rotation_axis_angle -> rotation_axis_angle: float Angle of Rotation for Axis-Angle rotation representation
-PoseBone.rotation_euler -> rotation_euler: float Rotation in Eulers
-PoseBone.rotation_mode -> rotation_mode: enum
-PoseBone.rotation_quaternion -> rotation_quaternion: float Rotation in Quaternions
-PoseBone.scale -> scale: float
-PoseBone.tail -> tail: float, (read-only) Location of tail of the channel's bone
-PoseBoneConstraints.active -> active: pointer Active PoseChannel constraint
-PoseTemplate.name -> name: string
-PoseTemplateSettings.active_template_index -> active_template_index: int
-PoseTemplateSettings.templates -> templates: collection, (read-only)
-Property.description -> description: string, (read-only) Description of the property for tooltips
-Property.identifier -> identifier: string, (read-only) Unique name used in the code and scripting
-Property.name -> name: string, (read-only) Human readable name
-Property.srna -> srna: pointer, (read-only) Struct definition used for properties assigned to this item
-Property.subtype -> subtype: enum, (read-only) Semantic interpretation of the property
-Property.type -> type: enum, (read-only) Data type of the property
-Property.unit -> unit: enum, (read-only) Type of units for this property
-PropertyActuator.mode -> mode: enum
-PropertyActuator.object -> object: pointer Copy from this Object
-PropertyActuator.object_property -> object_property: string Copy this property
-PropertyActuator.property -> property: string The name of the property
-PropertyActuator.value -> value: string The value to use, use "" around strings
-PropertySensor.evaluation_type -> evaluation_type: enum Type of property evaluation
-PropertySensor.max_value -> value_max: string Specify maximum value in Interval type
-PropertySensor.min_value -> value_min: string Specify minimum value in Interval type
-PropertySensor.property -> property: string
-PropertySensor.value -> value: string Check for this value in types in Equal or Not Equal types
-PythonConstraint.number_of_targets -> number_of_targets: int Usually only 1-3 are needed
-PythonConstraint.targets -> targets: collection, (read-only) Target Objects
-PythonConstraint.text -> text: pointer The text object that contains the Python script
-PythonController.mode -> mode: enum Python script type (textblock or module - faster)
-PythonController.module -> module: string Module name and function to run e.g. "someModule.main". Internal texts and external python files can be used
-PythonController.text -> text: pointer Text datablock with the python script
-RGBANodeSocket.default_value -> default_value: float Default value of the socket when no link is attached
-RGBANodeSocket.name -> name: string, (read-only) Socket name
-RadarSensor.angle -> angle: float Opening angle of the radar cone
-RadarSensor.axis -> axis: enum Specify along which axis the radar cone is cast
-RadarSensor.distance -> distance: float Depth of the radar cone
-RadarSensor.property -> property: string Only look for Objects with this property
-RandomActuator.chance -> chance: float Pick a number between 0 and 1. Success if you stay below this value
-RandomActuator.distribution -> distribution: enum Choose the type of distribution
-RandomActuator.float_max -> float_max: float Choose a number from a range. Upper boundary of the range
-RandomActuator.float_mean -> float_mean: float A normal distribution. Mean of the distribution
-RandomActuator.float_min -> float_min: float Choose a number from a range. Lower boundary of the range
-RandomActuator.float_value -> float_value: float Always return this number
-RandomActuator.half_life_time -> half_life_time: float Negative exponential dropoff
-RandomActuator.int_max -> int_max: int Choose a number from a range. Upper boundary of the range
-RandomActuator.int_mean -> int_mean: float Expected mean value of the distribution
-RandomActuator.int_min -> int_min: int Choose a number from a range. Lower boundary of the range
-RandomActuator.int_value -> int_value: int Always return this number
-RandomActuator.property -> property: string Assign the random value to this property
-RandomActuator.seed -> seed: int Initial seed of the random generator. Use Python for more freedom (choose 0 for not random)
-RandomActuator.standard_derivation -> standard_derivation: float A normal distribution. Standard deviation of the distribution
-RandomSensor.seed -> seed: int Initial seed of the generator. (Choose 0 for not random)
-RaySensor.axis -> axis: enum Specify along which axis the ray is cast
-RaySensor.material -> material: string Only look for Objects with this material
-RaySensor.property -> property: string Only look for Objects with this property
-RaySensor.range -> range: float Sense objects no farther than this distance
-RaySensor.ray_type -> ray_type: enum Toggle collision on material or property
-Region.height -> height: int, (read-only) Region height
-Region.id -> id: int, (read-only) Unique ID for this region
-Region.type -> type: enum, (read-only) Type of this region
-Region.width -> width: int, (read-only) Region width
-RegionView3D.perspective_matrix -> perspective_matrix: float, (read-only) Current perspective matrix of the 3D region
-RegionView3D.view_distance -> view_distance: float Distance to the view location
-RegionView3D.view_location -> view_location: float View pivot location
-RegionView3D.view_matrix -> view_matrix: float, (read-only) Current view matrix of the 3D region
-RegionView3D.view_perspective -> view_perspective: enum View Perspective
-RegionView3D.view_rotation -> view_rotation: float Rotation in quaternions (keep normalized)
-RenderEngine.bl_idname -> bl_idname: string
-RenderEngine.bl_label -> bl_label: string
-RenderLayer.light_override -> light_override: pointer, (read-only) Group to override all other lights in this render layer
-RenderLayer.material_override -> material_override: pointer, (read-only) Material to override all other materials in this render layer
-RenderLayer.name -> name: string, (read-only) Render layer name
-RenderLayer.passes -> passes: collection, (read-only)
-RenderLayer.rect -> rect: float
-RenderPass.channel_id -> channel_id: string, (read-only)
-RenderPass.channels -> channels: int, (read-only)
-RenderPass.name -> name: string, (read-only)
-RenderPass.rect -> rect: float
-RenderPass.type -> type: enum, (read-only)
-RenderResult.layers -> layers: collection, (read-only)
-RenderResult.resolution_x -> resolution_x: int, (read-only)
-RenderResult.resolution_y -> resolution_y: int, (read-only)
-RenderSettings.active_layer_index -> active_layer_index: int Active index in render layer array
-RenderSettings.alpha_mode -> alpha_mode: enum Representation of alpha information in the RGBA pixels
-RenderSettings.antialiasing_samples -> antialiasing_samples: enum Amount of anti-aliasing samples per pixel
-RenderSettings.bake_aa_mode -> bake_aa_mode: enum
-RenderSettings.bake_bias -> bake_bias: float Bias towards faces further away from the object (in blender units)
-RenderSettings.bake_distance -> bake_distance: float Maximum distance from active object to other object (in blender units
-RenderSettings.bake_margin -> bake_margin: int Amount of pixels to extend the baked result with, as post process filter
-RenderSettings.bake_normal_space -> bake_normal_space: enum Choose normal space for baking
-RenderSettings.bake_quad_split -> bake_quad_split: enum Choose the method used to split a quad into 2 triangles for baking
-RenderSettings.bake_type -> bake_type: enum Choose shading information to bake into the image
-RenderSettings.border_max_x -> border_max_x: float Sets maximum X value for the render border
-RenderSettings.border_max_y -> border_max_y: float Sets maximum Y value for the render border
-RenderSettings.border_min_x -> border_min_x: float Sets minimum X value to for the render border
-RenderSettings.border_min_y -> border_min_y: float Sets minimum Y value for the render border
-RenderSettings.cineon_black -> cineon_black: int Log conversion reference blackpoint
-RenderSettings.cineon_gamma -> cineon_gamma: float Log conversion gamma
-RenderSettings.cineon_white -> cineon_white: int Log conversion reference whitepoint
-RenderSettings.color_mode -> color_mode: enum Choose BW for saving greyscale images, RGB for saving red, green and blue channels, AND RGBA for saving red, green, blue + alpha channels
-RenderSettings.display_mode -> display_mode: enum Select where rendered images will be displayed
-RenderSettings.dither_intensity -> dither_intensity: float Amount of dithering noise added to the rendered image to break up banding
-RenderSettings.edge_color -> edge_color: float
-RenderSettings.edge_threshold -> edge_threshold: int Threshold for drawing outlines on geometry edges
-RenderSettings.engine -> engine: enum Engine to use for rendering
-RenderSettings.field_order -> field_order: enum Order of video fields. Select which lines get rendered first, to create smooth motion for TV output
-RenderSettings.file_extension -> file_extension: string, (read-only) The file extension used for saving renders
-RenderSettings.file_format -> file_format: enum File format to save the rendered images as
-RenderSettings.file_quality -> file_quality: int Quality of JPEG images, AVI Jpeg and SGI movies
-RenderSettings.filter_size -> filter_size: float Pixel width over which the reconstruction filter combines samples
-RenderSettings.fps -> fps: int Framerate, expressed in frames per second
-RenderSettings.fps_base -> fps_base: float Framerate base
-RenderSettings.layers -> layers: collection, (read-only)
-RenderSettings.motion_blur_samples -> motion_blur_samples: int Number of scene samples to take with motion blur
-RenderSettings.motion_blur_shutter -> motion_blur_shutter: float Time taken in frames between shutter open and close
-RenderSettings.octree_resolution -> octree_resolution: enum Resolution of raytrace accelerator. Use higher resolutions for larger scenes
-RenderSettings.output_path -> output_path: string Directory/name to save animations, # characters defines the position and length of frame numbers
-RenderSettings.parts_x -> parts_x: int Number of horizontal tiles to use while rendering
-RenderSettings.parts_y -> parts_y: int Number of vertical tiles to use while rendering
-RenderSettings.pixel_aspect_x -> pixel_aspect_x: float Horizontal aspect ratio - for anamorphic or non-square pixel output
-RenderSettings.pixel_aspect_y -> pixel_aspect_y: float Vertical aspect ratio - for anamorphic or non-square pixel output
-RenderSettings.pixel_filter -> pixel_filter: enum Reconstruction filter used for combining anti-aliasing samples
-RenderSettings.raytrace_structure -> raytrace_structure: enum Type of raytrace accelerator structure
-RenderSettings.resolution_percentage -> resolution_percentage: int Percentage scale for render resolution
-RenderSettings.resolution_x -> resolution_x: int Number of horizontal pixels in the rendered image
-RenderSettings.resolution_y -> resolution_y: int Number of vertical pixels in the rendered image
-RenderSettings.sequencer_gl_preview -> sequencer_gl_preview: enum Method to draw in the sequencer view
-RenderSettings.sequencer_gl_render -> sequencer_gl_render: enum Method to draw in the sequencer view
-RenderSettings.simplify_ao_sss -> simplify_ao_sss: float Global approximate AA and SSS quality factor
-RenderSettings.simplify_child_particles -> simplify_child_particles: float Global child particles percentage
-RenderSettings.simplify_shadow_samples -> simplify_shadow_samples: int Global maximum shadow samples
-RenderSettings.simplify_subdivision -> simplify_subdivision: int Global maximum subdivision level
-RenderSettings.stamp_background -> stamp_background: float Color to use behind stamp text
-RenderSettings.stamp_font_size -> stamp_font_size: int Size of the font used when rendering stamp text
-RenderSettings.stamp_foreground -> stamp_foreground: float Color to use for stamp text
-RenderSettings.stamp_note_text -> stamp_note_text: string Custom text to appear in the stamp note
-RenderSettings.threads -> threads: int Number of CPU threads to use simultaneously while rendering (for multi-core/CPU systems)
-RenderSettings.threads_mode -> threads_mode: enum Determine the amount of render threads used
-RigidBodyJointConstraint.axis_x -> axis_x: float Rotate pivot on X axis in degrees
-RigidBodyJointConstraint.axis_y -> axis_y: float Rotate pivot on Y axis in degrees
-RigidBodyJointConstraint.axis_z -> axis_z: float Rotate pivot on Z axis in degrees
-RigidBodyJointConstraint.child -> child: pointer Child object
-RigidBodyJointConstraint.pivot_type -> pivot_type: enum
-RigidBodyJointConstraint.pivot_x -> pivot_x: float Offset pivot on X
-RigidBodyJointConstraint.pivot_y -> pivot_y: float Offset pivot on Y
-RigidBodyJointConstraint.pivot_z -> pivot_z: float Offset pivot on Z
-RigidBodyJointConstraint.target -> target: pointer Target Object
-SPHFluidSettings.buoyancy -> buoyancy: float
-SPHFluidSettings.fluid_radius -> fluid_radius: float Fluid interaction Radius
-SPHFluidSettings.rest_density -> rest_density: float Density
-SPHFluidSettings.rest_length -> rest_length: float The Spring Rest Length (factor of interaction radius)
-SPHFluidSettings.spring_k -> spring_k: float Spring force constant
-SPHFluidSettings.stiffness_k -> stiffness_k: float Constant K - Stiffness
-SPHFluidSettings.stiffness_knear -> stiffness_knear: float Repulsion factor: stiffness_knear
-SPHFluidSettings.viscosity_beta -> viscosity_beta: float Square viscosity factor
-SPHFluidSettings.viscosity_omega -> viscosity_omega: float Linear viscosity
-Scene.active_keying_set -> active_keying_set: pointer Active Keying Set used to insert/delete keyframes
-Scene.active_keying_set_index -> active_keying_set_index: int Current Keying Set index (negative for 'builtin' and positive for 'absolute')
-Scene.all_keying_sets -> all_keying_sets: collection, (read-only) All Keying Sets available for use (builtins and Absolute Keying Sets for this Scene)
-Scene.animation_data -> animation_data: pointer, (read-only) Animation data for this datablock
-Scene.bases -> bases: collection, (read-only)
-Scene.camera -> camera: pointer Active camera used for rendering the scene
-Scene.cursor_location -> cursor_location: float 3D cursor location
-Scene.distance_model -> distance_model: enum Distance model for distance attenuation calculation
-Scene.doppler_factor -> doppler_factor: float Pitch factor for Doppler effect calculation
-Scene.frame_current -> frame_current: int
-Scene.frame_end -> frame_end: int Final frame of the playback/rendering range
-Scene.frame_start -> frame_start: int First frame of the playback/rendering range
-Scene.frame_step -> frame_step: int Number of frames to skip forward while rendering/playing back each frame
-Scene.game_data -> game_data: pointer, (read-only)
-Scene.gravity -> gravity: float Constant acceleration in a given direction
-Scene.grease_pencil -> grease_pencil: pointer Grease Pencil datablock
-Scene.keying_sets -> keying_sets: collection, (read-only) Absolute Keying Sets for this Scene
-Scene.network_render -> network_render: pointer, (read-only) Network Render Settings
-Scene.nodetree -> nodetree: pointer, (read-only) Compositing node tree
-Scene.objects -> objects: collection, (read-only)
-Scene.orientations -> orientations: collection, (read-only)
-Scene.pose_templates -> pose_templates: pointer, (read-only) Pose Template Settings
-Scene.pov_radio_adc_bailout -> pov_radio_adc_bailout: float The adc_bailout for radiosity rays. Use adc_bailout = 0.01 / brightest_ambient_object for good results
-Scene.pov_radio_brightness -> pov_radio_intensity: float Amount objects are brightened before being returned upwards to the rest of the system
-Scene.pov_radio_count -> pov_radio_count: int Number of rays that are sent out whenever a new radiosity value has to be calculated
-Scene.pov_radio_error_bound -> pov_radio_error_bound: float One of the two main speed/quality tuning values, lower values are more accurate
-Scene.pov_radio_gray_threshold -> pov_radio_gray_threshold: float One of the two main speed/quality tuning values, lower values are more accurate
-Scene.pov_radio_low_error_factor -> pov_radio_low_error_factor: float If you calculate just enough samples, but no more, you will get an image which has slightly blotchy lighting
-Scene.pov_radio_minimum_reuse -> pov_radio_minimum_reuse: float Fraction of the screen width which sets the minimum radius of reuse for each sample point (At values higher than 2% expect errors)
-Scene.pov_radio_nearest_count -> pov_radio_nearest_count: int Number of old ambient values blended together to create a new interpolated value
-Scene.pov_radio_recursion_limit -> pov_radio_recursion_limit: int how many recursion levels are used to calculate the diffuse inter-reflection
-Scene.preview_range_frame_end -> preview_range_frame_end: int Alternative end frame for UI playback
-Scene.preview_range_frame_start -> preview_range_frame_start: int Alternative start frame for UI playback
-Scene.render -> render: pointer, (read-only)
-Scene.sequence_editor -> sequence_editor: pointer, (read-only)
-Scene.set -> set: pointer Background set scene
-Scene.speed_of_sound -> speed_of_sound: float Speed of sound for Doppler effect calculation
-Scene.stamp_note -> stamp_note: string User define note for the render stamping
-Scene.sync_mode -> sync_mode: enum How to sync playback
-Scene.timeline_markers -> timeline_markers: collection, (read-only) Markers used in all timelines for the current scene
-Scene.tool_settings -> tool_settings: pointer, (read-only)
-Scene.unit_settings -> unit_settings: pointer, (read-only) Unit editing settings
-Scene.world -> world: pointer World used for rendering the scene
-SceneActuator.camera -> camera: pointer Set this Camera. Leave empty to refer to self object
-SceneActuator.mode -> mode: enum
-SceneActuator.scene -> scene: pointer Set the Scene to be added/removed/paused/resumed
-SceneBases.active -> active: pointer Active object base in the scene
-SceneGameData.activity_culling_box_radius -> activity_culling_box_radius: float Radius of the activity bubble, in Manhattan length. Objects outside the box are activity-culled
-SceneGameData.depth -> depth: int Displays bit depth of full screen display
-SceneGameData.dome_angle -> dome_angle: int Field of View of the Dome - it only works in mode Fisheye and Truncated
-SceneGameData.dome_buffer_resolution -> dome_buffer_resolution: float Buffer Resolution - decrease it to increase speed
-SceneGameData.dome_mode -> dome_mode: enum Dome physical configurations
-SceneGameData.dome_tesselation -> dome_tesselation: int Tessellation level - check the generated mesh in wireframe mode
-SceneGameData.dome_text -> dome_text: pointer Custom Warp Mesh data file
-SceneGameData.dome_tilt -> dome_tilt: int Camera rotation in horizontal axis
-SceneGameData.eye_separation -> eye_separation: float Set the distance between the eyes - the camera focal length/30 should be fine
-SceneGameData.fps -> fps: int The nominal number of game frames per second. Physics fixed timestep = 1/fps, independently of actual frame rate
-SceneGameData.framing_color -> frame_color: float Set colour of the bars
-SceneGameData.framing_type -> frame_type: enum Select the type of Framing you want
-SceneGameData.frequency -> frequency: int Displays clock frequency of fullscreen display
-SceneGameData.logic_step_max -> logic_step_max: int Sets the maximum number of logic frame per game frame if graphics slows down the game, higher value allows better synchronization with physics
-SceneGameData.material_mode -> material_mode: enum Material mode to use for rendering
-SceneGameData.occlusion_culling_resolution -> occlusion_culling_resolution: float The size of the occlusion buffer in pixel, use higher value for better precision (slower)
-SceneGameData.physics_engine -> physics_engine: enum Physics engine used for physics simulation in the game engine
-SceneGameData.physics_gravity -> physics_gravity: float Gravitational constant used for physics simulation in the game engine
-SceneGameData.physics_step_max -> physics_step_max: int Sets the maximum number of physics step per game frame if graphics slows down the game, higher value allows physics to keep up with realtime
-SceneGameData.physics_step_sub -> physics_step_sub: int Sets the number of simulation substep per physic timestep, higher value give better physics precision
-SceneGameData.resolution_x -> resolution_x: int Number of horizontal pixels in the screen
-SceneGameData.resolution_y -> resolution_y: int Number of vertical pixels in the screen
-SceneGameData.stereo -> stereo: enum
-SceneGameData.stereo_mode -> stereo_mode: enum Stereographic techniques
-SceneObjects.active -> active: pointer Active object for this scene
-SceneRenderLayer.light_override -> light_override: pointer Group to override all other lights in this render layer
-SceneRenderLayer.material_override -> material_override: pointer Material to override all other materials in this render layer
-SceneRenderLayer.name -> name: string Render layer name
-SceneSequence.animation_end_offset -> animation_end_offset: int Animation end offset (trim end)
-SceneSequence.animation_start_offset -> animation_start_offset: int Animation start offset (trim start)
-SceneSequence.color_balance -> color_balance: pointer, (read-only)
-SceneSequence.crop -> crop: pointer, (read-only)
-SceneSequence.multiply_colors -> multiply_colors: float
-SceneSequence.proxy -> proxy: pointer, (read-only)
-SceneSequence.scene -> scene: pointer Scene that this sequence uses
-SceneSequence.scene_camera -> scene_camera: pointer Override the scenes active camera
-SceneSequence.strobe -> strobe: float Only display every nth frame
-SceneSequence.transform -> transform: pointer, (read-only)
-Scopes.accuracy -> accuracy: float Proportion of original image source pixel lines to sample
-Scopes.histogram -> histogram: pointer, (read-only) Histogram for viewing image statistics
-Scopes.vectorscope_alpha -> vectorscope_alpha: float Opacity of the points
-Scopes.waveform_alpha -> waveform_alpha: float Opacity of the points
-Scopes.waveform_mode -> waveform_mode: enum
-Screen.areas -> areas: collection, (read-only) Areas the screen is subdivided into
-Screen.scene -> scene: pointer Active scene to be edited in the screen
-ScrewModifier.angle -> angle: float Angle of revolution
-ScrewModifier.axis -> axis: enum Screw axis
-ScrewModifier.iterations -> iterations: int Number of times to apply the screw operation
-ScrewModifier.object -> object: pointer Object to define the screw axis
-ScrewModifier.render_steps -> render_steps: int Number of steps in the revolution
-ScrewModifier.screw_offset -> screw_offset: float Offset the revolution along its axis
-ScrewModifier.steps -> steps: int Number of steps in the revolution
-Sensor.frequency -> frequency: int Delay between repeated pulses(in logic tics, 0=no delay)
-Sensor.name -> name: string Sensor name
-Sensor.type -> type: enum
-Sequence.blend_mode -> blend_type: enum
-Sequence.blend_opacity -> blend_opacity: float
-Sequence.channel -> channel: int Y position of the sequence strip
-Sequence.effect_fader -> effect_fader: float
-Sequence.frame_final_end -> frame_final_end: int End frame displayed in the sequence editor after offsets are applied
-Sequence.frame_final_length -> frame_final_length: int The length of the contents of this strip before the handles are applied
-Sequence.frame_final_start -> frame_final_start: int Start frame displayed in the sequence editor after offsets are applied, setting this is equivalent to moving the handle, not the actual start frame
-Sequence.frame_length -> frame_length: int, (read-only) The length of the contents of this strip before the handles are applied
-Sequence.frame_offset_end -> frame_offset_end: int, (read-only)
-Sequence.frame_offset_start -> frame_offset_start: int, (read-only)
-Sequence.frame_start -> frame_start: int
-Sequence.frame_still_end -> frame_still_end: int, (read-only)
-Sequence.frame_still_start -> frame_still_start: int, (read-only)
-Sequence.name -> name: string
-Sequence.speed_fader -> speed_fader: float
-Sequence.type -> type: enum, (read-only)
-SequenceColorBalance.gain -> gain: float Color balance gain (highlights)
-SequenceColorBalance.gamma -> gamma: float Color balance gamma (midtones)
-SequenceColorBalance.lift -> lift: float Color balance lift (shadows)
-SequenceCrop.bottom -> bottom: int
-SequenceCrop.left -> left: int
-SequenceCrop.right -> right: int
-SequenceCrop.top -> top: int
-SequenceEditor.active_strip -> active_strip: pointer
-SequenceEditor.meta_stack -> meta_stack: collection, (read-only) Meta strip stack, last is currently edited meta strip
-SequenceEditor.overlay_frame -> overlay_frame: int Sequencers active strip
-SequenceEditor.sequences -> sequences: collection, (read-only)
-SequenceEditor.sequences_all -> sequences_all: collection, (read-only)
-SequenceElement.filename -> filename: string
-SequenceProxy.directory -> directory: string Location to store the proxy files
-SequenceProxy.filepath -> filepath: string Location of custom proxy file
-SequenceTransform.offset_x -> offset_x: int
-SequenceTransform.offset_y -> offset_y: int
-ShaderNode.type -> type: enum, (read-only)
-ShaderNodeExtendedMaterial.material -> material: pointer
-ShaderNodeGeometry.color_layer -> color_layer: string
-ShaderNodeGeometry.uv_layer -> uv_layer: string
-ShaderNodeMapping.location -> location: float Location offset for the input coordinate
-ShaderNodeMapping.maximum -> max: float Maximum value to clamp coordinate to
-ShaderNodeMapping.minimum -> min: float Minimum value to clamp coordinate to
-ShaderNodeMapping.rotation -> rotation: float Rotation offset for the input coordinate
-ShaderNodeMapping.scale -> scale: float Scale adjustment for the input coordinate
-ShaderNodeMaterial.material -> material: pointer
-ShaderNodeMath.operation -> operation: enum
-ShaderNodeMixRGB.blend_type -> blend_type: enum
-ShaderNodeRGBCurve.mapping -> mapping: pointer, (read-only)
-ShaderNodeTexture.node_output -> node_output: int For node-based textures, which output node to use
-ShaderNodeTexture.texture -> texture: pointer
-ShaderNodeValToRGB.color_ramp -> color_ramp: pointer, (read-only)
-ShaderNodeVectorCurve.mapping -> mapping: pointer, (read-only)
-ShaderNodeVectorMath.operation -> operation: enum
-ShapeActionActuator.action -> action: pointer
-ShapeActionActuator.blendin -> blendin: int Number of frames of motion blending
-ShapeActionActuator.frame_end -> frame_end: int
-ShapeActionActuator.frame_property -> frame_property: string Assign the action's current frame number to this property
-ShapeActionActuator.frame_start -> frame_start: int
-ShapeActionActuator.mode -> mode: enum Action playback type
-ShapeActionActuator.priority -> priority: int Execution priority - lower numbers will override actions with higher numbers. With 2 or more actions at once, the overriding channels must be lower in the stack
-ShapeActionActuator.property -> property: string Use this property to define the Action position
-ShapeKey.data -> data: collection, (read-only)
-ShapeKey.frame -> frame: float, (read-only) Frame for absolute keys
-ShapeKey.interpolation -> interpolation: enum Interpolation type
-ShapeKey.name -> name: string
-ShapeKey.relative_key -> relative_key: pointer Shape used as a relative key
-ShapeKey.slider_max -> slider_max: float Maximum for slider
-ShapeKey.slider_min -> slider_min: float Minimum for slider
-ShapeKey.value -> value: float Value of shape key at the current frame
-ShapeKey.vertex_group -> vertex_group: string Vertex weight group, to blend with basis shape
-ShapeKeyBezierPoint.co -> co: float
-ShapeKeyBezierPoint.handle_1_co -> handle_1_co: float
-ShapeKeyBezierPoint.handle_2_co -> handle_2_co: float
-ShapeKeyCurvePoint.co -> co: float
-ShapeKeyCurvePoint.tilt -> tilt: float
-ShapeKeyPoint.co -> co: float
-ShrinkwrapConstraint.distance -> distance: float Distance to Target
-ShrinkwrapConstraint.shrinkwrap_type -> shrinkwrap_type: enum Selects type of shrinkwrap algorithm for target position
-ShrinkwrapConstraint.target -> target: pointer Target Object
-ShrinkwrapModifier.auxiliary_target -> auxiliary_target: pointer Additional mesh target to shrink to
-ShrinkwrapModifier.mode -> mode: enum
-ShrinkwrapModifier.offset -> offset: float Distance to keep from the target
-ShrinkwrapModifier.subsurf_levels -> subsurf_levels: int Number of subdivisions that must be performed before extracting vertices' positions and normals
-ShrinkwrapModifier.target -> target: pointer Mesh target to shrink to
-ShrinkwrapModifier.vertex_group -> vertex_group: string Vertex group name
-SimpleDeformModifier.factor -> factor: float
-SimpleDeformModifier.limits -> limits: float Lower/Upper limits for deform
-SimpleDeformModifier.mode -> mode: enum
-SimpleDeformModifier.origin -> origin: pointer Origin of modifier space coordinates
-SimpleDeformModifier.vertex_group -> vertex_group: string Vertex group name
-SmokeDomainSettings.alpha -> alpha: float Higher value results in sinking smoke
-SmokeDomainSettings.amplify -> amplify: int Enhance the resolution of smoke by this factor using noise
-SmokeDomainSettings.beta -> beta: float Higher value results in faster rising smoke
-SmokeDomainSettings.coll_group -> coll_group: pointer Limit collisions to this group
-SmokeDomainSettings.dissolve_speed -> dissolve_speed: int Dissolve Speed
-SmokeDomainSettings.eff_group -> eff_group: pointer Limit effectors to this group
-SmokeDomainSettings.effector_weights -> effector_weights: pointer, (read-only)
-SmokeDomainSettings.fluid_group -> fluid_group: pointer Limit fluid objects to this group
-SmokeDomainSettings.maxres -> maxres: int Maximal resolution used in the fluid domain
-SmokeDomainSettings.noise_type -> noise_type: enum Noise method which is used for creating the high resolution
-SmokeDomainSettings.point_cache_high -> point_cache_high: pointer, (read-only)
-SmokeDomainSettings.point_cache_low -> point_cache_low: pointer, (read-only)
-SmokeDomainSettings.smoke_cache_comp -> smoke_cache_comp: enum Compression method to be used
-SmokeDomainSettings.smoke_cache_high_comp -> smoke_cache_high_comp: enum Compression method to be used
-SmokeDomainSettings.strength -> strength: float Strength of wavelet noise
-SmokeFlowSettings.density -> density: float
-SmokeFlowSettings.psys -> psys: pointer Particle systems emitted from the object
-SmokeFlowSettings.temperature -> temperature: float Temperature difference to ambient temperature
-SmokeModifier.coll_settings -> coll_settings: pointer, (read-only)
-SmokeModifier.domain_settings -> domain_settings: pointer, (read-only)
-SmokeModifier.flow_settings -> flow_settings: pointer, (read-only)
-SmokeModifier.smoke_type -> smoke_type: enum
-SmoothModifier.factor -> factor: float
-SmoothModifier.repeat -> repeat: int
-SmoothModifier.vertex_group -> vertex_group: string Vertex group name
-SoftBodyModifier.point_cache -> point_cache: pointer, (read-only)
-SoftBodyModifier.settings -> settings: pointer, (read-only)
-SoftBodySettings.aero -> aero: float Make edges 'sail'
-SoftBodySettings.aerodynamics_type -> aerodynamics_type: enum Method of calculating aerodynamic interaction
-SoftBodySettings.ball_damp -> ball_damp: float Blending to inelastic collision
-SoftBodySettings.ball_size -> ball_size: float Absolute ball size or factor if not manual adjusted
-SoftBodySettings.ball_stiff -> ball_stiff: float Ball inflating pressure
-SoftBodySettings.bending -> bend: float Bending Stiffness
-SoftBodySettings.choke -> choke: int 'Viscosity' inside collision target
-SoftBodySettings.collision_type -> collision_type: enum Choose Collision Type
-SoftBodySettings.damp -> damp: float Edge spring friction
-SoftBodySettings.effector_weights -> effector_weights: pointer, (read-only)
-SoftBodySettings.error_limit -> error_limit: float The Runge-Kutta ODE solver error limit, low value gives more precision, high values speed
-SoftBodySettings.friction -> friction: float General media friction for point movements
-SoftBodySettings.fuzzy -> fuzzy: int Fuzziness while on collision, high values make collsion handling faster but less stable
-SoftBodySettings.goal_default -> goal_default: float Default Goal (vertex target position) value, when no Vertex Group used
-SoftBodySettings.goal_friction -> goal_friction: float Goal (vertex target position) friction
-SoftBodySettings.goal_max -> goal_max: float Goal maximum, vertex weights are scaled to match this range
-SoftBodySettings.goal_min -> goal_min: float Goal minimum, vertex weights are scaled to match this range
-SoftBodySettings.goal_spring -> goal_spring: float Goal (vertex target position) spring stiffness
-SoftBodySettings.goal_vertex_group -> goal_vertex_group: string Control point weight values
-SoftBodySettings.gravity -> gravity: float Apply gravitation to point movement
-SoftBodySettings.lcom -> lcom: float Location of Center of mass
-SoftBodySettings.lrot -> lrot: float Estimated rotation matrix
-SoftBodySettings.lscale -> lscale: float Estimated scale matrix
-SoftBodySettings.mass -> mass: float General Mass value
-SoftBodySettings.mass_vertex_group -> mass_vertex_group: string Control point mass values
-SoftBodySettings.maxstep -> step_max: int Maximal # solver steps/frame
-SoftBodySettings.minstep -> step_min: int Minimal # solver steps/frame
-SoftBodySettings.plastic -> plastic: float Permanent deform
-SoftBodySettings.pull -> pull: float Edge spring stiffness when longer than rest length
-SoftBodySettings.push -> push: float Edge spring stiffness when shorter than rest length
-SoftBodySettings.shear -> shear: float Shear Stiffness
-SoftBodySettings.speed -> speed: float Tweak timing for physics to control frequency and speed
-SoftBodySettings.spring_length -> spring_length: float Alter spring length to shrink/blow up (unit %) 0 to disable
-SoftBodySettings.spring_vertex_group -> spring_vertex_group: string Control point spring strength values
-SolidifyModifier.edge_crease_inner -> edge_crease_inner: float Assign a crease to inner edges
-SolidifyModifier.edge_crease_outer -> edge_crease_outer: float Assign a crease to outer edges
-SolidifyModifier.edge_crease_rim -> edge_crease_rim: float Assign a crease to the edges making up the rim
-SolidifyModifier.offset -> offset: float
-SolidifyModifier.thickness -> thickness: float Thickness of the shell
-SolidifyModifier.vertex_group -> vertex_group: string Vertex group name
-Sound.filepath -> filepath: string Sound sample file used by this Sound datablock
-Sound.packed_file -> packed_file: pointer, (read-only)
-SoundActuator.cone_inner_angle_3d -> cone_inner_angle_3d: float The angle of the inner cone
-SoundActuator.cone_outer_angle_3d -> cone_outer_angle_3d: float The angle of the outer cone
-SoundActuator.cone_outer_gain_3d -> cone_outer_gain_3d: float The gain outside the outer cone. The gain in the outer cone will be interpolated between this value and the normal gain in the inner cone
-SoundActuator.max_distance_3d -> distance_3d_max: float The maximum distance at which you can hear the sound
-SoundActuator.maximum_gain_3d -> gain_3d_max: float The maximum gain of the sound, no matter how near it is
-SoundActuator.minimum_gain_3d -> gain_3d_min: float The minimum gain of the sound, no matter how far it is away
-SoundActuator.mode -> mode: enum
-SoundActuator.pitch -> pitch: float Sets the pitch of the sound
-SoundActuator.reference_distance_3d -> reference_distance_3d: float The distance where the sound has a gain of 1.0
-SoundActuator.rolloff_factor_3d -> rolloff_factor_3d: float The influence factor on volume depending on distance
-SoundActuator.sound -> sound: pointer
-SoundActuator.volume -> volume: float Sets the initial volume of the sound
-SoundSequence.animation_end_offset -> animation_end_offset: int Animation end offset (trim end)
-SoundSequence.animation_start_offset -> animation_start_offset: int Animation start offset (trim start)
-SoundSequence.attenuation -> attenuation: float Attenuation in dezibel
-SoundSequence.filepath -> filepath: string
-SoundSequence.sound -> sound: pointer, (read-only) Sound datablock used by this sequence
-SoundSequence.volume -> volume: float Playback volume of the sound
-Space.type -> type: enum, (read-only) Space data type
-SpaceConsole.console_type -> console_type: enum Console type
-SpaceConsole.font_size -> font_size: int Font size to use for displaying the text
-SpaceConsole.history -> history: collection, (read-only) Command history
-SpaceConsole.language -> language: string Command line prompt language
-SpaceConsole.prompt -> prompt: string Command line prompt
-SpaceConsole.scrollback -> scrollback: collection, (read-only) Command output
-SpaceConsole.selection_end -> selection_end: int
-SpaceConsole.selection_start -> selection_start: int
-SpaceDopeSheetEditor.action -> action: pointer Action displayed and edited in this space
-SpaceDopeSheetEditor.autosnap -> autosnap: enum Automatic time snapping settings for transformations
-SpaceDopeSheetEditor.dopesheet -> dopesheet: pointer, (read-only) Settings for filtering animation data
-SpaceDopeSheetEditor.mode -> mode: enum Editing context being displayed
-SpaceFileBrowser.params -> params: pointer, (read-only) Parameters and Settings for the Filebrowser
-SpaceGraphEditor.autosnap -> autosnap: enum Automatic time snapping settings for transformations
-SpaceGraphEditor.cursor_value -> cursor_value: float Graph Editor 2D-Value cursor - Y-Value component
-SpaceGraphEditor.dopesheet -> dopesheet: pointer, (read-only) Settings for filtering animation data
-SpaceGraphEditor.mode -> mode: enum Editing context being displayed
-SpaceGraphEditor.pivot_point -> pivot_point: enum Pivot center for rotation/scaling
-SpaceImageEditor.curves -> curves: pointer, (read-only) Color curve mapping to use for displaying the image
-SpaceImageEditor.draw_channels -> draw_channels: enum Channels of the image to draw
-SpaceImageEditor.grease_pencil -> grease_pencil: pointer Grease pencil data for this space
-SpaceImageEditor.image -> image: pointer Image displayed and edited in this space
-SpaceImageEditor.image_user -> image_user: pointer, (read-only) Parameters defining which layer, pass and frame of the image is displayed
-SpaceImageEditor.sample_histogram -> sample_histogram: pointer, (read-only) Sampled colors along line
-SpaceImageEditor.scopes -> scopes: pointer, (read-only) Scopes to visualize image statistics.
-SpaceImageEditor.uv_editor -> uv_editor: pointer, (read-only) UV editor settings
-SpaceNLA.autosnap -> autosnap: enum Automatic time snapping settings for transformations
-SpaceNLA.dopesheet -> dopesheet: pointer, (read-only) Settings for filtering animation data
-SpaceNodeEditor.id -> id: pointer, (read-only) Datablock whose nodes are being edited
-SpaceNodeEditor.id_from -> id_from: pointer, (read-only) Datablock from which the edited datablock is linked
-SpaceNodeEditor.nodetree -> nodetree: pointer, (read-only) Node tree being displayed and edited
-SpaceNodeEditor.texture_type -> texture_type: enum Type of data to take texture from
-SpaceNodeEditor.tree_type -> tree_type: enum Node tree type to display and edit
-SpaceOutliner.display_filter -> display_filter: string Live search filtering string
-SpaceOutliner.display_mode -> display_mode: enum Type of information to display
-SpaceProperties.align -> align: enum Arrangement of the panels
-SpaceProperties.context -> context: enum Type of active data to display and edit
-SpaceProperties.pin_id -> pin_id: pointer
-SpaceSequenceEditor.display_channel -> display_channel: int The channel number shown in the image preview. 0 is the result of all strips combined
-SpaceSequenceEditor.display_mode -> display_mode: enum The view mode to use for displaying sequencer output
-SpaceSequenceEditor.draw_overexposed -> draw_overexposed: int Show overexposed areas with zebra stripes
-SpaceSequenceEditor.grease_pencil -> grease_pencil: pointer, (read-only) Grease pencil data for this space
-SpaceSequenceEditor.offset_x -> offset_x: float Offsets image horizontally from the view center
-SpaceSequenceEditor.offset_y -> offset_y: float Offsets image horizontally from the view center
-SpaceSequenceEditor.proxy_render_size -> proxy_render_size: enum Draw preview using full resolution or different proxy resolutions
-SpaceSequenceEditor.view_type -> view_type: enum The type of the Sequencer view (sequencer, preview or both)
-SpaceSequenceEditor.zoom -> zoom: float Display zoom level
-SpaceTextEditor.find_text -> find_text: string Text to search for with the find tool
-SpaceTextEditor.font_size -> font_size: int Font size to use for displaying the text
-SpaceTextEditor.replace_text -> replace_text: string Text to replace selected text with using the replace tool
-SpaceTextEditor.tab_width -> tab_width: int Number of spaces to display tabs with
-SpaceTextEditor.text -> text: pointer Text displayed and edited in this space
-SpaceUVEditor.cursor_location -> cursor_location: float 2D cursor location for this view
-SpaceUVEditor.draw_stretch_type -> draw_stretch_type: enum Type of stretch to draw
-SpaceUVEditor.edge_draw_type -> edge_draw_type: enum Draw type for drawing UV edges
-SpaceUVEditor.pivot -> pivot: enum Rotation/Scaling Pivot
-SpaceUVEditor.sticky_selection_mode -> sticky_selection_mode: enum Automatically select also UVs sharing the same vertex as the ones being selected
-SpaceUserPreferences.filter -> filter: string Search term for filtering in the UI
-SpaceView3D.background_images -> background_images: collection, (read-only) List of background images
-SpaceView3D.camera -> camera: pointer Active camera used in this view (when unlocked from the scene's active camera)
-SpaceView3D.clip_end -> clip_end: float 3D View far clipping distance
-SpaceView3D.clip_start -> clip_start: float 3D View near clipping distance
-SpaceView3D.current_orientation -> current_orientation: pointer, (read-only) Current Transformation orientation
-SpaceView3D.cursor_location -> cursor_location: float 3D cursor location for this view (dependent on local view setting)
-SpaceView3D.grid_lines -> grid_lines: int The number of grid lines to display in perspective view
-SpaceView3D.grid_spacing -> grid_spacing: float The distance between 3D View grid lines
-SpaceView3D.grid_subdivisions -> grid_subdivisions: int The number of subdivisions between grid lines
-SpaceView3D.lens -> lens: float Lens angle (mm) in perspective view
-SpaceView3D.local_view -> local_view: pointer, (read-only) Display an isolated sub-set of objects, apart from the scene visibility
-SpaceView3D.lock_bone -> lock_bone: string 3D View center is locked to this bone's position
-SpaceView3D.lock_object -> lock_object: pointer 3D View center is locked to this object's position
-SpaceView3D.pivot_point -> pivot_point: enum Pivot center for rotation/scaling
-SpaceView3D.region_3d -> region_3d: pointer, (read-only) 3D region in this space, in case of quad view the camera region
-SpaceView3D.region_quadview -> region_quadview: pointer, (read-only) 3D region that defines the quad view settings
-SpaceView3D.transform_orientation -> transform_orientation: enum Transformation orientation
-SpaceView3D.viewport_shading -> viewport_shade: enum Method to display/shade objects in the 3D View
-SpeedControlSequence.global_speed -> global_speed: float
-Spline.bezier_points -> bezier_points: collection, (read-only) Collection of points for bezier curves only
-Spline.character_index -> character_index: int, (read-only) Location of this character in the text data (only for text curves)
-Spline.material_index -> material_index: int
-Spline.order_u -> order_u: int Nurbs order in the U direction (For splines and surfaces), Higher values let points influence a greater area
-Spline.order_v -> order_v: int Nurbs order in the V direction (For surfaces only), Higher values let points influence a greater area
-Spline.point_count_u -> point_count_u: int, (read-only) Total number points for the curve or surface in the U direction
-Spline.point_count_v -> point_count_v: int, (read-only) Total number points for the surface on the V direction
-Spline.points -> points: collection, (read-only) Collection of points that make up this poly or nurbs spline
-Spline.radius_interpolation -> radius_interpolation: enum The type of radius interpolation for Bezier curves
-Spline.resolution_u -> resolution_u: int Curve or Surface subdivisions per segment
-Spline.resolution_v -> resolution_v: int Surface subdivisions per segment
-Spline.tilt_interpolation -> tilt_interpolation: enum The type of tilt interpolation for 3D, Bezier curves
-Spline.type -> type: enum The interpolation type for this curve element
-SplineIKConstraint.chain_length -> chain_length: int How many bones are included in the chain
-SplineIKConstraint.joint_bindings -> joint_bindings: float (EXPERIENCED USERS ONLY) The relative positions of the joints along the chain as percentages
-SplineIKConstraint.target -> target: pointer Curve that controls this relationship
-SplineIKConstraint.xz_scaling_mode -> xz_scale_mode: enum Method used for determining the scaling of the X and Z axes of the bones
-SplinePoint.co -> co: float Point coordinates
-SplinePoint.radius -> radius: float, (read-only) Radius for bevelling
-SplinePoint.tilt -> tilt: float Tilt in 3D View
-SplinePoint.weight -> weight: float Nurbs weight
-SplinePoint.weight_softbody -> weight_softbody: float Softbody goal weight
-SpotLamp.compression_threshold -> compression_threshold: float Deep shadow map compression threshold
-SpotLamp.falloff_curve -> falloff_curve: pointer, (read-only) Custom Lamp Falloff Curve
-SpotLamp.falloff_type -> falloff_type: enum Intensity Decay with distance
-SpotLamp.halo_intensity -> halo_intensity: float Brightness of the spotlight's halo cone (Buffer Shadows)
-SpotLamp.halo_step -> halo_step: int Volumetric halo sampling frequency
-SpotLamp.linear_attenuation -> linear_attenuation: float Linear distance attenuation
-SpotLamp.quadratic_attenuation -> quadratic_attenuation: float Quadratic distance attenuation
-SpotLamp.shadow_adaptive_threshold -> shadow_adaptive_threshold: float Threshold for Adaptive Sampling (Raytraced shadows)
-SpotLamp.shadow_buffer_bias -> shadow_buffer_bias: float Shadow buffer sampling bias
-SpotLamp.shadow_buffer_clip_end -> shadow_buffer_clip_end: float Shadow map clip end beyond which objects will not generate shadows
-SpotLamp.shadow_buffer_clip_start -> shadow_buffer_clip_start: float Shadow map clip start: objects closer will not generate shadows
-SpotLamp.shadow_buffer_samples -> shadow_buffer_samples: int Number of shadow buffer samples
-SpotLamp.shadow_buffer_size -> shadow_buffer_size: int Resolution of the shadow buffer, higher values give crisper shadows but use more memory
-SpotLamp.shadow_buffer_soft -> shadow_buffer_soft: float Size of shadow buffer sampling area
-SpotLamp.shadow_buffer_type -> shadow_buffer_type: enum Type of shadow buffer
-SpotLamp.shadow_color -> shadow_color: float Color of shadows cast by the lamp
-SpotLamp.shadow_filter_type -> shadow_filter_type: enum Type of shadow filter (Buffer Shadows)
-SpotLamp.shadow_method -> shadow_method: enum Method to compute lamp shadow with
-SpotLamp.shadow_ray_samples -> shadow_ray_samples: int Amount of samples taken extra (samples x samples)
-SpotLamp.shadow_ray_sampling_method -> shadow_ray_sample_method: enum Method for generating shadow samples: Adaptive QMC is fastest, Constant QMC is less noisy but slower
-SpotLamp.shadow_sample_buffers -> shadow_sample_buffers: enum Number of shadow buffers to render for better AA, this increases memory usage
-SpotLamp.shadow_soft_size -> shadow_soft_size: float Light size for ray shadow sampling (Raytraced shadows)
-SpotLamp.spot_blend -> spot_blend: float The softness of the spotlight edge
-SpotLamp.spot_size -> spot_size: float Angle of the spotlight beam in degrees
-StateActuator.operation -> operation: enum Select the bit operation on object state mask
-StretchToConstraint.bulge -> bulge: float Factor between volume variation and stretching
-StretchToConstraint.head_tail -> head_tail: float Target along length of bone: Head=0, Tail=1
-StretchToConstraint.keep_axis -> keep_axis: enum Axis to maintain during stretch
-StretchToConstraint.original_length -> original_length: float Length at rest position
-StretchToConstraint.subtarget -> subtarget: string
-StretchToConstraint.target -> target: pointer Target Object
-StretchToConstraint.volume -> volume: enum Maintain the object's volume as it stretches
-StringProperty.default -> default: string, (read-only) string default value
-StringProperty.max_length -> length_max: int, (read-only) Maximum length of the string, 0 means unlimited
-Struct.base -> base: pointer, (read-only) Struct definition this is derived from
-Struct.description -> description: string, (read-only) Description of the Struct's purpose
-Struct.functions -> functions: collection, (read-only)
-Struct.identifier -> identifier: string, (read-only) Unique name used in the code and scripting
-Struct.name -> name: string, (read-only) Human readable name
-Struct.name_property -> name_property: pointer, (read-only) Property that gives the name of the struct
-Struct.nested -> nested: pointer, (read-only) Struct in which this struct is always nested, and to which it logically belongs
-Struct.properties -> properties: collection, (read-only) Properties in the struct
-StucciTexture.noise_basis -> noise_basis: enum Sets the noise basis used for turbulence
-StucciTexture.noise_size -> noise_size: float Sets scaling for noise input
-StucciTexture.noise_type -> noise_type: enum
-StucciTexture.stype -> stype: enum
-StucciTexture.turbulence -> turbulence: float Sets the turbulence of the bandnoise and ringnoise types
-SubsurfModifier.levels -> levels: int Number of subdivisions to perform
-SubsurfModifier.render_levels -> render_levels: int Number of subdivisions to perform when rendering
-SubsurfModifier.subdivision_type -> subdivision_type: enum Selects type of subdivision algorithm
-SunLamp.shadow_adaptive_threshold -> shadow_adaptive_threshold: float Threshold for Adaptive Sampling (Raytraced shadows)
-SunLamp.shadow_color -> shadow_color: float Color of shadows cast by the lamp
-SunLamp.shadow_method -> shadow_method: enum Method to compute lamp shadow with
-SunLamp.shadow_ray_samples -> shadow_ray_samples: int Amount of samples taken extra (samples x samples)
-SunLamp.shadow_ray_sampling_method -> shadow_ray_sampling_method: enum Method for generating shadow samples: Adaptive QMC is fastest, Constant QMC is less noisy but slower
-SunLamp.shadow_soft_size -> shadow_soft_size: float Light size for ray shadow sampling (Raytraced shadows)
-SunLamp.sky -> sky: pointer, (read-only) Sky related settings for sun lamps
-TexMapping.location -> location: float
-TexMapping.maximum -> max: float Maximum value for clipping
-TexMapping.minimum -> min: float Minimum value for clipping
-TexMapping.rotation -> rotation: float
-TexMapping.scale -> scale: float
-Text.current_character -> current_character: int, (read-only) Index of current character in current line, and also start index of character in selection if one exists
-Text.current_line -> current_line: pointer, (read-only) Current line, and start line of selection if one exists
-Text.filepath -> filepath: string Filename of the text file
-Text.lines -> lines: collection, (read-only) Lines of text
-Text.markers -> markers: collection, (read-only) Text markers highlighting part of the text
-Text.selection_end_character -> selection_end_character: int, (read-only) Index of character after end of selection in the selection end line
-Text.selection_end_line -> selection_end_line: pointer, (read-only) End line of selection
-TextBox.height -> height: float
-TextBox.width -> width: float
-TextBox.x -> x: float
-TextBox.y -> y: float
-TextCurve.active_textbox -> active_textbox: int
-TextCurve.body -> body: string contents of this text object
-TextCurve.edit_format -> edit_format: pointer, (read-only) Editing settings character formatting
-TextCurve.family -> family: string Use Blender Objects as font characters. Give font objects a common name followed by the character it represents, eg. familya, familyb etc, and turn on Verts Duplication
-TextCurve.font -> font: pointer
-TextCurve.line_dist -> line_distance: float
-TextCurve.offset_x -> offset_x: float Horizontal offset from the object origin
-TextCurve.offset_y -> offset_y: float Vertical offset from the object origin
-TextCurve.shear -> shear: float Italic angle of the characters
-TextCurve.spacemode -> spacemode: enum Text align from the object center
-TextCurve.spacing -> spacing: float
-TextCurve.text_on_curve -> text_on_curve: pointer Curve deforming text object
-TextCurve.text_size -> text_size: float
-TextCurve.textboxes -> textboxes: collection, (read-only)
-TextCurve.ul_height -> ul_height: float
-TextCurve.ul_position -> ul_position: float Vertical position of underline
-TextCurve.word_spacing -> word_spacing: float
-TextLine.line -> line: string Text in the line
-TextMarker.color -> color: float Color to display the marker with
-TextMarker.end -> end: int, (read-only) Start position of the marker in the line
-TextMarker.group -> group: int, (read-only)
-TextMarker.line -> line: int, (read-only) Line in which the marker is located
-TextMarker.start -> start: int, (read-only) Start position of the marker in the line
-Texture.animation_data -> animation_data: pointer, (read-only) Animation data for this datablock
-Texture.brightness -> intensity: float
-Texture.color_ramp -> color_ramp: pointer, (read-only)
-Texture.contrast -> contrast: float
-Texture.factor_blue -> factor_blue: float
-Texture.factor_green -> factor_green: float
-Texture.factor_red -> factor_red: float
-Texture.node_tree -> node_tree: pointer, (read-only) Node tree for node-based textures
-Texture.saturation -> saturation: float
-Texture.type -> type: enum
-TextureNode.type -> type: enum, (read-only)
-TextureNodeBricks.offset -> offset: float
-TextureNodeBricks.offset_frequency -> offset_frequency: int Offset every N rows
-TextureNodeBricks.squash -> squash: float
-TextureNodeBricks.squash_frequency -> squash_frequency: int Squash every N rows
-TextureNodeCurveRGB.mapping -> mapping: pointer, (read-only)
-TextureNodeCurveTime.curve -> curve: pointer, (read-only)
-TextureNodeCurveTime.end -> end: int
-TextureNodeCurveTime.start -> start: int
-TextureNodeImage.image -> image: pointer
-TextureNodeMath.operation -> operation: enum
-TextureNodeMixRGB.blend_type -> blend_type: enum
-TextureNodeOutput.output_name -> output_name: string
-TextureNodeTexture.node_output -> node_output: int For node-based textures, which output node to use
-TextureNodeTexture.texture -> texture: pointer
-TextureNodeValToRGB.color_ramp -> color_ramp: pointer, (read-only)
-TextureSlot.blend_type -> blend_type: enum
-TextureSlot.color -> color: float The default color for textures that don't return RGB
-TextureSlot.default_value -> default_value: float Value to use for Ref, Spec, Amb, Emit, Alpha, RayMir, TransLu and Hard
-TextureSlot.name -> name: string, (read-only) Texture slot name
-TextureSlot.offset -> offset: float Fine tunes texture mapping X, Y and Z locations
-TextureSlot.output_node -> output_node: enum Which output node to use, for node-based textures
-TextureSlot.size -> size: float Sets scaling for the texture's X, Y and Z sizes
-TextureSlot.texture -> texture: pointer Texture datablock used by this texture slot
-Theme.bone_color_sets -> bone_color_sets: collection, (read-only)
-Theme.console -> console: pointer, (read-only)
-Theme.dopesheet_editor -> dopesheet_editor: pointer, (read-only)
-Theme.file_browser -> file_browser: pointer, (read-only)
-Theme.graph_editor -> graph_editor: pointer, (read-only)
-Theme.image_editor -> image_editor: pointer, (read-only)
-Theme.info -> info: pointer, (read-only)
-Theme.logic_editor -> logic_editor: pointer, (read-only)
-Theme.name -> name: string Name of the theme
-Theme.nla_editor -> nla_editor: pointer, (read-only)
-Theme.node_editor -> node_editor: pointer, (read-only)
-Theme.outliner -> outliner: pointer, (read-only)
-Theme.properties -> properties: pointer, (read-only)
-Theme.sequence_editor -> sequence_editor: pointer, (read-only)
-Theme.text_editor -> text_editor: pointer, (read-only)
-Theme.theme_area -> theme_area: enum
-Theme.timeline -> timeline: pointer, (read-only)
-Theme.user_interface -> user_interface: pointer, (read-only)
-Theme.user_preferences -> user_preferences: pointer, (read-only)
-Theme.view_3d -> view_3d: pointer, (read-only)
-ThemeAudioWindow.back -> back: float
-ThemeAudioWindow.button -> button: float
-ThemeAudioWindow.button_text -> button_text: float
-ThemeAudioWindow.button_text_hi -> button_text_hi: float
-ThemeAudioWindow.button_title -> button_title: float
-ThemeAudioWindow.frame_current -> frame_current: float
-ThemeAudioWindow.grid -> grid: float
-ThemeAudioWindow.header -> header: float
-ThemeAudioWindow.header_text -> header_text: float
-ThemeAudioWindow.header_text_hi -> header_text_hi: float
-ThemeAudioWindow.text -> text: float
-ThemeAudioWindow.text_hi -> text_hi: float
-ThemeAudioWindow.title -> title: float
-ThemeAudioWindow.window_sliders -> window_sliders: float
-ThemeBoneColorSet.active -> active: float Color used for active bones
-ThemeBoneColorSet.normal -> normal: float Color used for the surface of bones
-ThemeBoneColorSet.selected -> select: float Color used for selected bones
-ThemeConsole.back -> back: float
-ThemeConsole.button -> button: float
-ThemeConsole.button_text -> button_text: float
-ThemeConsole.button_text_hi -> button_text_hi: float
-ThemeConsole.button_title -> button_title: float
-ThemeConsole.cursor -> cursor: float
-ThemeConsole.header -> header: float
-ThemeConsole.header_text -> header_text: float
-ThemeConsole.header_text_hi -> header_text_hi: float
-ThemeConsole.line_error -> line_error: float
-ThemeConsole.line_info -> line_info: float
-ThemeConsole.line_input -> line_input: float
-ThemeConsole.line_output -> line_output: float
-ThemeConsole.text -> text: float
-ThemeConsole.text_hi -> text_hi: float
-ThemeConsole.title -> title: float
-ThemeDopeSheet.active_channels_group -> active_channels_group: float
-ThemeDopeSheet.back -> back: float
-ThemeDopeSheet.button -> button: float
-ThemeDopeSheet.button_text -> button_text: float
-ThemeDopeSheet.button_text_hi -> button_text_hi: float
-ThemeDopeSheet.button_title -> button_title: float
-ThemeDopeSheet.channel_group -> channel_group: float
-ThemeDopeSheet.channels -> channels: float
-ThemeDopeSheet.channels_selected -> channels_selected: float
-ThemeDopeSheet.dopesheet_channel -> dopesheet_channel: float
-ThemeDopeSheet.dopesheet_subchannel -> dopesheet_subchannel: float
-ThemeDopeSheet.frame_current -> frame_current: float
-ThemeDopeSheet.grid -> grid: float
-ThemeDopeSheet.header -> header: float
-ThemeDopeSheet.header_text -> header_text: float
-ThemeDopeSheet.header_text_hi -> header_text_hi: float
-ThemeDopeSheet.list -> list: float
-ThemeDopeSheet.list_text -> list_text: float
-ThemeDopeSheet.list_text_hi -> list_text_hi: float
-ThemeDopeSheet.list_title -> list_title: float
-ThemeDopeSheet.long_key -> long_key: float
-ThemeDopeSheet.long_key_selected -> long_key_selected: float
-ThemeDopeSheet.text -> text: float
-ThemeDopeSheet.text_hi -> text_hi: float
-ThemeDopeSheet.title -> title: float
-ThemeDopeSheet.value_sliders -> value_sliders: float
-ThemeDopeSheet.view_sliders -> view_sliders: float
-ThemeFileBrowser.active_file -> active_file: float
-ThemeFileBrowser.active_file_text -> active_file_text: float
-ThemeFileBrowser.back -> back: float
-ThemeFileBrowser.button -> button: float
-ThemeFileBrowser.button_text -> button_text: float
-ThemeFileBrowser.button_text_hi -> button_text_hi: float
-ThemeFileBrowser.button_title -> button_title: float
-ThemeFileBrowser.header -> header: float
-ThemeFileBrowser.header_text -> header_text: float
-ThemeFileBrowser.header_text_hi -> header_text_hi: float
-ThemeFileBrowser.list -> list: float
-ThemeFileBrowser.list_text -> list_text: float
-ThemeFileBrowser.list_text_hi -> list_text_hi: float
-ThemeFileBrowser.list_title -> list_title: float
-ThemeFileBrowser.scroll_handle -> scroll_handle: float
-ThemeFileBrowser.scrollbar -> scrollbar: float
-ThemeFileBrowser.selected_file -> selected_file: float
-ThemeFileBrowser.text -> text: float
-ThemeFileBrowser.text_hi -> text_hi: float
-ThemeFileBrowser.tiles -> tiles: float
-ThemeFileBrowser.title -> title: float
-ThemeFontStyle.font_kerning_style -> font_kerning_style: enum Which style to use for font kerning
-ThemeFontStyle.points -> points: int
-ThemeFontStyle.shadow -> shadow: int Shadow size in pixels (0, 3 and 5 supported)
-ThemeFontStyle.shadowalpha -> shadowalpha: float
-ThemeFontStyle.shadowcolor -> shadowcolor: float Shadow color in grey value
-ThemeFontStyle.shadx -> shadow_offset_x: int Shadow offset in pixels
-ThemeFontStyle.shady -> shadow_offset_y: int Shadow offset in pixels
-ThemeGraphEditor.active_channels_group -> active_channels_group: float
-ThemeGraphEditor.back -> back: float
-ThemeGraphEditor.button -> button: float
-ThemeGraphEditor.button_text -> button_text: float
-ThemeGraphEditor.button_text_hi -> button_text_hi: float
-ThemeGraphEditor.button_title -> button_title: float
-ThemeGraphEditor.channel_group -> channel_group: float
-ThemeGraphEditor.channels_region -> channels_region: float
-ThemeGraphEditor.dopesheet_channel -> dopesheet_channel: float
-ThemeGraphEditor.dopesheet_subchannel -> dopesheet_subchannel: float
-ThemeGraphEditor.frame_current -> frame_current: float
-ThemeGraphEditor.grid -> grid: float
-ThemeGraphEditor.handle_align -> handle_align: float
-ThemeGraphEditor.handle_auto -> handle_auto: float
-ThemeGraphEditor.handle_free -> handle_free: float
-ThemeGraphEditor.handle_sel_align -> handle_sel_align: float
-ThemeGraphEditor.handle_sel_auto -> handle_sel_auto: float
-ThemeGraphEditor.handle_sel_free -> handle_sel_free: float
-ThemeGraphEditor.handle_sel_vect -> handle_sel_vect: float
-ThemeGraphEditor.handle_vect -> handle_vect: float
-ThemeGraphEditor.handle_vertex -> handle_vertex: float
-ThemeGraphEditor.handle_vertex_select -> handle_vertex_select: float
-ThemeGraphEditor.handle_vertex_size -> handle_vertex_size: int
-ThemeGraphEditor.header -> header: float
-ThemeGraphEditor.header_text -> header_text: float
-ThemeGraphEditor.header_text_hi -> header_text_hi: float
-ThemeGraphEditor.lastsel_point -> lastsel_point: float
-ThemeGraphEditor.list -> list: float
-ThemeGraphEditor.list_text -> list_text: float
-ThemeGraphEditor.list_text_hi -> list_text_hi: float
-ThemeGraphEditor.list_title -> list_title: float
-ThemeGraphEditor.panel -> panel: float
-ThemeGraphEditor.text -> text: float
-ThemeGraphEditor.text_hi -> text_hi: float
-ThemeGraphEditor.title -> title: float
-ThemeGraphEditor.vertex -> vertex: float
-ThemeGraphEditor.vertex_select -> vertex_select: float
-ThemeGraphEditor.vertex_size -> vertex_size: int
-ThemeGraphEditor.window_sliders -> window_sliders: float
-ThemeImageEditor.back -> back: float
-ThemeImageEditor.button -> button: float
-ThemeImageEditor.button_text -> button_text: float
-ThemeImageEditor.button_text_hi -> button_text_hi: float
-ThemeImageEditor.button_title -> button_title: float
-ThemeImageEditor.editmesh_active -> editmesh_active: float
-ThemeImageEditor.face -> face: float
-ThemeImageEditor.face_dot -> face_dot: float
-ThemeImageEditor.face_select -> face_select: float
-ThemeImageEditor.facedot_size -> facedot_size: int
-ThemeImageEditor.header -> header: float
-ThemeImageEditor.header_text -> header_text: float
-ThemeImageEditor.header_text_hi -> header_text_hi: float
-ThemeImageEditor.scope_back -> scope_back: float
-ThemeImageEditor.text -> text: float
-ThemeImageEditor.text_hi -> text_hi: float
-ThemeImageEditor.title -> title: float
-ThemeImageEditor.vertex -> vertex: float
-ThemeImageEditor.vertex_select -> vertex_select: float
-ThemeImageEditor.vertex_size -> vertex_size: int
-ThemeInfo.back -> back: float
-ThemeInfo.button -> button: float
-ThemeInfo.button_text -> button_text: float
-ThemeInfo.button_text_hi -> button_text_hi: float
-ThemeInfo.button_title -> button_title: float
-ThemeInfo.header -> header: float
-ThemeInfo.header_text -> header_text: float
-ThemeInfo.header_text_hi -> header_text_hi: float
-ThemeInfo.text -> text: float
-ThemeInfo.text_hi -> text_hi: float
-ThemeInfo.title -> title: float
-ThemeLogicEditor.back -> back: float
-ThemeLogicEditor.button -> button: float
-ThemeLogicEditor.button_text -> button_text: float
-ThemeLogicEditor.button_text_hi -> button_text_hi: float
-ThemeLogicEditor.button_title -> button_title: float
-ThemeLogicEditor.header -> header: float
-ThemeLogicEditor.header_text -> header_text: float
-ThemeLogicEditor.header_text_hi -> header_text_hi: float
-ThemeLogicEditor.panel -> panel: float
-ThemeLogicEditor.text -> text: float
-ThemeLogicEditor.text_hi -> text_hi: float
-ThemeLogicEditor.title -> title: float
-ThemeNLAEditor.back -> back: float
-ThemeNLAEditor.bars -> bars: float
-ThemeNLAEditor.bars_selected -> bars_selected: float
-ThemeNLAEditor.button -> button: float
-ThemeNLAEditor.button_text -> button_text: float
-ThemeNLAEditor.button_text_hi -> button_text_hi: float
-ThemeNLAEditor.button_title -> button_title: float
-ThemeNLAEditor.frame_current -> frame_current: float
-ThemeNLAEditor.grid -> grid: float
-ThemeNLAEditor.header -> header: float
-ThemeNLAEditor.header_text -> header_text: float
-ThemeNLAEditor.header_text_hi -> header_text_hi: float
-ThemeNLAEditor.list -> list: float
-ThemeNLAEditor.list_text -> list_text: float
-ThemeNLAEditor.list_text_hi -> list_text_hi: float
-ThemeNLAEditor.list_title -> list_title: float
-ThemeNLAEditor.strips -> strips: float
-ThemeNLAEditor.strips_selected -> strips_selected: float
-ThemeNLAEditor.text -> text: float
-ThemeNLAEditor.text_hi -> text_hi: float
-ThemeNLAEditor.title -> title: float
-ThemeNLAEditor.view_sliders -> view_sliders: float
-ThemeNodeEditor.back -> back: float
-ThemeNodeEditor.button -> button: float
-ThemeNodeEditor.button_text -> button_text: float
-ThemeNodeEditor.button_text_hi -> button_text_hi: float
-ThemeNodeEditor.button_title -> button_title: float
-ThemeNodeEditor.converter_node -> converter_node: float
-ThemeNodeEditor.group_node -> group_node: float
-ThemeNodeEditor.header -> header: float
-ThemeNodeEditor.header_text -> header_text: float
-ThemeNodeEditor.header_text_hi -> header_text_hi: float
-ThemeNodeEditor.in_out_node -> in_out_node: float
-ThemeNodeEditor.list -> list: float
-ThemeNodeEditor.list_text -> list_text: float
-ThemeNodeEditor.list_text_hi -> list_text_hi: float
-ThemeNodeEditor.list_title -> list_title: float
-ThemeNodeEditor.node_backdrop -> node_backdrop: float
-ThemeNodeEditor.operator_node -> operator_node: float
-ThemeNodeEditor.selected_text -> selected_text: float
-ThemeNodeEditor.text -> text: float
-ThemeNodeEditor.text_hi -> text_hi: float
-ThemeNodeEditor.title -> title: float
-ThemeNodeEditor.wire_select -> wire_select: float
-ThemeNodeEditor.wires -> wires: float
-ThemeOutliner.back -> back: float
-ThemeOutliner.button -> button: float
-ThemeOutliner.button_text -> button_text: float
-ThemeOutliner.button_text_hi -> button_text_hi: float
-ThemeOutliner.button_title -> button_title: float
-ThemeOutliner.header -> header: float
-ThemeOutliner.header_text -> header_text: float
-ThemeOutliner.header_text_hi -> header_text_hi: float
-ThemeOutliner.text -> text: float
-ThemeOutliner.text_hi -> text_hi: float
-ThemeOutliner.title -> title: float
-ThemeProperties.back -> back: float
-ThemeProperties.button -> button: float
-ThemeProperties.button_text -> button_text: float
-ThemeProperties.button_text_hi -> button_text_hi: float
-ThemeProperties.button_title -> button_title: float
-ThemeProperties.header -> header: float
-ThemeProperties.header_text -> header_text: float
-ThemeProperties.header_text_hi -> header_text_hi: float
-ThemeProperties.panel -> panel: float
-ThemeProperties.text -> text: float
-ThemeProperties.text_hi -> text_hi: float
-ThemeProperties.title -> title: float
-ThemeSequenceEditor.audio_strip -> audio_strip: float
-ThemeSequenceEditor.back -> back: float
-ThemeSequenceEditor.button -> button: float
-ThemeSequenceEditor.button_text -> button_text: float
-ThemeSequenceEditor.button_text_hi -> button_text_hi: float
-ThemeSequenceEditor.button_title -> button_title: float
-ThemeSequenceEditor.draw_action -> draw_action: float
-ThemeSequenceEditor.effect_strip -> effect_strip: float
-ThemeSequenceEditor.frame_current -> frame_current: float
-ThemeSequenceEditor.grid -> grid: float
-ThemeSequenceEditor.header -> header: float
-ThemeSequenceEditor.header_text -> header_text: float
-ThemeSequenceEditor.header_text_hi -> header_text_hi: float
-ThemeSequenceEditor.image_strip -> image_strip: float
-ThemeSequenceEditor.keyframe -> keyframe: float
-ThemeSequenceEditor.meta_strip -> meta_strip: float
-ThemeSequenceEditor.movie_strip -> movie_strip: float
-ThemeSequenceEditor.plugin_strip -> plugin_strip: float
-ThemeSequenceEditor.scene_strip -> scene_strip: float
-ThemeSequenceEditor.text -> text: float
-ThemeSequenceEditor.text_hi -> text_hi: float
-ThemeSequenceEditor.title -> title: float
-ThemeSequenceEditor.transition_strip -> transition_strip: float
-ThemeSequenceEditor.window_sliders -> window_sliders: float
-ThemeStyle.grouplabel -> grouplabel: pointer, (read-only)
-ThemeStyle.paneltitle -> paneltitle: pointer, (read-only)
-ThemeStyle.panelzoom -> panelzoom: float Default zoom level for panel areas
-ThemeStyle.widget -> widget: pointer, (read-only)
-ThemeStyle.widgetlabel -> widgetlabel: pointer, (read-only)
-ThemeTextEditor.back -> back: float
-ThemeTextEditor.button -> button: float
-ThemeTextEditor.button_text -> button_text: float
-ThemeTextEditor.button_text_hi -> button_text_hi: float
-ThemeTextEditor.button_title -> button_title: float
-ThemeTextEditor.cursor -> cursor: float
-ThemeTextEditor.header -> header: float
-ThemeTextEditor.header_text -> header_text: float
-ThemeTextEditor.header_text_hi -> header_text_hi: float
-ThemeTextEditor.line_numbers_background -> line_numbers_background: float
-ThemeTextEditor.scroll_bar -> scroll_bar: float
-ThemeTextEditor.selected_text -> selected_text: float
-ThemeTextEditor.syntax_builtin -> syntax_builtin: float
-ThemeTextEditor.syntax_comment -> syntax_comment: float
-ThemeTextEditor.syntax_numbers -> syntax_numbers: float
-ThemeTextEditor.syntax_special -> syntax_special: float
-ThemeTextEditor.syntax_string -> syntax_string: float
-ThemeTextEditor.text -> text: float
-ThemeTextEditor.text_hi -> text_hi: float
-ThemeTextEditor.title -> title: float
-ThemeTimeline.back -> back: float
-ThemeTimeline.button -> button: float
-ThemeTimeline.button_text -> button_text: float
-ThemeTimeline.button_text_hi -> button_text_hi: float
-ThemeTimeline.button_title -> button_title: float
-ThemeTimeline.frame_current -> frame_current: float
-ThemeTimeline.grid -> grid: float
-ThemeTimeline.header -> header: float
-ThemeTimeline.header_text -> header_text: float
-ThemeTimeline.header_text_hi -> header_text_hi: float
-ThemeTimeline.text -> text: float
-ThemeTimeline.text_hi -> text_hi: float
-ThemeTimeline.title -> title: float
-ThemeUserInterface.icon_file -> icon_file: string
-ThemeUserInterface.wcol_box -> wcol_box: pointer, (read-only)
-ThemeUserInterface.wcol_list_item -> wcol_list_item: pointer, (read-only)
-ThemeUserInterface.wcol_menu -> wcol_menu: pointer, (read-only)
-ThemeUserInterface.wcol_menu_back -> wcol_menu_back: pointer, (read-only)
-ThemeUserInterface.wcol_menu_item -> wcol_menu_item: pointer, (read-only)
-ThemeUserInterface.wcol_num -> wcol_num: pointer, (read-only)
-ThemeUserInterface.wcol_numslider -> wcol_numslider: pointer, (read-only)
-ThemeUserInterface.wcol_option -> wcol_option: pointer, (read-only)
-ThemeUserInterface.wcol_progress -> wcol_progress: pointer, (read-only)
-ThemeUserInterface.wcol_pulldown -> wcol_pulldown: pointer, (read-only)
-ThemeUserInterface.wcol_radio -> wcol_radio: pointer, (read-only)
-ThemeUserInterface.wcol_regular -> wcol_regular: pointer, (read-only)
-ThemeUserInterface.wcol_scroll -> wcol_scroll: pointer, (read-only)
-ThemeUserInterface.wcol_state -> wcol_state: pointer, (read-only)
-ThemeUserInterface.wcol_text -> wcol_text: pointer, (read-only)
-ThemeUserInterface.wcol_toggle -> wcol_toggle: pointer, (read-only)
-ThemeUserInterface.wcol_tool -> wcol_tool: pointer, (read-only)
-ThemeUserPreferences.back -> back: float
-ThemeUserPreferences.button -> button: float
-ThemeUserPreferences.button_text -> button_text: float
-ThemeUserPreferences.button_text_hi -> button_text_hi: float
-ThemeUserPreferences.button_title -> button_title: float
-ThemeUserPreferences.header -> header: float
-ThemeUserPreferences.header_text -> header_text: float
-ThemeUserPreferences.header_text_hi -> header_text_hi: float
-ThemeUserPreferences.text -> text: float
-ThemeUserPreferences.text_hi -> text_hi: float
-ThemeUserPreferences.title -> title: float
-ThemeView3D.act_spline -> act_spline: float
-ThemeView3D.back -> back: float
-ThemeView3D.bone_pose -> bone_pose: float
-ThemeView3D.bone_solid -> bone_solid: float
-ThemeView3D.button -> button: float
-ThemeView3D.button_text -> button_text: float
-ThemeView3D.button_text_hi -> button_text_hi: float
-ThemeView3D.button_title -> button_title: float
-ThemeView3D.edge_crease -> edge_crease: float
-ThemeView3D.edge_facesel -> edge_facesel: float
-ThemeView3D.edge_seam -> edge_seam: float
-ThemeView3D.edge_select -> edge_select: float
-ThemeView3D.edge_sharp -> edge_sharp: float
-ThemeView3D.editmesh_active -> editmesh_active: float
-ThemeView3D.face -> face: float
-ThemeView3D.face_dot -> face_dot: float
-ThemeView3D.face_select -> face_select: float
-ThemeView3D.facedot_size -> facedot_size: int
-ThemeView3D.frame_current -> frame_current: float
-ThemeView3D.grid -> grid: float
-ThemeView3D.handle_align -> handle_align: float
-ThemeView3D.handle_auto -> handle_auto: float
-ThemeView3D.handle_free -> handle_free: float
-ThemeView3D.handle_sel_align -> handle_sel_align: float
-ThemeView3D.handle_sel_auto -> handle_sel_auto: float
-ThemeView3D.handle_sel_free -> handle_sel_free: float
-ThemeView3D.handle_sel_vect -> handle_sel_vect: float
-ThemeView3D.handle_vect -> handle_vect: float
-ThemeView3D.header -> header: float
-ThemeView3D.header_text -> header_text: float
-ThemeView3D.header_text_hi -> header_text_hi: float
-ThemeView3D.lamp -> lamp: float
-ThemeView3D.lastsel_point -> lastsel_point: float
-ThemeView3D.normal -> normal: float
-ThemeView3D.nurb_sel_uline -> nurb_sel_uline: float
-ThemeView3D.nurb_sel_vline -> nurb_sel_vline: float
-ThemeView3D.nurb_uline -> nurb_uline: float
-ThemeView3D.nurb_vline -> nurb_vline: float
-ThemeView3D.object_active -> object_active: float
-ThemeView3D.object_grouped -> object_grouped: float
-ThemeView3D.object_grouped_active -> object_grouped_active: float
-ThemeView3D.object_selected -> object_selected: float
-ThemeView3D.panel -> panel: float
-ThemeView3D.text -> text: float
-ThemeView3D.text_hi -> text_hi: float
-ThemeView3D.title -> title: float
-ThemeView3D.transform -> transform: float
-ThemeView3D.vertex -> vertex: float
-ThemeView3D.vertex_normal -> vertex_normal: float
-ThemeView3D.vertex_select -> vertex_select: float
-ThemeView3D.vertex_size -> vertex_size: int
-ThemeView3D.wire -> wire: float
-ThemeWidgetColors.inner -> inner: float
-ThemeWidgetColors.inner_sel -> inner_sel: float
-ThemeWidgetColors.item -> item: float
-ThemeWidgetColors.outline -> outline: float
-ThemeWidgetColors.shadedown -> shadedown: int
-ThemeWidgetColors.shadetop -> shadetop: int
-ThemeWidgetColors.text -> text: float
-ThemeWidgetColors.text_sel -> text_sel: float
-ThemeWidgetStateColors.blend -> blend: float
-ThemeWidgetStateColors.inner_anim -> inner_anim: float
-ThemeWidgetStateColors.inner_anim_sel -> inner_anim_sel: float
-ThemeWidgetStateColors.inner_driven -> inner_driven: float
-ThemeWidgetStateColors.inner_driven_sel -> inner_driven_sel: float
-ThemeWidgetStateColors.inner_key -> inner_key: float
-ThemeWidgetStateColors.inner_key_sel -> inner_key_sel: float
-TimelineMarker.camera -> camera: pointer Camera this timeline sets to active
-TimelineMarker.frame -> frame: int The frame on which the timeline marker appears
-TimelineMarker.name -> name: string
-ToolSettings.autokey_mode -> autokey_mode: enum Mode of automatic keyframe insertion for Objects and Bones
-ToolSettings.edge_path_mode -> edge_path_mode: enum The edge flag to tag when selecting the shortest path
-ToolSettings.etch_adaptive_limit -> etch_adaptive_limit: float Number of bones in the subdivided stroke
-ToolSettings.etch_convert_mode -> etch_convert_mode: enum Method used to convert stroke to bones
-ToolSettings.etch_length_limit -> etch_length_limit: float Number of bones in the subdivided stroke
-ToolSettings.etch_number -> etch_number: string DOC BROKEN
-ToolSettings.etch_roll_mode -> etch_roll_mode: enum Method used to adjust the roll of bones when retargeting
-ToolSettings.etch_side -> etch_side: string DOC BROKEN
-ToolSettings.etch_subdivision_number -> etch_subdivision_number: int Number of bones in the subdivided stroke
-ToolSettings.etch_template -> etch_template: pointer Template armature that will be retargeted to the stroke
-ToolSettings.image_paint -> image_paint: pointer, (read-only)
-ToolSettings.normal_size -> normal_size: float Display size for normals in the 3D view
-ToolSettings.particle_edit -> particle_edit: pointer, (read-only)
-ToolSettings.proportional_editing -> proportional_edit: enum Proportional editing mode
-ToolSettings.proportional_editing_falloff -> proportional_edit_falloff: enum Falloff type for proportional editing mode
-ToolSettings.sculpt -> sculpt: pointer, (read-only)
-ToolSettings.snap_element -> snap_element: enum Type of element to snap to
-ToolSettings.snap_target -> snap_target: enum Which part to snap onto the target
-ToolSettings.uv_selection_mode -> uv_selection_mode: enum UV selection and display mode
-ToolSettings.vertex_group_weight -> vertex_group_weight: float Weight to assign in vertex groups
-ToolSettings.vertex_paint -> vertex_paint: pointer, (read-only)
-ToolSettings.weight_paint -> weight_paint: pointer, (read-only)
-TouchSensor.material -> material: pointer Only look for objects with this material
-TrackToConstraint.head_tail -> head_tail: float Target along length of bone: Head=0, Tail=1
-TrackToConstraint.subtarget -> subtarget: string
-TrackToConstraint.target -> target: pointer Target Object
-TrackToConstraint.track -> track: enum Axis that points to the target object
-TrackToConstraint.up -> up: enum Axis that points upward
-TransformConstraint.from_max_x -> from_max_x: float Top range of X axis source motion
-TransformConstraint.from_max_y -> from_max_y: float Top range of Y axis source motion
-TransformConstraint.from_max_z -> from_max_z: float Top range of Z axis source motion
-TransformConstraint.from_min_x -> from_min_x: float Bottom range of X axis source motion
-TransformConstraint.from_min_y -> from_min_y: float Bottom range of Y axis source motion
-TransformConstraint.from_min_z -> from_min_z: float Bottom range of Z axis source motion
-TransformConstraint.map_from -> map_from: enum The transformation type to use from the target
-TransformConstraint.map_to -> map_to: enum The transformation type to affect of the constrained object
-TransformConstraint.map_to_x_from -> map_to_x_from: enum The source axis constrained object's X axis uses
-TransformConstraint.map_to_y_from -> map_to_y_from: enum The source axis constrained object's Y axis uses
-TransformConstraint.map_to_z_from -> map_to_z_from: enum The source axis constrained object's Z axis uses
-TransformConstraint.subtarget -> subtarget: string
-TransformConstraint.target -> target: pointer Target Object
-TransformConstraint.to_max_x -> to_max_x: float Top range of X axis destination motion
-TransformConstraint.to_max_y -> to_max_y: float Top range of Y axis destination motion
-TransformConstraint.to_max_z -> to_max_z: float Top range of Z axis destination motion
-TransformConstraint.to_min_x -> to_min_x: float Bottom range of X axis destination motion
-TransformConstraint.to_min_y -> to_min_y: float Bottom range of Y axis destination motion
-TransformConstraint.to_min_z -> to_min_z: float Bottom range of Z axis destination motion
-TransformOrientation.matrix -> matrix: float
-TransformOrientation.name -> name: string
-TransformSequence.interpolation -> interpolation: enum
-TransformSequence.rotation_start -> rotation_start: float
-TransformSequence.scale_start_x -> scale_start_x: float
-TransformSequence.scale_start_y -> scale_start_y: float
-TransformSequence.translate_start_x -> translate_start_x: float
-TransformSequence.translate_start_y -> translate_start_y: float
-TransformSequence.translation_unit -> translation_unit: enum
-UILayout.alignment -> alignment: enum
-UILayout.operator_context -> operator_context: enum
-UILayout.scale_x -> scale_x: float
-UILayout.scale_y -> scale_y: float
-UVProjectModifier.aspect_x -> aspect_x: float
-UVProjectModifier.aspect_y -> aspect_y: float
-UVProjectModifier.image -> image: pointer
-UVProjectModifier.num_projectors -> num_projectors: int Number of projectors to use
-UVProjectModifier.projectors -> projectors: collection, (read-only)
-UVProjectModifier.scale_x -> scale_x: float
-UVProjectModifier.scale_y -> scale_y: float
-UVProjectModifier.uv_layer -> uv_layer: string UV layer name
-UVProjector.object -> object: pointer Object to use as projector transform
-UnitSettings.rotation_units -> rotation_units: enum Unit to use for displaying/editing rotation values
-UnitSettings.scale_length -> scale_length: float Scale to use when converting between blender units and dimensions
-UnitSettings.system -> system: enum The unit system to use for button display
-UserPreferences.active_section -> active_section: enum Active section of the user preferences shown in the user interface
-UserPreferences.addons -> addons: collection, (read-only)
-UserPreferences.edit -> edit: pointer, (read-only) Settings for interacting with Blender data
-UserPreferences.filepaths -> filepaths: pointer, (read-only) Default paths for external files
-UserPreferences.inputs -> inputs: pointer, (read-only) Settings for input devices
-UserPreferences.system -> system: pointer, (read-only) Graphics driver and operating system settings
-UserPreferences.themes -> themes: collection, (read-only)
-UserPreferences.uistyles -> uistyles: collection, (read-only)
-UserPreferences.view -> view: pointer, (read-only) Preferences related to viewing data
-UserPreferencesEdit.auto_keying_mode -> auto_keying_mode: enum Mode of automatic keyframe insertion for Objects and Bones
-UserPreferencesEdit.grease_pencil_eraser_radius -> grease_pencil_eraser_radius: int Radius of eraser 'brush'
-UserPreferencesEdit.grease_pencil_euclidean_distance -> grease_pencil_euclidean_distance: int Distance moved by mouse when drawing stroke (in pixels) to include
-UserPreferencesEdit.grease_pencil_manhattan_distance -> grease_pencil_manhattan_distance: int Pixels moved by mouse per axis when drawing stroke
-UserPreferencesEdit.keyframe_new_handle_type -> keyframe_new_handle_type: enum
-UserPreferencesEdit.keyframe_new_interpolation_type -> keyframe_new_interpolation_type: enum
-UserPreferencesEdit.material_link -> material_link: enum Toggle whether the material is linked to object data or the object block
-UserPreferencesEdit.object_align -> object_align: enum When adding objects from a 3D View menu, either align them to that view's direction or the world coordinates
-UserPreferencesEdit.undo_memory_limit -> undo_memory_limit: int Maximum memory usage in megabytes (0 means unlimited)
-UserPreferencesEdit.undo_steps -> undo_steps: int Number of undo steps available (smaller values conserve memory)
-UserPreferencesFilePaths.animation_player -> animation_player: string Path to a custom animation/frame sequence player
-UserPreferencesFilePaths.animation_player_preset -> animation_player_preset: enum Preset configs for external animation players
-UserPreferencesFilePaths.auto_save_time -> auto_save_time: int The time (in minutes) to wait between automatic temporary saves
-UserPreferencesFilePaths.fonts_directory -> fonts_directory: string The default directory to search for loading fonts
-UserPreferencesFilePaths.image_editor -> image_editor: string Path to an image editor
-UserPreferencesFilePaths.python_scripts_directory -> python_scripts_directory: string The default directory to search for Python scripts (resets python module search path: sys.path)
-UserPreferencesFilePaths.recent_files -> recent_files: int Maximum number of recently opened files to remember
-UserPreferencesFilePaths.render_output_directory -> render_output_directory: string The default directory for rendering output
-UserPreferencesFilePaths.save_version -> save_version: int The number of old versions to maintain in the current directory, when manually saving
-UserPreferencesFilePaths.sequence_plugin_directory -> sequence_plugin_directory: string The default directory to search for sequence plugins
-UserPreferencesFilePaths.sounds_directory -> sounds_directory: string The default directory to search for sounds
-UserPreferencesFilePaths.temporary_directory -> temporary_directory: string The directory for storing temporary save files
-UserPreferencesFilePaths.texture_plugin_directory -> texture_plugin_directory: string The default directory to search for texture plugins
-UserPreferencesFilePaths.textures_directory -> textures_directory: string The default directory to search for textures
-UserPreferencesInput.double_click_time -> double_click_time: int The time (in ms) for a double click
-UserPreferencesInput.edited_keymaps -> edited_keymaps: collection, (read-only)
-UserPreferencesInput.ndof_pan_speed -> ndof_pan_speed: int The overall panning speed of an NDOF device, as percent of standard
-UserPreferencesInput.ndof_rotate_speed -> ndof_rotate_speed: int The overall rotation speed of an NDOF device, as percent of standard
-UserPreferencesInput.select_mouse -> select_mouse: enum The mouse button used for selection
-UserPreferencesInput.view_rotation -> view_rotation: enum Rotation style in the viewport
-UserPreferencesInput.zoom_axis -> zoom_axis: enum Axis of mouse movement to zoom in or out on
-UserPreferencesInput.zoom_style -> zoom_style: enum Which style to use for viewport scaling
-UserPreferencesSystem.audio_channels -> audio_channels: enum Sets the audio channel count
-UserPreferencesSystem.audio_device -> audio_device: enum Sets the audio output device
-UserPreferencesSystem.audio_mixing_buffer -> audio_mixing_buffer: enum Sets the number of samples used by the audio mixing buffer
-UserPreferencesSystem.audio_sample_format -> audio_sample_format: enum Sets the audio sample format
-UserPreferencesSystem.audio_sample_rate -> audio_sample_rate: enum Sets the audio sample rate
-UserPreferencesSystem.clip_alpha -> clip_alpha: float Clip alpha below this threshold in the 3D textured view
-UserPreferencesSystem.color_picker_type -> color_picker_type: enum Different styles of displaying the color picker widget
-UserPreferencesSystem.dpi -> dpi: int Font size and resolution for display
-UserPreferencesSystem.frame_server_port -> frame_server_port: int Frameserver Port for Frameserver Rendering
-UserPreferencesSystem.gl_texture_limit -> gl_texture_limit: enum Limit the texture size to save graphics memory
-UserPreferencesSystem.language -> language: enum Language use for translation
-UserPreferencesSystem.memory_cache_limit -> memory_cache_limit: int Memory cache limit in sequencer (megabytes)
-UserPreferencesSystem.prefetch_frames -> prefetch_frames: int Number of frames to render ahead during playback
-UserPreferencesSystem.screencast_fps -> screencast_fps: int Frame rate for the screencast to be played back
-UserPreferencesSystem.screencast_wait_time -> screencast_wait_time: int Time in milliseconds between each frame recorded for screencast
-UserPreferencesSystem.scrollback -> scrollback: int Maximum number of lines to store for the console buffer
-UserPreferencesSystem.solid_lights -> solid_lights: collection, (read-only) Lights user to display objects in solid draw mode
-UserPreferencesSystem.texture_collection_rate -> texture_collection_rate: int Number of seconds between each run of the GL texture garbage collector
-UserPreferencesSystem.texture_time_out -> texture_time_out: int Time since last access of a GL texture in seconds after which it is freed. (Set to 0 to keep textures allocated.)
-UserPreferencesSystem.weight_color_range -> weight_color_range: pointer, (read-only) Color range used for weight visualization in weight painting mode
-UserPreferencesSystem.window_draw_method -> window_draw_method: enum Drawing method used by the window manager
-UserPreferencesView.manipulator_handle_size -> manipulator_handle_size: int Size of widget handles as percentage of widget radius
-UserPreferencesView.manipulator_hotspot -> manipulator_hotspot: int Hotspot in pixels for clicking widget handles
-UserPreferencesView.manipulator_size -> manipulator_size: int Diameter of widget, in 10 pixel units
-UserPreferencesView.mini_axis_brightness -> mini_axis_brightness: int The brightness of the icon
-UserPreferencesView.mini_axis_size -> mini_axis_size: int The axis icon's size
-UserPreferencesView.object_origin_size -> object_origin_size: int Diameter in Pixels for Object/Lamp origin display
-UserPreferencesView.open_left_mouse_delay -> open_left_mouse_delay: int Time in 1/10 seconds to hold the Left Mouse Button before opening the toolbox
-UserPreferencesView.open_right_mouse_delay -> open_right_mouse_delay: int Time in 1/10 seconds to hold the Right Mouse Button before opening the toolbox
-UserPreferencesView.open_sublevel_delay -> open_sublevel_delay: int Time delay in 1/10 seconds before automatically opening sub level menus
-UserPreferencesView.open_toplevel_delay -> open_toplevel_delay: int Time delay in 1/10 seconds before automatically opening top level menus
-UserPreferencesView.properties_width_check -> properties_width_check: int Dual Column layout will change to single column layout when the width of the area gets below this value (needs restart to take effect)
-UserPreferencesView.rotation_angle -> rotation_angle: int The rotation step for numerical pad keys (2 4 6 8)
-UserPreferencesView.smooth_view -> smooth_view: int The time to animate the view in milliseconds, zero to disable
-UserPreferencesView.timecode_style -> timecode_style: enum Format of Time Codes displayed when not displaying timing in terms of frames
-UserPreferencesView.view2d_grid_minimum_spacing -> view2d_grid_spacing_min: int Minimum number of pixels between each gridline in 2D Viewports
-UserPreferencesView.wheel_scroll_lines -> wheel_scroll_lines: int The number of lines scrolled at a time with the mouse wheel
-UserSolidLight.diffuse_color -> diffuse_color: float The diffuse color of the OpenGL light
-UserSolidLight.direction -> direction: float The direction that the OpenGL light is shining
-UserSolidLight.specular_color -> specular_color: float The color of the lights specular highlight
-ValueNodeSocket.default_value -> default_value: float Default value of the socket when no link is attached
-ValueNodeSocket.name -> name: string, (read-only) Socket name
-VectorFont.filepath -> filepath: string, (read-only)
-VectorFont.packed_file -> packed_file: pointer, (read-only)
-VectorNodeSocket.default_value -> default_value: float Default value of the socket when no link is attached
-VectorNodeSocket.name -> name: string, (read-only) Socket name
-VertexGroup.index -> index: int, (read-only) Index number of the vertex group
-VertexGroup.name -> name: string Vertex group name
-VertexGroupElement.group -> group: int, (read-only)
-VertexGroupElement.weight -> weight: float Vertex Weight
-VoronoiTexture.coloring -> color_mode: enum
-VoronoiTexture.distance_metric -> distance_metric: enum
-VoronoiTexture.minkovsky_exponent -> minkovsky_exponent: float Minkovsky exponent
-VoronoiTexture.nabla -> nabla: float Size of derivative offset used for calculating normal
-VoronoiTexture.noise_intensity -> noise_intensity: float
-VoronoiTexture.noise_size -> noise_size: float Sets scaling for noise input
-VoronoiTexture.weight_1 -> weight_1: float Voronoi feature weight 1
-VoronoiTexture.weight_2 -> weight_2: float Voronoi feature weight 2
-VoronoiTexture.weight_3 -> weight_3: float Voronoi feature weight 3
-VoronoiTexture.weight_4 -> weight_4: float Voronoi feature weight 4
-VoxelData.domain_object -> domain_object: pointer Object used as the smoke simulation domain
-VoxelData.extension -> extension: enum Sets how the texture is extrapolated past its original bounds
-VoxelData.file_format -> file_format: enum Format of the source data set to render
-VoxelData.intensity -> intensity: float Multiplier for intensity values
-VoxelData.interpolation -> interpolation: enum Method to interpolate/smooth values between voxel cells
-VoxelData.resolution -> resolution: int Resolution of the voxel grid
-VoxelData.smoke_data_type -> smoke_data_type: enum Simulation value to be used as a texture
-VoxelData.source_path -> source_path: string The external source data file to use
-VoxelData.still_frame_number -> still_frame_number: int The frame number to always use
-VoxelDataTexture.image -> image: pointer
-VoxelDataTexture.image_user -> image_user: pointer, (read-only) Parameters defining which layer, pass and frame of the image is displayed
-VoxelDataTexture.voxeldata -> voxeldata: pointer, (read-only) The voxel data associated with this texture
-WaveModifier.damping_time -> damping_time: float
-WaveModifier.falloff_radius -> falloff_radius: float
-WaveModifier.height -> height: float
-WaveModifier.lifetime -> lifetime: float
-WaveModifier.narrowness -> narrowness: float
-WaveModifier.speed -> speed: float
-WaveModifier.start_position_object -> start_position_object: pointer
-WaveModifier.start_position_x -> start_position_x: float
-WaveModifier.start_position_y -> start_position_y: float
-WaveModifier.texture -> texture: pointer Texture for modulating the wave
-WaveModifier.texture_coordinates -> texture_coordinates: enum Texture coordinates used for modulating input
-WaveModifier.texture_coordinates_object -> texture_coordinates_object: pointer
-WaveModifier.time_offset -> time_offset: float Either the starting frame (for positive speed) or ending frame (for negative speed.)
-WaveModifier.uv_layer -> uv_layer: string UV layer name
-WaveModifier.vertex_group -> vertex_group: string Vertex group name for modulating the wave
-WaveModifier.width -> width: float
-Window.screen -> screen: pointer Active screen showing in the window
-WindowManager.active_keyconfig -> active_keyconfig: pointer
-WindowManager.default_keyconfig -> default_keyconfig: pointer, (read-only)
-WindowManager.keyconfigs -> keyconfigs: collection, (read-only) Registered key configurations
-WindowManager.operators -> operators: collection, (read-only) Operator registry
-WindowManager.windows -> windows: collection, (read-only) Open windows
-WipeSequence.angle -> angle: float Edge angle
-WipeSequence.blur_width -> blur_width: float Width of the blur edge, in percentage relative to the image size
-WipeSequence.direction -> direction: enum Wipe direction
-WipeSequence.transition_type -> transition_type: enum
-WoodTexture.nabla -> nabla: float Size of derivative offset used for calculating normal
-WoodTexture.noise_basis -> noise_basis: enum Sets the noise basis used for turbulence
-WoodTexture.noise_size -> noise_size: float Sets scaling for noise input
-WoodTexture.noise_type -> noise_type: enum
-WoodTexture.noisebasis2 -> noisebasis2: enum
-WoodTexture.stype -> stype: enum
-WoodTexture.turbulence -> turbulence: float Sets the turbulence of the bandnoise and ringnoise types
-World.active_texture -> active_texture: pointer Active texture slot being displayed
-World.active_texture_index -> active_texture_index: int Index of active texture slot
-World.ambient_color -> ambient_color: float
-World.animation_data -> animation_data: pointer, (read-only) Animation data for this datablock
-World.exposure -> exposure: float Amount of exponential color correction for light
-World.horizon_color -> horizon_color: float Color at the horizon
-World.lighting -> lighting: pointer, (read-only) World lighting settings
-World.mist -> mist: pointer, (read-only) World mist settings
-World.range -> range: float The color range that will be mapped to 0-1
-World.stars -> stars: pointer, (read-only) World stars settings
-World.texture_slots -> texture_slots: collection, (read-only) Texture slots defining the mapping and influence of textures
-World.zenith_color -> zenith_color: float Color at the zenith
-WorldLighting.adapt_to_speed -> adapt_to_speed: float Use the speed vector pass to reduce AO samples in fast moving pixels. Higher values result in more aggressive sample reduction. Requires Vec pass enabled (for Raytrace Adaptive QMC)
-WorldLighting.ao_blend_mode -> ao_blend_type: enum Defines how AO mixes with material shading
-WorldLighting.ao_factor -> ao_factor: float Factor for ambient occlusion blending
-WorldLighting.bias -> bias: float Bias (in radians) to prevent smoothed faces from showing banding (for Raytrace Constant Jittered)
-WorldLighting.correction -> correction: float Ad-hoc correction for over-occlusion due to the approximation (for Approximate)
-WorldLighting.distance -> distance: float Length of rays, defines how far away other faces give occlusion effect
-WorldLighting.environment_color -> environment_color: enum Defines where the color of the environment light comes from
-WorldLighting.environment_energy -> environment_energy: float Defines the strength of environment light
-WorldLighting.error_tolerance -> error_tolerance: float Low values are slower and higher quality (for Approximate)
-WorldLighting.falloff_strength -> falloff_strength: float Distance attenuation factor, the higher, the 'shorter' the shadows
-WorldLighting.gather_method -> gather_method: enum
-WorldLighting.indirect_bounces -> indirect_bounces: int Number of indirect diffuse light bounces to use for approximate ambient occlusion
-WorldLighting.indirect_factor -> indirect_factor: float Factor for how much surrounding objects contribute to light
-WorldLighting.passes -> passes: int Number of preprocessing passes to reduce overocclusion (for approximate ambient occlusion)
-WorldLighting.sample_method -> sample_method: enum Method for generating shadow samples (for Raytrace)
-WorldLighting.samples -> samples: int Amount of ray samples. Higher values give smoother results and longer rendering times
-WorldLighting.threshold -> threshold: float Samples below this threshold will be considered fully shadowed/unshadowed and skipped (for Raytrace Adaptive QMC)
-WorldMistSettings.depth -> depth: float The distance over which the mist effect fades in
-WorldMistSettings.falloff -> falloff: enum Type of transition used to fade mist
-WorldMistSettings.height -> height: float Control how much mist density decreases with height
-WorldMistSettings.intensity -> intensity: float Intensity of the mist effect
-WorldMistSettings.start -> start: float Starting distance of the mist, measured from the camera
-WorldStarsSettings.average_separation -> average_separation: float Average distance between any two stars
-WorldStarsSettings.color_randomization -> color_randomization: float Randomize star colors
-WorldStarsSettings.min_distance -> distance_min: float Minimum distance to the camera for stars
-WorldStarsSettings.size -> size: float Average screen dimension of stars
-WorldTextureSlot.blend_factor -> blend_factor: float Amount texture affects color progression of the background
-WorldTextureSlot.horizon_factor -> horizon_factor: float Amount texture affects color of the horizon
-WorldTextureSlot.object -> object: pointer Object to use for mapping with Object texture coordinates
-WorldTextureSlot.texture_coordinates -> texture_coordinates: enum Texture coordinates used to map the texture onto the background
-WorldTextureSlot.zenith_down_factor -> zenith_down_factor: float Amount texture affects color of the zenith below
-WorldTextureSlot.zenith_up_factor -> zenith_up_factor: float Amount texture affects color of the zenith above
+ NOTE * CLASS.FROM -> TO: TYPE "DESCRIPTION"
+#+ * ActionGroup.channels -> channels: collection, "(read-only) F-Curves in this group"
+#+ * ActionGroup.custom_color -> custom_color: int "Index of custom color set"
+#+ * ActionGroup.lock -> lock: boolean "Action Group is locked"
+#+ * ActionGroup.name -> name: string "NO DESCRIPTION"
+#+ * ActionGroup.select -> select: boolean "Action Group is selected"
+#ActionGroup.show_expanded -> show_expanded: boolean "Action Group is expanded"
+#+ * Actuator.name -> name: string "NO DESCRIPTION"
+#Actuator.pin -> pin: boolean "Display when not linked to a visible states controller"
+#Actuator.show_expanded -> show_expanded: boolean "Set actuator expanded in the user interface"
+#+ * Actuator.type -> type: enum "NO DESCRIPTION"
+#+ * Actuator|ActionActuator.action -> action: pointer "NO DESCRIPTION"
+#Actuator|ActionActuator.frame_blend_in -> frame_blend_in: int "Number of frames of motion blending"
+#+ * Actuator|ActionActuator.frame_end -> frame_end: int "NO DESCRIPTION"
+#+ * Actuator|ActionActuator.frame_property -> frame_property: string "Assign the actions current frame number to this property"
+#+ * Actuator|ActionActuator.frame_start -> frame_start: int "NO DESCRIPTION"
+#Actuator|ActionActuator.play_mode -> play_mode: enum "Action playback type"
+#+ * Actuator|ActionActuator.priority -> priority: int "Execution priority - lower numbers will override actions with higher numbers. With 2 or more actions at once, the overriding channels must be lower in the stack"
+#+ * Actuator|ActionActuator.property -> property: string "Use this property to define the Action position"
+#Actuator|ActionActuator.use_continue_last_frame -> use_continue_last_frame: boolean "Restore last frame when switching on/off, otherwise play from the start each time"
+#+ * Actuator|ArmatureActuator.bone -> bone: string "Bone on which the constraint is defined"
+#+ * Actuator|ArmatureActuator.constraint -> constraint: string "Name of the constraint you want to control"
+#+ * Actuator|ArmatureActuator.mode -> mode: enum "NO DESCRIPTION"
+#+ * Actuator|ArmatureActuator.secondary_target -> secondary_target: pointer "Set weight of this constraint"
+#+ * Actuator|ArmatureActuator.target -> target: pointer "Set this object as the target of the constraint"
+#+ * Actuator|ArmatureActuator.weight -> weight: float "Set weight of this constraint"
+#+ * Actuator|CameraActuator.axis -> axis: enum "Specify the axis the Camera will try to get behind"
+#+ * Actuator|CameraActuator.height -> height: float "NO DESCRIPTION"
+#+ * Actuator|CameraActuator.max -> max: float "NO DESCRIPTION"
+#+ * Actuator|CameraActuator.min -> min: float "NO DESCRIPTION"
+#+ * Actuator|CameraActuator.object -> object: pointer "Look at this Object"
+#Actuator|ConstraintActuator.angle_max -> angle_max: float "Maximum angle (in degree) allowed with target direction. No correction is done if angle with target direction is between min and max"
+#Actuator|ConstraintActuator.angle_min -> angle_min: float "Minimum angle (in degree) to maintain with target direction. No correction is done if angle with target direction is between min and max"
+#+ * Actuator|ConstraintActuator.damping -> damping: int "Damping factor: time constant (in frame) of low pass filter"
+#+ * Actuator|ConstraintActuator.damping_rotation -> damping_rotation: int "Use a different damping for orientation"
+#+ * Actuator|ConstraintActuator.direction -> direction: enum "Set the direction of the ray"
+#+ * Actuator|ConstraintActuator.direction_axis -> direction_axis: enum "Select the axis to be aligned along the reference direction"
+#+ * Actuator|ConstraintActuator.distance -> distance: float "Set the maximum length of ray"
+#+ * Actuator|ConstraintActuator.fh_damping -> fh_damping: float "Damping factor of the Fh spring force"
+#+ * Actuator|ConstraintActuator.fh_height -> fh_height: float "Height of the Fh area"
+#+ * Actuator|ConstraintActuator.limit -> limit: enum "NO DESCRIPTION"
+#+ * Actuator|ConstraintActuator.limit_max -> limit_max: float "NO DESCRIPTION"
+#+ * Actuator|ConstraintActuator.limit_min -> limit_min: float "NO DESCRIPTION"
+#+ * Actuator|ConstraintActuator.material -> material: string "Ray detects only Objects with this material"
+#+ * Actuator|ConstraintActuator.mode -> mode: enum "The type of the constraint"
+#+ * Actuator|ConstraintActuator.property -> property: string "Ray detect only Objects with this property"
+#+ * Actuator|ConstraintActuator.range -> range: float "Set the maximum length of ray"
+#Actuator|ConstraintActuator.rotation_max -> rotation_max: float[3] "Reference Direction"
+#+ * Actuator|ConstraintActuator.spring -> spring: float "Spring force within the Fh area"
+#+ * Actuator|ConstraintActuator.time -> time: int "Maximum activation time in frame, 0 for unlimited"
+#Actuator|ConstraintActuator.use_fh_normal -> use_fh_normal: boolean "Add a horizontal spring force on slopes"
+#Actuator|ConstraintActuator.use_fh_paralel_axis -> use_fh_paralel_axis: boolean "Keep object axis parallel to normal"
+#Actuator|ConstraintActuator.use_force_distance -> use_force_distance: boolean "Force distance of object to point of impact of ray"
+#Actuator|ConstraintActuator.use_local -> use_local: boolean "Set ray along objects axis or global axis"
+#Actuator|ConstraintActuator.use_material_detect -> use_material_detect: boolean "Detect material instead of property"
+#Actuator|ConstraintActuator.use_normal -> use_normal: boolean "Set object axis along (local axis) or parallel (global axis) to the normal at hit position"
+#Actuator|ConstraintActuator.use_persistent -> use_persistent: boolean "Persistent actuator: stays active even if ray does not reach target"
+#+ * Actuator|EditObjectActuator.angular_velocity -> angular_velocity: float[3] "Angular velocity upon creation"
+#+ * Actuator|EditObjectActuator.dynamic_operation -> dynamic_operation: enum "NO DESCRIPTION"
+#+ * Actuator|EditObjectActuator.linear_velocity -> linear_velocity: float[3] "Velocity upon creation"
+#+ * Actuator|EditObjectActuator.mass -> mass: float "The mass of the object"
+#+ * Actuator|EditObjectActuator.mesh -> mesh: pointer "Replace the existing, when left blank Phys will remake the existing physics mesh"
+#+ * Actuator|EditObjectActuator.mode -> mode: enum "The mode of the actuator"
+#+ * Actuator|EditObjectActuator.object -> object: pointer "Add this Object and all its children (cant be on an visible layer)"
+#+ * Actuator|EditObjectActuator.time -> time: int "Duration the new Object lives or the track takes"
+#+ * Actuator|EditObjectActuator.track_object -> track_object: pointer "Track to this Object"
+#Actuator|EditObjectActuator.use_3d_tracking -> use_3d_tracking: boolean "Enable 3D tracking"
+#Actuator|EditObjectActuator.use_local_angular_velocity -> use_local_angular_velocity: boolean "Apply the rotation locally"
+#Actuator|EditObjectActuator.use_local_linear_velocity -> use_local_linear_velocity: boolean "Apply the transformation locally"
+#Actuator|EditObjectActuator.use_replace_display_mesh -> use_replace_display_mesh: boolean "Replace the display mesh"
+#Actuator|EditObjectActuator.use_replace_physics_mesh -> use_replace_physics_mesh: boolean "Replace the physics mesh (triangle bounds only - compound shapes not supported)"
+#Actuator|FCurveActuator.apply_to_children -> apply_to_children: boolean "Update F-Curve on all children Objects as well"
+#Actuator|FCurveActuator.frame_end -> frame_end: int "NO DESCRIPTION"
+#Actuator|FCurveActuator.frame_property -> frame_property: string "Assign the actions current frame number to this property"
+#Actuator|FCurveActuator.frame_start -> frame_start: int "NO DESCRIPTION"
+#Actuator|FCurveActuator.play_type -> play_type: enum "Specify the way you want to play the animation"
+#Actuator|FCurveActuator.property -> property: string "Use this property to define the F-Curve position"
+#Actuator|FCurveActuator.use_additive -> use_additive: boolean "F-Curve is added to the current loc/rot/scale in global or local coordinate according to Local flag"
+#Actuator|FCurveActuator.use_force -> use_force: boolean "Apply F-Curve as a global or local force depending on the local option (dynamic objects only)"
+#Actuator|FCurveActuator.use_local -> use_local: boolean "Let the F-Curve act in local coordinates, used in Force and Add mode"
+#+ * Actuator|Filter2DActuator.filter_pass -> filter_pass: int "Set filter order"
+#+ * Actuator|Filter2DActuator.glsl_shader -> glsl_shader: pointer "NO DESCRIPTION"
+#+ * Actuator|Filter2DActuator.mode -> mode: enum "NO DESCRIPTION"
+#+ * Actuator|Filter2DActuator.motion_blur_factor -> motion_blur_factor: float "Set motion blur factor"
+#Actuator|Filter2DActuator.use_motion_blur -> use_motion_blur: boolean "Enable/Disable Motion Blur"
+#+ * Actuator|GameActuator.filename -> filename: string "Load this blend file, use the // prefix for a path relative to the current blend file"
+#+ * Actuator|GameActuator.mode -> mode: enum "NO DESCRIPTION"
+#+ * Actuator|MessageActuator.body_message -> body_message: string "Optional message body Text"
+#+ * Actuator|MessageActuator.body_property -> body_property: string "The message body will be set by the Property Value"
+#+ * Actuator|MessageActuator.body_type -> body_type: enum "Toggle message type: either Text or a PropertyName"
+#+ * Actuator|MessageActuator.subject -> subject: string "Optional message subject. This is what can be filtered on"
+#+ * Actuator|MessageActuator.to_property -> to_property: string "Optional send message to objects with this name only, or empty to broadcast"
+#+ * Actuator|ObjectActuator.angular_velocity -> angular_velocity: float[3] "Sets the angular velocity"
+#+ * Actuator|ObjectActuator.damping -> damping: int "Number of frames to reach the target velocity"
+#+ * Actuator|ObjectActuator.derivate_coefficient -> derivate_coefficient: float "Not required, high values can cause instability"
+#+ * Actuator|ObjectActuator.force -> force: float[3] "Sets the force"
+#+ * Actuator|ObjectActuator.force_max_x -> force_max_x: float "Set the upper limit for force"
+#+ * Actuator|ObjectActuator.force_max_y -> force_max_y: float "Set the upper limit for force"
+#+ * Actuator|ObjectActuator.force_max_z -> force_max_z: float "Set the upper limit for force"
+#+ * Actuator|ObjectActuator.force_min_x -> force_min_x: float "Set the lower limit for force"
+#+ * Actuator|ObjectActuator.force_min_y -> force_min_y: float "Set the lower limit for force"
+#+ * Actuator|ObjectActuator.force_min_z -> force_min_z: float "Set the lower limit for force"
+#+ * Actuator|ObjectActuator.integral_coefficient -> integral_coefficient: float "Low value (0.01) for slow response, high value (0.5) for fast response"
+#+ * Actuator|ObjectActuator.linear_velocity -> linear_velocity: float[3] "Sets the linear velocity (in Servo mode it sets the target relative linear velocity, it will be achieved by automatic application of force. Null velocity is a valid target)"
+#+ * Actuator|ObjectActuator.mode -> mode: enum "Specify the motion system"
+#Actuator|ObjectActuator.offset_location -> offset_location: float[3] "Sets the location"
+#Actuator|ObjectActuator.offset_rotation -> offset_rotation: float[3] "Sets the rotation"
+#+ * Actuator|ObjectActuator.proportional_coefficient -> proportional_coefficient: float "Typical value is 60x integral coefficient"
+#+ * Actuator|ObjectActuator.reference_object -> reference_object: pointer "Reference object for velocity calculation, leave empty for world reference"
+#+ * Actuator|ObjectActuator.torque -> torque: float[3] "Sets the torque"
+#Actuator|ObjectActuator.use_add_linear_velocity -> use_add_linear_velocity: boolean "Toggles between ADD and SET linV"
+#Actuator|ObjectActuator.use_local_angular_velocity -> use_local_angular_velocity: boolean "Angular velocity is defined in local coordinates"
+#Actuator|ObjectActuator.use_local_force -> use_local_force: boolean "Force is defined in local coordinates"
+#Actuator|ObjectActuator.use_local_linear_velocity -> use_local_linear_velocity: boolean "Velocity is defined in local coordinates"
+#Actuator|ObjectActuator.use_local_location -> use_local_location: boolean "Location is defined in local coordinates"
+#Actuator|ObjectActuator.use_local_rotation -> use_local_rotation: boolean "Rotation is defined in local coordinates"
+#Actuator|ObjectActuator.use_local_torque -> use_local_torque: boolean "Torque is defined in local coordinates"
+#Actuator|ObjectActuator.use_servo_limit_x -> use_servo_limit_x: boolean "Set limit to force along the X axis"
+#Actuator|ObjectActuator.use_servo_limit_y -> use_servo_limit_y: boolean "Set limit to force along the Y axis"
+#Actuator|ObjectActuator.use_servo_limit_z -> use_servo_limit_z: boolean "Set limit to force along the Z axis"
+#+ * Actuator|ParentActuator.mode -> mode: enum "NO DESCRIPTION"
+#+ * Actuator|ParentActuator.object -> object: pointer "Set this object as parent"
+#Actuator|ParentActuator.use_compound -> use_compound: boolean "Add this object shape to the parent shape (only if the parent shape is already compound)"
+#Actuator|ParentActuator.use_ghost -> use_ghost: boolean "Make this object ghost while parented (only if not compound)"
+#+ * Actuator|PropertyActuator.mode -> mode: enum "NO DESCRIPTION"
+#+ * Actuator|PropertyActuator.object -> object: pointer "Copy from this Object"
+#+ * Actuator|PropertyActuator.object_property -> object_property: string "Copy this property"
+#+ * Actuator|PropertyActuator.property -> property: string "The name of the property"
+#+ * Actuator|PropertyActuator.value -> value: string "The value to use, use around strings"
+#+ * Actuator|RandomActuator.chance -> chance: float "Pick a number between 0 and 1. Success if you stay below this value"
+#+ * Actuator|RandomActuator.distribution -> distribution: enum "Choose the type of distribution"
+#+ * Actuator|RandomActuator.float_max -> float_max: float "Choose a number from a range. Upper boundary of the range"
+#+ * Actuator|RandomActuator.float_mean -> float_mean: float "A normal distribution. Mean of the distribution"
+#+ * Actuator|RandomActuator.float_min -> float_min: float "Choose a number from a range. Lower boundary of the range"
+#+ * Actuator|RandomActuator.float_value -> float_value: float "Always return this number"
+#+ * Actuator|RandomActuator.half_life_time -> half_life_time: float "Negative exponential dropoff"
+#+ * Actuator|RandomActuator.int_max -> int_max: int "Choose a number from a range. Upper boundary of the range"
+#+ * Actuator|RandomActuator.int_mean -> int_mean: float "Expected mean value of the distribution"
+#+ * Actuator|RandomActuator.int_min -> int_min: int "Choose a number from a range. Lower boundary of the range"
+#+ * Actuator|RandomActuator.int_value -> int_value: int "Always return this number"
+#+ * Actuator|RandomActuator.property -> property: string "Assign the random value to this property"
+#+ * Actuator|RandomActuator.seed -> seed: int "Initial seed of the random generator. Use Python for more freedom (choose 0 for not random)"
+#+ * Actuator|RandomActuator.standard_derivation -> standard_derivation: float "A normal distribution. Standard deviation of the distribution"
+#Actuator|RandomActuator.use_always_true -> use_always_true: boolean "Always false or always true"
+#+ * Actuator|SceneActuator.camera -> camera: pointer "Set this Camera. Leave empty to refer to self object"
+#+ * Actuator|SceneActuator.mode -> mode: enum "NO DESCRIPTION"
+#+ * Actuator|SceneActuator.scene -> scene: pointer "Set the Scene to be added/removed/paused/resumed"
+#+ * Actuator|ShapeActionActuator.action -> action: pointer "NO DESCRIPTION"
+#Actuator|ShapeActionActuator.frame_blend_in -> frame_blend_in: int "Number of frames of motion blending"
+#+ * Actuator|ShapeActionActuator.frame_end -> frame_end: int "NO DESCRIPTION"
+#+ * Actuator|ShapeActionActuator.frame_property -> frame_property: string "Assign the actions current frame number to this property"
+#+ * Actuator|ShapeActionActuator.frame_start -> frame_start: int "NO DESCRIPTION"
+#+ * Actuator|ShapeActionActuator.mode -> mode: enum "Action playback type"
+#+ * Actuator|ShapeActionActuator.priority -> priority: int "Execution priority - lower numbers will override actions with higher numbers. With 2 or more actions at once, the overriding channels must be lower in the stack"
+#+ * Actuator|ShapeActionActuator.property -> property: string "Use this property to define the Action position"
+#Actuator|ShapeActionActuator.use_continue_last_frame -> use_continue_last_frame: boolean "Restore last frame when switching on/off, otherwise play from the start each time"
+#+ * Actuator|SoundActuator.cone_inner_angle_3d -> cone_inner_angle_3d: float "The angle of the inner cone"
+#+ * Actuator|SoundActuator.cone_outer_angle_3d -> cone_outer_angle_3d: float "The angle of the outer cone"
+#+ * Actuator|SoundActuator.cone_outer_gain_3d -> cone_outer_gain_3d: float "The gain outside the outer cone. The gain in the outer cone will be interpolated between this value and the normal gain in the inner cone"
+#Actuator|SoundActuator.distance_3d_max -> distance_3d_max: float "The maximum distance at which you can hear the sound"
+#Actuator|SoundActuator.distance_3d_reference -> distance_3d_reference: float "The distance where the sound has a gain of 1.0"
+#Actuator|SoundActuator.gain_3d_max -> gain_3d_max: float "The maximum gain of the sound, no matter how near it is"
+#Actuator|SoundActuator.gain_3d_min -> gain_3d_min: float "The minimum gain of the sound, no matter how far it is away"
+#+ * Actuator|SoundActuator.mode -> mode: enum "NO DESCRIPTION"
+#+ * Actuator|SoundActuator.pitch -> pitch: float "Sets the pitch of the sound"
+#+ * Actuator|SoundActuator.rolloff_factor_3d -> rolloff_factor_3d: float "The influence factor on volume depending on distance"
+#+ * Actuator|SoundActuator.sound -> sound: pointer "NO DESCRIPTION"
+#Actuator|SoundActuator.use_sound_3d -> use_sound_3d: boolean "Enable/Disable 3D Sound"
+#+ * Actuator|SoundActuator.volume -> volume: float "Sets the initial volume of the sound"
+#+ * Actuator|StateActuator.operation -> operation: enum "Select the bit operation on object state mask"
+#Actuator|StateActuator.states -> states: boolean[30] "NO DESCRIPTION"
+#Actuator|VisibilityActuator.apply_to_children -> apply_to_children: boolean "Set all the children of this object to the same visibility/occlusion recursively"
+#Actuator|VisibilityActuator.use_occlusion -> use_occlusion: boolean "Set the object to occlude objects behind it. Initialized from the object type in physics button"
+#Actuator|VisibilityActuator.use_visible -> use_visible: boolean "Set the objects visible. Initialized from the objects render restriction toggle (access in the outliner)"
+#+ * Addon.module -> module: string "Module name"
+#+ * AnimData.action -> action: pointer "Active Action for this datablock"
+#AnimData.action_blend_type -> action_blend_type: enum "Method used for combining Active Actions result with result of NLA stack"
+#+ * AnimData.action_extrapolation -> action_extrapolation: enum "Action to take for gaps past the Active Actions range (when evaluating with NLA)"
+#+ * AnimData.action_influence -> action_influence: float "Amount the Active Action contributes to the result of the NLA stack"
+#+ * AnimData.drivers -> drivers: collection, "(read-only) The Drivers/Expressions for this datablock"
+#+ * AnimData.nla_tracks -> nla_tracks: collection, "(read-only) NLA Tracks (i.e. Animation Layers)"
+#AnimData.use_nla -> use_nla: boolean "NLA stack is evaluated when evaluating this block"
+#AnimViz.motion_path -> motion_path: pointer, "(read-only) Motion Path settings for visualisation"
+#AnimViz.onion_skin_frames -> onion_skin_frames: pointer, "(read-only) Onion Skinning (ghosting) settings for visualisation"
+#+ * AnimVizMotionPaths.bake_location -> bake_location: enum "When calculating Bone Paths, use Head or Tips"
+#AnimVizMotionPaths.frame_after -> frame_after: int "Number of frames to show after the current frame (only for Around Current Frame Onion-skinning method)"
+#AnimVizMotionPaths.frame_before -> frame_before: int "Number of frames to show before the current frame (only for Around Current Frame Onion-skinning method)"
+#+ * AnimVizMotionPaths.frame_end -> frame_end: int "End frame of range of paths to display/calculate (not for Around Current Frame Onion-skinning method)"
+#+ * AnimVizMotionPaths.frame_start -> frame_start: int "Starting frame of range of paths to display/calculate (not for Around Current Frame Onion-skinning method)"
+#+ * AnimVizMotionPaths.frame_step -> frame_step: int "Number of frames between paths shown (not for On Keyframes Onion-skinning method)"
+#+ * AnimVizMotionPaths.show_frame_numbers -> show_frame_numbers: boolean "Show frame numbers on Motion Paths"
+#AnimVizMotionPaths.show_keyframe_action_all -> show_keyframe_action_all: boolean "For bone motion paths, search whole Action for keyframes instead of in group with matching name only (is slower)"
+#AnimVizMotionPaths.show_keyframe_highlight -> show_keyframe_highlight: boolean "Emphasize position of keyframes on Motion Paths"
+#+ * AnimVizMotionPaths.show_keyframe_numbers -> show_keyframe_numbers: boolean "Show frame numbers of Keyframes on Motion Paths"
+#+ * AnimVizMotionPaths.type -> type: enum "Type of range to show for Motion Paths"
+#AnimVizOnionSkinning.frame_after -> frame_after: int "Number of frames to show after the current frame (only for Around Current Frame Onion-skinning method)"
+#AnimVizOnionSkinning.frame_before -> frame_before: int "Number of frames to show before the current frame (only for Around Current Frame Onion-skinning method)"
+#+ * AnimVizOnionSkinning.frame_end -> frame_end: int "End frame of range of Ghosts to display (not for Around Current Frame Onion-skinning method)"
+#+ * AnimVizOnionSkinning.frame_start -> frame_start: int "Starting frame of range of Ghosts to display (not for Around Current Frame Onion-skinning method)"
+#+ * AnimVizOnionSkinning.frame_step -> frame_step: int "Number of frames between ghosts shown (not for On Keyframes Onion-skinning method)"
+#AnimVizOnionSkinning.show_only_selected -> show_only_selected: boolean "For Pose-Mode drawing, only draw ghosts for selected bones"
+#+ * AnimVizOnionSkinning.type -> type: enum "Method used for determining what ghosts get drawn"
+#MAKE PROPERTY OF A COLLECTION * Area.active_space -> active_space: pointer, "(read-only) Space currently being displayed in this area"
+#+ * Area.regions -> regions: collection, "(read-only) Regions this area is subdivided in"
+#+ * Area.show_menus -> show_menus: boolean "Show menus in the header"
+#+ * Area.spaces -> spaces: collection, "(read-only) Spaces contained in this area, the first space is active"
+#+ * Area.type -> type: enum "Space type"
+#+ * ArmatureBones.active -> active: pointer "Armatures active bone"
+#+ * ArmatureEditBones.active -> active: pointer "Armatures active edit bone"
+#+ * BackgroundImage.image -> image: pointer "Image displayed and edited in this space"
+#+ * BackgroundImage.image_user -> image_user: pointer, "(read-only) Parameters defining which layer, pass and frame of the image is displayed"
+#+ * BackgroundImage.offset_x -> offset_x: float "Offsets image horizontally from the world origin"
+#+ * BackgroundImage.offset_y -> offset_y: float "Offsets image vertically from the world origin"
+#+ * BackgroundImage.show_expanded -> show_expanded: boolean "Show the expanded in the user interface"
+#+ * BackgroundImage.size -> size: float "Scaling factor for the background image"
+#+ * BackgroundImage.transparency -> transparency: float "Amount to blend the image against the background color"
+#+ * BackgroundImage.view_axis -> view_axis: enum "The axis to display the image on"
+#+ * BezierSplinePoint.co -> co: float[3] "Coordinates of the control point"
+#BezierSplinePoint.handle_left -> handle_left: float[3] "Coordinates of the first handle"
+#BezierSplinePoint.handle_left_type -> handle_left_type: enum "Handle types"
+#BezierSplinePoint.handle_right -> handle_right: float[3] "Coordinates of the second handle"
+#BezierSplinePoint.handle_right_type -> handle_right_type: enum "Handle types"
+#+ * BezierSplinePoint.hide -> hide: boolean "Visibility status"
+#+ * BezierSplinePoint.radius -> radius: float, "(read-only) Radius for bevelling"
+#+ * BezierSplinePoint.select_control_point -> select_control_point: boolean "Control point selection status"
+#+ * BezierSplinePoint.select_left_handle -> select_left_handle: boolean "Handle 1 selection status"
+#+ * BezierSplinePoint.select_right_handle -> select_right_handle: boolean "Handle 2 selection status"
+#+ * BezierSplinePoint.tilt -> tilt: float "Tilt in 3D View"
+#+ * BezierSplinePoint.weight -> weight: float "Softbody goal weight"
+#+ * BlenderRNA.structs -> structs: collection, "(read-only)"
+#+ * BoidRule.name -> name: string "Boid rule name"
+#+ * BoidRule.type -> type: enum, "(read-only)"
+#BoidRule.use_in_air -> use_in_air: boolean "Use rule when boid is flying"
+#BoidRule.use_on_land -> use_on_land: boolean "Use rule when boid is on land"
+#+ * BoidRule|BoidRuleAverageSpeed.level -> level: float "How much velocitys z-component is kept constant"
+#+ * BoidRule|BoidRuleAverageSpeed.speed -> speed: float "Percentage of maximum speed"
+#+ * BoidRule|BoidRuleAverageSpeed.wander -> wander: float "How fast velocitys direction is randomized"
+#+ * BoidRule|BoidRuleAvoid.fear_factor -> fear_factor: float "Avoid object if danger from it is above this threshold"
+#+ * BoidRule|BoidRuleAvoid.object -> object: pointer "Object to avoid"
+#BoidRule|BoidRuleAvoid.use_predict -> use_predict: boolean "Predict target movement"
+#+ * BoidRule|BoidRuleAvoidCollision.look_ahead -> look_ahead: float "Time to look ahead in seconds"
+#BoidRule|BoidRuleAvoidCollision.use_avoid -> use_avoid: boolean "Avoid collision with other boids"
+#BoidRule|BoidRuleAvoidCollision.use_avoid_collision -> use_avoid_collision: boolean "Avoid collision with deflector objects"
+#+ * BoidRule|BoidRuleFight.distance -> distance: float "Attack boids at max this distance"
+#+ * BoidRule|BoidRuleFight.flee_distance -> flee_distance: float "Flee to this distance"
+#+ * BoidRule|BoidRuleFollowLeader.distance -> distance: float "Distance behind leader to follow"
+#+ * BoidRule|BoidRuleFollowLeader.object -> object: pointer "Follow this object instead of a boid"
+#BoidRule|BoidRuleFollowLeader.queue_count -> queue_count: int "How many boids in a line"
+#BoidRule|BoidRuleFollowLeader.use_line -> use_line: boolean "Follow leader in a line"
+#+ * BoidRule|BoidRuleGoal.object -> object: pointer "Goal object"
+#BoidRule|BoidRuleGoal.use_predict -> use_predict: boolean "Predict target movement"
+#+ * BoidSettings.accuracy -> accuracy: float "Accuracy of attack"
+#+ * BoidSettings.active_boid_state -> active_boid_state: pointer, "(read-only)"
+#+ * BoidSettings.active_boid_state_index -> active_boid_state_index: int "NO DESCRIPTION"
+#+ * BoidSettings.aggression -> aggression: float "Boid will fight this times stronger enemy"
+#BoidSettings.air_acc_max -> air_acc_max: float "Maximum acceleration in air (relative to maximum speed)"
+#BoidSettings.air_ave_max -> air_ave_max: float "Maximum angular velocity in air (relative to 180 degrees)"
+#+ * BoidSettings.air_personal_space -> air_personal_space: float "Radius of boids personal space in air (% of particle size)"
+#BoidSettings.air_speed_max -> air_speed_max: float "Maximum speed in air"
+#BoidSettings.air_speed_min -> air_speed_min: float "Minimum speed in air (relative to maximum speed)"
+#BoidSettings.bank -> bank: float "Amount of rotation around velocity vector on turns"
+#+ * BoidSettings.health -> health: float "Initial boid health when born"
+#+ * BoidSettings.height -> height: float "Boid height relative to particle size"
+#BoidSettings.land_acc_max -> land_acc_max: float "Maximum acceleration on land (relative to maximum speed)"
+#BoidSettings.land_ave_max -> land_ave_max: float "Maximum angular velocity on land (relative to 180 degrees)"
+#+ * BoidSettings.land_jump_speed -> land_jump_speed: float "Maximum speed for jumping"
+#+ * BoidSettings.land_personal_space -> land_personal_space: float "Radius of boids personal space on land (% of particle size)"
+#BoidSettings.land_smooth -> land_smooth: float "How smoothly the boids land"
+#BoidSettings.land_speed_max -> land_speed_max: float "Maximum speed on land"
+#+ * BoidSettings.land_stick_force -> land_stick_force: float "How strong a force must be to start effecting a boid on land"
+#+ * BoidSettings.range -> range: float "The maximum distance from which a boid can attack"
+#+ * BoidSettings.states -> states: collection, "(read-only)"
+#+ * BoidSettings.strength -> strength: float "Maximum caused damage on attack per second"
+#BoidSettings.use_climb -> use_climb: boolean "Allow boids to climb goal objects"
+#BoidSettings.use_flight -> use_flight: boolean "Allow boids to move in air"
+#BoidSettings.use_land -> use_land: boolean "Allow boids to move on land"
+#+ * BoidState.active_boid_rule -> active_boid_rule: pointer, "(read-only)"
+#+ * BoidState.active_boid_rule_index -> active_boid_rule_index: int "NO DESCRIPTION"
+#+ * BoidState.falloff -> falloff: float "NO DESCRIPTION"
+#+ * BoidState.name -> name: string "Boid state name"
+#BoidState.rule_fuzzy -> rule_fuzzy: float "NO DESCRIPTION"
+#+ * BoidState.rules -> rules: collection, "(read-only)"
+#+ * BoidState.ruleset_type -> ruleset_type: enum "How the rules in the list are evaluated"
+#+ * BoidState.volume -> volume: float "NO DESCRIPTION"
+#+ * Bone.bbone_in -> bbone_in: float "Length of first Bezier Handle (for B-Bones only)"
+#+ * Bone.bbone_out -> bbone_out: float "Length of second Bezier Handle (for B-Bones only)"
+#+ * Bone.bbone_segments -> bbone_segments: int "Number of subdivisions of bone (for B-Bones only)"
+#+ * Bone.children -> children: collection, "(read-only) Bones which are children of this bone"
+#+ * Bone.envelope_distance -> envelope_distance: float "Bone deformation distance (for Envelope deform only)"
+#+ * Bone.envelope_weight -> envelope_weight: float "Bone deformation weight (for Envelope deform only)"
+#+ * Bone.head -> head: float[3] "Location of head end of the bone relative to its parent"
+#+ * Bone.head_local -> head_local: float[3] "Location of head end of the bone relative to armature"
+#+ * Bone.head_radius -> head_radius: float "Radius of head of bone (for Envelope deform only)"
+#+ * Bone.hide -> hide: boolean "Bone is not visible when it is not in Edit Mode (i.e. in Object or Pose Modes)"
+#+ * Bone.hide_select -> hide_select: boolean "Bone is able to be selected"
+#Bone.layers -> layers: boolean[32] "Layers bone exists in"
+#+ * Bone.matrix -> matrix: float[9] "3x3 bone matrix"
+#+ * Bone.matrix_local -> matrix_local: float[16] "4x4 bone matrix relative to armature"
+#+ * Bone.name -> name: string "NO DESCRIPTION"
+#+ * Bone.parent -> parent: pointer, "(read-only) Parent bone (in same Armature)"
+#+ * Bone.select -> select: boolean "NO DESCRIPTION"
+#Bone.show_wire -> show_wire: boolean "Bone is always drawn as Wireframe regardless of viewport draw mode. Useful for non-obstructive custom bone shapes"
+#+ * Bone.tail -> tail: float[3] "Location of tail end of the bone"
+#+ * Bone.tail_local -> tail_local: float[3] "Location of tail end of the bone relative to armature"
+#+ * Bone.tail_radius -> tail_radius: float "Radius of tail of bone (for Envelope deform only)"
+#Bone.use_connect -> use_connect: boolean, "(read-only) When bone has a parent, bones head is struck to the parents tail"
+#Bone.use_cyclic_offset -> use_cyclic_offset: boolean "When bone doesnt have a parent, it receives cyclic offset effects"
+#Bone.use_deform -> use_deform: boolean "Bone does not deform any geometry"
+#Bone.use_envelope_multiply -> use_envelope_multiply: boolean "When deforming bone, multiply effects of Vertex Group weights with Envelope influence"
+#Bone.use_hinge -> use_hinge: boolean "Bone inherits rotation or scale from parent bone"
+#Bone.use_inherit_scale -> use_inherit_scale: boolean "Bone inherits scaling from parent bone"
+#Bone.use_local_location -> use_local_location: boolean "Bone location is set in local space"
+#+ * BoneGroup.color_set -> color_set: enum "Custom color set to use"
+#+ * BoneGroup.colors -> colors: pointer, "(read-only) Copy of the colors associated with the groups color set"
+#+ * BoneGroup.name -> name: string "NO DESCRIPTION"
+#BoneGroups.active -> active: pointer "Active bone group for this pose"
+#+ * ClothCollisionSettings.collision_quality -> collision_quality: int "How many collision iterations should be done. (higher is better quality but slower)"
+#ClothCollisionSettings.distance_min -> distance_min: float "Minimum distance between collision objects before collision response takes in"
+#+ * ClothCollisionSettings.friction -> friction: float "Friction force if a collision happened. (higher = less movement)"
+#+ * ClothCollisionSettings.group -> group: pointer "Limit colliders to this Group"
+#+ * ClothCollisionSettings.self_collision_quality -> self_collision_quality: int "How many self collision iterations should be done. (higher is better quality but slower)"
+#ClothCollisionSettings.self_distance_min -> self_distance_min: float "0.5 means no distance at all, 1.0 is maximum distance"
+#+ * ClothCollisionSettings.self_friction -> self_friction: float "Friction/damping with self contact"
+#ClothCollisionSettings.use_collision -> use_collision: boolean "Enable collisions with other objects"
+#ClothCollisionSettings.use_self_collision -> use_self_collision: boolean "Enable self collisions"
+#+ * ClothSettings.air_damping -> air_damping: float "Air has normally some thickness which slows falling things down"
+#+ * ClothSettings.bending_stiffness -> bending_stiffness: float "Wrinkle coefficient. (higher = less smaller but more big wrinkles)"
+#+ * ClothSettings.bending_stiffness_max -> bending_stiffness_max: float "Maximum bending stiffness value"
+#+ * ClothSettings.bending_vertex_group -> bending_vertex_group: string "Vertex group for fine control over bending stiffness"
+#+ * ClothSettings.collider_friction -> collider_friction: float "NO DESCRIPTION"
+#+ * ClothSettings.effector_weights -> effector_weights: pointer, "(read-only)"
+#+ * ClothSettings.goal_default -> goal_default: float "Default Goal (vertex target position) value, when no Vertex Group used"
+#+ * ClothSettings.goal_friction -> goal_friction: float "Goal (vertex target position) friction"
+#+ * ClothSettings.goal_max -> goal_max: float "Goal maximum, vertex group weights are scaled to match this range"
+#+ * ClothSettings.goal_min -> goal_min: float "Goal minimum, vertex group weights are scaled to match this range"
+#+ * ClothSettings.goal_spring -> goal_spring: float "Goal (vertex target position) spring stiffness"
+#+ * ClothSettings.gravity -> gravity: float[3] "Gravity or external force vector"
+#+ * ClothSettings.internal_friction -> internal_friction: float "NO DESCRIPTION"
+#+ * ClothSettings.mass -> mass: float "Mass of cloth material"
+#+ * ClothSettings.mass_vertex_group -> mass_vertex_group: string "Vertex Group for pinning of vertices"
+#+ * ClothSettings.pin_stiffness -> pin_stiffness: float "Pin (vertex target position) spring stiffness"
+#+ * ClothSettings.pre_roll -> pre_roll: int "Simulation starts on this frame"
+#+ * ClothSettings.quality -> quality: int "Quality of the simulation in steps per frame. (higher is better quality but slower)"
+#+ * ClothSettings.rest_shape_key -> rest_shape_key: pointer "Shape key to use the rest spring lengths from"
+#+ * ClothSettings.spring_damping -> spring_damping: float "Damping of cloth velocity. (higher = more smooth, less jiggling)"
+#+ * ClothSettings.structural_stiffness -> structural_stiffness: float "Overall stiffness of structure"
+#+ * ClothSettings.structural_stiffness_max -> structural_stiffness_max: float "Maximum structural stiffness value"
+#+ * ClothSettings.structural_stiffness_vertex_group -> structural_stiffness_vertex_group: string "Vertex group for fine control over structural stiffness"
+#ClothSettings.use_pin_cloth -> use_pin_cloth: boolean "Enable pinning of cloth vertices to other objects/positions"
+#ClothSettings.use_stiffness_scale -> use_stiffness_scale: boolean "If enabled, stiffness can be scaled along a weight painted vertex group"
+#+ * CollisionSettings.absorption -> absorption: float "How much of effector force gets lost during collision with this object (in percent)"
+#+ * CollisionSettings.damping -> damping: float "Amount of damping during collision"
+#+ * CollisionSettings.damping_factor -> damping_factor: float "Amount of damping during particle collision"
+#CollisionSettings.damping_random -> damping_random: float "Random variation of damping"
+#+ * CollisionSettings.friction_factor -> friction_factor: float "Amount of friction during particle collision"
+#CollisionSettings.friction_random -> friction_random: float "Random variation of friction"
+#+ * CollisionSettings.permeability -> permeability: float "Chance that the particle will pass through the mesh"
+#+ * CollisionSettings.stickness -> stickness: float "Amount of stickness to surface collision"
+#CollisionSettings.thickness_inner -> thickness_inner: float "Inner face thickness"
+#CollisionSettings.thickness_outer -> thickness_outer: float "Outer face thickness"
+#+ * CollisionSettings.use -> use: boolean "Enable this objects as a collider for physics systems"
+#CollisionSettings.use_particle_kill -> use_particle_kill: boolean "Kill collided particles"
+#+ * ColorRamp.elements -> elements: collection, "(read-only)"
+#+ * ColorRamp.interpolation -> interpolation: enum "NO DESCRIPTION"
+#+ * ColorRampElement.color -> color: float[4] "NO DESCRIPTION"
+#+ * ColorRampElement.position -> position: float "NO DESCRIPTION"
+#ConsoleLine.body -> body: string "Text in the line"
+#+ * ConsoleLine.current_character -> current_character: int "NO DESCRIPTION"
+#+ * Constraint.active -> active: boolean "Constraint is the one being edited"
+#Constraint.error_location -> error_location: float, "(read-only) Amount of residual error in Blender space unit for constraints that work on position"
+#Constraint.error_rotation -> error_rotation: float, "(read-only) Amount of residual error in radiant for constraints that work on orientation"
+#+ * Constraint.influence -> influence: float "Amount of influence constraint will have on the final solution"
+#Constraint.is_proxy_local -> is_proxy_local: boolean "Constraint was added in this proxy instance (i.e. did not belong to source Armature)"
+#Constraint.is_valid -> is_valid: boolean, "(read-only) Constraint has invalid settings and will not be evaluated"
+#+ * Constraint.mute -> mute: boolean "Enable/Disable Constraint"
+#+ * Constraint.name -> name: string "Constraint name"
+#+ * Constraint.owner_space -> owner_space: enum "Space that owner is evaluated in"
+#Constraint.show_expanded -> show_expanded: boolean "Constraints panel is expanded in UI"
+#+ * Constraint.target_space -> target_space: enum "Space that target is evaluated in"
+#+ * Constraint.type -> type: enum, "(read-only)"
+#+ * ConstraintTarget.subtarget -> subtarget: string "NO DESCRIPTION"
+#+ * ConstraintTarget.target -> target: pointer "Target Object"
+#+ * Constraint|ActionConstraint.action -> action: pointer "NO DESCRIPTION"
+#+ * Constraint|ActionConstraint.frame_end -> frame_end: int "Last frame of the Action to use"
+#+ * Constraint|ActionConstraint.frame_start -> frame_start: int "First frame of the Action to use"
+#Constraint|ActionConstraint.max -> max: float "Maximum value for target channel range"
+#Constraint|ActionConstraint.min -> min: float "Minimum value for target channel range"
+#+ * Constraint|ActionConstraint.subtarget -> subtarget: string "NO DESCRIPTION"
+#+ * Constraint|ActionConstraint.target -> target: pointer "Target Object"
+#+ * Constraint|ActionConstraint.transform_channel -> transform_channel: enum "Transformation channel from the target that is used to key the Action"
+#+ * Constraint|ChildOfConstraint.subtarget -> subtarget: string "NO DESCRIPTION"
+#+ * Constraint|ChildOfConstraint.target -> target: pointer "Target Object"
+#+ * Constraint|ChildOfConstraint.use_location_x -> use_location_x: boolean "Use X Location of Parent"
+#+ * Constraint|ChildOfConstraint.use_location_y -> use_location_y: boolean "Use Y Location of Parent"
+#+ * Constraint|ChildOfConstraint.use_location_z -> use_location_z: boolean "Use Z Location of Parent"
+#+ * Constraint|ChildOfConstraint.use_rotation_x -> use_rotation_x: boolean "Use X Rotation of Parent"
+#+ * Constraint|ChildOfConstraint.use_rotation_y -> use_rotation_y: boolean "Use Y Rotation of Parent"
+#+ * Constraint|ChildOfConstraint.use_rotation_z -> use_rotation_z: boolean "Use Z Rotation of Parent"
+#+ * Constraint|ChildOfConstraint.use_scale_x -> use_scale_x: boolean "Use X Scale of Parent"
+#+ * Constraint|ChildOfConstraint.use_scale_y -> use_scale_y: boolean "Use Y Scale of Parent"
+#+ * Constraint|ChildOfConstraint.use_scale_z -> use_scale_z: boolean "Use Z Scale of Parent"
+#+ * Constraint|ClampToConstraint.main_axis -> main_axis: enum "Main axis of movement"
+#+ * Constraint|ClampToConstraint.target -> target: pointer "Target Object"
+#Constraint|ClampToConstraint.use_cyclic -> use_cyclic: boolean "Treat curve as cyclic curve (no clamping to curve bounding box"
+#+ * Constraint|CopyLocationConstraint.head_tail -> head_tail: float "Target along length of bone: Head=0, Tail=1"
+#+ * Constraint|CopyLocationConstraint.invert_x -> invert_x: boolean "Invert the X location"
+#+ * Constraint|CopyLocationConstraint.invert_y -> invert_y: boolean "Invert the Y location"
+#+ * Constraint|CopyLocationConstraint.invert_z -> invert_z: boolean "Invert the Z location"
+#+ * Constraint|CopyLocationConstraint.subtarget -> subtarget: string "NO DESCRIPTION"
+#+ * Constraint|CopyLocationConstraint.target -> target: pointer "Target Object"
+#+ * Constraint|CopyLocationConstraint.use_offset -> use_offset: boolean "Add original location into copied location"
+#+ * Constraint|CopyLocationConstraint.use_x -> use_x: boolean "Copy the targets X location"
+#+ * Constraint|CopyLocationConstraint.use_y -> use_y: boolean "Copy the targets Y location"
+#+ * Constraint|CopyLocationConstraint.use_z -> use_z: boolean "Copy the targets Z location"
+#+ * Constraint|CopyRotationConstraint.invert_x -> invert_x: boolean "Invert the X rotation"
+#+ * Constraint|CopyRotationConstraint.invert_y -> invert_y: boolean "Invert the Y rotation"
+#+ * Constraint|CopyRotationConstraint.invert_z -> invert_z: boolean "Invert the Z rotation"
+#+ * Constraint|CopyRotationConstraint.subtarget -> subtarget: string "NO DESCRIPTION"
+#+ * Constraint|CopyRotationConstraint.target -> target: pointer "Target Object"
+#+ * Constraint|CopyRotationConstraint.use_offset -> use_offset: boolean "Add original rotation into copied rotation"
+#+ * Constraint|CopyRotationConstraint.use_x -> use_x: boolean "Copy the targets X rotation"
+#+ * Constraint|CopyRotationConstraint.use_y -> use_y: boolean "Copy the targets Y rotation"
+#+ * Constraint|CopyRotationConstraint.use_z -> use_z: boolean "Copy the targets Z rotation"
+#+ * Constraint|CopyScaleConstraint.subtarget -> subtarget: string "NO DESCRIPTION"
+#+ * Constraint|CopyScaleConstraint.target -> target: pointer "Target Object"
+#+ * Constraint|CopyScaleConstraint.use_offset -> use_offset: boolean "Add original scale into copied scale"
+#+ * Constraint|CopyScaleConstraint.use_x -> use_x: boolean "Copy the targets X scale"
+#+ * Constraint|CopyScaleConstraint.use_y -> use_y: boolean "Copy the targets Y scale"
+#+ * Constraint|CopyScaleConstraint.use_z -> use_z: boolean "Copy the targets Z scale"
+#+ * Constraint|CopyTransformsConstraint.head_tail -> head_tail: float "Target along length of bone: Head=0, Tail=1"
+#+ * Constraint|CopyTransformsConstraint.subtarget -> subtarget: string "NO DESCRIPTION"
+#+ * Constraint|CopyTransformsConstraint.target -> target: pointer "Target Object"
+#+ * Constraint|DampedTrackConstraint.subtarget -> subtarget: string "NO DESCRIPTION"
+#+ * Constraint|DampedTrackConstraint.target -> target: pointer "Target Object"
+#Constraint|DampedTrackConstraint.track_axis -> track_axis: enum "Axis that points to the target object"
+#+ * Constraint|FloorConstraint.floor_location -> floor_location: enum "Location of target that object will not pass through"
+#+ * Constraint|FloorConstraint.offset -> offset: float "Offset of floor from object origin"
+#+ * Constraint|FloorConstraint.subtarget -> subtarget: string "NO DESCRIPTION"
+#+ * Constraint|FloorConstraint.target -> target: pointer "Target Object"
+#+ * Constraint|FloorConstraint.use_rotation -> use_rotation: boolean "Use the targets rotation to determine floor"
+#Constraint|FloorConstraint.use_sticky -> use_sticky: boolean "Immobilize object while constrained"
+#Constraint|FollowPathConstraint.forward_axis -> forward_axis: enum "Axis that points forward along the path"
+#+ * Constraint|FollowPathConstraint.offset -> offset: int "Offset from the position corresponding to the time frame"
+#+ * Constraint|FollowPathConstraint.offset_factor -> offset_factor: float "Percentage value defining target position along length of bone"
+#+ * Constraint|FollowPathConstraint.target -> target: pointer "Target Object"
+#Constraint|FollowPathConstraint.up_axis -> up_axis: enum "Axis that points upward"
+#+ * Constraint|FollowPathConstraint.use_curve_follow -> use_curve_follow: boolean "Object will follow the heading and banking of the curve"
+#+ * Constraint|FollowPathConstraint.use_curve_radius -> use_curve_radius: boolean "Objects scale by the curve radius"
+#Constraint|FollowPathConstraint.use_fixed_location -> use_fixed_location: boolean "Object will stay locked to a single point somewhere along the length of the curve regardless of time"
+#Constraint|KinematicConstraint.chain_count -> chain_count: int "How many bones are included in the IK effect - 0 uses all bones"
+#+ * Constraint|KinematicConstraint.distance -> distance: float "Radius of limiting sphere"
+#+ * Constraint|KinematicConstraint.ik_type -> ik_type: enum "NO DESCRIPTION"
+#+ * Constraint|KinematicConstraint.iterations -> iterations: int "Maximum number of solving iterations"
+#+ * Constraint|KinematicConstraint.limit_mode -> limit_mode: enum "Distances in relation to sphere of influence to allow"
+#Constraint|KinematicConstraint.lock_location_x -> lock_location_x: boolean "Constraint position along X axis"
+#Constraint|KinematicConstraint.lock_location_y -> lock_location_y: boolean "Constraint position along Y axis"
+#Constraint|KinematicConstraint.lock_location_z -> lock_location_z: boolean "Constraint position along Z axis"
+#Constraint|KinematicConstraint.lock_rotation_x -> lock_rotation_x: boolean "Constraint rotation along X axis"
+#Constraint|KinematicConstraint.lock_rotation_y -> lock_rotation_y: boolean "Constraint rotation along Y axis"
+#Constraint|KinematicConstraint.lock_rotation_z -> lock_rotation_z: boolean "Constraint rotation along Z axis"
+#+ * Constraint|KinematicConstraint.orient_weight -> orient_weight: float "For Tree-IK: Weight of orientation control for this target"
+#+ * Constraint|KinematicConstraint.pole_angle -> pole_angle: float "Pole rotation offset"
+#+ * Constraint|KinematicConstraint.pole_subtarget -> pole_subtarget: string "NO DESCRIPTION"
+#+ * Constraint|KinematicConstraint.pole_target -> pole_target: pointer "Object for pole rotation"
+#Constraint|KinematicConstraint.reference_axis -> reference_axis: enum "Constraint axis Lock options relative to Bone or Target reference"
+#+ * Constraint|KinematicConstraint.subtarget -> subtarget: string "NO DESCRIPTION"
+#+ * Constraint|KinematicConstraint.target -> target: pointer "Target Object"
+#Constraint|KinematicConstraint.use_location -> use_location: boolean "Chain follows position of target"
+#+ * Constraint|KinematicConstraint.use_rotation -> use_rotation: boolean "Chain follows rotation of target"
+#+ * Constraint|KinematicConstraint.use_stretch -> use_stretch: boolean "Enable IK Stretching"
+#+ * Constraint|KinematicConstraint.use_tail -> use_tail: boolean "Include bones tail as last element in chain"
+#+ * Constraint|KinematicConstraint.use_target -> use_target: boolean "Disable for targetless IK"
+#+ * Constraint|KinematicConstraint.weight -> weight: float "For Tree-IK: Weight of position control for this target"
+#+ * Constraint|LimitDistanceConstraint.distance -> distance: float "Radius of limiting sphere"
+#+ * Constraint|LimitDistanceConstraint.limit_mode -> limit_mode: enum "Distances in relation to sphere of influence to allow"
+#+ * Constraint|LimitDistanceConstraint.subtarget -> subtarget: string "NO DESCRIPTION"
+#+ * Constraint|LimitDistanceConstraint.target -> target: pointer "Target Object"
+#Constraint|LimitLocationConstraint.max_x -> max_x: float "Highest X value to allow"
+#Constraint|LimitLocationConstraint.max_y -> max_y: float "Highest Y value to allow"
+#Constraint|LimitLocationConstraint.max_z -> max_z: float "Highest Z value to allow"
+#Constraint|LimitLocationConstraint.min_x -> min_x: float "Lowest X value to allow"
+#Constraint|LimitLocationConstraint.min_y -> min_y: float "Lowest Y value to allow"
+#Constraint|LimitLocationConstraint.min_z -> min_z: float "Lowest Z value to allow"
+#Constraint|LimitLocationConstraint.use_max_x -> use_max_x: boolean "Use the maximum X value"
+#Constraint|LimitLocationConstraint.use_max_y -> use_max_y: boolean "Use the maximum Y value"
+#Constraint|LimitLocationConstraint.use_max_z -> use_max_z: boolean "Use the maximum Z value"
+#Constraint|LimitLocationConstraint.use_min_x -> use_min_x: boolean "Use the minimum X value"
+#Constraint|LimitLocationConstraint.use_min_y -> use_min_y: boolean "Use the minimum Y value"
+#Constraint|LimitLocationConstraint.use_min_z -> use_min_z: boolean "Use the minimum Z value"
+#Constraint|LimitLocationConstraint.use_transform_limit -> use_transform_limit: boolean "Transforms are affected by this constraint as well"
+#Constraint|LimitRotationConstraint.max_x -> max_x: float "Highest X value to allow"
+#Constraint|LimitRotationConstraint.max_y -> max_y: float "Highest Y value to allow"
+#Constraint|LimitRotationConstraint.max_z -> max_z: float "Highest Z value to allow"
+#Constraint|LimitRotationConstraint.min_x -> min_x: float "Lowest X value to allow"
+#Constraint|LimitRotationConstraint.min_y -> min_y: float "Lowest Y value to allow"
+#Constraint|LimitRotationConstraint.min_z -> min_z: float "Lowest Z value to allow"
+#+ * Constraint|LimitRotationConstraint.use_limit_x -> use_limit_x: boolean "Use the minimum X value"
+#+ * Constraint|LimitRotationConstraint.use_limit_y -> use_limit_y: boolean "Use the minimum Y value"
+#+ * Constraint|LimitRotationConstraint.use_limit_z -> use_limit_z: boolean "Use the minimum Z value"
+#Constraint|LimitRotationConstraint.use_transform_limit -> use_transform_limit: boolean "Transforms are affected by this constraint as well"
+#Constraint|LimitScaleConstraint.max_x -> max_x: float "Highest X value to allow"
+#Constraint|LimitScaleConstraint.max_y -> max_y: float "Highest Y value to allow"
+#Constraint|LimitScaleConstraint.max_z -> max_z: float "Highest Z value to allow"
+#Constraint|LimitScaleConstraint.min_x -> min_x: float "Lowest X value to allow"
+#Constraint|LimitScaleConstraint.min_y -> min_y: float "Lowest Y value to allow"
+#Constraint|LimitScaleConstraint.min_z -> min_z: float "Lowest Z value to allow"
+#Constraint|LimitScaleConstraint.use_max_x -> use_max_x: boolean "Use the maximum X value"
+#Constraint|LimitScaleConstraint.use_max_y -> use_max_y: boolean "Use the maximum Y value"
+#Constraint|LimitScaleConstraint.use_max_z -> use_max_z: boolean "Use the maximum Z value"
+#Constraint|LimitScaleConstraint.use_min_x -> use_min_x: boolean "Use the minimum X value"
+#Constraint|LimitScaleConstraint.use_min_y -> use_min_y: boolean "Use the minimum Y value"
+#Constraint|LimitScaleConstraint.use_min_z -> use_min_z: boolean "Use the minimum Z value"
+#Constraint|LimitScaleConstraint.use_transform_limit -> use_transform_limit: boolean "Transforms are affected by this constraint as well"
+#Constraint|LockedTrackConstraint.lock_axis -> lock_axis: enum "Axis that points upward"
+#+ * Constraint|LockedTrackConstraint.subtarget -> subtarget: string "NO DESCRIPTION"
+#+ * Constraint|LockedTrackConstraint.target -> target: pointer "Target Object"
+#Constraint|LockedTrackConstraint.track_axis -> track_axis: enum "Axis that points to the target object"
+#Constraint|MaintainVolumeConstraint.free_axis -> free_axis: enum "The free scaling axis of the object"
+#+ * Constraint|MaintainVolumeConstraint.volume -> volume: float "Volume of the bone at rest"
+#+ * Constraint|PivotConstraint.head_tail -> head_tail: float "Target along length of bone: Head=0, Tail=1"
+#+ * Constraint|PivotConstraint.offset -> offset: float[3] "Offset of pivot from target (when set), or from owners location (when Fixed Position is off), or the absolute pivot point"
+#Constraint|PivotConstraint.rotation_range -> rotation_range: enum "Rotation range on which pivoting should occur"
+#+ * Constraint|PivotConstraint.subtarget -> subtarget: string "NO DESCRIPTION"
+#+ * Constraint|PivotConstraint.target -> target: pointer "Target Object, defining the position of the pivot when defined"
+#Constraint|PivotConstraint.use_relative_location -> use_relative_location: boolean "Offset will be an absolute point in space instead of relative to the target"
+#Constraint|PythonConstraint.has_script_error -> has_script_error: boolean, "(read-only) The linked Python script has thrown an error"
+#Constraint|PythonConstraint.target_count -> target_count: int "Usually only 1-3 are needed"
+#+ * Constraint|PythonConstraint.targets -> targets: collection, "(read-only) Target Objects"
+#+ * Constraint|PythonConstraint.text -> text: pointer "The text object that contains the Python script"
+#+ * Constraint|PythonConstraint.use_targets -> use_targets: boolean "Use the targets indicated in the constraint panel"
+#+ * Constraint|RigidBodyJointConstraint.axis_x -> axis_x: float "Rotate pivot on X axis in degrees"
+#+ * Constraint|RigidBodyJointConstraint.axis_y -> axis_y: float "Rotate pivot on Y axis in degrees"
+#+ * Constraint|RigidBodyJointConstraint.axis_z -> axis_z: float "Rotate pivot on Z axis in degrees"
+#+ * Constraint|RigidBodyJointConstraint.child -> child: pointer "Child object"
+#+ * Constraint|RigidBodyJointConstraint.pivot_type -> pivot_type: enum "NO DESCRIPTION"
+#+ * Constraint|RigidBodyJointConstraint.pivot_x -> pivot_x: float "Offset pivot on X"
+#+ * Constraint|RigidBodyJointConstraint.pivot_y -> pivot_y: float "Offset pivot on Y"
+#+ * Constraint|RigidBodyJointConstraint.pivot_z -> pivot_z: float "Offset pivot on Z"
+#Constraint|RigidBodyJointConstraint.show_pivot -> show_pivot: boolean "Display the pivot point and rotation in 3D view"
+#+ * Constraint|RigidBodyJointConstraint.target -> target: pointer "Target Object"
+#Constraint|RigidBodyJointConstraint.use_linked_collision -> use_linked_collision: boolean "Disable collision between linked bodies"
+#+ * Constraint|ShrinkwrapConstraint.distance -> distance: float "Distance to Target"
+#+ * Constraint|ShrinkwrapConstraint.shrinkwrap_type -> shrinkwrap_type: enum "Selects type of shrinkwrap algorithm for target position"
+#+ * Constraint|ShrinkwrapConstraint.target -> target: pointer "Target Object"
+#+ * Constraint|ShrinkwrapConstraint.use_x -> use_x: boolean "Projection over X Axis"
+#+ * Constraint|ShrinkwrapConstraint.use_y -> use_y: boolean "Projection over Y Axis"
+#+ * Constraint|ShrinkwrapConstraint.use_z -> use_z: boolean "Projection over Z Axis"
+#Constraint|SplineIKConstraint.chain_count -> chain_count: int "How many bones are included in the chain"
+#+ * Constraint|SplineIKConstraint.joint_bindings -> joint_bindings: float[32] "(EXPERIENCED USERS ONLY) The relative positions of the joints along the chain as percentages"
+#+ * Constraint|SplineIKConstraint.target -> target: pointer "Curve that controls this relationship"
+#Constraint|SplineIKConstraint.use_chain_offset -> use_chain_offset: boolean "Offset the entire chain relative to the root joint"
+#+ * Constraint|SplineIKConstraint.use_curve_radius -> use_curve_radius: boolean "Average radius of the endpoints is used to tweak the X and Z Scaling of the bones, on top of XZ Scale mode"
+#Constraint|SplineIKConstraint.use_even_divisions -> use_even_divisions: boolean "Ignore the relative lengths of the bones when fitting to the curve"
+#Constraint|SplineIKConstraint.use_y_stretch -> use_y_stretch: boolean "Stretch the Y axis of the bones to fit the curve"
+#Constraint|SplineIKConstraint.xz_scale_mode -> xz_scale_mode: enum "Method used for determining the scaling of the X and Z axes of the bones"
+#+ * Constraint|StretchToConstraint.bulge -> bulge: float "Factor between volume variation and stretching"
+#+ * Constraint|StretchToConstraint.head_tail -> head_tail: float "Target along length of bone: Head=0, Tail=1"
+#+ * Constraint|StretchToConstraint.keep_axis -> keep_axis: enum "Axis to maintain during stretch"
+#Constraint|StretchToConstraint.rest_length -> rest_length: float "Length at rest position"
+#+ * Constraint|StretchToConstraint.subtarget -> subtarget: string "NO DESCRIPTION"
+#+ * Constraint|StretchToConstraint.target -> target: pointer "Target Object"
+#+ * Constraint|StretchToConstraint.volume -> volume: enum "Maintain the objects volume as it stretches"
+#+ * Constraint|TrackToConstraint.head_tail -> head_tail: float "Target along length of bone: Head=0, Tail=1"
+#+ * Constraint|TrackToConstraint.subtarget -> subtarget: string "NO DESCRIPTION"
+#+ * Constraint|TrackToConstraint.target -> target: pointer "Target Object"
+#Constraint|TrackToConstraint.track_axis -> track_axis: enum "Axis that points to the target object"
+#Constraint|TrackToConstraint.up_axis -> up_axis: enum "Axis that points upward"
+#Constraint|TrackToConstraint.use_target_z -> use_target_z: boolean "Targets Z axis, not World Z axis, will constraint the Up direction"
+#+ * Constraint|TransformConstraint.from_max_x -> from_max_x: float "Top range of X axis source motion"
+#+ * Constraint|TransformConstraint.from_max_y -> from_max_y: float "Top range of Y axis source motion"
+#+ * Constraint|TransformConstraint.from_max_z -> from_max_z: float "Top range of Z axis source motion"
+#+ * Constraint|TransformConstraint.from_min_x -> from_min_x: float "Bottom range of X axis source motion"
+#+ * Constraint|TransformConstraint.from_min_y -> from_min_y: float "Bottom range of Y axis source motion"
+#+ * Constraint|TransformConstraint.from_min_z -> from_min_z: float "Bottom range of Z axis source motion"
+#+ * Constraint|TransformConstraint.map_from -> map_from: enum "The transformation type to use from the target"
+#+ * Constraint|TransformConstraint.map_to -> map_to: enum "The transformation type to affect of the constrained object"
+#+ * Constraint|TransformConstraint.map_to_x_from -> map_to_x_from: enum "The source axis constrained objects X axis uses"
+#+ * Constraint|TransformConstraint.map_to_y_from -> map_to_y_from: enum "The source axis constrained objects Y axis uses"
+#+ * Constraint|TransformConstraint.map_to_z_from -> map_to_z_from: enum "The source axis constrained objects Z axis uses"
+#+ * Constraint|TransformConstraint.subtarget -> subtarget: string "NO DESCRIPTION"
+#+ * Constraint|TransformConstraint.target -> target: pointer "Target Object"
+#+ * Constraint|TransformConstraint.to_max_x -> to_max_x: float "Top range of X axis destination motion"
+#+ * Constraint|TransformConstraint.to_max_y -> to_max_y: float "Top range of Y axis destination motion"
+#+ * Constraint|TransformConstraint.to_max_z -> to_max_z: float "Top range of Z axis destination motion"
+#+ * Constraint|TransformConstraint.to_min_x -> to_min_x: float "Bottom range of X axis destination motion"
+#+ * Constraint|TransformConstraint.to_min_y -> to_min_y: float "Bottom range of Y axis destination motion"
+#+ * Constraint|TransformConstraint.to_min_z -> to_min_z: float "Bottom range of Z axis destination motion"
+#Constraint|TransformConstraint.use_motion_extrapolate -> use_motion_extrapolate: boolean "Extrapolate ranges"
+#+ * Context.area -> area: pointer, "(read-only)"
+#+ * Context.main -> main: pointer, "(read-only)"
+#+ * Context.mode -> mode: enum, "(read-only)"
+#+ * Context.region -> region: pointer, "(read-only)"
+#+ * Context.region_data -> region_data: pointer, "(read-only)"
+#+ * Context.scene -> scene: pointer, "(read-only)"
+#+ * Context.screen -> screen: pointer, "(read-only)"
+#+ * Context.space_data -> space_data: pointer, "(read-only)"
+#+ * Context.tool_settings -> tool_settings: pointer, "(read-only)"
+#+ * Context.user_preferences -> user_preferences: pointer, "(read-only)"
+#+ * Context.window -> window: pointer, "(read-only)"
+ + * Context.manager -> wm: pointer, "(read-only)"
+#+ * Controller.name -> name: string "NO DESCRIPTION"
+#Controller.show_expanded -> show_expanded: boolean "Set controller expanded in the user interface"
+#Controller.states -> states: int "Set Controller state index (1 to 30)"
+#+ * Controller.type -> type: enum "NO DESCRIPTION"
+#Controller.use_priority -> use_priority: boolean "Mark controller for execution before all non-marked controllers (good for startup scripts)"
+#+ * Controller|ExpressionController.expression -> expression: string "NO DESCRIPTION"
+#+ * Controller|PythonController.mode -> mode: enum "Python script type (textblock or module - faster)"
+#+ * Controller|PythonController.module -> module: string "Module name and function to run e.g. someModule.main. Internal texts and external python files can be used"
+#+ * Controller|PythonController.text -> text: pointer "Text datablock with the python script"
+#Controller|PythonController.use_debug -> use_debug: boolean "Continuously reload the module from disk for editing external modules without restarting"
+#+ * CurveMap.extend -> extend: enum, "(read-only) Extrapolate the curve or extend it horizontally"
+#+ * CurveMap.points -> points: collection, "(read-only)"
+#+ * CurveMapPoint.handle_type -> handle_type: enum, "(read-only) Curve interpolation at this point: bezier or vector"
+#+ * CurveMapPoint.location -> location: float[2], "(read-only) X/Y coordinates of the curve point"
+#+ * CurveMapPoint.select -> select: boolean "Selection state of the curve point"
+#+ * CurveMapping.black_level -> black_level: float[3] "For RGB curves, the color that black is mapped to"
+#+ * CurveMapping.clip_max_x -> clip_max_x: float "NO DESCRIPTION"
+#+ * CurveMapping.clip_max_y -> clip_max_y: float "NO DESCRIPTION"
+#+ * CurveMapping.clip_min_x -> clip_min_x: float "NO DESCRIPTION"
+#+ * CurveMapping.clip_min_y -> clip_min_y: float "NO DESCRIPTION"
+#+ * CurveMapping.curves -> curves: collection, "(read-only)"
+#CurveMapping.use_clip -> use_clip: boolean "Force the curve view to fit a defined boundary"
+#+ * CurveMapping.white_level -> white_level: float[3] "For RGB curves, the color that white is mapped to"
+#+ * CurveSplines.active -> active: pointer "Active curve spline"
+#DopeSheet.filter_group -> filter_group: pointer "Group that included Object should be a member of"
+#DopeSheet.show_armatures -> show_armatures: boolean "Include visualization of Armature related Animation data"
+#DopeSheet.show_cameras -> show_cameras: boolean "Include visualization of Camera related Animation data"
+#DopeSheet.show_curves -> show_curves: boolean "Include visualization of Curve related Animation data"
+#DopeSheet.show_expanded_summary -> show_expanded_summary: boolean "Collapse summary when shown, so all other channels get hidden. (DopeSheet Editors Only)"
+#DopeSheet.show_hidden -> show_hidden: boolean "Include channels from objects/bone that arent visible"
+#DopeSheet.show_lamps -> show_lamps: boolean "Include visualization of Lamp related Animation data"
+#DopeSheet.show_materials -> show_materials: boolean "Include visualization of Material related Animation data"
+#DopeSheet.show_meshes -> show_meshes: boolean "Include visualization of Mesh related Animation data"
+#DopeSheet.show_metaballs -> show_metaballs: boolean "Include visualization of Metaball related Animation data"
+#DopeSheet.show_missing_nla -> show_missing_nla: boolean "Include Animation Data blocks with no NLA data. (NLA Editor only)"
+#DopeSheet.show_nodes -> show_nodes: boolean "Include visualization of Node related Animation data"
+#DopeSheet.show_only_group_objects -> show_only_group_objects: boolean "Only include channels from Objects in the specified Group"
+#DopeSheet.show_only_selected -> show_only_selected: boolean "Only include channels relating to selected objects and data"
+#DopeSheet.show_particles -> show_particles: boolean "Include visualization of Particle related Animation data"
+#DopeSheet.show_scenes -> show_scenes: boolean "Include visualization of Scene related Animation data"
+#DopeSheet.show_shapekeys -> show_shapekeys: boolean "Include visualization of ShapeKey related Animation data"
+#DopeSheet.show_summary -> show_summary: boolean "Display an additional summary line. (DopeSheet Editors only)"
+#DopeSheet.show_textures -> show_textures: boolean "Include visualization of Texture related Animation data"
+#DopeSheet.show_transforms -> show_transforms: boolean "Include visualization of Object-level Animation data (mostly Transforms)"
+#DopeSheet.show_worlds -> show_worlds: boolean "Include visualization of World related Animation data"
+#+ * DopeSheet.source -> source: pointer, "(read-only) ID-Block representing source data, currently ID_SCE (for Dopesheet), and ID_SC (for Grease Pencil)"
+#+ * Driver.expression -> expression: string "Expression to use for Scripted Expression"
+#Driver.is_valid -> is_valid: boolean "Driver could not be evaluated in past, so should be skipped"
+#+ * Driver.show_debug_info -> show_debug_info: boolean "Show intermediate values for the driver calculations to allow debugging of drivers"
+#+ * Driver.type -> type: enum "Driver type"
+#+ * Driver.variables -> variables: collection, "(read-only) Properties acting as inputs for this driver"
+#+ * DriverTarget.bone_target -> bone_target: string "Name of PoseBone to use as target"
+#+ * DriverTarget.data_path -> data_path: string "RNA Path (from ID-block) to property used"
+#+ * DriverTarget.id -> id: pointer "ID-block that the specific property used can be found from (id_type property must be set first)"
+#+ * DriverTarget.id_type -> id_type: enum "Type of ID-block that can be used"
+#+ * DriverTarget.transform_type -> transform_type: enum "Driver variable type"
+#DriverTarget.use_local_space_transform -> use_local_space_transform: boolean "Use transforms in Local Space (as opposed to the worldspace default)"
+#+ * DriverVariable.name -> name: string "Name to use in scripted expressions/functions. (No spaces or dots are allowed. Also, must not start with a symbol or digit)"
+#+ * DriverVariable.targets -> targets: collection, "(read-only) Sources of input data for evaluating this variable"
+#+ * DriverVariable.type -> type: enum "Driver variable type"
+#+ * DupliObject.matrix -> matrix: float[16] "Object duplicate transformation matrix"
+#+ * DupliObject.matrix_original -> matrix_original: float[16] "The original matrix of this object before it was duplicated"
+#+ * DupliObject.object -> object: pointer, "(read-only) Object being duplicated"
+#+ * EditBone.bbone_in -> bbone_in: float "Length of first Bezier Handle (for B-Bones only)"
+#+ * EditBone.bbone_out -> bbone_out: float "Length of second Bezier Handle (for B-Bones only)"
+#+ * EditBone.bbone_segments -> bbone_segments: int "Number of subdivisions of bone (for B-Bones only)"
+#+ * EditBone.envelope_distance -> envelope_distance: float "Bone deformation distance (for Envelope deform only)"
+#+ * EditBone.envelope_weight -> envelope_weight: float "Bone deformation weight (for Envelope deform only)"
+#+ * EditBone.head -> head: float[3] "Location of head end of the bone"
+#+ * EditBone.head_radius -> head_radius: float "Radius of head of bone (for Envelope deform only)"
+#+ * EditBone.hide -> hide: boolean "Bone is not visible when in Edit Mode"
+#+ * EditBone.hide_select -> hide_select: boolean "Bone is able to be selected"
+#EditBone.layers -> layers: boolean[32] "Layers bone exists in"
+#+ * EditBone.lock -> lock: boolean "Bone is not able to be transformed when in Edit Mode"
+#+ * EditBone.matrix -> matrix: float[16], "(read-only) Read-only matrix calculated from the roll (armature space)"
+#+ * EditBone.name -> name: string "NO DESCRIPTION"
+#+ * EditBone.parent -> parent: pointer "Parent edit bone (in same Armature)"
+#+ * EditBone.roll -> roll: float "Bone rotation around head-tail axis"
+#+ * EditBone.select -> select: boolean "NO DESCRIPTION"
+#+ * EditBone.select_head -> select_head: boolean "NO DESCRIPTION"
+#+ * EditBone.select_tail -> select_tail: boolean "NO DESCRIPTION"
+#EditBone.show_wire -> show_wire: boolean "Bone is always drawn as Wireframe regardless of viewport draw mode. Useful for non-obstructive custom bone shapes"
+#+ * EditBone.tail -> tail: float[3] "Location of tail end of the bone"
+#+ * EditBone.tail_radius -> tail_radius: float "Radius of tail of bone (for Envelope deform only)"
+#EditBone.use_connect -> use_connect: boolean "When bone has a parent, bones head is struck to the parents tail"
+#EditBone.use_cyclic_offset -> use_cyclic_offset: boolean "When bone doesnt have a parent, it receives cyclic offset effects"
+#EditBone.use_deform -> use_deform: boolean "Bone does not deform any geometry"
+#EditBone.use_envelope_multiply -> use_envelope_multiply: boolean "When deforming bone, multiply effects of Vertex Group weights with Envelope influence"
+#EditBone.use_hinge -> use_hinge: boolean "Bone inherits rotation or scale from parent bone"
+#EditBone.use_inherit_scale -> use_inherit_scale: boolean "Bone inherits scaling from parent bone"
+#EditBone.use_local_location -> use_local_location: boolean "Bone location is set in local space"
+#+ * EffectorWeights.all -> all: float "All effectors weight"
+#EffectorWeights.apply_to_hair_growing -> apply_to_hair_growing: boolean "Use force fields when growing hair"
+#+ * EffectorWeights.boid -> boid: float "Boid effector weight"
+#+ * EffectorWeights.charge -> charge: float "Charge effector weight"
+#EffectorWeights.curve_guide -> curve_guide: float "Curve guide effector weight"
+#+ * EffectorWeights.drag -> drag: float "Drag effector weight"
+#+ * EffectorWeights.force -> force: float "Force effector weight"
+#+ * EffectorWeights.gravity -> gravity: float "Global gravity weight"
+#+ * EffectorWeights.group -> group: pointer "Limit effectors to this Group"
+#+ * EffectorWeights.harmonic -> harmonic: float "Harmonic effector weight"
+#+ * EffectorWeights.lennardjones -> lennardjones: float "Lennard-Jones effector weight"
+#+ * EffectorWeights.magnetic -> magnetic: float "Magnetic effector weight"
+#+ * EffectorWeights.texture -> texture: float "Texture effector weight"
+#+ * EffectorWeights.turbulence -> turbulence: float "Turbulence effector weight"
+#+ * EffectorWeights.vortex -> vortex: float "Vortex effector weight"
+#+ * EffectorWeights.wind -> wind: float "Wind effector weight"
+#+ * EnumPropertyItem.description -> description: string, "(read-only) Description of the items purpose"
+#+ * EnumPropertyItem.identifier -> identifier: string, "(read-only) Unique name used in the code and scripting"
+#+ * EnumPropertyItem.name -> name: string, "(read-only) Human readable name"
+#+ * EnumPropertyItem.value -> value: int, "(read-only) Value of the item"
+#+ * EnvironmentMap.clip_end -> clip_end: float "Objects further than this are not visible to map"
+#+ * EnvironmentMap.clip_start -> clip_start: float "Objects nearer than this are not visible to map"
+#+ * EnvironmentMap.depth -> depth: int "Number of times a map will be rendered recursively (mirror effects.)"
+#EnvironmentMap.layers_ignore -> layers_ignore: boolean[20] "Hide objects on these layers when generating the Environment Map"
+#+ * EnvironmentMap.mapping -> mapping: enum "NO DESCRIPTION"
+#+ * EnvironmentMap.resolution -> resolution: int "Pixel resolution of the rendered environment map"
+#+ * EnvironmentMap.source -> source: enum "NO DESCRIPTION"
+#+ * EnvironmentMap.viewpoint_object -> viewpoint_object: pointer "Object to use as the environment maps viewpoint location"
+#+ * EnvironmentMap.zoom -> zoom: float "NO DESCRIPTION"
+#+ * Event.ascii -> ascii: string, "(read-only) Single ASCII character for this event"
+ + * Event.alt -> is_pressed_alt: boolean, "(read-only) True when the Alt/Option key is held"
+ + * Event.oskey -> is_pressed_cmd: boolean, "(read-only) True when the Cmd key is held"
+ + * Event.ctrl -> is_pressed_ctrl: boolean, "(read-only) True when the Ctrl key is held"
+ + * Event.shift -> is_pressed_shift: boolean, "(read-only) True when the Shift key is held"
+#+ * Event.mouse_prev_x -> mouse_prev_x: int, "(read-only) The window relative vertical location of the mouse"
+#+ * Event.mouse_prev_y -> mouse_prev_y: int, "(read-only) The window relative horizontal location of the mouse"
+#+ * Event.mouse_region_x -> mouse_region_x: int, "(read-only) The region relative vertical location of the mouse"
+#+ * Event.mouse_region_y -> mouse_region_y: int, "(read-only) The region relative horizontal location of the mouse"
+#+ * Event.mouse_x -> mouse_x: int, "(read-only) The window relative vertical location of the mouse"
+#+ * Event.mouse_y -> mouse_y: int, "(read-only) The window relative horizontal location of the mouse"
+#+ * Event.type -> type: enum, "(read-only)"
+#+ * Event.value -> value: enum, "(read-only) The type of event, only applies to some"
+#+ * FCurve.array_index -> array_index: int "Index to the specific property affected by F-Curve if applicable"
+#+ * FCurve.color -> color: float[3] "Color of the F-Curve in the Graph Editor"
+#+ * FCurve.color_mode -> color_mode: enum "Method used to determine color of F-Curve in Graph Editor"
+#+ * FCurve.data_path -> data_path: string "RNA Path to property affected by F-Curve"
+#+ * FCurve.driver -> driver: pointer, "(read-only) Channel Driver (only set for Driver F-Curves)"
+#+ * FCurve.extrapolation -> extrapolation: enum "NO DESCRIPTION"
+#+ * FCurve.group -> group: pointer "Action Group that this F-Curve belongs to"
+#+ * FCurve.hide -> hide: boolean "F-Curve and its keyframes are hidden in the Graph Editor graphs"
+#+ * FCurve.is_valid -> is_valid: boolean "False when F-Curve could not be evaluated in past, so should be skipped when evaluating"
+#+ * FCurve.keyframe_points -> keyframe_points: collection, "(read-only) User-editable keyframes"
+#+ * FCurve.lock -> lock: boolean "F-Curves settings cannot be edited"
+#+ * FCurve.modifiers -> modifiers: collection, "(read-only) Modifiers affecting the shape of the F-Curve"
+#+ * FCurve.mute -> mute: boolean "F-Curve is not evaluated"
+#+ * FCurve.sampled_points -> sampled_points: collection, "(read-only) Sampled animation data"
+#+ * FCurve.select -> select: boolean "F-Curve is selected for editing"
+#+ * FCurve.use_auto_handle_clamp -> use_auto_handle_clamp: boolean "All auto-handles for F-Curve are clamped"
+#+ * FCurveModifiers.active -> active: pointer "Active F-Curve Modifier"
+#+ * FCurveSample.co -> co: float[2] "Point coordinates"
+#+ * FCurveSample.select -> select: boolean "Selection status"
+#REMOVE * FModifier.active -> active: boolean "F-Curve Modifier is the one being edited"
+#FModifier.is_valid -> is_valid: boolean, "(read-only) F-Curve Modifier has invalid settings and will not be evaluated"
+#+ * FModifier.mute -> mute: boolean "F-Curve Modifier will not be evaluated"
+#FModifier.show_expanded -> show_expanded: boolean "F-Curve Modifiers panel is expanded in UI"
+#+ * FModifier.type -> type: enum, "(read-only) F-Curve Modifier Type"
+#+ * FModifierEnvelopeControlPoint.frame -> frame: float "Frame this control-point occurs on"
+#FModifierEnvelopeControlPoint.max -> max: float "Upper bound of envelope at this control-point"
+#FModifierEnvelopeControlPoint.min -> min: float "Lower bound of envelope at this control-point"
+#FModifier|FModifierCycles.cycles_after -> cycles_after: float "Maximum number of cycles to allow after last keyframe. (0 = infinite)"
+#FModifier|FModifierCycles.cycles_before -> cycles_before: float "Maximum number of cycles to allow before first keyframe. (0 = infinite)"
+#FModifier|FModifierCycles.mode_after -> mode_after: enum "Cycling mode to use after last keyframe"
+#FModifier|FModifierCycles.mode_before -> mode_before: enum "Cycling mode to use before first keyframe"
+#+ * FModifier|FModifierEnvelope.control_points -> control_points: collection, "(read-only) Control points defining the shape of the envelope"
+#FModifier|FModifierEnvelope.default_max -> default_max: float "Upper distance from Reference Value for 1:1 default influence"
+#FModifier|FModifierEnvelope.default_min -> default_min: float "Lower distance from Reference Value for 1:1 default influence"
+#+ * FModifier|FModifierEnvelope.reference_value -> reference_value: float "Value that envelopes influence is centered around / based on"
+#+ * FModifier|FModifierFunctionGenerator.amplitude -> amplitude: float "Scale factor determining the maximum/minimum values"
+#+ * FModifier|FModifierFunctionGenerator.function_type -> function_type: enum "Type of built-in function to use"
+#+ * FModifier|FModifierFunctionGenerator.phase_multiplier -> phase_multiplier: float "Scale factor determining the speed of the function"
+#+ * FModifier|FModifierFunctionGenerator.phase_offset -> phase_offset: float "Constant factor to offset time by for function"
+#FModifier|FModifierFunctionGenerator.use_additive -> use_additive: boolean "Values generated by this modifier are applied on top of the existing values instead of overwriting them"
+#+ * FModifier|FModifierFunctionGenerator.value_offset -> value_offset: float "Constant factor to offset values by"
+#+ * FModifier|FModifierGenerator.coefficients -> coefficients: float[32] "Coefficients for x (starting from lowest power of x^0)"
+#+ * FModifier|FModifierGenerator.mode -> mode: enum "Type of generator to use"
+#+ * FModifier|FModifierGenerator.poly_order -> poly_order: int "The highest power of x for this polynomial. (number of coefficients - 1)"
+#FModifier|FModifierGenerator.use_additive -> use_additive: boolean "Values generated by this modifier are applied on top of the existing values instead of overwriting them"
+#FModifier|FModifierLimits.max_x -> max_x: float "Highest X value to allow"
+#FModifier|FModifierLimits.max_y -> max_y: float "Highest Y value to allow"
+#FModifier|FModifierLimits.min_x -> min_x: float "Lowest X value to allow"
+#FModifier|FModifierLimits.min_y -> min_y: float "Lowest Y value to allow"
+#FModifier|FModifierLimits.use_max_x -> use_max_x: boolean "Use the maximum X value"
+#FModifier|FModifierLimits.use_max_y -> use_max_y: boolean "Use the maximum Y value"
+#FModifier|FModifierLimits.use_min_x -> use_min_x: boolean "Use the minimum X value"
+#FModifier|FModifierLimits.use_min_y -> use_min_y: boolean "Use the minimum Y value"
+#FModifier|FModifierNoise.blend_type -> blend_type: enum "Method of modifying the existing F-Curve"
+#+ * FModifier|FModifierNoise.depth -> depth: int "Amount of fine level detail present in the noise"
+#+ * FModifier|FModifierNoise.phase -> phase: float "A random seed for the noise effect"
+#FModifier|FModifierNoise.scale -> scale: float "Scaling (in time) of the noise"
+#+ * FModifier|FModifierNoise.strength -> strength: float "Amplitude of the noise - the amount that it modifies the underlying curve"
+#+ * FModifier|FModifierStepped.frame_end -> frame_end: float "Frame that modifiers influence ends (if applicable)"
+#FModifier|FModifierStepped.frame_offset -> frame_offset: float "Reference number of frames before frames get held. Use to get hold for 1-3 vs 5-7 holding patterns"
+#+ * FModifier|FModifierStepped.frame_start -> frame_start: float "Frame that modifiers influence starts (if applicable)"
+#FModifier|FModifierStepped.frame_step -> frame_step: float "Number of frames to hold each value"
+#+ * FModifier|FModifierStepped.use_frame_end -> use_frame_end: boolean "Restrict modifier to only act before its end frame"
+#+ * FModifier|FModifierStepped.use_frame_start -> use_frame_start: boolean "Restrict modifier to only act after its start frame"
+#FieldSettings.apply_to_location -> apply_to_location: boolean "Effect particles location"
+#FieldSettings.apply_to_rotation -> apply_to_rotation: boolean "Effect particles dynamic rotation"
+#FieldSettings.distance_max -> distance_max: float "Maximum distance for the field to work"
+#FieldSettings.distance_min -> distance_min: float "Minimum distance for the fields fall-off"
+#+ * FieldSettings.falloff_power -> falloff_power: float "Falloff power (real gravitational falloff = 2)"
+#+ * FieldSettings.falloff_type -> falloff_type: enum "Fall-off shape"
+#+ * FieldSettings.flow -> flow: float "Convert effector force into air flow velocity"
+#+ * FieldSettings.guide_clump_amount -> guide_clump_amount: float "Amount of clumping"
+#+ * FieldSettings.guide_clump_shape -> guide_clump_shape: float "Shape of clumping"
+#+ * FieldSettings.guide_free -> guide_free: float "Guide-free time from particle lifes end"
+#+ * FieldSettings.guide_kink_amplitude -> guide_kink_amplitude: float "The amplitude of the offset"
+#+ * FieldSettings.guide_kink_axis -> guide_kink_axis: enum "Which axis to use for offset"
+#+ * FieldSettings.guide_kink_frequency -> guide_kink_frequency: float "The frequency of the offset (1/total length)"
+#+ * FieldSettings.guide_kink_shape -> guide_kink_shape: float "Adjust the offset to the beginning/end"
+#+ * FieldSettings.guide_kink_type -> guide_kink_type: enum "Type of periodic offset on the curve"
+#+ * FieldSettings.guide_minimum -> guide_minimum: float "The distance from which particles are affected fully"
+#+ * FieldSettings.harmonic_damping -> harmonic_damping: float "Damping of the harmonic force"
+#+ * FieldSettings.inflow -> inflow: float "Inwards component of the vortex force"
+#+ * FieldSettings.linear_drag -> linear_drag: float "Drag component proportional to velocity"
+#+ * FieldSettings.noise -> noise: float "Noise of the force"
+#+ * FieldSettings.quadratic_drag -> quadratic_drag: float "Drag component proportional to the square of velocity"
+#+ * FieldSettings.radial_falloff -> radial_falloff: float "Radial falloff power (real gravitational falloff = 2)"
+#FieldSettings.radial_max -> radial_max: float "Maximum radial distance for the field to work"
+#FieldSettings.radial_min -> radial_min: float "Minimum radial distance for the fields fall-off"
+#+ * FieldSettings.rest_length -> rest_length: float "Rest length of the harmonic force"
+#+ * FieldSettings.seed -> seed: int "Seed of the noise"
+#+ * FieldSettings.shape -> shape: enum "Which direction is used to calculate the effector force"
+#+ * FieldSettings.size -> size: float "Size of the noise"
+#+ * FieldSettings.strength -> strength: float "Strength of force field"
+#+ * FieldSettings.texture -> texture: pointer "Texture to use as force"
+#+ * FieldSettings.texture_mode -> texture_mode: enum "How the texture effect is calculated (RGB & Curl need a RGB texture else Gradient will be used instead)"
+#+ * FieldSettings.texture_nabla -> texture_nabla: float "Defines size of derivative offset used for calculating gradient and curl"
+#+ * FieldSettings.type -> type: enum "Type of field"
+#FieldSettings.use_2d_force -> use_2d_force: boolean "Apply force only in 2d"
+#FieldSettings.use_absorption -> use_absorption: boolean "Force gets absorbed by collision objects"
+#FieldSettings.use_global_coords -> use_global_coords: boolean "Use effector/global coordinates for turbulence"
+#FieldSettings.use_guide_path_add -> use_guide_path_add: boolean "Based on distance/falloff it adds a portion of the entire path"
+#+ * FieldSettings.use_guide_path_weight -> use_guide_path_weight: boolean "Use curve weights to influence the particle influence along the curve"
+#+ * FieldSettings.use_max_distance -> use_max_distance: boolean "Use a maximum distance for the field to work"
+#+ * FieldSettings.use_min_distance -> use_min_distance: boolean "Use a minimum distance for the fields fall-off"
+#FieldSettings.use_multiple_springs -> use_multiple_springs: boolean "Every point is effected by multiple springs"
+#FieldSettings.use_object_coords -> use_object_coords: boolean "Use object/global coordinates for texture"
+#+ * FieldSettings.use_radial_max -> use_radial_max: boolean "Use a maximum radial distance for the field to work"
+#+ * FieldSettings.use_radial_min -> use_radial_min: boolean "Use a minimum radial distance for the fields fall-off"
+#FieldSettings.use_root_coords -> use_root_coords: boolean "Texture coordinates from root particle locations"
+#+ * FieldSettings.z_direction -> z_direction: enum "Effect in full or only positive/negative Z direction"
+#+ * FileSelectParams.directory -> directory: string "Directory displayed in the file browser"
+#FileSelectParams.display_type -> display_type: enum "Display mode for the file list"
+#FileSelectParams.filename -> filename: string "Active file in the file browser"
+#FileSelectParams.show_hidden -> show_hidden: boolean "Hide hidden dot files"
+#FileSelectParams.sort_method -> sort_method: enum "NO DESCRIPTION"
+#+ * FileSelectParams.title -> title: string, "(read-only) Title for the file browser"
+#FileSelectParams.use_filter -> use_filter: boolean "Enable filtering of files"
+#FileSelectParams.use_filter_blender -> use_filter_blender: boolean "Show .blend files"
+#FileSelectParams.use_filter_folder -> use_filter_folder: boolean "Show folders"
+#FileSelectParams.use_filter_font -> use_filter_font: boolean "Show font files"
+#FileSelectParams.use_filter_image -> use_filter_image: boolean "Show image files"
+#FileSelectParams.use_filter_movie -> use_filter_movie: boolean "Show movie files"
+#FileSelectParams.use_filter_script -> use_filter_script: boolean "Show script files"
+#FileSelectParams.use_filter_sound -> use_filter_sound: boolean "Show sound files"
+#FileSelectParams.use_filter_text -> use_filter_text: boolean "Show text files"
+#+ * FluidSettings.type -> type: enum "Type of participation in the fluid simulation"
+#+ * FluidSettings|ControlFluidSettings.attraction_radius -> attraction_radius: float "Specifies the force field radius around the control object"
+#+ * FluidSettings|ControlFluidSettings.attraction_strength -> attraction_strength: float "Force strength for directional attraction towards the control object"
+#+ * FluidSettings|ControlFluidSettings.end_time -> end_time: float "Specifies time when the control particles are deactivated"
+#+ * FluidSettings|ControlFluidSettings.quality -> quality: float "Specifies the quality which is used for object sampling. (higher = better but slower)"
+#+ * FluidSettings|ControlFluidSettings.start_time -> start_time: float "Specifies time when the control particles are activated"
+#FluidSettings|ControlFluidSettings.use -> use: boolean "Object contributes to the fluid simulation"
+#FluidSettings|ControlFluidSettings.use_reverse_frames -> use_reverse_frames: boolean "Reverse control object movement"
+#+ * FluidSettings|ControlFluidSettings.velocity_radius -> velocity_radius: float "Specifies the force field radius around the control object"
+#+ * FluidSettings|ControlFluidSettings.velocity_strength -> velocity_strength: float "Force strength of how much of the control objects velocity is influencing the fluid velocity"
+#+ * FluidSettings|DomainFluidSettings.compressibility -> compressibility: float "Allowed compressibility due to gravitational force for standing fluid. (directly affects simulation step size)"
+#+ * FluidSettings|DomainFluidSettings.end_time -> end_time: float "Simulation time of the last blender frame (in seconds)"
+#FluidSettings|DomainFluidSettings.filepath -> filepath: string "Directory (and/or filename prefix) to store baked fluid simulation files in"
+#+ * FluidSettings|DomainFluidSettings.generate_particles -> generate_particles: float "Amount of particles to generate (0=off, 1=normal, >1=more)"
+#+ * FluidSettings|DomainFluidSettings.gravity -> gravity: float[3] "Gravity in X, Y and Z direction"
+#+ * FluidSettings|DomainFluidSettings.grid_levels -> grid_levels: int "Number of coarsened grids to use (-1 for automatic)"
+#+ * FluidSettings|DomainFluidSettings.memory_estimate -> memory_estimate: string, "(read-only) Estimated amount of memory needed for baking the domain"
+#+ * FluidSettings|DomainFluidSettings.partial_slip_factor -> partial_slip_factor: float "Amount of mixing between no- and free-slip, 0 is no slip and 1 is free slip"
+#+ * FluidSettings|DomainFluidSettings.preview_resolution -> preview_resolution: int "Preview resolution in X,Y and Z direction"
+#+ * FluidSettings|DomainFluidSettings.render_display_mode -> render_display_mode: enum "How to display the mesh for rendering"
+#+ * FluidSettings|DomainFluidSettings.resolution -> resolution: int "Domain resolution in X,Y and Z direction"
+#FluidSettings|DomainFluidSettings.simulation_scale -> simulation_scale: float "Size of the simulation domain in metres"
+#+ * FluidSettings|DomainFluidSettings.slip_type -> slip_type: enum "NO DESCRIPTION"
+#+ * FluidSettings|DomainFluidSettings.start_time -> start_time: float "Simulation time of the first blender frame (in seconds)"
+#FluidSettings|DomainFluidSettings.surface_smooth -> surface_smooth: float "Amount of surface smoothing. A value of 0 is off, 1 is normal smoothing and more than 1 is extra smoothing"
+#+ * FluidSettings|DomainFluidSettings.surface_subdivisions -> surface_subdivisions: int "Number of isosurface subdivisions. This is necessary for the inclusion of particles into the surface generation. Warning - can lead to longer computation times!"
+#+ * FluidSettings|DomainFluidSettings.tracer_particles -> tracer_particles: int "Number of tracer particles to generate"
+#FluidSettings|DomainFluidSettings.use_reverse_frames -> use_reverse_frames: boolean "Reverse fluid frames"
+#FluidSettings|DomainFluidSettings.use_speed_vectors -> use_speed_vectors: boolean "Generate speed vectors for vector blur"
+#FluidSettings|DomainFluidSettings.use_time_override -> use_time_override: boolean "Use a custom start and end time (in seconds) instead of the scenes timeline"
+#+ * FluidSettings|DomainFluidSettings.viewport_display_mode -> viewport_display_mode: enum "How to display the mesh in the viewport"
+#+ * FluidSettings|DomainFluidSettings.viscosity_base -> viscosity_base: float "Viscosity setting: value that is multiplied by 10 to the power of (exponent*-1)"
+#+ * FluidSettings|DomainFluidSettings.viscosity_exponent -> viscosity_exponent: int "Negative exponent for the viscosity value (to simplify entering small values e.g. 5*10^-6.)"
+#+ * FluidSettings|DomainFluidSettings.viscosity_preset -> viscosity_preset: enum "Set viscosity of the fluid to a preset value, or use manual input"
+#+ * FluidSettings|FluidFluidSettings.initial_velocity -> initial_velocity: float[3] "Initial velocity of fluid"
+#FluidSettings|FluidFluidSettings.use -> use: boolean "Object contributes to the fluid simulation"
+#FluidSettings|FluidFluidSettings.use_animated_mesh -> use_animated_mesh: boolean "Export this mesh as an animated one. Slower, only use if really necessary (e.g. armatures or parented objects), animated pos/rot/scale IPOs do not require it"
+#+ * FluidSettings|FluidFluidSettings.volume_initialization -> volume_initialization: enum "Volume initialization type"
+#+ * FluidSettings|InflowFluidSettings.inflow_velocity -> inflow_velocity: float[3] "Initial velocity of fluid"
+#FluidSettings|InflowFluidSettings.use -> use: boolean "Object contributes to the fluid simulation"
+#FluidSettings|InflowFluidSettings.use_animated_mesh -> use_animated_mesh: boolean "Export this mesh as an animated one. Slower, only use if really necessary (e.g. armatures or parented objects), animated pos/rot/scale IPOs do not require it"
+#FluidSettings|InflowFluidSettings.use_local_coords -> use_local_coords: boolean "Use local coordinates for inflow. (e.g. for rotating objects)"
+#+ * FluidSettings|InflowFluidSettings.volume_initialization -> volume_initialization: enum "Volume initialization type"
+#+ * FluidSettings|ObstacleFluidSettings.impact_factor -> impact_factor: float "This is an unphysical value for moving objects - it controls the impact an obstacle has on the fluid, =0 behaves a bit like outflow (deleting fluid), =1 is default, while >1 results in high forces. Can be used to tweak total mass"
+#+ * FluidSettings|ObstacleFluidSettings.partial_slip_factor -> partial_slip_factor: float "Amount of mixing between no- and free-slip, 0 is no slip and 1 is free slip"
+#+ * FluidSettings|ObstacleFluidSettings.slip_type -> slip_type: enum "NO DESCRIPTION"
+#FluidSettings|ObstacleFluidSettings.use -> use: boolean "Object contributes to the fluid simulation"
+#FluidSettings|ObstacleFluidSettings.use_animated_mesh -> use_animated_mesh: boolean "Export this mesh as an animated one. Slower, only use if really necessary (e.g. armatures or parented objects), animated pos/rot/scale IPOs do not require it"
+#+ * FluidSettings|ObstacleFluidSettings.volume_initialization -> volume_initialization: enum "Volume initialization type"
+#FluidSettings|OutflowFluidSettings.use -> use: boolean "Object contributes to the fluid simulation"
+#FluidSettings|OutflowFluidSettings.use_animated_mesh -> use_animated_mesh: boolean "Export this mesh as an animated one. Slower, only use if really necessary (e.g. armatures or parented objects), animated pos/rot/scale IPOs do not require it"
+#+ * FluidSettings|OutflowFluidSettings.volume_initialization -> volume_initialization: enum "Volume initialization type"
+#+ * FluidSettings|ParticleFluidSettings.alpha_influence -> alpha_influence: float "Amount of particle alpha change, inverse of size influence: 0=off (all same alpha), 1=full. (large particles get lower alphas, smaller ones higher values)"
+#FluidSettings|ParticleFluidSettings.filepath -> filepath: string "Directory (and/or filename prefix) to store and load particles from"
+#+ * FluidSettings|ParticleFluidSettings.particle_influence -> particle_influence: float "Amount of particle size scaling: 0=off (all same size), 1=full (range 0.2-2.0), >1=stronger"
+#FluidSettings|ParticleFluidSettings.show_tracer -> show_tracer: boolean "Show tracer particles"
+#FluidSettings|ParticleFluidSettings.use_drops -> use_drops: boolean "Show drop particles"
+#FluidSettings|ParticleFluidSettings.use_floats -> use_floats: boolean "Show floating foam particles"
+#+ * Function.description -> description: string, "(read-only) Description of the Functions purpose"
+#+ * Function.identifier -> identifier: string, "(read-only) Unique name used in the code and scripting"
+#Function.is_registered -> is_registered: boolean, "(read-only) Function is registered as callback as part of type registration"
+#Function.is_registered_optional -> is_registered_optional: boolean, "(read-only) Function is optionally registered as callback part of type registration"
+#+ * Function.parameters -> parameters: collection, "(read-only) Parameters for the function"
+#Function.use_self -> use_self: boolean, "(read-only) Function does not pass its self as an argument (becomes a class method in python)"
+#+ * GPencilFrame.frame_number -> frame_number: int "The frame on which this sketch appears"
+#GPencilFrame.is_edited -> is_edited: boolean "Frame is being edited (painted on)"
+#+ * GPencilFrame.select -> select: boolean "Frame is selected for editing in the DopeSheet"
+#+ * GPencilFrame.strokes -> strokes: collection, "(read-only) Freehand curves defining the sketch on this frame"
+#+ * GPencilLayer.active -> active: boolean "Set active layer for editing"
+#+ * GPencilLayer.active_frame -> active_frame: pointer, "(read-only) Frame currently being displayed for this layer"
+#GPencilLayer.alpha -> alpha: float "Layer Opacity"
+#+ * GPencilLayer.color -> color: float[3] "Color for all strokes in this layer"
+#+ * GPencilLayer.frames -> frames: collection, "(read-only) Sketches for this layer on different frames"
+#GPencilLayer.ghost_range_max -> ghost_range_max: int "Maximum number of frames on either side of the active frame to show (0 = show the first available sketch on either side)"
+#+ * GPencilLayer.hide -> hide: boolean "Set layer Visibility"
+#+ * GPencilLayer.info -> info: string "Layer name"
+#GPencilLayer.line_width -> line_width: int "Thickness of strokes (in pixels)"
+#+ * GPencilLayer.lock -> lock: boolean "Protect layer from further editing and/or frame changes"
+#GPencilLayer.lock_frame -> lock_frame: boolean "Lock current frame displayed by layer"
+#+ * GPencilLayer.select -> select: boolean "Layer is selected for editing in the DopeSheet"
+#+ * GPencilLayer.show_points -> show_points: boolean "Draw the points which make up the strokes (for debugging purposes)"
+#+ * GPencilLayer.use_onion_skinning -> use_onion_skinning: boolean "Ghost frames on either side of frame"
+#+ * GPencilStroke.points -> points: collection, "(read-only) Stroke data points"
+#+ * GPencilStrokePoint.co -> co: float[3] "NO DESCRIPTION"
+#+ * GPencilStrokePoint.pressure -> pressure: float "Pressure of tablet at point when drawing it"
+#+ * GameObjectSettings.actuators -> actuators: collection, "(read-only) Game engine actuators to act on events"
+#GameObjectSettings.collision_bounds_type -> collision_bounds_type: enum "Selects the collision type"
+#+ * GameObjectSettings.collision_margin -> collision_margin: float "Extra margin around object for collision detection, small amount required for stability"
+#+ * GameObjectSettings.controllers -> controllers: collection, "(read-only) Game engine controllers to process events, connecting sensor to actuators"
+#+ * GameObjectSettings.damping -> damping: float "General movement damping"
+#+ * GameObjectSettings.form_factor -> form_factor: float "Form factor scales the inertia tensor"
+#+ * GameObjectSettings.friction_coefficients -> friction_coefficients: float[3] "Relative friction coefficient in the in the X, Y and Z directions, when anisotropic friction is enabled"
+#GameObjectSettings.lock_location_x -> lock_location_x: boolean "Disable simulation of linear motion along the X axis"
+#GameObjectSettings.lock_location_y -> lock_location_y: boolean "Disable simulation of linear motion along the Y axis"
+#GameObjectSettings.lock_location_z -> lock_location_z: boolean "Disable simulation of linear motion along the Z axis"
+#GameObjectSettings.lock_rotation_x -> lock_rotation_x: boolean "Disable simulation of angular motion along the X axis"
+#GameObjectSettings.lock_rotation_y -> lock_rotation_y: boolean "Disable simulation of angular motion along the Y axis"
+#GameObjectSettings.lock_rotation_z -> lock_rotation_z: boolean "Disable simulation of angular motion along the Z axis"
+#+ * GameObjectSettings.mass -> mass: float "Mass of the object"
+#+ * GameObjectSettings.physics_type -> physics_type: enum "Selects the type of physical representation"
+#+ * GameObjectSettings.properties -> properties: collection, "(read-only) Game engine properties"
+#+ * GameObjectSettings.radius -> radius: float "Radius of bounding sphere and material physics"
+#+ * GameObjectSettings.rotation_damping -> rotation_damping: float "General rotation damping"
+#+ * GameObjectSettings.sensors -> sensors: collection, "(read-only) Game engine sensor to detect events"
+#+ * GameObjectSettings.show_actuators -> show_actuators: boolean "Shows actuators for this object in the user interface"
+#+ * GameObjectSettings.show_controllers -> show_controllers: boolean "Shows controllers for this object in the user interface"
+#GameObjectSettings.show_debug_state -> show_debug_state: boolean "Print state debug info in the game engine"
+#+ * GameObjectSettings.show_sensors -> show_sensors: boolean "Shows sensors for this object in the user interface"
+#+ * GameObjectSettings.show_state_panel -> show_state_panel: boolean "Show state panel"
+#+ * GameObjectSettings.soft_body -> soft_body: pointer, "(read-only) Settings for Bullet soft body simulation"
+#GameObjectSettings.states_initial -> states_initial: boolean[30] "Initial state when the game starts"
+#GameObjectSettings.states_visible -> states_visible: boolean[30] "State determining which controllers are displayed"
+#+ * GameObjectSettings.use_activity_culling -> use_activity_culling: boolean "Disable simulation of angular motion along the Z axis"
+#GameObjectSettings.use_actor -> use_actor: boolean "Object is detected by the Near and Radar sensor"
+#GameObjectSettings.use_all_states -> use_all_states: boolean "Set all state bits"
+#GameObjectSettings.use_anisotropic_friction -> use_anisotropic_friction: boolean "Enable anisotropic friction"
+#+ * GameObjectSettings.use_collision_bounds -> use_collision_bounds: boolean "Specify a collision bounds type other than the default"
+#GameObjectSettings.use_collision_compound -> use_collision_compound: boolean "Add children to form a compound collision object"
+#GameObjectSettings.use_ghost -> use_ghost: boolean "Object does not restitute collisions, like a ghost"
+#GameObjectSettings.use_material_physics -> use_material_physics: boolean "Use physics settings in materials"
+#GameObjectSettings.use_rotate_from_normal -> use_rotate_from_normal: boolean "Use face normal to rotate object, so that it points away from the surface"
+#GameObjectSettings.use_sleep -> use_sleep: boolean "Disable auto (de)activation in physics simulation"
+#GameObjectSettings.used_states -> used_states: boolean[30], "(read-only) States which are being used by controllers"
+#GameObjectSettings.velocity_max -> velocity_max: float "Clamp velocity to this maximum speed"
+#GameObjectSettings.velocity_min -> velocity_min: float "Clamp velocity to this minimum speed (except when totally still)"
+#+ * GameProperty.name -> name: string "Available as GameObject attributes in the game engines python API"
+#GameProperty.show_debug -> show_debug: boolean "Print debug information for this property"
+#+ * GameProperty.type -> type: enum "NO DESCRIPTION"
+#+ * GameProperty|GameBooleanProperty.value -> value: boolean "Property value"
+#+ * GameProperty|GameFloatProperty.value -> value: float "Property value"
+#+ * GameProperty|GameIntProperty.value -> value: int "Property value"
+#+ * GameProperty|GameStringProperty.value -> value: string "Property value"
+#+ * GameProperty|GameTimerProperty.value -> value: float "Property value"
+#+ * GameSoftBodySettings.cluster_iterations -> cluster_iterations: int "Specify the number of cluster iterations"
+#GameSoftBodySettings.collision_margin -> collision_margin: float "Collision margin for soft body. Small value makes the algorithm unstable"
+#+ * GameSoftBodySettings.dynamic_friction -> dynamic_friction: float "Dynamic Friction"
+#GameSoftBodySettings.linear_stiffness -> linear_stiffness: float "Linear stiffness of the soft body links"
+#GameSoftBodySettings.location_iterations -> location_iterations: int "Position solver iterations"
+#GameSoftBodySettings.shape_threshold -> shape_threshold: float "Shape matching threshold"
+#GameSoftBodySettings.use_bending_constraints -> use_bending_constraints: boolean "Enable bending constraints"
+#GameSoftBodySettings.use_cluster_rigid_to_softbody -> use_cluster_rigid_to_softbody: boolean "Enable cluster collision between soft and rigid body"
+#GameSoftBodySettings.use_cluster_soft_to_softbody -> use_cluster_soft_to_softbody: boolean "Enable cluster collision between soft and soft body"
+#GameSoftBodySettings.use_shape_match -> use_shape_match: boolean "Enable soft body shape matching goal"
+#GameSoftBodySettings.weld_threshold -> weld_threshold: float "Welding threshold: distance between nearby vertices to be considered equal => set to 0.0 to disable welding test and speed up scene loading (ok if the mesh has no duplicates)"
+#+ * Header.bl_idname -> bl_idname: string "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 class name is OBJECT_HT_hello, and bl_idname is not set by the script, then bl_idname = OBJECT_HT_hello"
+#+ * Header.bl_space_type -> bl_space_type: enum "The space where the header is going to be used in."
+#+ * Header.layout -> layout: pointer, "(read-only) Defines the structure of the header in the UI."
+#+ * Histogram.mode -> mode: enum "Channels to display when drawing the histogram"
+#+ * ID.library -> library: pointer, "(read-only) Library file the datablock is linked from"
+#+ * ID.name -> name: string "Unique datablock ID name"
+#+ * ID.tag -> tag: boolean "Tools can use this to tag data, (initial state is undefined)"
+#ID.use_fake_user -> use_fake_user: boolean "Saves this datablock even if it has no users"
+#+ * ID.users -> users: int, "(read-only) Number of times this datablock is referenced"
+#+ * IDProperty.collection -> collection: collection, "(read-only)"
+#+ * IDProperty.double -> double: float "NO DESCRIPTION"
+#+ * IDProperty.double_array -> double_array: float[1] "NO DESCRIPTION"
+#+ * IDProperty.float -> float: float "NO DESCRIPTION"
+#+ * IDProperty.float_array -> float_array: float[1] "NO DESCRIPTION"
+#+ * IDProperty.group -> group: pointer, "(read-only)"
+#+ * IDProperty.int -> int: int "NO DESCRIPTION"
+#+ * IDProperty.int_array -> int_array: int[1] "NO DESCRIPTION"
+#+ * IDProperty.string -> string: string "NO DESCRIPTION"
+#+ * IDPropertyGroup.name -> name: string "Unique name used in the code and scripting"
+#+ * IDPropertyGroup|NetRenderJob.name -> name: string "NO DESCRIPTION"
+#+ * IDPropertyGroup|NetRenderSettings.active_blacklisted_slave_index -> active_blacklisted_slave_index: int "NO DESCRIPTION"
+#+ * IDPropertyGroup|NetRenderSettings.active_job_index -> active_job_index: int "NO DESCRIPTION"
+#+ * IDPropertyGroup|NetRenderSettings.active_slave_index -> active_slave_index: int "NO DESCRIPTION"
+#+ * IDPropertyGroup|NetRenderSettings.chunks -> chunks: int "Number of frame to dispatch to each slave in one chunk"
+#+ * IDPropertyGroup|NetRenderSettings.job_category -> job_category: string "Category of the job"
+#+ * IDPropertyGroup|NetRenderSettings.job_id -> job_id: string "id of the last sent render job"
+#+ * IDPropertyGroup|NetRenderSettings.job_name -> job_name: string "Name of the job"
+#+ * IDPropertyGroup|NetRenderSettings.jobs -> jobs: collection, "(read-only)"
+#+ * IDPropertyGroup|NetRenderSettings.mode -> mode: enum "Mode of operation of this instance"
+#+ * IDPropertyGroup|NetRenderSettings.path -> path: string "Path for temporary files"
+#+ * IDPropertyGroup|NetRenderSettings.priority -> priority: int "Priority of the job"
+#+ * IDPropertyGroup|NetRenderSettings.server_address -> server_address: string "IP or name of the master render server"
+#+ * IDPropertyGroup|NetRenderSettings.server_port -> server_port: int "port of the master render server"
+#+ * IDPropertyGroup|NetRenderSettings.slaves -> slaves: collection, "(read-only)"
+#+ * IDPropertyGroup|NetRenderSettings.slaves_blacklist -> slaves_blacklist: collection, "(read-only)"
+#IDPropertyGroup|NetRenderSettings.use_master_broadcast -> use_master_broadcast: boolean "broadcast master server address on local network"
+#IDPropertyGroup|NetRenderSettings.use_master_clear -> use_master_clear: boolean "delete saved files on exit"
+#IDPropertyGroup|NetRenderSettings.use_slave_clear -> use_slave_clear: boolean "delete downloaded files on exit"
+#IDPropertyGroup|NetRenderSettings.use_slave_output_log -> use_slave_output_log: boolean "Output render text log to console as well as sending it to the master"
+#IDPropertyGroup|NetRenderSettings.use_slave_thumb -> use_slave_thumb: boolean "Generate thumbnails on slaves instead of master"
+#+ * IDPropertyGroup|NetRenderSlave.name -> name: string "NO DESCRIPTION"
+#+ * IDPropertyGroup|OperatorFileListElement.name -> name: string "the name of a file or directory within a file list"
+#+ * IDPropertyGroup|OperatorMousePath.loc -> loc: float[2] "Mouse location"
+#+ * IDPropertyGroup|OperatorMousePath.time -> time: float "Time of mouse location"
+#+ * IDPropertyGroup|OperatorStrokeElement.location -> location: float[3] "NO DESCRIPTION"
+#+ * IDPropertyGroup|OperatorStrokeElement.mouse -> mouse: float[2] "NO DESCRIPTION"
+#+ * IDPropertyGroup|OperatorStrokeElement.pen_flip -> pen_flip: boolean "NO DESCRIPTION"
+#+ * IDPropertyGroup|OperatorStrokeElement.pressure -> pressure: float "Tablet pressure"
+#+ * IDPropertyGroup|OperatorStrokeElement.time -> time: float "NO DESCRIPTION"
+#+ * IDPropertyGroup|PoseTemplate.name -> name: string "NO DESCRIPTION"
+#+ * IDPropertyGroup|PoseTemplateSettings.active_template_index -> active_template_index: int "NO DESCRIPTION"
+#+ * IDPropertyGroup|PoseTemplateSettings.templates -> templates: collection, "(read-only)"
+#IDPropertyGroup|PoseTemplateSettings.use_generate_deform_rig -> use_generate_deform_rig: boolean "Create a copy of the metarig, constrainted by the generated rig"
+#+ * ID|Action.fcurves -> fcurves: collection, "(read-only) The individual F-Curves that make up the Action"
+#+ * ID|Action.groups -> groups: collection, "(read-only) Convenient groupings of F-Curves"
+#+ * ID|Action.pose_markers -> pose_markers: collection, "(read-only) Markers specific to this Action, for labeling poses"
+#+ * ID|Armature.animation_data -> animation_data: pointer, "(read-only) Animation data for this datablock"
+#+ * ID|Armature.bones -> bones: collection, "(read-only)"
+#ID|Armature.draw_type -> draw_type: enum "NO DESCRIPTION"
+#+ * ID|Armature.edit_bones -> edit_bones: collection, "(read-only)"
+#+ * ID|Armature.ghost_frame_end -> ghost_frame_end: int "End frame of range of Ghosts to display (not for Around Current Frame Onion-skinning method)"
+#+ * ID|Armature.ghost_frame_start -> ghost_frame_start: int "Starting frame of range of Ghosts to display (not for Around Current Frame Onion-skinning method)"
+#+ * ID|Armature.ghost_size -> ghost_size: int "Frame step for Ghosts (not for On Keyframes Onion-skinning method)"
+#+ * ID|Armature.ghost_step -> ghost_step: int "Number of frame steps on either side of current frame to show as ghosts (only for Around Current Frame Onion-skinning method)"
+#+ * ID|Armature.ghost_type -> ghost_type: enum "Method of Onion-skinning for active Action"
+#ID|Armature.layers -> layers: boolean[32] "Armature layer visibility"
+#ID|Armature.layers_protected -> layers_protected: boolean[32] "Protected layers in Proxy Instances are restored to Proxy settings on file reload and undo"
+#+ * ID|Armature.pose_position -> pose_position: enum "Show armature in binding pose or final posed state"
+#ID|Armature.show_axes -> show_axes: boolean "Draw bone axes"
+#ID|Armature.show_bone_custom_shapes -> show_bone_custom_shapes: boolean "Draw bones with their custom shapes"
+#ID|Armature.show_group_colors -> show_group_colors: boolean "Draw bone group colors"
+#ID|Armature.show_names -> show_names: boolean "Draw bone names"
+#ID|Armature.show_only_ghost_selected -> show_only_ghost_selected: boolean "NO DESCRIPTION"
+#ID|Armature.use_auto_ik -> use_auto_ik: boolean "Add temporaral IK constraints while grabbing bones in Pose Mode"
+#ID|Armature.use_deform_delay -> use_deform_delay: boolean "Dont deform children when manipulating bones in Pose Mode"
+#ID|Armature.use_deform_envelopes -> use_deform_envelopes: boolean "Enable Bone Envelopes when defining deform"
+#ID|Armature.use_deform_preserve_volume -> use_deform_preserve_volume: boolean "Enable deform rotation with Quaternions"
+#ID|Armature.use_deform_vertex_groups -> use_deform_vertex_groups: boolean "Enable Vertex Groups when defining deform"
+#ID|Armature.use_mirror_x -> use_mirror_x: boolean "Apply changes to matching bone on opposite side of X-Axis"
+#ID|Brush.auto_smooth_factor -> auto_smooth_factor: float "Amount of smoothing to automatically apply to each stroke"
+#+ * ID|Brush.blend -> blend: enum "Brush blending mode"
+#+ * ID|Brush.clone_alpha -> clone_alpha: float "Opacity of clone image display"
+#+ * ID|Brush.clone_image -> clone_image: pointer "Image for clone tool"
+#+ * ID|Brush.clone_offset -> clone_offset: float[2] "NO DESCRIPTION"
+#+ * ID|Brush.color -> color: float[3] "NO DESCRIPTION"
+#+ * ID|Brush.crease_pinch_factor -> crease_pinch_factor: float "How much the crease brush pinches"
+#ID|Brush.cursor_color_add -> cursor_color_add: float[3] "Color of cursor when adding"
+#ID|Brush.cursor_color_subtract -> cursor_color_subtract: float[3] "Color of cursor when subtracting"
+#+ * ID|Brush.curve -> curve: pointer, "(read-only) Editable falloff curve"
+#+ * ID|Brush.direction -> direction: enum "NO DESCRIPTION"
+#+ * ID|Brush.icon_filepath -> icon_filepath: string "File path to brush icon"
+#+ * ID|Brush.imagepaint_tool -> imagepaint_tool: enum "NO DESCRIPTION"
+#+ * ID|Brush.jitter -> jitter: float "Jitter the position of the brush while painting"
+#+ * ID|Brush.normal_weight -> normal_weight: float "How much grab will pull vertexes out of surface during a grab"
+#+ * ID|Brush.plane_offset -> plane_offset: float "Adjusts plane on which the brush acts towards or away from the object surface"
+#+ * ID|Brush.plane_trim -> plane_trim: float "If a vertex is further from offset plane than this then it is not affected"
+#+ * ID|Brush.rate -> rate: float "Interval between paints for Airbrush"
+#+ * ID|Brush.sculpt_plane -> sculpt_plane: enum "NO DESCRIPTION"
+#+ * ID|Brush.sculpt_tool -> sculpt_tool: enum "NO DESCRIPTION"
+#+ * ID|Brush.size -> size: int "Radius of the brush in pixels"
+#+ * ID|Brush.smooth_stroke_factor -> smooth_stroke_factor: float "Higher values give a smoother stroke"
+#+ * ID|Brush.smooth_stroke_radius -> smooth_stroke_radius: int "Minimum distance from last point before stroke continues"
+#ID|Brush.spacing -> spacing: int "Spacing between brush daubs as a percentage of brush diameter"
+#+ * ID|Brush.strength -> strength: float "How powerful the effect of the brush is when applied"
+#+ * ID|Brush.stroke_method -> stroke_method: enum "NO DESCRIPTION"
+#+ * ID|Brush.texture -> texture: pointer "NO DESCRIPTION"
+#ID|Brush.texture_angle_source_no_random -> texture_angle_source_no_random: enum "NO DESCRIPTION"
+#ID|Brush.texture_angle_source_random -> texture_angle_source_random: enum "NO DESCRIPTION"
+#+ * ID|Brush.texture_overlay_alpha -> texture_overlay_alpha: int "NO DESCRIPTION"
+#+ * ID|Brush.texture_sample_bias -> texture_sample_bias: float "Value added to texture samples"
+#+ * ID|Brush.texture_slot -> texture_slot: pointer, "(read-only)"
+#+ * ID|Brush.unprojected_radius -> unprojected_radius: float "Radius of brush in Blender units"
+#+ * ID|Brush.use_accumulate -> use_accumulate: boolean "Accumulate stroke dabs on top of each other"
+#+ * ID|Brush.use_adaptive_space -> use_adaptive_space: boolean "Space daubs according to surface orientation instead of screen space"
+#+ * ID|Brush.use_airbrush -> use_airbrush: boolean "Keep applying paint effect while holding mouse (spray)"
+#+ * ID|Brush.use_alpha -> use_alpha: boolean "When this is disabled, lock alpha while painting"
+#+ * ID|Brush.use_anchor -> use_anchor: boolean "Keep the brush anchored to the initial location"
+#+ * ID|Brush.use_custom_icon -> use_custom_icon: boolean "Set the brush icon from an image file"
+#ID|Brush.use_edge_to_edge -> use_edge_to_edge: boolean "Drag anchor brush from edge-to-edge"
+#+ * ID|Brush.use_frontface -> use_frontface: boolean "Brush only affects vertexes that face the viewer"
+#+ * ID|Brush.use_inverse_smooth_pressure -> use_inverse_smooth_pressure: boolean "Lighter pressure causes more smoothing to be applied"
+#+ * ID|Brush.use_locked_size -> use_locked_size: boolean "When locked brush stays same size relative to object; when unlocked brush size is given in pixels"
+#+ * ID|Brush.use_offset_pressure -> use_offset_pressure: boolean "Enable tablet pressure sensitivity for offset"
+#+ * ID|Brush.use_original_normal -> use_original_normal: boolean "When locked keep using normal of surface where stroke was initiated"
+#+ * ID|Brush.use_paint_sculpt -> use_paint_sculpt: boolean "Use this brush in sculpt mode"
+#+ * ID|Brush.use_paint_texture -> use_paint_texture: boolean "Use this brush in texture paint mode"
+#+ * ID|Brush.use_paint_vertex -> use_paint_vertex: boolean "Use this brush in vertex paint mode"
+#+ * ID|Brush.use_paint_weight -> use_paint_weight: boolean "Use this brush in weight paint mode"
+#+ * ID|Brush.use_persistent -> use_persistent: boolean "Sculpts on a persistent layer of the mesh"
+#+ * ID|Brush.use_plane_trim -> use_plane_trim: boolean "Enable Plane Trim"
+#ID|Brush.use_pressure_jitter -> use_pressure_jitter: boolean "Enable tablet pressure sensitivity for jitter"
+#ID|Brush.use_pressure_size -> use_pressure_size: boolean "Enable tablet pressure sensitivity for size"
+#ID|Brush.use_pressure_spacing -> use_pressure_spacing: boolean "Enable tablet pressure sensitivity for spacing"
+#ID|Brush.use_pressure_strength -> use_pressure_strength: boolean "Enable tablet pressure sensitivity for strength"
+#+ * ID|Brush.use_rake -> use_rake: boolean "Rotate the brush texture to match the stroke direction"
+#+ * ID|Brush.use_random_rotation -> use_random_rotation: boolean "Rotate the brush texture at random"
+#ID|Brush.use_restore_mesh -> use_restore_mesh: boolean "Allows a single dot to be carefully positioned"
+#+ * ID|Brush.use_smooth_stroke -> use_smooth_stroke: boolean "Brush lags behind mouse and follows a smoother path"
+#+ * ID|Brush.use_space -> use_space: boolean "Limit brush application to the distance specified by spacing"
+#+ * ID|Brush.use_space_atten -> use_space_atten: boolean "Automatically adjusts strength to give consistent results for different spacings"
+#+ * ID|Brush.use_texture_overlay -> use_texture_overlay: boolean "Show texture in viewport"
+#+ * ID|Brush.use_wrap -> use_wrap: boolean "Enable torus wrapping while painting"
+#+ * ID|Brush.vertexpaint_tool -> vertexpaint_tool: enum "NO DESCRIPTION"
+#+ * ID|Camera.angle -> angle: float "Perspective Camera lens field of view in degrees"
+#+ * ID|Camera.animation_data -> animation_data: pointer, "(read-only) Animation data for this datablock"
+#+ * ID|Camera.clip_end -> clip_end: float "Camera far clipping distance"
+#+ * ID|Camera.clip_start -> clip_start: float "Camera near clipping distance"
+#+ * ID|Camera.dof_distance -> dof_distance: float "Distance to the focus point for depth of field"
+#+ * ID|Camera.dof_object -> dof_object: pointer "Use this object to define the depth of field focal point"
+#+ * ID|Camera.draw_size -> draw_size: float "Apparent size of the Camera object in the 3D View"
+#+ * ID|Camera.lens -> lens: float "Perspective Camera lens value in millimeters"
+#+ * ID|Camera.lens_unit -> lens_unit: enum "Unit to edit lens in for the user interface"
+#+ * ID|Camera.ortho_scale -> ortho_scale: float "Orthographic Camera scale (similar to zoom)"
+#+ * ID|Camera.passepartout_alpha -> passepartout_alpha: float "Opacity (alpha) of the darkened overlay in Camera view"
+#+ * ID|Camera.shift_x -> shift_x: float "Perspective Camera horizontal shift"
+#+ * ID|Camera.shift_y -> shift_y: float "Perspective Camera vertical shift"
+#+ * ID|Camera.show_limits -> show_limits: boolean "Draw the clipping range and focus point on the camera"
+#+ * ID|Camera.show_mist -> show_mist: boolean "Draw a line from the Camera to indicate the mist area"
+#+ * ID|Camera.show_name -> show_name: boolean "Show the active Cameras name in Camera view"
+#+ * ID|Camera.show_passepartout -> show_passepartout: boolean "Show a darkened overlay outside the image area in Camera view"
+#+ * ID|Camera.show_title_safe -> show_title_safe: boolean "Show indicators for the title safe zone in Camera view"
+#+ * ID|Camera.type -> type: enum "Camera types"
+#ID|Camera.use_panorama -> use_panorama: boolean "Render the scene with a cylindrical camera for pseudo-fisheye lens effects"
+#+ * ID|Curve.animation_data -> animation_data: pointer, "(read-only) Animation data for this datablock"
+#+ * ID|Curve.bevel_depth -> bevel_depth: float "Bevel depth when not using a bevel object"
+#+ * ID|Curve.bevel_object -> bevel_object: pointer "Curve object name that defines the bevel shape"
+#+ * ID|Curve.bevel_resolution -> bevel_resolution: int "Bevel resolution when depth is non-zero and no specific bevel object has been defined"
+#+ * ID|Curve.dimensions -> dimensions: enum "Select 2D or 3D curve type"
+#+ * ID|Curve.eval_time -> eval_time: float "Parametric position along the length of the curve that Objects following it should be at. Position is evaluated by dividing by the Path Length value"
+#+ * ID|Curve.extrude -> extrude: float "Amount of curve extrusion when not using a bevel object"
+#+ * ID|Curve.materials -> materials: collection, "(read-only)"
+#ID|Curve.offset -> offset: float "Scale the original width (1.0) based on given factor"
+#ID|Curve.path_duration -> path_duration: int "The number of frames that are needed to traverse the path, defining the maximum value for the Evaluation Time setting"
+#+ * ID|Curve.render_resolution_u -> render_resolution_u: int "Surface resolution in U direction used while rendering. Zero skips this property"
+#+ * ID|Curve.render_resolution_v -> render_resolution_v: int "Surface resolution in V direction used while rendering. Zero skips this property"
+#+ * ID|Curve.resolution_u -> resolution_u: int "Surface resolution in U direction"
+#+ * ID|Curve.resolution_v -> resolution_v: int "Surface resolution in V direction"
+#+ * ID|Curve.shape_keys -> shape_keys: pointer, "(read-only)"
+#ID|Curve.show_handles -> show_handles: boolean "Display bezier handles in editmode"
+#ID|Curve.show_normal_face -> show_normal_face: boolean "Display 3D curve normals in editmode"
+#+ * ID|Curve.splines -> splines: collection, "(read-only) Collection of splines in this curve data object"
+#+ * ID|Curve.taper_object -> taper_object: pointer "Curve object name that defines the taper (width)"
+#ID|Curve.texspace_location -> texspace_location: float[3] "Texture space location"
+#+ * ID|Curve.texspace_size -> texspace_size: float[3] "Texture space size"
+#+ * ID|Curve.twist_mode -> twist_mode: enum "The type of tilt calculation for 3D Curves"
+#+ * ID|Curve.twist_smooth -> twist_smooth: float "Smoothing iteration for tangents"
+#ID|Curve.use_auto_texspace -> use_auto_texspace: boolean "Adjusts active objects texture space automatically when transforming object"
+#+ * ID|Curve.use_deform_bounds -> use_deform_bounds: boolean "Use the mesh bounds to clamp the deformation"
+#ID|Curve.use_fill_back -> use_fill_back: boolean "Draw filled back for extruded/beveled curves"
+#ID|Curve.use_fill_deform -> use_fill_deform: boolean "Fill curve after applying deformation"
+#ID|Curve.use_fill_front -> use_fill_front: boolean "Draw filled front for extruded/beveled curves"
+#ID|Curve.use_map_on_length -> use_map_on_length: boolean "Generate texture mapping coordinates following the curve direction, rather than the local bounding box"
+#+ * ID|Curve.use_path -> use_path: boolean "Enable the curve to become a translation path"
+#+ * ID|Curve.use_path_follow -> use_path_follow: boolean "Make curve path children to rotate along the path"
+#+ * ID|Curve.use_radius -> use_radius: boolean "Option for paths: apply the curve radius with path following it and deforming"
+#+ * ID|Curve.use_stretch -> use_stretch: boolean "Option for curve-deform: makes deformed child to stretch along entire path"
+#+ * ID|Curve.use_time_offset -> use_time_offset: boolean "Children will use TimeOffs value as path distance offset"
+#ID|Curve|SurfaceCurve.use_map_on_length -> use_map_on_length: boolean "Generate texture mapping coordinates following the curve direction, rather than the local bounding box"
+#MAKE COLLECTION ATTR * ID|Curve|TextCurve.active_textbox -> active_textbox: int "NO DESCRIPTION"
+#ID|Curve|TextCurve.align -> align: enum "Text align from the object center"
+#+ * ID|Curve|TextCurve.body -> body: string "contents of this text object"
+#+ * ID|Curve|TextCurve.body_format -> body_format: collection, "(read-only) Stores the style of each character"
+#+ * ID|Curve|TextCurve.edit_format -> edit_format: pointer, "(read-only) Editing settings character formatting"
+#+ * ID|Curve|TextCurve.family -> family: string "Use Blender Objects as font characters. Give font objects a common name followed by the character it represents, eg. familya, familyb etc, and turn on Verts Duplication"
+#ID|Curve|TextCurve.follow_curve -> follow_curve: pointer "Curve deforming text object"
+#+ * ID|Curve|TextCurve.font -> font: pointer "NO DESCRIPTION"
+#+ * ID|Curve|TextCurve.offset_x -> offset_x: float "Horizontal offset from the object origin"
+#+ * ID|Curve|TextCurve.offset_y -> offset_y: float "Vertical offset from the object origin"
+#+ * ID|Curve|TextCurve.shear -> shear: float "Italic angle of the characters"
+#ID|Curve|TextCurve.size -> size: float "NO DESCRIPTION"
+#+ * ID|Curve|TextCurve.small_caps_scale -> small_caps_scale: float "Scale of small capitals"
+#ID|Curve|TextCurve.space_character -> space_character: float "NO DESCRIPTION"
+#ID|Curve|TextCurve.space_line -> space_line: float "NO DESCRIPTION"
+#ID|Curve|TextCurve.space_word -> space_word: float "NO DESCRIPTION"
+#ID|Curve|TextCurve.text_boxes -> text_boxes: collection, "(read-only)"
+#ID|Curve|TextCurve.underline_height -> underline_height: float "NO DESCRIPTION"
+#ID|Curve|TextCurve.underline_position -> underline_position: float "Vertical position of underline"
+#ID|Curve|TextCurve.use_fast_edit -> use_fast_edit: boolean "Dont fill polygons while editing"
+#ID|Curve|TextCurve.use_map_on_length -> use_map_on_length: boolean "Generate texture mapping coordinates following the curve direction, rather than the local bounding box"
+#+ * ID|GreasePencil.draw_mode -> draw_mode: enum "NO DESCRIPTION"
+#+ * ID|GreasePencil.layers -> layers: collection, "(read-only)"
+#+ * ID|GreasePencil.use_stroke_endpoints -> use_stroke_endpoints: boolean "Only use the first and last parts of the stroke for snapping"
+#+ * ID|Group.dupli_offset -> dupli_offset: float[3] "Offset from the origin to use when instancing as DupliGroup"
+#ID|Group.layers -> layers: boolean[20] "Layers visible when this groups is instanced as a dupli"
+#+ * ID|Group.objects -> objects: collection, "(read-only) A collection of this groups objects"
+#+ * ID|Image.bindcode -> bindcode: int, "(read-only) OpenGL bindcode"
+#+ * ID|Image.depth -> depth: int, "(read-only) Image bit depth"
+#+ * ID|Image.display_aspect -> display_aspect: float[2] "Display Aspect for this image, does not affect rendering"
+#+ * ID|Image.field_order -> field_order: enum "Order of video fields. Select which lines are displayed first"
+#+ * ID|Image.file_format -> file_format: enum "Format used for re-saving this file"
+#+ * ID|Image.filepath -> filepath: string "Image/Movie file name"
+#+ * ID|Image.filepath_raw -> filepath_raw: string "Image/Movie file name (without data refreshing)"
+#ID|Image.fps -> fps: int "Speed of the animation in frames per second"
+#ID|Image.frame_end -> frame_end: int "End frame of an animated texture"
+#ID|Image.frame_start -> frame_start: int "Start frame of an animated texture"
+#+ * ID|Image.generated_height -> generated_height: int "Generated image height"
+#+ * ID|Image.generated_type -> generated_type: enum "Generated image type"
+#+ * ID|Image.generated_width -> generated_width: int "Generated image width"
+#+ * ID|Image.has_data -> has_data: boolean, "(read-only) True if this image has data"
+#ID|Image.is_dirty -> is_dirty: boolean, "(read-only) Image has changed and is not saved"
+#+ * ID|Image.mapping -> mapping: enum "Mapping type to use for this image in the game engine"
+#+ * ID|Image.packed_file -> packed_file: pointer, "(read-only)"
+#+ * ID|Image.size -> size: int[2], "(read-only) Width and height in pixels, zero when image data cant be loaded"
+#+ * ID|Image.source -> source: enum "Where the image comes from"
+#+ * ID|Image.tiles_x -> tiles_x: int "Degree of repetition in the X direction"
+#+ * ID|Image.tiles_y -> tiles_y: int "Degree of repetition in the Y direction"
+#+ * ID|Image.type -> type: enum, "(read-only) How to generate the image"
+#ID|Image.use_animation -> use_animation: boolean "Use as animated texture in the game engine"
+#ID|Image.use_clamp_x -> use_clamp_x: boolean "Disable texture repeating horizontally"
+#ID|Image.use_clamp_y -> use_clamp_y: boolean "Disable texture repeating vertically"
+#ID|Image.use_fields -> use_fields: boolean "Use fields of the image"
+#ID|Image.use_premultiply -> use_premultiply: boolean "Convert RGB from key alpha to premultiplied alpha"
+#ID|Image.use_tiles -> use_tiles: boolean "Use of tilemode for faces (default shift-LMB to pick the tile for selected faces)"
+#+ * ID|Key.animation_data -> animation_data: pointer, "(read-only) Animation data for this datablock"
+#+ * ID|Key.keys -> keys: collection, "(read-only) Shape keys"
+#+ * ID|Key.reference_key -> reference_key: pointer, "(read-only)"
+#+ * ID|Key.slurph -> slurph: int "Creates a delay in amount of frames in applying keypositions, first vertex goes first"
+#ID|Key.use_relative -> use_relative: boolean "Makes shape keys relative"
+#+ * ID|Key.user -> user: pointer, "(read-only) Datablock using these shape keys"
+#+ * ID|Lamp.active_texture -> active_texture: pointer "Active texture slot being displayed"
+#+ * ID|Lamp.active_texture_index -> active_texture_index: int "Index of active texture slot"
+#+ * ID|Lamp.animation_data -> animation_data: pointer, "(read-only) Animation data for this datablock"
+#+ * ID|Lamp.color -> color: float[3] "Light color"
+#+ * ID|Lamp.distance -> distance: float "Falloff distance - the light is at half the original intensity at this point"
+#+ * ID|Lamp.energy -> energy: float "Amount of light that the lamp emits"
+#+ * ID|Lamp.texture_slots -> texture_slots: collection, "(read-only) Texture slots defining the mapping and influence of textures"
+#+ * ID|Lamp.type -> type: enum "Type of Lamp"
+#ID|Lamp.use_diffuse -> use_diffuse: boolean "Lamp does diffuse shading"
+#ID|Lamp.use_negative -> use_negative: boolean "Lamp casts negative light"
+#ID|Lamp.use_own_layer -> use_own_layer: boolean "Illuminates objects only on the same layer the lamp is on"
+#ID|Lamp.use_specular -> use_specular: boolean "Lamp creates specular highlights"
+#+ * ID|Lamp|AreaLamp.gamma -> gamma: float "Light gamma correction value"
+#+ * ID|Lamp|AreaLamp.shadow_adaptive_threshold -> shadow_adaptive_threshold: float "Threshold for Adaptive Sampling (Raytraced shadows)"
+#+ * ID|Lamp|AreaLamp.shadow_color -> shadow_color: float[3] "Color of shadows cast by the lamp"
+#+ * ID|Lamp|AreaLamp.shadow_method -> shadow_method: enum "Method to compute lamp shadow with"
+#ID|Lamp|AreaLamp.shadow_ray_sample_method -> shadow_ray_sample_method: enum "Method for generating shadow samples: Adaptive QMC is fastest, Constant QMC is less noisy but slower"
+#+ * ID|Lamp|AreaLamp.shadow_ray_samples_x -> shadow_ray_samples_x: int "Amount of samples taken extra (samples x samples)"
+#+ * ID|Lamp|AreaLamp.shadow_ray_samples_y -> shadow_ray_samples_y: int "Amount of samples taken extra (samples x samples)"
+#+ * ID|Lamp|AreaLamp.shadow_soft_size -> shadow_soft_size: float "Light size for ray shadow sampling (Raytraced shadows)"
+#+ * ID|Lamp|AreaLamp.shape -> shape: enum "Shape of the area lamp"
+#+ * ID|Lamp|AreaLamp.size -> size: float "Size of the area of the area Lamp, X direction size for Rectangle shapes"
+#+ * ID|Lamp|AreaLamp.size_y -> size_y: float "Size of the area of the area Lamp in the Y direction for Rectangle shapes"
+#ID|Lamp|AreaLamp.use_dither -> use_dither: boolean "Use 2x2 dithering for sampling (Constant Jittered sampling)"
+#ID|Lamp|AreaLamp.use_jitter -> use_jitter: boolean "Use noise for sampling (Constant Jittered sampling)"
+#ID|Lamp|AreaLamp.use_only_shadow -> use_only_shadow: boolean "Causes light to cast shadows only without illuminating objects"
+#ID|Lamp|AreaLamp.use_shadow_layer -> use_shadow_layer: boolean "Causes only objects on the same layer to cast shadows"
+#ID|Lamp|AreaLamp.use_umbra -> use_umbra: boolean "Emphasize parts that are fully shadowed (Constant Jittered sampling)"
+#+ * ID|Lamp|PointLamp.falloff_curve -> falloff_curve: pointer, "(read-only) Custom Lamp Falloff Curve"
+#+ * ID|Lamp|PointLamp.falloff_type -> falloff_type: enum "Intensity Decay with distance"
+#+ * ID|Lamp|PointLamp.linear_attenuation -> linear_attenuation: float "Linear distance attenuation"
+#+ * ID|Lamp|PointLamp.quadratic_attenuation -> quadratic_attenuation: float "Quadratic distance attenuation"
+#+ * ID|Lamp|PointLamp.shadow_adaptive_threshold -> shadow_adaptive_threshold: float "Threshold for Adaptive Sampling (Raytraced shadows)"
+#+ * ID|Lamp|PointLamp.shadow_color -> shadow_color: float[3] "Color of shadows cast by the lamp"
+#+ * ID|Lamp|PointLamp.shadow_method -> shadow_method: enum "Method to compute lamp shadow with"
+#ID|Lamp|PointLamp.shadow_ray_sample_method -> shadow_ray_sample_method: enum "Method for generating shadow samples: Adaptive QMC is fastest, Constant QMC is less noisy but slower"
+#+ * ID|Lamp|PointLamp.shadow_ray_samples -> shadow_ray_samples: int "Amount of samples taken extra (samples x samples)"
+#+ * ID|Lamp|PointLamp.shadow_soft_size -> shadow_soft_size: float "Light size for ray shadow sampling (Raytraced shadows)"
+#ID|Lamp|PointLamp.use_only_shadow -> use_only_shadow: boolean "Causes light to cast shadows only without illuminating objects"
+#ID|Lamp|PointLamp.use_shadow_layer -> use_shadow_layer: boolean "Causes only objects on the same layer to cast shadows"
+#ID|Lamp|PointLamp.use_sphere -> use_sphere: boolean "Sets light intensity to zero beyond lamp distance"
+#+ * ID|Lamp|SpotLamp.compression_threshold -> compression_threshold: float "Deep shadow map compression threshold"
+#+ * ID|Lamp|SpotLamp.falloff_curve -> falloff_curve: pointer, "(read-only) Custom Lamp Falloff Curve"
+#+ * ID|Lamp|SpotLamp.falloff_type -> falloff_type: enum "Intensity Decay with distance"
+#+ * ID|Lamp|SpotLamp.halo_intensity -> halo_intensity: float "Brightness of the spotlights halo cone (Buffer Shadows)"
+#+ * ID|Lamp|SpotLamp.halo_step -> halo_step: int "Volumetric halo sampling frequency"
+#+ * ID|Lamp|SpotLamp.linear_attenuation -> linear_attenuation: float "Linear distance attenuation"
+#+ * ID|Lamp|SpotLamp.quadratic_attenuation -> quadratic_attenuation: float "Quadratic distance attenuation"
+#+ * ID|Lamp|SpotLamp.shadow_adaptive_threshold -> shadow_adaptive_threshold: float "Threshold for Adaptive Sampling (Raytraced shadows)"
+#+ * ID|Lamp|SpotLamp.shadow_buffer_bias -> shadow_buffer_bias: float "Shadow buffer sampling bias"
+#+ * ID|Lamp|SpotLamp.shadow_buffer_clip_end -> shadow_buffer_clip_end: float "Shadow map clip end beyond which objects will not generate shadows"
+#+ * ID|Lamp|SpotLamp.shadow_buffer_clip_start -> shadow_buffer_clip_start: float "Shadow map clip start: objects closer will not generate shadows"
+#+ * ID|Lamp|SpotLamp.shadow_buffer_samples -> shadow_buffer_samples: int "Number of shadow buffer samples"
+#+ * ID|Lamp|SpotLamp.shadow_buffer_size -> shadow_buffer_size: int "Resolution of the shadow buffer, higher values give crisper shadows but use more memory"
+#+ * ID|Lamp|SpotLamp.shadow_buffer_soft -> shadow_buffer_soft: float "Size of shadow buffer sampling area"
+#+ * ID|Lamp|SpotLamp.shadow_buffer_type -> shadow_buffer_type: enum "Type of shadow buffer"
+#+ * ID|Lamp|SpotLamp.shadow_color -> shadow_color: float[3] "Color of shadows cast by the lamp"
+#+ * ID|Lamp|SpotLamp.shadow_filter_type -> shadow_filter_type: enum "Type of shadow filter (Buffer Shadows)"
+#+ * ID|Lamp|SpotLamp.shadow_method -> shadow_method: enum "Method to compute lamp shadow with"
+#ID|Lamp|SpotLamp.shadow_ray_sample_method -> shadow_ray_sample_method: enum "Method for generating shadow samples: Adaptive QMC is fastest, Constant QMC is less noisy but slower"
+#+ * ID|Lamp|SpotLamp.shadow_ray_samples -> shadow_ray_samples: int "Amount of samples taken extra (samples x samples)"
+#+ * ID|Lamp|SpotLamp.shadow_sample_buffers -> shadow_sample_buffers: enum "Number of shadow buffers to render for better AA, this increases memory usage"
+#+ * ID|Lamp|SpotLamp.shadow_soft_size -> shadow_soft_size: float "Light size for ray shadow sampling (Raytraced shadows)"
+#+ * ID|Lamp|SpotLamp.show_cone -> show_cone: boolean "Draw transparent cone in 3D view to visualize which objects are contained in it"
+#+ * ID|Lamp|SpotLamp.spot_blend -> spot_blend: float "The softness of the spotlight edge"
+#+ * ID|Lamp|SpotLamp.spot_size -> spot_size: float "Angle of the spotlight beam in degrees"
+#ID|Lamp|SpotLamp.use_auto_clip_end -> use_auto_clip_end: boolean "Automatic calculation of clipping-end, based on visible vertices"
+#ID|Lamp|SpotLamp.use_auto_clip_start -> use_auto_clip_start: boolean "Automatic calculation of clipping-start, based on visible vertices"
+#ID|Lamp|SpotLamp.use_halo -> use_halo: boolean "Renders spotlight with a volumetric halo (Buffer Shadows)"
+#ID|Lamp|SpotLamp.use_only_shadow -> use_only_shadow: boolean "Causes light to cast shadows only without illuminating objects"
+#ID|Lamp|SpotLamp.use_shadow_layer -> use_shadow_layer: boolean "Causes only objects on the same layer to cast shadows"
+#ID|Lamp|SpotLamp.use_sphere -> use_sphere: boolean "Sets light intensity to zero beyond lamp distance"
+#ID|Lamp|SpotLamp.use_square -> use_square: boolean "Casts a square spot light shape"
+#+ * ID|Lamp|SunLamp.shadow_adaptive_threshold -> shadow_adaptive_threshold: float "Threshold for Adaptive Sampling (Raytraced shadows)"
+#+ * ID|Lamp|SunLamp.shadow_color -> shadow_color: float[3] "Color of shadows cast by the lamp"
+#+ * ID|Lamp|SunLamp.shadow_method -> shadow_method: enum "Method to compute lamp shadow with"
+#ID|Lamp|SunLamp.shadow_ray_sample_method -> shadow_ray_sample_method: enum "Method for generating shadow samples: Adaptive QMC is fastest, Constant QMC is less noisy but slower"
+#+ * ID|Lamp|SunLamp.shadow_ray_samples -> shadow_ray_samples: int "Amount of samples taken extra (samples x samples)"
+#+ * ID|Lamp|SunLamp.shadow_soft_size -> shadow_soft_size: float "Light size for ray shadow sampling (Raytraced shadows)"
+#+ * ID|Lamp|SunLamp.sky -> sky: pointer, "(read-only) Sky related settings for sun lamps"
+#ID|Lamp|SunLamp.use_only_shadow -> use_only_shadow: boolean "Causes light to cast shadows only without illuminating objects"
+#ID|Lamp|SunLamp.use_shadow_layer -> use_shadow_layer: boolean "Causes only objects on the same layer to cast shadows"
+#+ * ID|Lattice.interpolation_type_u -> interpolation_type_u: enum "NO DESCRIPTION"
+#+ * ID|Lattice.interpolation_type_v -> interpolation_type_v: enum "NO DESCRIPTION"
+#+ * ID|Lattice.interpolation_type_w -> interpolation_type_w: enum "NO DESCRIPTION"
+#+ * ID|Lattice.points -> points: collection, "(read-only) Points of the lattice"
+#+ * ID|Lattice.points_u -> points_u: int "Points in U direction (cant be changed when there are shape keys)"
+#+ * ID|Lattice.points_v -> points_v: int "Points in V direction (cant be changed when there are shape keys)"
+#+ * ID|Lattice.points_w -> points_w: int "Points in W direction (cant be changed when there are shape keys)"
+#+ * ID|Lattice.shape_keys -> shape_keys: pointer, "(read-only)"
+#ID|Lattice.use_outside -> use_outside: boolean "Only draw, and take into account, the outer vertices"
+#+ * ID|Lattice.vertex_group -> vertex_group: string "Vertex group to apply the influence of the lattice"
+#+ * ID|Library.filepath -> filepath: string "Path to the library .blend file"
+#+ * ID|Library.parent -> parent: pointer, "(read-only)"
+#+ * ID|Material.active_node_material -> active_node_material: pointer "Active node material"
+#+ * ID|Material.active_texture -> active_texture: pointer "Active texture slot being displayed"
+#+ * ID|Material.active_texture_index -> active_texture_index: int "Index of active texture slot"
+#+ * ID|Material.alpha -> alpha: float "Alpha transparency of the material"
+#+ * ID|Material.ambient -> ambient: float "Amount of global ambient color the material receives"
+#+ * ID|Material.animation_data -> animation_data: pointer, "(read-only) Animation data for this datablock"
+#+ * ID|Material.darkness -> darkness: float "Minnaert darkness"
+#+ * ID|Material.diffuse_color -> diffuse_color: float[3] "NO DESCRIPTION"
+#+ * ID|Material.diffuse_fresnel -> diffuse_fresnel: float "Power of Fresnel"
+#+ * ID|Material.diffuse_fresnel_factor -> diffuse_fresnel_factor: float "Blending factor of Fresnel"
+#+ * ID|Material.diffuse_intensity -> diffuse_intensity: float "Amount of diffuse reflection"
+#+ * ID|Material.diffuse_ramp -> diffuse_ramp: pointer, "(read-only) Color ramp used to affect diffuse shading"
+#+ * ID|Material.diffuse_ramp_blend -> diffuse_ramp_blend: enum "NO DESCRIPTION"
+#+ * ID|Material.diffuse_ramp_factor -> diffuse_ramp_factor: float "Blending factor (also uses alpha in Colorband)"
+#+ * ID|Material.diffuse_ramp_input -> diffuse_ramp_input: enum "NO DESCRIPTION"
+#+ * ID|Material.diffuse_shader -> diffuse_shader: enum "NO DESCRIPTION"
+#+ * ID|Material.diffuse_toon_size -> diffuse_toon_size: float "Size of diffuse toon area"
+#+ * ID|Material.diffuse_toon_smooth -> diffuse_toon_smooth: float "Smoothness of diffuse toon area"
+#+ * ID|Material.emit -> emit: float "Amount of light to emit"
+#+ * ID|Material.halo -> halo: pointer, "(read-only) Halo settings for the material"
+#+ * ID|Material.invert_z -> invert_z: boolean "Renders materials faces with an inverted Z buffer (scanline only)"
+#+ * ID|Material.light_group -> light_group: pointer "Limit lighting to lamps in this Group"
+#+ * ID|Material.mirror_color -> mirror_color: float[3] "Mirror color of the material"
+#+ * ID|Material.node_tree -> node_tree: pointer, "(read-only) Node tree for node based materials"
+#ID|Material.offset_z -> offset_z: float "Gives faces an artificial offset in the Z buffer for Z transparency"
+#+ * ID|Material.physics -> physics: pointer, "(read-only) Game physics settings"
+#+ * ID|Material.preview_render_type -> preview_render_type: enum "Type of preview render"
+#+ * ID|Material.raytrace_mirror -> raytrace_mirror: pointer, "(read-only) Raytraced reflection settings for the material"
+#+ * ID|Material.raytrace_transparency -> raytrace_transparency: pointer, "(read-only) Raytraced transparency settings for the material"
+#+ * ID|Material.roughness -> roughness: float "Oren-Nayar Roughness"
+#+ * ID|Material.shadow_buffer_bias -> shadow_buffer_bias: float "Factor to multiply shadow buffer bias with (0 is ignore.)"
+#ID|Material.shadow_cast_alpha -> shadow_cast_alpha: float "Shadow casting alpha, in use for Irregular and Deep shadow buffer"
+#+ * ID|Material.shadow_ray_bias -> shadow_ray_bias: float "Shadow raytracing bias to prevent terminator problems on shadow boundary"
+#+ * ID|Material.specular_alpha -> specular_alpha: float "Alpha transparency for specular areas"
+#+ * ID|Material.specular_color -> specular_color: float[3] "Specular color of the material"
+#+ * ID|Material.specular_hardness -> specular_hardness: int "NO DESCRIPTION"
+#+ * ID|Material.specular_intensity -> specular_intensity: float "NO DESCRIPTION"
+#+ * ID|Material.specular_ior -> specular_ior: float "NO DESCRIPTION"
+#+ * ID|Material.specular_ramp -> specular_ramp: pointer, "(read-only) Color ramp used to affect specular shading"
+#+ * ID|Material.specular_ramp_blend -> specular_ramp_blend: enum "NO DESCRIPTION"
+#+ * ID|Material.specular_ramp_factor -> specular_ramp_factor: float "Blending factor (also uses alpha in Colorband)"
+#+ * ID|Material.specular_ramp_input -> specular_ramp_input: enum "NO DESCRIPTION"
+#+ * ID|Material.specular_shader -> specular_shader: enum "NO DESCRIPTION"
+#+ * ID|Material.specular_slope -> specular_slope: float "The standard deviation of surface slope"
+#+ * ID|Material.specular_toon_size -> specular_toon_size: float "Size of specular toon area"
+#+ * ID|Material.specular_toon_smooth -> specular_toon_smooth: float "Smoothness of specular toon area"
+#+ * ID|Material.strand -> strand: pointer, "(read-only) Strand settings for the material"
+#+ * ID|Material.subsurface_scattering -> subsurface_scattering: pointer, "(read-only) Subsurface scattering settings for the material"
+#+ * ID|Material.texture_slots -> texture_slots: collection, "(read-only) Texture slots defining the mapping and influence of textures"
+#+ * ID|Material.translucency -> translucency: float "Amount of diffuse shading on the back side"
+#+ * ID|Material.transparency_method -> transparency_method: enum "Method to use for rendering transparency"
+#+ * ID|Material.type -> type: enum "Material type defining how the object is rendered"
+#ID|Material.use_cast_approximate -> use_cast_approximate: boolean "Allow this material to cast shadows when using approximate ambient occlusion."
+#ID|Material.use_cast_buffer_shadows -> use_cast_buffer_shadows: boolean "Allow this material to cast shadows from shadow buffer lamps"
+#ID|Material.use_cast_shadows_only -> use_cast_shadows_only: boolean "Makes objects with this material appear invisible, only casting shadows (not rendered)"
+#ID|Material.use_cubic -> use_cubic: boolean "Use cubic interpolation for diffuse values, for smoother transitions"
+#+ * ID|Material.use_diffuse_ramp -> use_diffuse_ramp: boolean "Toggle diffuse ramp operations"
+#ID|Material.use_face_texture -> use_face_texture: boolean "Replaces the objects base color with color from face assigned image textures"
+#ID|Material.use_face_texture_alpha -> use_face_texture_alpha: boolean "Replaces the objects base alpha value with alpha from face assigned image textures"
+#ID|Material.use_full_oversampling -> use_full_oversampling: boolean "Force this material to render full shading/textures for all anti-aliasing samples"
+#ID|Material.use_light_group_exclusive -> use_light_group_exclusive: boolean "Material uses the light group exclusively - these lamps are excluded from other scene lighting"
+#ID|Material.use_mist -> use_mist: boolean "Use mist with this material (in world settings)"
+#+ * ID|Material.use_nodes -> use_nodes: boolean "Use shader nodes to render the material"
+#ID|Material.use_object_color -> use_object_color: boolean "Modulate the result with a per-object color"
+#ID|Material.use_only_shadow -> use_only_shadow: boolean "Renders shadows as the materials alpha value, making materials transparent except for shadowed areas"
+#ID|Material.use_ray_shadow_bias -> use_ray_shadow_bias: boolean "Prevents raytraced shadow errors on surfaces with smooth shaded normals (terminator problem)"
+#ID|Material.use_raytrace -> use_raytrace: boolean "Include this material and geometry that uses it in ray tracing calculations"
+#ID|Material.use_shadeless -> use_shadeless: boolean "Makes this material insensitive to light or shadow"
+#ID|Material.use_shadows -> use_shadows: boolean "Allows this material to receive shadows"
+#+ * ID|Material.use_sky -> use_sky: boolean "Renders this material with zero alpha, with sky background in place (scanline only)"
+#+ * ID|Material.use_specular_ramp -> use_specular_ramp: boolean "Toggle specular ramp operations"
+#ID|Material.use_tangent_shading -> use_tangent_shading: boolean "Use the materials tangent vector instead of the normal for shading - for anisotropic shading effects"
+#+ * ID|Material.use_textures -> use_textures: boolean[18] "Enable/Disable each texture"
+#ID|Material.use_transparency -> use_transparency: boolean "Render material as transparent"
+#ID|Material.use_transparent_shadows -> use_transparent_shadows: boolean "Allow this object to receive transparent shadows casted through other objects"
+#ID|Material.use_vertex_color_light -> use_vertex_color_light: boolean "Add vertex colors as additional lighting"
+#ID|Material.use_vertex_color_paint -> use_vertex_color_paint: boolean "Replaces object base color with vertex colors (multiplies with texture face face assigned textures)"
+#+ * ID|Material.volume -> volume: pointer, "(read-only) Volume settings for the material"
+#+ * ID|Mesh.active_uv_texture_index -> active_uv_texture_index: int "Active UV texture index"
+#+ * ID|Mesh.active_vertex_color_index -> active_vertex_color_index: int "Active vertex color index"
+#+ * ID|Mesh.animation_data -> animation_data: pointer, "(read-only) Animation data for this datablock"
+#ID|Mesh.auto_smooth_angle -> auto_smooth_angle: int "Defines maximum angle between face normals that Auto Smooth will operate on"
+#+ * ID|Mesh.edges -> edges: collection, "(read-only) Edges of the mesh"
+#+ * ID|Mesh.faces -> faces: collection, "(read-only) Faces of the mesh"
+#ID|Mesh.layers_float -> layers_float: collection, "(read-only)"
+#ID|Mesh.layers_int -> layers_int: collection, "(read-only)"
+#ID|Mesh.layers_string -> layers_string: collection, "(read-only)"
+#+ * ID|Mesh.materials -> materials: collection, "(read-only)"
+#+ * ID|Mesh.shape_keys -> shape_keys: pointer, "(read-only)"
+#ID|Mesh.show_all_edges -> show_all_edges: boolean "Displays all edges for wireframe in all view modes in the 3D view"
+#ID|Mesh.show_double_sided -> show_double_sided: boolean "Render/display the mesh with double or single sided lighting"
+#ID|Mesh.show_edge_bevel_weight -> show_edge_bevel_weight: boolean "Displays weights created for the Bevel modifier"
+#ID|Mesh.show_edge_crease -> show_edge_crease: boolean "Displays creases created for subsurf weighting"
+#ID|Mesh.show_edge_seams -> show_edge_seams: boolean "Displays UV unwrapping seams"
+#ID|Mesh.show_edge_sharp -> show_edge_sharp: boolean "Displays sharp edges, used with the EdgeSplit modifier"
+#ID|Mesh.show_edges -> show_edges: boolean "Displays selected edges using highlights in the 3D view and UV editor"
+#ID|Mesh.show_extra_edge_angle -> show_extra_edge_angle: boolean "Displays the angles in the selected edges in degrees, Using global values when set in the transform panel"
+#ID|Mesh.show_extra_edge_length -> show_extra_edge_length: boolean "Displays selected edge lengths, Using global values when set in the transform panel"
+#ID|Mesh.show_extra_face_area -> show_extra_face_area: boolean "Displays the area of selected faces, Using global values when set in the transform panel"
+#ID|Mesh.show_faces -> show_faces: boolean "Displays all faces as shades in the 3D view and UV editor"
+#ID|Mesh.show_normal_face -> show_normal_face: boolean "Displays face normals as lines"
+#ID|Mesh.show_normal_vertex -> show_normal_vertex: boolean "Displays vertex normals as lines"
+#+ * ID|Mesh.sticky -> sticky: collection, "(read-only) Sticky texture coordinates"
+#+ * ID|Mesh.texco_mesh -> texco_mesh: pointer "Derive texture coordinates from another mesh"
+#ID|Mesh.texspace_location -> texspace_location: float[3] "Texture space location"
+#+ * ID|Mesh.texspace_size -> texspace_size: float[3] "Texture space size"
+#+ * ID|Mesh.texture_mesh -> texture_mesh: pointer "Use another mesh for texture indices (vertex indices must be aligned)"
+#+ * ID|Mesh.total_edge_sel -> total_edge_sel: int, "(read-only) Selected edge count in editmode"
+#+ * ID|Mesh.total_face_sel -> total_face_sel: int, "(read-only) Selected face count in editmode"
+#+ * ID|Mesh.total_vert_sel -> total_vert_sel: int, "(read-only) Selected vertex count in editmode"
+#ID|Mesh.use_auto_smooth -> use_auto_smooth: boolean "Treats all set-smoothed faces with angles less than the specified angle as smooth during render"
+#ID|Mesh.use_auto_texspace -> use_auto_texspace: boolean "Adjusts active objects texture space automatically when transforming object"
+#+ * ID|Mesh.use_mirror_topology -> use_mirror_topology: boolean "Use topology based mirroring"
+#+ * ID|Mesh.use_mirror_x -> use_mirror_x: boolean "X Axis mirror editing"
+#+ * ID|Mesh.use_paint_mask -> use_paint_mask: boolean "Face selection masking for painting"
+#+ * ID|Mesh.uv_texture_clone -> uv_texture_clone: pointer "UV texture to be used as cloning source"
+#+ * ID|Mesh.uv_texture_clone_index -> uv_texture_clone_index: int "Clone UV texture index"
+#+ * ID|Mesh.uv_texture_stencil -> uv_texture_stencil: pointer "UV texture to mask the painted area"
+#+ * ID|Mesh.uv_texture_stencil_index -> uv_texture_stencil_index: int "Mask UV texture index"
+#+ * ID|Mesh.uv_textures -> uv_textures: collection, "(read-only)"
+#+ * ID|Mesh.vertex_colors -> vertex_colors: collection, "(read-only)"
+#ID|Mesh.vertices -> vertices: collection, "(read-only) Vertices of the mesh"
+#+ * ID|MetaBall.animation_data -> animation_data: pointer, "(read-only) Animation data for this datablock"
+#+ * ID|MetaBall.elements -> elements: collection, "(read-only) Meta elements"
+#+ * ID|MetaBall.materials -> materials: collection, "(read-only)"
+#ID|MetaBall.render_resolution -> render_resolution: float "Polygonization resolution in rendering"
+#ID|MetaBall.resolution -> resolution: float "Polygonization resolution in the 3D viewport"
+#ID|MetaBall.texspace_location -> texspace_location: float[3] "Texture space location"
+#+ * ID|MetaBall.texspace_size -> texspace_size: float[3] "Texture space size"
+#+ * ID|MetaBall.threshold -> threshold: float "Influence of meta elements"
+#ID|MetaBall.update_method -> update_method: enum "Metaball edit update behavior"
+#ID|MetaBall.use_auto_texspace -> use_auto_texspace: boolean "Adjusts active objects texture space automatically when transforming object"
+#+ * ID|NodeTree.animation_data -> animation_data: pointer, "(read-only) Animation data for this datablock"
+#+ * ID|NodeTree.grease_pencil -> grease_pencil: pointer "Grease Pencil datablock"
+#+ * ID|NodeTree.nodes -> nodes: collection, "(read-only)"
+#+ * ID|Object.active_material -> active_material: pointer "Active material being displayed"
+#+ * ID|Object.active_material_index -> active_material_index: int "Index of active material slot"
+#+ * ID|Object.active_particle_system -> active_particle_system: pointer, "(read-only) Active particle system being displayed"
+#+ * ID|Object.active_particle_system_index -> active_particle_system_index: int "Index of active particle system slot"
+#+ * ID|Object.active_shape_key -> active_shape_key: pointer, "(read-only) Current shape key"
+#+ * ID|Object.active_shape_key_index -> active_shape_key_index: int "Current shape key index"
+#+ * ID|Object.active_vertex_group -> active_vertex_group: pointer, "(read-only) Vertex groups of the object"
+#+ * ID|Object.active_vertex_group_index -> active_vertex_group_index: int "Active index in vertex group array"
+#+ * ID|Object.animation_data -> animation_data: pointer, "(read-only) Animation data for this datablock"
+#+ * ID|Object.animation_visualisation -> animation_visualisation: pointer, "(read-only) Animation data for this datablock"
+#+ * ID|Object.bound_box -> bound_box: float[24], "(read-only) Objects bound box in object-space coordinates"
+#+ * ID|Object.collision -> collision: pointer, "(read-only) Settings for using the objects as a collider in physics simulation"
+#+ * ID|Object.color -> color: float[4] "Object color and alpha, used when faces have the ObColor mode enabled"
+#+ * ID|Object.constraints -> constraints: collection, "(read-only) Constraints affecting the transformation of the object"
+#+ * ID|Object.data -> data: pointer "Object data"
+#+ * ID|Object.delta_location -> delta_location: float[3] "Extra translation added to the location of the object"
+#+ * ID|Object.delta_rotation_euler -> delta_rotation_euler: float[3] "Extra rotation added to the rotation of the object (when using Euler rotations)"
+#+ * ID|Object.delta_rotation_quaternion -> delta_rotation_quaternion: float[4] "Extra rotation added to the rotation of the object (when using Quaternion rotations)"
+#+ * ID|Object.delta_scale -> delta_scale: float[3] "Extra scaling added to the scale of the object"
+#+ * ID|Object.dimensions -> dimensions: float[3] "Absolute bounding box dimensions of the object"
+#+ * ID|Object.draw_bounds_type -> draw_bounds_type: enum "Object boundary display type"
+#ID|Object.draw_type -> draw_type: enum "Maximum draw type to display object with in viewport"
+#+ * ID|Object.dupli_faces_scale -> dupli_faces_scale: float "Scale the DupliFace objects"
+#+ * ID|Object.dupli_frames_end -> dupli_frames_end: int "End frame for DupliFrames"
+#+ * ID|Object.dupli_frames_off -> dupli_frames_off: int "Recurring frames to exclude from the Dupliframes"
+#+ * ID|Object.dupli_frames_on -> dupli_frames_on: int "Number of frames to use between DupOff frames"
+#+ * ID|Object.dupli_frames_start -> dupli_frames_start: int "Start frame for DupliFrames"
+#+ * ID|Object.dupli_group -> dupli_group: pointer "Instance an existing group"
+#+ * ID|Object.dupli_list -> dupli_list: collection, "(read-only) Object duplis"
+#+ * ID|Object.dupli_type -> dupli_type: enum "If not None, object duplication method to use"
+#+ * ID|Object.empty_draw_size -> empty_draw_size: float "Size of display for empties in the viewport"
+#+ * ID|Object.empty_draw_type -> empty_draw_type: enum "Viewport display style for empties"
+#+ * ID|Object.field -> field: pointer, "(read-only) Settings for using the objects as a field in physics simulation"
+#+ * ID|Object.game -> game: pointer, "(read-only) Game engine related settings for the object"
+#+ * ID|Object.grease_pencil -> grease_pencil: pointer "Grease Pencil datablock"
+#+ * ID|Object.hide -> hide: boolean "Restrict visibility in the viewport"
+#+ * ID|Object.hide_render -> hide_render: boolean "Restrict renderability"
+#+ * ID|Object.hide_select -> hide_select: boolean "Restrict selection in the viewport"
+#ID|Object.is_duplicator -> is_duplicator: boolean, "(read-only)"
+#+ * ID|Object.layers -> layers: boolean[20] "Layers the object is on"
+#+ * ID|Object.location -> location: float[3] "Location of the object"
+#+ * ID|Object.lock_location -> lock_location: boolean[3] "Lock editing of location in the interface"
+#+ * ID|Object.lock_rotation -> lock_rotation: boolean[3] "Lock editing of rotation in the interface"
+#+ * ID|Object.lock_rotation_w -> lock_rotation_w: boolean "Lock editing of angle component of four-component rotations in the interface"
+#+ * ID|Object.lock_rotations_4d -> lock_rotations_4d: boolean "Lock editing of four component rotations by components (instead of as Eulers)"
+#+ * ID|Object.lock_scale -> lock_scale: boolean[3] "Lock editing of scale in the interface"
+#+ * ID|Object.material_slots -> material_slots: collection, "(read-only) Material slots in the object"
+#+ * ID|Object.matrix_local -> matrix_local: float[16] "Parent relative transformation matrix"
+#+ * ID|Object.matrix_world -> matrix_world: float[16] "Worldspace transformation matrix"
+#+ * ID|Object.mode -> mode: enum, "(read-only) Object interaction mode"
+#+ * ID|Object.modifiers -> modifiers: collection, "(read-only) Modifiers affecting the geometric data of the object"
+#+ * ID|Object.motion_path -> motion_path: pointer, "(read-only) Motion Path for this element"
+#+ * ID|Object.parent -> parent: pointer "Parent Object"
+#+ * ID|Object.parent_bone -> parent_bone: string "Name of parent bone in case of a bone parenting relation"
+#+ * ID|Object.parent_type -> parent_type: enum "Type of parent relation"
+#+ * ID|Object.parent_vertices -> parent_vertices: int[3], "(read-only) Indices of vertices in cases of a vertex parenting relation"
+#+ * ID|Object.particle_systems -> particle_systems: collection, "(read-only) Particle systems emitted from the object"
+#+ * ID|Object.pass_index -> pass_index: int "Index # for the IndexOB render pass"
+#+ * ID|Object.pose -> pose: pointer, "(read-only) Current pose for armatures"
+#+ * ID|Object.pose_library -> pose_library: pointer, "(read-only) Action used as a pose library for armatures"
+#+ * ID|Object.proxy -> proxy: pointer, "(read-only) Library object this proxy object controls"
+#+ * ID|Object.proxy_group -> proxy_group: pointer, "(read-only) Library group duplicator object this proxy object controls"
+#+ * ID|Object.rotation_axis_angle -> rotation_axis_angle: float[4] "Angle of Rotation for Axis-Angle rotation representation"
+#+ * ID|Object.rotation_euler -> rotation_euler: float[3] "Rotation in Eulers"
+#+ * ID|Object.rotation_mode -> rotation_mode: enum "NO DESCRIPTION"
+#+ * ID|Object.rotation_quaternion -> rotation_quaternion: float[4] "Rotation in Quaternions"
+#+ * ID|Object.scale -> scale: float[3] "Scaling of the object"
+#+ * ID|Object.select -> select: boolean "Object selection state"
+#ID|Object.show_axis -> show_axis: boolean "Displays the objects origin and axis"
+#ID|Object.show_bounds -> show_bounds: boolean "Displays the objects bounds"
+#ID|Object.show_name -> show_name: boolean "Displays the objects name"
+#ID|Object.show_shape_key -> show_shape_key: boolean "Always show the current Shape for this Object"
+#ID|Object.show_texture_space -> show_texture_space: boolean "Displays the objects texture space"
+#ID|Object.show_transparent -> show_transparent: boolean "Enables transparent materials for the object (Mesh only)"
+#ID|Object.show_wire -> show_wire: boolean "Adds the objects wireframe over solid drawing"
+#ID|Object.show_x_ray -> show_x_ray: boolean "Makes the object draw in front of others"
+#+ * ID|Object.soft_body -> soft_body: pointer, "(read-only) Settings for soft body simulation"
+#+ * ID|Object.time_offset -> time_offset: float "Animation offset in frames for F-Curve and dupligroup instances"
+#+ * ID|Object.track_axis -> track_axis: enum "Axis that points in forward direction"
+#+ * ID|Object.type -> type: enum, "(read-only) Type of Object"
+#+ * ID|Object.up_axis -> up_axis: enum "Axis that points in the upward direction"
+#+ * ID|Object.use_dupli_faces_scale -> use_dupli_faces_scale: boolean "Scale dupli based on face size"
+#+ * ID|Object.use_dupli_frames_speed -> use_dupli_frames_speed: boolean "Set dupliframes to use the frame"
+#ID|Object.use_dupli_vertices_rotation -> use_dupli_vertices_rotation: boolean "Rotate dupli according to vertex normal"
+#ID|Object.use_shape_key_edit_mode -> use_shape_key_edit_mode: boolean "Apply shape keys in edit mode (for Meshes only)"
+#ID|Object.use_slow_parent -> use_slow_parent: boolean "Create a delay in the parent relationship"
+#ID|Object.use_time_offset_add_parent -> use_time_offset_add_parent: boolean "Add the parents time offset value"
+#ID|Object.use_time_offset_edit -> use_time_offset_edit: boolean "Use time offset when inserting keys and display time offset for F-Curve and action views"
+#ID|Object.use_time_offset_parent -> use_time_offset_parent: boolean "Apply the time offset to this objects parent relationship"
+#ID|Object.use_time_offset_particle -> use_time_offset_particle: boolean "Let the time offset work on the particle effect"
+#+ * ID|Object.vertex_groups -> vertex_groups: collection, "(read-only) Vertex groups of the object"
+#+ * ID|ParticleSettings.active_dupliweight -> active_dupliweight: pointer, "(read-only)"
+#+ * ID|ParticleSettings.active_dupliweight_index -> active_dupliweight_index: int "NO DESCRIPTION"
+#+ * ID|ParticleSettings.adaptive_angle -> adaptive_angle: int "How many degrees path has to curve to make another render segment"
+#ID|ParticleSettings.adaptive_pixel -> adaptive_pixel: int "How many pixels path has to cover to make another render segment"
+#+ * ID|ParticleSettings.angular_velocity_factor -> angular_velocity_factor: float "Angular velocity amount"
+#+ * ID|ParticleSettings.angular_velocity_mode -> angular_velocity_mode: enum "Particle angular velocity mode"
+#+ * ID|ParticleSettings.animation_data -> animation_data: pointer, "(read-only) Animation data for this datablock"
+#ID|ParticleSettings.apply_effector_to_children -> apply_effector_to_children: boolean "Apply effectors to children"
+#ID|ParticleSettings.apply_guide_to_children -> apply_guide_to_children: boolean "NO DESCRIPTION"
+#+ * ID|ParticleSettings.billboard_align -> billboard_align: enum "In respect to what the billboards are aligned"
+#+ * ID|ParticleSettings.billboard_animation -> billboard_animation: enum "How to animate billboard textures"
+#+ * ID|ParticleSettings.billboard_object -> billboard_object: pointer "Billboards face this object (default is active camera)"
+#+ * ID|ParticleSettings.billboard_offset -> billboard_offset: float[2] "NO DESCRIPTION"
+#ID|ParticleSettings.billboard_offset_split -> billboard_offset_split: enum "How to offset billboard textures"
+#+ * ID|ParticleSettings.billboard_tilt -> billboard_tilt: float "Tilt of the billboards"
+#ID|ParticleSettings.billboard_tilt_random -> billboard_tilt_random: float "Random tilt of the billboards"
+#+ * ID|ParticleSettings.billboard_uv_split -> billboard_uv_split: int "Amount of rows/columns to split UV coordinates for billboards"
+#+ * ID|ParticleSettings.boids -> boids: pointer, "(read-only)"
+#+ * ID|ParticleSettings.branch_threshold -> branch_threshold: float "Threshold of branching"
+#+ * ID|ParticleSettings.brownian_factor -> brownian_factor: float "Specify the amount of Brownian motion"
+#+ * ID|ParticleSettings.child_length -> child_length: float "Length of child paths"
+#ID|ParticleSettings.child_length_threshold -> child_length_threshold: float "Amount of particles left untouched by child path length"
+#+ * ID|ParticleSettings.child_nbr -> child_nbr: int "Amount of children/parent"
+#+ * ID|ParticleSettings.child_radius -> child_radius: float "Radius of children around parent"
+#+ * ID|ParticleSettings.child_roundness -> child_roundness: float "Roundness of children around parent"
+#+ * ID|ParticleSettings.child_size -> child_size: float "A multiplier for the child particle size"
+#ID|ParticleSettings.child_size_random -> child_size_random: float "Random variation to the size of the child particles"
+#+ * ID|ParticleSettings.child_type -> child_type: enum "Create child particles"
+#+ * ID|ParticleSettings.clump_factor -> clump_factor: float "Amount of clumping"
+#ID|ParticleSettings.clump_shape -> clump_shape: float "Shape of clumping"
+#ID|ParticleSettings.count -> count: int "Total number of particles"
+#ID|ParticleSettings.damping -> damping: float "Specify the amount of damping"
+#+ * ID|ParticleSettings.distribution -> distribution: enum "How to distribute particles on selected element"
+#+ * ID|ParticleSettings.drag_factor -> drag_factor: float "Specify the amount of air-drag"
+#ID|ParticleSettings.draw_method -> draw_method: enum "How particles are drawn in viewport"
+#ID|ParticleSettings.draw_percentage -> draw_percentage: int "Percentage of particles to display in 3D view"
+#+ * ID|ParticleSettings.draw_size -> draw_size: int "Size of particles on viewport in pixels (0=default)"
+#+ * ID|ParticleSettings.draw_step -> draw_step: int "How many steps paths are drawn with (power of 2)"
+#+ * ID|ParticleSettings.dupli_group -> dupli_group: pointer "Show Objects in this Group in place of particles"
+#+ * ID|ParticleSettings.dupli_object -> dupli_object: pointer "Show this Object in place of particles"
+#ID|ParticleSettings.dupli_weights -> dupli_weights: collection, "(read-only) Weights for all of the objects in the dupli group"
+#+ * ID|ParticleSettings.effect_hair -> effect_hair: float "Hair stiffness for effectors"
+#+ * ID|ParticleSettings.effector_weights -> effector_weights: pointer, "(read-only)"
+#+ * ID|ParticleSettings.emit_from -> emit_from: enum "Where to emit particles from"
+#ID|ParticleSettings.factor_random -> factor_random: float "Give the starting speed a random variation"
+#+ * ID|ParticleSettings.fluid -> fluid: pointer, "(read-only)"
+#+ * ID|ParticleSettings.force_field_1 -> force_field_1: pointer, "(read-only)"
+#+ * ID|ParticleSettings.force_field_2 -> force_field_2: pointer, "(read-only)"
+#+ * ID|ParticleSettings.frame_end -> frame_end: float "Frame # to stop emitting particles"
+#+ * ID|ParticleSettings.frame_start -> frame_start: float "Frame # to start emitting particles"
+#+ * ID|ParticleSettings.grid_resolution -> grid_resolution: int "The resolution of the particle grid"
+#+ * ID|ParticleSettings.hair_step -> hair_step: int "Number of hair segments"
+#+ * ID|ParticleSettings.integrator -> integrator: enum "Select physics integrator type"
+#ID|ParticleSettings.invert_grid -> invert_grid: boolean "Invert what is considered object and what is not"
+#+ * ID|ParticleSettings.jitter_factor -> jitter_factor: float "Amount of jitter applied to the sampling"
+#+ * ID|ParticleSettings.keyed_loops -> keyed_loops: int "Number of times the keys are looped"
+#+ * ID|ParticleSettings.keys_step -> keys_step: int "NO DESCRIPTION"
+#+ * ID|ParticleSettings.kink -> kink: enum "Type of periodic offset on the path"
+#+ * ID|ParticleSettings.kink_amplitude -> kink_amplitude: float "The amplitude of the offset"
+#+ * ID|ParticleSettings.kink_axis -> kink_axis: enum "Which axis to use for offset"
+#+ * ID|ParticleSettings.kink_frequency -> kink_frequency: float "The frequency of the offset (1/total length)"
+#+ * ID|ParticleSettings.kink_shape -> kink_shape: float "Adjust the offset to the beginning/end"
+#ID|ParticleSettings.length_random -> length_random: float "Give path length a random variation"
+#+ * ID|ParticleSettings.lifetime -> lifetime: float "Specify the life span of the particles"
+#ID|ParticleSettings.lifetime_random -> lifetime_random: float "Give the particle life a random variation"
+#+ * ID|ParticleSettings.line_length_head -> line_length_head: float "Length of the lines head"
+#+ * ID|ParticleSettings.line_length_tail -> line_length_tail: float "Length of the lines tail"
+#ID|ParticleSettings.lock_billboard -> lock_billboard: boolean "Lock the billboards align axis"
+#ID|ParticleSettings.lock_boids_to_surface -> lock_boids_to_surface: boolean "Constrain boids to a surface"
+#+ * ID|ParticleSettings.mass -> mass: float "Specify the mass of the particles"
+#+ * ID|ParticleSettings.material -> material: int "Specify material used for the particles"
+#+ * ID|ParticleSettings.normal_factor -> normal_factor: float "Let the surface normal give the particle a starting speed"
+#ID|ParticleSettings.object_align_factor -> object_align_factor: float[3] "Let the emitter object orientation give the particle a starting speed"
+#+ * ID|ParticleSettings.object_factor -> object_factor: float "Let the object give the particle a starting speed"
+#+ * ID|ParticleSettings.particle_factor -> particle_factor: float "Let the target particle give the particle a starting speed"
+#+ * ID|ParticleSettings.particle_size -> particle_size: float "The size of the particles"
+#+ * ID|ParticleSettings.path_end -> path_end: float "End time of drawn path"
+#+ * ID|ParticleSettings.path_start -> path_start: float "Starting time of drawn path"
+#+ * ID|ParticleSettings.phase_factor -> phase_factor: float "Initial rotation phase"
+#ID|ParticleSettings.phase_factor_random -> phase_factor_random: float "Randomize rotation phase"
+#+ * ID|ParticleSettings.physics_type -> physics_type: enum "Particle physics type"
+#+ * ID|ParticleSettings.react_event -> react_event: enum "The event of target particles to react on"
+#+ * ID|ParticleSettings.reaction_shape -> reaction_shape: float "Power of reaction strength dependence on distance to target"
+#+ * ID|ParticleSettings.reactor_factor -> reactor_factor: float "Let the vector away from the target particles location give the particle a starting speed"
+#+ * ID|ParticleSettings.render_step -> render_step: int "How many steps paths are rendered with (power of 2)"
+#ID|ParticleSettings.render_type -> render_type: enum "How particles are rendered"
+#ID|ParticleSettings.rendered_child_count -> rendered_child_count: int "Amount of children/parent for rendering"
+#ID|ParticleSettings.rotation_factor_random -> rotation_factor_random: float "Randomize rotation"
+#+ * ID|ParticleSettings.rotation_mode -> rotation_mode: enum "Particles initial rotation"
+#ID|ParticleSettings.roughness_1 -> roughness_1: float "Amount of location dependent rough"
+#ID|ParticleSettings.roughness_1_size -> roughness_1_size: float "Size of location dependent rough"
+#ID|ParticleSettings.roughness_2 -> roughness_2: float "Amount of random rough"
+#ID|ParticleSettings.roughness_2_size -> roughness_2_size: float "Size of random rough"
+#ID|ParticleSettings.roughness_2_threshold -> roughness_2_threshold: float "Amount of particles left untouched by random rough"
+#ID|ParticleSettings.roughness_end_shape -> roughness_end_shape: float "Shape of end point rough"
+#ID|ParticleSettings.roughness_endpoint -> roughness_endpoint: float "Amount of end point rough"
+#ID|ParticleSettings.show_health -> show_health: boolean "Draw boid health"
+#ID|ParticleSettings.show_material_color -> show_material_color: boolean "Draw particles using materials diffuse color"
+#ID|ParticleSettings.show_number -> show_number: boolean "Show particle number"
+#+ * ID|ParticleSettings.show_size -> show_size: boolean "Show particle size"
+#ID|ParticleSettings.show_unborn -> show_unborn: boolean "Show particles before they are emitted"
+#ID|ParticleSettings.show_velocity -> show_velocity: boolean "Show particle velocity"
+#+ * ID|ParticleSettings.simplify_rate -> simplify_rate: float "Speed of simplification"
+#+ * ID|ParticleSettings.simplify_refsize -> simplify_refsize: int "Reference size in pixels, after which simplification begins"
+#+ * ID|ParticleSettings.simplify_transition -> simplify_transition: float "Transition period for fading out strands"
+#+ * ID|ParticleSettings.simplify_viewport -> simplify_viewport: float "Speed of Simplification"
+#ID|ParticleSettings.size_random -> size_random: float "Give the particle size a random variation"
+#+ * ID|ParticleSettings.subframes -> subframes: int "Subframes to simulate for improved stability and finer granularity simulations"
+#+ * ID|ParticleSettings.tangent_factor -> tangent_factor: float "Let the surface tangent give the particle a starting speed"
+#+ * ID|ParticleSettings.tangent_phase -> tangent_phase: float "Rotate the surface tangent"
+#+ * ID|ParticleSettings.time_tweak -> time_tweak: float "A multiplier for physics timestep (1.0 means one frame = 1/25 seconds)"
+#+ * ID|ParticleSettings.trail_count -> trail_count: int "Number of trail particles"
+#+ * ID|ParticleSettings.type -> type: enum "NO DESCRIPTION"
+#ID|ParticleSettings.use_absolute_path_time -> use_absolute_path_time: boolean "Path timing is in absolute frames"
+#ID|ParticleSettings.use_animate_branching -> use_animate_branching: boolean "Animate branching"
+#ID|ParticleSettings.use_branching -> use_branching: boolean "Branch child paths from each other"
+#ID|ParticleSettings.use_dead -> use_dead: boolean "Show particles after they have died"
+#ID|ParticleSettings.use_die_on_collision -> use_die_on_collision: boolean "Particles die when they collide with a deflector object"
+#ID|ParticleSettings.use_dynamic_rotation -> use_dynamic_rotation: boolean "Sets rotation to dynamic/constant"
+#ID|ParticleSettings.use_emit_random -> use_emit_random: boolean "Emit in random order of elements"
+#ID|ParticleSettings.use_even_distribution -> use_even_distribution: boolean "Use even distribution from faces based on face areas or edge lengths"
+#+ * ID|ParticleSettings.use_global_dupli -> use_global_dupli: boolean "Use objects global coordinates for duplication"
+#+ * ID|ParticleSettings.use_group_count -> use_group_count: boolean "Use object multiple times in the same group"
+#ID|ParticleSettings.use_group_pick_random -> use_group_pick_random: boolean "Pick objects from group randomly"
+#ID|ParticleSettings.use_hair_bspline -> use_hair_bspline: boolean "Interpolate hair using B-Splines"
+#ID|ParticleSettings.use_multiply_size_mass -> use_multiply_size_mass: boolean "Multiply mass by particle size"
+#ID|ParticleSettings.use_parent_particles -> use_parent_particles: boolean "Render parent particles"
+#ID|ParticleSettings.use_react_multiple -> use_react_multiple: boolean "React multiple times"
+#ID|ParticleSettings.use_react_start_end -> use_react_start_end: boolean "Give birth to unreacted particles eventually"
+#ID|ParticleSettings.use_render_adaptive -> use_render_adaptive: boolean "Draw steps of the particle path"
+#ID|ParticleSettings.use_render_emitter -> use_render_emitter: boolean "Render emitter Object also"
+#ID|ParticleSettings.use_self_effect -> use_self_effect: boolean "Particle effectors effect themselves"
+#ID|ParticleSettings.use_simplify -> use_simplify: boolean "Remove child strands as the object becomes smaller on the screen"
+#ID|ParticleSettings.use_simplify_viewport -> use_simplify_viewport: boolean "NO DESCRIPTION"
+#ID|ParticleSettings.use_size_deflect -> use_size_deflect: boolean "Use particles size in deflection"
+#ID|ParticleSettings.use_strand_primitive -> use_strand_primitive: boolean "Use the strand primitive for rendering"
+#ID|ParticleSettings.use_symmetric_branching -> use_symmetric_branching: boolean "Start and end points are the same"
+#ID|ParticleSettings.use_velocity_length -> use_velocity_length: boolean "Multiply line length by particle speed"
+#ID|ParticleSettings.use_whole_group -> use_whole_group: boolean "Use whole group at once"
+#+ * ID|ParticleSettings.userjit -> userjit: int "Emission locations / face (0 = automatic)"
+#+ * ID|ParticleSettings.virtual_parents -> virtual_parents: float "Relative amount of virtual parents"
+#+ * ID|Scene.active_keying_set_index -> active_keying_set_index: int "Current Keying Set index (negative for builtin and positive for absolute)"
+#+ * ID|Scene.animation_data -> animation_data: pointer, "(read-only) Animation data for this datablock"
+#ID|Scene.audio_distance_model -> audio_distance_model: enum "Distance model for distance attenuation calculation"
+#ID|Scene.audio_doppler_factor -> audio_doppler_factor: float "Pitch factor for Doppler effect calculation"
+#ID|Scene.audio_doppler_speed -> audio_doppler_speed: float "Speed of sound for Doppler effect calculation"
+#ID|Scene.background_set -> background_set: pointer "Background set scene"
+#+ * ID|Scene.camera -> camera: pointer "Active camera used for rendering the scene"
+#+ * ID|Scene.cursor_location -> cursor_location: float[3] "3D cursor location"
+#+ * ID|Scene.frame_current -> frame_current: int "NO DESCRIPTION"
+#+ * ID|Scene.frame_end -> frame_end: int "Final frame of the playback/rendering range"
+#ID|Scene.frame_preview_end -> frame_preview_end: int "Alternative end frame for UI playback"
+#ID|Scene.frame_preview_start -> frame_preview_start: int "Alternative start frame for UI playback"
+#+ * ID|Scene.frame_start -> frame_start: int "First frame of the playback/rendering range"
+#+ * ID|Scene.frame_step -> frame_step: int "Number of frames to skip forward while rendering/playing back each frame"
+#ID|Scene.game_settings -> game_settings: pointer, "(read-only)"
+#+ * ID|Scene.gravity -> gravity: float[3] "Constant acceleration in a given direction"
+#+ * ID|Scene.grease_pencil -> grease_pencil: pointer "Grease Pencil datablock"
+#ID|Scene.is_nla_tweakmode -> is_nla_tweakmode: boolean, "(read-only) Indicates whether there is any action referenced by NLA being edited. Strictly read-only"
+#+ * ID|Scene.keying_sets -> keying_sets: collection, "(read-only) Absolute Keying Sets for this Scene"
+#ID|Scene.keying_sets_all -> keying_sets_all: collection, "(read-only) All Keying Sets available for use (builtins and Absolute Keying Sets for this Scene)"
+#+ * ID|Scene.layers -> layers: boolean[20] "Layers visible when rendering the scene"
+#+ * ID|Scene.network_render -> network_render: pointer, "(read-only) Network Render Settings"
+#+ * ID|Scene.nodetree -> nodetree: pointer, "(read-only) Compositing node tree"
+#ID|Scene.object_bases -> object_bases: collection, "(read-only)"
+#+ * ID|Scene.objects -> objects: collection, "(read-only)"
+#+ * ID|Scene.orientations -> orientations: collection, "(read-only)"
+#+ * ID|Scene.pose_templates -> pose_templates: pointer, "(read-only) Pose Template Settings"
+#+ * ID|Scene.render -> render: pointer, "(read-only)"
+#+ * ID|Scene.sequence_editor -> sequence_editor: pointer, "(read-only)"
+#+ * ID|Scene.sync_mode -> sync_mode: enum "How to sync playback"
+#+ * ID|Scene.timeline_markers -> timeline_markers: collection, "(read-only) Markers used in all timelines for the current scene"
+#+ * ID|Scene.tool_settings -> tool_settings: pointer, "(read-only)"
+#+ * ID|Scene.unit_settings -> unit_settings: pointer, "(read-only) Unit editing settings"
+#ID|Scene.use_audio -> use_audio: boolean "Play back of audio from Sequence Editor will be muted"
+#ID|Scene.use_audio_scrub -> use_audio_scrub: boolean "Play audio from Sequence Editor while scrubbing"
+#ID|Scene.use_audio_sync -> use_audio_sync: boolean "Play back and sync with audio clock, dropping frames if frame display is too slow"
+#ID|Scene.use_frame_drop -> use_frame_drop: boolean "Play back dropping frames if frame display is too slow"
+#+ * ID|Scene.use_gravity -> use_gravity: boolean "Use global gravity for all dynamics"
+#+ * ID|Scene.use_nodes -> use_nodes: boolean "Enable the compositing node tree"
+#+ * ID|Scene.use_preview_range -> use_preview_range: boolean "Use an alternative start/end frame for UI playback, rather than the scene start/end frame"
+#ID|Scene.use_stamp_note -> use_stamp_note: string "User define note for the render stamping"
+#+ * ID|Scene.world -> world: pointer "World used for rendering the scene"
+#+ * ID|Screen.areas -> areas: collection, "(read-only) Areas the screen is subdivided into"
+#ID|Screen.is_animation_playing -> is_animation_playing: boolean, "(read-only) Animation playback is active"
+#+ * ID|Screen.scene -> scene: pointer "Active scene to be edited in the screen"
+#ID|Screen.show_fullscreen -> show_fullscreen: boolean, "(read-only) An area is maximised, filling this screen"
+#+ * ID|Sound.filepath -> filepath: string "Sound sample file used by this Sound datablock"
+#+ * ID|Sound.packed_file -> packed_file: pointer, "(read-only)"
+#ID|Sound.use_memory_cache -> use_memory_cache: boolean "The sound file is decoded and loaded into RAM"
+#+ * ID|Text.current_character -> current_character: int, "(read-only) Index of current character in current line, and also start index of character in selection if one exists"
+#+ * ID|Text.current_line -> current_line: pointer, "(read-only) Current line, and start line of selection if one exists"
+#+ * ID|Text.filepath -> filepath: string "Filename of the text file"
+#ID|Text.is_dirty -> is_dirty: boolean, "(read-only) Text file has been edited since last save"
+#ID|Text.is_in_memory -> is_in_memory: boolean, "(read-only) Text file is in memory, without a corresponding file on disk"
+#ID|Text.is_modified -> is_modified: boolean, "(read-only) Text file on disk is different than the one in memory"
+#+ * ID|Text.lines -> lines: collection, "(read-only) Lines of text"
+#+ * ID|Text.markers -> markers: collection, "(read-only) Text markers highlighting part of the text"
+#ID|Text.select_end_character -> select_end_character: int, "(read-only) Index of character after end of selection in the selection end line"
+#ID|Text.select_end_line -> select_end_line: pointer, "(read-only) End line of selection"
+#+ * ID|Text.use_module -> use_module: boolean "Register this text as a module on loading, Text name must end with .py"
+#ID|Text.use_tabs_as_spaces -> use_tabs_as_spaces: boolean "Automatically converts all new tabs into spaces"
+#+ * ID|Texture.animation_data -> animation_data: pointer, "(read-only) Animation data for this datablock"
+#+ * ID|Texture.color_ramp -> color_ramp: pointer, "(read-only)"
+#+ * ID|Texture.contrast -> contrast: float "NO DESCRIPTION"
+#+TODO MAKE COLOR * ID|Texture.factor_blue -> factor_blue: float "NO DESCRIPTION"
+#+TODO MAKE COLOR * ID|Texture.factor_green -> factor_green: float "NO DESCRIPTION"
+#+TODO MAKE COLOR * ID|Texture.factor_red -> factor_red: float "NO DESCRIPTION"
+#ID|Texture.intensity -> intensity: float "NO DESCRIPTION"
+#+ * ID|Texture.node_tree -> node_tree: pointer, "(read-only) Node tree for node-based textures"
+#+ * ID|Texture.saturation -> saturation: float "NO DESCRIPTION"
+#+ * ID|Texture.type -> type: enum "NO DESCRIPTION"
+#+ * ID|Texture.use_color_ramp -> use_color_ramp: boolean "Toggle color ramp operations"
+#+ * ID|Texture.use_nodes -> use_nodes: boolean "Make this a node-based texture"
+#+ * ID|Texture.use_preview_alpha -> use_preview_alpha: boolean "Show Alpha in Preview Render"
+#+ * ID|Texture|BlendTexture.progression -> progression: enum "Sets the style of the color blending"
+#ID|Texture|BlendTexture.use_flip_axis -> use_flip_axis: enum "Flips the textures X and Y axis"
+#ID|Texture|CloudsTexture.cloud_type -> cloud_type: enum "NO DESCRIPTION"
+#+ * ID|Texture|CloudsTexture.nabla -> nabla: float "Size of derivative offset used for calculating normal"
+#+ * ID|Texture|CloudsTexture.noise_basis -> noise_basis: enum "Sets the noise basis used for turbulence"
+#+ * ID|Texture|CloudsTexture.noise_depth -> noise_depth: int "Sets the depth of the cloud calculation"
+#ID|Texture|CloudsTexture.noise_scale -> noise_scale: float "Sets scaling for noise input"
+#+ * ID|Texture|CloudsTexture.noise_type -> noise_type: enum "NO DESCRIPTION"
+#+ * ID|Texture|DistortedNoiseTexture.distortion -> distortion: float "NO DESCRIPTION"
+#+ * ID|Texture|DistortedNoiseTexture.nabla -> nabla: float "Size of derivative offset used for calculating normal"
+#+ * ID|Texture|DistortedNoiseTexture.noise_basis -> noise_basis: enum "Sets the noise basis used for turbulence"
+#+ * ID|Texture|DistortedNoiseTexture.noise_distortion -> noise_distortion: enum "Sets the noise basis for the distortion"
+#ID|Texture|DistortedNoiseTexture.noise_scale -> noise_scale: float "Sets scaling for noise input"
+#+ * ID|Texture|EnvironmentMapTexture.environment_map -> environment_map: pointer, "(read-only) Gets the environment map associated with this texture"
+#+ * ID|Texture|EnvironmentMapTexture.filter_eccentricity -> filter_eccentricity: int "Maximum eccentricity. Higher gives less blur at distant/oblique angles, but is also slower"
+#+ * ID|Texture|EnvironmentMapTexture.filter_probes -> filter_probes: int "Maximum number of samples. Higher gives less blur at distant/oblique angles, but is also slower"
+#+ * ID|Texture|EnvironmentMapTexture.filter_size -> filter_size: float "Multiplies the filter size used by MIP Map and Interpolation"
+#ID|Texture|EnvironmentMapTexture.filter_type -> filter_type: enum "Texture filter to use for sampling image"
+#+ * ID|Texture|EnvironmentMapTexture.image -> image: pointer "Source image file to read the environment map from"
+#+ * ID|Texture|EnvironmentMapTexture.image_user -> image_user: pointer, "(read-only) Parameters defining which layer, pass and frame of the image is displayed"
+#ID|Texture|EnvironmentMapTexture.use_filter_size_min -> use_filter_size_min: boolean "Use Filter Size as a minimal filter value in pixels"
+#ID|Texture|EnvironmentMapTexture.use_mipmap -> use_mipmap: boolean "Uses auto-generated MIP maps for the image"
+#ID|Texture|EnvironmentMapTexture.use_mipmap_gauss -> use_mipmap_gauss: boolean "Uses Gauss filter to sample down MIP maps"
+#+ * ID|Texture|ImageTexture.checker_distance -> checker_distance: float "Sets distance between checker tiles"
+#+ * ID|Texture|ImageTexture.crop_max_x -> crop_max_x: float "Sets maximum X value to crop the image"
+#+ * ID|Texture|ImageTexture.crop_max_y -> crop_max_y: float "Sets maximum Y value to crop the image"
+#+ * ID|Texture|ImageTexture.crop_min_x -> crop_min_x: float "Sets minimum X value to crop the image"
+#+ * ID|Texture|ImageTexture.crop_min_y -> crop_min_y: float "Sets minimum Y value to crop the image"
+#+ * ID|Texture|ImageTexture.extension -> extension: enum "Sets how the image is extrapolated past its original bounds"
+#+ * ID|Texture|ImageTexture.filter_eccentricity -> filter_eccentricity: int "Maximum eccentricity. Higher gives less blur at distant/oblique angles, but is also slower"
+#+ * ID|Texture|ImageTexture.filter_probes -> filter_probes: int "Maximum number of samples. Higher gives less blur at distant/oblique angles, but is also slower"
+#+ * ID|Texture|ImageTexture.filter_size -> filter_size: float "Multiplies the filter size used by MIP Map and Interpolation"
+#ID|Texture|ImageTexture.filter_type -> filter_type: enum "Texture filter to use for sampling image"
+#+ * ID|Texture|ImageTexture.image -> image: pointer "NO DESCRIPTION"
+#+ * ID|Texture|ImageTexture.image_user -> image_user: pointer, "(read-only) Parameters defining which layer, pass and frame of the image is displayed"
+#+ * ID|Texture|ImageTexture.invert_alpha -> invert_alpha: boolean "Inverts all the alpha values in the image"
+#+ * ID|Texture|ImageTexture.normal_space -> normal_space: enum "Sets space of normal map image"
+#+ * ID|Texture|ImageTexture.repeat_x -> repeat_x: int "Sets a repetition multiplier in the X direction"
+#+ * ID|Texture|ImageTexture.repeat_y -> repeat_y: int "Sets a repetition multiplier in the Y direction"
+#+ * ID|Texture|ImageTexture.use_alpha -> use_alpha: boolean "Uses the alpha channel information in the image"
+#ID|Texture|ImageTexture.use_calculate_alpha -> use_calculate_alpha: boolean "Calculates an alpha channel based on RGB values in the image"
+#ID|Texture|ImageTexture.use_checker_even -> use_checker_even: boolean "Sets even checker tiles"
+#ID|Texture|ImageTexture.use_checker_odd -> use_checker_odd: boolean "Sets odd checker tiles"
+#ID|Texture|ImageTexture.use_filter_size_min -> use_filter_size_min: boolean "Use Filter Size as a minimal filter value in pixels"
+#ID|Texture|ImageTexture.use_flip_axis -> use_flip_axis: boolean "Flips the textures X and Y axis"
+#ID|Texture|ImageTexture.use_interpolation -> use_interpolation: boolean "Interpolates pixels using Area filter"
+#ID|Texture|ImageTexture.use_mipmap -> use_mipmap: boolean "Uses auto-generated MIP maps for the image"
+#ID|Texture|ImageTexture.use_mipmap_gauss -> use_mipmap_gauss: boolean "Uses Gauss filter to sample down MIP maps"
+#ID|Texture|ImageTexture.use_mirror_x -> use_mirror_x: boolean "Mirrors the image repetition on the X direction"
+#ID|Texture|ImageTexture.use_mirror_y -> use_mirror_y: boolean "Mirrors the image repetition on the Y direction"
+#ID|Texture|ImageTexture.use_normal_map -> use_normal_map: boolean "Uses image RGB values for normal mapping"
+#+ * ID|Texture|MagicTexture.noise_depth -> noise_depth: int "Sets the depth of the cloud calculation"
+#+ * ID|Texture|MagicTexture.turbulence -> turbulence: float "Sets the turbulence of the bandnoise and ringnoise types"
+#ID|Texture|MarbleTexture.marble_type -> marble_type: enum "NO DESCRIPTION"
+#+ * ID|Texture|MarbleTexture.nabla -> nabla: float "Size of derivative offset used for calculating normal"
+#+ * ID|Texture|MarbleTexture.noise_basis -> noise_basis: enum "Sets the noise basis used for turbulence"
+#+ * ID|Texture|MarbleTexture.noise_depth -> noise_depth: int "Sets the depth of the cloud calculation"
+#ID|Texture|MarbleTexture.noise_scale -> noise_scale: float "Sets scaling for noise input"
+#+ * ID|Texture|MarbleTexture.noise_type -> noise_type: enum "NO DESCRIPTION"
+#ID|Texture|MarbleTexture.noisebasis_2 -> noisebasis_2: enum "NO DESCRIPTION"
+#+ * ID|Texture|MarbleTexture.turbulence -> turbulence: float "Sets the turbulence of the bandnoise and ringnoise types"
+#ID|Texture|MusgraveTexture.dimension_max -> dimension_max: float "Highest fractal dimension"
+#+ * ID|Texture|MusgraveTexture.gain -> gain: float "The gain multiplier"
+#+ * ID|Texture|MusgraveTexture.lacunarity -> lacunarity: float "Gap between successive frequencies"
+#+ * ID|Texture|MusgraveTexture.musgrave_type -> musgrave_type: enum "NO DESCRIPTION"
+#+ * ID|Texture|MusgraveTexture.nabla -> nabla: float "Size of derivative offset used for calculating normal"
+#+ * ID|Texture|MusgraveTexture.noise_basis -> noise_basis: enum "Sets the noise basis used for turbulence"
+#+ * ID|Texture|MusgraveTexture.noise_intensity -> noise_intensity: float "NO DESCRIPTION"
+#ID|Texture|MusgraveTexture.noise_scale -> noise_scale: float "Sets scaling for noise input"
+#+ * ID|Texture|MusgraveTexture.octaves -> octaves: float "Number of frequencies used"
+#+ * ID|Texture|MusgraveTexture.offset -> offset: float "The fractal offset"
+#ID|Texture|PointDensityTexture.point_density -> point_density: pointer, "(read-only) The point density settings associated with this texture"
+#+ * ID|Texture|StucciTexture.noise_basis -> noise_basis: enum "Sets the noise basis used for turbulence"
+#ID|Texture|StucciTexture.noise_scale -> noise_scale: float "Sets scaling for noise input"
+#+ * ID|Texture|StucciTexture.noise_type -> noise_type: enum "NO DESCRIPTION"
+#ID|Texture|StucciTexture.stucci_type -> stucci_type: enum "NO DESCRIPTION"
+#+ * ID|Texture|StucciTexture.turbulence -> turbulence: float "Sets the turbulence of the bandnoise and ringnoise types"
+#ID|Texture|VoronoiTexture.color_mode -> color_mode: enum "NO DESCRIPTION"
+#+ * ID|Texture|VoronoiTexture.distance_metric -> distance_metric: enum "NO DESCRIPTION"
+#+ * ID|Texture|VoronoiTexture.minkovsky_exponent -> minkovsky_exponent: float "Minkovsky exponent"
+#+ * ID|Texture|VoronoiTexture.nabla -> nabla: float "Size of derivative offset used for calculating normal"
+#+ * ID|Texture|VoronoiTexture.noise_intensity -> noise_intensity: float "NO DESCRIPTION"
+#ID|Texture|VoronoiTexture.noise_scale -> noise_scale: float "Sets scaling for noise input"
+#+ * ID|Texture|VoronoiTexture.weight_1 -> weight_1: float "Voronoi feature weight 1"
+#+ * ID|Texture|VoronoiTexture.weight_2 -> weight_2: float "Voronoi feature weight 2"
+#+ * ID|Texture|VoronoiTexture.weight_3 -> weight_3: float "Voronoi feature weight 3"
+#+ * ID|Texture|VoronoiTexture.weight_4 -> weight_4: float "Voronoi feature weight 4"
+#+ * ID|Texture|VoxelDataTexture.image -> image: pointer "NO DESCRIPTION"
+#+ * ID|Texture|VoxelDataTexture.image_user -> image_user: pointer, "(read-only) Parameters defining which layer, pass and frame of the image is displayed"
+#ID|Texture|VoxelDataTexture.voxel_data -> voxel_data: pointer, "(read-only) The voxel data associated with this texture"
+#+ * ID|Texture|WoodTexture.nabla -> nabla: float "Size of derivative offset used for calculating normal"
+#+ * ID|Texture|WoodTexture.noise_basis -> noise_basis: enum "Sets the noise basis used for turbulence"
+#ID|Texture|WoodTexture.noise_scale -> noise_scale: float "Sets scaling for noise input"
+#+ * ID|Texture|WoodTexture.noise_type -> noise_type: enum "NO DESCRIPTION"
+#ID|Texture|WoodTexture.noisebasis_2 -> noisebasis_2: enum "NO DESCRIPTION"
+#+ * ID|Texture|WoodTexture.turbulence -> turbulence: float "Sets the turbulence of the bandnoise and ringnoise types"
+#ID|Texture|WoodTexture.wood_type -> wood_type: enum "NO DESCRIPTION"
+#+ * ID|VectorFont.filepath -> filepath: string, "(read-only)"
+#+ * ID|VectorFont.packed_file -> packed_file: pointer, "(read-only)"
+#+ * ID|WindowManager.keyconfigs -> keyconfigs: collection, "(read-only) Registered key configurations"
+#+ * ID|WindowManager.operators -> operators: collection, "(read-only) Operator registry"
+#+ * ID|WindowManager.windows -> windows: collection, "(read-only) Open windows"
+#+ * ID|World.active_texture -> active_texture: pointer "Active texture slot being displayed"
+#+ * ID|World.active_texture_index -> active_texture_index: int "Index of active texture slot"
+#+ * ID|World.ambient_color -> ambient_color: float[3] "NO DESCRIPTION"
+#+ * ID|World.animation_data -> animation_data: pointer, "(read-only) Animation data for this datablock"
+#ID|World.color_range -> color_range: float "The color range that will be mapped to 0-1"
+#+ * ID|World.exposure -> exposure: float "Amount of exponential color correction for light"
+#+ * ID|World.horizon_color -> horizon_color: float[3] "Color at the horizon"
+#ID|World.light_settings -> light_settings: pointer, "(read-only) World lighting settings"
+#ID|World.mist_settings -> mist_settings: pointer, "(read-only) World mist settings"
+#ID|World.star_settings -> star_settings: pointer, "(read-only) World stars settings"
+#+ * ID|World.texture_slots -> texture_slots: collection, "(read-only) Texture slots defining the mapping and influence of textures"
+#ID|World.use_sky_blend -> use_sky_blend: boolean "Render background with natural progression from horizon to zenith"
+#ID|World.use_sky_paper -> use_sky_paper: boolean "Flatten blend or texture coordinates"
+#ID|World.use_sky_real -> use_sky_real: boolean "Render background with a real horizon, relative to the camera angle"
+#+ * ID|World.zenith_color -> zenith_color: float[3] "Color at the zenith"
+#+ * IKParam.ik_solver -> ik_solver: enum, "(read-only) IK solver for which these parameters are defined, 0 for Legacy, 1 for iTaSC"
+#IKParam|Itasc.damping_epsilon -> damping_epsilon: float "Singular value under which damping is progressively applied. Higher values=more stability, less reactivity. Default=0.1"
+#IKParam|Itasc.damping_max -> damping_max: float "Maximum damping coefficient when singular value is nearly 0. Higher values=more stability, less reactivity. Default=0.5"
+#+ * IKParam|Itasc.feedback -> feedback: float "Feedback coefficient for error correction. Average response time=1/feedback. Default=20"
+#IKParam|Itasc.iterations -> iterations: int "Maximum number of iterations for convergence in case of reiteration"
+#+ * IKParam|Itasc.mode -> mode: enum "NO DESCRIPTION"
+#+ * IKParam|Itasc.precision -> precision: float "Precision of convergence in case of reiteration"
+#IKParam|Itasc.reiteration_method -> reiteration_method: enum "Defines if the solver is allowed to reiterate (converges until precision is met) on none, first or all frames"
+#+ * IKParam|Itasc.solver -> solver: enum "Solving method selection: Automatic damping or manual damping"
+#IKParam|Itasc.step_count -> step_count: int "Divides the frame interval into this many steps"
+#IKParam|Itasc.step_max -> step_max: float "Higher bound for timestep in second in case of automatic substeps"
+#IKParam|Itasc.step_min -> step_min: float "Lower bound for timestep in second in case of automatic substeps"
+#IKParam|Itasc.use_auto_step -> use_auto_step: boolean "Automatically determine the optimal number of steps for best performance/accuracy trade off"
+#IKParam|Itasc.velocity_max -> velocity_max: float "Maximum joint velocity in rad/s. Default=50"
+#+ * ImageUser.fields_per_frame -> fields_per_frame: int "The number of fields per rendered frame (2 fields is 1 image)"
+#ImageUser.frame_duration -> frame_duration: int "Sets the number of images of a movie to use"
+#ImageUser.frame_offset -> frame_offset: int "Offsets the number of the frame to use in the animation"
+#+ * ImageUser.frame_start -> frame_start: int "Sets the global starting frame of the movie"
+#+ * ImageUser.multilayer_layer -> multilayer_layer: int, "(read-only) Layer in multilayer image"
+#+ * ImageUser.multilayer_pass -> multilayer_pass: int, "(read-only) Pass in multilayer image"
+#ImageUser.use_auto_refresh -> use_auto_refresh: boolean "Always refresh image on frame changes"
+#ImageUser.use_cyclic -> use_cyclic: boolean "Cycle the images in the movie"
+#KeyConfig.is_user_defined -> is_user_defined: boolean, "(read-only) Indicates that a keyconfig was defined by the user"
+#+ * KeyConfig.keymaps -> keymaps: collection, "(read-only) Key maps configured as part of this configuration"
+#+ * KeyConfig.name -> name: string "Name of the key configuration"
+#KeyConfigurations.active -> active: pointer "Active wm KeyConfig"
+#KeyConfigurations.default -> default: pointer, "(read-only)"
+#KeyMap.is_modal -> is_modal: boolean, "(read-only) Indicates that a keymap is used for translate modal events for an operator"
+#KeyMap.is_user_defined -> is_user_defined: boolean "Keymap is defined by the user"
+#+ * KeyMap.items -> items: collection, "(read-only) Items in the keymap, linking an operator to an input event"
+#+ * KeyMap.name -> name: string, "(read-only) Name of the key map"
+#+ * KeyMap.region_type -> region_type: enum, "(read-only) Optional region type keymap is associated with"
+#KeyMap.show_expanded_children -> show_expanded_children: boolean "Children expanded in the user interface"
+#KeyMap.show_expanded_items -> show_expanded_items: boolean "Expanded in the user interface"
+#+ * KeyMap.space_type -> space_type: enum, "(read-only) Optional space type keymap is associated with"
+#TODO MOVE TO COLLECTION * KeyMapItem.active -> active: boolean "Activate or deactivate item"
+#+ * KeyMapItem.id -> id: int, "(read-only) ID of the item"
+#+ * KeyMapItem.idname -> idname: string "Identifier of operator to call on input event"
+#+ * KeyMapItem.key_modifier -> key_modifier: enum "Regular key pressed as a modifier"
+#+ * KeyMapItem.map_type -> map_type: enum "Type of event mapping"
+#+ * KeyMapItem.name -> name: string, "(read-only) Name of operator to call on input event"
+ + * KeyMapItem.alt -> pressed_alt: boolean "Alt key pressed"
+ + * KeyMapItem.any -> pressed_any: boolean "Any modifier keys pressed"
+ + * KeyMapItem.ctrl -> pressed_ctrl: boolean "Control key pressed"
+ + * KeyMapItem.oskey -> pressed_oskey: boolean "Operating system key pressed"
+ + * KeyMapItem.shift -> pressed_shift: boolean "Shift key pressed"
+#+ * KeyMapItem.properties -> properties: pointer, "(read-only) Properties to set when the operator is called"
+#TODO * KeyMapItem.propvalue -> propvalue: enum "The value this event translates to in a modal keymap"
+#KeyMapItem.show_expanded -> show_expanded: boolean "Show key map event and property details in the user interface"
+#+ * KeyMapItem.type -> type: enum "Type of event"
+#+ * KeyMapItem.value -> value: enum "NO DESCRIPTION"
+#+ * Keyframe.co -> co: float[2] "Coordinates of the control point"
+#Keyframe.handle_left -> handle_left: float[2] "Coordinates of the first handle"
+#Keyframe.handle_left_type -> handle_left_type: enum "Handle types"
+#Keyframe.handle_right -> handle_right: float[2] "Coordinates of the second handle"
+#Keyframe.handle_right_type -> handle_right_type: enum "Handle types"
+#+ * Keyframe.interpolation -> interpolation: enum "Interpolation method to use for segment of the curve from this Keyframe until the next Keyframe"
+#+ * Keyframe.select_control_point -> select_control_point: boolean "Control point selection status"
+#+ * Keyframe.select_left_handle -> select_left_handle: boolean "Handle 1 selection status"
+#+ * Keyframe.select_right_handle -> select_right_handle: boolean "Handle 2 selection status"
+#+ * Keyframe.type -> type: enum "The type of keyframe"
+#+ * KeyingSet.active_path_index -> active_path_index: int "Current Keying Set index"
+#KeyingSet.is_path_absolute -> is_path_absolute: boolean, "(read-only) Keying Set defines specific paths/settings to be keyframed (i.e. is not reliant on context info)"
+#+ * KeyingSet.name -> name: string "NO DESCRIPTION"
+#+ * KeyingSet.paths -> paths: collection, "(read-only) Keying Set Paths to define settings that get keyframed together"
+#+ * KeyingSet.type_info -> type_info: pointer, "(read-only) Callback function defines for built-in Keying Sets"
+#KeyingSet.use_insertkey_needed -> use_insertkey_needed: boolean "Only insert keyframes where theyre needed in the relevant F-Curves"
+#KeyingSet.use_insertkey_visual -> use_insertkey_visual: boolean "Insert keyframes based on visual transforms"
+#KeyingSet.use_insertkey_xyz_to_rgb -> use_insertkey_xyz_to_rgb: boolean "Color for newly added transformation F-Curves (Location, Rotation, Scale) and also Color is based on the transform axis"
+#+ * KeyingSetInfo.bl_idname -> bl_idname: string "NO DESCRIPTION"
+#+ * KeyingSetInfo.bl_label -> bl_label: string "NO DESCRIPTION"
+#KeyingSetInfo.use_insertkey_needed -> use_insertkey_needed: boolean "Only insert keyframes where theyre needed in the relevant F-Curves"
+#KeyingSetInfo.use_insertkey_visual -> use_insertkey_visual: boolean "Insert keyframes based on visual transforms"
+#KeyingSetInfo.use_insertkey_xyz_to_rgb -> use_insertkey_xyz_to_rgb: boolean "Color for newly added transformation F-Curves (Location, Rotation, Scale) and also Color is based on the transform axis"
+#+ * KeyingSetPath.array_index -> array_index: int "Index to the specific setting if applicable"
+#+ * KeyingSetPath.data_path -> data_path: string "Path to property setting"
+#+ * KeyingSetPath.group -> group: string "Name of Action Group to assign setting(s) for this path to"
+#KeyingSetPath.group_method -> group_method: enum "Method used to define which Group-name to use"
+#+ * KeyingSetPath.id -> id: pointer "ID-Block that keyframes for Keying Set should be added to (for Absolute Keying Sets only)"
+#+ * KeyingSetPath.id_type -> id_type: enum "Type of ID-block that can be used"
+#KeyingSetPath.use_entire_array -> use_entire_array: boolean "When an array/vector type is chosen (Location, Rotation, Color, etc.), entire array is to be used"
+#KeyingSetPath.use_insertkey_needed -> use_insertkey_needed: boolean "Only insert keyframes where theyre needed in the relevant F-Curves"
+#KeyingSetPath.use_insertkey_visual -> use_insertkey_visual: boolean "Insert keyframes based on visual transforms"
+#KeyingSetPath.use_insertkey_xyz_to_rgb -> use_insertkey_xyz_to_rgb: boolean "Color for newly added transformation F-Curves (Location, Rotation, Scale) and also Color is based on the transform axis"
+#KeyingSetPaths.active -> active: pointer "Active Keying Set used to insert/delete keyframes"
+#KeyingSets.active -> active: pointer "Active Keying Set used to insert/delete keyframes"
+#+ * LampSkySettings.atmosphere_distance_factor -> atmosphere_distance_factor: float "Multiplier to convert blender units to physical distance"
+#+ * LampSkySettings.atmosphere_extinction -> atmosphere_extinction: float "Extinction scattering contribution factor"
+#+ * LampSkySettings.atmosphere_inscattering -> atmosphere_inscattering: float "Scatter contribution factor"
+#+ * LampSkySettings.atmosphere_turbidity -> atmosphere_turbidity: float "Sky turbidity"
+#+ * LampSkySettings.backscattered_light -> backscattered_light: float "Backscattered light"
+#+ * LampSkySettings.horizon_brightness -> horizon_brightness: float "Horizon brightness"
+#+ * LampSkySettings.sky_blend -> sky_blend: float "Blend factor with sky"
+#+ * LampSkySettings.sky_blend_type -> sky_blend_type: enum "Blend mode for combining sun sky with world sky"
+#+ * LampSkySettings.sky_color_space -> sky_color_space: enum "Color space to use for internal XYZ->RGB color conversion"
+#+ * LampSkySettings.sky_exposure -> sky_exposure: float "Strength of sky shading exponential exposure correction"
+#+ * LampSkySettings.spread -> spread: float "Horizon Spread"
+#+ * LampSkySettings.sun_brightness -> sun_brightness: float "Sun brightness"
+#+ * LampSkySettings.sun_intensity -> sun_intensity: float "Sun intensity"
+#+ * LampSkySettings.sun_size -> sun_size: float "Sun size"
+#+ * LampSkySettings.use_atmosphere -> use_atmosphere: boolean "Apply sun effect on atmosphere"
+#+ * LampSkySettings.use_sky -> use_sky: boolean "Apply sun effect on sky"
+#+ * LatticePoint.co -> co: float[3], "(read-only)"
+#LatticePoint.co_deform -> co_deform: float[3] "NO DESCRIPTION"
+#+ * LatticePoint.groups -> groups: collection, "(read-only) Weights for the vertex groups this point is member of"
+#+ * Macro.bl_description -> bl_description: string "NO DESCRIPTION"
+#+ * Macro.bl_idname -> bl_idname: string "NO DESCRIPTION"
+#+ * Macro.bl_label -> bl_label: string "NO DESCRIPTION"
+#+ * Macro.bl_options -> bl_options: enum "Options for this operator type"
+#+ * Macro.name -> name: string, "(read-only)"
+#+ * Macro.properties -> properties: pointer, "(read-only)"
+#+ * Main.actions -> actions: collection, "(read-only) Action datablocks."
+#+ * Main.armatures -> armatures: collection, "(read-only) Armature datablocks."
+#+ * Main.brushes -> brushes: collection, "(read-only) Brush datablocks."
+#+ * Main.cameras -> cameras: collection, "(read-only) Camera datablocks."
+#+ * Main.curves -> curves: collection, "(read-only) Curve datablocks."
+#+ * Main.filepath -> filepath: string, "(read-only) Path to the .blend file"
+#+ * Main.fonts -> fonts: collection, "(read-only) Vector font datablocks."
+#Main.grease_pencil -> grease_pencil: collection, "(read-only) Grease Pencil datablocks."
+#+ * Main.groups -> groups: collection, "(read-only) Group datablocks."
+#+ * Main.images -> images: collection, "(read-only) Image datablocks."
+#Main.is_dirty -> is_dirty: boolean, "(read-only) Has the current session been saved to disk as a .blend file"
+#+ * Main.lamps -> lamps: collection, "(read-only) Lamp datablocks."
+#+ * Main.lattices -> lattices: collection, "(read-only) Lattice datablocks."
+#+ * Main.libraries -> libraries: collection, "(read-only) Library datablocks."
+#+ * Main.materials -> materials: collection, "(read-only) Material datablocks."
+#+ * Main.meshes -> meshes: collection, "(read-only) Mesh datablocks."
+#+ * Main.metaballs -> metaballs: collection, "(read-only) Metaball datablocks."
+#+ * Main.node_groups -> node_groups: collection, "(read-only) Node group datablocks."
+#+ * Main.objects -> objects: collection, "(read-only) Object datablocks."
+#+ * Main.particles -> particles: collection, "(read-only) Particle datablocks."
+#+ * Main.scenes -> scenes: collection, "(read-only) Scene datablocks."
+#+ * Main.screens -> screens: collection, "(read-only) Screen datablocks."
+#+ * Main.scripts -> scripts: collection, "(read-only) Script datablocks (DEPRECATED)."
+ + * Main.debug -> show_debug: boolean "Print debugging information in console"
+#+ * Main.sounds -> sounds: collection, "(read-only) Sound datablocks."
+#+ * Main.texts -> texts: collection, "(read-only) Text datablocks."
+#+ * Main.textures -> textures: collection, "(read-only) Texture datablocks."
+#+ * Main.window_managers -> window_managers: collection, "(read-only) Window manager datablocks."
+#+ * Main.worlds -> worlds: collection, "(read-only) World datablocks."
+#+ * MaterialHalo.add -> add: float "Sets the strength of the add effect"
+#+ * MaterialHalo.flare_boost -> flare_boost: float "Gives the flare extra strength"
+#+ * MaterialHalo.flare_seed -> flare_seed: int "Specifies an offset in the flare seed table"
+#+ * MaterialHalo.flare_size -> flare_size: float "Sets the factor by which the flare is larger than the halo"
+#MaterialHalo.flare_subflare_count -> flare_subflare_count: int "Sets the number of subflares"
+#MaterialHalo.flare_subflare_size -> flare_subflare_size: float "Sets the dimension of the subflares, dots and circles"
+#+ * MaterialHalo.hardness -> hardness: int "Sets the hardness of the halo"
+#MaterialHalo.line_count -> line_count: int "Sets the number of star shaped lines rendered over the halo"
+#MaterialHalo.ring_count -> ring_count: int "Sets the number of rings rendered over the halo"
+#+ * MaterialHalo.seed -> seed: int "Randomizes ring dimension and line location"
+#+ * MaterialHalo.size -> size: float "Sets the dimension of the halo"
+#MaterialHalo.star_tip_count -> star_tip_count: int "Sets the number of points on the star shaped halo"
+#MaterialHalo.use_extreme_alpha -> use_extreme_alpha: boolean "Uses extreme alpha"
+#MaterialHalo.use_flare_mode -> use_flare_mode: boolean "Renders halo as a lensflare"
+#MaterialHalo.use_lines -> use_lines: boolean "Renders star shaped lines over halo"
+#MaterialHalo.use_ring -> use_ring: boolean "Renders rings over halo"
+#MaterialHalo.use_shaded -> use_shaded: boolean "Lets halo receive light and shadows from external objects"
+#MaterialHalo.use_soft -> use_soft: boolean "Softens the edges of halos at intersections with other geometry"
+#MaterialHalo.use_star -> use_star: boolean "Renders halo as a star"
+#MaterialHalo.use_texture -> use_texture: boolean "Gives halo a texture"
+#MaterialHalo.use_vertex_normal -> use_vertex_normal: boolean "Uses the vertex normal to specify the dimension of the halo"
+#MaterialPhysics.damping -> damping: float "Damping of the spring force, when inside the physics distance area"
+#+ * MaterialPhysics.distance -> distance: float "Distance of the physics area"
+#+ * MaterialPhysics.elasticity -> elasticity: float "Elasticity of collisions"
+#+ * MaterialPhysics.force -> force: float "Upward spring force, when inside the physics distance area"
+#+ * MaterialPhysics.friction -> friction: float "Coulomb friction coefficient, when inside the physics distance area"
+#MaterialPhysics.use_normal_align -> use_normal_align: boolean "Align dynamic game objects along the surface normal, when inside the physics distance area"
+#+ * MaterialRaytraceMirror.depth -> depth: int "Maximum allowed number of light inter-reflections"
+#+ * MaterialRaytraceMirror.distance -> distance: float "Maximum distance of reflected rays. Reflections further than this range fade to sky color or material color"
+#+ * MaterialRaytraceMirror.fade_to -> fade_to: enum "The color that rays with no intersection within the Max Distance take. Material color can be best for indoor scenes, sky color for outdoor"
+#+ * MaterialRaytraceMirror.fresnel -> fresnel: float "Power of Fresnel for mirror reflection"
+#+ * MaterialRaytraceMirror.fresnel_factor -> fresnel_factor: float "Blending factor for Fresnel"
+#+ * MaterialRaytraceMirror.gloss_anisotropic -> gloss_anisotropic: float "The shape of the reflection, from 0.0 (circular) to 1.0 (fully stretched along the tangent"
+#+ * MaterialRaytraceMirror.gloss_factor -> gloss_factor: float "The shininess of the reflection. Values < 1.0 give diffuse, blurry reflections"
+#+ * MaterialRaytraceMirror.gloss_samples -> gloss_samples: int "Number of cone samples averaged for blurry reflections"
+#+ * MaterialRaytraceMirror.gloss_threshold -> gloss_threshold: float "Threshold for adaptive sampling. If a sample contributes less than this amount (as a percentage), sampling is stopped"
+#+ * MaterialRaytraceMirror.reflect_factor -> reflect_factor: float "Sets the amount mirror reflection for raytrace"
+#+ * MaterialRaytraceMirror.use -> use: boolean "Enable raytraced reflections"
+#+ * MaterialRaytraceTransparency.depth -> depth: int "Maximum allowed number of light inter-refractions"
+#MaterialRaytraceTransparency.depth_max -> depth_max: float "Maximum depth for light to travel through the transparent material before becoming fully filtered (0.0 is disabled)"
+#+ * MaterialRaytraceTransparency.falloff -> falloff: float "Falloff power for transmissivity filter effect (1.0 is linear)"
+#+ * MaterialRaytraceTransparency.filter -> filter: float "Amount to blend in the materials diffuse color in raytraced transparency (simulating absorption)"
+#+ * MaterialRaytraceTransparency.fresnel -> fresnel: float "Power of Fresnel for transparency (Ray or ZTransp)"
+#+ * MaterialRaytraceTransparency.fresnel_factor -> fresnel_factor: float "Blending factor for Fresnel"
+#+ * MaterialRaytraceTransparency.gloss_factor -> gloss_factor: float "The clarity of the refraction. Values < 1.0 give diffuse, blurry refractions"
+#+ * MaterialRaytraceTransparency.gloss_samples -> gloss_samples: int "Number of cone samples averaged for blurry refractions"
+#+ * MaterialRaytraceTransparency.gloss_threshold -> gloss_threshold: float "Threshold for adaptive sampling. If a sample contributes less than this amount (as a percentage), sampling is stopped"
+#+ * MaterialRaytraceTransparency.ior -> ior: float "Sets angular index of refraction for raytraced refraction"
+#+ * MaterialSlot.link -> link: enum "Link material to object or the objects data"
+#+ * MaterialSlot.material -> material: pointer "Material datablock used by this material slot"
+#+ * MaterialSlot.name -> name: string, "(read-only) Material slot name"
+#+ * MaterialStrand.blend_distance -> blend_distance: float "Worldspace distance over which to blend in the surface normal"
+#+ * MaterialStrand.root_size -> root_size: float "Start size of strands in pixels or Blender units"
+#+ * MaterialStrand.shape -> shape: float "Positive values make strands rounder, negative makes strands spiky"
+#MaterialStrand.size_min -> size_min: float "Minimum size of strands in pixels"
+#+ * MaterialStrand.tip_size -> tip_size: float "End size of strands in pixels or Blender units"
+#MaterialStrand.use_blender_units -> use_blender_units: boolean "Use Blender units for widths instead of pixels"
+#MaterialStrand.use_surface_diffuse -> use_surface_diffuse: boolean "Make diffuse shading more similar to shading the surface"
+#MaterialStrand.use_tangent_shading -> use_tangent_shading: boolean "Uses direction of strands as normal for tangent-shading"
+#+ * MaterialStrand.uv_layer -> uv_layer: string "Name of UV layer to override"
+#+ * MaterialStrand.width_fade -> width_fade: float "Transparency along the width of the strand"
+#+ * MaterialSubsurfaceScattering.back -> back: float "Back scattering weight"
+#+ * MaterialSubsurfaceScattering.color -> color: float[3] "Scattering color"
+#+ * MaterialSubsurfaceScattering.color_factor -> color_factor: float "Blend factor for SSS colors"
+#MaterialSubsurfaceScattering.error_threshold -> error_threshold: float "Error tolerance (low values are slower and higher quality)"
+#+ * MaterialSubsurfaceScattering.front -> front: float "Front scattering weight"
+#+ * MaterialSubsurfaceScattering.ior -> ior: float "Index of refraction (higher values are denser)"
+#+ * MaterialSubsurfaceScattering.radius -> radius: float[3] "Mean red/green/blue scattering path length"
+#+ * MaterialSubsurfaceScattering.scale -> scale: float "Object scale factor"
+#+ * MaterialSubsurfaceScattering.texture_factor -> texture_factor: float "Texture scatting blend factor"
+#+ * MaterialSubsurfaceScattering.use -> use: boolean "Enable diffuse subsurface scatting effects in a material"
+#+ * MaterialVolume.asymmetry -> asymmetry: float "Back scattering (-1.0) to Forward scattering (1.0) and the range in between"
+#+ * MaterialVolume.cache_resolution -> cache_resolution: int "Resolution of the voxel grid, low resolutions are faster, high resolutions use more memory"
+#+ * MaterialVolume.density -> density: float "The base density of the volume"
+#+ * MaterialVolume.density_scale -> density_scale: float "Multiplier for the materials density"
+#MaterialVolume.depth_threshold -> depth_threshold: float "Stop ray marching early if transmission drops below this luminance - higher values give speedups in dense volumes at the expense of accuracy"
+#+ * MaterialVolume.emission -> emission: float "Amount of light that gets emitted by the volume"
+#+ * MaterialVolume.emission_color -> emission_color: float[3] "NO DESCRIPTION"
+#MaterialVolume.light_method -> light_method: enum "Method of shading, attenuating, and scattering light through the volume"
+#+ * MaterialVolume.ms_diffusion -> ms_diffusion: float "Diffusion factor, the strength of the blurring effect"
+#+ * MaterialVolume.ms_intensity -> ms_intensity: float "Multiplier for multiple scattered light energy"
+#+ * MaterialVolume.ms_spread -> ms_spread: float "Proportional distance over which the light is diffused"
+#+ * MaterialVolume.reflection -> reflection: float "Multiplier to make out-scattered light brighter or darker (non-physically correct)"
+#+ * MaterialVolume.reflection_color -> reflection_color: float[3] "Colour of light scattered out of the volume (does not affect transmission)"
+#+ * MaterialVolume.scattering -> scattering: float "Amount of light that gets scattered out by the volume - the more out-scattering, the shallower the light will penetrate"
+#MaterialVolume.step_method -> step_method: enum "Method of calculating the steps through the volume"
+#+ * MaterialVolume.step_size -> step_size: float "Distance between subsequent volume depth samples"
+#+ * MaterialVolume.transmission_color -> transmission_color: float[3] "Result color of the volume, after other light has been scattered/absorbed"
+#MaterialVolume.use_external_shadows -> use_external_shadows: boolean "Receive shadows from sources outside the volume (temporary)"
+#MaterialVolume.use_light_cache -> use_light_cache: boolean "Pre-calculate the shading information into a voxel grid, speeds up shading at slightly less accuracy"
+#+ * Menu.bl_idname -> bl_idname: string "If this is set, the menu gets a custom ID, otherwise it takes the name of the class used to define the panel. For example, if the class name is OBJECT_MT_hello, and bl_idname is not set by the script, then bl_idname = OBJECT_MT_hello"
+#+ * Menu.bl_label -> bl_label: string "The menu label"
+#+ * Menu.layout -> layout: pointer, "(read-only) Defines the structure of the menu in the UI."
+#+ * MeshColor.color1 -> color1: float[3] "NO DESCRIPTION"
+#+ * MeshColor.color2 -> color2: float[3] "NO DESCRIPTION"
+#+ * MeshColor.color3 -> color3: float[3] "NO DESCRIPTION"
+#+ * MeshColor.color4 -> color4: float[3] "NO DESCRIPTION"
+#+ * MeshColorLayer.active -> active: boolean "Sets the layer as active for display and editing"
+#+ * MeshColorLayer.active_render -> active_render: boolean "Sets the layer as active for rendering"
+#+ * MeshColorLayer.data -> data: collection, "(read-only)"
+#+ * MeshColorLayer.name -> name: string "NO DESCRIPTION"
+#+ * MeshEdge.bevel_weight -> bevel_weight: float "Weight used by the Bevel modifier"
+#+ * MeshEdge.crease -> crease: float "Weight used by the Subsurf modifier for creasing"
+#+ * MeshEdge.hide -> hide: boolean "NO DESCRIPTION"
+#+ * MeshEdge.index -> index: int, "(read-only) Index number of the vertex"
+#MeshEdge.is_fgon -> is_fgon: boolean "Fgon edge"
+#MeshEdge.is_loose -> is_loose: boolean "Loose edge"
+#+ * MeshEdge.select -> select: boolean "NO DESCRIPTION"
+#MeshEdge.use_edge_sharp -> use_edge_sharp: boolean "Sharp edge for the EdgeSplit modifier"
+#MeshEdge.use_seam -> use_seam: boolean "Seam edge for UV unwrapping"
+#MeshEdge.vertices -> vertices: int[2] "Vertex indices"
+#+ * MeshFace.area -> area: float, "(read-only) read only area of the face"
+#+ * MeshFace.hide -> hide: boolean "NO DESCRIPTION"
+#+ * MeshFace.index -> index: int, "(read-only) Index number of the vertex"
+#+ * MeshFace.material_index -> material_index: int "NO DESCRIPTION"
+#+ * MeshFace.normal -> normal: float[3], "(read-only) local space unit length normal vector for this face"
+#+ * MeshFace.select -> select: boolean "NO DESCRIPTION"
+#MeshFace.use_smooth -> use_smooth: boolean "NO DESCRIPTION"
+#MeshFace.vertices -> vertices: int[4] "Vertex indices"
+#MeshFace.vertices_raw -> vertices_raw: int[4] "Fixed size vertex indices array"
+#+ * MeshFaces.active -> active: int "The active face for this mesh"
+#+ * MeshFaces.active_tface -> active_tface: pointer, "(read-only) Active Texture Face"
+#+ * MeshFloatProperty.value -> value: float "NO DESCRIPTION"
+#+ * MeshFloatPropertyLayer.data -> data: collection, "(read-only)"
+#+ * MeshFloatPropertyLayer.name -> name: string "NO DESCRIPTION"
+#+ * MeshIntProperty.value -> value: int "NO DESCRIPTION"
+#+ * MeshIntPropertyLayer.data -> data: collection, "(read-only)"
+#+ * MeshIntPropertyLayer.name -> name: string "NO DESCRIPTION"
+#+ * MeshSticky.co -> co: float[2] "Sticky texture coordinate location"
+#+ * MeshStringProperty.value -> value: string "NO DESCRIPTION"
+#+ * MeshStringPropertyLayer.data -> data: collection, "(read-only)"
+#+ * MeshStringPropertyLayer.name -> name: string "NO DESCRIPTION"
+#MeshTextureFace.blend_type -> blend_type: enum "Transparency blending mode"
+#MeshTextureFace.hide -> hide: boolean "Make face invisible"
+#+ * MeshTextureFace.image -> image: pointer "NO DESCRIPTION"
+#MeshTextureFace.pin_uv -> pin_uv: boolean[4] "NO DESCRIPTION"
+#+ * MeshTextureFace.select_uv -> select_uv: boolean[4] "NO DESCRIPTION"
+#MeshTextureFace.use_alpha_sort -> use_alpha_sort: boolean "Enable sorting of faces for correct alpha drawing (slow, use Clip Alpha instead when possible)"
+#MeshTextureFace.use_billboard -> use_billboard: boolean "Billboard with Z-axis constraint"
+#MeshTextureFace.use_bitmap_text -> use_bitmap_text: boolean "Enable bitmap text on face"
+#MeshTextureFace.use_blend_shared -> use_blend_shared: boolean "Blend vertex colors across face when vertices are shared"
+#MeshTextureFace.use_collision -> use_collision: boolean "Use face for collision and ray-sensor detection"
+#MeshTextureFace.use_halo -> use_halo: boolean "Screen aligned billboard"
+#MeshTextureFace.use_image -> use_image: boolean "Render face with texture"
+#MeshTextureFace.use_light -> use_light: boolean "Use light for face"
+#MeshTextureFace.use_object_color -> use_object_color: boolean "Use ObColor instead of vertex colors"
+#MeshTextureFace.use_shadow_cast -> use_shadow_cast: boolean "Face is used for shadow"
+#MeshTextureFace.use_twoside -> use_twoside: boolean "Render face two-sided"
+#+ * MeshTextureFace.uv -> uv: float[8] "NO DESCRIPTION"
+#+ * MeshTextureFace.uv1 -> uv1: float[2] "NO DESCRIPTION"
+#+ * MeshTextureFace.uv2 -> uv2: float[2] "NO DESCRIPTION"
+#+ * MeshTextureFace.uv3 -> uv3: float[2] "NO DESCRIPTION"
+#+ * MeshTextureFace.uv4 -> uv4: float[2] "NO DESCRIPTION"
+#+ * MeshTextureFace.uv_raw -> uv_raw: float[8] "Fixed size UV coordinates array"
+#+ * MeshTextureFaceLayer.active -> active: boolean "Sets the layer as active for display and editing"
+#+ * MeshTextureFaceLayer.active_clone -> active_clone: boolean "Sets the layer as active for cloning"
+#+ * MeshTextureFaceLayer.active_render -> active_render: boolean "Sets the layer as active for rendering"
+#+ * MeshTextureFaceLayer.data -> data: collection, "(read-only)"
+#+ * MeshTextureFaceLayer.name -> name: string "NO DESCRIPTION"
+#+ * MeshVertex.bevel_weight -> bevel_weight: float "Weight used by the Bevel modifier Only Vertices option"
+#+ * MeshVertex.co -> co: float[3] "NO DESCRIPTION"
+#+ * MeshVertex.groups -> groups: collection, "(read-only) Weights for the vertex groups this vertex is member of"
+#+ * MeshVertex.hide -> hide: boolean "NO DESCRIPTION"
+#+ * MeshVertex.index -> index: int, "(read-only) Index number of the vertex"
+#+ * MeshVertex.normal -> normal: float[3] "Vertex Normal"
+#+ * MeshVertex.select -> select: boolean "NO DESCRIPTION"
+#MetaBallElements.active -> active: pointer, "(read-only) Last selected element"
+#MetaElement.co -> co: float[3] "NO DESCRIPTION"
+#+ * MetaElement.hide -> hide: boolean "Hide element"
+#+ * MetaElement.radius -> radius: float "NO DESCRIPTION"
+#+ * MetaElement.rotation -> rotation: float[4] "NO DESCRIPTION"
+#+ * MetaElement.size_x -> size_x: float "Size of element, use of components depends on element type"
+#+ * MetaElement.size_y -> size_y: float "Size of element, use of components depends on element type"
+#+ * MetaElement.size_z -> size_z: float "Size of element, use of components depends on element type"
+#+ * MetaElement.stiffness -> stiffness: float "Stiffness defines how much of the element to fill"
+#+ * MetaElement.type -> type: enum "Metaball types"
+#MetaElement.use_negative -> use_negative: boolean "Set metaball as negative one"
+#+ * Modifier.name -> name: string "Modifier name"
+#Modifier.show_expanded -> show_expanded: boolean "Set modifier expanded in the user interface"
+#Modifier.show_in_editmode -> show_in_editmode: boolean "Use modifier while in the edit mode"
+#Modifier.show_on_cage -> show_on_cage: boolean "Enable direct editing of modifier control cage"
+#Modifier.show_render -> show_render: boolean "Use modifier during rendering"
+#Modifier.show_viewport -> show_viewport: boolean "Realtime display of a modifier"
+#+ * Modifier.type -> type: enum, "(read-only)"
+#Modifier|ArmatureModifier.invert_vertex_group -> invert_vertex_group: boolean "Invert vertex group influence"
+#+ * Modifier|ArmatureModifier.object -> object: pointer "Armature object to deform with"
+#+ * Modifier|ArmatureModifier.use_bone_envelopes -> use_bone_envelopes: boolean "NO DESCRIPTION"
+#Modifier|ArmatureModifier.use_deform_preserve_volume -> use_deform_preserve_volume: boolean "Deform rotation interpolation with quaternions"
+#Modifier|ArmatureModifier.use_multi_modifier -> use_multi_modifier: boolean "Use same input as previous modifier, and mix results using overall vgroup"
+#+ * Modifier|ArmatureModifier.use_vertex_groups -> use_vertex_groups: boolean "NO DESCRIPTION"
+#+ * Modifier|ArmatureModifier.vertex_group -> vertex_group: string "Vertex group name"
+#Modifier|ArrayModifier.constant_offset_displace -> constant_offset_displace: float[3] "NO DESCRIPTION"
+#+ * Modifier|ArrayModifier.count -> count: int "Number of duplicates to make"
+#+ * Modifier|ArrayModifier.curve -> curve: pointer "Curve object to fit array length to"
+#+ * Modifier|ArrayModifier.end_cap -> end_cap: pointer "Mesh object to use as an end cap"
+#Modifier|ArrayModifier.fit_length -> fit_length: float "Length to fit array within"
+#+ * Modifier|ArrayModifier.fit_type -> fit_type: enum "Array length calculation method"
+#Modifier|ArrayModifier.merge_threshold -> merge_threshold: float "Limit below which to merge vertices"
+#+ * Modifier|ArrayModifier.offset_object -> offset_object: pointer "NO DESCRIPTION"
+#Modifier|ArrayModifier.relative_offset_displace -> relative_offset_displace: float[3] "NO DESCRIPTION"
+#+ * Modifier|ArrayModifier.start_cap -> start_cap: pointer "Mesh object to use as a start cap"
+#Modifier|ArrayModifier.use_constant_offset -> use_constant_offset: boolean "Add a constant offset"
+#Modifier|ArrayModifier.use_merge_vertices -> use_merge_vertices: boolean "Merge vertices in adjacent duplicates"
+#Modifier|ArrayModifier.use_merge_vertices_cap -> use_merge_vertices_cap: boolean "Merge vertices in first and last duplicates"
+#Modifier|ArrayModifier.use_object_offset -> use_object_offset: boolean "Add another objects transformation to the total offset"
+#Modifier|ArrayModifier.use_relative_offset -> use_relative_offset: boolean "Add an offset relative to the objects bounding box"
+#Modifier|BevelModifier.angle_limit -> angle_limit: float "Angle above which to bevel edges"
+#+ * Modifier|BevelModifier.edge_weight_method -> edge_weight_method: enum "What edge weight to use for weighting a vertex"
+#+ * Modifier|BevelModifier.limit_method -> limit_method: enum "NO DESCRIPTION"
+#Modifier|BevelModifier.use_only_vertices -> use_only_vertices: boolean "Bevel verts/corners, not edges"
+#+ * Modifier|BevelModifier.width -> width: float "Bevel value/amount"
+#+ * Modifier|BooleanModifier.object -> object: pointer "Mesh object to use for Boolean operation"
+#+ * Modifier|BooleanModifier.operation -> operation: enum "NO DESCRIPTION"
+#Modifier|BuildModifier.frame_duration -> frame_duration: float "Specify the total time the build effect requires"
+#+ * Modifier|BuildModifier.frame_start -> frame_start: float "Specify the start frame of the effect"
+#+ * Modifier|BuildModifier.seed -> seed: int "Specify the seed for random if used"
+#Modifier|BuildModifier.use_random_order -> use_random_order: boolean "Randomize the faces or edges during build"
+#+ * Modifier|CastModifier.cast_type -> cast_type: enum "NO DESCRIPTION"
+#+ * Modifier|CastModifier.factor -> factor: float "NO DESCRIPTION"
+#+ * Modifier|CastModifier.object -> object: pointer "Control object: if available, its location determines the center of the effect"
+#+ * Modifier|CastModifier.radius -> radius: float "Only deform vertices within this distance from the center of the effect (leave as 0 for infinite.)"
+#+ * Modifier|CastModifier.size -> size: float "Size of projection shape (leave as 0 for auto.)"
+#Modifier|CastModifier.use_radius_as_size -> use_radius_as_size: boolean "Use radius as size of projection shape (0 = auto)"
+#+ * Modifier|CastModifier.use_transform -> use_transform: boolean "Use object transform to control projection shape"
+#Modifier|CastModifier.use_x -> use_x: boolean "NO DESCRIPTION"
+#Modifier|CastModifier.use_y -> use_y: boolean "NO DESCRIPTION"
+#Modifier|CastModifier.use_z -> use_z: boolean "NO DESCRIPTION"
+#+ * Modifier|CastModifier.vertex_group -> vertex_group: string "Vertex group name"
+#+ * Modifier|ClothModifier.collision_settings -> collision_settings: pointer, "(read-only)"
+#+ * Modifier|ClothModifier.point_cache -> point_cache: pointer, "(read-only)"
+#+ * Modifier|ClothModifier.settings -> settings: pointer, "(read-only)"
+#+ * Modifier|CollisionModifier.settings -> settings: pointer, "(read-only)"
+#+ * Modifier|CurveModifier.deform_axis -> deform_axis: enum "The axis that the curve deforms along"
+#+ * Modifier|CurveModifier.object -> object: pointer "Curve object to deform with"
+#+ * Modifier|CurveModifier.vertex_group -> vertex_group: string "Vertex group name"
+#+ * Modifier|DecimateModifier.face_count -> face_count: int, "(read-only) The current number of faces in the decimated mesh"
+#+ * Modifier|DecimateModifier.ratio -> ratio: float "Defines the ratio of triangles to reduce to"
+#+ * Modifier|DisplaceModifier.direction -> direction: enum "NO DESCRIPTION"
+#Modifier|DisplaceModifier.mid_level -> mid_level: float "Material value that gives no displacement"
+#+ * Modifier|DisplaceModifier.strength -> strength: float "NO DESCRIPTION"
+#+ * Modifier|DisplaceModifier.texture -> texture: pointer "NO DESCRIPTION"
+#+ * Modifier|DisplaceModifier.texture_coordinate_object -> texture_coordinate_object: pointer "NO DESCRIPTION"
+#Modifier|DisplaceModifier.texture_coords -> texture_coords: enum "NO DESCRIPTION"
+#+ * Modifier|DisplaceModifier.uv_layer -> uv_layer: string "UV layer name"
+#+ * Modifier|DisplaceModifier.vertex_group -> vertex_group: string "Vertex group name"
+#+ * Modifier|EdgeSplitModifier.split_angle -> split_angle: float "Angle above which to split edges"
+#+ * Modifier|EdgeSplitModifier.use_edge_angle -> use_edge_angle: boolean "Split edges with high angle between faces"
+#Modifier|EdgeSplitModifier.use_edge_sharp -> use_edge_sharp: boolean "Split edges that are marked as sharp"
+#+ * Modifier|ExplodeModifier.protect -> protect: float "Clean vertex group edges"
+#Modifier|ExplodeModifier.show_alive -> show_alive: boolean "Show mesh when particles are alive"
+#Modifier|ExplodeModifier.show_dead -> show_dead: boolean "Show mesh when particles are dead"
+#Modifier|ExplodeModifier.show_unborn -> show_unborn: boolean "Show mesh when particles are unborn"
+#Modifier|ExplodeModifier.use_edge_split -> use_edge_split: boolean "Split face edges for nicer shrapnel"
+#Modifier|ExplodeModifier.use_size -> use_size: boolean "Use particle size for the shrapnel"
+#+ * Modifier|ExplodeModifier.vertex_group -> vertex_group: string "NO DESCRIPTION"
+#+ * Modifier|FluidSimulationModifier.settings -> settings: pointer, "(read-only) Settings for how this object is used in the fluid simulation"
+#+ * Modifier|HookModifier.falloff -> falloff: float "If not zero, the distance from the hook where influence ends"
+#+ * Modifier|HookModifier.force -> force: float "Relative force of the hook"
+#+ * Modifier|HookModifier.object -> object: pointer "Parent Object for hook, also recalculates and clears offset"
+#+ * Modifier|HookModifier.subtarget -> subtarget: string "Name of Parent Bone for hook (if applicable), also recalculates and clears offset"
+#+ * Modifier|HookModifier.vertex_group -> vertex_group: string "Vertex group name"
+#+ * Modifier|LatticeModifier.object -> object: pointer "Lattice object to deform with"
+#+ * Modifier|LatticeModifier.vertex_group -> vertex_group: string "Vertex group name"
+#+ * Modifier|MaskModifier.armature -> armature: pointer "Armature to use as source of bones to mask"
+#Modifier|MaskModifier.invert_vertex_group -> invert_vertex_group: boolean "Use vertices that are not part of region defined"
+#+ * Modifier|MaskModifier.mode -> mode: enum "NO DESCRIPTION"
+#+ * Modifier|MaskModifier.vertex_group -> vertex_group: string "Vertex group name"
+#Modifier|MeshDeformModifier.invert_vertex_group -> invert_vertex_group: boolean "Invert vertex group influence"
+#+ * Modifier|MeshDeformModifier.is_bound -> is_bound: boolean, "(read-only) Whether geometry has been bound to control cage"
+#+ * Modifier|MeshDeformModifier.object -> object: pointer "Mesh object to deform with"
+#+ * Modifier|MeshDeformModifier.precision -> precision: int "The grid size for binding"
+#Modifier|MeshDeformModifier.use_dynamic_bind -> use_dynamic_bind: boolean "Recompute binding dynamically on top of other deformers (slower and more memory consuming.)"
+#+ * Modifier|MeshDeformModifier.vertex_group -> vertex_group: string "Vertex group name"
+#Modifier|MirrorModifier.merge_threshold -> merge_threshold: float "Distance from axis within which mirrored vertices are merged"
+#+ * Modifier|MirrorModifier.mirror_object -> mirror_object: pointer "Object to use as mirror"
+#Modifier|MirrorModifier.use_clip -> use_clip: boolean "Prevents vertices from going through the mirror during transform"
+#Modifier|MirrorModifier.use_mirror_u -> use_mirror_u: boolean "Mirror the U texture coordinate around the 0.5 point"
+#Modifier|MirrorModifier.use_mirror_v -> use_mirror_v: boolean "Mirror the V texture coordinate around the 0.5 point"
+#Modifier|MirrorModifier.use_mirror_vertex_groups -> use_mirror_vertex_groups: boolean "Mirror vertex groups (e.g. .R->.L)"
+#Modifier|MirrorModifier.use_x -> use_x: boolean "Enable X axis mirror"
+#Modifier|MirrorModifier.use_y -> use_y: boolean "Enable Y axis mirror"
+#Modifier|MirrorModifier.use_z -> use_z: boolean "Enable Z axis mirror"
+#+ * Modifier|MultiresModifier.filepath -> filepath: string "Path to external displacements file"
+#Modifier|MultiresModifier.is_external -> is_external: boolean, "(read-only) Store multires displacements outside the .blend file, to save memory"
+#+ * Modifier|MultiresModifier.levels -> levels: int "Number of subdivisions to use in the viewport"
+#+ * Modifier|MultiresModifier.render_levels -> render_levels: int "NO DESCRIPTION"
+#+ * Modifier|MultiresModifier.sculpt_levels -> sculpt_levels: int "Number of subdivisions to use in sculpt mode"
+#Modifier|MultiresModifier.show_only_control_edges -> show_only_control_edges: boolean "Skip drawing/rendering of interior subdivided edges"
+#+ * Modifier|MultiresModifier.subdivision_type -> subdivision_type: enum "Selects type of subdivision algorithm"
+#+ * Modifier|MultiresModifier.total_levels -> total_levels: int, "(read-only) Number of subdivisions for which displacements are stored"
+#+ * Modifier|ParticleInstanceModifier.axis -> axis: enum "Pole axis for rotation"
+#+ * Modifier|ParticleInstanceModifier.object -> object: pointer "Object that has the particle system"
+#Modifier|ParticleInstanceModifier.particle_system_index -> particle_system_index: int "NO DESCRIPTION"
+#+ * Modifier|ParticleInstanceModifier.position -> position: float "Position along path"
+#+ * Modifier|ParticleInstanceModifier.random_position -> random_position: float "Randomize position along path"
+#Modifier|ParticleInstanceModifier.show_alive -> show_alive: boolean "Show instances when particles are alive"
+#Modifier|ParticleInstanceModifier.show_dead -> show_dead: boolean "Show instances when particles are dead"
+#Modifier|ParticleInstanceModifier.show_unborn -> show_unborn: boolean "Show instances when particles are unborn"
+#Modifier|ParticleInstanceModifier.use_children -> use_children: boolean "Create instances from child particles"
+#Modifier|ParticleInstanceModifier.use_normal -> use_normal: boolean "Create instances from normal particles"
+#+ * Modifier|ParticleInstanceModifier.use_path -> use_path: boolean "Create instances along particle paths"
+#Modifier|ParticleInstanceModifier.use_preserve_shape -> use_preserve_shape: boolean "Dont stretch the object"
+#Modifier|ParticleInstanceModifier.use_size -> use_size: boolean "Use particle size to scale the instances"
+#+ * Modifier|ParticleSystemModifier.particle_system -> particle_system: pointer, "(read-only) Particle System that this modifier controls"
+#+ * Modifier|ScrewModifier.angle -> angle: float "Angle of revolution"
+#+ * Modifier|ScrewModifier.axis -> axis: enum "Screw axis"
+#+ * Modifier|ScrewModifier.iterations -> iterations: int "Number of times to apply the screw operation"
+#+ * Modifier|ScrewModifier.object -> object: pointer "Object to define the screw axis"
+#+ * Modifier|ScrewModifier.render_steps -> render_steps: int "Number of steps in the revolution"
+#+ * Modifier|ScrewModifier.screw_offset -> screw_offset: float "Offset the revolution along its axis"
+#+ * Modifier|ScrewModifier.steps -> steps: int "Number of steps in the revolution"
+#+ * Modifier|ScrewModifier.use_normal_calculate -> use_normal_calculate: boolean "Calculate the order of edges (needed for meshes, but not curves)"
+#+ * Modifier|ScrewModifier.use_normal_flip -> use_normal_flip: boolean "Flip normals of lathed faces"
+#+ * Modifier|ScrewModifier.use_object_screw_offset -> use_object_screw_offset: boolean "Use the distance between the objects to make a screw"
+#+ * Modifier|ShrinkwrapModifier.auxiliary_target -> auxiliary_target: pointer "Additional mesh target to shrink to"
+#+ * Modifier|ShrinkwrapModifier.offset -> offset: float "Distance to keep from the target"
+#+ * Modifier|ShrinkwrapModifier.subsurf_levels -> subsurf_levels: int "Number of subdivisions that must be performed before extracting vertices positions and normals"
+#+ * Modifier|ShrinkwrapModifier.target -> target: pointer "Mesh target to shrink to"
+#Modifier|ShrinkwrapModifier.use_cull_back_faces -> use_cull_back_faces: boolean "Stop vertices from projecting to a back face on the target"
+#Modifier|ShrinkwrapModifier.use_cull_front_faces -> use_cull_front_faces: boolean "Stop vertices from projecting to a front face on the target"
+#Modifier|ShrinkwrapModifier.use_keep_above_surface -> use_keep_above_surface: boolean "NO DESCRIPTION"
+#Modifier|ShrinkwrapModifier.use_negative_direction -> use_negative_direction: boolean "Allow vertices to move in the negative direction of axis"
+#Modifier|ShrinkwrapModifier.use_positive_direction -> use_positive_direction: boolean "Allow vertices to move in the positive direction of axis"
+#Modifier|ShrinkwrapModifier.use_project_x -> use_project_x: boolean "NO DESCRIPTION"
+#Modifier|ShrinkwrapModifier.use_project_y -> use_project_y: boolean "NO DESCRIPTION"
+#Modifier|ShrinkwrapModifier.use_project_z -> use_project_z: boolean "NO DESCRIPTION"
+#+ * Modifier|ShrinkwrapModifier.vertex_group -> vertex_group: string "Vertex group name"
+#Modifier|ShrinkwrapModifier.wrap_method -> wrap_method: enum "NO DESCRIPTION"
+#Modifier|SimpleDeformModifier.deform_method -> deform_method: enum "NO DESCRIPTION"
+#+ * Modifier|SimpleDeformModifier.factor -> factor: float "NO DESCRIPTION"
+#+ * Modifier|SimpleDeformModifier.limits -> limits: float[2] "Lower/Upper limits for deform"
+#Modifier|SimpleDeformModifier.lock_x -> lock_x: boolean "NO DESCRIPTION"
+#Modifier|SimpleDeformModifier.lock_y -> lock_y: boolean "NO DESCRIPTION"
+#+ * Modifier|SimpleDeformModifier.origin -> origin: pointer "Origin of modifier space coordinates"
+#Modifier|SimpleDeformModifier.use_relative -> use_relative: boolean "Sets the origin of deform space to be relative to the object"
+#+ * Modifier|SimpleDeformModifier.vertex_group -> vertex_group: string "Vertex group name"
+#+ * Modifier|SmokeModifier.coll_settings -> coll_settings: pointer, "(read-only)"
+#+ * Modifier|SmokeModifier.domain_settings -> domain_settings: pointer, "(read-only)"
+#+ * Modifier|SmokeModifier.flow_settings -> flow_settings: pointer, "(read-only)"
+#Modifier|SmokeModifier.smoke_type -> smoke_type: enum "NO DESCRIPTION"
+#+ * Modifier|SmoothModifier.factor -> factor: float "NO DESCRIPTION"
+#Modifier|SmoothModifier.iterations -> iterations: int "NO DESCRIPTION"
+#Modifier|SmoothModifier.use_x -> use_x: boolean "NO DESCRIPTION"
+#Modifier|SmoothModifier.use_y -> use_y: boolean "NO DESCRIPTION"
+#Modifier|SmoothModifier.use_z -> use_z: boolean "NO DESCRIPTION"
+#+ * Modifier|SmoothModifier.vertex_group -> vertex_group: string "Vertex group name"
+#+ * Modifier|SoftBodyModifier.point_cache -> point_cache: pointer, "(read-only)"
+#+ * Modifier|SoftBodyModifier.settings -> settings: pointer, "(read-only)"
+#+ * Modifier|SolidifyModifier.edge_crease_inner -> edge_crease_inner: float "Assign a crease to inner edges"
+#+ * Modifier|SolidifyModifier.edge_crease_outer -> edge_crease_outer: float "Assign a crease to outer edges"
+#+ * Modifier|SolidifyModifier.edge_crease_rim -> edge_crease_rim: float "Assign a crease to the edges making up the rim"
+#Modifier|SolidifyModifier.invert_vertex_group -> invert_vertex_group: boolean "Invert the vertex group influence"
+#+ * Modifier|SolidifyModifier.offset -> offset: float "Offset the thickness from the center"
+#+ * Modifier|SolidifyModifier.thickness -> thickness: float "Thickness of the shell"
+#+ * Modifier|SolidifyModifier.use_even_offset -> use_even_offset: boolean "Maintain thickness by adjusting for sharp corners (slow, disable when not needed)"
+#+ * Modifier|SolidifyModifier.use_quality_normals -> use_quality_normals: boolean "Calculate normals which result in more even thickness (slow, disable when not needed)"
+#+ * Modifier|SolidifyModifier.use_rim -> use_rim: boolean "Create edge loops between the inner and outer surfaces on face edges (slow, disable when not needed)"
+#+ * Modifier|SolidifyModifier.use_rim_material -> use_rim_material: boolean "Use in the next material for rim faces"
+#+ * Modifier|SolidifyModifier.vertex_group -> vertex_group: string "Vertex group name"
+#+ * Modifier|SubsurfModifier.levels -> levels: int "Number of subdivisions to perform"
+#+ * Modifier|SubsurfModifier.render_levels -> render_levels: int "Number of subdivisions to perform when rendering"
+#Modifier|SubsurfModifier.show_only_control_edges -> show_only_control_edges: boolean "Skip drawing/rendering of interior subdivided edges"
+#+ * Modifier|SubsurfModifier.subdivision_type -> subdivision_type: enum "Selects type of subdivision algorithm"
+#Modifier|SubsurfModifier.use_subsurf_uv -> use_subsurf_uv: boolean "Use subsurf to subdivide UVs"
+#+ * Modifier|UVProjectModifier.aspect_x -> aspect_x: float "NO DESCRIPTION"
+#+ * Modifier|UVProjectModifier.aspect_y -> aspect_y: float "NO DESCRIPTION"
+#+ * Modifier|UVProjectModifier.image -> image: pointer "NO DESCRIPTION"
+#Modifier|UVProjectModifier.projector_count -> projector_count: int "Number of projectors to use"
+#+ * Modifier|UVProjectModifier.projectors -> projectors: collection, "(read-only)"
+#+ * Modifier|UVProjectModifier.scale_x -> scale_x: float "NO DESCRIPTION"
+#+ * Modifier|UVProjectModifier.scale_y -> scale_y: float "NO DESCRIPTION"
+#Modifier|UVProjectModifier.use_image_override -> use_image_override: boolean "Override faces current images with the given image"
+#+ * Modifier|UVProjectModifier.uv_layer -> uv_layer: string "UV layer name"
+#+ * Modifier|WaveModifier.damping_time -> damping_time: float "NO DESCRIPTION"
+#+ * Modifier|WaveModifier.falloff_radius -> falloff_radius: float "NO DESCRIPTION"
+#+ * Modifier|WaveModifier.height -> height: float "NO DESCRIPTION"
+#+ * Modifier|WaveModifier.lifetime -> lifetime: float "NO DESCRIPTION"
+#+ * Modifier|WaveModifier.narrowness -> narrowness: float "NO DESCRIPTION"
+#+ * Modifier|WaveModifier.speed -> speed: float "NO DESCRIPTION"
+#+ * Modifier|WaveModifier.start_position_object -> start_position_object: pointer "NO DESCRIPTION"
+#+ * Modifier|WaveModifier.start_position_x -> start_position_x: float "NO DESCRIPTION"
+#+ * Modifier|WaveModifier.start_position_y -> start_position_y: float "NO DESCRIPTION"
+#+ * Modifier|WaveModifier.texture -> texture: pointer "Texture for modulating the wave"
+#Modifier|WaveModifier.texture_coords -> texture_coords: enum "Texture coordinates used for modulating input"
+#Modifier|WaveModifier.texture_coords_object -> texture_coords_object: pointer "NO DESCRIPTION"
+#+ * Modifier|WaveModifier.time_offset -> time_offset: float "Either the starting frame (for positive speed) or ending frame (for negative speed.)"
+#Modifier|WaveModifier.use_cyclic -> use_cyclic: boolean "Cyclic wave effect"
+#Modifier|WaveModifier.use_normal -> use_normal: boolean "Displace along normals"
+#Modifier|WaveModifier.use_normal_x -> use_normal_x: boolean "Enable displacement along the X normal"
+#Modifier|WaveModifier.use_normal_y -> use_normal_y: boolean "Enable displacement along the Y normal"
+#Modifier|WaveModifier.use_normal_z -> use_normal_z: boolean "Enable displacement along the Z normal"
+#Modifier|WaveModifier.use_x -> use_x: boolean "X axis motion"
+#Modifier|WaveModifier.use_y -> use_y: boolean "Y axis motion"
+#+ * Modifier|WaveModifier.uv_layer -> uv_layer: string "UV layer name"
+#+ * Modifier|WaveModifier.vertex_group -> vertex_group: string "Vertex group name for modulating the wave"
+#+ * Modifier|WaveModifier.width -> width: float "NO DESCRIPTION"
+#+ * MotionPath.frame_end -> frame_end: int, "(read-only) End frame of the stored range"
+#+ * MotionPath.frame_start -> frame_start: int, "(read-only) Starting frame of the stored range"
+#MotionPath.is_modified -> is_modified: boolean "Path is being edited"
+#+ * MotionPath.length -> length: int, "(read-only) Number of frames cached"
+#+ * MotionPath.points -> points: collection, "(read-only) Cached positions per frame"
+#+ * MotionPath.use_bone_head -> use_bone_head: boolean, "(read-only) For PoseBone paths, use the bone head location when calculating this path"
+#+ * MotionPathVert.co -> co: float[3] "NO DESCRIPTION"
+#+ * MotionPathVert.select -> select: boolean "Path point is selected for editing"
+#+ * NlaStrip.action -> action: pointer "Action referenced by this strip"
+#NlaStrip.action_frame_end -> action_frame_end: float "NO DESCRIPTION"
+#NlaStrip.action_frame_start -> action_frame_start: float "NO DESCRIPTION"
+#+ * NlaStrip.active -> active: boolean, "(read-only) NLA Strip is active"
+#+ * NlaStrip.blend_in -> blend_in: float "Number of frames at start of strip to fade in influence"
+#+ * NlaStrip.blend_out -> blend_out: float "NO DESCRIPTION"
+#NlaStrip.blend_type -> blend_type: enum "Method used for combining strips result with accumulated result"
+#+ * NlaStrip.extrapolation -> extrapolation: enum "Action to take for gaps past the strip extents"
+#+ * NlaStrip.fcurves -> fcurves: collection, "(read-only) F-Curves for controlling the strips influence and timing"
+#+ * NlaStrip.frame_end -> frame_end: float "NO DESCRIPTION"
+#+ * NlaStrip.frame_start -> frame_start: float "NO DESCRIPTION"
+#+ * NlaStrip.influence -> influence: float "Amount the strip contributes to the current result"
+#+ * NlaStrip.modifiers -> modifiers: collection, "(read-only) Modifiers affecting all the F-Curves in the referenced Action"
+#+ * NlaStrip.mute -> mute: boolean "NLA Strip is not evaluated"
+#+ * NlaStrip.name -> name: string "NO DESCRIPTION"
+#+ * NlaStrip.repeat -> repeat: float "Number of times to repeat the action range"
+#+ * NlaStrip.scale -> scale: float "Scaling factor for action"
+#+ * NlaStrip.select -> select: boolean "NLA Strip is selected"
+#+ * NlaStrip.strip_time -> strip_time: float "Frame of referenced Action to evaluate"
+#+ * NlaStrip.strips -> strips: collection, "(read-only) NLA Strips that this strip acts as a container for (if it is of type Meta)"
+#+ * NlaStrip.type -> type: enum, "(read-only) Type of NLA Strip"
+#NlaStrip.use_animated_influence -> use_animated_influence: boolean "Influence setting is controlled by an F-Curve rather than automatically determined"
+#NlaStrip.use_animated_time -> use_animated_time: boolean "Strip time is controlled by an F-Curve rather than automatically determined"
+#NlaStrip.use_animated_time_cyclic -> use_animated_time_cyclic: boolean "Cycle the animated time within the action start & end"
+#NlaStrip.use_auto_blend -> use_auto_blend: boolean "Number of frames for Blending In/Out is automatically determined from overlapping strips"
+#NlaStrip.use_reverse -> use_reverse: boolean "NLA Strip is played back in reverse order (only when timing is automatically determined)"
+#+ * NlaTrack.active -> active: boolean, "(read-only) NLA Track is active"
+#NlaTrack.is_solo -> is_solo: boolean, "(read-only) NLA Track is evaluated itself (i.e. active Action and all other NLA Tracks in the same AnimData block are disabled)"
+#+ * NlaTrack.lock -> lock: boolean "NLA Track is locked"
+#+ * NlaTrack.mute -> mute: boolean "NLA Track is not evaluated"
+#+ * NlaTrack.name -> name: string "NO DESCRIPTION"
+#+ * NlaTrack.select -> select: boolean "NLA Track is selected"
+#+ * NlaTrack.strips -> strips: collection, "(read-only) NLA Strips on this NLA-track"
+#+ * Node.inputs -> inputs: collection, "(read-only)"
+#+ * Node.location -> location: float[2] "NO DESCRIPTION"
+#+ * Node.name -> name: string "Node name"
+#+ * Node.outputs -> outputs: collection, "(read-only)"
+#+ * Node|CompositorNode.type -> type: enum, "(read-only)"
+#+ * Node|CompositorNode|CompositorNodeAlphaOver.premul -> premul: float "Mix Factor"
+#Node|CompositorNode|CompositorNodeAlphaOver.use_premultiply -> use_premultiply: boolean "NO DESCRIPTION"
+#+ * Node|CompositorNode|CompositorNodeBilateralblur.iterations -> iterations: int "NO DESCRIPTION"
+#+ * Node|CompositorNode|CompositorNodeBilateralblur.sigma_color -> sigma_color: float "NO DESCRIPTION"
+#+ * Node|CompositorNode|CompositorNodeBilateralblur.sigma_space -> sigma_space: float "NO DESCRIPTION"
+#+ * Node|CompositorNode|CompositorNodeBlur.factor -> factor: float "NO DESCRIPTION"
+#+ * Node|CompositorNode|CompositorNodeBlur.factor_x -> factor_x: float "NO DESCRIPTION"
+#+ * Node|CompositorNode|CompositorNodeBlur.factor_y -> factor_y: float "NO DESCRIPTION"
+#+ * Node|CompositorNode|CompositorNodeBlur.filter_type -> filter_type: enum "NO DESCRIPTION"
+#Node|CompositorNode|CompositorNodeBlur.size_x -> size_x: int "NO DESCRIPTION"
+#Node|CompositorNode|CompositorNodeBlur.size_y -> size_y: int "NO DESCRIPTION"
+#Node|CompositorNode|CompositorNodeBlur.use_bokeh -> use_bokeh: boolean "Uses circular filter (slower)"
+#Node|CompositorNode|CompositorNodeBlur.use_gamma_correction -> use_gamma_correction: boolean "Applies filter on gamma corrected values"
+#Node|CompositorNode|CompositorNodeBlur.use_relative -> use_relative: boolean "Use relative (percent) values to define blur radius"
+#+ * Node|CompositorNode|CompositorNodeChannelMatte.color_space -> color_space: enum "NO DESCRIPTION"
+#+ * Node|CompositorNode|CompositorNodeChannelMatte.limit_channel -> limit_channel: enum "Limit by this channels value"
+#Node|CompositorNode|CompositorNodeChannelMatte.limit_max -> limit_max: float "Values higher than this setting are 100% opaque"
+#Node|CompositorNode|CompositorNodeChannelMatte.limit_method -> limit_method: enum "Algorithm to use to limit channel"
+#Node|CompositorNode|CompositorNodeChannelMatte.limit_min -> limit_min: float "Values lower than this setting are 100% keyed"
+#Node|CompositorNode|CompositorNodeChannelMatte.matte_channel -> matte_channel: enum "Channel used to determine matte"
+#+ * Node|CompositorNode|CompositorNodeChromaMatte.gain -> gain: float "Alpha gain"
+#+ * Node|CompositorNode|CompositorNodeChromaMatte.lift -> lift: float "Alpha lift"
+#+ * Node|CompositorNode|CompositorNodeChromaMatte.shadow_adjust -> shadow_adjust: float "Adjusts the brightness of any shadows captured"
+#Node|CompositorNode|CompositorNodeChromaMatte.threshold -> threshold: float "Tolerance below which colors will be considered as exact matches"
+#Node|CompositorNode|CompositorNodeChromaMatte.tolerance -> tolerance: float "Tolerance for a color to be considered a keying color"
+#Node|CompositorNode|CompositorNodeColorBalance.correction_method -> correction_method: enum "NO DESCRIPTION"
+#+ * Node|CompositorNode|CompositorNodeColorBalance.gain -> gain: float[3] "Correction for Highlights"
+#+ * Node|CompositorNode|CompositorNodeColorBalance.gamma -> gamma: float[3] "Correction for Midtones"
+#+ * Node|CompositorNode|CompositorNodeColorBalance.lift -> lift: float[3] "Correction for Shadows"
+#+ * Node|CompositorNode|CompositorNodeColorBalance.offset -> offset: float[3] "Correction for Shadows"
+#+ * Node|CompositorNode|CompositorNodeColorBalance.power -> power: float[3] "Correction for Midtones"
+#+ * Node|CompositorNode|CompositorNodeColorBalance.slope -> slope: float[3] "Correction for Highlights"
+#Node|CompositorNode|CompositorNodeColorMatte.color_hue -> color_hue: float "Hue tolerance for colors to be considered a keying color"
+#Node|CompositorNode|CompositorNodeColorMatte.color_saturation -> color_saturation: float "Saturation Tolerance for the color"
+#Node|CompositorNode|CompositorNodeColorMatte.color_value -> color_value: float "Value Tolerance for the color"
+#+ * Node|CompositorNode|CompositorNodeColorSpill.channel -> channel: enum "NO DESCRIPTION"
+#+ * Node|CompositorNode|CompositorNodeColorSpill.limit_channel -> limit_channel: enum "NO DESCRIPTION"
+#Node|CompositorNode|CompositorNodeColorSpill.limit_method -> limit_method: enum "NO DESCRIPTION"
+#+ * Node|CompositorNode|CompositorNodeColorSpill.ratio -> ratio: float "Scale limit by value"
+#+ * Node|CompositorNode|CompositorNodeColorSpill.unspill_blue -> unspill_blue: float "Blue spillmap scale"
+#+ * Node|CompositorNode|CompositorNodeColorSpill.unspill_green -> unspill_green: float "Green spillmap scale"
+#+ * Node|CompositorNode|CompositorNodeColorSpill.unspill_red -> unspill_red: float "Red spillmap scale"
+#Node|CompositorNode|CompositorNodeColorSpill.use_unspill -> use_unspill: boolean "Compensate all channels (diffenrently) by hand"
+#Node|CompositorNode|CompositorNodeCrop.max_x -> max_x: int "NO DESCRIPTION"
+#Node|CompositorNode|CompositorNodeCrop.max_y -> max_y: int "NO DESCRIPTION"
+#Node|CompositorNode|CompositorNodeCrop.min_x -> min_x: int "NO DESCRIPTION"
+#Node|CompositorNode|CompositorNodeCrop.min_y -> min_y: int "NO DESCRIPTION"
+#Node|CompositorNode|CompositorNodeCrop.use_crop_size -> use_crop_size: boolean "Whether to crop the size of the input image"
+#+ * Node|CompositorNode|CompositorNodeCurveRGB.mapping -> mapping: pointer, "(read-only)"
+#+ * Node|CompositorNode|CompositorNodeCurveVec.mapping -> mapping: pointer, "(read-only)"
+#+ * Node|CompositorNode|CompositorNodeDBlur.angle -> angle: float "NO DESCRIPTION"
+#+ * Node|CompositorNode|CompositorNodeDBlur.center_x -> center_x: float "NO DESCRIPTION"
+#+ * Node|CompositorNode|CompositorNodeDBlur.center_y -> center_y: float "NO DESCRIPTION"
+#+ * Node|CompositorNode|CompositorNodeDBlur.distance -> distance: float "NO DESCRIPTION"
+#+ * Node|CompositorNode|CompositorNodeDBlur.iterations -> iterations: int "NO DESCRIPTION"
+#+ * Node|CompositorNode|CompositorNodeDBlur.spin -> spin: float "NO DESCRIPTION"
+#Node|CompositorNode|CompositorNodeDBlur.use_wrap -> use_wrap: boolean "NO DESCRIPTION"
+#+ * Node|CompositorNode|CompositorNodeDBlur.zoom -> zoom: float "NO DESCRIPTION"
+#+ * Node|CompositorNode|CompositorNodeDefocus.angle -> angle: int "Bokeh shape rotation offset in degrees"
+#Node|CompositorNode|CompositorNodeDefocus.blur_max -> blur_max: float "blur limit, maximum CoC radius, 0=no limit"
+#+ * Node|CompositorNode|CompositorNodeDefocus.bokeh -> bokeh: enum "NO DESCRIPTION"
+#+ * Node|CompositorNode|CompositorNodeDefocus.f_stop -> f_stop: float "Amount of focal blur, 128=infinity=perfect focus, half the value doubles the blur radius"
+#+ * Node|CompositorNode|CompositorNodeDefocus.samples -> samples: int "Number of samples (16=grainy, higher=less noise)"
+#+ * Node|CompositorNode|CompositorNodeDefocus.threshold -> threshold: float "CoC radius threshold, prevents background bleed on in-focus midground, 0=off"
+#Node|CompositorNode|CompositorNodeDefocus.use_gamma_correction -> use_gamma_correction: boolean "Enable gamma correction before and after main process"
+#Node|CompositorNode|CompositorNodeDefocus.use_preview -> use_preview: boolean "Enable sampling mode, useful for preview when using low samplecounts"
+#+ * Node|CompositorNode|CompositorNodeDefocus.use_zbuffer -> use_zbuffer: boolean "Disable when using an image as input instead of actual zbuffer (auto enabled if node not image based, eg. time node)"
+#+ * Node|CompositorNode|CompositorNodeDefocus.z_scale -> z_scale: float "Scales the Z input when not using a zbuffer, controls maximum blur designated by the color white or input value 1"
+#+ * Node|CompositorNode|CompositorNodeDiffMatte.falloff -> falloff: float "Color distances below this additional threshold are partially keyed"
+#+ * Node|CompositorNode|CompositorNodeDiffMatte.tolerance -> tolerance: float "Color distances below this threshold are keyed"
+#+ * Node|CompositorNode|CompositorNodeDilateErode.distance -> distance: int "Distance to grow/shrink (number of iterations)"
+#+ * Node|CompositorNode|CompositorNodeDistanceMatte.falloff -> falloff: float "Color distances below this additional threshold are partially keyed"
+#+ * Node|CompositorNode|CompositorNodeDistanceMatte.tolerance -> tolerance: float "Color distances below this threshold are keyed"
+#+ * Node|CompositorNode|CompositorNodeFilter.filter_type -> filter_type: enum "NO DESCRIPTION"
+#+ * Node|CompositorNode|CompositorNodeFlip.axis -> axis: enum "NO DESCRIPTION"
+#+ * Node|CompositorNode|CompositorNodeGlare.angle_offset -> angle_offset: float "Streak angle offset in degrees"
+#+ * Node|CompositorNode|CompositorNodeGlare.color_modulation -> color_modulation: float "Amount of Color Modulation, modulates colors of streaks and ghosts for a spectral dispersion effect"
+#+ * Node|CompositorNode|CompositorNodeGlare.fade -> fade: float "Streak fade-out factor"
+#+ * Node|CompositorNode|CompositorNodeGlare.glare_type -> glare_type: enum "NO DESCRIPTION"
+#+ * Node|CompositorNode|CompositorNodeGlare.iterations -> iterations: int "NO DESCRIPTION"
+#+ * Node|CompositorNode|CompositorNodeGlare.mix -> mix: float "-1 is original image only, 0 is exact 50/50 mix, 1 is processed image only"
+#+ * Node|CompositorNode|CompositorNodeGlare.quality -> quality: enum "If not set to high quality, the effect will be applied to a low-res copy of the source image"
+#+ * Node|CompositorNode|CompositorNodeGlare.size -> size: int "Glow/glare size (not actual size; relative to initial size of bright area of pixels)"
+#+ * Node|CompositorNode|CompositorNodeGlare.streaks -> streaks: int "Total number of streaks"
+#+ * Node|CompositorNode|CompositorNodeGlare.threshold -> threshold: float "The glare filter will only be applied to pixels brighter than this value"
+#Node|CompositorNode|CompositorNodeGlare.use_rotate_45 -> use_rotate_45: boolean "Simple star filter: add 45 degree rotation offset"
+#+ * Node|CompositorNode|CompositorNodeHueCorrect.mapping -> mapping: pointer, "(read-only)"
+#Node|CompositorNode|CompositorNodeHueSat.color_hue -> color_hue: float "NO DESCRIPTION"
+#Node|CompositorNode|CompositorNodeHueSat.color_saturation -> color_saturation: float "NO DESCRIPTION"
+#Node|CompositorNode|CompositorNodeHueSat.color_value -> color_value: float "NO DESCRIPTION"
+#+ * Node|CompositorNode|CompositorNodeIDMask.index -> index: int "Pass index number to convert to alpha"
+#Node|CompositorNode|CompositorNodeImage.frame_duration -> frame_duration: int "Number of images used in animation"
+#Node|CompositorNode|CompositorNodeImage.frame_offset -> frame_offset: int "Offsets the number of the frame to use in the animation"
+#Node|CompositorNode|CompositorNodeImage.frame_start -> frame_start: int "NO DESCRIPTION"
+#+ * Node|CompositorNode|CompositorNodeImage.image -> image: pointer "NO DESCRIPTION"
+#+ * Node|CompositorNode|CompositorNodeImage.layer -> layer: enum "NO DESCRIPTION"
+#Node|CompositorNode|CompositorNodeImage.use_auto_refresh -> use_auto_refresh: boolean "NO DESCRIPTION"
+#Node|CompositorNode|CompositorNodeImage.use_cyclic -> use_cyclic: boolean "NO DESCRIPTION"
+#Node|CompositorNode|CompositorNodeInvert.invert_alpha -> invert_alpha: boolean "NO DESCRIPTION"
+#Node|CompositorNode|CompositorNodeInvert.invert_rgb -> invert_rgb: boolean "NO DESCRIPTION"
+#Node|CompositorNode|CompositorNodeLensdist.use_fit -> use_fit: boolean "For positive distortion factor only: scale image such that black areas are not visible"
+#Node|CompositorNode|CompositorNodeLensdist.use_jitter -> use_jitter: boolean "Enable/disable jittering; faster, but also noisier"
+#Node|CompositorNode|CompositorNodeLensdist.use_projector -> use_projector: boolean "Enable/disable projector mode. Effect is applied in horizontal direction only"
+#+ * Node|CompositorNode|CompositorNodeLevels.channel -> channel: enum "NO DESCRIPTION"
+#Node|CompositorNode|CompositorNodeLumaMatte.limit_max -> limit_max: float "Values higher than this setting are 100% opaque"
+#Node|CompositorNode|CompositorNodeLumaMatte.limit_min -> limit_min: float "Values lower than this setting are 100% keyed"
+#+ * Node|CompositorNode|CompositorNodeMapUV.alpha -> alpha: int "NO DESCRIPTION"
+#+ * Node|CompositorNode|CompositorNodeMapValue.max -> max: float[1] "NO DESCRIPTION"
+#+ * Node|CompositorNode|CompositorNodeMapValue.min -> min: float[1] "NO DESCRIPTION"
+#+ * Node|CompositorNode|CompositorNodeMapValue.offset -> offset: float[1] "NO DESCRIPTION"
+#+ * Node|CompositorNode|CompositorNodeMapValue.size -> size: float[1] "NO DESCRIPTION"
+#+ * Node|CompositorNode|CompositorNodeMapValue.use_max -> use_max: boolean "NO DESCRIPTION"
+#+ * Node|CompositorNode|CompositorNodeMapValue.use_min -> use_min: boolean "NO DESCRIPTION"
+#+ * Node|CompositorNode|CompositorNodeMath.operation -> operation: enum "NO DESCRIPTION"
+#+ * Node|CompositorNode|CompositorNodeMixRGB.blend_type -> blend_type: enum "NO DESCRIPTION"
+#Node|CompositorNode|CompositorNodeMixRGB.use_alpha -> use_alpha: boolean "Include alpha of second input in this operation"
+#+ * Node|CompositorNode|CompositorNodeOutputFile.exr_codec -> exr_codec: enum "NO DESCRIPTION"
+#+ * Node|CompositorNode|CompositorNodeOutputFile.filepath -> filepath: string "Output path for the image, same functionality as render output."
+#+ * Node|CompositorNode|CompositorNodeOutputFile.frame_end -> frame_end: int "NO DESCRIPTION"
+#+ * Node|CompositorNode|CompositorNodeOutputFile.frame_start -> frame_start: int "NO DESCRIPTION"
+#+ * Node|CompositorNode|CompositorNodeOutputFile.image_type -> image_type: enum "NO DESCRIPTION"
+#+ * Node|CompositorNode|CompositorNodeOutputFile.quality -> quality: int "NO DESCRIPTION"
+#Node|CompositorNode|CompositorNodeOutputFile.use_exr_half -> use_exr_half: boolean "NO DESCRIPTION"
+#+ * Node|CompositorNode|CompositorNodePremulKey.mapping -> mapping: enum "Conversion between premultiplied alpha and key alpha"
+#+ * Node|CompositorNode|CompositorNodeRLayers.layer -> layer: enum "NO DESCRIPTION"
+#+ * Node|CompositorNode|CompositorNodeRLayers.scene -> scene: pointer "NO DESCRIPTION"
+#Node|CompositorNode|CompositorNodeRotate.filter_type -> filter_type: enum "Method to use to filter rotation"
+#+ * Node|CompositorNode|CompositorNodeScale.space -> space: enum "Coordinate space to scale relative to"
+#+ * Node|CompositorNode|CompositorNodeSplitViewer.axis -> axis: enum "NO DESCRIPTION"
+#+ * Node|CompositorNode|CompositorNodeSplitViewer.factor -> factor: int "NO DESCRIPTION"
+#+ * Node|CompositorNode|CompositorNodeTexture.node_output -> node_output: int "For node-based textures, which output node to use"
+#+ * Node|CompositorNode|CompositorNodeTexture.texture -> texture: pointer "NO DESCRIPTION"
+#+ * Node|CompositorNode|CompositorNodeTime.curve -> curve: pointer, "(read-only)"
+#Node|CompositorNode|CompositorNodeTime.frame_end -> frame_end: int "NO DESCRIPTION"
+#Node|CompositorNode|CompositorNodeTime.frame_start -> frame_start: int "NO DESCRIPTION"
+#+ * Node|CompositorNode|CompositorNodeTonemap.adaptation -> adaptation: float "If 0, global; if 1, based on pixel intensity"
+#+ * Node|CompositorNode|CompositorNodeTonemap.contrast -> contrast: float "Set to 0 to use estimate from input image"
+#+ * Node|CompositorNode|CompositorNodeTonemap.correction -> correction: float "If 0, same for all channels; if 1, each independent"
+#+ * Node|CompositorNode|CompositorNodeTonemap.gamma -> gamma: float "If not used, set to 1"
+#+ * Node|CompositorNode|CompositorNodeTonemap.intensity -> intensity: float "If less than zero, darkens image; otherwise, makes it brighter"
+#+ * Node|CompositorNode|CompositorNodeTonemap.key -> key: float "The value the average luminance is mapped to"
+#+ * Node|CompositorNode|CompositorNodeTonemap.offset -> offset: float "Normally always 1, but can be used as an extra control to alter the brightness curve"
+#+ * Node|CompositorNode|CompositorNodeTonemap.tonemap_type -> tonemap_type: enum "NO DESCRIPTION"
+#+ * Node|CompositorNode|CompositorNodeValToRGB.color_ramp -> color_ramp: pointer, "(read-only)"
+#+ * Node|CompositorNode|CompositorNodeVecBlur.factor -> factor: float "Scaling factor for motion vectors; actually shutter speed in frames"
+#+ * Node|CompositorNode|CompositorNodeVecBlur.samples -> samples: int "NO DESCRIPTION"
+#Node|CompositorNode|CompositorNodeVecBlur.speed_max -> speed_max: int "Maximum speed, or zero for none"
+#Node|CompositorNode|CompositorNodeVecBlur.speed_min -> speed_min: int "Minimum speed for a pixel to be blurred; used to separate background from foreground"
+#Node|CompositorNode|CompositorNodeVecBlur.use_curved -> use_curved: boolean "Interpolate between frames in a bezier curve, rather than linearly"
+#+ * Node|NodeGroup.nodetree -> nodetree: pointer "NO DESCRIPTION"
+#+ * Node|ShaderNode.type -> type: enum, "(read-only)"
+#+ * Node|ShaderNode|ShaderNodeExtendedMaterial.invert_normal -> invert_normal: boolean "Material Node uses inverted normal"
+#+ * Node|ShaderNode|ShaderNodeExtendedMaterial.material -> material: pointer "NO DESCRIPTION"
+#Node|ShaderNode|ShaderNodeExtendedMaterial.use_diffuse -> use_diffuse: boolean "Material Node outputs Diffuse"
+#Node|ShaderNode|ShaderNodeExtendedMaterial.use_specular -> use_specular: boolean "Material Node outputs Specular"
+#+ * Node|ShaderNode|ShaderNodeGeometry.color_layer -> color_layer: string "NO DESCRIPTION"
+#+ * Node|ShaderNode|ShaderNodeGeometry.uv_layer -> uv_layer: string "NO DESCRIPTION"
+#+ * Node|ShaderNode|ShaderNodeMapping.location -> location: float[3] "Location offset for the input coordinate"
+#Node|ShaderNode|ShaderNodeMapping.max -> max: float[3] "Maximum value to clamp coordinate to"
+#Node|ShaderNode|ShaderNodeMapping.min -> min: float[3] "Minimum value to clamp coordinate to"
+#+ * Node|ShaderNode|ShaderNodeMapping.rotation -> rotation: float[3] "Rotation offset for the input coordinate"
+#+ * Node|ShaderNode|ShaderNodeMapping.scale -> scale: float[3] "Scale adjustment for the input coordinate"
+#Node|ShaderNode|ShaderNodeMapping.use_max -> use_max: boolean "Clamp the output coordinate to a maximum value"
+#Node|ShaderNode|ShaderNodeMapping.use_min -> use_min: boolean "Clamp the output coordinate to a minimum value"
+#+ * Node|ShaderNode|ShaderNodeMaterial.invert_normal -> invert_normal: boolean "Material Node uses inverted normal"
+#+ * Node|ShaderNode|ShaderNodeMaterial.material -> material: pointer "NO DESCRIPTION"
+#Node|ShaderNode|ShaderNodeMaterial.use_diffuse -> use_diffuse: boolean "Material Node outputs Diffuse"
+#Node|ShaderNode|ShaderNodeMaterial.use_specular -> use_specular: boolean "Material Node outputs Specular"
+#+ * Node|ShaderNode|ShaderNodeMath.operation -> operation: enum "NO DESCRIPTION"
+#+ * Node|ShaderNode|ShaderNodeMixRGB.blend_type -> blend_type: enum "NO DESCRIPTION"
+#Node|ShaderNode|ShaderNodeMixRGB.use_alpha -> use_alpha: boolean "Include alpha of second input in this operation"
+#+ * Node|ShaderNode|ShaderNodeRGBCurve.mapping -> mapping: pointer, "(read-only)"
+#+ * Node|ShaderNode|ShaderNodeTexture.node_output -> node_output: int "For node-based textures, which output node to use"
+#+ * Node|ShaderNode|ShaderNodeTexture.texture -> texture: pointer "NO DESCRIPTION"
+#+ * Node|ShaderNode|ShaderNodeValToRGB.color_ramp -> color_ramp: pointer, "(read-only)"
+#+ * Node|ShaderNode|ShaderNodeVectorCurve.mapping -> mapping: pointer, "(read-only)"
+#+ * Node|ShaderNode|ShaderNodeVectorMath.operation -> operation: enum "NO DESCRIPTION"
+#+ * Node|TextureNode.type -> type: enum, "(read-only)"
+#+ * Node|TextureNode|TextureNodeBricks.offset -> offset: float "NO DESCRIPTION"
+#+ * Node|TextureNode|TextureNodeBricks.offset_frequency -> offset_frequency: int "Offset every N rows"
+#+ * Node|TextureNode|TextureNodeBricks.squash -> squash: float "NO DESCRIPTION"
+#+ * Node|TextureNode|TextureNodeBricks.squash_frequency -> squash_frequency: int "Squash every N rows"
+#+ * Node|TextureNode|TextureNodeCurveRGB.mapping -> mapping: pointer, "(read-only)"
+#+ * Node|TextureNode|TextureNodeCurveTime.curve -> curve: pointer, "(read-only)"
+#Node|TextureNode|TextureNodeCurveTime.frame_end -> frame_end: int "NO DESCRIPTION"
+#Node|TextureNode|TextureNodeCurveTime.frame_start -> frame_start: int "NO DESCRIPTION"
+#+ * Node|TextureNode|TextureNodeImage.image -> image: pointer "NO DESCRIPTION"
+#+ * Node|TextureNode|TextureNodeMath.operation -> operation: enum "NO DESCRIPTION"
+#+ * Node|TextureNode|TextureNodeMixRGB.blend_type -> blend_type: enum "NO DESCRIPTION"
+#Node|TextureNode|TextureNodeMixRGB.use_alpha -> use_alpha: boolean "Include alpha of second input in this operation"
+#Node|TextureNode|TextureNodeOutput.filepath -> filepath: string "NO DESCRIPTION"
+#+ * Node|TextureNode|TextureNodeTexture.node_output -> node_output: int "For node-based textures, which output node to use"
+#+ * Node|TextureNode|TextureNodeTexture.texture -> texture: pointer "NO DESCRIPTION"
+#+ * Node|TextureNode|TextureNodeValToRGB.color_ramp -> color_ramp: pointer, "(read-only)"
+#+ * ObjectBase.layers -> layers: boolean[20] "Layers the object base is on"
+#+ * ObjectBase.object -> object: pointer, "(read-only) Object this base links to"
+#+ * ObjectBase.select -> select: boolean "Object base selection state"
+#+ * ObjectConstraints.active -> active: pointer "Active Object constraint"
+#+ * Operator.bl_description -> bl_description: string "NO DESCRIPTION"
+#+ * Operator.bl_idname -> bl_idname: string "NO DESCRIPTION"
+#+ * Operator.bl_label -> bl_label: string "NO DESCRIPTION"
+#+ * Operator.bl_options -> bl_options: enum "Options for this operator type"
+#+ * Operator.has_reports -> has_reports: boolean, "(read-only) Operator has a set of reports (warnings and errors) from last execution"
+#+ * Operator.layout -> layout: pointer, "(read-only)"
+#+ * Operator.name -> name: string, "(read-only)"
+#+ * Operator.properties -> properties: pointer, "(read-only)"
+#+ * OperatorTypeMacro.properties -> properties: pointer, "(read-only)"
+#+ * PackedFile.size -> size: int, "(read-only) Size of packed file in bytes"
+#+ * Paint.brush -> brush: pointer "Active Brush"
+#+ * Paint.show_brush -> show_brush: boolean "NO DESCRIPTION"
+#+ * Paint.show_brush_on_surface -> show_brush_on_surface: boolean "NO DESCRIPTION"
+#Paint.show_low_resolution -> show_low_resolution: boolean "For multires, show low resolution while navigating the view"
+#+ * Paint|ImagePaint.invert_stencil -> invert_stencil: boolean "Invert the stencil layer"
+#+ * Paint|ImagePaint.normal_angle -> normal_angle: int "Paint most on faces pointing towards the view according to this angle"
+#+ * Paint|ImagePaint.screen_grab_size -> screen_grab_size: int[2] "Size to capture the image for re-projecting"
+#+ * Paint|ImagePaint.seam_bleed -> seam_bleed: int "Extend paint beyond the faces UVs to reduce seams (in pixels, slower)"
+#+ * Paint|ImagePaint.show_brush -> show_brush: boolean "Enables brush shape while not drawing"
+#+ * Paint|ImagePaint.show_brush_draw -> show_brush_draw: boolean "Enables brush shape while drawing"
+#Paint|ImagePaint.use_backface_culling -> use_backface_culling: boolean "Ignore faces pointing away from the view (faster)"
+#+ * Paint|ImagePaint.use_clone_layer -> use_clone_layer: boolean "Use another UV layer as clone source, otherwise use 3D the cursor as the source"
+#+ * Paint|ImagePaint.use_normal_falloff -> use_normal_falloff: boolean "Paint most on faces pointing towards the view"
+#+ * Paint|ImagePaint.use_occlude -> use_occlude: boolean "Only paint onto the faces directly under the brush (slower)"
+#+ * Paint|ImagePaint.use_projection -> use_projection: boolean "Use projection painting for improved consistency in the brush strokes"
+#+ * Paint|ImagePaint.use_stencil_layer -> use_stencil_layer: boolean "Set the mask layer from the UV layer buttons"
+#+ * Paint|Sculpt.lock_x -> lock_x: boolean "Disallow changes to the X axis of vertices"
+#+ * Paint|Sculpt.lock_y -> lock_y: boolean "Disallow changes to the Y axis of vertices"
+#+ * Paint|Sculpt.lock_z -> lock_z: boolean "Disallow changes to the Z axis of vertices"
+#Paint|Sculpt.radial_symmetry -> radial_symmetry: int[3] "Number of times to copy strokes across the surface"
+#+ * Paint|Sculpt.use_symmetry_feather -> use_symmetry_feather: boolean "Reduce the strength of the brush where it overlaps symmetrical daubs"
+#Paint|Sculpt.use_symmetry_x -> use_symmetry_x: boolean "Mirror brush across the X axis"
+#Paint|Sculpt.use_symmetry_y -> use_symmetry_y: boolean "Mirror brush across the Y axis"
+#Paint|Sculpt.use_symmetry_z -> use_symmetry_z: boolean "Mirror brush across the Z axis"
+#Paint|Sculpt.use_threaded -> use_threaded: boolean "Take advantage of multiple CPU cores to improve sculpting performance"
+#Paint|VertexPaint.use_all_faces -> use_all_faces: boolean "Paint on all faces inside brush"
+#Paint|VertexPaint.use_normal -> use_normal: boolean "Applies the vertex normal before painting"
+#Paint|VertexPaint.use_spray -> use_spray: boolean "Keep applying paint effect while holding mouse"
+#+ * Panel.bl_context -> bl_context: string "The context in which the panel belongs to. (TODO: explain the possible combinations bl_context/bl_region_type/bl_space_type)"
+#+ * Panel.bl_idname -> bl_idname: string "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 class name is OBJECT_PT_hello, and bl_idname is not set by the script, then bl_idname = OBJECT_PT_hello"
+#+ * Panel.bl_label -> bl_label: string "The panel label, shows up in the panel header at the right of the triangle used to collapse the panel."
+#+ * Panel.bl_region_type -> bl_region_type: enum "The region where the panel is going to be used in."
+#+ * Panel.bl_show_header -> bl_show_header: boolean "If set to True, the panel shows a header, which contains a clickable arrow to collapse the panel and the label (see bl_label)."
+#+ * Panel.bl_space_type -> bl_space_type: enum "The space where the panel is going to be used in."
+ + * Panel.bl_default_closed -> bl_use_closed: boolean "Defines if the panel has to be open or collapsed at the time of its creation. Note that once the panel has been created with bl_default_closed = True, at reload (F8) it stays open."
+#+ * Panel.layout -> layout: pointer, "(read-only) Defines the structure of the panel in the UI."
+#TODO SHOULD THIS BE HERE * Panel.text -> text: string "XXX todo"
+#+ * Particle.alive_state -> alive_state: enum "NO DESCRIPTION"
+#+ * Particle.angular_velocity -> angular_velocity: float[3] "NO DESCRIPTION"
+#Particle.birth_time -> birth_time: float "NO DESCRIPTION"
+#+ * Particle.die_time -> die_time: float "NO DESCRIPTION"
+#Particle.is_exist -> is_exist: boolean, "(read-only)"
+#Particle.is_hair -> is_hair: collection, "(read-only)"
+#+ * Particle.is_visible -> is_visible: boolean, "(read-only)"
+#+ * Particle.keys -> keys: collection, "(read-only)"
+#+ * Particle.lifetime -> lifetime: float "NO DESCRIPTION"
+#+ * Particle.location -> location: float[3] "NO DESCRIPTION"
+#+ * Particle.prev_angular_velocity -> prev_angular_velocity: float[3] "NO DESCRIPTION"
+#+ * Particle.prev_location -> prev_location: float[3] "NO DESCRIPTION"
+#+ * Particle.prev_rotation -> prev_rotation: float[4] "NO DESCRIPTION"
+#+ * Particle.prev_velocity -> prev_velocity: float[3] "NO DESCRIPTION"
+#+ * Particle.rotation -> rotation: float[4] "NO DESCRIPTION"
+#+ * Particle.size -> size: float "NO DESCRIPTION"
+#+ * Particle.velocity -> velocity: float[3] "NO DESCRIPTION"
+#+ * ParticleBrush.count -> count: int "Particle count"
+#+ * ParticleBrush.curve -> curve: pointer, "(read-only)"
+#+ * ParticleBrush.length_mode -> length_mode: enum "NO DESCRIPTION"
+#+ * ParticleBrush.puff_mode -> puff_mode: enum "NO DESCRIPTION"
+#+ * ParticleBrush.size -> size: int "Brush size"
+#+ * ParticleBrush.steps -> steps: int "Brush steps"
+#+ * ParticleBrush.strength -> strength: float "Brush strength"
+#+ * ParticleBrush.use_puff_volume -> use_puff_volume: boolean "Apply puff to unselected end-points, (helps maintain hair volume when puffing root)"
+#+ * ParticleDupliWeight.count -> count: int "The number of times this object is repeated with respect to other objects"
+#+ * ParticleDupliWeight.name -> name: string, "(read-only) Particle dupliobject name"
+#+ * ParticleEdit.brush -> brush: pointer, "(read-only)"
+#ParticleEdit.default_key_count -> default_key_count: int "How many keys to make new particles with"
+#+ * ParticleEdit.draw_step -> draw_step: int "How many steps to draw the path with"
+#+ * ParticleEdit.emitter_distance -> emitter_distance: float "Distance to keep particles away from the emitter"
+#+ * ParticleEdit.fade_frames -> fade_frames: int "How many frames to fade"
+#ParticleEdit.is_editable -> is_editable: boolean, "(read-only) A valid edit mode exists"
+#ParticleEdit.is_hair -> is_hair: boolean, "(read-only) Editing hair"
+#+ * ParticleEdit.object -> object: pointer, "(read-only) The edited object"
+#ParticleEdit.select_mode -> select_mode: enum "Particle select and display mode"
+#ParticleEdit.show_particles -> show_particles: boolean "Draw actual particles"
+#+ * ParticleEdit.tool -> tool: enum "NO DESCRIPTION"
+#+ * ParticleEdit.type -> type: enum "NO DESCRIPTION"
+#ParticleEdit.use_auto_velocity -> use_auto_velocity: boolean "Calculate point velocities automatically"
+#ParticleEdit.use_default_interpolate -> use_default_interpolate: boolean "Interpolate new particles from the existing ones"
+#ParticleEdit.use_emitter_deflect -> use_emitter_deflect: boolean "Keep paths from intersecting the emitter"
+#ParticleEdit.use_fade_time -> use_fade_time: boolean "Fade paths and keys further away from current frame"
+#ParticleEdit.use_preserve_length -> use_preserve_length: boolean "Keep path lengths constant"
+#ParticleEdit.use_preserve_root -> use_preserve_root: boolean "Keep root keys unmodified"
+#ParticleHairKey.co -> co: float[3] "Location of the hair key in object space"
+#ParticleHairKey.co_hair_space -> co_hair_space: float[3] "Location of the hair key in its internal coordinate system, relative to the emitting face"
+#+ * ParticleHairKey.time -> time: float "Relative time of key over hair length"
+#+ * ParticleHairKey.weight -> weight: float "Weight for cloth simulation"
+#+ * ParticleKey.angular_velocity -> angular_velocity: float[3] "Key angular velocity"
+#+ * ParticleKey.location -> location: float[3] "Key location"
+#+ * ParticleKey.rotation -> rotation: float[4] "Key rotation quaterion"
+#+ * ParticleKey.time -> time: float "Time of key over the simulation"
+#+ * ParticleKey.velocity -> velocity: float[3] "Key velocity"
+#+ * ParticleSystem.active_particle_target -> active_particle_target: pointer, "(read-only)"
+#+ * ParticleSystem.active_particle_target_index -> active_particle_target_index: int "NO DESCRIPTION"
+#+ * ParticleSystem.billboard_normal_uv -> billboard_normal_uv: string "UV Layer to control billboard normals"
+#+ * ParticleSystem.billboard_split_uv -> billboard_split_uv: string "UV Layer to control billboard splitting"
+#+ * ParticleSystem.billboard_time_index_uv -> billboard_time_index_uv: string "UV Layer to control billboard time index (X-Y)"
+#+ * ParticleSystem.child_particles -> child_particles: collection, "(read-only) Child particles generated by the particle system"
+#+ * ParticleSystem.cloth -> cloth: pointer, "(read-only) Cloth dynamics for hair"
+#ParticleSystem.has_multiple_caches -> has_multiple_caches: boolean, "(read-only) Particle system has multiple point caches"
+#ParticleSystem.invert_vertex_group_clump -> invert_vertex_group_clump: boolean "Negate the effect of the clump vertex group"
+#ParticleSystem.invert_vertex_group_density -> invert_vertex_group_density: boolean "Negate the effect of the density vertex group"
+#ParticleSystem.invert_vertex_group_field -> invert_vertex_group_field: boolean "Negate the effect of the field vertex group"
+#ParticleSystem.invert_vertex_group_kink -> invert_vertex_group_kink: boolean "Negate the effect of the kink vertex group"
+#ParticleSystem.invert_vertex_group_length -> invert_vertex_group_length: boolean "Negate the effect of the length vertex group"
+#ParticleSystem.invert_vertex_group_rotation -> invert_vertex_group_rotation: boolean "Negate the effect of the rotation vertex group"
+#ParticleSystem.invert_vertex_group_roughness_1 -> invert_vertex_group_roughness_1: boolean "Negate the effect of the roughness 1 vertex group"
+#ParticleSystem.invert_vertex_group_roughness_2 -> invert_vertex_group_roughness_2: boolean "Negate the effect of the roughness 2 vertex group"
+#ParticleSystem.invert_vertex_group_roughness_end -> invert_vertex_group_roughness_end: boolean "Negate the effect of the roughness end vertex group"
+#ParticleSystem.invert_vertex_group_size -> invert_vertex_group_size: boolean "Negate the effect of the size vertex group"
+#ParticleSystem.invert_vertex_group_tangent -> invert_vertex_group_tangent: boolean "Negate the effect of the tangent vertex group"
+#ParticleSystem.invert_vertex_group_velocity -> invert_vertex_group_velocity: boolean "Negate the effect of the velocity vertex group"
+#ParticleSystem.is_editable -> is_editable: boolean, "(read-only) Particle system can be edited in particle mode"
+#ParticleSystem.is_edited -> is_edited: boolean, "(read-only) Particle system has been edited in particle mode"
+#ParticleSystem.is_global_hair -> is_global_hair: boolean, "(read-only) Hair keys are in global coordinate space"
+#+ * ParticleSystem.name -> name: string "Particle system name"
+#+ * ParticleSystem.parent -> parent: pointer "Use this objects coordinate system instead of global coordinate system"
+#+ * ParticleSystem.particles -> particles: collection, "(read-only) Particles generated by the particle system"
+#+ * ParticleSystem.point_cache -> point_cache: pointer, "(read-only)"
+#+ * ParticleSystem.reactor_target_object -> reactor_target_object: pointer "For reactor systems, the object that has the target particle system (empty if same object)"
+#+ * ParticleSystem.reactor_target_particle_system -> reactor_target_particle_system: int "For reactor systems, index of particle system on the target object"
+#+ * ParticleSystem.seed -> seed: int "Offset in the random number table, to get a different randomized result"
+#+ * ParticleSystem.settings -> settings: pointer "Particle system settings"
+#+ * ParticleSystem.targets -> targets: collection, "(read-only) Target particle systems"
+#ParticleSystem.use_hair_dynamics -> use_hair_dynamics: boolean "Enable hair dynamics using cloth simulation"
+#ParticleSystem.use_keyed_timing -> use_keyed_timing: boolean "Use key times"
+#+ * ParticleSystem.vertex_group_clump -> vertex_group_clump: string "Vertex group to control clump"
+#+ * ParticleSystem.vertex_group_density -> vertex_group_density: string "Vertex group to control density"
+#+ * ParticleSystem.vertex_group_field -> vertex_group_field: string "Vertex group to control field"
+#+ * ParticleSystem.vertex_group_kink -> vertex_group_kink: string "Vertex group to control kink"
+#+ * ParticleSystem.vertex_group_length -> vertex_group_length: string "Vertex group to control length"
+#+ * ParticleSystem.vertex_group_rotation -> vertex_group_rotation: string "Vertex group to control rotation"
+#ParticleSystem.vertex_group_roughness_1 -> vertex_group_roughness_1: string "Vertex group to control roughness 1"
+#ParticleSystem.vertex_group_roughness_2 -> vertex_group_roughness_2: string "Vertex group to control roughness 2"
+#+ * ParticleSystem.vertex_group_roughness_end -> vertex_group_roughness_end: string "Vertex group to control roughness end"
+#+ * ParticleSystem.vertex_group_size -> vertex_group_size: string "Vertex group to control size"
+#+ * ParticleSystem.vertex_group_tangent -> vertex_group_tangent: string "Vertex group to control tangent"
+#+ * ParticleSystem.vertex_group_velocity -> vertex_group_velocity: string "Vertex group to control velocity"
+#ParticleTarget.alliance -> alliance: enum "NO DESCRIPTION"
+#+ * ParticleTarget.duration -> duration: float "NO DESCRIPTION"
+#ParticleTarget.is_valid -> is_valid: boolean "Keyed particles target is valid"
+#+ * ParticleTarget.name -> name: string, "(read-only) Particle target name"
+#+ * ParticleTarget.object -> object: pointer "The object that has the target particle system (empty if same object)"
+#+ * ParticleTarget.system -> system: int "The index of particle system on the target object"
+#+ * ParticleTarget.time -> time: float "NO DESCRIPTION"
+#+ * PointCache.active_point_cache_index -> active_point_cache_index: int "NO DESCRIPTION"
+#+ * PointCache.filepath -> filepath: string "Cache file path"
+#+ * PointCache.frame_end -> frame_end: int "Frame on which the simulation stops"
+#+ * PointCache.frame_start -> frame_start: int "Frame on which the simulation starts"
+#PointCache.frame_step -> frame_step: int "Number of frames between cached frames"
+#+ * PointCache.frames_skipped -> frames_skipped: boolean, "(read-only)"
+#+ * PointCache.index -> index: int "Index number of cache files"
+#+ * PointCache.info -> info: string, "(read-only) Info on current cache status"
+#PointCache.is_baked -> is_baked: boolean, "(read-only)"
+#PointCache.is_baking -> is_baking: boolean, "(read-only)"
+#PointCache.is_outdated -> is_outdated: boolean, "(read-only)"
+#+ * PointCache.name -> name: string "Cache name"
+#PointCache.point_caches -> point_caches: collection, "(read-only) Point cache list"
+#PointCache.use_disk_cache -> use_disk_cache: boolean "Save cache files to disk (.blend file must be saved first)"
+#PointCache.use_external -> use_external: boolean "Read cache from an external location"
+#+ * PointCache.use_library_path -> use_library_path: boolean "Use this files path when library linked into another file."
+#PointCache.use_quick_cache -> use_quick_cache: boolean "Update simulation with cache steps"
+#+ * PointDensity.color_ramp -> color_ramp: pointer, "(read-only)"
+#+ * PointDensity.color_source -> color_source: enum "Data to derive color results from"
+#+ * PointDensity.falloff -> falloff: enum "Method of attenuating density by distance from the point"
+#PointDensity.falloff_soft -> falloff_soft: float "Softness of the soft falloff option"
+#+ * PointDensity.noise_basis -> noise_basis: enum "Noise formula used for turbulence"
+#+ * PointDensity.object -> object: pointer "Object to take point data from"
+#PointDensity.particle_cache_space -> particle_cache_space: enum "Co-ordinate system to cache particles in"
+#+ * PointDensity.particle_system -> particle_system: pointer "Particle System to render as points"
+#+ * PointDensity.point_source -> point_source: enum "Point data to use as renderable point density"
+#+ * PointDensity.radius -> radius: float "Radius from the shaded sample to look for points within"
+#+ * PointDensity.speed_scale -> speed_scale: float "Multiplier to bring particle speed within an acceptable range"
+#+ * PointDensity.turbulence_depth -> turbulence_depth: int "Level of detail in the added turbulent noise"
+#+ * PointDensity.turbulence_influence -> turbulence_influence: enum "Method for driving added turbulent noise"
+#PointDensity.turbulence_scale -> turbulence_scale: float "Scale of the added turbulent noise"
+#+ * PointDensity.turbulence_strength -> turbulence_strength: float "NO DESCRIPTION"
+#PointDensity.use_turbulence -> use_turbulence: boolean "Add directed noise to the density at render-time"
+#PointDensity.vertex_cache_space -> vertex_cache_space: enum "Co-ordinate system to cache vertices in"
+#+ * Pose.active_bone_group_index -> active_bone_group_index: int "Active index in bone groups array"
+#+ * Pose.animation_visualisation -> animation_visualisation: pointer, "(read-only) Animation data for this datablock"
+#+ * Pose.bone_groups -> bone_groups: collection, "(read-only) Groups of the bones"
+#+ * Pose.bones -> bones: collection, "(read-only) Individual pose bones for the armature"
+#+ * Pose.ik_param -> ik_param: pointer, "(read-only) Parameters for IK solver"
+#+ * Pose.ik_solver -> ik_solver: enum "Selection of IK solver for IK chain, current choice is 0 for Legacy, 1 for iTaSC"
+#+ * PoseBone.bone -> bone: pointer, "(read-only) Bone associated with this PoseBone"
+#+ * PoseBone.bone_group -> bone_group: pointer "Bone Group this pose channel belongs to"
+#+ * PoseBone.bone_group_index -> bone_group_index: int "Bone Group this pose channel belongs to (0=no group)"
+#+ * PoseBone.child -> child: pointer, "(read-only) Child of this pose bone"
+#+ * PoseBone.constraints -> constraints: collection, "(read-only) Constraints that act on this PoseChannel"
+#+ * PoseBone.custom_shape -> custom_shape: pointer "Object that defines custom draw type for this bone"
+#+ * PoseBone.custom_shape_transform -> custom_shape_transform: pointer "Bone that defines the display transform of this custom shape"
+#+ * PoseBone.head -> head: float[3], "(read-only) Location of head of the channels bone"
+#PoseBone.ik_linear_weight -> ik_linear_weight: float "Weight of scale constraint for IK"
+#+ * PoseBone.ik_max_x -> ik_max_x: float "Maximum angles for IK Limit"
+#+ * PoseBone.ik_max_y -> ik_max_y: float "Maximum angles for IK Limit"
+#+ * PoseBone.ik_max_z -> ik_max_z: float "Maximum angles for IK Limit"
+#+ * PoseBone.ik_min_x -> ik_min_x: float "Minimum angles for IK Limit"
+#+ * PoseBone.ik_min_y -> ik_min_y: float "Minimum angles for IK Limit"
+#+ * PoseBone.ik_min_z -> ik_min_z: float "Minimum angles for IK Limit"
+#PoseBone.ik_rotation_weight -> ik_rotation_weight: float "Weight of rotation constraint for IK"
+#+ * PoseBone.ik_stiffness_x -> ik_stiffness_x: float "IK stiffness around the X axis"
+#+ * PoseBone.ik_stiffness_y -> ik_stiffness_y: float "IK stiffness around the Y axis"
+#+ * PoseBone.ik_stiffness_z -> ik_stiffness_z: float "IK stiffness around the Z axis"
+#+ * PoseBone.ik_stretch -> ik_stretch: float "Allow scaling of the bone for IK"
+#PoseBone.is_in_ik_chain -> is_in_ik_chain: boolean, "(read-only) Is part of an IK chain"
+#+ * PoseBone.location -> location: float[3] "NO DESCRIPTION"
+#PoseBone.lock_ik_x -> lock_ik_x: boolean "Disallow movement around the X axis"
+#PoseBone.lock_ik_y -> lock_ik_y: boolean "Disallow movement around the Y axis"
+#PoseBone.lock_ik_z -> lock_ik_z: boolean "Disallow movement around the Z axis"
+#+ * PoseBone.lock_location -> lock_location: boolean[3] "Lock editing of location in the interface"
+#+ * PoseBone.lock_rotation -> lock_rotation: boolean[3] "Lock editing of rotation in the interface"
+#+ * PoseBone.lock_rotation_w -> lock_rotation_w: boolean "Lock editing of angle component of four-component rotations in the interface"
+#+ * PoseBone.lock_rotations_4d -> lock_rotations_4d: boolean "Lock editing of four component rotations by components (instead of as Eulers)"
+#+ * PoseBone.lock_scale -> lock_scale: boolean[3] "Lock editing of scale in the interface"
+#+ * PoseBone.matrix -> matrix: float[16], "(read-only) Final 4x4 matrix for this channel"
+#+ * PoseBone.matrix_channel -> matrix_channel: float[16], "(read-only) 4x4 matrix, before constraints"
+#+ * PoseBone.matrix_local -> matrix_local: float[16] "Matrix representing the parent relative location, scale and rotation. Provides an alternative access to these properties."
+#+ * PoseBone.motion_path -> motion_path: pointer, "(read-only) Motion Path for this element"
+#+ * PoseBone.name -> name: string "NO DESCRIPTION"
+#+ * PoseBone.parent -> parent: pointer, "(read-only) Parent of this pose bone"
+#+ * PoseBone.rotation_axis_angle -> rotation_axis_angle: float[4] "Angle of Rotation for Axis-Angle rotation representation"
+#+ * PoseBone.rotation_euler -> rotation_euler: float[3] "Rotation in Eulers"
+#+ * PoseBone.rotation_mode -> rotation_mode: enum "NO DESCRIPTION"
+#+ * PoseBone.rotation_quaternion -> rotation_quaternion: float[4] "Rotation in Quaternions"
+#+ * PoseBone.scale -> scale: float[3] "NO DESCRIPTION"
+#+ * PoseBone.select -> select: boolean "NO DESCRIPTION"
+#+ * PoseBone.tail -> tail: float[3], "(read-only) Location of tail of the channels bone"
+#PoseBone.use_ik_limit_x -> use_ik_limit_x: boolean "Limit movement around the X axis"
+#PoseBone.use_ik_limit_y -> use_ik_limit_y: boolean "Limit movement around the Y axis"
+#PoseBone.use_ik_limit_z -> use_ik_limit_z: boolean "Limit movement around the Z axis"
+#PoseBone.use_ik_linear_control -> use_ik_linear_control: boolean "Apply channel size as IK constraint if stretching is enabled"
+#PoseBone.use_ik_rotation_control -> use_ik_rotation_control: boolean "Apply channel rotation as IK constraint"
+#+ * PoseBoneConstraints.active -> active: pointer "Active PoseChannel constraint"
+#+ * Property.description -> description: string, "(read-only) Description of the property for tooltips"
+#+ * Property.identifier -> identifier: string, "(read-only) Unique name used in the code and scripting"
+#+ * Property.is_never_none -> is_never_none: boolean, "(read-only) True when this value cant be set to None"
+#Property.is_output -> is_output: boolean, "(read-only) True when this property is an output value from an RNA function"
+#+ * Property.is_readonly -> is_readonly: boolean, "(read-only) Property is editable through RNA"
+#Property.is_registered -> is_registered: boolean, "(read-only) Property is registered as part of type registration"
+#Property.is_registered_optional -> is_registered_optional: boolean, "(read-only) Property is optionally registered as part of type registration"
+#+ * Property.is_required -> is_required: boolean, "(read-only) False when this property is an optional argument in an RNA function"
+#+ * Property.name -> name: string, "(read-only) Human readable name"
+#+ * Property.srna -> srna: pointer, "(read-only) Struct definition used for properties assigned to this item"
+#+ * Property.subtype -> subtype: enum, "(read-only) Semantic interpretation of the property"
+#+ * Property.type -> type: enum, "(read-only) Data type of the property"
+#+ * Property.unit -> unit: enum, "(read-only) Type of units for this property"
+#+ * Property|BooleanProperty.array_length -> array_length: int, "(read-only) Maximum length of the array, 0 means unlimited"
+#+ * Property|BooleanProperty.default -> default: boolean, "(read-only) Default value for this number"
+#+ * Property|BooleanProperty.default_array -> default_array: boolean[3], "(read-only) Default value for this array"
+#+ * Property|CollectionProperty.fixed_type -> fixed_type: pointer, "(read-only) Fixed pointer type, empty if variable type"
+#+ * Property|EnumProperty.default -> default: enum, "(read-only) Default value for this enum"
+#+ * Property|EnumProperty.items -> items: collection, "(read-only) Possible values for the property"
+#+ * Property|FloatProperty.array_length -> array_length: int, "(read-only) Maximum length of the array, 0 means unlimited"
+#+ * Property|FloatProperty.default -> default: float, "(read-only) Default value for this number"
+#+ * Property|FloatProperty.default_array -> default_array: float[3], "(read-only) Default value for this array"
+#+ * Property|FloatProperty.hard_max -> hard_max: float, "(read-only) Maximum value used by buttons"
+#+ * Property|FloatProperty.hard_min -> hard_min: float, "(read-only) Minimum value used by buttons"
+#+ * Property|FloatProperty.precision -> precision: int, "(read-only) Number of digits after the dot used by buttons"
+#+ * Property|FloatProperty.soft_max -> soft_max: float, "(read-only) Maximum value used by buttons"
+#+ * Property|FloatProperty.soft_min -> soft_min: float, "(read-only) Minimum value used by buttons"
+#+ * Property|FloatProperty.step -> step: float, "(read-only) Step size used by number buttons, for floats 1/100th of the step size"
+#+ * Property|IntProperty.array_length -> array_length: int, "(read-only) Maximum length of the array, 0 means unlimited"
+#+ * Property|IntProperty.default -> default: int, "(read-only) Default value for this number"
+#+ * Property|IntProperty.default_array -> default_array: int[3], "(read-only) Default value for this array"
+#+ * Property|IntProperty.hard_max -> hard_max: int, "(read-only) Maximum value used by buttons"
+#+ * Property|IntProperty.hard_min -> hard_min: int, "(read-only) Minimum value used by buttons"
+#+ * Property|IntProperty.soft_max -> soft_max: int, "(read-only) Maximum value used by buttons"
+#+ * Property|IntProperty.soft_min -> soft_min: int, "(read-only) Minimum value used by buttons"
+#+ * Property|IntProperty.step -> step: int, "(read-only) Step size used by number buttons, for floats 1/100th of the step size"
+#+ * Property|PointerProperty.fixed_type -> fixed_type: pointer, "(read-only) Fixed pointer type, empty if variable type"
+#+ * Property|StringProperty.default -> default: string, "(read-only) string default value"
+#Property|StringProperty.length_max -> length_max: int, "(read-only) Maximum length of the string, 0 means unlimited"
+#+ * RGBANodeSocket.default_value -> default_value: float[4] "Default value of the socket when no link is attached"
+#+ * RGBANodeSocket.name -> name: string, "(read-only) Socket name"
+#+ * Region.height -> height: int, "(read-only) Region height"
+#+ * Region.id -> id: int, "(read-only) Unique ID for this region"
+#+ * Region.type -> type: enum, "(read-only) Type of this region"
+#+ * Region.width -> width: int, "(read-only) Region width"
+#+ * RegionView3D.lock_rotation -> lock_rotation: boolean "Lock view rotation in side views"
+#+ * RegionView3D.perspective_matrix -> perspective_matrix: float[16], "(read-only) Current perspective matrix of the 3D region"
+#RegionView3D.show_sync_view -> show_sync_view: boolean "Sync view position between side views"
+#RegionView3D.use_box_clip -> use_box_clip: boolean "Clip objects based on whats visible in other side views"
+#+ * RegionView3D.view_distance -> view_distance: float "Distance to the view location"
+#+ * RegionView3D.view_location -> view_location: float[3] "View pivot location"
+#+ * RegionView3D.view_matrix -> view_matrix: float[16], "(read-only) Current view matrix of the 3D region"
+#+ * RegionView3D.view_perspective -> view_perspective: enum "View Perspective"
+#RegionView3D.view_rotate_method -> view_rotate_method: float[4] "Rotation in quaternions (keep normalized)"
+#+ * RenderEngine.bl_idname -> bl_idname: string "NO DESCRIPTION"
+#+ * RenderEngine.bl_label -> bl_label: string "NO DESCRIPTION"
+#RenderEngine.bl_use_postprocess -> bl_use_postprocess: boolean "NO DESCRIPTION"
+#RenderEngine.bl_use_preview -> bl_use_preview: boolean "NO DESCRIPTION"
+#RenderLayer.exclude_ambient_occlusion -> exclude_ambient_occlusion: boolean, "(read-only) Exclude AO pass from combined"
+#RenderLayer.exclude_emit -> exclude_emit: boolean, "(read-only) Exclude emission pass from combined"
+#RenderLayer.exclude_environment -> exclude_environment: boolean, "(read-only) Exclude environment pass from combined"
+#RenderLayer.exclude_indirect -> exclude_indirect: boolean, "(read-only) Exclude indirect pass from combined"
+#RenderLayer.exclude_reflection -> exclude_reflection: boolean, "(read-only) Exclude raytraced reflection pass from combined"
+#RenderLayer.exclude_refraction -> exclude_refraction: boolean, "(read-only) Exclude raytraced refraction pass from combined"
+#RenderLayer.exclude_shadow -> exclude_shadow: boolean, "(read-only) Exclude shadow pass from combined"
+#RenderLayer.exclude_specular -> exclude_specular: boolean, "(read-only) Exclude specular pass from combined"
+#RenderLayer.invert_zmask -> invert_zmask: boolean, "(read-only) For Zmask, only render what is behind solid z values instead of in front"
+#RenderLayer.layers -> layers: boolean[20], "(read-only) Scene layers included in this render layer"
+#RenderLayer.layers_zmask -> layers_zmask: boolean[20], "(read-only) Zmask scene layers"
+#+ * RenderLayer.light_override -> light_override: pointer, "(read-only) Group to override all other lights in this render layer"
+#+ * RenderLayer.material_override -> material_override: pointer, "(read-only) Material to override all other materials in this render layer"
+#+ * RenderLayer.name -> name: string, "(read-only) Render layer name"
+#+ * RenderLayer.passes -> passes: collection, "(read-only)"
+#+ * RenderLayer.rect -> rect: float "NO DESCRIPTION"
+#+ * RenderLayer.use -> use: boolean, "(read-only) Disable or enable the render layer"
+#RenderLayer.use_all_z -> use_all_z: boolean, "(read-only) Fill in Z values for solid faces in invisible layers, for masking"
+#RenderLayer.use_edge_enhance -> use_edge_enhance: boolean, "(read-only) Render Edge-enhance in this Layer (only works for Solid faces)"
+#RenderLayer.use_halo -> use_halo: boolean, "(read-only) Render Halos in this Layer (on top of Solid)"
+#RenderLayer.use_pass_ambient_occlusion -> use_pass_ambient_occlusion: boolean, "(read-only) Deliver AO pass"
+#RenderLayer.use_pass_color -> use_pass_color: boolean, "(read-only) Deliver shade-less color pass"
+#RenderLayer.use_pass_combined -> use_pass_combined: boolean, "(read-only) Deliver full combined RGBA buffer"
+#RenderLayer.use_pass_diffuse -> use_pass_diffuse: boolean, "(read-only) Deliver diffuse pass"
+#RenderLayer.use_pass_emit -> use_pass_emit: boolean, "(read-only) Deliver emission pass"
+#RenderLayer.use_pass_environment -> use_pass_environment: boolean, "(read-only) Deliver environment lighting pass"
+#RenderLayer.use_pass_indirect -> use_pass_indirect: boolean, "(read-only) Deliver indirect lighting pass"
+#RenderLayer.use_pass_mist -> use_pass_mist: boolean, "(read-only) Deliver mist factor pass (0.0-1.0)"
+#RenderLayer.use_pass_normal -> use_pass_normal: boolean, "(read-only) Deliver normal pass"
+#RenderLayer.use_pass_object_index -> use_pass_object_index: boolean, "(read-only) Deliver object index pass"
+#RenderLayer.use_pass_reflection -> use_pass_reflection: boolean, "(read-only) Deliver raytraced reflection pass"
+#RenderLayer.use_pass_refraction -> use_pass_refraction: boolean, "(read-only) Deliver raytraced refraction pass"
+#RenderLayer.use_pass_shadow -> use_pass_shadow: boolean, "(read-only) Deliver shadow pass"
+#RenderLayer.use_pass_specular -> use_pass_specular: boolean, "(read-only) Deliver specular pass"
+#RenderLayer.use_pass_uv -> use_pass_uv: boolean, "(read-only) Deliver texture UV pass"
+#RenderLayer.use_pass_vector -> use_pass_vector: boolean, "(read-only) Deliver speed vector pass"
+#RenderLayer.use_pass_z -> use_pass_z: boolean, "(read-only) Deliver Z values pass"
+#RenderLayer.use_sky -> use_sky: boolean, "(read-only) Render Sky in this Layer"
+#RenderLayer.use_solid -> use_solid: boolean, "(read-only) Render Solid faces in this Layer"
+#RenderLayer.use_strand -> use_strand: boolean, "(read-only) Render Strands in this Layer"
+#RenderLayer.use_zmask -> use_zmask: boolean, "(read-only) Only render whats in front of the solid z values"
+#RenderLayer.use_ztransp -> use_ztransp: boolean, "(read-only) Render Z-Transparent faces in this Layer (On top of Solid and Halos)"
+#+ * RenderPass.channel_id -> channel_id: string, "(read-only)"
+#+ * RenderPass.channels -> channels: int, "(read-only)"
+#+ * RenderPass.name -> name: string, "(read-only)"
+#+ * RenderPass.rect -> rect: float "NO DESCRIPTION"
+#+ * RenderPass.type -> type: enum, "(read-only)"
+#+ * RenderResult.layers -> layers: collection, "(read-only)"
+#+ * RenderResult.resolution_x -> resolution_x: int, "(read-only)"
+#+ * RenderResult.resolution_y -> resolution_y: int, "(read-only)"
+#+ * RenderSettings.active_layer_index -> active_layer_index: int "Active index in render layer array"
+#+ * RenderSettings.alpha_mode -> alpha_mode: enum "Representation of alpha information in the RGBA pixels"
+#+ * RenderSettings.antialiasing_samples -> antialiasing_samples: enum "Amount of anti-aliasing samples per pixel"
+#+ * RenderSettings.bake_aa_mode -> bake_aa_mode: enum "NO DESCRIPTION"
+#+ * RenderSettings.bake_bias -> bake_bias: float "Bias towards faces further away from the object (in blender units)"
+#+ * RenderSettings.bake_distance -> bake_distance: float "Maximum distance from active object to other object (in blender units"
+#+ * RenderSettings.bake_margin -> bake_margin: int "Amount of pixels to extend the baked result with, as post process filter"
+#+ * RenderSettings.bake_normal_space -> bake_normal_space: enum "Choose normal space for baking"
+#+ * RenderSettings.bake_quad_split -> bake_quad_split: enum "Choose the method used to split a quad into 2 triangles for baking"
+#+ * RenderSettings.bake_type -> bake_type: enum "Choose shading information to bake into the image"
+#+ * RenderSettings.border_max_x -> border_max_x: float "Sets maximum X value for the render border"
+#+ * RenderSettings.border_max_y -> border_max_y: float "Sets maximum Y value for the render border"
+#+ * RenderSettings.border_min_x -> border_min_x: float "Sets minimum X value to for the render border"
+#+ * RenderSettings.border_min_y -> border_min_y: float "Sets minimum Y value for the render border"
+#+ * RenderSettings.cineon_black -> cineon_black: int "Log conversion reference blackpoint"
+#+ * RenderSettings.cineon_gamma -> cineon_gamma: float "Log conversion gamma"
+#+ * RenderSettings.cineon_white -> cineon_white: int "Log conversion reference whitepoint"
+#+ * RenderSettings.color_mode -> color_mode: enum "Choose BW for saving greyscale images, RGB for saving red, green and blue channels, AND RGBA for saving red, green, blue + alpha channels"
+#+ * RenderSettings.display_mode -> display_mode: enum "Select where rendered images will be displayed"
+#+ * RenderSettings.dither_intensity -> dither_intensity: float "Amount of dithering noise added to the rendered image to break up banding"
+#+ * RenderSettings.edge_color -> edge_color: float[3] "NO DESCRIPTION"
+#+ * RenderSettings.edge_threshold -> edge_threshold: int "Threshold for drawing outlines on geometry edges"
+#+ * RenderSettings.engine -> engine: enum "Engine to use for rendering"
+#+ * RenderSettings.field_order -> field_order: enum "Order of video fields. Select which lines get rendered first, to create smooth motion for TV output"
+#+ * RenderSettings.file_extension -> file_extension: string, "(read-only) The file extension used for saving renders"
+#+ * RenderSettings.file_format -> file_format: enum "File format to save the rendered images as"
+#+ * RenderSettings.file_quality -> file_quality: int "Quality of JPEG images, AVI Jpeg and SGI movies, Compression for PNGs"
+#RenderSettings.filepath -> filepath: string "Directory/name to save animations, # characters defines the position and length of frame numbers"
+#+ * RenderSettings.filter_size -> filter_size: float "Pixel width over which the reconstruction filter combines samples"
+#+ * RenderSettings.fps -> fps: int "Framerate, expressed in frames per second"
+#+ * RenderSettings.fps_base -> fps_base: float "Framerate base"
+#RenderSettings.has_multiple_engines -> has_multiple_engines: boolean, "(read-only) More than one rendering engine is available"
+#+ * RenderSettings.is_movie_format -> is_movie_format: boolean, "(read-only) When true the format is a movie"
+#+ * RenderSettings.layers -> layers: collection, "(read-only)"
+#+ * RenderSettings.motion_blur_samples -> motion_blur_samples: int "Number of scene samples to take with motion blur"
+#+ * RenderSettings.motion_blur_shutter -> motion_blur_shutter: float "Time taken in frames between shutter open and close"
+#+ * RenderSettings.octree_resolution -> octree_resolution: enum "Resolution of raytrace accelerator. Use higher resolutions for larger scenes"
+#+ * RenderSettings.parts_x -> parts_x: int "Number of horizontal tiles to use while rendering"
+#+ * RenderSettings.parts_y -> parts_y: int "Number of vertical tiles to use while rendering"
+#+ * RenderSettings.pixel_aspect_x -> pixel_aspect_x: float "Horizontal aspect ratio - for anamorphic or non-square pixel output"
+#+ * RenderSettings.pixel_aspect_y -> pixel_aspect_y: float "Vertical aspect ratio - for anamorphic or non-square pixel output"
+#RenderSettings.pixel_filter_type -> pixel_filter_type: enum "Reconstruction filter used for combining anti-aliasing samples"
+#RenderSettings.raytrace_method -> raytrace_method: enum "Type of raytrace accelerator structure"
+#+ * RenderSettings.resolution_percentage -> resolution_percentage: int "Percentage scale for render resolution"
+#+ * RenderSettings.resolution_x -> resolution_x: int "Number of horizontal pixels in the rendered image"
+#+ * RenderSettings.resolution_y -> resolution_y: int "Number of vertical pixels in the rendered image"
+#+ * RenderSettings.sequencer_gl_preview -> sequencer_gl_preview: enum "Method to draw in the sequencer view"
+#+ * RenderSettings.sequencer_gl_render -> sequencer_gl_render: enum "Method to draw in the sequencer view"
+#+ * RenderSettings.simplify_ao_sss -> simplify_ao_sss: float "Global approximate AA and SSS quality factor"
+#+ * RenderSettings.simplify_child_particles -> simplify_child_particles: float "Global child particles percentage"
+#+ * RenderSettings.simplify_shadow_samples -> simplify_shadow_samples: int "Global maximum shadow samples"
+#+ * RenderSettings.simplify_subdivision -> simplify_subdivision: int "Global maximum subdivision level"
+#+ * RenderSettings.stamp_background -> stamp_background: float[4] "Color to use behind stamp text"
+#+ * RenderSettings.stamp_font_size -> stamp_font_size: int "Size of the font used when rendering stamp text"
+#+ * RenderSettings.stamp_foreground -> stamp_foreground: float[4] "Color to use for stamp text"
+#+ * RenderSettings.stamp_note_text -> stamp_note_text: string "Custom text to appear in the stamp note"
+#+ * RenderSettings.threads -> threads: int "Number of CPU threads to use simultaneously while rendering (for multi-core/CPU systems)"
+#+ * RenderSettings.threads_mode -> threads_mode: enum "Determine the amount of render threads used"
+#RenderSettings.use_antialiasing -> use_antialiasing: boolean "Render and combine multiple samples per pixel to prevent jagged edges"
+#RenderSettings.use_backbuf -> use_backbuf: boolean "Render backbuffer image"
+#RenderSettings.use_bake_antialiasing -> use_bake_antialiasing: boolean "Enables Anti-aliasing"
+#RenderSettings.use_bake_clear -> use_bake_clear: boolean "Clear Images before baking"
+#RenderSettings.use_bake_normalize -> use_bake_normalize: boolean "With displacement normalize to the distance, with ambient occlusion normalize without using material settings"
+#RenderSettings.use_bake_selected_to_active -> use_bake_selected_to_active: boolean "Bake shading on the surface of selected objects to the active object"
+#+ * RenderSettings.use_border -> use_border: boolean "Render a user-defined border region, within the frame size. Note, this disables save_buffers and full_sample"
+#RenderSettings.use_cineon_log -> use_cineon_log: boolean "Convert to logarithmic color space"
+#RenderSettings.use_color_management -> use_color_management: boolean "Use linear workflow - gamma corrected imaging pipeline"
+#+ * RenderSettings.use_compositing -> use_compositing: boolean "Process the render result through the compositing pipeline, if compositing nodes are enabled"
+#RenderSettings.use_crop_to_border -> use_crop_to_border: boolean "Crop the rendered frame to the defined border size"
+#RenderSettings.use_edge_enhance -> use_edge_enhance: boolean "Create a toon outline around the edges of geometry"
+#+ * RenderSettings.use_envmaps -> use_envmaps: boolean "Calculate environment maps while rendering"
+#RenderSettings.use_fields -> use_fields: boolean "Render image to two fields per frame, for interlaced TV output"
+#RenderSettings.use_fields_still -> use_fields_still: boolean "Disable the time difference between fields"
+#+ * RenderSettings.use_file_extension -> use_file_extension: boolean "Add the file format extensions to the rendered file name (eg: filename + .jpg)"
+#RenderSettings.use_free_image_textures -> use_free_image_textures: boolean "Free all image texture from memory after render, to save memory before compositing"
+#RenderSettings.use_free_unused_nodes -> use_free_unused_nodes: boolean "Free Nodes that are not used while compositing, to save memory"
+#RenderSettings.use_full_sample -> use_full_sample: boolean "Save for every anti-aliasing sample the entire RenderLayer results. This solves anti-aliasing issues with compositing"
+#+ * RenderSettings.use_game_engine -> use_game_engine: boolean, "(read-only) Current rendering engine is a game engine"
+#+ * RenderSettings.use_instances -> use_instances: boolean "Instance support leads to effective memory reduction when using duplicates"
+#+ * RenderSettings.use_local_coords -> use_local_coords: boolean "Vertex coordinates are stored localy on each primitive. Increases memory usage, but may have impact on speed"
+#RenderSettings.use_motion_blur -> use_motion_blur: boolean "Use multi-sampled 3D scene motion blur"
+#+ * RenderSettings.use_overwrite -> use_overwrite: boolean "Overwrite existing files while rendering"
+#+ * RenderSettings.use_placeholder -> use_placeholder: boolean "Create empty placeholder files while rendering frames (similar to Unix touch)"
+#+ * RenderSettings.use_radiosity -> use_radiosity: boolean "Calculate radiosity in a pre-process before rendering"
+#RenderSettings.use_raytrace -> use_raytrace: boolean "Pre-calculate the raytrace accelerator and render raytracing effects"
+#RenderSettings.use_save_buffers -> use_save_buffers: boolean "Save tiles for all RenderLayers and SceneNodes to files in the temp directory (saves memory, required for Full Sample)"
+#+ * RenderSettings.use_sequencer -> use_sequencer: boolean "Process the render (and composited) result through the video sequence editor pipeline, if sequencer strips exist"
+#+ * RenderSettings.use_sequencer_gl_preview -> use_sequencer_gl_preview: boolean "NO DESCRIPTION"
+#+ * RenderSettings.use_sequencer_gl_render -> use_sequencer_gl_render: boolean "NO DESCRIPTION"
+#+ * RenderSettings.use_shadows -> use_shadows: boolean "Calculate shadows while rendering"
+#+ * RenderSettings.use_simplify -> use_simplify: boolean "Enable simplification of scene for quicker preview renders"
+#RenderSettings.use_simplify_triangulate -> use_simplify_triangulate: boolean "Disables non-planer quads being triangulated"
+#RenderSettings.use_single_layer -> use_single_layer: boolean "Only render the active layer"
+#+ * RenderSettings.use_sss -> use_sss: boolean "Calculate sub-surface scattering in materials rendering"
+#RenderSettings.use_stamp -> use_stamp: boolean "Render the stamp info text in the rendered image"
+#RenderSettings.use_stamp_camera -> use_stamp_camera: boolean "Include the name of the active camera in image metadata"
+#RenderSettings.use_stamp_date -> use_stamp_date: boolean "Include the current date in image metadata"
+#RenderSettings.use_stamp_filename -> use_stamp_filename: boolean "Include the filename of the .blend file in image metadata"
+#RenderSettings.use_stamp_frame -> use_stamp_frame: boolean "Include the frame number in image metadata"
+#RenderSettings.use_stamp_marker -> use_stamp_marker: boolean "Include the name of the last marker in image metadata"
+#RenderSettings.use_stamp_note -> use_stamp_note: boolean "Include a custom note in image metadata"
+#RenderSettings.use_stamp_render_time -> use_stamp_render_time: boolean "Include the render time in the stamp image"
+#RenderSettings.use_stamp_scene -> use_stamp_scene: boolean "Include the name of the active scene in image metadata"
+#RenderSettings.use_stamp_sequencer_strip -> use_stamp_sequencer_strip: boolean "Include the name of the foreground sequence strip in image metadata"
+#RenderSettings.use_stamp_time -> use_stamp_time: boolean "Include the render frame as HH:MM:SS.FF in image metadata"
+#+ * RenderSettings.use_textures -> use_textures: boolean "Use textures to affect material properties"
+#RenderSettings.use_tiff_16bit -> use_tiff_16bit: boolean "Save TIFF with 16 bits per channel"
+#+ * SPHFluidSettings.buoyancy -> buoyancy: float "NO DESCRIPTION"
+#+ * SPHFluidSettings.fluid_radius -> fluid_radius: float "Fluid interaction Radius"
+#+ * SPHFluidSettings.rest_density -> rest_density: float "Density"
+#+ * SPHFluidSettings.rest_length -> rest_length: float "The Spring Rest Length (factor of interaction radius)"
+#SPHFluidSettings.spring_force -> spring_force: float "Spring force constant"
+#SPHFluidSettings.stiffness -> stiffness: float "Constant K - Stiffness"
+#SPHFluidSettings.stiffness_near -> stiffness_near: float "Repulsion factor: stiffness_knear"
+#+ * SPHFluidSettings.viscosity_beta -> viscosity_beta: float "Square viscosity factor"
+#+ * SPHFluidSettings.viscosity_omega -> viscosity_omega: float "Linear viscosity"
+#+ * SceneBases.active -> active: pointer "Active object base in the scene"
+#+ * SceneGameData.activity_culling_box_radius -> activity_culling_box_radius: float "Radius of the activity bubble, in Manhattan length. Objects outside the box are activity-culled"
+#+ * SceneGameData.depth -> depth: int "Displays bit depth of full screen display"
+#+ * SceneGameData.dome_angle -> dome_angle: int "Field of View of the Dome - it only works in mode Fisheye and Truncated"
+#+ * SceneGameData.dome_buffer_resolution -> dome_buffer_resolution: float "Buffer Resolution - decrease it to increase speed"
+#+ * SceneGameData.dome_mode -> dome_mode: enum "Dome physical configurations"
+#+ * SceneGameData.dome_tesselation -> dome_tesselation: int "Tessellation level - check the generated mesh in wireframe mode"
+#+ * SceneGameData.dome_text -> dome_text: pointer "Custom Warp Mesh data file"
+#+ * SceneGameData.dome_tilt -> dome_tilt: int "Camera rotation in horizontal axis"
+#+ * SceneGameData.fps -> fps: int "The nominal number of game frames per second. Physics fixed timestep = 1/fps, independently of actual frame rate"
+#SceneGameData.frame_color -> frame_color: float[3] "Set colour of the bars"
+#SceneGameData.frame_type -> frame_type: enum "Select the type of Framing you want"
+#+ * SceneGameData.frequency -> frequency: int "Displays clock frequency of fullscreen display"
+#+ * SceneGameData.logic_step_max -> logic_step_max: int "Sets the maximum number of logic frame per game frame if graphics slows down the game, higher value allows better synchronization with physics"
+#+ * SceneGameData.material_mode -> material_mode: enum "Material mode to use for rendering"
+#+ * SceneGameData.occlusion_culling_resolution -> occlusion_culling_resolution: float "The size of the occlusion buffer in pixel, use higher value for better precision (slower)"
+#+ * SceneGameData.physics_engine -> physics_engine: enum "Physics engine used for physics simulation in the game engine"
+#+ * SceneGameData.physics_gravity -> physics_gravity: float "Gravitational constant used for physics simulation in the game engine"
+#+ * SceneGameData.physics_step_max -> physics_step_max: int "Sets the maximum number of physics step per game frame if graphics slows down the game, higher value allows physics to keep up with realtime"
+#+ * SceneGameData.physics_step_sub -> physics_step_sub: int "Sets the number of simulation substep per physic timestep, higher value give better physics precision"
+#+ * SceneGameData.resolution_x -> resolution_x: int "Number of horizontal pixels in the screen"
+#+ * SceneGameData.resolution_y -> resolution_y: int "Number of vertical pixels in the screen"
+#+ * SceneGameData.show_debug_properties -> show_debug_properties: boolean "Show properties marked for debugging while the game runs"
+#+ * SceneGameData.show_framerate_profile -> show_framerate_profile: boolean "Show framerate and profiling information while the game runs"
+#SceneGameData.show_fullscreen -> show_fullscreen: boolean "Starts player in a new fullscreen display"
+#+ * SceneGameData.show_physics_visualization -> show_physics_visualization: boolean "Show a visualization of physics bounds and interactions"
+#+ * SceneGameData.stereo -> stereo: enum "NO DESCRIPTION"
+#SceneGameData.stereo_eye_separation -> stereo_eye_separation: float "Set the distance between the eyes - the camera focal length/30 should be fine"
+#+ * SceneGameData.stereo_mode -> stereo_mode: enum "Stereographic techniques"
+#SceneGameData.use_activity_culling -> use_activity_culling: boolean "Activity culling is enabled"
+#+ * SceneGameData.use_animation_record -> use_animation_record: boolean "Record animation to fcurves"
+#SceneGameData.use_auto_start -> use_auto_start: boolean "Automatically start game at load time"
+#+ * SceneGameData.use_deprecation_warnings -> use_deprecation_warnings: boolean "Print warnings when using deprecated features in the python API"
+#+ * SceneGameData.use_display_lists -> use_display_lists: boolean "Use display lists to speed up rendering by keeping geometry on the GPU"
+#+ * SceneGameData.use_frame_rate -> use_frame_rate: boolean "Respect the frame rate rather than rendering as many frames as possible"
+#SceneGameData.use_glsl_extra_textures -> use_glsl_extra_textures: boolean "Use extra textures like normal or specular maps for GLSL rendering"
+#SceneGameData.use_glsl_lights -> use_glsl_lights: boolean "Use lights for GLSL rendering"
+#SceneGameData.use_glsl_nodes -> use_glsl_nodes: boolean "Use nodes for GLSL rendering"
+#SceneGameData.use_glsl_ramps -> use_glsl_ramps: boolean "Use ramps for GLSL rendering"
+#SceneGameData.use_glsl_shaders -> use_glsl_shaders: boolean "Use shaders for GLSL rendering"
+#SceneGameData.use_glsl_shadows -> use_glsl_shadows: boolean "Use shadows for GLSL rendering"
+#+ * SceneGameData.use_occlusion_culling -> use_occlusion_culling: boolean "Use optimized Bullet DBVT tree for view frustum and occlusion culling"
+#+ * SceneObjects.active -> active: pointer "Active object for this scene"
+#SceneRenderLayer.exclude_ambient_occlusion -> exclude_ambient_occlusion: boolean "Exclude AO pass from combined"
+#SceneRenderLayer.exclude_emit -> exclude_emit: boolean "Exclude emission pass from combined"
+#SceneRenderLayer.exclude_environment -> exclude_environment: boolean "Exclude environment pass from combined"
+#SceneRenderLayer.exclude_indirect -> exclude_indirect: boolean "Exclude indirect pass from combined"
+#SceneRenderLayer.exclude_reflection -> exclude_reflection: boolean "Exclude raytraced reflection pass from combined"
+#SceneRenderLayer.exclude_refraction -> exclude_refraction: boolean "Exclude raytraced refraction pass from combined"
+#SceneRenderLayer.exclude_shadow -> exclude_shadow: boolean "Exclude shadow pass from combined"
+#SceneRenderLayer.exclude_specular -> exclude_specular: boolean "Exclude specular pass from combined"
+#SceneRenderLayer.invert_zmask -> invert_zmask: boolean "For Zmask, only render what is behind solid z values instead of in front"
+#SceneRenderLayer.layers -> layers: boolean[20] "Scene layers included in this render layer"
+#SceneRenderLayer.layers_zmask -> layers_zmask: boolean[20] "Zmask scene layers"
+#+ * SceneRenderLayer.light_override -> light_override: pointer "Group to override all other lights in this render layer"
+#+ * SceneRenderLayer.material_override -> material_override: pointer "Material to override all other materials in this render layer"
+#+ * SceneRenderLayer.name -> name: string "Render layer name"
+#+ * SceneRenderLayer.use -> use: boolean "Disable or enable the render layer"
+#SceneRenderLayer.use_all_z -> use_all_z: boolean "Fill in Z values for solid faces in invisible layers, for masking"
+#SceneRenderLayer.use_edge_enhance -> use_edge_enhance: boolean "Render Edge-enhance in this Layer (only works for Solid faces)"
+#SceneRenderLayer.use_halo -> use_halo: boolean "Render Halos in this Layer (on top of Solid)"
+#SceneRenderLayer.use_pass_ambient_occlusion -> use_pass_ambient_occlusion: boolean "Deliver AO pass"
+#SceneRenderLayer.use_pass_color -> use_pass_color: boolean "Deliver shade-less color pass"
+#SceneRenderLayer.use_pass_combined -> use_pass_combined: boolean "Deliver full combined RGBA buffer"
+#SceneRenderLayer.use_pass_diffuse -> use_pass_diffuse: boolean "Deliver diffuse pass"
+#SceneRenderLayer.use_pass_emit -> use_pass_emit: boolean "Deliver emission pass"
+#SceneRenderLayer.use_pass_environment -> use_pass_environment: boolean "Deliver environment lighting pass"
+#SceneRenderLayer.use_pass_indirect -> use_pass_indirect: boolean "Deliver indirect lighting pass"
+#SceneRenderLayer.use_pass_mist -> use_pass_mist: boolean "Deliver mist factor pass (0.0-1.0)"
+#SceneRenderLayer.use_pass_normal -> use_pass_normal: boolean "Deliver normal pass"
+#SceneRenderLayer.use_pass_object_index -> use_pass_object_index: boolean "Deliver object index pass"
+#SceneRenderLayer.use_pass_reflection -> use_pass_reflection: boolean "Deliver raytraced reflection pass"
+#SceneRenderLayer.use_pass_refraction -> use_pass_refraction: boolean "Deliver raytraced refraction pass"
+#SceneRenderLayer.use_pass_shadow -> use_pass_shadow: boolean "Deliver shadow pass"
+#SceneRenderLayer.use_pass_specular -> use_pass_specular: boolean "Deliver specular pass"
+#SceneRenderLayer.use_pass_uv -> use_pass_uv: boolean "Deliver texture UV pass"
+#SceneRenderLayer.use_pass_vector -> use_pass_vector: boolean "Deliver speed vector pass"
+#SceneRenderLayer.use_pass_z -> use_pass_z: boolean "Deliver Z values pass"
+#SceneRenderLayer.use_sky -> use_sky: boolean "Render Sky in this Layer"
+#SceneRenderLayer.use_solid -> use_solid: boolean "Render Solid faces in this Layer"
+#SceneRenderLayer.use_strand -> use_strand: boolean "Render Strands in this Layer"
+#SceneRenderLayer.use_zmask -> use_zmask: boolean "Only render whats in front of the solid z values"
+#SceneRenderLayer.use_ztransp -> use_ztransp: boolean "Render Z-Transparent faces in this Layer (On top of Solid and Halos)"
+#+ * Scopes.accuracy -> accuracy: float "Proportion of original image source pixel lines to sample"
+#+ * Scopes.histogram -> histogram: pointer, "(read-only) Histogram for viewing image statistics"
+#+ * Scopes.use_full_resolution -> use_full_resolution: boolean "Sample every pixel of the image"
+#+ * Scopes.vectorscope_alpha -> vectorscope_alpha: float "Opacity of the points"
+#+ * Scopes.waveform_alpha -> waveform_alpha: float "Opacity of the points"
+#+ * Scopes.waveform_mode -> waveform_mode: enum "NO DESCRIPTION"
+#+ * Sensor.frequency -> frequency: int "Delay between repeated pulses(in logic tics, 0=no delay)"
+#+ * Sensor.invert -> invert: boolean "Invert the level(output) of this sensor"
+#+ * Sensor.name -> name: string "Sensor name"
+#Sensor.pin -> pin: boolean "Display when not linked to a visible states controller"
+#Sensor.show_expanded -> show_expanded: boolean "Set sensor expanded in the user interface"
+#+ * Sensor.type -> type: enum "NO DESCRIPTION"
+#Sensor.use_level -> use_level: boolean "Level detector, trigger controllers of new states(only applicable upon logic state transition)"
+#Sensor.use_pulse_false_level -> use_pulse_false_level: boolean "Activate FALSE level triggering (pulse mode)"
+#Sensor.use_pulse_true_level -> use_pulse_true_level: boolean "Activate TRUE level triggering (pulse mode)"
+#Sensor.use_tap -> use_tap: boolean "Trigger controllers only for an instant, even while the sensor remains true"
+#+ * Sensor|ActuatorSensor.actuator -> actuator: string "Actuator name, actuator active state modifications will be detected"
+#+ * Sensor|ArmatureSensor.bone -> bone: string "Identify the bone to check value from"
+#+ * Sensor|ArmatureSensor.constraint -> constraint: string "Identify the bone constraint to check value from"
+#+ * Sensor|ArmatureSensor.test_type -> test_type: enum "Type of value and test"
+#+ * Sensor|ArmatureSensor.value -> value: float "Specify value to be used in comparison"
+#+ * Sensor|CollisionSensor.material -> material: string "Only look for Objects with this material"
+#+ * Sensor|CollisionSensor.property -> property: string "Only look for Objects with this property"
+#Sensor|CollisionSensor.use_material -> use_material: boolean "Toggle collision on material or property"
+#Sensor|CollisionSensor.use_pulse -> use_pulse: boolean "Changes to the set of colliding objects generates pulse"
+#+ * Sensor|DelaySensor.delay -> delay: int "Delay in number of logic tics before the positive trigger (default 60 per second)"
+#+ * Sensor|DelaySensor.duration -> duration: int "If >0, delay in number of logic tics before the negative trigger following the positive trigger"
+#Sensor|DelaySensor.use_repeat -> use_repeat: boolean "Toggle repeat option. If selected, the sensor restarts after Delay+Dur logic tics"
+#+ * Sensor|JoystickSensor.axis_direction -> axis_direction: enum "The direction of the axis"
+#+ * Sensor|JoystickSensor.axis_number -> axis_number: int "Specify which axis pair to use, 1 is usually the main direction input"
+#+ * Sensor|JoystickSensor.axis_threshold -> axis_threshold: int "Specify the precision of the axis"
+#+ * Sensor|JoystickSensor.button_number -> button_number: int "Specify which button to use"
+#+ * Sensor|JoystickSensor.event_type -> event_type: enum "The type of event this joystick sensor is triggered on"
+#+ * Sensor|JoystickSensor.hat_direction -> hat_direction: enum "Specify hat direction"
+#+ * Sensor|JoystickSensor.hat_number -> hat_number: int "Specify which hat to use"
+#+ * Sensor|JoystickSensor.joystick_index -> joystick_index: int "Specify which joystick to use"
+#+ * Sensor|JoystickSensor.single_axis_number -> single_axis_number: int "Specify a single axis (verticle/horizontal/other) to detect"
+#Sensor|JoystickSensor.use_all_events -> use_all_events: boolean "Triggered by all events on this joysticks current type (axis/button/hat)"
+#+ * Sensor|KeyboardSensor.key -> key: enum "NO DESCRIPTION"
+#+ * Sensor|KeyboardSensor.log -> log: string "Property that receive the keystrokes in case a string is logged"
+#Sensor|KeyboardSensor.modifier_key_1 -> modifier_key_1: enum "Modifier key code"
+#Sensor|KeyboardSensor.modifier_key_2 -> modifier_key_2: enum "Modifier key code"
+#+ * Sensor|KeyboardSensor.target -> target: string "Property that indicates whether to log keystrokes as a string"
+#Sensor|KeyboardSensor.use_all_keys -> use_all_keys: boolean "Trigger this sensor on any keystroke"
+#+ * Sensor|MessageSensor.subject -> subject: string "Optional subject filter: only accept messages with this subject, or empty for all"
+#+ * Sensor|MouseSensor.mouse_event -> mouse_event: enum "Specify the type of event this mouse sensor should trigger on"
+#+ * Sensor|NearSensor.distance -> distance: float "Trigger distance"
+#+ * Sensor|NearSensor.property -> property: string "Only look for objects with this property"
+#+ * Sensor|NearSensor.reset_distance -> reset_distance: float "NO DESCRIPTION"
+#+ * Sensor|PropertySensor.evaluation_type -> evaluation_type: enum "Type of property evaluation"
+#+ * Sensor|PropertySensor.property -> property: string "NO DESCRIPTION"
+#+ * Sensor|PropertySensor.value -> value: string "Check for this value in types in Equal or Not Equal types"
+#Sensor|PropertySensor.value_max -> value_max: string "Specify maximum value in Interval type"
+#Sensor|PropertySensor.value_min -> value_min: string "Specify minimum value in Interval type"
+#+ * Sensor|RadarSensor.angle -> angle: float "Opening angle of the radar cone"
+#+ * Sensor|RadarSensor.axis -> axis: enum "Specify along which axis the radar cone is cast"
+#+ * Sensor|RadarSensor.distance -> distance: float "Depth of the radar cone"
+#+ * Sensor|RadarSensor.property -> property: string "Only look for Objects with this property"
+#+ * Sensor|RandomSensor.seed -> seed: int "Initial seed of the generator. (Choose 0 for not random)"
+#+ * Sensor|RaySensor.axis -> axis: enum "Specify along which axis the ray is cast"
+#+ * Sensor|RaySensor.material -> material: string "Only look for Objects with this material"
+#+ * Sensor|RaySensor.property -> property: string "Only look for Objects with this property"
+#+ * Sensor|RaySensor.range -> range: float "Sense objects no farther than this distance"
+#+ * Sensor|RaySensor.ray_type -> ray_type: enum "Toggle collision on material or property"
+#Sensor|RaySensor.use_x_ray -> use_x_ray: boolean "Toggle X-Ray option (see through objects that dont have the property)"
+#+ * Sensor|TouchSensor.material -> material: pointer "Only look for objects with this material"
+#Sequence.blend_alpha -> blend_alpha: float "NO DESCRIPTION"
+#Sequence.blend_type -> blend_type: enum "NO DESCRIPTION"
+#+ * Sequence.channel -> channel: int "Y position of the sequence strip"
+#+ * Sequence.effect_fader -> effect_fader: float "NO DESCRIPTION"
+#Sequence.frame_duration -> frame_duration: int, "(read-only) The length of the contents of this strip before the handles are applied"
+#Sequence.frame_final_duration -> frame_final_duration: int "The length of the contents of this strip before the handles are applied"
+#+ * Sequence.frame_final_end -> frame_final_end: int "End frame displayed in the sequence editor after offsets are applied"
+#+ * Sequence.frame_final_start -> frame_final_start: int "Start frame displayed in the sequence editor after offsets are applied, setting this is equivalent to moving the handle, not the actual start frame"
+#+ * Sequence.frame_offset_end -> frame_offset_end: int, "(read-only)"
+#+ * Sequence.frame_offset_start -> frame_offset_start: int, "(read-only)"
+#+ * Sequence.frame_start -> frame_start: int "NO DESCRIPTION"
+#+ * Sequence.frame_still_end -> frame_still_end: int, "(read-only)"
+#+ * Sequence.frame_still_start -> frame_still_start: int, "(read-only)"
+#+ * Sequence.lock -> lock: boolean "Lock strip so that it cant be transformed"
+#+ * Sequence.mute -> mute: boolean "NO DESCRIPTION"
+#+ * Sequence.name -> name: string "NO DESCRIPTION"
+#+ * Sequence.select -> select: boolean "NO DESCRIPTION"
+#+ * Sequence.select_left_handle -> select_left_handle: boolean "NO DESCRIPTION"
+#+ * Sequence.select_right_handle -> select_right_handle: boolean "NO DESCRIPTION"
+#+ * Sequence.speed_fader -> speed_fader: float "NO DESCRIPTION"
+#+ * Sequence.type -> type: enum, "(read-only)"
+#Sequence.use_default_fade -> use_default_fade: boolean "Fade effect using the built-in default (usually make transition as long as effect strip)"
+#+ * SequenceColorBalance.gain -> gain: float[3] "Color balance gain (highlights)"
+#+ * SequenceColorBalance.gamma -> gamma: float[3] "Color balance gamma (midtones)"
+#SequenceColorBalance.invert_gain -> invert_gain: boolean "NO DESCRIPTION"
+#SequenceColorBalance.invert_gamma -> invert_gamma: boolean "NO DESCRIPTION"
+#SequenceColorBalance.invert_lift -> invert_lift: boolean "NO DESCRIPTION"
+#+ * SequenceColorBalance.lift -> lift: float[3] "Color balance lift (shadows)"
+#SequenceCrop.max_x -> max_x: int "NO DESCRIPTION"
+#SequenceCrop.max_y -> max_y: int "NO DESCRIPTION"
+#SequenceCrop.min_x -> min_x: int "NO DESCRIPTION"
+#SequenceCrop.min_y -> min_y: int "NO DESCRIPTION"
+#+ * SequenceEditor.active_strip -> active_strip: pointer "NO DESCRIPTION"
+#+ * SequenceEditor.meta_stack -> meta_stack: collection, "(read-only) Meta strip stack, last is currently edited meta strip"
+#+ * SequenceEditor.overlay_frame -> overlay_frame: int "Sequencers active strip"
+#+ * SequenceEditor.overlay_lock -> overlay_lock: boolean "NO DESCRIPTION"
+#+ * SequenceEditor.sequences -> sequences: collection, "(read-only)"
+#+ * SequenceEditor.sequences_all -> sequences_all: collection, "(read-only)"
+#+ * SequenceEditor.show_overlay -> show_overlay: boolean "Partial overlay ontop of the sequencer"
+#+ * SequenceElement.filename -> filename: string "NO DESCRIPTION"
+#+ * SequenceProxy.directory -> directory: string "Location to store the proxy files"
+#+ * SequenceProxy.filepath -> filepath: string "Location of custom proxy file"
+#+ * SequenceTransform.offset_x -> offset_x: int "NO DESCRIPTION"
+#+ * SequenceTransform.offset_y -> offset_y: int "NO DESCRIPTION"
+#+ * Sequence|EffectSequence.color_balance -> color_balance: pointer, "(read-only)"
+#Sequence|EffectSequence.color_multiply -> color_multiply: float "NO DESCRIPTION"
+#+ * Sequence|EffectSequence.color_saturation -> color_saturation: float "NO DESCRIPTION"
+#+ * Sequence|EffectSequence.crop -> crop: pointer, "(read-only)"
+#+ * Sequence|EffectSequence.proxy -> proxy: pointer, "(read-only)"
+#+ * Sequence|EffectSequence.strobe -> strobe: float "Only display every nth frame"
+#+ * Sequence|EffectSequence.transform -> transform: pointer, "(read-only)"
+#+ * Sequence|EffectSequence.use_color_balance -> use_color_balance: boolean "(3-Way color correction) on input"
+#+ * Sequence|EffectSequence.use_crop -> use_crop: boolean "Crop image before processing"
+#Sequence|EffectSequence.use_deinterlace -> use_deinterlace: boolean "For video movies to remove fields"
+#Sequence|EffectSequence.use_flip_x -> use_flip_x: boolean "Flip on the X axis"
+#Sequence|EffectSequence.use_flip_y -> use_flip_y: boolean "Flip on the Y axis"
+#Sequence|EffectSequence.use_float -> use_float: boolean "Convert input to float data"
+#Sequence|EffectSequence.use_premultiply -> use_premultiply: boolean "Convert RGB from key alpha to premultiplied alpha"
+#+ * Sequence|EffectSequence.use_proxy -> use_proxy: boolean "Use a preview proxy for this strip"
+#Sequence|EffectSequence.use_proxy_custom_directory -> use_proxy_custom_directory: boolean "Use a custom directory to store data"
+#Sequence|EffectSequence.use_proxy_custom_file -> use_proxy_custom_file: boolean "Use a custom file to read proxy data from"
+#Sequence|EffectSequence.use_reverse_frames -> use_reverse_frames: boolean "Reverse frame order"
+#+ * Sequence|EffectSequence.use_translation -> use_translation: boolean "Translate image before processing"
+#+ * Sequence|EffectSequence|ColorSequence.color -> color: float[3] "NO DESCRIPTION"
+#Sequence|EffectSequence|GlowSequence.blur_radius -> blur_radius: float "Radius of glow effect"
+#+ * Sequence|EffectSequence|GlowSequence.boost_factor -> boost_factor: float "Brightness multiplier"
+#+ * Sequence|EffectSequence|GlowSequence.clamp -> clamp: float "rightness limit of intensity"
+#+ * Sequence|EffectSequence|GlowSequence.quality -> quality: int "Accuracy of the blur effect"
+#+ * Sequence|EffectSequence|GlowSequence.threshold -> threshold: float "Minimum intensity to trigger a glow"
+#Sequence|EffectSequence|GlowSequence.use_only_boost -> use_only_boost: boolean "Show the glow buffer only"
+#+ * Sequence|EffectSequence|PluginSequence.filename -> filename: string, "(read-only)"
+#+ * Sequence|EffectSequence|SpeedControlSequence.global_speed -> global_speed: float "NO DESCRIPTION"
+#Sequence|EffectSequence|SpeedControlSequence.use_curve_compress_y -> use_curve_compress_y: boolean "Scale F-Curve value to get the target frame number, F-Curve value runs from 0.0 to 1.0"
+#Sequence|EffectSequence|SpeedControlSequence.use_curve_velocity -> use_curve_velocity: boolean "Interpret the F-Curve value as a velocity instead of a frame number"
+#Sequence|EffectSequence|SpeedControlSequence.use_frame_blend -> use_frame_blend: boolean "Blend two frames into the target for a smoother result"
+#+ * Sequence|EffectSequence|TransformSequence.interpolation -> interpolation: enum "NO DESCRIPTION"
+#+ * Sequence|EffectSequence|TransformSequence.rotation_start -> rotation_start: float "NO DESCRIPTION"
+#+ * Sequence|EffectSequence|TransformSequence.scale_start_x -> scale_start_x: float "NO DESCRIPTION"
+#+ * Sequence|EffectSequence|TransformSequence.scale_start_y -> scale_start_y: float "NO DESCRIPTION"
+#+ * Sequence|EffectSequence|TransformSequence.translate_start_x -> translate_start_x: float "NO DESCRIPTION"
+#+ * Sequence|EffectSequence|TransformSequence.translate_start_y -> translate_start_y: float "NO DESCRIPTION"
+#+ * Sequence|EffectSequence|TransformSequence.translation_unit -> translation_unit: enum "NO DESCRIPTION"
+#Sequence|EffectSequence|TransformSequence.use_uniform_scale -> use_uniform_scale: boolean "Scale uniformly, preserving aspect ratio"
+#+ * Sequence|EffectSequence|WipeSequence.angle -> angle: float "Edge angle"
+#+ * Sequence|EffectSequence|WipeSequence.blur_width -> blur_width: float "Width of the blur edge, in percentage relative to the image size"
+#+ * Sequence|EffectSequence|WipeSequence.direction -> direction: enum "Wipe direction"
+#+ * Sequence|EffectSequence|WipeSequence.transition_type -> transition_type: enum "NO DESCRIPTION"
+#Sequence|ImageSequence.animation_offset_end -> animation_offset_end: int "Animation end offset (trim end)"
+#Sequence|ImageSequence.animation_offset_start -> animation_offset_start: int "Animation start offset (trim start)"
+#+ * Sequence|ImageSequence.color_balance -> color_balance: pointer, "(read-only)"
+#Sequence|ImageSequence.color_multiply -> color_multiply: float "NO DESCRIPTION"
+#+ * Sequence|ImageSequence.color_saturation -> color_saturation: float "NO DESCRIPTION"
+#+ * Sequence|ImageSequence.crop -> crop: pointer, "(read-only)"
+#+ * Sequence|ImageSequence.directory -> directory: string "NO DESCRIPTION"
+#+ * Sequence|ImageSequence.elements -> elements: collection, "(read-only)"
+#+ * Sequence|ImageSequence.proxy -> proxy: pointer, "(read-only)"
+#+ * Sequence|ImageSequence.strobe -> strobe: float "Only display every nth frame"
+#+ * Sequence|ImageSequence.transform -> transform: pointer, "(read-only)"
+#+ * Sequence|ImageSequence.use_color_balance -> use_color_balance: boolean "(3-Way color correction) on input"
+#+ * Sequence|ImageSequence.use_crop -> use_crop: boolean "Crop image before processing"
+#Sequence|ImageSequence.use_deinterlace -> use_deinterlace: boolean "For video movies to remove fields"
+#Sequence|ImageSequence.use_flip_x -> use_flip_x: boolean "Flip on the X axis"
+#Sequence|ImageSequence.use_flip_y -> use_flip_y: boolean "Flip on the Y axis"
+#Sequence|ImageSequence.use_float -> use_float: boolean "Convert input to float data"
+#Sequence|ImageSequence.use_premultiply -> use_premultiply: boolean "Convert RGB from key alpha to premultiplied alpha"
+#+ * Sequence|ImageSequence.use_proxy -> use_proxy: boolean "Use a preview proxy for this strip"
+#Sequence|ImageSequence.use_proxy_custom_directory -> use_proxy_custom_directory: boolean "Use a custom directory to store data"
+#Sequence|ImageSequence.use_proxy_custom_file -> use_proxy_custom_file: boolean "Use a custom file to read proxy data from"
+#Sequence|ImageSequence.use_reverse_frames -> use_reverse_frames: boolean "Reverse frame order"
+#+ * Sequence|ImageSequence.use_translation -> use_translation: boolean "Translate image before processing"
+#Sequence|MetaSequence.animation_offset_end -> animation_offset_end: int "Animation end offset (trim end)"
+#Sequence|MetaSequence.animation_offset_start -> animation_offset_start: int "Animation start offset (trim start)"
+#+ * Sequence|MetaSequence.color_balance -> color_balance: pointer, "(read-only)"
+#Sequence|MetaSequence.color_multiply -> color_multiply: float "NO DESCRIPTION"
+#+ * Sequence|MetaSequence.color_saturation -> color_saturation: float "NO DESCRIPTION"
+#+ * Sequence|MetaSequence.crop -> crop: pointer, "(read-only)"
+#+ * Sequence|MetaSequence.proxy -> proxy: pointer, "(read-only)"
+#+ * Sequence|MetaSequence.sequences -> sequences: collection, "(read-only)"
+#+ * Sequence|MetaSequence.strobe -> strobe: float "Only display every nth frame"
+#+ * Sequence|MetaSequence.transform -> transform: pointer, "(read-only)"
+#+ * Sequence|MetaSequence.use_color_balance -> use_color_balance: boolean "(3-Way color correction) on input"
+#+ * Sequence|MetaSequence.use_crop -> use_crop: boolean "Crop image before processing"
+#Sequence|MetaSequence.use_deinterlace -> use_deinterlace: boolean "For video movies to remove fields"
+#Sequence|MetaSequence.use_flip_x -> use_flip_x: boolean "Flip on the X axis"
+#Sequence|MetaSequence.use_flip_y -> use_flip_y: boolean "Flip on the Y axis"
+#Sequence|MetaSequence.use_float -> use_float: boolean "Convert input to float data"
+#Sequence|MetaSequence.use_premultiply -> use_premultiply: boolean "Convert RGB from key alpha to premultiplied alpha"
+#+ * Sequence|MetaSequence.use_proxy -> use_proxy: boolean "Use a preview proxy for this strip"
+#Sequence|MetaSequence.use_proxy_custom_directory -> use_proxy_custom_directory: boolean "Use a custom directory to store data"
+#Sequence|MetaSequence.use_proxy_custom_file -> use_proxy_custom_file: boolean "Use a custom file to read proxy data from"
+#Sequence|MetaSequence.use_reverse_frames -> use_reverse_frames: boolean "Reverse frame order"
+#+ * Sequence|MetaSequence.use_translation -> use_translation: boolean "Translate image before processing"
+#Sequence|MovieSequence.animation_offset_end -> animation_offset_end: int "Animation end offset (trim end)"
+#Sequence|MovieSequence.animation_offset_start -> animation_offset_start: int "Animation start offset (trim start)"
+#+ * Sequence|MovieSequence.color_balance -> color_balance: pointer, "(read-only)"
+#Sequence|MovieSequence.color_multiply -> color_multiply: float "NO DESCRIPTION"
+#+ * Sequence|MovieSequence.color_saturation -> color_saturation: float "NO DESCRIPTION"
+#+ * Sequence|MovieSequence.crop -> crop: pointer, "(read-only)"
+#+ * Sequence|MovieSequence.filepath -> filepath: string "NO DESCRIPTION"
+#+ * Sequence|MovieSequence.mpeg_preseek -> mpeg_preseek: int "For MPEG movies, preseek this many frames"
+#+ * Sequence|MovieSequence.proxy -> proxy: pointer, "(read-only)"
+#+ * Sequence|MovieSequence.strobe -> strobe: float "Only display every nth frame"
+#+ * Sequence|MovieSequence.transform -> transform: pointer, "(read-only)"
+#+ * Sequence|MovieSequence.use_color_balance -> use_color_balance: boolean "(3-Way color correction) on input"
+#+ * Sequence|MovieSequence.use_crop -> use_crop: boolean "Crop image before processing"
+#Sequence|MovieSequence.use_deinterlace -> use_deinterlace: boolean "For video movies to remove fields"
+#Sequence|MovieSequence.use_flip_x -> use_flip_x: boolean "Flip on the X axis"
+#Sequence|MovieSequence.use_flip_y -> use_flip_y: boolean "Flip on the Y axis"
+#Sequence|MovieSequence.use_float -> use_float: boolean "Convert input to float data"
+#Sequence|MovieSequence.use_premultiply -> use_premultiply: boolean "Convert RGB from key alpha to premultiplied alpha"
+#+ * Sequence|MovieSequence.use_proxy -> use_proxy: boolean "Use a preview proxy for this strip"
+#Sequence|MovieSequence.use_proxy_custom_directory -> use_proxy_custom_directory: boolean "Use a custom directory to store data"
+#Sequence|MovieSequence.use_proxy_custom_file -> use_proxy_custom_file: boolean "Use a custom file to read proxy data from"
+#Sequence|MovieSequence.use_reverse_frames -> use_reverse_frames: boolean "Reverse frame order"
+#+ * Sequence|MovieSequence.use_translation -> use_translation: boolean "Translate image before processing"
+#Sequence|MulticamSequence.animation_offset_end -> animation_offset_end: int "Animation end offset (trim end)"
+#Sequence|MulticamSequence.animation_offset_start -> animation_offset_start: int "Animation start offset (trim start)"
+#+ * Sequence|MulticamSequence.color_balance -> color_balance: pointer, "(read-only)"
+#Sequence|MulticamSequence.color_multiply -> color_multiply: float "NO DESCRIPTION"
+#+ * Sequence|MulticamSequence.color_saturation -> color_saturation: float "NO DESCRIPTION"
+#+ * Sequence|MulticamSequence.crop -> crop: pointer, "(read-only)"
+#+ * Sequence|MulticamSequence.multicam_source -> multicam_source: int "NO DESCRIPTION"
+#+ * Sequence|MulticamSequence.proxy -> proxy: pointer, "(read-only)"
+#+ * Sequence|MulticamSequence.strobe -> strobe: float "Only display every nth frame"
+#+ * Sequence|MulticamSequence.transform -> transform: pointer, "(read-only)"
+#+ * Sequence|MulticamSequence.use_color_balance -> use_color_balance: boolean "(3-Way color correction) on input"
+#+ * Sequence|MulticamSequence.use_crop -> use_crop: boolean "Crop image before processing"
+#Sequence|MulticamSequence.use_deinterlace -> use_deinterlace: boolean "For video movies to remove fields"
+#Sequence|MulticamSequence.use_flip_x -> use_flip_x: boolean "Flip on the X axis"
+#Sequence|MulticamSequence.use_flip_y -> use_flip_y: boolean "Flip on the Y axis"
+#Sequence|MulticamSequence.use_float -> use_float: boolean "Convert input to float data"
+#Sequence|MulticamSequence.use_premultiply -> use_premultiply: boolean "Convert RGB from key alpha to premultiplied alpha"
+#+ * Sequence|MulticamSequence.use_proxy -> use_proxy: boolean "Use a preview proxy for this strip"
+#Sequence|MulticamSequence.use_proxy_custom_directory -> use_proxy_custom_directory: boolean "Use a custom directory to store data"
+#Sequence|MulticamSequence.use_proxy_custom_file -> use_proxy_custom_file: boolean "Use a custom file to read proxy data from"
+#Sequence|MulticamSequence.use_reverse_frames -> use_reverse_frames: boolean "Reverse frame order"
+#+ * Sequence|MulticamSequence.use_translation -> use_translation: boolean "Translate image before processing"
+#Sequence|SceneSequence.animation_offset_end -> animation_offset_end: int "Animation end offset (trim end)"
+#Sequence|SceneSequence.animation_offset_start -> animation_offset_start: int "Animation start offset (trim start)"
+#+ * Sequence|SceneSequence.color_balance -> color_balance: pointer, "(read-only)"
+#Sequence|SceneSequence.color_multiply -> color_multiply: float "NO DESCRIPTION"
+#+ * Sequence|SceneSequence.color_saturation -> color_saturation: float "NO DESCRIPTION"
+#+ * Sequence|SceneSequence.crop -> crop: pointer, "(read-only)"
+#+ * Sequence|SceneSequence.proxy -> proxy: pointer, "(read-only)"
+#+ * Sequence|SceneSequence.scene -> scene: pointer "Scene that this sequence uses"
+#+ * Sequence|SceneSequence.scene_camera -> scene_camera: pointer "Override the scenes active camera"
+#+ * Sequence|SceneSequence.strobe -> strobe: float "Only display every nth frame"
+#+ * Sequence|SceneSequence.transform -> transform: pointer, "(read-only)"
+#+ * Sequence|SceneSequence.use_color_balance -> use_color_balance: boolean "(3-Way color correction) on input"
+#+ * Sequence|SceneSequence.use_crop -> use_crop: boolean "Crop image before processing"
+#Sequence|SceneSequence.use_deinterlace -> use_deinterlace: boolean "For video movies to remove fields"
+#Sequence|SceneSequence.use_flip_x -> use_flip_x: boolean "Flip on the X axis"
+#Sequence|SceneSequence.use_flip_y -> use_flip_y: boolean "Flip on the Y axis"
+#Sequence|SceneSequence.use_float -> use_float: boolean "Convert input to float data"
+#Sequence|SceneSequence.use_premultiply -> use_premultiply: boolean "Convert RGB from key alpha to premultiplied alpha"
+#+ * Sequence|SceneSequence.use_proxy -> use_proxy: boolean "Use a preview proxy for this strip"
+#Sequence|SceneSequence.use_proxy_custom_directory -> use_proxy_custom_directory: boolean "Use a custom directory to store data"
+#Sequence|SceneSequence.use_proxy_custom_file -> use_proxy_custom_file: boolean "Use a custom file to read proxy data from"
+#Sequence|SceneSequence.use_reverse_frames -> use_reverse_frames: boolean "Reverse frame order"
+#+ * Sequence|SceneSequence.use_translation -> use_translation: boolean "Translate image before processing"
+#Sequence|SoundSequence.animation_offset_end -> animation_offset_end: int "Animation end offset (trim end)"
+#Sequence|SoundSequence.animation_offset_start -> animation_offset_start: int "Animation start offset (trim start)"
+#+ * Sequence|SoundSequence.attenuation -> attenuation: float "Attenuation in dezibel"
+#+ * Sequence|SoundSequence.filepath -> filepath: string "NO DESCRIPTION"
+#+ * Sequence|SoundSequence.sound -> sound: pointer, "(read-only) Sound datablock used by this sequence"
+#+ * Sequence|SoundSequence.volume -> volume: float "Playback volume of the sound"
+#+ * ShapeKey.data -> data: collection, "(read-only)"
+#+ * ShapeKey.frame -> frame: float, "(read-only) Frame for absolute keys"
+#+ * ShapeKey.interpolation -> interpolation: enum "Interpolation type"
+#+ * ShapeKey.mute -> mute: boolean "Mute this shape key"
+#+ * ShapeKey.name -> name: string "NO DESCRIPTION"
+#+ * ShapeKey.relative_key -> relative_key: pointer "Shape used as a relative key"
+#+ * ShapeKey.slider_max -> slider_max: float "Maximum for slider"
+#+ * ShapeKey.slider_min -> slider_min: float "Minimum for slider"
+#+ * ShapeKey.value -> value: float "Value of shape key at the current frame"
+#+ * ShapeKey.vertex_group -> vertex_group: string "Vertex weight group, to blend with basis shape"
+#+ * ShapeKeyBezierPoint.co -> co: float[3] "NO DESCRIPTION"
+#ShapeKeyBezierPoint.handle_left -> handle_left: float[3] "NO DESCRIPTION"
+#ShapeKeyBezierPoint.handle_right -> handle_right: float[3] "NO DESCRIPTION"
+#+ * ShapeKeyCurvePoint.co -> co: float[3] "NO DESCRIPTION"
+#+ * ShapeKeyCurvePoint.tilt -> tilt: float "NO DESCRIPTION"
+#+ * ShapeKeyPoint.co -> co: float[3] "NO DESCRIPTION"
+#TODO BETTER NAME * SmokeDomainSettings.alpha -> alpha: float "Higher value results in sinking smoke"
+#+ * SmokeDomainSettings.amplify -> amplify: int "Enhance the resolution of smoke by this factor using noise"
+#TODO BETTER NAME * SmokeDomainSettings.beta -> beta: float "Higher value results in faster rising smoke"
+#SmokeDomainSettings.collision_extents -> collision_extents: enum "Selects which domain border will be treated as collision object."
+#SmokeDomainSettings.collision_group -> collision_group: pointer "Limit collisions to this group"
+#+ * SmokeDomainSettings.dissolve_speed -> dissolve_speed: int "Dissolve Speed"
+#SmokeDomainSettings.effector_group -> effector_group: pointer "Limit effectors to this group"
+#+ * SmokeDomainSettings.effector_weights -> effector_weights: pointer, "(read-only)"
+#+ * SmokeDomainSettings.fluid_group -> fluid_group: pointer "Limit fluid objects to this group"
+#+ * SmokeDomainSettings.noise_type -> noise_type: enum "Noise method which is used for creating the high resolution"
+#SmokeDomainSettings.point_cache_compress_high_type -> point_cache_compress_high_type: enum "Compression method to be used"
+#SmokeDomainSettings.point_cache_compress_type -> point_cache_compress_type: enum "Compression method to be used"
+#+ * SmokeDomainSettings.point_cache_high -> point_cache_high: pointer, "(read-only)"
+#+ * SmokeDomainSettings.point_cache_low -> point_cache_low: pointer, "(read-only)"
+#SmokeDomainSettings.resolution_max -> resolution_max: int "Maximal resolution used in the fluid domain"
+#SmokeDomainSettings.show_high_resolution -> show_high_resolution: boolean "Show high resolution (using amplification)"
+#SmokeDomainSettings.smooth_emitter -> smooth_emitter: boolean "Smoothens emitted smoke to avoid blockiness."
+#+ * SmokeDomainSettings.strength -> strength: float "Strength of wavelet noise"
+#+ * SmokeDomainSettings.time_scale -> time_scale: float "Adjust simulation speed."
+#SmokeDomainSettings.use_dissolve_smoke -> use_dissolve_smoke: boolean "Enable smoke to disappear over time"
+#SmokeDomainSettings.use_dissolve_smoke_log -> use_dissolve_smoke_log: boolean "Using 1/x"
+#SmokeDomainSettings.use_high_resolution -> use_high_resolution: boolean "Enable high resolution (using amplification)"
+#+ * SmokeDomainSettings.vorticity -> vorticity: float "Amount of turbulence/rotation in fluid."
+#+ * SmokeFlowSettings.density -> density: float "NO DESCRIPTION"
+#+ * SmokeFlowSettings.initial_velocity -> initial_velocity: boolean "Smoke inherits its velocity from the emitter particle"
+#SmokeFlowSettings.particle_system -> particle_system: pointer "Particle systems emitted from the object"
+#+ * SmokeFlowSettings.temperature -> temperature: float "Temperature difference to ambient temperature"
+#SmokeFlowSettings.use_absolute -> use_absolute: boolean "Only allows given density value in emitter area."
+#SmokeFlowSettings.use_outflow -> use_outflow: boolean "Deletes smoke from simulation"
+#SmokeFlowSettings.velocity_factor -> velocity_factor: float "Multiplier to adjust velocity passed to smoke"
+#+ * SoftBodySettings.aero -> aero: float "Make edges sail"
+#+ * SoftBodySettings.aerodynamics_type -> aerodynamics_type: enum "Method of calculating aerodynamic interaction"
+#+ * SoftBodySettings.ball_damp -> ball_damp: float "Blending to inelastic collision"
+#+ * SoftBodySettings.ball_size -> ball_size: float "Absolute ball size or factor if not manual adjusted"
+#+ * SoftBodySettings.ball_stiff -> ball_stiff: float "Ball inflating pressure"
+#SoftBodySettings.bend -> bend: float "Bending Stiffness"
+#+ * SoftBodySettings.choke -> choke: int "Viscosity inside collision target"
+#+ * SoftBodySettings.collision_type -> collision_type: enum "Choose Collision Type"
+#SoftBodySettings.damping -> damping: float "Edge spring friction"
+#+ * SoftBodySettings.effector_weights -> effector_weights: pointer, "(read-only)"
+#SoftBodySettings.error_threshold -> error_threshold: float "The Runge-Kutta ODE solver error limit, low value gives more precision, high values speed"
+#+ * SoftBodySettings.friction -> friction: float "General media friction for point movements"
+#+ * SoftBodySettings.fuzzy -> fuzzy: int "Fuzziness while on collision, high values make collsion handling faster but less stable"
+#+ * SoftBodySettings.goal_default -> goal_default: float "Default Goal (vertex target position) value, when no Vertex Group used"
+#+ * SoftBodySettings.goal_friction -> goal_friction: float "Goal (vertex target position) friction"
+#+ * SoftBodySettings.goal_max -> goal_max: float "Goal maximum, vertex weights are scaled to match this range"
+#+ * SoftBodySettings.goal_min -> goal_min: float "Goal minimum, vertex weights are scaled to match this range"
+#+ * SoftBodySettings.goal_spring -> goal_spring: float "Goal (vertex target position) spring stiffness"
+#+ * SoftBodySettings.goal_vertex_group -> goal_vertex_group: string "Control point weight values"
+#+ * SoftBodySettings.gravity -> gravity: float "Apply gravitation to point movement"
+#SoftBodySettings.location_mass_center -> location_mass_center: float[3] "Location of Center of mass"
+#+ * SoftBodySettings.mass -> mass: float "General Mass value"
+#+ * SoftBodySettings.mass_vertex_group -> mass_vertex_group: string "Control point mass values"
+#+ * SoftBodySettings.plastic -> plastic: float "Permanent deform"
+#+ * SoftBodySettings.pull -> pull: float "Edge spring stiffness when longer than rest length"
+#+ * SoftBodySettings.push -> push: float "Edge spring stiffness when shorter than rest length"
+#SoftBodySettings.rotation_estimate -> rotation_estimate: float[9] "Estimated rotation matrix"
+#SoftBodySettings.scale_estimate -> scale_estimate: float[9] "Estimated scale matrix"
+#+ * SoftBodySettings.shear -> shear: float "Shear Stiffness"
+#+ * SoftBodySettings.speed -> speed: float "Tweak timing for physics to control frequency and speed"
+#+ * SoftBodySettings.spring_length -> spring_length: float "Alter spring length to shrink/blow up (unit %) 0 to disable"
+#+ * SoftBodySettings.spring_vertex_group -> spring_vertex_group: string "Control point spring strength values"
+#SoftBodySettings.step_max -> step_max: int "Maximal # solver steps/frame"
+#SoftBodySettings.step_min -> step_min: int "Minimal # solver steps/frame"
+#SoftBodySettings.use_auto_step -> use_auto_step: boolean "Use velocities for automagic step sizes"
+#SoftBodySettings.use_diagnose -> use_diagnose: boolean "Turn on SB diagnose console prints"
+#SoftBodySettings.use_edge_collision -> use_edge_collision: boolean "Edges collide too"
+#+ * SoftBodySettings.use_edges -> use_edges: boolean "Use Edges as springs"
+#SoftBodySettings.use_estimate_matrix -> use_estimate_matrix: boolean "estimate matrix .. split to COM , ROT ,SCALE"
+#SoftBodySettings.use_face_collision -> use_face_collision: boolean "Faces collide too, can be very slow"
+#+ * SoftBodySettings.use_goal -> use_goal: boolean "Define forces for vertices to stick to animated position"
+#SoftBodySettings.use_self_collision -> use_self_collision: boolean "Enable naive vertex ball self collision"
+#SoftBodySettings.use_stiff_quads -> use_stiff_quads: boolean "Adds diagonal springs on 4-gons"
+#+ * Space.type -> type: enum, "(read-only) Space data type"
+#+ * SpaceUVEditor.cursor_location -> cursor_location: float[2] "2D cursor location for this view"
+#+ * SpaceUVEditor.draw_stretch_type -> draw_stretch_type: enum "Type of stretch to draw"
+#+ * SpaceUVEditor.edge_draw_type -> edge_draw_type: enum "Draw type for drawing UV edges"
+#SpaceUVEditor.lock_bounds -> lock_bounds: boolean "Constraint to stay within the image bounds while editing"
+#SpaceUVEditor.pivot_point -> pivot_point: enum "Rotation/Scaling Pivot"
+#SpaceUVEditor.show_modified_edges -> show_modified_edges: boolean "Draw edges after modifiers are applied"
+#SpaceUVEditor.show_normalized_coords -> show_normalized_coords: boolean "Display UV coordinates from 0.0 to 1.0 rather than in pixels"
+#SpaceUVEditor.show_other_objects -> show_other_objects: boolean "Draw other selected objects that share the same image"
+#SpaceUVEditor.show_smooth_edges -> show_smooth_edges: boolean "Draw UV edges anti-aliased"
+#SpaceUVEditor.show_stretch -> show_stretch: boolean "Draw faces colored according to the difference in shape between UVs and their 3D coordinates (blue for low distortion, red for high distortion)"
+#SpaceUVEditor.sticky_select_mode -> sticky_select_mode: enum "Automatically select also UVs sharing the same vertex as the ones being selected"
+#SpaceUVEditor.use_live_unwrap -> use_live_unwrap: boolean "Continuously unwrap the selected UV island while transforming pinned vertices"
+#SpaceUVEditor.use_snap_to_pixels -> use_snap_to_pixels: boolean "Snap UVs to pixel locations while editing"
+#+ * Space|SpaceConsole.console_type -> console_type: enum "Console type"
+#+ * Space|SpaceConsole.font_size -> font_size: int "Font size to use for displaying the text"
+#+ * Space|SpaceConsole.history -> history: collection, "(read-only) Command history"
+#+ * Space|SpaceConsole.language -> language: string "Command line prompt language"
+#+ * Space|SpaceConsole.prompt -> prompt: string "Command line prompt"
+#+ * Space|SpaceConsole.scrollback -> scrollback: collection, "(read-only) Command output"
+#Space|SpaceConsole.select_end -> select_end: int "NO DESCRIPTION"
+#Space|SpaceConsole.select_start -> select_start: int "NO DESCRIPTION"
+#+ * Space|SpaceConsole.show_report_debug -> show_report_debug: boolean "Display debug reporting info"
+#+ * Space|SpaceConsole.show_report_error -> show_report_error: boolean "Display error text"
+#+ * Space|SpaceConsole.show_report_info -> show_report_info: boolean "Display general information"
+#+ * Space|SpaceConsole.show_report_operator -> show_report_operator: boolean "Display the operator log"
+#Space|SpaceConsole.show_report_warning -> show_report_warning: boolean "Display warnings"
+#+ * Space|SpaceDopeSheetEditor.action -> action: pointer "Action displayed and edited in this space"
+#Space|SpaceDopeSheetEditor.auto_snap -> auto_snap: enum "Automatic time snapping settings for transformations"
+#+ * Space|SpaceDopeSheetEditor.dopesheet -> dopesheet: pointer, "(read-only) Settings for filtering animation data"
+#+ * Space|SpaceDopeSheetEditor.mode -> mode: enum "Editing context being displayed"
+#Space|SpaceDopeSheetEditor.show_frame_indicator -> show_frame_indicator: boolean "Show frame number beside the current frame indicator line"
+#+ * Space|SpaceDopeSheetEditor.show_seconds -> show_seconds: boolean, "(read-only) Show timing in seconds not frames"
+#+ * Space|SpaceDopeSheetEditor.show_sliders -> show_sliders: boolean "Show sliders beside F-Curve channels"
+#Space|SpaceDopeSheetEditor.use_auto_merge_keyframes -> use_auto_merge_keyframes: boolean "Automatically merge nearby keyframes"
+#+ * Space|SpaceDopeSheetEditor.use_marker_sync -> use_marker_sync: boolean "Sync Markers with keyframe edits"
+#Space|SpaceDopeSheetEditor.use_realtime_update -> use_realtime_update: boolean "When transforming keyframes, changes to the animation data are flushed to other views"
+#+ * Space|SpaceFileBrowser.params -> params: pointer, "(read-only) Parameters and Settings for the Filebrowser"
+#Space|SpaceGraphEditor.auto_snap -> auto_snap: enum "Automatic time snapping settings for transformations"
+#Space|SpaceGraphEditor.cursor_position_y -> cursor_position_y: float "Graph Editor 2D-Value cursor - Y-Value component"
+#+ * Space|SpaceGraphEditor.dopesheet -> dopesheet: pointer, "(read-only) Settings for filtering animation data"
+#+ * Space|SpaceGraphEditor.has_ghost_curves -> has_ghost_curves: boolean "Graph Editor instance has some ghost curves stored"
+#+ * Space|SpaceGraphEditor.mode -> mode: enum "Editing context being displayed"
+#+ * Space|SpaceGraphEditor.pivot_point -> pivot_point: enum "Pivot center for rotation/scaling"
+#+ * Space|SpaceGraphEditor.show_cursor -> show_cursor: boolean "Show 2D cursor"
+#Space|SpaceGraphEditor.show_frame_indicator -> show_frame_indicator: boolean "Show frame number beside the current frame indicator line"
+#+ * Space|SpaceGraphEditor.show_handles -> show_handles: boolean "Show handles of Bezier control points"
+#+ * Space|SpaceGraphEditor.show_seconds -> show_seconds: boolean, "(read-only) Show timing in seconds not frames"
+#+ * Space|SpaceGraphEditor.show_sliders -> show_sliders: boolean "Show sliders beside F-Curve channels"
+#Space|SpaceGraphEditor.use_auto_merge_keyframes -> use_auto_merge_keyframes: boolean "Automatically merge nearby keyframes"
+#Space|SpaceGraphEditor.use_only_selected_curves_handles -> use_only_selected_curves_handles: boolean "Only keyframes of selected F-Curves are visible and editable"
+#Space|SpaceGraphEditor.use_only_selected_keyframe_handles -> use_only_selected_keyframe_handles: boolean "Only show and edit handles of selected keyframes"
+#Space|SpaceGraphEditor.use_realtime_update -> use_realtime_update: boolean "When transforming keyframes, changes to the animation data are flushed to other views"
+#+ * Space|SpaceImageEditor.curves -> curves: pointer, "(read-only) Color curve mapping to use for displaying the image"
+#+ * Space|SpaceImageEditor.draw_channels -> draw_channels: enum "Channels of the image to draw"
+#+ * Space|SpaceImageEditor.grease_pencil -> grease_pencil: pointer "Grease pencil data for this space"
+#+ * Space|SpaceImageEditor.image -> image: pointer "Image displayed and edited in this space"
+#+ * Space|SpaceImageEditor.image_user -> image_user: pointer, "(read-only) Parameters defining which layer, pass and frame of the image is displayed"
+#+ * Space|SpaceImageEditor.sample_histogram -> sample_histogram: pointer, "(read-only) Sampled colors along line"
+#+ * Space|SpaceImageEditor.scopes -> scopes: pointer, "(read-only) Scopes to visualize image statistics."
+#+ * Space|SpaceImageEditor.show_paint -> show_paint: boolean, "(read-only) Show paint related properties"
+#+ * Space|SpaceImageEditor.show_render -> show_render: boolean, "(read-only) Show render related properties"
+#Space|SpaceImageEditor.show_repeat -> show_repeat: boolean "Draw the image repeated outside of the main view"
+#+ * Space|SpaceImageEditor.show_uvedit -> show_uvedit: boolean, "(read-only) Show UV editing related properties"
+#+ * Space|SpaceImageEditor.use_grease_pencil -> use_grease_pencil: boolean "Display and edit the grease pencil freehand annotations overlay"
+#Space|SpaceImageEditor.use_image_paint -> use_image_paint: boolean "Enable image painting mode"
+#Space|SpaceImageEditor.use_image_pin -> use_image_pin: boolean "Display current image regardless of object selection"
+#Space|SpaceImageEditor.use_realtime_update -> use_realtime_update: boolean "Update other affected window spaces automatically to reflect changes during interactive operations such as transform"
+#+ * Space|SpaceImageEditor.uv_editor -> uv_editor: pointer, "(read-only) UV editor settings"
+#Space|SpaceLogicEditor.show_actuators_active_object -> show_actuators_active_object: boolean "Show actuators of active object"
+#Space|SpaceLogicEditor.show_actuators_active_states -> show_actuators_active_states: boolean "Show only actuators connected to active states"
+#Space|SpaceLogicEditor.show_actuators_linked_controller -> show_actuators_linked_controller: boolean "Show linked objects to the actuator"
+#Space|SpaceLogicEditor.show_actuators_selected_objects -> show_actuators_selected_objects: boolean "Show actuators of all selected objects"
+#Space|SpaceLogicEditor.show_controllers_active_object -> show_controllers_active_object: boolean "Show controllers of active object"
+#Space|SpaceLogicEditor.show_controllers_linked_controller -> show_controllers_linked_controller: boolean "Show linked objects to sensor/actuator"
+#Space|SpaceLogicEditor.show_controllers_selected_objects -> show_controllers_selected_objects: boolean "Show controllers of all selected objects"
+#Space|SpaceLogicEditor.show_sensors_active_object -> show_sensors_active_object: boolean "Show sensors of active object"
+#Space|SpaceLogicEditor.show_sensors_active_states -> show_sensors_active_states: boolean "Show only sensors connected to active states"
+#Space|SpaceLogicEditor.show_sensors_linked_controller -> show_sensors_linked_controller: boolean "Show linked objects to the controller"
+#Space|SpaceLogicEditor.show_sensors_selected_objects -> show_sensors_selected_objects: boolean "Show sensors of all selected objects"
+#Space|SpaceNLA.auto_snap -> auto_snap: enum "Automatic time snapping settings for transformations"
+#+ * Space|SpaceNLA.dopesheet -> dopesheet: pointer, "(read-only) Settings for filtering animation data"
+#Space|SpaceNLA.show_frame_indicator -> show_frame_indicator: boolean "Show frame number beside the current frame indicator line"
+#+ * Space|SpaceNLA.show_seconds -> show_seconds: boolean, "(read-only) Show timing in seconds not frames"
+#+ * Space|SpaceNLA.show_strip_curves -> show_strip_curves: boolean "Show influence curves on strips"
+#Space|SpaceNLA.use_realtime_update -> use_realtime_update: boolean "When transforming strips, changes to the animation data are flushed to other views"
+#+ * Space|SpaceNodeEditor.id -> id: pointer, "(read-only) Datablock whose nodes are being edited"
+#+ * Space|SpaceNodeEditor.id_from -> id_from: pointer, "(read-only) Datablock from which the edited datablock is linked"
+#+ * Space|SpaceNodeEditor.nodetree -> nodetree: pointer, "(read-only) Node tree being displayed and edited"
+#Space|SpaceNodeEditor.show_backdrop -> show_backdrop: boolean "Use active Viewer Node output as backdrop for compositing nodes"
+#+ * Space|SpaceNodeEditor.texture_type -> texture_type: enum "Type of data to take texture from"
+#+ * Space|SpaceNodeEditor.tree_type -> tree_type: enum "Node tree type to display and edit"
+#+ * Space|SpaceOutliner.display_mode -> display_mode: enum "Type of information to display"
+#Space|SpaceOutliner.filter_text -> filter_text: string "Live search filtering string"
+#Space|SpaceOutliner.show_restrict_columns -> show_restrict_columns: boolean "Show column"
+#Space|SpaceOutliner.use_filter_case_sensitive -> use_filter_case_sensitive: boolean "Only use case sensitive matches of search string"
+#Space|SpaceOutliner.use_filter_complete -> use_filter_complete: boolean "Only use complete matches of search string"
+#+ * Space|SpaceProperties.align -> align: enum "Arrangement of the panels"
+#+ * Space|SpaceProperties.context -> context: enum "Type of active data to display and edit"
+#+ * Space|SpaceProperties.pin_id -> pin_id: pointer "NO DESCRIPTION"
+#Space|SpaceProperties.show_brush_texture -> show_brush_texture: boolean "Show brush textures"
+#+ * Space|SpaceProperties.use_pin_id -> use_pin_id: boolean "Use the pinned context"
+#+ * Space|SpaceSequenceEditor.display_channel -> display_channel: int "The channel number shown in the image preview. 0 is the result of all strips combined"
+#+ * Space|SpaceSequenceEditor.display_mode -> display_mode: enum "The view mode to use for displaying sequencer output"
+#+ * Space|SpaceSequenceEditor.draw_overexposed -> draw_overexposed: int "Show overexposed areas with zebra stripes"
+#+ * Space|SpaceSequenceEditor.grease_pencil -> grease_pencil: pointer, "(read-only) Grease pencil data for this space"
+#+ * Space|SpaceSequenceEditor.offset_x -> offset_x: float "Offsets image horizontally from the view center"
+#+ * Space|SpaceSequenceEditor.offset_y -> offset_y: float "Offsets image horizontally from the view center"
+#+ * Space|SpaceSequenceEditor.proxy_render_size -> proxy_render_size: enum "Draw preview using full resolution or different proxy resolutions"
+#Space|SpaceSequenceEditor.show_frame_indicator -> show_frame_indicator: boolean "Show frame number beside the current frame indicator line"
+#Space|SpaceSequenceEditor.show_frames -> show_frames: boolean "Draw frames rather than seconds"
+#Space|SpaceSequenceEditor.show_safe_margin -> show_safe_margin: boolean "Draw title safe margins in preview"
+#Space|SpaceSequenceEditor.show_separate_color -> show_separate_color: boolean "Separate color channels in preview"
+#+ * Space|SpaceSequenceEditor.use_grease_pencil -> use_grease_pencil: boolean "Display and edit the grease pencil freehand annotations overlay"
+#+ * Space|SpaceSequenceEditor.use_marker_sync -> use_marker_sync: boolean "Transform markers as well as strips"
+#+ * Space|SpaceSequenceEditor.view_type -> view_type: enum "The type of the Sequencer view (sequencer, preview or both)"
+#+ * Space|SpaceSequenceEditor.zoom -> zoom: float "Display zoom level"
+#+ * Space|SpaceTextEditor.find_text -> find_text: string "Text to search for with the find tool"
+#+ * Space|SpaceTextEditor.font_size -> font_size: int "Font size to use for displaying the text"
+#+ * Space|SpaceTextEditor.replace_text -> replace_text: string "Text to replace selected text with using the replace tool"
+#Space|SpaceTextEditor.show_line_highlight -> show_line_highlight: boolean "Highlight the current line"
+#+ * Space|SpaceTextEditor.show_line_numbers -> show_line_numbers: boolean "Show line numbers next to the text"
+#+ * Space|SpaceTextEditor.show_syntax_highlight -> show_syntax_highlight: boolean "Syntax highlight for scripting"
+#+ * Space|SpaceTextEditor.show_word_wrap -> show_word_wrap: boolean "Wrap words if there is not enough horizontal space"
+#+ * Space|SpaceTextEditor.tab_width -> tab_width: int "Number of spaces to display tabs with"
+#+ * Space|SpaceTextEditor.text -> text: pointer "Text displayed and edited in this space"
+#Space|SpaceTextEditor.use_find_all -> use_find_all: boolean "Search in all text datablocks, instead of only the active one"
+#Space|SpaceTextEditor.use_find_wrap -> use_find_wrap: boolean "Search again from the start of the file when reaching the end"
+#Space|SpaceTextEditor.use_live_edit -> use_live_edit: boolean "Run python while editing"
+#Space|SpaceTextEditor.use_overwrite -> use_overwrite: boolean "Overwrite characters when typing rather than inserting them"
+#+ * Space|SpaceTimeline.cache_cloth -> cache_cloth: boolean "Show the active objects cloth point cache"
+#+ * Space|SpaceTimeline.cache_particles -> cache_particles: boolean "Show the active objects particle point cache"
+#+ * Space|SpaceTimeline.cache_smoke -> cache_smoke: boolean "Show the active objects smoke cache"
+#+ * Space|SpaceTimeline.cache_softbody -> cache_softbody: boolean "Show the active objects softbody point cache"
+#+ * Space|SpaceTimeline.show_cache -> show_cache: boolean "Show the status of cached frames in the timeline"
+#Space|SpaceTimeline.show_frame_indicator -> show_frame_indicator: boolean "Show frame number beside the current frame indicator line"
+#Space|SpaceTimeline.show_only_selected -> show_only_selected: boolean "Show keyframes for active Object and/or its selected channels only"
+#Space|SpaceTimeline.use_play_3d_editors -> use_play_3d_editors: boolean "NO DESCRIPTION"
+#Space|SpaceTimeline.use_play_animation_editors -> use_play_animation_editors: boolean "NO DESCRIPTION"
+#Space|SpaceTimeline.use_play_image_editors -> use_play_image_editors: boolean "NO DESCRIPTION"
+#Space|SpaceTimeline.use_play_node_editors -> use_play_node_editors: boolean "NO DESCRIPTION"
+#Space|SpaceTimeline.use_play_properties_editors -> use_play_properties_editors: boolean "NO DESCRIPTION"
+#Space|SpaceTimeline.use_play_sequence_editors -> use_play_sequence_editors: boolean "NO DESCRIPTION"
+#Space|SpaceTimeline.use_play_top_left_3d_editor -> use_play_top_left_3d_editor: boolean "NO DESCRIPTION"
+#Space|SpaceUserPreferences.filter_text -> filter_text: string "Search term for filtering in the UI"
+#+ * Space|SpaceView3D.background_images -> background_images: collection, "(read-only) List of background images"
+#+ * Space|SpaceView3D.camera -> camera: pointer "Active camera used in this view (when unlocked from the scenes active camera)"
+#+ * Space|SpaceView3D.clip_end -> clip_end: float "3D View far clipping distance"
+#+ * Space|SpaceView3D.clip_start -> clip_start: float "3D View near clipping distance"
+#+ * Space|SpaceView3D.current_orientation -> current_orientation: pointer, "(read-only) Current Transformation orientation"
+#+ * Space|SpaceView3D.cursor_location -> cursor_location: float[3] "3D cursor location for this view (dependent on local view setting)"
+#+ * Space|SpaceView3D.grid_lines -> grid_lines: int "The number of grid lines to display in perspective view"
+#+ * Space|SpaceView3D.grid_spacing -> grid_spacing: float "The distance between 3D View grid lines"
+#+ * Space|SpaceView3D.grid_subdivisions -> grid_subdivisions: int "The number of subdivisions between grid lines"
+#+ * Space|SpaceView3D.layers -> layers: boolean[20] "Layers visible in this 3D View"
+#Space|SpaceView3D.layers_used -> layers_used: boolean[20], "(read-only) Layers that contain something"
+#+ * Space|SpaceView3D.lens -> lens: float "Lens angle (mm) in perspective view"
+#+ * Space|SpaceView3D.local_view -> local_view: pointer, "(read-only) Display an isolated sub-set of objects, apart from the scene visibility"
+#+ * Space|SpaceView3D.lock_bone -> lock_bone: string "3D View center is locked to this bones position"
+#+ * Space|SpaceView3D.lock_camera_and_layers -> lock_camera_and_layers: boolean "Use the scenes active camera and layers in this view, rather than local layers"
+#+ * Space|SpaceView3D.lock_object -> lock_object: pointer "3D View center is locked to this objects position"
+#+ * Space|SpaceView3D.pivot_point -> pivot_point: enum "Pivot center for rotation/scaling"
+#+ * Space|SpaceView3D.region_3d -> region_3d: pointer, "(read-only) 3D region in this space, in case of quad view the camera region"
+#+ * Space|SpaceView3D.region_quadview -> region_quadview: pointer, "(read-only) 3D region that defines the quad view settings"
+#Space|SpaceView3D.show_all_objects_origin -> show_all_objects_origin: boolean "Show the object origin center dot for all (selected and unselected) objects"
+#Space|SpaceView3D.show_axis_x -> show_axis_x: boolean "Show the X axis line in perspective view"
+#Space|SpaceView3D.show_axis_y -> show_axis_y: boolean "Show the Y axis line in perspective view"
+#Space|SpaceView3D.show_axis_z -> show_axis_z: boolean "Show the Z axis line in perspective view"
+#Space|SpaceView3D.show_background_images -> show_background_images: boolean "Display reference images behind objects in the 3D View"
+#Space|SpaceView3D.show_floor -> show_floor: boolean "Show the ground plane grid in perspective view"
+#Space|SpaceView3D.show_manipulator -> show_manipulator: boolean "Use a 3D manipulator widget for controlling transforms"
+#Space|SpaceView3D.show_only_render -> show_only_render: boolean "Display only objects which will be rendered"
+#Space|SpaceView3D.show_outline_selected -> show_outline_selected: boolean "Show an outline highlight around selected objects in non-wireframe views"
+#Space|SpaceView3D.show_relationship_lines -> show_relationship_lines: boolean "Show dashed lines indicating parent or constraint relationships"
+#Space|SpaceView3D.show_textured_solid -> show_textured_solid: boolean "Display face-assigned textures in solid view"
+#+ * Space|SpaceView3D.transform_orientation -> transform_orientation: enum "Transformation orientation"
+#Space|SpaceView3D.use_manipulator_rotate -> use_manipulator_rotate: boolean "Use the manipulator for rotation transformations"
+#Space|SpaceView3D.use_manipulator_scale -> use_manipulator_scale: boolean "Use the manipulator for scale transformations"
+#Space|SpaceView3D.use_manipulator_translate -> use_manipulator_translate: boolean "Use the manipulator for movement transformations"
+#Space|SpaceView3D.use_occlude_geometry -> use_occlude_geometry: boolean "Limit selection to visible (clipped with depth buffer)"
+#Space|SpaceView3D.use_pivot_point_align -> use_pivot_point_align: boolean "Manipulate object centers only"
+#Space|SpaceView3D.viewport_shade -> viewport_shade: enum "Method to display/shade objects in the 3D View"
+#+ * Spline.bezier_points -> bezier_points: collection, "(read-only) Collection of points for bezier curves only"
+#+ * Spline.character_index -> character_index: int, "(read-only) Location of this character in the text data (only for text curves)"
+#+ * Spline.hide -> hide: boolean "Hide this curve in editmode"
+#+ * Spline.material_index -> material_index: int "NO DESCRIPTION"
+#+ * Spline.order_u -> order_u: int "Nurbs order in the U direction (For splines and surfaces), Higher values let points influence a greater area"
+#+ * Spline.order_v -> order_v: int "Nurbs order in the V direction (For surfaces only), Higher values let points influence a greater area"
+#+ * Spline.point_count_u -> point_count_u: int, "(read-only) Total number points for the curve or surface in the U direction"
+#+ * Spline.point_count_v -> point_count_v: int, "(read-only) Total number points for the surface on the V direction"
+#+ * Spline.points -> points: collection, "(read-only) Collection of points that make up this poly or nurbs spline"
+#+ * Spline.radius_interpolation -> radius_interpolation: enum "The type of radius interpolation for Bezier curves"
+#+ * Spline.resolution_u -> resolution_u: int "Curve or Surface subdivisions per segment"
+#+ * Spline.resolution_v -> resolution_v: int "Surface subdivisions per segment"
+#+ * Spline.tilt_interpolation -> tilt_interpolation: enum "The type of tilt interpolation for 3D, Bezier curves"
+#+ * Spline.type -> type: enum "The interpolation type for this curve element"
+#Spline.use_bezier_u -> use_bezier_u: boolean "Make this nurbs curve or surface act like a bezier spline in the U direction (Order U must be 3 or 4, Cyclic U must be disabled)"
+#Spline.use_bezier_v -> use_bezier_v: boolean "Make this nurbs surface act like a bezier spline in the V direction (Order V must be 3 or 4, Cyclic V must be disabled)"
+#Spline.use_cyclic_u -> use_cyclic_u: boolean "Make this curve or surface a closed loop in the U direction"
+#Spline.use_cyclic_v -> use_cyclic_v: boolean "Make this surface a closed loop in the V direction"
+#Spline.use_endpoint_u -> use_endpoint_u: boolean "Make this nurbs curve or surface meet the endpoints in the U direction (Cyclic U must be disabled)"
+#Spline.use_endpoint_v -> use_endpoint_v: boolean "Make this nurbs surface meet the endpoints in the V direction (Cyclic V must be disabled)"
+#Spline.use_smooth -> use_smooth: boolean "Smooth the normals of the surface or beveled curve"
+#+ * SplinePoint.co -> co: float[4] "Point coordinates"
+#+ * SplinePoint.hide -> hide: boolean "Visibility status"
+#+ * SplinePoint.radius -> radius: float, "(read-only) Radius for bevelling"
+#+ * SplinePoint.select -> select: boolean "Selection status"
+#+ * SplinePoint.tilt -> tilt: float "Tilt in 3D View"
+#+ * SplinePoint.weight -> weight: float "Nurbs weight"
+#+ * SplinePoint.weight_softbody -> weight_softbody: float "Softbody goal weight"
+#+ * Struct.base -> base: pointer, "(read-only) Struct definition this is derived from"
+#+ * Struct.description -> description: string, "(read-only) Description of the Structs purpose"
+#+ * Struct.functions -> functions: collection, "(read-only)"
+#+ * Struct.identifier -> identifier: string, "(read-only) Unique name used in the code and scripting"
+#+ * Struct.name -> name: string, "(read-only) Human readable name"
+#+ * Struct.name_property -> name_property: pointer, "(read-only) Property that gives the name of the struct"
+#+ * Struct.nested -> nested: pointer, "(read-only) Struct in which this struct is always nested, and to which it logically belongs"
+#+ * Struct.properties -> properties: collection, "(read-only) Properties in the struct"
+#+ * TexMapping.location -> location: float[3] "NO DESCRIPTION"
+#TexMapping.max -> max: float[3] "Maximum value for clipping"
+#TexMapping.min -> min: float[3] "Minimum value for clipping"
+#+ * TexMapping.rotation -> rotation: float[3] "NO DESCRIPTION"
+#+ * TexMapping.scale -> scale: float[3] "NO DESCRIPTION"
+#TexMapping.use_max -> use_max: boolean "Whether to use maximum clipping value"
+#TexMapping.use_min -> use_min: boolean "Whether to use minimum clipping value"
+#+ * TextBox.height -> height: float "NO DESCRIPTION"
+#+ * TextBox.width -> width: float "NO DESCRIPTION"
+#+ * TextBox.x -> x: float "NO DESCRIPTION"
+#+ * TextBox.y -> y: float "NO DESCRIPTION"
+#TextCharacterFormat.use_bold -> use_bold: boolean "NO DESCRIPTION"
+#TextCharacterFormat.use_italic -> use_italic: boolean "NO DESCRIPTION"
+#+ * TextCharacterFormat.use_small_caps -> use_small_caps: boolean "NO DESCRIPTION"
+#TextCharacterFormat.use_underline -> use_underline: boolean "NO DESCRIPTION"
+#+ * TextLine.body -> body: string "Text in the line"
+#TextMarker.character_index_end -> character_index_end: int, "(read-only) Start position of the marker in the line"
+#TextMarker.character_index_start -> character_index_start: int, "(read-only) Start position of the marker in the line"
+#+ * TextMarker.color -> color: float[4] "Color to display the marker with"
+#+ * TextMarker.group -> group: int, "(read-only)"
+#TextMarker.is_temporary -> is_temporary: boolean, "(read-only) Marker is temporary"
+#+ * TextMarker.line -> line: int, "(read-only) Line in which the marker is located"
+#TextMarker.use_edit_all -> use_edit_all: boolean, "(read-only) Edit all markers of the same group as one"
+#+ * TextureSlot.blend_type -> blend_type: enum "NO DESCRIPTION"
+#+ * TextureSlot.color -> color: float[3] "The default color for textures that dont return RGB"
+#+ * TextureSlot.default_value -> default_value: float "Value to use for Ref, Spec, Amb, Emit, Alpha, RayMir, TransLu and Hard"
+#TextureSlot.invert -> invert: boolean "Inverts the values of the texture to reverse its effect"
+#+ * TextureSlot.name -> name: string, "(read-only) Texture slot name"
+#+ * TextureSlot.offset -> offset: float[3] "Fine tunes texture mapping X, Y and Z locations"
+#+ * TextureSlot.output_node -> output_node: enum "Which output node to use, for node-based textures"
+#TextureSlot.scale -> scale: float[3] "Sets scaling for the textures X, Y and Z sizes"
+#+ * TextureSlot.texture -> texture: pointer "Texture datablock used by this texture slot"
+#TextureSlot.use_rgb_to_intensity -> use_rgb_to_intensity: boolean "Converts texture RGB values to intensity (gray) values"
+#TextureSlot.use_stencil -> use_stencil: boolean "Use this texture as a blending value on the next texture"
+#+ * TextureSlot|BrushTextureSlot.angle -> angle: float "Defines brush texture rotation"
+#+ * TextureSlot|BrushTextureSlot.map_mode -> map_mode: enum "NO DESCRIPTION"
+#+ * TextureSlot|LampTextureSlot.color_factor -> color_factor: float "Amount texture affects color values"
+#+ * TextureSlot|LampTextureSlot.object -> object: pointer "Object to use for mapping with Object texture coordinates"
+#+ * TextureSlot|LampTextureSlot.shadow_factor -> shadow_factor: float "Amount texture affects shadow"
+#TextureSlot|LampTextureSlot.texture_coords -> texture_coords: enum "NO DESCRIPTION"
+#TextureSlot|LampTextureSlot.use_map_color -> use_map_color: boolean "Lets the texture affect the basic color of the lamp"
+#TextureSlot|LampTextureSlot.use_map_shadow -> use_map_shadow: boolean "Lets the texture affect the shadow color of the lamp"
+#+ * TextureSlot|MaterialTextureSlot.alpha_factor -> alpha_factor: float "Amount texture affects alpha"
+#+ * TextureSlot|MaterialTextureSlot.ambient_factor -> ambient_factor: float "Amount texture affects ambient"
+#TextureSlot|MaterialTextureSlot.color_emission_factor -> color_emission_factor: float "Amount texture affects emission color"
+#+ * TextureSlot|MaterialTextureSlot.density_factor -> density_factor: float "Amount texture affects density"
+#TextureSlot|MaterialTextureSlot.diffuse_color_factor -> diffuse_color_factor: float "Amount texture affects diffuse color"
+#+ * TextureSlot|MaterialTextureSlot.diffuse_factor -> diffuse_factor: float "Amount texture affects diffuse reflectivity"
+#+ * TextureSlot|MaterialTextureSlot.displacement_factor -> displacement_factor: float "Amount texture displaces the surface"
+#+ * TextureSlot|MaterialTextureSlot.emission_factor -> emission_factor: float "Amount texture affects emission"
+#+ * TextureSlot|MaterialTextureSlot.emit_factor -> emit_factor: float "Amount texture affects emission"
+#+ * TextureSlot|MaterialTextureSlot.hardness_factor -> hardness_factor: float "Amount texture affects hardness"
+#+ * TextureSlot|MaterialTextureSlot.mapping -> mapping: enum "NO DESCRIPTION"
+#TextureSlot|MaterialTextureSlot.mapping_x -> mapping_x: enum "NO DESCRIPTION"
+#TextureSlot|MaterialTextureSlot.mapping_y -> mapping_y: enum "NO DESCRIPTION"
+#TextureSlot|MaterialTextureSlot.mapping_z -> mapping_z: enum "NO DESCRIPTION"
+#+ * TextureSlot|MaterialTextureSlot.mirror_factor -> mirror_factor: float "Amount texture affects mirror color"
+#+ * TextureSlot|MaterialTextureSlot.normal_factor -> normal_factor: float "Amount texture affects normal values"
+#+ * TextureSlot|MaterialTextureSlot.normal_map_space -> normal_map_space: enum "NO DESCRIPTION"
+#+ * TextureSlot|MaterialTextureSlot.object -> object: pointer "Object to use for mapping with Object texture coordinates"
+#+ * TextureSlot|MaterialTextureSlot.raymir_factor -> raymir_factor: float "Amount texture affects ray mirror"
+#TextureSlot|MaterialTextureSlot.reflection_color_factor -> reflection_color_factor: float "Amount texture affects color of out-scattered light"
+#+ * TextureSlot|MaterialTextureSlot.reflection_factor -> reflection_factor: float "Amount texture affects brightness of out-scattered light"
+#+ * TextureSlot|MaterialTextureSlot.scattering_factor -> scattering_factor: float "Amount texture affects scattering"
+#TextureSlot|MaterialTextureSlot.specular_color_factor -> specular_color_factor: float "Amount texture affects specular color"
+#+ * TextureSlot|MaterialTextureSlot.specular_factor -> specular_factor: float "Amount texture affects specular reflectivity"
+#TextureSlot|MaterialTextureSlot.texture_coords -> texture_coords: enum "NO DESCRIPTION"
+#+ * TextureSlot|MaterialTextureSlot.translucency_factor -> translucency_factor: float "Amount texture affects translucency"
+#TextureSlot|MaterialTextureSlot.transmission_color_factor -> transmission_color_factor: float "Amount texture affects result color after light has been scattered/absorbed"
+#+ * TextureSlot|MaterialTextureSlot.use -> use: boolean "Enable this material texture slot"
+#TextureSlot|MaterialTextureSlot.use_from_dupli -> use_from_dupli: boolean "Duplis instanced from verts, faces or particles, inherit texture coordinate from their parent"
+#TextureSlot|MaterialTextureSlot.use_from_original -> use_from_original: boolean "Duplis derive their object coordinates from the original objects transformation"
+#TextureSlot|MaterialTextureSlot.use_map_alpha -> use_map_alpha: boolean "Causes the texture to affect the alpha value"
+#TextureSlot|MaterialTextureSlot.use_map_ambient -> use_map_ambient: boolean "Causes the texture to affect the value of ambient"
+#TextureSlot|MaterialTextureSlot.use_map_color_diffuse -> use_map_color_diffuse: boolean "Causes the texture to affect basic color of the material"
+#TextureSlot|MaterialTextureSlot.use_map_color_emission -> use_map_color_emission: boolean "Causes the texture to affect the color of emission"
+#TextureSlot|MaterialTextureSlot.use_map_color_reflection -> use_map_color_reflection: boolean "Causes the texture to affect the color of scattered light"
+#TextureSlot|MaterialTextureSlot.use_map_color_spec -> use_map_color_spec: boolean "Causes the texture to affect the specularity color"
+#TextureSlot|MaterialTextureSlot.use_map_color_transmission -> use_map_color_transmission: boolean "Causes the texture to affect the result color after other light has been scattered/absorbed"
+#TextureSlot|MaterialTextureSlot.use_map_density -> use_map_density: boolean "Causes the texture to affect the volumes density"
+#TextureSlot|MaterialTextureSlot.use_map_diffuse -> use_map_diffuse: boolean "Causes the texture to affect the value of the materials diffuse reflectivity"
+#TextureSlot|MaterialTextureSlot.use_map_displacement -> use_map_displacement: boolean "Let the texture displace the surface"
+#TextureSlot|MaterialTextureSlot.use_map_emission -> use_map_emission: boolean "Causes the texture to affect the volumes emission"
+#TextureSlot|MaterialTextureSlot.use_map_emit -> use_map_emit: boolean "Causes the texture to affect the emit value"
+#TextureSlot|MaterialTextureSlot.use_map_hardness -> use_map_hardness: boolean "Causes the texture to affect the hardness value"
+#TextureSlot|MaterialTextureSlot.use_map_mirror -> use_map_mirror: boolean "Causes the texture to affect the mirror color"
+#TextureSlot|MaterialTextureSlot.use_map_normal -> use_map_normal: boolean "Causes the texture to affect the rendered normal"
+#TextureSlot|MaterialTextureSlot.use_map_raymir -> use_map_raymir: boolean "Causes the texture to affect the ray-mirror value"
+#TextureSlot|MaterialTextureSlot.use_map_reflect -> use_map_reflect: boolean "Causes the texture to affect the reflected lights brightness"
+#TextureSlot|MaterialTextureSlot.use_map_scatter -> use_map_scatter: boolean "Causes the texture to affect the volumes scattering"
+#TextureSlot|MaterialTextureSlot.use_map_specular -> use_map_specular: boolean "Causes the texture to affect the value of specular reflectivity"
+#TextureSlot|MaterialTextureSlot.use_map_translucency -> use_map_translucency: boolean "Causes the texture to affect the translucency value"
+#TextureSlot|MaterialTextureSlot.use_map_warp -> use_map_warp: boolean "Let the texture warp texture coordinates of next channels"
+#TextureSlot|MaterialTextureSlot.use_old_bump -> use_old_bump: boolean "Use old bump mapping (backwards compatibility option)"
+#+ * TextureSlot|MaterialTextureSlot.uv_layer -> uv_layer: string "UV layer to use for mapping with UV texture coordinates"
+#+ * TextureSlot|MaterialTextureSlot.warp_factor -> warp_factor: float "Amount texture affects texture coordinates of next channels"
+#+ * TextureSlot|WorldTextureSlot.blend_factor -> blend_factor: float "Amount texture affects color progression of the background"
+#+ * TextureSlot|WorldTextureSlot.horizon_factor -> horizon_factor: float "Amount texture affects color of the horizon"
+#+ * TextureSlot|WorldTextureSlot.object -> object: pointer "Object to use for mapping with Object texture coordinates"
+#TextureSlot|WorldTextureSlot.texture_coords -> texture_coords: enum "Texture coordinates used to map the texture onto the background"
+#TextureSlot|WorldTextureSlot.use_map_blend -> use_map_blend: boolean "Affect the color progression of the background"
+#TextureSlot|WorldTextureSlot.use_map_horizon -> use_map_horizon: boolean "Affect the color of the horizon"
+#TextureSlot|WorldTextureSlot.use_map_zenith_down -> use_map_zenith_down: boolean "Affect the color of the zenith below"
+#TextureSlot|WorldTextureSlot.use_map_zenith_up -> use_map_zenith_up: boolean "Affect the color of the zenith above"
+#+ * TextureSlot|WorldTextureSlot.zenith_down_factor -> zenith_down_factor: float "Amount texture affects color of the zenith below"
+#+ * TextureSlot|WorldTextureSlot.zenith_up_factor -> zenith_up_factor: float "Amount texture affects color of the zenith above"
+#+ * Theme.bone_color_sets -> bone_color_sets: collection, "(read-only)"
+#+ * Theme.console -> console: pointer, "(read-only)"
+#+ * Theme.dopesheet_editor -> dopesheet_editor: pointer, "(read-only)"
+#+ * Theme.file_browser -> file_browser: pointer, "(read-only)"
+#+ * Theme.graph_editor -> graph_editor: pointer, "(read-only)"
+#+ * Theme.image_editor -> image_editor: pointer, "(read-only)"
+#+ * Theme.info -> info: pointer, "(read-only)"
+#+ * Theme.logic_editor -> logic_editor: pointer, "(read-only)"
+#+ * Theme.name -> name: string "Name of the theme"
+#+ * Theme.nla_editor -> nla_editor: pointer, "(read-only)"
+#+ * Theme.node_editor -> node_editor: pointer, "(read-only)"
+#+ * Theme.outliner -> outliner: pointer, "(read-only)"
+#+ * Theme.properties -> properties: pointer, "(read-only)"
+#+ * Theme.sequence_editor -> sequence_editor: pointer, "(read-only)"
+#+ * Theme.text_editor -> text_editor: pointer, "(read-only)"
+#+ * Theme.theme_area -> theme_area: enum "NO DESCRIPTION"
+#+ * Theme.timeline -> timeline: pointer, "(read-only)"
+#+ * Theme.user_interface -> user_interface: pointer, "(read-only)"
+#+ * Theme.user_preferences -> user_preferences: pointer, "(read-only)"
+#+ * Theme.view_3d -> view_3d: pointer, "(read-only)"
+#+ * ThemeAudioWindow.back -> back: float[3] "NO DESCRIPTION"
+#+ * ThemeAudioWindow.button -> button: float[3] "NO DESCRIPTION"
+#+ * ThemeAudioWindow.button_text -> button_text: float[3] "NO DESCRIPTION"
+#+ * ThemeAudioWindow.button_text_hi -> button_text_hi: float[3] "NO DESCRIPTION"
+#+ * ThemeAudioWindow.button_title -> button_title: float[3] "NO DESCRIPTION"
+#+ * ThemeAudioWindow.frame_current -> frame_current: float[3] "NO DESCRIPTION"
+#+ * ThemeAudioWindow.grid -> grid: float[3] "NO DESCRIPTION"
+#+ * ThemeAudioWindow.header -> header: float[3] "NO DESCRIPTION"
+#+ * ThemeAudioWindow.header_text -> header_text: float[3] "NO DESCRIPTION"
+#+ * ThemeAudioWindow.header_text_hi -> header_text_hi: float[3] "NO DESCRIPTION"
+#+ * ThemeAudioWindow.text -> text: float[3] "NO DESCRIPTION"
+#+ * ThemeAudioWindow.text_hi -> text_hi: float[3] "NO DESCRIPTION"
+#+ * ThemeAudioWindow.title -> title: float[3] "NO DESCRIPTION"
+#+ * ThemeAudioWindow.window_sliders -> window_sliders: float[3] "NO DESCRIPTION"
+#+ * ThemeBoneColorSet.active -> active: float[3] "Color used for active bones"
+#+ * ThemeBoneColorSet.normal -> normal: float[3] "Color used for the surface of bones"
+#+ * ThemeBoneColorSet.select -> select: float[3] "Color used for selected bones"
+#ThemeBoneColorSet.show_colored_constraints -> show_colored_constraints: boolean "Allow the use of colors indicating constraints/keyed status"
+#+ * ThemeConsole.back -> back: float[3] "NO DESCRIPTION"
+#+ * ThemeConsole.button -> button: float[3] "NO DESCRIPTION"
+#+ * ThemeConsole.button_text -> button_text: float[3] "NO DESCRIPTION"
+#+ * ThemeConsole.button_text_hi -> button_text_hi: float[3] "NO DESCRIPTION"
+#+ * ThemeConsole.button_title -> button_title: float[3] "NO DESCRIPTION"
+#+ * ThemeConsole.cursor -> cursor: float[3] "NO DESCRIPTION"
+#+ * ThemeConsole.header -> header: float[3] "NO DESCRIPTION"
+#+ * ThemeConsole.header_text -> header_text: float[3] "NO DESCRIPTION"
+#+ * ThemeConsole.header_text_hi -> header_text_hi: float[3] "NO DESCRIPTION"
+#+ * ThemeConsole.line_error -> line_error: float[3] "NO DESCRIPTION"
+#+ * ThemeConsole.line_info -> line_info: float[3] "NO DESCRIPTION"
+#+ * ThemeConsole.line_input -> line_input: float[3] "NO DESCRIPTION"
+#+ * ThemeConsole.line_output -> line_output: float[3] "NO DESCRIPTION"
+#+ * ThemeConsole.text -> text: float[3] "NO DESCRIPTION"
+#+ * ThemeConsole.text_hi -> text_hi: float[3] "NO DESCRIPTION"
+#+ * ThemeConsole.title -> title: float[3] "NO DESCRIPTION"
+#+ * ThemeDopeSheet.active_channels_group -> active_channels_group: float[3] "NO DESCRIPTION"
+#+ * ThemeDopeSheet.back -> back: float[3] "NO DESCRIPTION"
+#+ * ThemeDopeSheet.button -> button: float[3] "NO DESCRIPTION"
+#+ * ThemeDopeSheet.button_text -> button_text: float[3] "NO DESCRIPTION"
+#+ * ThemeDopeSheet.button_text_hi -> button_text_hi: float[3] "NO DESCRIPTION"
+#+ * ThemeDopeSheet.button_title -> button_title: float[3] "NO DESCRIPTION"
+#+ * ThemeDopeSheet.channel_group -> channel_group: float[3] "NO DESCRIPTION"
+#+ * ThemeDopeSheet.channels -> channels: float[3] "NO DESCRIPTION"
+#+ * ThemeDopeSheet.channels_selected -> channels_selected: float[3] "NO DESCRIPTION"
+#+ * ThemeDopeSheet.dopesheet_channel -> dopesheet_channel: float[3] "NO DESCRIPTION"
+#+ * ThemeDopeSheet.dopesheet_subchannel -> dopesheet_subchannel: float[3] "NO DESCRIPTION"
+#+ * ThemeDopeSheet.frame_current -> frame_current: float[3] "NO DESCRIPTION"
+#+ * ThemeDopeSheet.grid -> grid: float[3] "NO DESCRIPTION"
+#+ * ThemeDopeSheet.header -> header: float[3] "NO DESCRIPTION"
+#+ * ThemeDopeSheet.header_text -> header_text: float[3] "NO DESCRIPTION"
+#+ * ThemeDopeSheet.header_text_hi -> header_text_hi: float[3] "NO DESCRIPTION"
+#+ * ThemeDopeSheet.list -> list: float[3] "NO DESCRIPTION"
+#+ * ThemeDopeSheet.list_text -> list_text: float[3] "NO DESCRIPTION"
+#+ * ThemeDopeSheet.list_text_hi -> list_text_hi: float[3] "NO DESCRIPTION"
+#+ * ThemeDopeSheet.list_title -> list_title: float[3] "NO DESCRIPTION"
+#+ * ThemeDopeSheet.long_key -> long_key: float[3] "NO DESCRIPTION"
+#+ * ThemeDopeSheet.long_key_selected -> long_key_selected: float[3] "NO DESCRIPTION"
+#+ * ThemeDopeSheet.text -> text: float[3] "NO DESCRIPTION"
+#+ * ThemeDopeSheet.text_hi -> text_hi: float[3] "NO DESCRIPTION"
+#+ * ThemeDopeSheet.title -> title: float[3] "NO DESCRIPTION"
+#+ * ThemeDopeSheet.value_sliders -> value_sliders: float[3] "NO DESCRIPTION"
+#+ * ThemeDopeSheet.view_sliders -> view_sliders: float[3] "NO DESCRIPTION"
+#+ * ThemeFileBrowser.active_file -> active_file: float[3] "NO DESCRIPTION"
+#+ * ThemeFileBrowser.active_file_text -> active_file_text: float[3] "NO DESCRIPTION"
+#+ * ThemeFileBrowser.back -> back: float[3] "NO DESCRIPTION"
+#+ * ThemeFileBrowser.button -> button: float[3] "NO DESCRIPTION"
+#+ * ThemeFileBrowser.button_text -> button_text: float[3] "NO DESCRIPTION"
+#+ * ThemeFileBrowser.button_text_hi -> button_text_hi: float[3] "NO DESCRIPTION"
+#+ * ThemeFileBrowser.button_title -> button_title: float[3] "NO DESCRIPTION"
+#+ * ThemeFileBrowser.header -> header: float[3] "NO DESCRIPTION"
+#+ * ThemeFileBrowser.header_text -> header_text: float[3] "NO DESCRIPTION"
+#+ * ThemeFileBrowser.header_text_hi -> header_text_hi: float[3] "NO DESCRIPTION"
+#+ * ThemeFileBrowser.list -> list: float[3] "NO DESCRIPTION"
+#+ * ThemeFileBrowser.list_text -> list_text: float[3] "NO DESCRIPTION"
+#+ * ThemeFileBrowser.list_text_hi -> list_text_hi: float[3] "NO DESCRIPTION"
+#+ * ThemeFileBrowser.list_title -> list_title: float[3] "NO DESCRIPTION"
+#+ * ThemeFileBrowser.scroll_handle -> scroll_handle: float[3] "NO DESCRIPTION"
+#+ * ThemeFileBrowser.scrollbar -> scrollbar: float[3] "NO DESCRIPTION"
+#+ * ThemeFileBrowser.selected_file -> selected_file: float[3] "NO DESCRIPTION"
+#+ * ThemeFileBrowser.text -> text: float[3] "NO DESCRIPTION"
+#+ * ThemeFileBrowser.text_hi -> text_hi: float[3] "NO DESCRIPTION"
+#+ * ThemeFileBrowser.tiles -> tiles: float[3] "NO DESCRIPTION"
+#+ * ThemeFileBrowser.title -> title: float[3] "NO DESCRIPTION"
+#+ * ThemeFontStyle.font_kerning_style -> font_kerning_style: enum "Which style to use for font kerning"
+#+ * ThemeFontStyle.points -> points: int "NO DESCRIPTION"
+#+ * ThemeFontStyle.shadow -> shadow: int "Shadow size in pixels (0, 3 and 5 supported)"
+#ThemeFontStyle.shadow_offset_x -> shadow_offset_x: int "Shadow offset in pixels"
+#ThemeFontStyle.shadow_offset_y -> shadow_offset_y: int "Shadow offset in pixels"
+#+ * ThemeFontStyle.shadowalpha -> shadowalpha: float "NO DESCRIPTION"
+#+ * ThemeFontStyle.shadowcolor -> shadowcolor: float "Shadow color in grey value"
+#+ * ThemeGraphEditor.active_channels_group -> active_channels_group: float[3] "NO DESCRIPTION"
+#+ * ThemeGraphEditor.back -> back: float[3] "NO DESCRIPTION"
+#+ * ThemeGraphEditor.button -> button: float[3] "NO DESCRIPTION"
+#+ * ThemeGraphEditor.button_text -> button_text: float[3] "NO DESCRIPTION"
+#+ * ThemeGraphEditor.button_text_hi -> button_text_hi: float[3] "NO DESCRIPTION"
+#+ * ThemeGraphEditor.button_title -> button_title: float[3] "NO DESCRIPTION"
+#+ * ThemeGraphEditor.channel_group -> channel_group: float[3] "NO DESCRIPTION"
+#+ * ThemeGraphEditor.channels_region -> channels_region: float[3] "NO DESCRIPTION"
+#+ * ThemeGraphEditor.dopesheet_channel -> dopesheet_channel: float[3] "NO DESCRIPTION"
+#+ * ThemeGraphEditor.dopesheet_subchannel -> dopesheet_subchannel: float[3] "NO DESCRIPTION"
+#+ * ThemeGraphEditor.frame_current -> frame_current: float[3] "NO DESCRIPTION"
+#+ * ThemeGraphEditor.grid -> grid: float[3] "NO DESCRIPTION"
+#+ * ThemeGraphEditor.handle_align -> handle_align: float[3] "NO DESCRIPTION"
+#+ * ThemeGraphEditor.handle_auto -> handle_auto: float[3] "NO DESCRIPTION"
+#+ * ThemeGraphEditor.handle_free -> handle_free: float[3] "NO DESCRIPTION"
+#+ * ThemeGraphEditor.handle_sel_align -> handle_sel_align: float[3] "NO DESCRIPTION"
+#+ * ThemeGraphEditor.handle_sel_auto -> handle_sel_auto: float[3] "NO DESCRIPTION"
+#+ * ThemeGraphEditor.handle_sel_free -> handle_sel_free: float[3] "NO DESCRIPTION"
+#+ * ThemeGraphEditor.handle_sel_vect -> handle_sel_vect: float[3] "NO DESCRIPTION"
+#+ * ThemeGraphEditor.handle_vect -> handle_vect: float[3] "NO DESCRIPTION"
+#+ * ThemeGraphEditor.handle_vertex -> handle_vertex: float[3] "NO DESCRIPTION"
+#+ * ThemeGraphEditor.handle_vertex_select -> handle_vertex_select: float[3] "NO DESCRIPTION"
+#+ * ThemeGraphEditor.handle_vertex_size -> handle_vertex_size: int "NO DESCRIPTION"
+#+ * ThemeGraphEditor.header -> header: float[3] "NO DESCRIPTION"
+#+ * ThemeGraphEditor.header_text -> header_text: float[3] "NO DESCRIPTION"
+#+ * ThemeGraphEditor.header_text_hi -> header_text_hi: float[3] "NO DESCRIPTION"
+#+ * ThemeGraphEditor.lastsel_point -> lastsel_point: float[3] "NO DESCRIPTION"
+#+ * ThemeGraphEditor.list -> list: float[3] "NO DESCRIPTION"
+#+ * ThemeGraphEditor.list_text -> list_text: float[3] "NO DESCRIPTION"
+#+ * ThemeGraphEditor.list_text_hi -> list_text_hi: float[3] "NO DESCRIPTION"
+#+ * ThemeGraphEditor.list_title -> list_title: float[3] "NO DESCRIPTION"
+#+ * ThemeGraphEditor.panel -> panel: float[3] "NO DESCRIPTION"
+#+ * ThemeGraphEditor.text -> text: float[3] "NO DESCRIPTION"
+#+ * ThemeGraphEditor.text_hi -> text_hi: float[3] "NO DESCRIPTION"
+#+ * ThemeGraphEditor.title -> title: float[3] "NO DESCRIPTION"
+#+ * ThemeGraphEditor.vertex -> vertex: float[3] "NO DESCRIPTION"
+#+ * ThemeGraphEditor.vertex_select -> vertex_select: float[3] "NO DESCRIPTION"
+#+ * ThemeGraphEditor.vertex_size -> vertex_size: int "NO DESCRIPTION"
+#+ * ThemeGraphEditor.window_sliders -> window_sliders: float[3] "NO DESCRIPTION"
+#+ * ThemeImageEditor.back -> back: float[3] "NO DESCRIPTION"
+#+ * ThemeImageEditor.button -> button: float[3] "NO DESCRIPTION"
+#+ * ThemeImageEditor.button_text -> button_text: float[3] "NO DESCRIPTION"
+#+ * ThemeImageEditor.button_text_hi -> button_text_hi: float[3] "NO DESCRIPTION"
+#+ * ThemeImageEditor.button_title -> button_title: float[3] "NO DESCRIPTION"
+#+ * ThemeImageEditor.editmesh_active -> editmesh_active: float[4] "NO DESCRIPTION"
+#+ * ThemeImageEditor.face -> face: float[4] "NO DESCRIPTION"
+#+ * ThemeImageEditor.face_dot -> face_dot: float[3] "NO DESCRIPTION"
+#+ * ThemeImageEditor.face_select -> face_select: float[4] "NO DESCRIPTION"
+#+ * ThemeImageEditor.facedot_size -> facedot_size: int "NO DESCRIPTION"
+#+ * ThemeImageEditor.header -> header: float[3] "NO DESCRIPTION"
+#+ * ThemeImageEditor.header_text -> header_text: float[3] "NO DESCRIPTION"
+#+ * ThemeImageEditor.header_text_hi -> header_text_hi: float[3] "NO DESCRIPTION"
+#+ * ThemeImageEditor.scope_back -> scope_back: float[4] "NO DESCRIPTION"
+#+ * ThemeImageEditor.text -> text: float[3] "NO DESCRIPTION"
+#+ * ThemeImageEditor.text_hi -> text_hi: float[3] "NO DESCRIPTION"
+#+ * ThemeImageEditor.title -> title: float[3] "NO DESCRIPTION"
+#+ * ThemeImageEditor.vertex -> vertex: float[3] "NO DESCRIPTION"
+#+ * ThemeImageEditor.vertex_select -> vertex_select: float[3] "NO DESCRIPTION"
+#+ * ThemeImageEditor.vertex_size -> vertex_size: int "NO DESCRIPTION"
+#+ * ThemeInfo.back -> back: float[3] "NO DESCRIPTION"
+#+ * ThemeInfo.button -> button: float[3] "NO DESCRIPTION"
+#+ * ThemeInfo.button_text -> button_text: float[3] "NO DESCRIPTION"
+#+ * ThemeInfo.button_text_hi -> button_text_hi: float[3] "NO DESCRIPTION"
+#+ * ThemeInfo.button_title -> button_title: float[3] "NO DESCRIPTION"
+#+ * ThemeInfo.header -> header: float[3] "NO DESCRIPTION"
+#+ * ThemeInfo.header_text -> header_text: float[3] "NO DESCRIPTION"
+#+ * ThemeInfo.header_text_hi -> header_text_hi: float[3] "NO DESCRIPTION"
+#+ * ThemeInfo.text -> text: float[3] "NO DESCRIPTION"
+#+ * ThemeInfo.text_hi -> text_hi: float[3] "NO DESCRIPTION"
+#+ * ThemeInfo.title -> title: float[3] "NO DESCRIPTION"
+#+ * ThemeLogicEditor.back -> back: float[3] "NO DESCRIPTION"
+#+ * ThemeLogicEditor.button -> button: float[3] "NO DESCRIPTION"
+#+ * ThemeLogicEditor.button_text -> button_text: float[3] "NO DESCRIPTION"
+#+ * ThemeLogicEditor.button_text_hi -> button_text_hi: float[3] "NO DESCRIPTION"
+#+ * ThemeLogicEditor.button_title -> button_title: float[3] "NO DESCRIPTION"
+#+ * ThemeLogicEditor.header -> header: float[3] "NO DESCRIPTION"
+#+ * ThemeLogicEditor.header_text -> header_text: float[3] "NO DESCRIPTION"
+#+ * ThemeLogicEditor.header_text_hi -> header_text_hi: float[3] "NO DESCRIPTION"
+#+ * ThemeLogicEditor.panel -> panel: float[3] "NO DESCRIPTION"
+#+ * ThemeLogicEditor.text -> text: float[3] "NO DESCRIPTION"
+#+ * ThemeLogicEditor.text_hi -> text_hi: float[3] "NO DESCRIPTION"
+#+ * ThemeLogicEditor.title -> title: float[3] "NO DESCRIPTION"
+#+ * ThemeNLAEditor.back -> back: float[3] "NO DESCRIPTION"
+#+ * ThemeNLAEditor.bars -> bars: float[3] "NO DESCRIPTION"
+#+ * ThemeNLAEditor.bars_selected -> bars_selected: float[3] "NO DESCRIPTION"
+#+ * ThemeNLAEditor.button -> button: float[3] "NO DESCRIPTION"
+#+ * ThemeNLAEditor.button_text -> button_text: float[3] "NO DESCRIPTION"
+#+ * ThemeNLAEditor.button_text_hi -> button_text_hi: float[3] "NO DESCRIPTION"
+#+ * ThemeNLAEditor.button_title -> button_title: float[3] "NO DESCRIPTION"
+#+ * ThemeNLAEditor.frame_current -> frame_current: float[3] "NO DESCRIPTION"
+#+ * ThemeNLAEditor.grid -> grid: float[3] "NO DESCRIPTION"
+#+ * ThemeNLAEditor.header -> header: float[3] "NO DESCRIPTION"
+#+ * ThemeNLAEditor.header_text -> header_text: float[3] "NO DESCRIPTION"
+#+ * ThemeNLAEditor.header_text_hi -> header_text_hi: float[3] "NO DESCRIPTION"
+#+ * ThemeNLAEditor.list -> list: float[3] "NO DESCRIPTION"
+#+ * ThemeNLAEditor.list_text -> list_text: float[3] "NO DESCRIPTION"
+#+ * ThemeNLAEditor.list_text_hi -> list_text_hi: float[3] "NO DESCRIPTION"
+#+ * ThemeNLAEditor.list_title -> list_title: float[3] "NO DESCRIPTION"
+#+ * ThemeNLAEditor.strips -> strips: float[3] "NO DESCRIPTION"
+#+ * ThemeNLAEditor.strips_selected -> strips_selected: float[3] "NO DESCRIPTION"
+#+ * ThemeNLAEditor.text -> text: float[3] "NO DESCRIPTION"
+#+ * ThemeNLAEditor.text_hi -> text_hi: float[3] "NO DESCRIPTION"
+#+ * ThemeNLAEditor.title -> title: float[3] "NO DESCRIPTION"
+#+ * ThemeNLAEditor.view_sliders -> view_sliders: float[3] "NO DESCRIPTION"
+#+ * ThemeNodeEditor.back -> back: float[3] "NO DESCRIPTION"
+#+ * ThemeNodeEditor.button -> button: float[3] "NO DESCRIPTION"
+#+ * ThemeNodeEditor.button_text -> button_text: float[3] "NO DESCRIPTION"
+#+ * ThemeNodeEditor.button_text_hi -> button_text_hi: float[3] "NO DESCRIPTION"
+#+ * ThemeNodeEditor.button_title -> button_title: float[3] "NO DESCRIPTION"
+#+ * ThemeNodeEditor.converter_node -> converter_node: float[3] "NO DESCRIPTION"
+#+ * ThemeNodeEditor.group_node -> group_node: float[3] "NO DESCRIPTION"
+#+ * ThemeNodeEditor.header -> header: float[3] "NO DESCRIPTION"
+#+ * ThemeNodeEditor.header_text -> header_text: float[3] "NO DESCRIPTION"
+#+ * ThemeNodeEditor.header_text_hi -> header_text_hi: float[3] "NO DESCRIPTION"
+#+ * ThemeNodeEditor.in_out_node -> in_out_node: float[3] "NO DESCRIPTION"
+#+ * ThemeNodeEditor.list -> list: float[3] "NO DESCRIPTION"
+#+ * ThemeNodeEditor.list_text -> list_text: float[3] "NO DESCRIPTION"
+#+ * ThemeNodeEditor.list_text_hi -> list_text_hi: float[3] "NO DESCRIPTION"
+#+ * ThemeNodeEditor.list_title -> list_title: float[3] "NO DESCRIPTION"
+#+ * ThemeNodeEditor.node_backdrop -> node_backdrop: float[4] "NO DESCRIPTION"
+#+ * ThemeNodeEditor.operator_node -> operator_node: float[3] "NO DESCRIPTION"
+#+ * ThemeNodeEditor.selected_text -> selected_text: float[3] "NO DESCRIPTION"
+#+ * ThemeNodeEditor.text -> text: float[3] "NO DESCRIPTION"
+#+ * ThemeNodeEditor.text_hi -> text_hi: float[3] "NO DESCRIPTION"
+#+ * ThemeNodeEditor.title -> title: float[3] "NO DESCRIPTION"
+#ThemeNodeEditor.wire -> wire: float[3] "NO DESCRIPTION"
+#+ * ThemeNodeEditor.wire_select -> wire_select: float[3] "NO DESCRIPTION"
+#+ * ThemeOutliner.back -> back: float[3] "NO DESCRIPTION"
+#+ * ThemeOutliner.button -> button: float[3] "NO DESCRIPTION"
+#+ * ThemeOutliner.button_text -> button_text: float[3] "NO DESCRIPTION"
+#+ * ThemeOutliner.button_text_hi -> button_text_hi: float[3] "NO DESCRIPTION"
+#+ * ThemeOutliner.button_title -> button_title: float[3] "NO DESCRIPTION"
+#+ * ThemeOutliner.header -> header: float[3] "NO DESCRIPTION"
+#+ * ThemeOutliner.header_text -> header_text: float[3] "NO DESCRIPTION"
+#+ * ThemeOutliner.header_text_hi -> header_text_hi: float[3] "NO DESCRIPTION"
+#+ * ThemeOutliner.text -> text: float[3] "NO DESCRIPTION"
+#+ * ThemeOutliner.text_hi -> text_hi: float[3] "NO DESCRIPTION"
+#+ * ThemeOutliner.title -> title: float[3] "NO DESCRIPTION"
+#+ * ThemeProperties.back -> back: float[3] "NO DESCRIPTION"
+#+ * ThemeProperties.button -> button: float[3] "NO DESCRIPTION"
+#+ * ThemeProperties.button_text -> button_text: float[3] "NO DESCRIPTION"
+#+ * ThemeProperties.button_text_hi -> button_text_hi: float[3] "NO DESCRIPTION"
+#+ * ThemeProperties.button_title -> button_title: float[3] "NO DESCRIPTION"
+#+ * ThemeProperties.header -> header: float[3] "NO DESCRIPTION"
+#+ * ThemeProperties.header_text -> header_text: float[3] "NO DESCRIPTION"
+#+ * ThemeProperties.header_text_hi -> header_text_hi: float[3] "NO DESCRIPTION"
+#+ * ThemeProperties.panel -> panel: float[3] "NO DESCRIPTION"
+#+ * ThemeProperties.text -> text: float[3] "NO DESCRIPTION"
+#+ * ThemeProperties.text_hi -> text_hi: float[3] "NO DESCRIPTION"
+#+ * ThemeProperties.title -> title: float[3] "NO DESCRIPTION"
+#+ * ThemeSequenceEditor.audio_strip -> audio_strip: float[3] "NO DESCRIPTION"
+#+ * ThemeSequenceEditor.back -> back: float[3] "NO DESCRIPTION"
+#+ * ThemeSequenceEditor.button -> button: float[3] "NO DESCRIPTION"
+#+ * ThemeSequenceEditor.button_text -> button_text: float[3] "NO DESCRIPTION"
+#+ * ThemeSequenceEditor.button_text_hi -> button_text_hi: float[3] "NO DESCRIPTION"
+#+ * ThemeSequenceEditor.button_title -> button_title: float[3] "NO DESCRIPTION"
+#+ * ThemeSequenceEditor.draw_action -> draw_action: float[3] "NO DESCRIPTION"
+#+ * ThemeSequenceEditor.effect_strip -> effect_strip: float[3] "NO DESCRIPTION"
+#+ * ThemeSequenceEditor.frame_current -> frame_current: float[3] "NO DESCRIPTION"
+#+ * ThemeSequenceEditor.grid -> grid: float[3] "NO DESCRIPTION"
+#+ * ThemeSequenceEditor.header -> header: float[3] "NO DESCRIPTION"
+#+ * ThemeSequenceEditor.header_text -> header_text: float[3] "NO DESCRIPTION"
+#+ * ThemeSequenceEditor.header_text_hi -> header_text_hi: float[3] "NO DESCRIPTION"
+#+ * ThemeSequenceEditor.image_strip -> image_strip: float[3] "NO DESCRIPTION"
+#+ * ThemeSequenceEditor.keyframe -> keyframe: float[3] "NO DESCRIPTION"
+#+ * ThemeSequenceEditor.meta_strip -> meta_strip: float[3] "NO DESCRIPTION"
+#+ * ThemeSequenceEditor.movie_strip -> movie_strip: float[3] "NO DESCRIPTION"
+#+ * ThemeSequenceEditor.plugin_strip -> plugin_strip: float[3] "NO DESCRIPTION"
+#+ * ThemeSequenceEditor.scene_strip -> scene_strip: float[3] "NO DESCRIPTION"
+#+ * ThemeSequenceEditor.text -> text: float[3] "NO DESCRIPTION"
+#+ * ThemeSequenceEditor.text_hi -> text_hi: float[3] "NO DESCRIPTION"
+#+ * ThemeSequenceEditor.title -> title: float[3] "NO DESCRIPTION"
+#+ * ThemeSequenceEditor.transition_strip -> transition_strip: float[3] "NO DESCRIPTION"
+#+ * ThemeSequenceEditor.window_sliders -> window_sliders: float[3] "NO DESCRIPTION"
+#ThemeStyle.group_label -> group_label: pointer, "(read-only)"
+#ThemeStyle.panel_title -> panel_title: pointer, "(read-only)"
+#+ * ThemeStyle.panelzoom -> panelzoom: float "Default zoom level for panel areas"
+#+ * ThemeStyle.widget -> widget: pointer, "(read-only)"
+#ThemeStyle.widget_label -> widget_label: pointer, "(read-only)"
+#+ * ThemeTextEditor.back -> back: float[3] "NO DESCRIPTION"
+#+ * ThemeTextEditor.button -> button: float[3] "NO DESCRIPTION"
+#+ * ThemeTextEditor.button_text -> button_text: float[3] "NO DESCRIPTION"
+#+ * ThemeTextEditor.button_text_hi -> button_text_hi: float[3] "NO DESCRIPTION"
+#+ * ThemeTextEditor.button_title -> button_title: float[3] "NO DESCRIPTION"
+#+ * ThemeTextEditor.cursor -> cursor: float[3] "NO DESCRIPTION"
+#+ * ThemeTextEditor.header -> header: float[3] "NO DESCRIPTION"
+#+ * ThemeTextEditor.header_text -> header_text: float[3] "NO DESCRIPTION"
+#+ * ThemeTextEditor.header_text_hi -> header_text_hi: float[3] "NO DESCRIPTION"
+#+ * ThemeTextEditor.line_numbers_background -> line_numbers_background: float[3] "NO DESCRIPTION"
+#+ * ThemeTextEditor.scroll_bar -> scroll_bar: float[3] "NO DESCRIPTION"
+#+ * ThemeTextEditor.selected_text -> selected_text: float[3] "NO DESCRIPTION"
+#+ * ThemeTextEditor.syntax_builtin -> syntax_builtin: float[3] "NO DESCRIPTION"
+#+ * ThemeTextEditor.syntax_comment -> syntax_comment: float[3] "NO DESCRIPTION"
+#+ * ThemeTextEditor.syntax_numbers -> syntax_numbers: float[3] "NO DESCRIPTION"
+#+ * ThemeTextEditor.syntax_special -> syntax_special: float[3] "NO DESCRIPTION"
+#+ * ThemeTextEditor.syntax_string -> syntax_string: float[3] "NO DESCRIPTION"
+#+ * ThemeTextEditor.text -> text: float[3] "NO DESCRIPTION"
+#+ * ThemeTextEditor.text_hi -> text_hi: float[3] "NO DESCRIPTION"
+#+ * ThemeTextEditor.title -> title: float[3] "NO DESCRIPTION"
+#+ * ThemeTimeline.back -> back: float[3] "NO DESCRIPTION"
+#+ * ThemeTimeline.button -> button: float[3] "NO DESCRIPTION"
+#+ * ThemeTimeline.button_text -> button_text: float[3] "NO DESCRIPTION"
+#+ * ThemeTimeline.button_text_hi -> button_text_hi: float[3] "NO DESCRIPTION"
+#+ * ThemeTimeline.button_title -> button_title: float[3] "NO DESCRIPTION"
+#+ * ThemeTimeline.frame_current -> frame_current: float[3] "NO DESCRIPTION"
+#+ * ThemeTimeline.grid -> grid: float[3] "NO DESCRIPTION"
+#+ * ThemeTimeline.header -> header: float[3] "NO DESCRIPTION"
+#+ * ThemeTimeline.header_text -> header_text: float[3] "NO DESCRIPTION"
+#+ * ThemeTimeline.header_text_hi -> header_text_hi: float[3] "NO DESCRIPTION"
+#+ * ThemeTimeline.text -> text: float[3] "NO DESCRIPTION"
+#+ * ThemeTimeline.text_hi -> text_hi: float[3] "NO DESCRIPTION"
+#+ * ThemeTimeline.title -> title: float[3] "NO DESCRIPTION"
+#+ * ThemeUserInterface.icon_file -> icon_file: string "NO DESCRIPTION"
+#+ * ThemeUserInterface.wcol_box -> wcol_box: pointer, "(read-only)"
+#+ * ThemeUserInterface.wcol_list_item -> wcol_list_item: pointer, "(read-only)"
+#+ * ThemeUserInterface.wcol_menu -> wcol_menu: pointer, "(read-only)"
+#+ * ThemeUserInterface.wcol_menu_back -> wcol_menu_back: pointer, "(read-only)"
+#+ * ThemeUserInterface.wcol_menu_item -> wcol_menu_item: pointer, "(read-only)"
+#+ * ThemeUserInterface.wcol_num -> wcol_num: pointer, "(read-only)"
+#+ * ThemeUserInterface.wcol_numslider -> wcol_numslider: pointer, "(read-only)"
+#+ * ThemeUserInterface.wcol_option -> wcol_option: pointer, "(read-only)"
+#+ * ThemeUserInterface.wcol_progress -> wcol_progress: pointer, "(read-only)"
+#+ * ThemeUserInterface.wcol_pulldown -> wcol_pulldown: pointer, "(read-only)"
+#+ * ThemeUserInterface.wcol_radio -> wcol_radio: pointer, "(read-only)"
+#+ * ThemeUserInterface.wcol_regular -> wcol_regular: pointer, "(read-only)"
+#+ * ThemeUserInterface.wcol_scroll -> wcol_scroll: pointer, "(read-only)"
+#+ * ThemeUserInterface.wcol_state -> wcol_state: pointer, "(read-only)"
+#+ * ThemeUserInterface.wcol_text -> wcol_text: pointer, "(read-only)"
+#+ * ThemeUserInterface.wcol_toggle -> wcol_toggle: pointer, "(read-only)"
+#+ * ThemeUserInterface.wcol_tool -> wcol_tool: pointer, "(read-only)"
+#+ * ThemeUserPreferences.back -> back: float[3] "NO DESCRIPTION"
+#+ * ThemeUserPreferences.button -> button: float[3] "NO DESCRIPTION"
+#+ * ThemeUserPreferences.button_text -> button_text: float[3] "NO DESCRIPTION"
+#+ * ThemeUserPreferences.button_text_hi -> button_text_hi: float[3] "NO DESCRIPTION"
+#+ * ThemeUserPreferences.button_title -> button_title: float[3] "NO DESCRIPTION"
+#+ * ThemeUserPreferences.header -> header: float[3] "NO DESCRIPTION"
+#+ * ThemeUserPreferences.header_text -> header_text: float[3] "NO DESCRIPTION"
+#+ * ThemeUserPreferences.header_text_hi -> header_text_hi: float[3] "NO DESCRIPTION"
+#+ * ThemeUserPreferences.text -> text: float[3] "NO DESCRIPTION"
+#+ * ThemeUserPreferences.text_hi -> text_hi: float[3] "NO DESCRIPTION"
+#+ * ThemeUserPreferences.title -> title: float[3] "NO DESCRIPTION"
+#+ * ThemeView3D.act_spline -> act_spline: float[3] "NO DESCRIPTION"
+#+ * ThemeView3D.back -> back: float[3] "NO DESCRIPTION"
+#+ * ThemeView3D.bone_pose -> bone_pose: float[3] "NO DESCRIPTION"
+#+ * ThemeView3D.bone_solid -> bone_solid: float[3] "NO DESCRIPTION"
+#+ * ThemeView3D.button -> button: float[3] "NO DESCRIPTION"
+#+ * ThemeView3D.button_text -> button_text: float[3] "NO DESCRIPTION"
+#+ * ThemeView3D.button_text_hi -> button_text_hi: float[3] "NO DESCRIPTION"
+#+ * ThemeView3D.button_title -> button_title: float[3] "NO DESCRIPTION"
+#+ * ThemeView3D.edge_crease -> edge_crease: float[3] "NO DESCRIPTION"
+#+ * ThemeView3D.edge_facesel -> edge_facesel: float[3] "NO DESCRIPTION"
+#+ * ThemeView3D.edge_seam -> edge_seam: float[3] "NO DESCRIPTION"
+#+ * ThemeView3D.edge_select -> edge_select: float[3] "NO DESCRIPTION"
+#+ * ThemeView3D.edge_sharp -> edge_sharp: float[3] "NO DESCRIPTION"
+#+ * ThemeView3D.editmesh_active -> editmesh_active: float[4] "NO DESCRIPTION"
+#+ * ThemeView3D.face -> face: float[4] "NO DESCRIPTION"
+#+ * ThemeView3D.face_dot -> face_dot: float[3] "NO DESCRIPTION"
+#+ * ThemeView3D.face_select -> face_select: float[4] "NO DESCRIPTION"
+#+ * ThemeView3D.facedot_size -> facedot_size: int "NO DESCRIPTION"
+#+ * ThemeView3D.frame_current -> frame_current: float[3] "NO DESCRIPTION"
+#+ * ThemeView3D.grid -> grid: float[3] "NO DESCRIPTION"
+#+ * ThemeView3D.handle_align -> handle_align: float[3] "NO DESCRIPTION"
+#+ * ThemeView3D.handle_auto -> handle_auto: float[3] "NO DESCRIPTION"
+#+ * ThemeView3D.handle_free -> handle_free: float[3] "NO DESCRIPTION"
+#+ * ThemeView3D.handle_sel_align -> handle_sel_align: float[3] "NO DESCRIPTION"
+#+ * ThemeView3D.handle_sel_auto -> handle_sel_auto: float[3] "NO DESCRIPTION"
+#+ * ThemeView3D.handle_sel_free -> handle_sel_free: float[3] "NO DESCRIPTION"
+#+ * ThemeView3D.handle_sel_vect -> handle_sel_vect: float[3] "NO DESCRIPTION"
+#+ * ThemeView3D.handle_vect -> handle_vect: float[3] "NO DESCRIPTION"
+#+ * ThemeView3D.header -> header: float[3] "NO DESCRIPTION"
+#+ * ThemeView3D.header_text -> header_text: float[3] "NO DESCRIPTION"
+#+ * ThemeView3D.header_text_hi -> header_text_hi: float[3] "NO DESCRIPTION"
+#+ * ThemeView3D.lamp -> lamp: float[4] "NO DESCRIPTION"
+#+ * ThemeView3D.lastsel_point -> lastsel_point: float[3] "NO DESCRIPTION"
+#+ * ThemeView3D.normal -> normal: float[3] "NO DESCRIPTION"
+#+ * ThemeView3D.nurb_sel_uline -> nurb_sel_uline: float[3] "NO DESCRIPTION"
+#+ * ThemeView3D.nurb_sel_vline -> nurb_sel_vline: float[3] "NO DESCRIPTION"
+#+ * ThemeView3D.nurb_uline -> nurb_uline: float[3] "NO DESCRIPTION"
+#+ * ThemeView3D.nurb_vline -> nurb_vline: float[3] "NO DESCRIPTION"
+#+ * ThemeView3D.object_active -> object_active: float[3] "NO DESCRIPTION"
+#+ * ThemeView3D.object_grouped -> object_grouped: float[3] "NO DESCRIPTION"
+#+ * ThemeView3D.object_grouped_active -> object_grouped_active: float[3] "NO DESCRIPTION"
+#+ * ThemeView3D.object_selected -> object_selected: float[3] "NO DESCRIPTION"
+#+ * ThemeView3D.panel -> panel: float[4] "NO DESCRIPTION"
+#+ * ThemeView3D.text -> text: float[3] "NO DESCRIPTION"
+#+ * ThemeView3D.text_hi -> text_hi: float[3] "NO DESCRIPTION"
+#+ * ThemeView3D.title -> title: float[3] "NO DESCRIPTION"
+#+ * ThemeView3D.transform -> transform: float[3] "NO DESCRIPTION"
+#+ * ThemeView3D.vertex -> vertex: float[3] "NO DESCRIPTION"
+#+ * ThemeView3D.vertex_normal -> vertex_normal: float[3] "NO DESCRIPTION"
+#+ * ThemeView3D.vertex_select -> vertex_select: float[3] "NO DESCRIPTION"
+#+ * ThemeView3D.vertex_size -> vertex_size: int "NO DESCRIPTION"
+#+ * ThemeView3D.wire -> wire: float[3] "NO DESCRIPTION"
+#+ * ThemeWidgetColors.inner -> inner: float[4] "NO DESCRIPTION"
+#+ * ThemeWidgetColors.inner_sel -> inner_sel: float[4] "NO DESCRIPTION"
+#+ * ThemeWidgetColors.item -> item: float[4] "NO DESCRIPTION"
+#+ * ThemeWidgetColors.outline -> outline: float[3] "NO DESCRIPTION"
+#+ * ThemeWidgetColors.shadedown -> shadedown: int "NO DESCRIPTION"
+#+ * ThemeWidgetColors.shadetop -> shadetop: int "NO DESCRIPTION"
+#ThemeWidgetColors.show_shaded -> show_shaded: boolean "NO DESCRIPTION"
+#+ * ThemeWidgetColors.text -> text: float[3] "NO DESCRIPTION"
+#+ * ThemeWidgetColors.text_sel -> text_sel: float[3] "NO DESCRIPTION"
+#+ * ThemeWidgetStateColors.blend -> blend: float "NO DESCRIPTION"
+#+ * ThemeWidgetStateColors.inner_anim -> inner_anim: float[3] "NO DESCRIPTION"
+#+ * ThemeWidgetStateColors.inner_anim_sel -> inner_anim_sel: float[3] "NO DESCRIPTION"
+#+ * ThemeWidgetStateColors.inner_driven -> inner_driven: float[3] "NO DESCRIPTION"
+#+ * ThemeWidgetStateColors.inner_driven_sel -> inner_driven_sel: float[3] "NO DESCRIPTION"
+#+ * ThemeWidgetStateColors.inner_key -> inner_key: float[3] "NO DESCRIPTION"
+#+ * ThemeWidgetStateColors.inner_key_sel -> inner_key_sel: float[3] "NO DESCRIPTION"
+#+ * TimelineMarker.camera -> camera: pointer "Camera this timeline sets to active"
+#+ * TimelineMarker.frame -> frame: int "The frame on which the timeline marker appears"
+#+ * TimelineMarker.name -> name: string "NO DESCRIPTION"
+#+ * TimelineMarker.select -> select: boolean "Marker selection state"
+#ToolSettings.auto_keying_mode -> auto_keying_mode: enum "Mode of automatic keyframe insertion for Objects and Bones"
+#+ * ToolSettings.edge_path_mode -> edge_path_mode: enum "The edge flag to tag when selecting the shortest path"
+#+ * ToolSettings.etch_adaptive_limit -> etch_adaptive_limit: float "Number of bones in the subdivided stroke"
+#+ * ToolSettings.etch_convert_mode -> etch_convert_mode: enum "Method used to convert stroke to bones"
+#+ * ToolSettings.etch_length_limit -> etch_length_limit: float "Number of bones in the subdivided stroke"
+#+ * ToolSettings.etch_number -> etch_number: string "DOC BROKEN"
+#+ * ToolSettings.etch_roll_mode -> etch_roll_mode: enum "Method used to adjust the roll of bones when retargeting"
+#+ * ToolSettings.etch_side -> etch_side: string "DOC BROKEN"
+#+ * ToolSettings.etch_subdivision_number -> etch_subdivision_number: int "Number of bones in the subdivided stroke"
+#+ * ToolSettings.etch_template -> etch_template: pointer "Template armature that will be retargeted to the stroke"
+#+ * ToolSettings.image_paint -> image_paint: pointer, "(read-only)"
+#ToolSettings.mesh_select_mode -> mesh_select_mode: boolean[3] "Which mesh elements selection works on"
+#+ * ToolSettings.normal_size -> normal_size: float "Display size for normals in the 3D view"
+#+ * ToolSettings.particle_edit -> particle_edit: pointer, "(read-only)"
+#ToolSettings.proportional_edit -> proportional_edit: enum "Proportional editing mode"
+#ToolSettings.proportional_edit_falloff -> proportional_edit_falloff: enum "Falloff type for proportional editing mode"
+#+ * ToolSettings.sculpt -> sculpt: pointer, "(read-only)"
+#+ * ToolSettings.sculpt_paint_use_unified_size -> sculpt_paint_use_unified_size: boolean "Instead of per brush radius, the radius is shared across brushes"
+#+ * ToolSettings.sculpt_paint_use_unified_strength -> sculpt_paint_use_unified_strength: boolean "Instead of per brush strength, the strength is shared across brushes"
+#ToolSettings.show_uv_local_view -> show_uv_local_view: boolean "Draw only faces with the currently displayed image assigned"
+#+ * ToolSettings.snap_element -> snap_element: enum "Type of element to snap to"
+#+ * ToolSettings.snap_target -> snap_target: enum "Which part to snap onto the target"
+#ToolSettings.use_auto_normalize -> use_auto_normalize: boolean "Ensure all bone-deforming vertex groups add up to 1.0 while weight painting"
+#ToolSettings.use_bone_sketching -> use_bone_sketching: boolean "DOC BROKEN"
+#ToolSettings.use_etch_autoname -> use_etch_autoname: boolean "DOC BROKEN"
+#ToolSettings.use_etch_overdraw -> use_etch_overdraw: boolean "DOC BROKEN"
+#ToolSettings.use_etch_quick -> use_etch_quick: boolean "DOC BROKEN"
+#ToolSettings.use_keyframe_insert_auto -> use_keyframe_insert_auto: boolean "Automatic keyframe insertion for Objects and Bones"
+#ToolSettings.use_mesh_automerge -> use_mesh_automerge: boolean "Automatically merge vertices moved to the same location"
+#ToolSettings.use_proportional_edit_objects -> use_proportional_edit_objects: boolean "Proportional editing object mode"
+#ToolSettings.use_record_with_nla -> use_record_with_nla: boolean "Add a new NLA Track + Strip for every loop/pass made over the animation to allow non-destructive tweaking"
+#ToolSettings.use_snap -> use_snap: boolean "Snap during transform"
+#ToolSettings.use_snap_align_rotation -> use_snap_align_rotation: boolean "Align rotation with the snapping target"
+#ToolSettings.use_snap_peel_object -> use_snap_peel_object: boolean "Consider objects as whole when finding volume center"
+#ToolSettings.use_snap_project -> use_snap_project: boolean "Project vertices on the surface of other objects"
+#ToolSettings.use_uv_select_sync -> use_uv_select_sync: boolean "Keep UV and edit mode mesh selection in sync"
+#ToolSettings.uv_select_mode -> uv_select_mode: enum "UV selection and display mode"
+#+ * ToolSettings.vertex_group_weight -> vertex_group_weight: float "Weight to assign in vertex groups"
+#+ * ToolSettings.vertex_paint -> vertex_paint: pointer, "(read-only)"
+#+ * ToolSettings.weight_paint -> weight_paint: pointer, "(read-only)"
+#+ * TransformOrientation.matrix -> matrix: float[9] "NO DESCRIPTION"
+#+ * TransformOrientation.name -> name: string "NO DESCRIPTION"
+#+ * UILayout.alignment -> alignment: enum "NO DESCRIPTION"
+#+ * UILayout.operator_context -> operator_context: enum "NO DESCRIPTION"
+#+ * UILayout.scale_x -> scale_x: float "Scale factor along the X for items in this (sub)layout."
+#+ * UILayout.scale_y -> scale_y: float "Scale factor along the Y for items in this (sub)layout."
+ + * UILayout.active -> show_active: boolean "NO DESCRIPTION"
+ + * UILayout.enabled -> show_enabled: boolean "When false, this (sub)layout is greyed out."
+#+ * UVProjector.object -> object: pointer "Object to use as projector transform"
+#UVTextures.active -> active: pointer "Active UV texture"
+#+ * UnitSettings.rotation_units -> rotation_units: enum "Unit to use for displaying/editing rotation values"
+#+ * UnitSettings.scale_length -> scale_length: float "Scale to use when converting between blender units and dimensions"
+#+ * UnitSettings.system -> system: enum "The unit system to use for button display"
+#+ * UnitSettings.use_separate -> use_separate: boolean "Display units in pairs"
+#+ * UserPreferences.active_section -> active_section: enum "Active section of the user preferences shown in the user interface"
+#+ * UserPreferences.addons -> addons: collection, "(read-only)"
+#+ * UserPreferences.edit -> edit: pointer, "(read-only) Settings for interacting with Blender data"
+#+ * UserPreferences.filepaths -> filepaths: pointer, "(read-only) Default paths for external files"
+#+ * UserPreferences.inputs -> inputs: pointer, "(read-only) Settings for input devices"
+#+ * UserPreferences.system -> system: pointer, "(read-only) Graphics driver and operating system settings"
+#+ * UserPreferences.themes -> themes: collection, "(read-only)"
+#UserPreferences.ui_styles -> ui_styles: collection, "(read-only)"
+#+ * UserPreferences.view -> view: pointer, "(read-only) Preferences related to viewing data"
+#+ * UserPreferencesEdit.auto_keying_mode -> auto_keying_mode: enum "Mode of automatic keyframe insertion for Objects and Bones"
+#+ * UserPreferencesEdit.grease_pencil_eraser_radius -> grease_pencil_eraser_radius: int "Radius of eraser brush"
+#+ * UserPreferencesEdit.grease_pencil_euclidean_distance -> grease_pencil_euclidean_distance: int "Distance moved by mouse when drawing stroke (in pixels) to include"
+#+ * UserPreferencesEdit.grease_pencil_manhattan_distance -> grease_pencil_manhattan_distance: int "Pixels moved by mouse per axis when drawing stroke"
+#+ * UserPreferencesEdit.keyframe_new_handle_type -> keyframe_new_handle_type: enum "NO DESCRIPTION"
+#+ * UserPreferencesEdit.keyframe_new_interpolation_type -> keyframe_new_interpolation_type: enum "NO DESCRIPTION"
+#+ * UserPreferencesEdit.material_link -> material_link: enum "Toggle whether the material is linked to object data or the object block"
+#+ * UserPreferencesEdit.object_align -> object_align: enum "When adding objects from a 3D View menu, either align them to that views direction or the world coordinates"
+#UserPreferencesEdit.sculpt_paint_overlay_color -> sculpt_paint_overlay_color: float[3] "Color of texture overlay"
+#+ * UserPreferencesEdit.undo_memory_limit -> undo_memory_limit: int "Maximum memory usage in megabytes (0 means unlimited)"
+#+ * UserPreferencesEdit.undo_steps -> undo_steps: int "Number of undo steps available (smaller values conserve memory)"
+#+ * UserPreferencesEdit.use_auto_keying -> use_auto_keying: boolean "Automatic keyframe insertion for Objects and Bones"
+#UserPreferencesEdit.use_drag_immediately -> use_drag_immediately: boolean "Moving things with a mouse drag confirms when releasing the button"
+#UserPreferencesEdit.use_duplicate_action -> use_duplicate_action: boolean "Causes actions to be duplicated with the object"
+#UserPreferencesEdit.use_duplicate_armature -> use_duplicate_armature: boolean "Causes armature data to be duplicated with the object"
+#UserPreferencesEdit.use_duplicate_curve -> use_duplicate_curve: boolean "Causes curve data to be duplicated with the object"
+#UserPreferencesEdit.use_duplicate_fcurve -> use_duplicate_fcurve: boolean "Causes F-curve data to be duplicated with the object"
+#UserPreferencesEdit.use_duplicate_lamp -> use_duplicate_lamp: boolean "Causes lamp data to be duplicated with the object"
+#UserPreferencesEdit.use_duplicate_material -> use_duplicate_material: boolean "Causes material data to be duplicated with the object"
+#UserPreferencesEdit.use_duplicate_mesh -> use_duplicate_mesh: boolean "Causes mesh data to be duplicated with the object"
+#UserPreferencesEdit.use_duplicate_metaball -> use_duplicate_metaball: boolean "Causes metaball data to be duplicated with the object"
+#UserPreferencesEdit.use_duplicate_particle -> use_duplicate_particle: boolean "Causes particle systems to be duplicated with the object"
+#UserPreferencesEdit.use_duplicate_surface -> use_duplicate_surface: boolean "Causes surface data to be duplicated with the object"
+#UserPreferencesEdit.use_duplicate_text -> use_duplicate_text: boolean "Causes text data to be duplicated with the object"
+#UserPreferencesEdit.use_duplicate_texture -> use_duplicate_texture: boolean "Causes texture data to be duplicated with the object"
+#UserPreferencesEdit.use_enter_edit_mode -> use_enter_edit_mode: boolean "Enter Edit Mode automatically after adding a new object"
+#UserPreferencesEdit.use_global_undo -> use_global_undo: boolean "Global undo works by keeping a full copy of the file itself in memory, so takes extra memory"
+#UserPreferencesEdit.use_grease_pencil_simplify_stroke -> use_grease_pencil_simplify_stroke: boolean "Simplify the final stroke"
+#UserPreferencesEdit.use_grease_pencil_smooth_stroke -> use_grease_pencil_smooth_stroke: boolean "Smooth the final stroke"
+#UserPreferencesEdit.use_insertkey_xyz_to_rgb -> use_insertkey_xyz_to_rgb: boolean "Color for newly added transformation F-Curves (Location, Rotation, Scale) and also Color is based on the transform axis"
+#UserPreferencesEdit.use_keyframe_insert_available -> use_keyframe_insert_available: boolean "Automatic keyframe insertion in available curves"
+#UserPreferencesEdit.use_keyframe_insert_keyingset -> use_keyframe_insert_keyingset: boolean "Automatic keyframe insertion using active Keying Set"
+#UserPreferencesEdit.use_keyframe_insert_needed -> use_keyframe_insert_needed: boolean "Keyframe insertion only when keyframe needed"
+#+ * UserPreferencesEdit.use_negative_frames -> use_negative_frames: boolean "Current frame number can be manually set to a negative value"
+#+ * UserPreferencesEdit.use_visual_keying -> use_visual_keying: boolean "Use Visual keying automatically for constrained objects"
+#+ * UserPreferencesFilePaths.animation_player -> animation_player: string "Path to a custom animation/frame sequence player"
+#+ * UserPreferencesFilePaths.animation_player_preset -> animation_player_preset: enum "Preset configs for external animation players"
+#+ * UserPreferencesFilePaths.auto_save_time -> auto_save_time: int "The time (in minutes) to wait between automatic temporary saves"
+#UserPreferencesFilePaths.font_directory -> font_directory: string "The default directory to search for loading fonts"
+#+ * UserPreferencesFilePaths.image_editor -> image_editor: string "Path to an image editor"
+#+ * UserPreferencesFilePaths.recent_files -> recent_files: int "Maximum number of recently opened files to remember"
+#+ * UserPreferencesFilePaths.render_output_directory -> render_output_directory: string "The default directory for rendering output"
+#+ * UserPreferencesFilePaths.save_version -> save_version: int "The number of old versions to maintain in the current directory, when manually saving"
+#UserPreferencesFilePaths.script_directory -> script_directory: string "The default directory to search for Python scripts (resets python module search path: sys.path)"
+#+ * UserPreferencesFilePaths.sequence_plugin_directory -> sequence_plugin_directory: string "The default directory to search for sequence plugins"
+#UserPreferencesFilePaths.show_hidden_files_datablocks -> show_hidden_files_datablocks: boolean "Hide files/datablocks that start with a dot(.*)"
+#UserPreferencesFilePaths.sound_directory -> sound_directory: string "The default directory to search for sounds"
+#+ * UserPreferencesFilePaths.temporary_directory -> temporary_directory: string "The directory for storing temporary save files"
+#UserPreferencesFilePaths.texture_directory -> texture_directory: string "The default directory to search for textures"
+#+ * UserPreferencesFilePaths.texture_plugin_directory -> texture_plugin_directory: string "The default directory to search for texture plugins"
+#UserPreferencesFilePaths.use_auto_save_temporary_files -> use_auto_save_temporary_files: boolean "Automatic saving of temporary files"
+#UserPreferencesFilePaths.use_file_compression -> use_file_compression: boolean "Enable file compression when saving .blend files"
+#UserPreferencesFilePaths.use_filter_files -> use_filter_files: boolean "Display only files with extensions in the image select window"
+#UserPreferencesFilePaths.use_load_ui -> use_load_ui: boolean "Load user interface setup when loading .blend files"
+#+ * UserPreferencesFilePaths.use_relative_paths -> use_relative_paths: boolean "Default relative path option for the file selector"
+#UserPreferencesFilePaths.use_save_preview_images -> use_save_preview_images: boolean "Enables automatic saving of preview images in the .blend file"
+#+ * UserPreferencesInput.edited_keymaps -> edited_keymaps: collection, "(read-only)"
+#UserPreferencesInput.invert_mouse_wheel_zoom -> invert_mouse_wheel_zoom: boolean "Invert the axis of mouse movement for zooming"
+#UserPreferencesInput.invert_zoom_wheel -> invert_zoom_wheel: boolean "Swap the Mouse Wheel zoom direction"
+#UserPreferencesInput.mouse_double_click_time -> mouse_double_click_time: int "The time (in ms) for a double click"
+#+ * UserPreferencesInput.ndof_pan_speed -> ndof_pan_speed: int "The overall panning speed of an NDOF device, as percent of standard"
+#+ * UserPreferencesInput.ndof_rotate_speed -> ndof_rotate_speed: int "The overall rotation speed of an NDOF device, as percent of standard"
+#+ * UserPreferencesInput.select_mouse -> select_mouse: enum "The mouse button used for selection"
+#UserPreferencesInput.use_emulate_numpad -> use_emulate_numpad: boolean "Causes the 1 to 0 keys to act as the numpad (useful for laptops)"
+#UserPreferencesInput.use_mouse_continuous -> use_mouse_continuous: boolean "Allow moving the mouse outside the view on some manipulations (transform, ui control drag)"
+#UserPreferencesInput.use_mouse_emulate_3_button -> use_mouse_emulate_3_button: boolean "Emulates Middle Mouse with Alt+LeftMouse (doesnt work with Left Mouse Select option)"
+#UserPreferencesInput.use_mouse_mmb_paste -> use_mouse_mmb_paste: boolean "In text window, paste with middle mouse button instead of panning"
+#UserPreferencesInput.view_rotate_method -> view_rotate_method: enum "Rotation style in the viewport"
+#UserPreferencesInput.view_zoom_axis -> view_zoom_axis: enum "Axis of mouse movement to zoom in or out on"
+#UserPreferencesInput.view_zoom_method -> view_zoom_method: enum "Which style to use for viewport scaling"
+#+ * UserPreferencesInput.wheel_scroll_lines -> wheel_scroll_lines: int "The number of lines scrolled at a time with the mouse wheel"
+#+ * UserPreferencesSystem.audio_channels -> audio_channels: enum "Sets the audio channel count"
+#+ * UserPreferencesSystem.audio_device -> audio_device: enum "Sets the audio output device"
+#+ * UserPreferencesSystem.audio_mixing_buffer -> audio_mixing_buffer: enum "Sets the number of samples used by the audio mixing buffer"
+#+ * UserPreferencesSystem.audio_sample_format -> audio_sample_format: enum "Sets the audio sample format"
+#+ * UserPreferencesSystem.audio_sample_rate -> audio_sample_rate: enum "Sets the audio sample rate"
+#+ * UserPreferencesSystem.color_picker_type -> color_picker_type: enum "Different styles of displaying the color picker widget"
+#+ * UserPreferencesSystem.dpi -> dpi: int "Font size and resolution for display"
+#+ * UserPreferencesSystem.frame_server_port -> frame_server_port: int "Frameserver Port for Frameserver Rendering"
+#UserPreferencesSystem.gl_clip_alpha -> gl_clip_alpha: float "Clip alpha below this threshold in the 3D textured view"
+#+ * UserPreferencesSystem.gl_texture_limit -> gl_texture_limit: enum "Limit the texture size to save graphics memory"
+#+ * UserPreferencesSystem.language -> language: enum "Language use for translation"
+#+ * UserPreferencesSystem.memory_cache_limit -> memory_cache_limit: int "Memory cache limit in sequencer (megabytes)"
+#+ * UserPreferencesSystem.prefetch_frames -> prefetch_frames: int "Number of frames to render ahead during playback"
+#+ * UserPreferencesSystem.screencast_fps -> screencast_fps: int "Frame rate for the screencast to be played back"
+#+ * UserPreferencesSystem.screencast_wait_time -> screencast_wait_time: int "Time in milliseconds between each frame recorded for screencast"
+#+ * UserPreferencesSystem.scrollback -> scrollback: int "Maximum number of lines to store for the console buffer"
+#+ * UserPreferencesSystem.solid_lights -> solid_lights: collection, "(read-only) Lights user to display objects in solid draw mode"
+#+ * UserPreferencesSystem.texture_collection_rate -> texture_collection_rate: int "Number of seconds between each run of the GL texture garbage collector"
+#+ * UserPreferencesSystem.texture_time_out -> texture_time_out: int "Time since last access of a GL texture in seconds after which it is freed. (Set to 0 to keep textures allocated.)"
+#+ * UserPreferencesSystem.use_antialiasing -> use_antialiasing: boolean "Use anti-aliasing for the 3D view (may impact redraw performance)"
+#UserPreferencesSystem.use_international_fonts -> use_international_fonts: boolean "Use international fonts"
+#+ * UserPreferencesSystem.use_mipmaps -> use_mipmaps: boolean "Scale textures for the 3D View (looks nicer but uses more memory and slows image reloading)"
+#UserPreferencesSystem.use_preview_images -> use_preview_images: boolean "Enables automatic saving of preview images in the .blend file (Windows only)"
+#UserPreferencesSystem.use_scripts_auto_execute -> use_scripts_auto_execute: boolean "Allow any .blend file to run scripts automatically (unsafe with blend files from an untrusted source)"
+#UserPreferencesSystem.use_tabs_as_spaces -> use_tabs_as_spaces: boolean "Automatically converts all new tabs into spaces for new and loaded text files"
+#+ * UserPreferencesSystem.use_textured_fonts -> use_textured_fonts: boolean "Use textures for drawing international fonts"
+#UserPreferencesSystem.use_translate_buttons -> use_translate_buttons: boolean "Translate button labels"
+#UserPreferencesSystem.use_translate_toolbox -> use_translate_toolbox: boolean "Translate toolbox menu"
+#UserPreferencesSystem.use_translate_tooltips -> use_translate_tooltips: boolean "Translate Tooltips"
+#UserPreferencesSystem.use_vertex_buffer_objects -> use_vertex_buffer_objects: boolean "Use Vertex Buffer Objects (or Vertex Arrays, if unsupported) for viewport rendering"
+#+ * UserPreferencesSystem.use_weight_color_range -> use_weight_color_range: boolean "Enable color range used for weight visualization in weight painting mode"
+#+ * UserPreferencesSystem.weight_color_range -> weight_color_range: pointer, "(read-only) Color range used for weight visualization in weight painting mode"
+#+ * UserPreferencesSystem.window_draw_method -> window_draw_method: enum "Drawing method used by the window manager"
+#+ * UserPreferencesView.manipulator_handle_size -> manipulator_handle_size: int "Size of widget handles as percentage of widget radius"
+#+ * UserPreferencesView.manipulator_hotspot -> manipulator_hotspot: int "Hotspot in pixels for clicking widget handles"
+#+ * UserPreferencesView.manipulator_size -> manipulator_size: int "Diameter of widget, in 10 pixel units"
+#+ * UserPreferencesView.mini_axis_brightness -> mini_axis_brightness: int "The brightness of the icon"
+#+ * UserPreferencesView.mini_axis_size -> mini_axis_size: int "The axis icons size"
+#+ * UserPreferencesView.object_origin_size -> object_origin_size: int "Diameter in Pixels for Object/Lamp origin display"
+#+ * UserPreferencesView.open_left_mouse_delay -> open_left_mouse_delay: int "Time in 1/10 seconds to hold the Left Mouse Button before opening the toolbox"
+#+ * UserPreferencesView.open_right_mouse_delay -> open_right_mouse_delay: int "Time in 1/10 seconds to hold the Right Mouse Button before opening the toolbox"
+#+ * UserPreferencesView.open_sublevel_delay -> open_sublevel_delay: int "Time delay in 1/10 seconds before automatically opening sub level menus"
+#+ * UserPreferencesView.open_toplevel_delay -> open_toplevel_delay: int "Time delay in 1/10 seconds before automatically opening top level menus"
+#+ * UserPreferencesView.rotation_angle -> rotation_angle: int "The rotation step for numerical pad keys (2 4 6 8)"
+#UserPreferencesView.show_column_layout -> show_column_layout: boolean "Use a column layout for toolbox"
+#UserPreferencesView.show_large_cursors -> show_large_cursors: boolean "Use large mouse cursors when available"
+#UserPreferencesView.show_manipulator -> show_manipulator: boolean "Use 3D transform manipulator"
+#+ * UserPreferencesView.show_mini_axis -> show_mini_axis: boolean "Show a small rotating 3D axis in the bottom left corner of the 3D View"
+#UserPreferencesView.show_object_info -> show_object_info: boolean "Display objects name and frame number in 3D view"
+#+ * UserPreferencesView.show_playback_fps -> show_playback_fps: boolean "Show the frames per second screen refresh rate, while animation is played back"
+#+ * UserPreferencesView.show_splash -> show_splash: boolean "Display splash screen on startup"
+#UserPreferencesView.show_tooltips -> show_tooltips: boolean "Display tooltips"
+#+ * UserPreferencesView.show_view_name -> show_view_name: boolean "Show the name of the views direction in each 3D View"
+#+ * UserPreferencesView.smooth_view -> smooth_view: int "The time to animate the view in milliseconds, zero to disable"
+#+ * UserPreferencesView.timecode_style -> timecode_style: enum "Format of Time Codes displayed when not displaying timing in terms of frames"
+#UserPreferencesView.use_auto_perspective -> use_auto_perspective: boolean "Automatically switch between orthographic and perspective when changing from top/front/side views"
+#UserPreferencesView.use_directional_menus -> use_directional_menus: boolean "Otherwise menus, etc will always be top to bottom, left to right, no matter opening direction"
+#UserPreferencesView.use_global_pivot -> use_global_pivot: boolean "Lock the same rotation/scaling pivot in all 3D Views"
+#UserPreferencesView.use_global_scene -> use_global_scene: boolean "Forces the current Scene to be displayed in all Screens"
+#UserPreferencesView.use_mouse_auto_depth -> use_mouse_auto_depth: boolean "Use the depth under the mouse to improve view pan/rotate/zoom functionality"
+#UserPreferencesView.use_mouse_over_open -> use_mouse_over_open: boolean "Open menu buttons and pulldowns automatically when the mouse is hovering"
+#UserPreferencesView.use_rotate_around_active -> use_rotate_around_active: boolean "Use selection as the pivot point"
+#UserPreferencesView.use_zoom_to_mouse -> use_zoom_to_mouse: boolean "Zoom in towards the mouse pointers position in the 3D view, rather than the 2D window center"
+#UserPreferencesView.view2d_grid_spacing_min -> view2d_grid_spacing_min: int "Minimum number of pixels between each gridline in 2D Viewports"
+#+ * UserSolidLight.diffuse_color -> diffuse_color: float[3] "The diffuse color of the OpenGL light"
+#+ * UserSolidLight.direction -> direction: float[3] "The direction that the OpenGL light is shining"
+#+ * UserSolidLight.specular_color -> specular_color: float[3] "The color of the lights specular highlight"
+#+ * UserSolidLight.use -> use: boolean "Enable this OpenGL light in solid draw mode"
+#+ * ValueNodeSocket.default_value -> default_value: float[1] "Default value of the socket when no link is attached"
+#+ * ValueNodeSocket.name -> name: string, "(read-only) Socket name"
+#+ * VectorNodeSocket.default_value -> default_value: float[3] "Default value of the socket when no link is attached"
+#+ * VectorNodeSocket.name -> name: string, "(read-only) Socket name"
+#VertexColors.active -> active: pointer "Active vertex color layer"
+#+ * VertexGroup.index -> index: int, "(read-only) Index number of the vertex group"
+#+ * VertexGroup.name -> name: string "Vertex group name"
+#+ * VertexGroupElement.group -> group: int, "(read-only)"
+#+ * VertexGroupElement.weight -> weight: float "Vertex Weight"
+#+ * VoxelData.domain_object -> domain_object: pointer "Object used as the smoke simulation domain"
+#+ * VoxelData.extension -> extension: enum "Sets how the texture is extrapolated past its original bounds"
+#+ * VoxelData.file_format -> file_format: enum "Format of the source data set to render"
+#VoxelData.filepath -> filepath: string "The external source data file to use"
+#+ * VoxelData.intensity -> intensity: float "Multiplier for intensity values"
+#+ * VoxelData.interpolation -> interpolation: enum "Method to interpolate/smooth values between voxel cells"
+#+ * VoxelData.resolution -> resolution: int[3] "Resolution of the voxel grid"
+#+ * VoxelData.smoke_data_type -> smoke_data_type: enum "Simulation value to be used as a texture"
+#VoxelData.still_frame -> still_frame: int "The frame number to always use"
+#VoxelData.use_still_frame -> use_still_frame: boolean "Always render a still frame from the voxel data sequence"
+#+ * Window.screen -> screen: pointer "Active screen showing in the window"
+#+ * WorldLighting.adapt_to_speed -> adapt_to_speed: float "Use the speed vector pass to reduce AO samples in fast moving pixels. Higher values result in more aggressive sample reduction. Requires Vec pass enabled (for Raytrace Adaptive QMC)"
+#WorldLighting.ao_blend_type -> ao_blend_type: enum "Defines how AO mixes with material shading"
+#+ * WorldLighting.ao_factor -> ao_factor: float "Factor for ambient occlusion blending"
+#+ * WorldLighting.bias -> bias: float "Bias (in radians) to prevent smoothed faces from showing banding (for Raytrace Constant Jittered)"
+#+ * WorldLighting.correction -> correction: float "Ad-hoc correction for over-occlusion due to the approximation (for Approximate)"
+#+ * WorldLighting.distance -> distance: float "Length of rays, defines how far away other faces give occlusion effect"
+#+ * WorldLighting.environment_color -> environment_color: enum "Defines where the color of the environment light comes from"
+#+ * WorldLighting.environment_energy -> environment_energy: float "Defines the strength of environment light"
+#WorldLighting.error_threshold -> error_threshold: float "Low values are slower and higher quality (for Approximate)"
+#+ * WorldLighting.falloff_strength -> falloff_strength: float "Distance attenuation factor, the higher, the shorter the shadows"
+#+ * WorldLighting.gather_method -> gather_method: enum "NO DESCRIPTION"
+#+ * WorldLighting.indirect_bounces -> indirect_bounces: int "Number of indirect diffuse light bounces to use for approximate ambient occlusion"
+#+ * WorldLighting.indirect_factor -> indirect_factor: float "Factor for how much surrounding objects contribute to light"
+#+ * WorldLighting.passes -> passes: int "Number of preprocessing passes to reduce overocclusion (for approximate ambient occlusion)"
+#+ * WorldLighting.sample_method -> sample_method: enum "Method for generating shadow samples (for Raytrace)"
+#+ * WorldLighting.samples -> samples: int "Amount of ray samples. Higher values give smoother results and longer rendering times"
+#+ * WorldLighting.threshold -> threshold: float "Samples below this threshold will be considered fully shadowed/unshadowed and skipped (for Raytrace Adaptive QMC)"
+#+ * WorldLighting.use_ambient_occlusion -> use_ambient_occlusion: boolean "Use Ambient Occlusion to add shadowing based on distance between objects"
+#WorldLighting.use_cache -> use_cache: boolean "Cache AO results in pixels and interpolate over neighbouring pixels for speedup (for Approximate)"
+#WorldLighting.use_environment_light -> use_environment_light: boolean "Add light coming from the environment"
+#WorldLighting.use_falloff -> use_falloff: boolean "NO DESCRIPTION"
+#WorldLighting.use_indirect_light -> use_indirect_light: boolean "Add indirect light bouncing of surrounding objects"
+#+ * WorldMistSettings.depth -> depth: float "The distance over which the mist effect fades in"
+#+ * WorldMistSettings.falloff -> falloff: enum "Type of transition used to fade mist"
+#+ * WorldMistSettings.height -> height: float "Control how much mist density decreases with height"
+#+ * WorldMistSettings.intensity -> intensity: float "Intensity of the mist effect"
+#+ * WorldMistSettings.start -> start: float "Starting distance of the mist, measured from the camera"
+#+ * WorldMistSettings.use_mist -> use_mist: boolean "Occlude objects with the environment color as they are further away"
+#+ * WorldStarsSettings.average_separation -> average_separation: float "Average distance between any two stars"
+#WorldStarsSettings.color_random -> color_random: float "Randomize star colors"
+#WorldStarsSettings.distance_min -> distance_min: float "Minimum distance to the camera for stars"
+#+ * WorldStarsSettings.size -> size: float "Average screen dimension of stars"
+#+ * WorldStarsSettings.use_stars -> use_stars: boolean "Enable starfield generation"
diff --git a/source/blender/makesrna/rna_cleanup/rna_update.sh b/source/blender/makesrna/rna_cleanup/rna_update.sh
new file mode 100755
index 00000000000..a4d686cc482
--- /dev/null
+++ b/source/blender/makesrna/rna_cleanup/rna_update.sh
@@ -0,0 +1,13 @@
+cd ../../../../
+./blender.bin --background --python ./release/scripts/modules/rna_info.py 2> source/blender/makesrna/rna_cleanup/out.txt
+cd ./source/blender/makesrna/rna_cleanup/
+./rna_cleaner.py out.txt
+./rna_cleaner.py rna_properties.txt
+./rna_cleaner_merge.py out_work.py rna_properties_work.py
+./rna_cleaner.py out_work_merged.py
+./rna_cleaner.py out_work_lost.py
+mv out_work_merged_work.txt rna_properties.txt # overwrite
+mv out_work_lost_work.txt rna_properties_lost.txt
+cat rna_properties.txt | grep -v "^#" > rna_properties_edits.txt
+./rna_cleaner.py rna_properties.txt
+echo "Updated: rna_properties.txt rna_properties_edits.txt rna_properties_lost.txt "
diff --git a/source/blender/modifiers/MOD_modifiertypes.h b/source/blender/modifiers/MOD_modifiertypes.h
index a55b5934f7d..67f9107d3fc 100644
--- a/source/blender/modifiers/MOD_modifiertypes.h
+++ b/source/blender/modifiers/MOD_modifiertypes.h
@@ -18,7 +18,7 @@
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software Foundation;
- * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
* Contributor(s): Ben Batt
*
diff --git a/source/blender/modifiers/Makefile b/source/blender/modifiers/Makefile
index 4b2c4b0a036..ddcddb90186 100644
--- a/source/blender/modifiers/Makefile
+++ b/source/blender/modifiers/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
# All rights reserved.
diff --git a/source/blender/modifiers/SConscript b/source/blender/modifiers/SConscript
index 4caf746fe6a..e9930d65cb8 100644
--- a/source/blender/modifiers/SConscript
+++ b/source/blender/modifiers/SConscript
@@ -15,8 +15,8 @@ incs += ' ' + env['BF_ZLIB_INC']
defs = []
if env['BF_NO_ELBEEM']:
- defs.append('DISABLE_ELBEEM')
+ defs.append('DISABLE_ELBEEM')
-env.BlenderLib ( libname = 'modifiers', sources = sources,
+env.BlenderLib ( libname = 'bf_modifiers', sources = sources,
includes = Split(incs), defines=defs,
libtype=['core','player'], priority = [180, 20] )
diff --git a/source/blender/modifiers/intern/MOD_armature.c b/source/blender/modifiers/intern/MOD_armature.c
index 95516647736..d0e36f90ff5 100644
--- a/source/blender/modifiers/intern/MOD_armature.c
+++ b/source/blender/modifiers/intern/MOD_armature.c
@@ -30,7 +30,7 @@
*
*/
-#include "string.h"
+#include <string.h>
#include "DNA_armature_types.h"
#include "DNA_object_types.h"
diff --git a/source/blender/modifiers/intern/MOD_array.c b/source/blender/modifiers/intern/MOD_array.c
index 66c5f375ba8..a6fefbcd863 100644
--- a/source/blender/modifiers/intern/MOD_array.c
+++ b/source/blender/modifiers/intern/MOD_array.c
@@ -32,14 +32,16 @@
/* Array modifier: duplicates the object multiple times along an axis */
-#include "DNA_curve_types.h"
-#include "DNA_meshdata_types.h"
-#include "DNA_object_types.h"
+#include "MEM_guardedalloc.h"
#include "BLI_math.h"
#include "BLI_ghash.h"
#include "BLI_edgehash.h"
+#include "DNA_curve_types.h"
+#include "DNA_meshdata_types.h"
+#include "DNA_object_types.h"
+
#include "BKE_cdderivedmesh.h"
#include "BKE_displist.h"
#include "BKE_mesh.h"
diff --git a/source/blender/modifiers/intern/MOD_bevel.c b/source/blender/modifiers/intern/MOD_bevel.c
index eabd6e4957d..62c7dfa5600 100644
--- a/source/blender/modifiers/intern/MOD_bevel.c
+++ b/source/blender/modifiers/intern/MOD_bevel.c
@@ -29,6 +29,7 @@
* ***** END GPL LICENSE BLOCK *****
*
*/
+#include "MEM_guardedalloc.h"
#include "BKE_bmesh.h"
#include "BKE_cdderivedmesh.h"
diff --git a/source/blender/modifiers/intern/MOD_boolean_util.c b/source/blender/modifiers/intern/MOD_boolean_util.c
index 11d47bfffb1..2fba4c6a603 100644
--- a/source/blender/modifiers/intern/MOD_boolean_util.c
+++ b/source/blender/modifiers/intern/MOD_boolean_util.c
@@ -34,6 +34,8 @@
#include "DNA_object_types.h"
#include "DNA_scene_types.h"
+#include "MEM_guardedalloc.h"
+
#include "BLI_math.h"
#include "BLI_ghash.h"
diff --git a/source/blender/modifiers/intern/MOD_build.c b/source/blender/modifiers/intern/MOD_build.c
index 47693ba337e..8fc1be7d5ee 100644
--- a/source/blender/modifiers/intern/MOD_build.c
+++ b/source/blender/modifiers/intern/MOD_build.c
@@ -30,6 +30,8 @@
*
*/
+#include "MEM_guardedalloc.h"
+
#include "BLI_rand.h"
#include "BLI_ghash.h"
diff --git a/source/blender/modifiers/intern/MOD_cloth.c b/source/blender/modifiers/intern/MOD_cloth.c
index 5050333cd43..bfb5f6ee028 100644
--- a/source/blender/modifiers/intern/MOD_cloth.c
+++ b/source/blender/modifiers/intern/MOD_cloth.c
@@ -30,6 +30,12 @@
*
*/
+#include "DNA_cloth_types.h"
+#include "DNA_scene_types.h"
+#include "DNA_object_types.h"
+
+#include "MEM_guardedalloc.h"
+
#include "BKE_cloth.h"
#include "BKE_cdderivedmesh.h"
#include "BKE_global.h"
diff --git a/source/blender/modifiers/intern/MOD_collision.c b/source/blender/modifiers/intern/MOD_collision.c
index 7f70bd8f709..32fbd58839a 100644
--- a/source/blender/modifiers/intern/MOD_collision.c
+++ b/source/blender/modifiers/intern/MOD_collision.c
@@ -31,6 +31,10 @@
*/
#include "DNA_scene_types.h"
+#include "DNA_object_types.h"
+#include "DNA_meshdata_types.h"
+
+#include "MEM_guardedalloc.h"
#include "BLI_math.h"
diff --git a/source/blender/modifiers/intern/MOD_curve.c b/source/blender/modifiers/intern/MOD_curve.c
index 250776664a5..97c7a4b01d6 100644
--- a/source/blender/modifiers/intern/MOD_curve.c
+++ b/source/blender/modifiers/intern/MOD_curve.c
@@ -30,7 +30,7 @@
*
*/
-#include "string.h"
+#include <string.h>
#include "DNA_scene_types.h"
#include "DNA_object_types.h"
diff --git a/source/blender/modifiers/intern/MOD_displace.c b/source/blender/modifiers/intern/MOD_displace.c
index 29ace805543..efe57410441 100644
--- a/source/blender/modifiers/intern/MOD_displace.c
+++ b/source/blender/modifiers/intern/MOD_displace.c
@@ -134,7 +134,7 @@ static void updateDepgraph(
{
DisplaceModifierData *dmd = (DisplaceModifierData*) md;
- if(dmd->map_object) {
+ if(dmd->map_object && dmd->texmapping == MOD_DISP_MAP_OBJECT) {
DagNode *curNode = dag_get_node(forest, dmd->map_object);
dag_add_relation(forest, curNode, obNode,
diff --git a/source/blender/modifiers/intern/MOD_explode.c b/source/blender/modifiers/intern/MOD_explode.c
index 7d506ebfae0..9a42c9909a7 100644
--- a/source/blender/modifiers/intern/MOD_explode.c
+++ b/source/blender/modifiers/intern/MOD_explode.c
@@ -187,7 +187,7 @@ static int edgesplit_get(EdgeHash *edgehash, int v1, int v2)
static DerivedMesh * splitEdges(ExplodeModifierData *emd, DerivedMesh *dm){
DerivedMesh *splitdm;
MFace *mf=0,*df1=0,*df2=0,*df3=0;
- MFace *mface=CDDM_get_faces(dm);
+ MFace *mface=dm->getFaceArray(dm);
MVert *dupve, *mv;
EdgeHash *edgehash;
EdgeHashIterator *ehi;
diff --git a/source/blender/modifiers/intern/MOD_lattice.c b/source/blender/modifiers/intern/MOD_lattice.c
index b5e86ac8a57..4270f2ff6e8 100644
--- a/source/blender/modifiers/intern/MOD_lattice.c
+++ b/source/blender/modifiers/intern/MOD_lattice.c
@@ -30,7 +30,7 @@
*
*/
-#include "string.h"
+#include <string.h>
#include "DNA_object_types.h"
diff --git a/source/blender/modifiers/intern/MOD_mask.c b/source/blender/modifiers/intern/MOD_mask.c
index 15547a1d95e..94eb2380b66 100644
--- a/source/blender/modifiers/intern/MOD_mask.c
+++ b/source/blender/modifiers/intern/MOD_mask.c
@@ -30,13 +30,15 @@
*
*/
+#include "MEM_guardedalloc.h"
+
+#include "BLI_ghash.h"
+
#include "DNA_armature_types.h"
#include "DNA_meshdata_types.h"
#include "DNA_modifier_types.h"
#include "DNA_object_types.h"
-#include "BLI_ghash.h"
-
#include "BKE_cdderivedmesh.h"
#include "BKE_mesh.h"
#include "BKE_modifier.h"
diff --git a/source/blender/modifiers/intern/MOD_multires.c b/source/blender/modifiers/intern/MOD_multires.c
index 766a3756d4a..dd99c88a684 100644
--- a/source/blender/modifiers/intern/MOD_multires.c
+++ b/source/blender/modifiers/intern/MOD_multires.c
@@ -72,8 +72,8 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob, DerivedMesh *dm,
if(mmd->totlvl) {
if(!CustomData_get_layer(&me->fdata, CD_MDISPS)) {
- /* multires can't work without displacement layer */
- modifier_setError(md, "Modifier needs mesh with displacement data.");
+ /* multires always needs a displacement layer */
+ CustomData_add_layer(&me->fdata, CD_MDISPS, CD_CALLOC, NULL, me->totface);
return dm;
}
}
diff --git a/source/blender/modifiers/intern/MOD_none.c b/source/blender/modifiers/intern/MOD_none.c
index 3a5dc4dce33..0c749b79f5a 100644
--- a/source/blender/modifiers/intern/MOD_none.c
+++ b/source/blender/modifiers/intern/MOD_none.c
@@ -18,7 +18,7 @@
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software Foundation;
- * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
* The Original Code is Copyright (C) 2005 Blender Foundation.
* All rights reserved.
diff --git a/source/blender/modifiers/intern/MOD_particleinstance.c b/source/blender/modifiers/intern/MOD_particleinstance.c
index 0f4bf00d1ad..4f5acc60cda 100644
--- a/source/blender/modifiers/intern/MOD_particleinstance.c
+++ b/source/blender/modifiers/intern/MOD_particleinstance.c
@@ -32,6 +32,8 @@
#include "DNA_meshdata_types.h"
+#include "MEM_guardedalloc.h"
+
#include "BLI_math.h"
#include "BLI_listbase.h"
#include "BLI_rand.h"
diff --git a/source/blender/modifiers/intern/MOD_screw.c b/source/blender/modifiers/intern/MOD_screw.c
index cbd9ae42a26..067567b9cda 100644
--- a/source/blender/modifiers/intern/MOD_screw.c
+++ b/source/blender/modifiers/intern/MOD_screw.c
@@ -61,39 +61,45 @@ typedef struct ScrewVertIter {
MEdge *e;
} ScrewVertIter;
-#define ScrewVertIter_INIT(iter, array, v_init, dir)\
- iter.v_array = array;\
- iter.v = v_init;\
- if (v_init>=0) {\
- iter.v_poin = &array[v_init];\
- iter.v_other = iter.v_poin->v[dir];\
- if (dir)\
- iter.e = iter.v_poin->e[0];\
- else\
- iter.e = iter.v_poin->e[1];\
- } else {\
- iter.v_poin= NULL;\
- iter.e= NULL;\
+
+static void screwvert_iter_init(ScrewVertIter *iter, ScrewVertConnect *array, int v_init, int dir)
+{
+ iter->v_array = array;
+ iter->v = v_init;
+
+ if (v_init >= 0) {
+ iter->v_poin = &array[v_init];
+ iter->v_other = iter->v_poin->v[dir];
+ iter->e = iter->v_poin->e[!dir];
+ }
+ else {
+ iter->v_poin= NULL;
+ iter->e= NULL;
}
+}
-#define ScrewVertIter_NEXT(iter)\
- if (iter.v_poin->v[0] == iter.v_other) {\
- iter.v_other= iter.v;\
- iter.v= iter.v_poin->v[1];\
- } else if (iter.v_poin->v[1] == iter.v_other) {\
- iter.v_other= iter.v;\
- iter.v= iter.v_poin->v[0];\
- }\
- if (iter.v >=0) {\
- iter.v_poin= &iter.v_array[iter.v];\
- if ( iter.v_poin->e[0] != iter.e ) iter.e= iter.v_poin->e[0];\
- else iter.e= iter.v_poin->e[1];\
- } else {\
- iter.e= NULL;\
- iter.v_poin= NULL;\
+static void screwvert_iter_step(ScrewVertIter *iter)
+{
+ if (iter->v_poin->v[0] == iter->v_other) {
+ iter->v_other= iter->v;
+ iter->v= iter->v_poin->v[1];
}
-
+ else if (iter->v_poin->v[1] == iter->v_other) {
+ iter->v_other= iter->v;
+ iter->v= iter->v_poin->v[0];
+ }
+ if (iter->v >= 0) {
+ iter->v_poin= &iter->v_array[iter->v];
+ iter->e= iter->v_poin->e[(iter->v_poin->e[0] == iter->e)];
+ }
+ else {
+ iter->e= NULL;
+ iter->v_poin= NULL;
+ }
+}
+
+
static void initData(ModifierData *md)
{
ScrewModifierData *ltmd= (ScrewModifierData*) md;
@@ -131,9 +137,11 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob,
int *origindex;
int mface_index=0;
+ int step;
int i, j;
int i1,i2;
- int steps= ltmd->steps;
+ int step_tot= ltmd->steps;
+ const int do_flip = ltmd->flag & MOD_SCREW_NORMAL_FLIP ? 1 : 0;
int maxVerts=0, maxEdges=0, maxFaces=0;
int totvert= dm->getNumVerts(dm);
int totedge= dm->getNumEdges(dm);
@@ -167,7 +175,7 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob,
if (!totvert)
return CDDM_from_template(dm, 0, 0, 0);
- steps= useRenderParams ? ltmd->render_steps : ltmd->steps;
+ step_tot= useRenderParams ? ltmd->render_steps : ltmd->steps;
switch(ltmd->axis) {
case 0:
@@ -187,16 +195,13 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob,
axis_vec[ltmd->axis]= 1.0f;
if (ltmd->ob_axis) {
- float mtx3_tx[3][3];
/* calc the matrix relative to the axis object */
invert_m4_m4(mtx_tmp_a, ob->obmat);
copy_m4_m4(mtx_tx_inv, ltmd->ob_axis->obmat);
mul_m4_m4m4(mtx_tx, mtx_tx_inv, mtx_tmp_a);
- copy_m3_m4(mtx3_tx, mtx_tx);
-
/* calc the axis vec */
- mul_m3_v3(mtx3_tx, axis_vec);
+ mul_mat3_m4_v3(mtx_tx, axis_vec); /* only rotation component */
normalize_v3(axis_vec);
/* screw */
@@ -218,7 +223,8 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob,
#if 0 // cant incluide this, not pradictable enough, though quite fun,.
if(ltmd->flag & MOD_SCREW_OBJECT_ANGLE) {
-
+ float mtx3_tx[3][3];
+ copy_m3_m4(mtx3_tx, mtx_tx);
float vec[3] = {0,1,0};
float cross1[3];
@@ -261,30 +267,30 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob,
screw_ofs *= ltmd->iter;
/* multiplying the steps is a bit tricky, this works best */
- steps = ((steps + 1) * ltmd->iter) - (ltmd->iter - 1);
+ step_tot = ((step_tot + 1) * ltmd->iter) - (ltmd->iter - 1);
/* will the screw be closed?
* Note! smaller then FLT_EPSILON*100 gives problems with float precission so its never closed. */
if (fabs(screw_ofs) <= (FLT_EPSILON*100) && fabs(fabs(angle) - (M_PI * 2)) <= (FLT_EPSILON*100)) {
close= 1;
- steps--;
- if(steps < 2) steps= 2;
+ step_tot--;
+ if(step_tot < 2) step_tot= 2;
- maxVerts = totvert * steps; /* -1 because we're joining back up */
- maxEdges = (totvert * steps) + /* these are the edges between new verts */
- (totedge * steps); /* -1 because vert edges join */
- maxFaces = totedge * steps;
+ maxVerts = totvert * step_tot; /* -1 because we're joining back up */
+ maxEdges = (totvert * step_tot) + /* these are the edges between new verts */
+ (totedge * step_tot); /* -1 because vert edges join */
+ maxFaces = totedge * step_tot;
screw_ofs= 0.0f;
}
else {
close= 0;
- if(steps < 2) steps= 2;
+ if(step_tot < 2) step_tot= 2;
- maxVerts = totvert * steps; /* -1 because we're joining back up */
- maxEdges = (totvert * (steps-1)) + /* these are the edges between new verts */
- (totedge * steps); /* -1 because vert edges join */
- maxFaces = totedge * (steps-1);
+ maxVerts = totvert * step_tot; /* -1 because we're joining back up */
+ maxEdges = (totvert * (step_tot-1)) + /* these are the edges between new verts */
+ (totedge * step_tot); /* -1 because vert edges join */
+ maxFaces = totedge * (step_tot-1);
}
result= CDDM_from_template(dm, maxVerts, maxEdges, maxFaces);
@@ -398,11 +404,11 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob,
for (i=0; i<totedge; i++, med_new++) {
vc= &vert_connect[med_new->v1];
- if (vc->v[0]==-1) { /* unused */
+ if (vc->v[0] == -1) { /* unused */
vc->v[0]= med_new->v2;
vc->e[0]= med_new;
}
- else if (vc->v[1]==-1) {
+ else if (vc->v[1] == -1) {
vc->v[1]= med_new->v2;
vc->e[1]= med_new;
}
@@ -413,11 +419,11 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob,
vc= &vert_connect[med_new->v2];
/* same as above but swap v1/2 */
- if (vc->v[0]==-1) { /* unused */
+ if (vc->v[0] == -1) { /* unused */
vc->v[0]= med_new->v1;
vc->e[0]= med_new;
}
- else if (vc->v[1]==-1) {
+ else if (vc->v[1] == -1) {
vc->v[1]= med_new->v1;
vc->e[1]= med_new;
}
@@ -429,22 +435,22 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob,
/* find the first vert */
vc= vert_connect;
for (i=0; i < totvert; i++, vc++) {
- int VBEST=-1, ed_loop_closed=0; /* vert and vert new */
- int ed_loop_flip;
+ int v_best=-1, ed_loop_closed=0; /* vert and vert new */
+ int ed_loop_flip= 0; /* compiler complains if not initialized, but it should be initialized below */
float fl= -1.0f;
ScrewVertIter lt_iter;
/* Now do search for connected verts, order all edges and flip them
* so resulting faces are flipped the right way */
vc_tot_linked= 0; /* count the number of linked verts for this loop */
- if (vc->flag==0) {
+ if (vc->flag == 0) {
/*printf("Loop on connected vert: %i\n", i);*/
for(j=0; j<2; j++) {
/*printf("\tSide: %i\n", j);*/
- ScrewVertIter_INIT(lt_iter, vert_connect, i, j);
- if (j==1) {
- ScrewVertIter_NEXT(lt_iter);
+ screwvert_iter_init(&lt_iter, vert_connect, i, j);
+ if (j == 1) {
+ screwvert_iter_step(&lt_iter);
}
while (lt_iter.v_poin) {
/*printf("\t\tVERT: %i\n", lt_iter.v);*/
@@ -459,10 +465,10 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob,
/*printf("Testing 2 floats %f : %f\n", fl, lt_iter.v_poin->dist);*/
if (fl <= lt_iter.v_poin->dist) {
fl= lt_iter.v_poin->dist;
- VBEST= lt_iter.v;
- /*printf("\t\t\tVERT BEST: %i\n", VBEST);*/
+ v_best= lt_iter.v;
+ /*printf("\t\t\tVERT BEST: %i\n", v_best);*/
}
- ScrewVertIter_NEXT(lt_iter);
+ screwvert_iter_step(&lt_iter);
if (!lt_iter.v_poin) {
/*printf("\t\t\tFound End Also Num %i\n", j);*/
/*endpoints[j]= lt_iter.v_other;*/ /* other is still valid */
@@ -472,14 +478,14 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob,
}
/* now we have a collection of used edges. flip their edges the right way*/
- /*if (VBEST !=-1) - */
+ /*if (v_best != -1) - */
/*printf("Done Looking - vc_tot_linked: %i\n", vc_tot_linked);*/
if (vc_tot_linked>1) {
float vf_1, vf_2, vf_best;
- vc_tmp= &vert_connect[VBEST];
+ vc_tmp= &vert_connect[v_best];
tmpf1= vert_connect[vc_tmp->v[0]].co;
tmpf2= vert_connect[vc_tmp->v[1]].co;
@@ -503,7 +509,7 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob,
else {
/* not so simple to work out which edge is higher */
sub_v3_v3v3(tmp_vec1, tmpf1, vc_tmp->co);
- sub_v3_v3v3(tmp_vec1, tmpf2, vc_tmp->co);
+ sub_v3_v3v3(tmp_vec2, tmpf2, vc_tmp->co);
normalize_v3(tmp_vec1);
normalize_v3(tmp_vec2);
@@ -531,9 +537,12 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob,
/*printf("flip direction %i\n", ed_loop_flip);*/
- /* switch the flip option if set */
- if (ltmd->flag & MOD_SCREW_NORMAL_FLIP)
+ /* switch the flip option if set
+ * note: flip is now done at face level so copying vgroup slizes is easier */
+ /*
+ if (do_flip)
ed_loop_flip= !ed_loop_flip;
+ */
if (angle < 0.0f)
ed_loop_flip= !ed_loop_flip;
@@ -542,7 +551,7 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob,
for(j=ed_loop_closed; j<2; j++) {
/*printf("Ordering Side J %i\n", j);*/
- ScrewVertIter_INIT(lt_iter, vert_connect, VBEST, j);
+ screwvert_iter_init(&lt_iter, vert_connect, v_best, j);
/*printf("\n\nStarting - Loop\n");*/
lt_iter.v_poin->flag= 1; /* so a non loop will traverse the other side */
@@ -550,7 +559,7 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob,
/* If this is the vert off the best vert and
* the best vert has 2 edges connected too it
* then swap the flip direction */
- if (j==1 && (vc_tmp->v[0] > -1) && (vc_tmp->v[1] > -1))
+ if (j == 1 && (vc_tmp->v[0] > -1) && (vc_tmp->v[1] > -1))
ed_loop_flip= !ed_loop_flip;
while (lt_iter.v_poin && lt_iter.v_poin->flag != 2) {
@@ -559,7 +568,7 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob,
lt_iter.v_poin->flag= 2;
if (lt_iter.e) {
if (lt_iter.v == lt_iter.e->v1) {
- if (ed_loop_flip==0) {
+ if (ed_loop_flip == 0) {
/*printf("\t\t\tFlipping 0\n");*/
SWAP(int, lt_iter.e->v1, lt_iter.e->v2);
}/* else {
@@ -567,7 +576,7 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob,
}*/
}
else if (lt_iter.v == lt_iter.e->v2) {
- if (ed_loop_flip==1) {
+ if (ed_loop_flip == 1) {
/*printf("\t\t\tFlipping 1\n");*/
SWAP(int, lt_iter.e->v1, lt_iter.e->v2);
}/* else {
@@ -579,7 +588,7 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob,
}/* else {
printf("\t\tNo Edge at this point\n");
}*/
- ScrewVertIter_NEXT(lt_iter);
+ screwvert_iter_step(&lt_iter);
}
}
}
@@ -591,8 +600,8 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob,
*
* calculate vertex normals that can be propodated on lathing
* use edge connectivity work this out */
- if (vc->v[0]>=0) {
- if (vc->v[1]>=0) {
+ if (vc->v[0] >= 0) {
+ if (vc->v[1] >= 0) {
/* 2 edges connedted */
/* make 2 connecting vert locations relative to the middle vert */
sub_v3_v3v3(tmp_vec1, mvert_new[vc->v[0]].co, mvert_new[i].co);
@@ -647,34 +656,24 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob,
}
}
else {
+ mv_orig= mvert_orig;
+ mv_new= mvert_new;
- if (ltmd->flag & MOD_SCREW_NORMAL_FLIP) {
- mv_orig= mvert_orig;
- mv_new= mvert_new + (totvert-1);
-
- for (i=0; i < totvert; i++, mv_new--, mv_orig++) {
- copy_v3_v3(mv_new->co, mv_orig->co);
- }
- }
- else {
- mv_orig= mvert_orig;
- mv_new= mvert_new;
-
- for (i=0; i < totvert; i++, mv_new++, mv_orig++) {
- copy_v3_v3(mv_new->co, mv_orig->co);
- }
+ for (i=0; i < totvert; i++, mv_new++, mv_orig++) {
+ copy_v3_v3(mv_new->co, mv_orig->co);
}
}
/* done with edge connectivity based normal flipping */
+ DM_copy_vert_data(dm, result, 0, 0, totvert);
/* Add Faces */
- for (i=1; i < steps; i++) {
+ for (step=1; step < step_tot; step++) {
+ const int varray_stride= totvert * step;
float step_angle;
- float no_tx[3];
+ float nor_tx[3];
/* Rotation Matrix */
- if (close) step_angle= (angle / steps) * i;
- else step_angle= (angle / (steps-1)) * i;
+ step_angle= (angle / (step_tot - (!close))) * step;
if (ltmd->ob_axis) {
axis_angle_to_mat3(mat3, axis_vec, step_angle);
@@ -687,18 +686,21 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob,
}
if(screw_ofs)
- madd_v3_v3fl(mat[3], axis_vec, screw_ofs * ((float)i / (float)(steps-1)));
+ madd_v3_v3fl(mat[3], axis_vec, screw_ofs * ((float)step / (float)(step_tot-1)));
+ /* copy a slice */
+ DM_copy_vert_data(dm, result, 0, varray_stride, totvert);
+
mv_new_base= mvert_new;
- mv_new= &mvert_new[totvert*i]; /* advance to the next slice */
+ mv_new= &mvert_new[varray_stride]; /* advance to the next slice */
for (j=0; j<totvert; j++, mv_new_base++, mv_new++) {
/* set normal */
if(vert_connect) {
- mul_v3_m3v3(no_tx, mat3, vert_connect[j].no);
+ mul_v3_m3v3(nor_tx, mat3, vert_connect[j].no);
/* set the normal now its transformed */
- normal_float_to_short_v3(mv_new->no, no_tx);
+ normal_float_to_short_v3(mv_new->no, nor_tx);
}
/* set location */
@@ -719,7 +721,7 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob,
}
/* add the new edge */
- med_new->v1= j+(i*totvert);
+ med_new->v1= varray_stride + j;
med_new->v2= med_new->v1 - totvert;
med_new->flag= ME_EDGEDRAW|ME_EDGERENDER;
med_new++;
@@ -734,9 +736,11 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob,
if (close) {
/* last loop of edges, previous loop dosnt account for the last set of edges */
+ const int varray_stride= (step_tot - 1) * totvert;
+
for (i=0; i<totvert; i++) {
med_new->v1= i;
- med_new->v2= i+((steps-1)*totvert);
+ med_new->v2= varray_stride + i;
med_new->flag= ME_EDGEDRAW|ME_EDGERENDER;
med_new++;
}
@@ -749,14 +753,22 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob,
/* for each edge, make a cylinder of quads */
i1= med_new_firstloop->v1;
i2= med_new_firstloop->v2;
-
- for (j=0; j < steps-1; j++) {
+
+ for (step=0; step < step_tot-1; step++) {
/* new face */
- mf_new->v1= i1;
- mf_new->v2= i2;
- mf_new->v3= i2 + totvert;
- mf_new->v4= i1 + totvert;
+ if(do_flip) {
+ mf_new->v4= i1;
+ mf_new->v3= i2;
+ mf_new->v2= i2 + totvert;
+ mf_new->v1= i1 + totvert;
+ }
+ else {
+ mf_new->v1= i1;
+ mf_new->v2= i2;
+ mf_new->v3= i2 + totvert;
+ mf_new->v4= i1 + totvert;
+ }
if( !mf_new->v3 || !mf_new->v4 ) {
SWAP(int, mf_new->v1, mf_new->v3);
@@ -768,7 +780,7 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob,
mface_index++;
/* new vertical edge */
- if (j) { /* The first set is already dome */
+ if (step) { /* The first set is already dome */
med_new->v1= i1;
med_new->v2= i2;
med_new->flag= med_new_firstloop->flag;
@@ -781,10 +793,18 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob,
/* close the loop*/
if (close) {
- mf_new->v1= i1;
- mf_new->v2= i2;
- mf_new->v3= med_new_firstloop->v2;
- mf_new->v4= med_new_firstloop->v1;
+ if(do_flip) {
+ mf_new->v4= i1;
+ mf_new->v3= i2;
+ mf_new->v2= med_new_firstloop->v2;
+ mf_new->v1= med_new_firstloop->v1;
+ }
+ else {
+ mf_new->v1= i1;
+ mf_new->v2= i2;
+ mf_new->v3= med_new_firstloop->v2;
+ mf_new->v4= med_new_firstloop->v1;
+ }
if( !mf_new->v3 || !mf_new->v4 ) {
SWAP(int, mf_new->v1, mf_new->v3);
@@ -804,7 +824,7 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob,
med_new++;
}
- if((ltmd->flag & MOD_SCREW_NORMAL_CALC)==0) {
+ if((ltmd->flag & MOD_SCREW_NORMAL_CALC) == 0) {
CDDM_calc_normals(result);
}
diff --git a/source/blender/modifiers/intern/MOD_shrinkwrap.c b/source/blender/modifiers/intern/MOD_shrinkwrap.c
index 0b41267daa9..6526be4cb53 100644
--- a/source/blender/modifiers/intern/MOD_shrinkwrap.c
+++ b/source/blender/modifiers/intern/MOD_shrinkwrap.c
@@ -30,7 +30,7 @@
*
*/
-#include "string.h"
+#include <string.h>
#include "BKE_cdderivedmesh.h"
#include "BKE_modifier.h"
diff --git a/source/blender/modifiers/intern/MOD_solidify.c b/source/blender/modifiers/intern/MOD_solidify.c
index a6d99ad72ae..ee608c7cf31 100644
--- a/source/blender/modifiers/intern/MOD_solidify.c
+++ b/source/blender/modifiers/intern/MOD_solidify.c
@@ -442,11 +442,11 @@ static DerivedMesh *applyModifier(ModifierData *md,
j= 2;
}
- for(; j>=0; j--) {
+ do {
vidx = *(&mf->v1 + j);
vert_accum[vidx] += face_angles[j];
vert_angles[vidx]+= shell_angle_to_dist(angle_normalized_v3v3(vert_nors[vidx], face_nors[i])) * face_angles[j];
- }
+ } while(j--);
}
/* vertex group support */
diff --git a/source/blender/modifiers/intern/MOD_util.c b/source/blender/modifiers/intern/MOD_util.c
index 0e9fe81ffdc..f4342c56af5 100644
--- a/source/blender/modifiers/intern/MOD_util.c
+++ b/source/blender/modifiers/intern/MOD_util.c
@@ -18,7 +18,7 @@
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software Foundation;
- * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
* The Original Code is Copyright (C) 2005 Blender Foundation.
* All rights reserved.
@@ -30,7 +30,7 @@
* ***** END GPL LICENSE BLOCK *****
*/
-#include "string.h"
+#include <string.h>
#include "DNA_modifier_types.h"
#include "DNA_object_types.h"
diff --git a/source/blender/modifiers/intern/MOD_util.h b/source/blender/modifiers/intern/MOD_util.h
index 9592a3ce123..5750e042199 100644
--- a/source/blender/modifiers/intern/MOD_util.h
+++ b/source/blender/modifiers/intern/MOD_util.h
@@ -18,7 +18,7 @@
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software Foundation;
- * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
* Contributor(s): Ben Batt
*
diff --git a/source/blender/modifiers/intern/Makefile b/source/blender/modifiers/intern/Makefile
index 849bc11662e..94ea068a1bc 100644
--- a/source/blender/modifiers/intern/Makefile
+++ b/source/blender/modifiers/intern/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
# All rights reserved.
diff --git a/source/blender/nodes/CMakeLists.txt b/source/blender/nodes/CMakeLists.txt
index 3fe85e2dbb8..8d8423cc19b 100644
--- a/source/blender/nodes/CMakeLists.txt
+++ b/source/blender/nodes/CMakeLists.txt
@@ -26,16 +26,21 @@
FILE(GLOB SRC intern/*.c intern/CMP_nodes/*.c intern/SHD_nodes/*.c intern/TEX_nodes/*.c)
SET(INC
- . ../../../intern/guardedalloc ../editors/include ../blenlib ../makesdna
- ../render/extern/include ../../../intern/decimation/extern ../makesrna
- ../imbuf ../avi ../../../intern/elbeem/extern
- ../../../intern/iksolver/extern ../blenloader
- ../blenkernel ../../../extern/glew/include ../gpu
- ${ZLIB_INC}
+ .
+ ../blenkernel
+ ../blenlib
+ ../blenloader
+ ../gpu
+ ../imbuf
+ ../makesdna
+ ../makesrna
+ ../render/extern/include
+ ../../../intern/guardedalloc
+ ../../../extern/glew/include
)
IF(WIN32)
- SET(INC ${INC} ${PTHREADS_INC})
+ LIST(APPEND INC ${PTHREADS_INC})
ENDIF(WIN32)
IF(WITH_PYTHON)
diff --git a/source/blender/nodes/Makefile b/source/blender/nodes/Makefile
index a173908aeb1..f997e640a17 100644
--- a/source/blender/nodes/Makefile
+++ b/source/blender/nodes/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) Blender Foundation.
# All rights reserved.
diff --git a/source/blender/nodes/SConscript b/source/blender/nodes/SConscript
index 548f4973574..3e7e0dbe54c 100644
--- a/source/blender/nodes/SConscript
+++ b/source/blender/nodes/SConscript
@@ -20,19 +20,19 @@ incs += ' ' + env['BF_ZLIB_INC']
defs = []
if env['WITH_BF_PYTHON']:
- incs += ' ' + env['BF_PYTHON_INC']
- incs += ' ../python'
- if env['BF_DEBUG']:
- defs.append('_DEBUG')
+ incs += ' ' + env['BF_PYTHON_INC']
+ incs += ' ../python'
+ if env['BF_DEBUG']:
+ defs.append('_DEBUG')
else:
- defs.append('DISABLE_PYTHON')
+ defs.append('DISABLE_PYTHON')
if env['OURPLATFORM'] == 'linux2':
- cflags='-pthread'
- incs += ' ../../../extern/binreloc/include'
+ cflags='-pthread'
+ incs += ' ../../../extern/binreloc/include'
if env['OURPLATFORM'] in ('win32-vc', 'win32-mingw', 'linuxcross', 'win64-vc'):
- incs += ' ' + env['BF_PTHREADS_INC']
+ incs += ' ' + env['BF_PTHREADS_INC']
env.BlenderLib ( libname = 'bf_nodes', sources = sources, includes = Split(incs), defines = defs, libtype=['core','player'], priority = [190,105] )
env.BlenderLib ( libname = 'bf_cmpnodes', sources = cmpsources, includes = Split(incs), defines = defs, libtype=['core','player'], priority = [175,101] )
diff --git a/source/blender/nodes/intern/CMP_nodes/CMP_chromaMatte.c b/source/blender/nodes/intern/CMP_nodes/CMP_chromaMatte.c
index b081880b87b..e502129c3d3 100644
--- a/source/blender/nodes/intern/CMP_nodes/CMP_chromaMatte.c
+++ b/source/blender/nodes/intern/CMP_nodes/CMP_chromaMatte.c
@@ -44,20 +44,38 @@ static bNodeSocketType cmp_node_chroma_out[]={
static void do_rgba_to_ycca_normalized(bNode *node, float *out, float *in)
{
- /*normalize to the range -1.0 to 1.0) */
- rgb_to_ycc(in[0],in[1],in[2], &out[0], &out[1], &out[2], BLI_YCC_ITU_BT601);
- out[0]=((out[0])-16)/255.0;
- out[1]=((out[1])-128)/255.0;
- out[2]=((out[2])-128)/255.0;
+ rgb_to_ycc(in[0],in[1],in[2], &out[0], &out[1], &out[2], BLI_YCC_ITU_BT601);
+
+ //normalize to 0..1.0
+ out[0]=out[0]/255.0;
+ out[1]=out[1]/255.0;
+ out[2]=out[2]/255.0;
+
+ //rescale to -1.0..1.0
+ out[0]=(out[0]*2.0)-1.0;
+ out[1]=(out[1]*2.0)-1.0;
+ out[2]=(out[2]*2.0)-1.0;
+
+// out[0]=((out[0])-16)/255.0;
+// out[1]=((out[1])-128)/255.0;
+// out[2]=((out[2])-128)/255.0;
out[3]=in[3];
}
static void do_ycca_to_rgba_normalized(bNode *node, float *out, float *in)
{
- /*un-normalize the normalize from above */
- in[0]=(in[0]*255.0)+16;
- in[1]=(in[1]*255.0)+128;
- in[2]=(in[2]*255.0)+128;
+ /*un-normalize the normalize from above */
+ in[0]=(in[0]+1.0)/2.0;
+ in[1]=(in[1]+1.0)/2.0;
+ in[2]=(in[2]+1.0)/2.0;
+
+ in[0]=(in[0]*255.0);
+ in[1]=(in[1]*255.0);
+ in[2]=(in[2]*255.0);
+
+// in[0]=(in[0]*255.0)+16;
+// in[1]=(in[1]*255.0)+128;
+// in[2]=(in[2]*255.0)+128;
ycc_to_rgb(in[0],in[1],in[2], &out[0], &out[1], &out[2], BLI_YCC_ITU_BT601);
out[3]=in[3];
}
@@ -65,47 +83,41 @@ static void do_ycca_to_rgba_normalized(bNode *node, float *out, float *in)
static void do_chroma_key(bNode *node, float *out, float *in)
{
NodeChroma *c;
- float x, z, alpha;
- float theta, beta, angle;
- float kfg, newY, newCb, newCr;
+ float x, z, alpha;
+ float theta, beta, angle, angle2;
+ float kfg;
c=node->storage;
- /* Algorithm from book "Video Demistified" */
+ /* 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(c->key[2],c->key[1]);
+ theta=atan2(c->key[2], c->key[1]);
/*rotate the cb and cr into x/z space */
- x=in[1]*cos(theta)+in[2]*sin(theta);
- z=in[2]*cos(theta)-in[1]*sin(theta);
+ x=in[1]*cos(theta)+in[2]*sin(theta);
+ z=in[2]*cos(theta)-in[1]*sin(theta);
- /*if within the acceptance angle */
- angle=c->t1*M_PI/180.0; /* convert to radians */
+ /*if within the acceptance angle */
+ angle=c->t1*M_PI/180.0; /* convert to radians */
- /* if kfg is <0 then the pixel is outside of the key color */
- kfg=x-(fabs(z)/tan(angle/2.0));
+ /* if kfg is <0 then the pixel is outside of the key color */
+ kfg=x-(fabs(z)/tan(angle/2.0));
- if(kfg>0.0) { /* found a pixel that is within key color */
+ out[0]=in[0];
+ out[1]=in[1];
+ out[2]=in[2];
- newY=in[0]-(1-c->t3)*kfg;
- newCb=in[1]-kfg*cos((double)theta);
- newCr=in[2]-kfg*sin((double)theta);
- alpha=(kfg+c->fsize)*(c->fstrength);
+ if(kfg>0.0) { /* found a pixel that is within key color */
+ alpha=(1.0-kfg)*(c->fstrength);
- beta=atan2(newCr,newCb);
- beta=beta*180.0/M_PI; /* convert to degrees for compare*/
-
- /* if beta is within the clippin angle */
- if(fabs(beta)<(c->t2/2.0)) {
- newCb=0.0;
- newCr=0.0;
- alpha=0.0;
- }
+ beta=atan2(z,x);
+ angle2=c->t2*M_PI/180.0;
- out[0]=newY;
- out[1]=newCb;
- out[2]=newCr;
+ /* if beta is within the cutoff angle */
+ if(fabs(beta)<(angle2/2.0)) {
+ alpha=0.0;
+ }
/* don't make something that was more transparent less transparent */
if (alpha<in[3]) {
diff --git a/source/blender/nodes/intern/CMP_nodes/CMP_colorbalance.c b/source/blender/nodes/intern/CMP_nodes/CMP_colorbalance.c
index 43c6c6d791e..33f5680eaa9 100644
--- a/source/blender/nodes/intern/CMP_nodes/CMP_colorbalance.c
+++ b/source/blender/nodes/intern/CMP_nodes/CMP_colorbalance.c
@@ -43,15 +43,24 @@ static bNodeSocketType cmp_node_colorbalance_out[]={
{-1,0,""}
};
+/* this function implements ASC-CDL according to the spec at http://www.asctech.org/
+ Slope
+ S = in * slope
+ Offset
+ O = S + offset
+ = (in * slope) + offset
+ Power
+ out = Clamp(O) ^ power
+ = Clamp((in * slope) + offset) ^ power
+ */
DO_INLINE float colorbalance_cdl(float in, float offset, float power, float slope)
{
float x = in * slope + offset;
/* prevent NaN */
- if (x < 0.f) x = 0.f;
+ CLAMP(x, 0.0, 1.0);
- //powf(in * slope + offset, power)
- return powf(x, 1.f/power);
+ return powf(x, power);
}
/* note: lift_lgg is just 2-lift, gamma_inv is 1.0/gamma */
diff --git a/source/blender/nodes/intern/CMP_nodes/CMP_crop.c b/source/blender/nodes/intern/CMP_nodes/CMP_crop.c
index c2edb3dd52f..dd5ce88bd36 100644
--- a/source/blender/nodes/intern/CMP_nodes/CMP_crop.c
+++ b/source/blender/nodes/intern/CMP_nodes/CMP_crop.c
@@ -48,7 +48,14 @@ static void node_composit_exec_crop(void *data, bNode *node, bNodeStack **in, bN
CompBuf *stackbuf;
int x, y;
float *srcfp, *outfp;
- rcti outputrect;
+ rcti outputrect;
+
+ if(node->custom2) {
+ ntxy->x1= cbuf->x* ntxy->fac_x1;
+ ntxy->x2= cbuf->x* ntxy->fac_x2;
+ ntxy->y1= cbuf->y* ntxy->fac_y1;
+ ntxy->y2= cbuf->y* ntxy->fac_y2;
+ }
/* check input image size */
if(cbuf->x <= ntxy->x1 + 1)
diff --git a/source/blender/nodes/intern/CMP_nodes/CMP_displace.c b/source/blender/nodes/intern/CMP_nodes/CMP_displace.c
index 6fe6dcd8440..aa7fac81c2c 100644
--- a/source/blender/nodes/intern/CMP_nodes/CMP_displace.c
+++ b/source/blender/nodes/intern/CMP_nodes/CMP_displace.c
@@ -48,7 +48,7 @@ static bNodeSocketType cmp_node_displace_out[]= {
* in order to take effect */
#define DISPLACE_EPSILON 0.01
-static void do_displace(CompBuf *stackbuf, CompBuf *cbuf, CompBuf *vecbuf, float *veccol, float *xscale, float *yscale)
+static void do_displace(CompBuf *stackbuf, CompBuf *cbuf, CompBuf *vecbuf, float *veccol, CompBuf *xbuf, CompBuf *ybuf, float *xscale, float *yscale)
{
ImBuf *ibuf;
int x, y;
@@ -56,6 +56,7 @@ static void do_displace(CompBuf *stackbuf, CompBuf *cbuf, CompBuf *vecbuf, float
float d_dx, d_dy;
float dxt, dyt;
float u, v;
+ float xs, ys;
float vec[3], vecdx[3], vecdy[3];
float col[3];
@@ -66,11 +67,23 @@ static void do_displace(CompBuf *stackbuf, CompBuf *cbuf, CompBuf *vecbuf, float
for(x=0; x < stackbuf->x; x++) {
/* calc pixel coordinates */
qd_getPixel(vecbuf, x-vecbuf->xof, y-vecbuf->yof, vec);
- p_dx = vec[0] * xscale[0];
- p_dy = vec[1] * yscale[0];
+
+ if (xbuf)
+ qd_getPixel(xbuf, x-xbuf->xof, y-xbuf->yof, &xs);
+ else
+ xs = xscale[0];
+
+ if (ybuf)
+ qd_getPixel(ybuf, x-ybuf->xof, y-ybuf->yof, &ys);
+ else
+ ys = yscale[0];
+
+
+ p_dx = vec[0] * xs;
+ p_dy = vec[1] * ys;
/* if no displacement, then just copy this pixel */
- if (p_dx < DISPLACE_EPSILON && p_dy < DISPLACE_EPSILON) {
+ if (fabsf(p_dx) < DISPLACE_EPSILON && fabsf(p_dy) < DISPLACE_EPSILON) {
qd_getPixel(cbuf, x-cbuf->xof, y-cbuf->yof, col);
qd_setPixel(stackbuf, x, y, col);
continue;
@@ -84,12 +97,15 @@ static void do_displace(CompBuf *stackbuf, CompBuf *cbuf, CompBuf *vecbuf, float
/* calc derivatives */
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] * xscale[0];
- d_dy = vecdy[0] * yscale[0];
-
+ d_dx = vecdx[0] * xs;
+ d_dy = vecdy[0] * ys;
+
/* clamp derivatives to minimum displacement distance in UV space */
- dxt = MAX2(p_dx - d_dx, DISPLACE_EPSILON)/(float)stackbuf->x;
- dyt = MAX2(p_dy - d_dy, DISPLACE_EPSILON)/(float)stackbuf->y;
+ dxt = p_dx - d_dx;
+ dyt = p_dy - d_dy;
+
+ dxt = signf(dxt)*maxf(fabsf(dxt), DISPLACE_EPSILON)/(float)stackbuf->x;
+ dyt = signf(dyt)*maxf(fabsf(dyt), DISPLACE_EPSILON)/(float)stackbuf->y;
ibuf_sample(ibuf, u, v, dxt, dyt, col);
qd_setPixel(stackbuf, x, y, col);
@@ -132,13 +148,18 @@ static void node_composit_exec_displace(void *data, bNode *node, bNodeStack **in
if(in[0]->data && in[1]->data) {
CompBuf *cbuf= in[0]->data;
CompBuf *vecbuf= in[1]->data;
+ CompBuf *xbuf= in[2]->data;
+ CompBuf *ybuf= in[3]->data;
CompBuf *stackbuf;
cbuf= typecheck_compbuf(cbuf, CB_RGBA);
vecbuf= typecheck_compbuf(vecbuf, CB_VEC3);
+ xbuf= typecheck_compbuf(xbuf, CB_VAL);
+ ybuf= typecheck_compbuf(ybuf, CB_VAL);
+
stackbuf= alloc_compbuf(cbuf->x, cbuf->y, CB_RGBA, 1); /* allocs */
- do_displace(stackbuf, cbuf, vecbuf, in[1]->vec, in[2]->vec, in[3]->vec);
+ do_displace(stackbuf, cbuf, vecbuf, in[1]->vec, xbuf, ybuf, in[2]->vec, in[3]->vec);
out[0]->data= stackbuf;
diff --git a/source/blender/nodes/intern/CMP_nodes/CMP_image.c b/source/blender/nodes/intern/CMP_nodes/CMP_image.c
index 0bbf9c9bf85..9309d2939db 100644
--- a/source/blender/nodes/intern/CMP_nodes/CMP_image.c
+++ b/source/blender/nodes/intern/CMP_nodes/CMP_image.c
@@ -62,38 +62,56 @@ static CompBuf *node_composit_get_image(RenderData *rd, Image *ima, ImageUser *i
ImBuf *ibuf;
CompBuf *stackbuf;
int type;
-
+
+ float *rect;
+ int alloc= FALSE;
+
ibuf= BKE_image_get_ibuf(ima, iuser);
- if(ibuf==NULL)
+ if(ibuf==NULL || (ibuf->rect==NULL && ibuf->rect_float==NULL)) {
return NULL;
-
- if (!(rd->color_mgt_flag & R_COLOR_MANAGEMENT)) {
- int profile = IB_PROFILE_NONE;
-
- /* temporarily set profile to none to not disturb actual */
- SWAP(int, ibuf->profile, profile);
-
- if (ibuf->rect_float != NULL) {
- imb_freerectfloatImBuf(ibuf);
- }
- IMB_float_from_rect(ibuf);
-
- SWAP(int, ibuf->profile, profile);
}
-
+
if (ibuf->rect_float == NULL) {
IMB_float_from_rect(ibuf);
}
+ /* now we need a float buffer from the image
+ * with matching color management */
+ if(rd->color_mgt_flag & R_COLOR_MANAGEMENT) {
+ if(ibuf->profile != IB_PROFILE_NONE) {
+ rect= ibuf->rect_float;
+ }
+ else {
+ rect= MEM_mapallocN(sizeof(float) * 4 * ibuf->x * ibuf->y, "node_composit_get_image");
+ srgb_to_linearrgb_rgba_rgba_buf(rect, ibuf->rect_float, ibuf->x * ibuf->y);
+ alloc= TRUE;
+ }
+ }
+ else {
+ if(ibuf->profile == IB_PROFILE_NONE) {
+ rect= ibuf->rect_float;
+ }
+ else {
+ rect= MEM_mapallocN(sizeof(float) * 4 * ibuf->x * ibuf->y, "node_composit_get_image");
+ linearrgb_to_srgb_rgba_rgba_buf(rect, ibuf->rect_float, ibuf->x * ibuf->y);
+ alloc= TRUE;
+ }
+ }
+ /* done coercing into the correct color management */
+
+
type= ibuf->channels;
if(rd->scemode & R_COMP_CROP) {
- stackbuf= get_cropped_compbuf(&rd->disprect, ibuf->rect_float, ibuf->x, ibuf->y, type);
+ stackbuf= get_cropped_compbuf(&rd->disprect, rect, ibuf->x, ibuf->y, type);
+ if(alloc)
+ MEM_freeN(rect);
}
else {
/* we put imbuf copy on stack, cbuf knows rect is from other ibuf when freed! */
- stackbuf= alloc_compbuf(ibuf->x, ibuf->y, type, 0);
- stackbuf->rect= ibuf->rect_float;
+ stackbuf= alloc_compbuf(ibuf->x, ibuf->y, type, FALSE);
+ stackbuf->rect= rect;
+ stackbuf->malloc= alloc;
}
/*code to respect the premul flag of images; I'm
diff --git a/source/blender/nodes/intern/CMP_nodes/CMP_levels.c b/source/blender/nodes/intern/CMP_nodes/CMP_levels.c
index f550bead4cf..f4934b4b57b 100644
--- a/source/blender/nodes/intern/CMP_nodes/CMP_levels.c
+++ b/source/blender/nodes/intern/CMP_nodes/CMP_levels.c
@@ -47,7 +47,7 @@ static void rgb_tobw(float r, float g, float b, float* out)
*out= r*0.35f + g*0.45f + b*0.2f;
}
-static void fill_bins(bNode* node, CompBuf* in, int* bins)
+static void fill_bins(bNode* node, CompBuf* in, int* bins, int colorcor)
{
float value[4];
int ivalue=0;
@@ -63,29 +63,39 @@ static void fill_bins(bNode* node, CompBuf* in, int* bins)
if(value[3] > 0.0) { /* don't count transparent pixels */
switch(node->custom1) {
case 1: { /* all colors */
+ if(colorcor)
+ linearrgb_to_srgb_v3_v3(&value[0],&value[0]);
rgb_tobw(value[0],value[1],value[2], &value[0]);
value[0]=value[0]*255; /* scale to 0-255 range */
ivalue=(int)value[0];
break;
}
case 2: { /* red channel */
+ if(colorcor)
+ value[0]=linearrgb_to_srgb(value[0]);
value[0]=value[0]*255; /* scale to 0-255 range */
ivalue=(int)value[0];
break;
}
case 3: { /* green channel */
+ if(colorcor)
+ value[1]=linearrgb_to_srgb(value[1]);
value[1]=value[1]*255; /* scale to 0-255 range */
ivalue=(int)value[1];
break;
}
case 4: /*blue channel */
{
+ if(colorcor)
+ value[2]=linearrgb_to_srgb(value[2]);
value[2]=value[2]*255; /* scale to 0-255 range */
ivalue=(int)value[2];
break;
}
case 5: /* luminence */
{
+ if(colorcor)
+ linearrgb_to_srgb_v3_v3(&value[0],&value[0]);
rgb_to_yuv(value[0],value[1],value[2], &value[0], &value[1], &value[2]);
value[0]=value[0]*255; /* scale to 0-255 range */
ivalue=(int)value[0];
@@ -270,6 +280,7 @@ static void node_composit_exec_view_levels(void *data, bNode *node, bNodeStack *
{
CompBuf* cbuf;
CompBuf* histogram;
+ RenderData *rd=data;
float mean, std_dev;
int bins[256];
int x;
@@ -286,7 +297,7 @@ static void node_composit_exec_view_levels(void *data, bNode *node, bNodeStack *
}
/*fill bins */
- fill_bins(node, in[0]->data, bins);
+ fill_bins(node, in[0]->data, bins, rd->color_mgt_flag & R_COLOR_MANAGEMENT);
/* draw the histogram chart */
draw_histogram(node, histogram, bins);
diff --git a/source/blender/nodes/intern/CMP_nodes/CMP_rotate.c b/source/blender/nodes/intern/CMP_nodes/CMP_rotate.c
index 4103981af46..ccb1d8abfd9 100644
--- a/source/blender/nodes/intern/CMP_nodes/CMP_rotate.c
+++ b/source/blender/nodes/intern/CMP_nodes/CMP_rotate.c
@@ -71,7 +71,7 @@ static void node_composit_exec_rotate(void *data, bNode *node, bNodeStack **in,
ibuf=IMB_allocImBuf(cbuf->x, cbuf->y, 32, 0, 0);
obuf=IMB_allocImBuf(stackbuf->x, stackbuf->y, 32, 0, 0);
- if(ibuf){
+ if(ibuf && obuf){
ibuf->rect_float=cbuf->rect;
obuf->rect_float=stackbuf->rect;
@@ -103,6 +103,9 @@ static void node_composit_exec_rotate(void *data, bNode *node, bNodeStack **in,
centx= (float)cbuf->xof; centy= (float)cbuf->yof;
stackbuf->xof= (int)( c*centx + s*centy);
stackbuf->yof= (int)(-s*centx + c*centy);
+
+ IMB_freeImBuf(ibuf);
+ IMB_freeImBuf(obuf);
}
/* pass on output and free */
diff --git a/source/blender/nodes/intern/CMP_nodes/CMP_sepcombHSVA.c b/source/blender/nodes/intern/CMP_nodes/CMP_sepcombHSVA.c
index d80dd9b0a4b..0ac47c58ab3 100644
--- a/source/blender/nodes/intern/CMP_nodes/CMP_sepcombHSVA.c
+++ b/source/blender/nodes/intern/CMP_nodes/CMP_sepcombHSVA.c
@@ -64,7 +64,7 @@ static void node_composit_exec_sephsva(void *data, bNode *node, bNodeStack **in,
if(in[0]->data==NULL) {
float h, s, v;
- rgb_to_hsv(in[0]->vec[0], in[0]->vec[1], in[0]->vec[2], &h, &s, &v);
+ rgb_to_hsv(in[0]->vec[0], in[0]->vec[1], in[0]->vec[2], &h, &s, &v);
out[0]->vec[0] = h;
out[1]->vec[0] = s;
diff --git a/source/blender/nodes/intern/CMP_nodes/Makefile b/source/blender/nodes/intern/CMP_nodes/Makefile
index 5e8753570af..5e97864fb95 100644
--- a/source/blender/nodes/intern/CMP_nodes/Makefile
+++ b/source/blender/nodes/intern/CMP_nodes/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
# All rights reserved.
diff --git a/source/blender/nodes/intern/CMP_util.c b/source/blender/nodes/intern/CMP_util.c
index bcb038bccc3..9edcc8b0eec 100644
--- a/source/blender/nodes/intern/CMP_util.c
+++ b/source/blender/nodes/intern/CMP_util.c
@@ -62,7 +62,7 @@ CompBuf *dupalloc_compbuf(CompBuf *cbuf)
{
CompBuf *dupbuf= alloc_compbuf(cbuf->x, cbuf->y, cbuf->type, 1);
if(dupbuf) {
- memcpy(dupbuf->rect, cbuf->rect, cbuf->type*sizeof(float)*cbuf->x*cbuf->y);
+ memmove(dupbuf->rect, cbuf->rect, cbuf->type*sizeof(float)*cbuf->x*cbuf->y);
dupbuf->xof= cbuf->xof;
dupbuf->yof= cbuf->yof;
diff --git a/source/blender/nodes/intern/Makefile b/source/blender/nodes/intern/Makefile
index 08f4b936c76..1ffc09bce2c 100644
--- a/source/blender/nodes/intern/Makefile
+++ b/source/blender/nodes/intern/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
# All rights reserved.
diff --git a/source/blender/nodes/intern/SHD_nodes/Makefile b/source/blender/nodes/intern/SHD_nodes/Makefile
index b6b21d5f5f8..666ffd4a7d3 100644
--- a/source/blender/nodes/intern/SHD_nodes/Makefile
+++ b/source/blender/nodes/intern/SHD_nodes/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
# All rights reserved.
diff --git a/source/blender/nodes/intern/TEX_nodes/Makefile b/source/blender/nodes/intern/TEX_nodes/Makefile
index f42660bd562..74eabe7932a 100644
--- a/source/blender/nodes/intern/TEX_nodes/Makefile
+++ b/source/blender/nodes/intern/TEX_nodes/Makefile
@@ -18,7 +18,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
# All rights reserved.
diff --git a/source/blender/python/CMakeLists.txt b/source/blender/python/CMakeLists.txt
index 3c79e9d3056..adb60528f51 100644
--- a/source/blender/python/CMakeLists.txt
+++ b/source/blender/python/CMakeLists.txt
@@ -36,6 +36,7 @@ SET(INC
../windowmanager
../editors/include
../../../intern/guardedalloc
+ ../../../intern/audaspace/intern
${PYTHON_INC}
)
@@ -45,4 +46,3 @@ IF(WITH_BUILDINFO)
ENDIF(WITH_BUILDINFO)
BLENDERLIB(bf_python "${SRC}" "${INC}")
-
diff --git a/source/blender/python/Makefile b/source/blender/python/Makefile
index 8e2a04b8449..43b6f91369b 100644
--- a/source/blender/python/Makefile
+++ b/source/blender/python/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) Blender Foundation.
# All rights reserved.
diff --git a/source/blender/python/SConscript b/source/blender/python/SConscript
index 17189341136..315fc5ca9a3 100644
--- a/source/blender/python/SConscript
+++ b/source/blender/python/SConscript
@@ -6,19 +6,19 @@ sources = env.Glob('intern/*.c')
incs = '. ../editors/include ../makesdna ../makesrna ../blenlib ../blenkernel ../nodes'
incs += ' ../imbuf ../blenloader ../render/extern/include ../windowmanager'
incs += ' #intern/guardedalloc #intern/memutil #extern/glew/include'
-incs += ' ' + env['BF_PYTHON_INC']
+incs += ' #intern/audaspace/intern ' + env['BF_PYTHON_INC']
defs = []
if env['BF_BUILDINFO']:
- defs.append('BUILD_DATE')
+ defs.append('BUILD_DATE')
if env['OURPLATFORM'] in ('win32-mingw', 'win32-vc','win64-vc') and env['BF_DEBUG']:
- defs.append('_DEBUG')
+ defs.append('_DEBUG')
env.BlenderLib( libname = 'bf_python', sources = Split(sources), includes = Split(incs), defines = defs, libtype = ['core','player'], priority = [361,160])
# generic
sources = env.Glob('generic/*.c')
-env.BlenderLib( libname = 'bf_gen_python', sources = Split(sources), includes = Split(incs), defines = defs, libtype = ['core','player'], priority = [362,165]) # ketsji is 360
+env.BlenderLib( libname = 'bf_python_ext', sources = Split(sources), includes = Split(incs), defines = defs, libtype = ['core','player'], priority = [362,165]) # ketsji is 360
diff --git a/source/blender/python/doc/epy/Geometry.py b/source/blender/python/doc/epy/Geometry.py
index f8752a135c3..d0c4dfdfd8d 100644
--- a/source/blender/python/doc/epy/Geometry.py
+++ b/source/blender/python/doc/epy/Geometry.py
@@ -186,4 +186,4 @@ def BezierInterp(vec_knot_1, vec_handle_1, vec_handle_2, vec_knot_2, resolution)
@note: any vector size is supported, the largest dimension from the input will be used for all returned vectors/
@rtype: list
@return: a list of vectors the size of resolution including the start and end points (vec_knot_1 and vec_knot_2)
- """ \ No newline at end of file
+ """
diff --git a/source/blender/python/doc/epy/IDProp.py b/source/blender/python/doc/epy/IDProp.py
index 01d5136cd70..1fc26d7f65b 100644
--- a/source/blender/python/doc/epy/IDProp.py
+++ b/source/blender/python/doc/epy/IDProp.py
@@ -129,4 +129,4 @@ class IDArray:
def __len__():
pass
- \ No newline at end of file
+
diff --git a/source/blender/python/doc/examples/mathutils.Euler.py b/source/blender/python/doc/examples/mathutils.Euler.py
index f8294ce5545..bc7702c1d53 100644
--- a/source/blender/python/doc/examples/mathutils.Euler.py
+++ b/source/blender/python/doc/examples/mathutils.Euler.py
@@ -1,3 +1,3 @@
import mathutils
-# todo \ No newline at end of file
+# todo
diff --git a/source/blender/python/doc/examples/mathutils.Matrix.py b/source/blender/python/doc/examples/mathutils.Matrix.py
index f8294ce5545..bc7702c1d53 100644
--- a/source/blender/python/doc/examples/mathutils.Matrix.py
+++ b/source/blender/python/doc/examples/mathutils.Matrix.py
@@ -1,3 +1,3 @@
import mathutils
-# todo \ No newline at end of file
+# todo
diff --git a/source/blender/python/doc/examples/mathutils.Quaternion.py b/source/blender/python/doc/examples/mathutils.Quaternion.py
index f8294ce5545..bc7702c1d53 100644
--- a/source/blender/python/doc/examples/mathutils.Quaternion.py
+++ b/source/blender/python/doc/examples/mathutils.Quaternion.py
@@ -1,3 +1,3 @@
import mathutils
-# todo \ No newline at end of file
+# todo
diff --git a/source/blender/python/doc/examples/mathutils.py b/source/blender/python/doc/examples/mathutils.py
index 4a5de5887c9..02f69515f21 100644
--- a/source/blender/python/doc/examples/mathutils.py
+++ b/source/blender/python/doc/examples/mathutils.py
@@ -3,8 +3,8 @@ from math import radians
vec = mathutils.Vector((1.0, 2.0, 3.0))
-mat_rot = mathutils.RotationMatrix(radians(90), 4, 'X')
-mat_trans = mathutils.TranslationMatrix(vec)
+mat_rot = mathutils.Matrix.Rotation(radians(90), 4, 'X')
+mat_trans = mathutils.Matrix.Translation(vec)
mat = mat_trans * mat_rot
mat.invert()
@@ -15,4 +15,4 @@ quat2 = mat3.to_quat()
angle = quat1.difference(quat2)
-print(angle) \ No newline at end of file
+print(angle)
diff --git a/source/blender/python/doc/sphinx_doc_gen.py b/source/blender/python/doc/sphinx_doc_gen.py
index 04fdedd8c8f..b20cd74f82a 100644
--- a/source/blender/python/doc/sphinx_doc_gen.py
+++ b/source/blender/python/doc/sphinx_doc_gen.py
@@ -45,6 +45,7 @@ import rna_info
reload(rna_info)
# lame, python wont give some access
+ClassMethodDescriptorType = type(dict.__dict__['fromkeys'])
MethodDescriptorType = type(dict.get)
GetSetDescriptorType = type(int.real)
@@ -143,7 +144,9 @@ def pyfunc2sphinx(ident, fw, identifier, py_func, is_class=True):
def py_descr2sphinx(ident, fw, descr, module_name, type_name, identifier):
-
+ if identifier.startswith("_"):
+ return
+
doc = descr.__doc__
if not doc:
doc = undocumented_message(module_name, type_name, identifier)
@@ -151,10 +154,10 @@ def py_descr2sphinx(ident, fw, descr, module_name, type_name, identifier):
if type(descr) == GetSetDescriptorType:
fw(ident + ".. attribute:: %s\n\n" % identifier)
write_indented_lines(ident + " ", fw, doc, False)
- elif type(descr) == MethodDescriptorType: # GetSetDescriptorType's are not documented yet
+ elif type(descr) in (MethodDescriptorType, ClassMethodDescriptorType):
write_indented_lines(ident, fw, doc, False)
else:
- raise TypeError("type was not GetSetDescriptorType or MethodDescriptorType")
+ raise TypeError("type was not GetSetDescriptorType, MethodDescriptorType or ClassMethodDescriptorType")
write_example_ref(ident, fw, module_name + "." + type_name + "." + identifier)
fw("\n")
@@ -268,7 +271,11 @@ def pymodule2sphinx(BASEPATH, module_name, module, title):
descr_items = [(key, descr) for key, descr in sorted(value.__dict__.items()) if not key.startswith("__")]
for key, descr in descr_items:
- if type(descr) == MethodDescriptorType: # GetSetDescriptorType's are not documented yet
+ if type(descr) == ClassMethodDescriptorType:
+ py_descr2sphinx(" ", fw, descr, module_name, type_name, key)
+
+ for key, descr in descr_items:
+ if type(descr) == MethodDescriptorType:
py_descr2sphinx(" ", fw, descr, module_name, type_name, key)
for key, descr in descr_items:
@@ -300,6 +307,9 @@ def rna2sphinx(BASEPATH):
if bpy.app.build_revision != "Unknown":
version_string = version_string + " r" + bpy.app.build_revision
+ # for use with files
+ version_string_fp = "_".join(str(v) for v in bpy.app.version)
+
fw("project = 'Blender'\n")
# fw("master_doc = 'index'\n")
fw("copyright = u'Blender Foundation'\n")
@@ -329,7 +339,7 @@ def rna2sphinx(BASEPATH):
fw("\n")
fw("An introduction to Blender and Python can be found at <http://wiki.blender.org/index.php/Dev:2.5/Py/API/Intro>\n")
fw("\n")
- fw("`A PDF version of this document is also available <blender_python_reference_250.pdf>`__\n")
+ fw("`A PDF version of this document is also available <blender_python_reference_%s.pdf>`__\n" % version_string_fp)
fw("\n")
fw(".. warning:: The Python API in Blender is **UNSTABLE**, It should only be used for testing, any script written now may break in future releases.\n")
fw(" \n")
@@ -346,6 +356,7 @@ def rna2sphinx(BASEPATH):
fw(" * data API, access to attributes of blender data such as mesh verts, material color, timeline frames and scene objects\n")
fw(" * user interface functions for defining buttons, creation of menus, headers, panels\n")
fw(" * modules: bgl, mathutils and geometry\n")
+ fw(" * game engine modules\n")
fw("\n")
fw("===================\n")
@@ -360,6 +371,7 @@ def rna2sphinx(BASEPATH):
# py modules
fw(" bpy.utils.rst\n\n")
+ fw(" bpy.path.rst\n\n")
fw(" bpy.app.rst\n\n")
# C modules
@@ -375,6 +387,7 @@ def rna2sphinx(BASEPATH):
fw(" mathutils.rst\n\n")
fw(" blf.rst\n\n")
+ fw(" aud.rst\n\n")
# game engine
fw("===================\n")
@@ -430,7 +443,7 @@ def rna2sphinx(BASEPATH):
fw("\n")
fw(" Access to blenders internal data\n")
fw("\n")
- fw(" :type: :class:`bpy.types.Main`\n")
+ fw(" :type: :class:`bpy.types.BlendData`\n")
file.close()
EXAMPLE_SET_USED.add("bpy.data")
@@ -440,6 +453,9 @@ def rna2sphinx(BASEPATH):
from bpy import utils as module
pymodule2sphinx(BASEPATH, "bpy.utils", module, "Utilities (bpy.utils)")
+ from bpy import path as module
+ pymodule2sphinx(BASEPATH, "bpy.path", module, "Path Utilities (bpy.path)")
+
# C modules
from bpy import app as module
pymodule2sphinx(BASEPATH, "bpy.app", module, "Application Data (bpy.app)")
@@ -454,6 +470,10 @@ def rna2sphinx(BASEPATH):
import blf as module
pymodule2sphinx(BASEPATH, "blf", module, "Font Drawing (blf)")
del module
+
+ import aud as module
+ pymodule2sphinx(BASEPATH, "aud", module, "Audio System (aud)")
+ del module
# game engine
import shutil
@@ -490,7 +510,7 @@ def rna2sphinx(BASEPATH):
type_descr = prop.get_type_description(**kwargs)
if prop.name or prop.description:
- fw(ident + ":%s%s: %s\n" % (id_name, identifier, ", ".join([val for val in (prop.name, prop.description) if val])))
+ fw(ident + ":%s%s: %s\n" % (id_name, identifier, ", ".join(val for val in (prop.name, prop.description) if val)))
fw(ident + ":%s%s: %s\n" % (id_type, identifier, type_descr))
def write_struct(struct):
@@ -532,12 +552,12 @@ def rna2sphinx(BASEPATH):
else:
fw("base class --- ")
- fw(", ".join([(":class:`%s`" % base_id) for base_id in base_ids]))
+ fw(", ".join((":class:`%s`" % base_id) for base_id in base_ids))
fw("\n\n")
subclass_ids = [s.identifier for s in structs.values() if s.base is struct if not rna_info.rna_id_ignore(s.identifier)]
if subclass_ids:
- fw("subclasses --- \n" + ", ".join([(":class:`%s`" % s) for s in subclass_ids]) + "\n\n")
+ fw("subclasses --- \n" + ", ".join((":class:`%s`" % s) for s in subclass_ids) + "\n\n")
base_id = getattr(struct.base, "identifier", "")
@@ -575,9 +595,9 @@ def rna2sphinx(BASEPATH):
del py_properties, py_prop
for func in struct.functions:
- args_str = ", ".join([prop.get_arg_default(force=False) for prop in func.args])
+ args_str = ", ".join(prop.get_arg_default(force=False) for prop in func.args)
- fw(" .. method:: %s(%s)\n\n" % (func.identifier, args_str))
+ fw(" .. %s:: %s(%s)\n\n" % ("classmethod" if func.is_classmethod else "method", func.identifier, args_str))
fw(" %s\n\n" % func.description)
for prop in func.args:
@@ -586,7 +606,7 @@ def rna2sphinx(BASEPATH):
if len(func.return_values) == 1:
write_param(" ", fw, func.return_values[0], is_return=True)
elif func.return_values: # multiple return values
- fw(" :return (%s):\n" % ", ".join([prop.identifier for prop in func.return_values]))
+ fw(" :return (%s):\n" % ", ".join(prop.identifier for prop in func.return_values))
for prop in func.return_values:
type_descr = prop.get_type_description(as_ret=True, class_fmt=":class:`%s`")
descr = prop.description
@@ -619,20 +639,24 @@ def rna2sphinx(BASEPATH):
if _BPY_STRUCT_FAKE:
for key, descr in descr_items:
if type(descr) == GetSetDescriptorType:
- lines.append("* :class:`%s.%s`\n" % (_BPY_STRUCT_FAKE, key))
+ lines.append(" * :class:`%s.%s`\n" % (_BPY_STRUCT_FAKE, key))
for base in bases:
for prop in base.properties:
- lines.append("* :class:`%s.%s`\n" % (base.identifier, prop.identifier))
+ lines.append(" * :class:`%s.%s`\n" % (base.identifier, prop.identifier))
for identifier, py_prop in base.get_py_properties():
- lines.append("* :class:`%s.%s`\n" % (base.identifier, identifier))
+ lines.append(" * :class:`%s.%s`\n" % (base.identifier, identifier))
for identifier, py_prop in base.get_py_properties():
- lines.append("* :class:`%s.%s`\n" % (base.identifier, identifier))
+ lines.append(" * :class:`%s.%s`\n" % (base.identifier, identifier))
if lines:
fw(".. rubric:: Inherited Properties\n\n")
+
+ fw(".. hlist::\n")
+ fw(" :columns: 2\n\n")
+
for line in lines:
fw(line)
fw("\n")
@@ -644,16 +668,20 @@ def rna2sphinx(BASEPATH):
if _BPY_STRUCT_FAKE:
for key, descr in descr_items:
if type(descr) == MethodDescriptorType:
- lines.append("* :class:`%s.%s`\n" % (_BPY_STRUCT_FAKE, key))
+ lines.append(" * :class:`%s.%s`\n" % (_BPY_STRUCT_FAKE, key))
for base in bases:
for func in base.functions:
- lines.append("* :class:`%s.%s`\n" % (base.identifier, func.identifier))
+ lines.append(" * :class:`%s.%s`\n" % (base.identifier, func.identifier))
for identifier, py_func in base.get_py_functions():
- lines.append("* :class:`%s.%s`\n" % (base.identifier, identifier))
+ lines.append(" * :class:`%s.%s`\n" % (base.identifier, identifier))
if lines:
fw(".. rubric:: Inherited Functions\n\n")
+
+ fw(".. hlist::\n")
+ fw(" :columns: 2\n\n")
+
for line in lines:
fw(line)
fw("\n")
@@ -665,11 +693,14 @@ def rna2sphinx(BASEPATH):
# use this otherwise it gets in the index for a normal heading.
fw(".. rubric:: References\n\n")
+ fw(".. hlist::\n")
+ fw(" :columns: 2\n\n")
+
for ref in struct.references:
ref_split = ref.split(".")
if len(ref_split) > 2:
ref = ref_split[-2] + "." + ref_split[-1]
- fw("* :class:`%s`\n" % ref)
+ fw(" * :class:`%s`\n" % ref)
fw("\n")
@@ -693,7 +724,7 @@ def rna2sphinx(BASEPATH):
subclass_ids = [s.identifier for s in structs.values() if s.base is None if not rna_info.rna_id_ignore(s.identifier)]
if subclass_ids:
- fw("subclasses --- \n" + ", ".join([(":class:`%s`" % s) for s in sorted(subclass_ids)]) + "\n\n")
+ fw("subclasses --- \n" + ", ".join((":class:`%s`" % s) for s in sorted(subclass_ids)) + "\n\n")
fw(".. class:: %s\n\n" % _BPY_STRUCT_FAKE)
fw(" built-in base class for all classes in bpy.types.\n\n")
@@ -731,7 +762,7 @@ def rna2sphinx(BASEPATH):
fw(".. module:: bpy.ops.%s\n\n" % op.module_name)
last_mod = op.module_name
- args_str = ", ".join([prop.get_arg_default(force=True) for prop in op.args])
+ args_str = ", ".join(prop.get_arg_default(force=True) for prop in op.args)
fw(".. function:: %s(%s)\n\n" % (op.func_name, args_str))
# if the description isn't valid, we output the standard warning
@@ -755,7 +786,8 @@ def rna2sphinx(BASEPATH):
file.close()
-if __name__ == '__main__':
+def main():
+ import bpy
if 'bpy' not in dir():
print("\nError, this script must run from inside blender2.5")
print(script_help_msg)
@@ -825,3 +857,6 @@ if __name__ == '__main__':
import sys
sys.exit()
+
+if __name__ == '__main__':
+ main()
diff --git a/source/blender/python/doc/sphinx_doc_gen.sh b/source/blender/python/doc/sphinx_doc_gen.sh
index 4f5f55af2bd..989424ba7eb 100755
--- a/source/blender/python/doc/sphinx_doc_gen.sh
+++ b/source/blender/python/doc/sphinx_doc_gen.sh
@@ -5,7 +5,12 @@
BLENDER="./blender.bin"
SSH_HOST="ideasman42@emo.blender.org"
-SSH_UPLOAD="/data/www/vhosts/www.blender.org/documentation/250PythonDoc"
+SSH_UPLOAD="/data/www/vhosts/www.blender.org/documentation" # blender_python_api_VERSION, added after
+
+# sed string from hell, 'Blender 2.53 (sub 1) Build' --> '2_53_1'
+# "_".join(str(v) for v in bpy.app.version)
+BLENDER_VERSION=`$BLENDER --version | cut -f2-4 -d" " | sed 's/(//g' | sed 's/)//g' | sed 's/ sub /./g' | sed 's/\./_/g'`
+SSH_UPLOAD_FULL=$SSH_UPLOAD/"blender_python_api_"$BLENDER_VERSION
# dont delete existing docs, now partial updates are used for quick builds.
$BLENDER --background --python ./source/blender/python/doc/sphinx_doc_gen.py
@@ -13,12 +18,12 @@ $BLENDER --background --python ./source/blender/python/doc/sphinx_doc_gen.py
# html
sphinx-build source/blender/python/doc/sphinx-in source/blender/python/doc/sphinx-out
cp source/blender/python/doc/sphinx-out/contents.html source/blender/python/doc/sphinx-out/index.html
-ssh ideasman42@emo.blender.org 'rm -rf '$SSH_UPLOAD'/*'
-rsync --progress -avze "ssh -p 22" /b/source/blender/python/doc/sphinx-out/* $SSH_HOST:$SSH_UPLOAD/
+ssh ideasman42@emo.blender.org 'rm -rf '$SSH_UPLOAD_FULL'/*'
+rsync --progress -avze "ssh -p 22" /b/source/blender/python/doc/sphinx-out/* $SSH_HOST:$SSH_UPLOAD_FULL/
# pdf
sphinx-build -b latex source/blender/python/doc/sphinx-in source/blender/python/doc/sphinx-out
cd source/blender/python/doc/sphinx-out
make
cd ../../../../../
-rsync --progress -avze "ssh -p 22" source/blender/python/doc/sphinx-out/contents.pdf $SSH_HOST:$SSH_UPLOAD/blender_python_reference_250.pdf
+rsync --progress -avze "ssh -p 22" source/blender/python/doc/sphinx-out/contents.pdf $SSH_HOST:$SSH_UPLOAD_FULL/blender_python_reference_$BLENDER_VERSION.pdf
diff --git a/source/blender/python/generic/CMakeLists.txt b/source/blender/python/generic/CMakeLists.txt
index b6985458d0c..1a91abfbec8 100644
--- a/source/blender/python/generic/CMakeLists.txt
+++ b/source/blender/python/generic/CMakeLists.txt
@@ -31,4 +31,4 @@ SET(INC
${PYTHON_INC}
)
-BLENDERLIB(bf_gen_python "${SRC}" "${INC}")
+BLENDERLIB(bf_python_ext "${SRC}" "${INC}")
diff --git a/source/blender/python/generic/IDProp.c b/source/blender/python/generic/IDProp.c
index ba563f9fcbf..2a07ab3bc90 100644
--- a/source/blender/python/generic/IDProp.c
+++ b/source/blender/python/generic/IDProp.c
@@ -27,6 +27,15 @@
#include "IDProp.h"
#include "MEM_guardedalloc.h"
+#define USE_STRING_COERCE
+
+#ifdef USE_STRING_COERCE
+#include "py_capi_utils.h"
+#endif
+
+PyObject * PyC_UnicodeFromByte(const char *str);
+const char * PuC_UnicodeAsByte(PyObject *py_str, PyObject **coerce); /* coerce must be NULL */
+
/*** Function to wrap ID properties ***/
PyObject *BPy_Wrap_IDProperty(ID *id, IDProperty *prop, IDProperty *parent);
@@ -46,7 +55,11 @@ PyObject *BPy_IDGroup_WrapData( ID *id, IDProperty *prop )
{
switch ( prop->type ) {
case IDP_STRING:
- return PyUnicode_FromString( prop->data.pointer );
+#ifdef USE_STRING_COERCE
+ return PyC_UnicodeFromByte(prop->data.pointer);
+#else
+ return PyUnicode_FromString(prop->data.pointer);
+#endif
case IDP_INT:
return PyLong_FromLong( (long)prop->data.val );
case IDP_FLOAT:
@@ -105,10 +118,25 @@ int BPy_IDGroup_SetData(BPy_IDProperty *self, IDProperty *prop, PyObject *value)
PyErr_SetString(PyExc_TypeError, "expected a string!");
return -1;
}
+#ifdef USE_STRING_COERCE
+ {
+ int alloc_len;
+ PyObject *value_coerce= NULL;
+ st= (char *)PuC_UnicodeAsByte(value, &value_coerce);
+ alloc_len= strlen(st) + 1;
+
+ st = _PyUnicode_AsString(value);
+ IDP_ResizeArray(prop, alloc_len);
+ memcpy(prop->data.pointer, st, alloc_len);
+ Py_XDECREF(value_coerce);
+ }
+#else
st = _PyUnicode_AsString(value);
IDP_ResizeArray(prop, strlen(st)+1);
strcpy(prop->data.pointer, st);
+#endif
+
return 0;
}
@@ -281,8 +309,15 @@ char *BPy_IDProperty_Map_ValidateAndCreate(char *name, IDProperty *group, PyObje
val.i = (int) PyLong_AsSsize_t(ob);
prop = IDP_New(IDP_INT, val, name);
} else if (PyUnicode_Check(ob)) {
+#ifdef USE_STRING_COERCE
+ PyObject *value_coerce= NULL;
+ val.str = (char *)PuC_UnicodeAsByte(ob, &value_coerce);
+ prop = IDP_New(IDP_STRING, val, name);
+ Py_XDECREF(value_coerce);
+#else
val.str = _PyUnicode_AsString(ob);
prop = IDP_New(IDP_STRING, val, name);
+#endif
} else if (PySequence_Check(ob)) {
PyObject *item;
int i;
@@ -432,7 +467,11 @@ static PyObject *BPy_IDGroup_MapDataToPy(IDProperty *prop)
{
switch (prop->type) {
case IDP_STRING:
+#ifdef USE_STRING_COERCE
+ return PyC_UnicodeFromByte(prop->data.pointer);
+#else
return PyUnicode_FromString(prop->data.pointer);
+#endif
break;
case IDP_FLOAT:
return PyFloat_FromDouble(*((float*)&prop->data.val));
diff --git a/source/blender/python/generic/Makefile b/source/blender/python/generic/Makefile
index dc674478dab..0df98046f63 100644
--- a/source/blender/python/generic/Makefile
+++ b/source/blender/python/generic/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
# All rights reserved.
diff --git a/source/blender/python/generic/bgl.c b/source/blender/python/generic/bgl.c
index bb0b3a43186..8ac2107f8d2 100644
--- a/source/blender/python/generic/bgl.c
+++ b/source/blender/python/generic/bgl.c
@@ -1117,7 +1117,7 @@ PyObject *BGL_Init(void)
{
PyObject *mod, *dict, *item;
mod = PyModule_Create(&BGL_module_def);
- PyDict_SetItemString(PySys_GetObject("modules"), BGL_module_def.m_name, mod);
+ PyDict_SetItemString(PyImport_GetModuleDict(), BGL_module_def.m_name, mod);
dict= PyModule_GetDict(mod);
if( PyType_Ready( &BGL_bufferType) < 0)
diff --git a/source/blender/python/generic/blf_api.c b/source/blender/python/generic/blf_api.c
index 9e4ce1f057d..a5f5f8815c7 100644
--- a/source/blender/python/generic/blf_api.c
+++ b/source/blender/python/generic/blf_api.c
@@ -39,7 +39,7 @@ static char py_blf_position_doc[] =
" :arg y: Y axis position to draw the text.\n"
" :type y: float\n"
" :arg z: Z axis position to draw the text.\n"
-" :type x: float\n";
+" :type z: float\n";
static PyObject *py_blf_position(PyObject *self, PyObject *args)
{
@@ -261,7 +261,7 @@ static char py_blf_rotation_doc[] =
" :arg fontid: The id of the typeface as returned by :func:`blf.load`, for default font use 0.\n"
" :type fontid: int\n"
" :arg angle: The angle for text drawing to use.\n"
-" :type aspect: float\n";
+" :type angle: float\n";
static PyObject *py_blf_rotation(PyObject *self, PyObject *args)
{
@@ -394,7 +394,7 @@ PyObject *BLF_Init(void)
PyObject *submodule;
submodule = PyModule_Create(&BLF_module_def);
- PyDict_SetItemString(PySys_GetObject("modules"), BLF_module_def.m_name, submodule);
+ PyDict_SetItemString(PyImport_GetModuleDict(), BLF_module_def.m_name, submodule);
PyModule_AddIntConstant(submodule, "ROTATION", BLF_ROTATION);
PyModule_AddIntConstant(submodule, "CLIPPING", BLF_CLIPPING);
diff --git a/source/blender/python/generic/bpy_internal_import.c b/source/blender/python/generic/bpy_internal_import.c
index 0bcecafd23c..11f8ff49ffe 100644
--- a/source/blender/python/generic/bpy_internal_import.c
+++ b/source/blender/python/generic/bpy_internal_import.c
@@ -35,6 +35,7 @@
#include "BKE_global.h" /* grr, only for G.sce */
#include "BLI_listbase.h"
#include "BLI_path_util.h"
+#include "BLI_string.h"
#include <stddef.h>
static Main *bpy_import_main= NULL;
@@ -61,6 +62,12 @@ void bpy_import_main_set(struct Main *maggie)
void bpy_text_filename_get(char *fn, Text *text)
{
sprintf(fn, "%s/%s", text->id.lib ? text->id.lib->filepath : G.sce, text->id.name+2);
+
+ /* XXX, this is a bug in python's Py_CompileString()!
+ the string encoding should not be required to be utf-8
+ reported: http://bugs.python.org/msg115202
+ */
+ BLI_utf8_invalid_strip(fn, strlen(fn));
}
PyObject *bpy_text_import( Text *text )
@@ -304,7 +311,7 @@ PyMethodDef bpy_reload_meth[] = { {"bpy_reload_meth", (PyCFunction)blender_reloa
void bpy_text_clear_modules(int clear_all)
{
- PyObject *modules= PySys_GetObject("modules");
+ PyObject *modules= PyImport_GetModuleDict();
char *fname;
char *file_extension;
@@ -350,26 +357,3 @@ void bpy_text_clear_modules(int clear_all)
Py_DECREF(list); /* removes all references from append */
}
#endif
-
-
-/*****************************************************************************
-* Description: This function creates a new Python dictionary object.
-* note: dict is owned by sys.modules["__main__"] module, reference is borrowed
-* note: important we use the dict from __main__, this is what python expects
- for 'pickle' to work as well as strings like this...
- >> foo = 10
- >> print(__import__("__main__").foo)
-*****************************************************************************/
-PyObject *bpy_namespace_dict_new(const char *filename)
-{
- PyInterpreterState *interp= PyThreadState_GET()->interp;
- PyObject *mod_main= PyModule_New("__main__");
- PyDict_SetItemString(interp->modules, "__main__", mod_main);
- Py_DECREF(mod_main); /* sys.modules owns now */
- PyModule_AddStringConstant(mod_main, "__name__", "__main__");
- if(filename)
- PyModule_AddStringConstant(mod_main, "__file__", filename); /* __file__ only for nice UI'ness */
- PyModule_AddObject(mod_main, "__builtins__", interp->builtins);
- Py_INCREF(interp->builtins); /* AddObject steals a reference */
- return PyModule_GetDict(mod_main);
-}
diff --git a/source/blender/python/generic/bpy_internal_import.h b/source/blender/python/generic/bpy_internal_import.h
index 83e05fd6ded..09e1fa629d3 100644
--- a/source/blender/python/generic/bpy_internal_import.h
+++ b/source/blender/python/generic/bpy_internal_import.h
@@ -60,7 +60,4 @@ extern PyMethodDef bpy_reload_meth[];
struct Main *bpy_import_main_get(void);
void bpy_import_main_set(struct Main *maggie);
-/* name namespace function for bpy & bge */
-PyObject *bpy_namespace_dict_new(const char *filename);
-
#endif /* EXPP_bpy_import_h */
diff --git a/source/blender/python/generic/geometry.c b/source/blender/python/generic/geometry.c
index 1e8436ed5ae..0e98760314d 100644
--- a/source/blender/python/generic/geometry.c
+++ b/source/blender/python/generic/geometry.c
@@ -835,7 +835,7 @@ PyObject *Geometry_Init(void)
PyObject *submodule;
submodule = PyModule_Create(&M_Geometry_module_def);
- PyDict_SetItemString(PySys_GetObject("modules"), M_Geometry_module_def.m_name, submodule);
+ PyDict_SetItemString(PyImport_GetModuleDict(), M_Geometry_module_def.m_name, submodule);
return (submodule);
}
diff --git a/source/blender/python/generic/mathutils.c b/source/blender/python/generic/mathutils.c
index a38ec7ce688..a643e6621b2 100644
--- a/source/blender/python/generic/mathutils.c
+++ b/source/blender/python/generic/mathutils.c
@@ -46,6 +46,13 @@
* - Vector.toTrackQuat --> Vector.to_track_quat
* - Quaternion * Quaternion --> cross product (not dot product)
*
+ * moved into class functions.
+ * - Mathutils.RotationMatrix -> mathutils.Matrix.Rotation
+ * - Mathutils.ScaleMatrix -> mathutils.Matrix.Scale
+ * - Mathutils.ShearMatrix -> mathutils.Matrix.Shear
+ * - Mathutils.TranslationMatrix -> mathutils.Matrix.Translation
+ * - Mathutils.OrthoProjectionMatrix -> mathutils.Matrix.OrthoProjection
+ *
* Moved to Geometry module: Intersect, TriangleArea, TriangleNormal, QuadNormal, LineIntersect
*/
@@ -94,434 +101,7 @@ int mathutils_array_parse(float *array, int array_min, int array_max, PyObject *
}
//----------------------------------MATRIX FUNCTIONS--------------------
-//----------------------------------mathutils.RotationMatrix() ----------
-//mat is a 1D array of floats - row[0][0],row[0][1], row[1][0], etc.
-static char M_Mathutils_RotationMatrix_doc[] =
-".. function:: RotationMatrix(angle, size, axis)\n"
-"\n"
-" Create a matrix representing a rotation.\n"
-"\n"
-" :arg angle: The angle of rotation desired, in radians.\n"
-" :type angle: float\n"
-" :arg size: The size of the rotation matrix to construct [2, 4].\n"
-" :type size: int\n"
-" :arg axis: a string in ['X', 'Y', 'Z'] or a 3D Vector Object (optional when size is 2).\n"
-" :type axis: string or :class:`Vector`\n"
-" :return: A new rotation matrix.\n"
-" :rtype: :class:`Matrix`\n";
-
-static PyObject *M_Mathutils_RotationMatrix(PyObject * self, PyObject * args)
-{
- VectorObject *vec= NULL;
- char *axis= NULL;
- int matSize;
- float angle = 0.0f;
- float mat[16] = {0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f,
- 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f};
-
- if(!PyArg_ParseTuple(args, "fi|O", &angle, &matSize, &vec)) {
- PyErr_SetString(PyExc_TypeError, "mathutils.RotationMatrix(angle, size, axis): expected float int and a string or vector\n");
- return NULL;
- }
-
- if(vec && !VectorObject_Check(vec)) {
- axis= _PyUnicode_AsString((PyObject *)vec);
- if(axis==NULL || axis[0]=='\0' || axis[1]!='\0' || axis[0] < 'X' || axis[0] > 'Z') {
- PyErr_SetString(PyExc_TypeError, "mathutils.RotationMatrix(): 3rd argument axis value must be a 3D vector or a string in 'X', 'Y', 'Z'\n");
- return NULL;
- }
- else {
- /* use the string */
- vec= NULL;
- }
- }
-
- while (angle<-(Py_PI*2))
- angle+=(Py_PI*2);
- while (angle>(Py_PI*2))
- angle-=(Py_PI*2);
-
- if(matSize != 2 && matSize != 3 && matSize != 4) {
- PyErr_SetString(PyExc_AttributeError, "mathutils.RotationMatrix(): can only return a 2x2 3x3 or 4x4 matrix\n");
- return NULL;
- }
- if(matSize == 2 && (vec != NULL)) {
- PyErr_SetString(PyExc_AttributeError, "mathutils.RotationMatrix(): cannot create a 2x2 rotation matrix around arbitrary axis\n");
- return NULL;
- }
- if((matSize == 3 || matSize == 4) && (axis == NULL) && (vec == NULL)) {
- PyErr_SetString(PyExc_AttributeError, "mathutils.RotationMatrix(): please choose an axis of rotation for 3d and 4d matrices\n");
- return NULL;
- }
- if(vec) {
- if(vec->size != 3) {
- PyErr_SetString(PyExc_AttributeError, "mathutils.RotationMatrix(): the vector axis must be a 3D vector\n");
- return NULL;
- }
-
- if(!BaseMath_ReadCallback(vec))
- return NULL;
-
- }
- /* check for valid vector/axis above */
- if(vec) {
- axis_angle_to_mat3( (float (*)[3])mat,vec->vec, angle);
- }
- else if(matSize == 2) {
- //2D rotation matrix
- mat[0] = (float) cos (angle);
- mat[1] = (float) sin (angle);
- mat[2] = -((float) sin(angle));
- mat[3] = (float) cos(angle);
- } else if(strcmp(axis, "X") == 0) {
- //rotation around X
- mat[0] = 1.0f;
- mat[4] = (float) cos(angle);
- mat[5] = (float) sin(angle);
- mat[7] = -((float) sin(angle));
- mat[8] = (float) cos(angle);
- } else if(strcmp(axis, "Y") == 0) {
- //rotation around Y
- mat[0] = (float) cos(angle);
- mat[2] = -((float) sin(angle));
- mat[4] = 1.0f;
- mat[6] = (float) sin(angle);
- mat[8] = (float) cos(angle);
- } else if(strcmp(axis, "Z") == 0) {
- //rotation around Z
- mat[0] = (float) cos(angle);
- mat[1] = (float) sin(angle);
- mat[3] = -((float) sin(angle));
- mat[4] = (float) cos(angle);
- mat[8] = 1.0f;
- }
- else {
- /* should never get here */
- PyErr_SetString(PyExc_AttributeError, "mathutils.RotationMatrix(): unknown error\n");
- return NULL;
- }
-
- if(matSize == 4) {
- //resize matrix
- mat[10] = mat[8];
- mat[9] = mat[7];
- mat[8] = mat[6];
- mat[7] = 0.0f;
- mat[6] = mat[5];
- mat[5] = mat[4];
- mat[4] = mat[3];
- mat[3] = 0.0f;
- }
- //pass to matrix creation
- return newMatrixObject(mat, matSize, matSize, Py_NEW, NULL);
-}
-
-static char M_Mathutils_TranslationMatrix_doc[] =
-".. function:: TranslationMatrix(vector)\n"
-"\n"
-" Create a matrix representing a translation.\n"
-"\n"
-" :arg vector: The translation vector.\n"
-" :type vector: :class:`Vector`\n"
-" :return: An identity matrix with a translation.\n"
-" :rtype: :class:`Matrix`\n";
-
-static PyObject *M_Mathutils_TranslationMatrix(PyObject * self, VectorObject * vec)
-{
- float mat[16] = {0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f,
- 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f};
-
- if(!VectorObject_Check(vec)) {
- PyErr_SetString(PyExc_TypeError, "mathutils.TranslationMatrix(): expected vector\n");
- return NULL;
- }
- if(vec->size != 3 && vec->size != 4) {
- PyErr_SetString(PyExc_TypeError, "mathutils.TranslationMatrix(): vector must be 3D or 4D\n");
- return NULL;
- }
-
- if(!BaseMath_ReadCallback(vec))
- return NULL;
-
- //create a identity matrix and add translation
- unit_m4((float(*)[4]) mat);
- mat[12] = vec->vec[0];
- mat[13] = vec->vec[1];
- mat[14] = vec->vec[2];
-
- return newMatrixObject(mat, 4, 4, Py_NEW, NULL);
-}
-//----------------------------------mathutils.ScaleMatrix() -------------
-//mat is a 1D array of floats - row[0][0],row[0][1], row[1][0], etc.
-static char M_Mathutils_ScaleMatrix_doc[] =
-".. function:: ScaleMatrix(factor, size, axis)\n"
-"\n"
-" Create a matrix representing a scaling.\n"
-"\n"
-" :arg factor: The factor of scaling to apply.\n"
-" :type factor: float\n"
-" :arg size: The size of the scale matrix to construct [2, 4].\n"
-" :type size: int\n"
-" :arg axis: Direction to influence scale. (optional).\n"
-" :type axis: :class:`Vector`\n"
-" :return: A new scale matrix.\n"
-" :rtype: :class:`Matrix`\n";
-
-static PyObject *M_Mathutils_ScaleMatrix(PyObject * self, PyObject * args)
-{
- VectorObject *vec = NULL;
- float norm = 0.0f, factor;
- int matSize, x;
- float mat[16] = {0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f,
- 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f};
-
- if(!PyArg_ParseTuple(args, "fi|O!", &factor, &matSize, &vector_Type, &vec)) {
- PyErr_SetString(PyExc_TypeError, "mathutils.ScaleMatrix(): expected float int and optional vector\n");
- return NULL;
- }
- if(matSize != 2 && matSize != 3 && matSize != 4) {
- PyErr_SetString(PyExc_AttributeError, "mathutils.ScaleMatrix(): can only return a 2x2 3x3 or 4x4 matrix\n");
- return NULL;
- }
- if(vec) {
- if(vec->size > 2 && matSize == 2) {
- PyErr_SetString(PyExc_AttributeError, "mathutils.ScaleMatrix(): please use 2D vectors when scaling in 2D\n");
- return NULL;
- }
-
- if(!BaseMath_ReadCallback(vec))
- return NULL;
-
- }
- if(vec == NULL) { //scaling along axis
- if(matSize == 2) {
- mat[0] = factor;
- mat[3] = factor;
- } else {
- mat[0] = factor;
- mat[4] = factor;
- mat[8] = factor;
- }
- } else { //scaling in arbitrary direction
- //normalize arbitrary axis
- for(x = 0; x < vec->size; x++) {
- norm += vec->vec[x] * vec->vec[x];
- }
- norm = (float) sqrt(norm);
- for(x = 0; x < vec->size; x++) {
- vec->vec[x] /= norm;
- }
- if(matSize == 2) {
- mat[0] = 1 +((factor - 1) *(vec->vec[0] * vec->vec[0]));
- mat[1] =((factor - 1) *(vec->vec[0] * vec->vec[1]));
- mat[2] =((factor - 1) *(vec->vec[0] * vec->vec[1]));
- mat[3] = 1 + ((factor - 1) *(vec->vec[1] * vec->vec[1]));
- } else {
- mat[0] = 1 + ((factor - 1) *(vec->vec[0] * vec->vec[0]));
- mat[1] =((factor - 1) *(vec->vec[0] * vec->vec[1]));
- mat[2] =((factor - 1) *(vec->vec[0] * vec->vec[2]));
- mat[3] =((factor - 1) *(vec->vec[0] * vec->vec[1]));
- mat[4] = 1 + ((factor - 1) *(vec->vec[1] * vec->vec[1]));
- mat[5] =((factor - 1) *(vec->vec[1] * vec->vec[2]));
- mat[6] =((factor - 1) *(vec->vec[0] * vec->vec[2]));
- mat[7] =((factor - 1) *(vec->vec[1] * vec->vec[2]));
- mat[8] = 1 + ((factor - 1) *(vec->vec[2] * vec->vec[2]));
- }
- }
- if(matSize == 4) {
- //resize matrix
- mat[10] = mat[8];
- mat[9] = mat[7];
- mat[8] = mat[6];
- mat[7] = 0.0f;
- mat[6] = mat[5];
- mat[5] = mat[4];
- mat[4] = mat[3];
- mat[3] = 0.0f;
- }
- //pass to matrix creation
- return newMatrixObject(mat, matSize, matSize, Py_NEW, NULL);
-}
-//----------------------------------mathutils.OrthoProjectionMatrix() ---
-//mat is a 1D array of floats - row[0][0],row[0][1], row[1][0], etc.
-static char M_Mathutils_OrthoProjectionMatrix_doc[] =
-".. function:: OrthoProjectionMatrix(plane, size, axis)\n"
-"\n"
-" Create a matrix to represent an orthographic projection.\n"
-"\n"
-" :arg plane: Can be any of the following: ['X', 'Y', 'XY', 'XZ', 'YZ', 'R'], where a single axis is for a 2D matrix and 'R' requires axis is given.\n"
-" :type plane: string\n"
-" :arg size: The size of the projection matrix to construct [2, 4].\n"
-" :type size: int\n"
-" :arg axis: Arbitrary perpendicular plane vector (optional).\n"
-" :type axis: :class:`Vector`\n"
-" :return: A new projection matrix.\n"
-" :rtype: :class:`Matrix`\n";
-static PyObject *M_Mathutils_OrthoProjectionMatrix(PyObject * self, PyObject * args)
-{
- VectorObject *vec = NULL;
- char *plane;
- int matSize, x;
- float norm = 0.0f;
- float mat[16] = {0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f,
- 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f};
-
- if(!PyArg_ParseTuple(args, "si|O!", &plane, &matSize, &vector_Type, &vec)) {
- PyErr_SetString(PyExc_TypeError, "mathutils.OrthoProjectionMatrix(): expected string and int and optional vector\n");
- return NULL;
- }
- if(matSize != 2 && matSize != 3 && matSize != 4) {
- PyErr_SetString(PyExc_AttributeError,"mathutils.OrthoProjectionMatrix(): can only return a 2x2 3x3 or 4x4 matrix\n");
- return NULL;
- }
- if(vec) {
- if(vec->size > 2 && matSize == 2) {
- PyErr_SetString(PyExc_AttributeError, "mathutils.OrthoProjectionMatrix(): please use 2D vectors when scaling in 2D\n");
- return NULL;
- }
-
- if(!BaseMath_ReadCallback(vec))
- return NULL;
-
- }
- if(vec == NULL) { //ortho projection onto cardinal plane
- if((strcmp(plane, "X") == 0) && matSize == 2) {
- mat[0] = 1.0f;
- } else if((strcmp(plane, "Y") == 0) && matSize == 2) {
- mat[3] = 1.0f;
- } else if((strcmp(plane, "XY") == 0) && matSize > 2) {
- mat[0] = 1.0f;
- mat[4] = 1.0f;
- } else if((strcmp(plane, "XZ") == 0) && matSize > 2) {
- mat[0] = 1.0f;
- mat[8] = 1.0f;
- } else if((strcmp(plane, "YZ") == 0) && matSize > 2) {
- mat[4] = 1.0f;
- mat[8] = 1.0f;
- } else {
- PyErr_SetString(PyExc_AttributeError, "mathutils.OrthoProjectionMatrix(): unknown plane - expected: X, Y, XY, XZ, YZ\n");
- return NULL;
- }
- } else { //arbitrary plane
- //normalize arbitrary axis
- for(x = 0; x < vec->size; x++) {
- norm += vec->vec[x] * vec->vec[x];
- }
- norm = (float) sqrt(norm);
- for(x = 0; x < vec->size; x++) {
- vec->vec[x] /= norm;
- }
- if((strcmp(plane, "R") == 0) && matSize == 2) {
- mat[0] = 1 - (vec->vec[0] * vec->vec[0]);
- mat[1] = -(vec->vec[0] * vec->vec[1]);
- mat[2] = -(vec->vec[0] * vec->vec[1]);
- mat[3] = 1 - (vec->vec[1] * vec->vec[1]);
- } else if((strcmp(plane, "R") == 0) && matSize > 2) {
- mat[0] = 1 - (vec->vec[0] * vec->vec[0]);
- mat[1] = -(vec->vec[0] * vec->vec[1]);
- mat[2] = -(vec->vec[0] * vec->vec[2]);
- mat[3] = -(vec->vec[0] * vec->vec[1]);
- mat[4] = 1 - (vec->vec[1] * vec->vec[1]);
- mat[5] = -(vec->vec[1] * vec->vec[2]);
- mat[6] = -(vec->vec[0] * vec->vec[2]);
- mat[7] = -(vec->vec[1] * vec->vec[2]);
- mat[8] = 1 - (vec->vec[2] * vec->vec[2]);
- } else {
- PyErr_SetString(PyExc_AttributeError, "mathutils.OrthoProjectionMatrix(): unknown plane - expected: 'r' expected for axis designation\n");
- return NULL;
- }
- }
- if(matSize == 4) {
- //resize matrix
- mat[10] = mat[8];
- mat[9] = mat[7];
- mat[8] = mat[6];
- mat[7] = 0.0f;
- mat[6] = mat[5];
- mat[5] = mat[4];
- mat[4] = mat[3];
- mat[3] = 0.0f;
- }
- //pass to matrix creation
- return newMatrixObject(mat, matSize, matSize, Py_NEW, NULL);
-}
-
-static char M_Mathutils_ShearMatrix_doc[] =
-".. function:: ShearMatrix(plane, factor, size)\n"
-"\n"
-" Create a matrix to represent an shear transformation.\n"
-"\n"
-" :arg plane: Can be any of the following: ['X', 'Y', 'XY', 'XZ', 'YZ'], where a single axis is for a 2D matrix.\n"
-" :type plane: string\n"
-" :arg factor: The factor of shear to apply.\n"
-" :type factor: float\n"
-" :arg size: The size of the shear matrix to construct [2, 4].\n"
-" :type size: int\n"
-" :return: A new shear matrix.\n"
-" :rtype: :class:`Matrix`\n";
-
-static PyObject *M_Mathutils_ShearMatrix(PyObject * self, PyObject * args)
-{
- int matSize;
- char *plane;
- float factor;
- float mat[16] = {0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f,
- 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f};
-
- if(!PyArg_ParseTuple(args, "sfi", &plane, &factor, &matSize)) {
- PyErr_SetString(PyExc_TypeError,"mathutils.ShearMatrix(): expected string float and int\n");
- return NULL;
- }
- if(matSize != 2 && matSize != 3 && matSize != 4) {
- PyErr_SetString(PyExc_AttributeError,"mathutils.ShearMatrix(): can only return a 2x2 3x3 or 4x4 matrix\n");
- return NULL;
- }
-
- if((strcmp(plane, "X") == 0)
- && matSize == 2) {
- mat[0] = 1.0f;
- mat[2] = factor;
- mat[3] = 1.0f;
- } else if((strcmp(plane, "Y") == 0) && matSize == 2) {
- mat[0] = 1.0f;
- mat[1] = factor;
- mat[3] = 1.0f;
- } else if((strcmp(plane, "XY") == 0) && matSize > 2) {
- mat[0] = 1.0f;
- mat[4] = 1.0f;
- mat[6] = factor;
- mat[7] = factor;
- } else if((strcmp(plane, "XZ") == 0) && matSize > 2) {
- mat[0] = 1.0f;
- mat[3] = factor;
- mat[4] = 1.0f;
- mat[5] = factor;
- mat[8] = 1.0f;
- } else if((strcmp(plane, "YZ") == 0) && matSize > 2) {
- mat[0] = 1.0f;
- mat[1] = factor;
- mat[2] = factor;
- mat[4] = 1.0f;
- mat[8] = 1.0f;
- } else {
- PyErr_SetString(PyExc_AttributeError, "mathutils.ShearMatrix(): expected: x, y, xy, xz, yz or wrong matrix size for shearing plane\n");
- return NULL;
- }
- if(matSize == 4) {
- //resize matrix
- mat[10] = mat[8];
- mat[9] = mat[7];
- mat[8] = mat[6];
- mat[7] = 0.0f;
- mat[6] = mat[5];
- mat[5] = mat[4];
- mat[4] = mat[3];
- mat[3] = 0.0f;
- }
- //pass to matrix creation
- return newMatrixObject(mat, matSize, matSize, Py_NEW, NULL);
-}
/* Utility functions */
@@ -629,7 +209,7 @@ PyObject *BaseMathObject_getOwner( BaseMathObject * self, void *type )
return ret;
}
-char BaseMathObject_Wrapped_doc[] = "True when this object wraps external data (readonly). **type** boolean";
+char BaseMathObject_Wrapped_doc[] = "True when this object wraps external data (readonly).\n\n:type: boolean";
PyObject *BaseMathObject_getWrapped( BaseMathObject *self, void *type )
{
return PyBool_FromLong((self->wrapped == Py_WRAP) ? 1:0);
@@ -647,11 +227,6 @@ void BaseMathObject_dealloc(BaseMathObject * self)
/*----------------------------MODULE INIT-------------------------*/
struct PyMethodDef M_Mathutils_methods[] = {
- {"RotationMatrix", (PyCFunction) M_Mathutils_RotationMatrix, METH_VARARGS, M_Mathutils_RotationMatrix_doc},
- {"ScaleMatrix", (PyCFunction) M_Mathutils_ScaleMatrix, METH_VARARGS, M_Mathutils_ScaleMatrix_doc},
- {"ShearMatrix", (PyCFunction) M_Mathutils_ShearMatrix, METH_VARARGS, M_Mathutils_ShearMatrix_doc},
- {"TranslationMatrix", (PyCFunction) M_Mathutils_TranslationMatrix, METH_O, M_Mathutils_TranslationMatrix_doc},
- {"OrthoProjectionMatrix", (PyCFunction) M_Mathutils_OrthoProjectionMatrix, METH_VARARGS, M_Mathutils_OrthoProjectionMatrix_doc},
{NULL, NULL, 0, NULL}
};
@@ -683,7 +258,7 @@ PyObject *Mathutils_Init(void)
return NULL;
submodule = PyModule_Create(&M_Mathutils_module_def);
- PyDict_SetItemString(PySys_GetObject("modules"), M_Mathutils_module_def.m_name, submodule);
+ PyDict_SetItemString(PyImport_GetModuleDict(), M_Mathutils_module_def.m_name, submodule);
/* each type has its own new() function */
PyModule_AddObject( submodule, "Vector", (PyObject *)&vector_Type );
diff --git a/source/blender/python/generic/mathutils_color.c b/source/blender/python/generic/mathutils_color.c
index 5acd03060d4..57d2838238c 100644
--- a/source/blender/python/generic/mathutils_color.c
+++ b/source/blender/python/generic/mathutils_color.c
@@ -434,18 +434,18 @@ static int Color_setHSV(ColorObject * self, PyObject * value, void * type)
/* Python attributes get/set structure: */
/*****************************************************************************/
static PyGetSetDef Color_getseters[] = {
- {"r", (getter)Color_getChannel, (setter)Color_setChannel, "Red color channel. **type** float", (void *)0},
- {"g", (getter)Color_getChannel, (setter)Color_setChannel, "Green color channel. **type** float", (void *)1},
- {"b", (getter)Color_getChannel, (setter)Color_setChannel, "Blue color channel. **type** float", (void *)2},
+ {"r", (getter)Color_getChannel, (setter)Color_setChannel, "Red color channel.\n\n:type: float", (void *)0},
+ {"g", (getter)Color_getChannel, (setter)Color_setChannel, "Green color channel.\n\n:type: float", (void *)1},
+ {"b", (getter)Color_getChannel, (setter)Color_setChannel, "Blue color channel.\n\n:type: float", (void *)2},
- {"h", (getter)Color_getChannelHSV, (setter)Color_setChannelHSV, "HSV Hue component in [0, 1]. **type** float", (void *)0},
- {"s", (getter)Color_getChannelHSV, (setter)Color_setChannelHSV, "HSV Saturation component in [0, 1]. **type** float", (void *)1},
- {"v", (getter)Color_getChannelHSV, (setter)Color_setChannelHSV, "HSV Value component in [0, 1]. **type** float", (void *)2},
+ {"h", (getter)Color_getChannelHSV, (setter)Color_setChannelHSV, "HSV Hue component in [0, 1].\n\n:type: float", (void *)0},
+ {"s", (getter)Color_getChannelHSV, (setter)Color_setChannelHSV, "HSV Saturation component in [0, 1].\n\n:type: float", (void *)1},
+ {"v", (getter)Color_getChannelHSV, (setter)Color_setChannelHSV, "HSV Value component in [0, 1].\n\n:type: float", (void *)2},
- {"hsv", (getter)Color_getHSV, (setter)Color_setHSV, "HSV Values in [0, 1]. **type** float triplet", (void *)0},
+ {"hsv", (getter)Color_getHSV, (setter)Color_setHSV, "HSV Values in [0, 1].\n\n:type: float triplet", (void *)0},
{"is_wrapped", (getter)BaseMathObject_getWrapped, (setter)NULL, BaseMathObject_Wrapped_doc, NULL},
- {"_owner", (getter)BaseMathObject_getOwner, (setter)NULL, BaseMathObject_Owner_doc, NULL},
+ {"owner", (getter)BaseMathObject_getOwner, (setter)NULL, BaseMathObject_Owner_doc, NULL},
{NULL,NULL,NULL,NULL,NULL} /* Sentinel */
};
diff --git a/source/blender/python/generic/mathutils_euler.c b/source/blender/python/generic/mathutils_euler.c
index aac65043a0a..84845002ce8 100644
--- a/source/blender/python/generic/mathutils_euler.c
+++ b/source/blender/python/generic/mathutils_euler.c
@@ -250,7 +250,7 @@ static PyObject *Euler_Rotate(EulerObject * self, PyObject *args)
PyErr_SetString(PyExc_TypeError, "euler.rotate(): expected angle (float) and axis (x,y,z)");
return NULL;
}
- if(ELEM3(*axis, 'X', 'Y', 'Z') && axis[1]=='\0'){
+ if(!(ELEM3(*axis, 'X', 'Y', 'Z') && axis[1]=='\0')){
PyErr_SetString(PyExc_TypeError, "euler.rotate(): expected axis to be 'X', 'Y' or 'Z'");
return NULL;
}
@@ -615,13 +615,13 @@ static int Euler_setOrder( EulerObject * self, PyObject * value, void * type )
/* Python attributes get/set structure: */
/*****************************************************************************/
static PyGetSetDef Euler_getseters[] = {
- {"x", (getter)Euler_getAxis, (setter)Euler_setAxis, "Euler X axis in radians. **type** float", (void *)0},
- {"y", (getter)Euler_getAxis, (setter)Euler_setAxis, "Euler Y axis in radians. **type** float", (void *)1},
- {"z", (getter)Euler_getAxis, (setter)Euler_setAxis, "Euler Z axis in radians. **type** float", (void *)2},
- {"order", (getter)Euler_getOrder, (setter)Euler_setOrder, "Euler rotation order. **type** string in ['XYZ', 'XZY', 'YXZ', 'YZX', 'ZXY', 'ZYX']", (void *)NULL},
+ {"x", (getter)Euler_getAxis, (setter)Euler_setAxis, "Euler X axis in radians.\n\n:type: float", (void *)0},
+ {"y", (getter)Euler_getAxis, (setter)Euler_setAxis, "Euler Y axis in radians.\n\n:type: float", (void *)1},
+ {"z", (getter)Euler_getAxis, (setter)Euler_setAxis, "Euler Z axis in radians.\n\n:type: float", (void *)2},
+ {"order", (getter)Euler_getOrder, (setter)Euler_setOrder, "Euler rotation order.\n\n:type: string in ['XYZ', 'XZY', 'YXZ', 'YZX', 'ZXY', 'ZYX']", (void *)NULL},
{"is_wrapped", (getter)BaseMathObject_getWrapped, (setter)NULL, BaseMathObject_Wrapped_doc, NULL},
- {"_owner", (getter)BaseMathObject_getOwner, (setter)NULL, BaseMathObject_Owner_doc, NULL},
+ {"owner", (getter)BaseMathObject_getOwner, (setter)NULL, BaseMathObject_Owner_doc, NULL},
{NULL,NULL,NULL,NULL,NULL} /* Sentinel */
};
diff --git a/source/blender/python/generic/mathutils_matrix.c b/source/blender/python/generic/mathutils_matrix.c
index a211386f503..3b8c7d3122a 100644
--- a/source/blender/python/generic/mathutils_matrix.c
+++ b/source/blender/python/generic/mathutils_matrix.c
@@ -181,6 +181,438 @@ static PyObject *Matrix_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
return newMatrixObject(matrix, argSize, seqSize, Py_NEW, NULL);
}
+/*-----------------------CLASS-METHODS----------------------------*/
+
+//----------------------------------mathutils.RotationMatrix() ----------
+//mat is a 1D array of floats - row[0][0],row[0][1], row[1][0], etc.
+static char C_Matrix_Rotation_doc[] =
+".. classmethod:: Rotation(angle, size, axis)\n"
+"\n"
+" Create a matrix representing a rotation.\n"
+"\n"
+" :arg angle: The angle of rotation desired, in radians.\n"
+" :type angle: float\n"
+" :arg size: The size of the rotation matrix to construct [2, 4].\n"
+" :type size: int\n"
+" :arg axis: a string in ['X', 'Y', 'Z'] or a 3D Vector Object (optional when size is 2).\n"
+" :type axis: string or :class:`Vector`\n"
+" :return: A new rotation matrix.\n"
+" :rtype: :class:`Matrix`\n";
+
+static PyObject *C_Matrix_Rotation(PyObject *cls, PyObject *args)
+{
+ VectorObject *vec= NULL;
+ char *axis= NULL;
+ int matSize;
+ float angle = 0.0f;
+ float mat[16] = {0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f,
+ 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f};
+
+ if(!PyArg_ParseTuple(args, "fi|O", &angle, &matSize, &vec)) {
+ PyErr_SetString(PyExc_TypeError, "mathutils.RotationMatrix(angle, size, axis): expected float int and a string or vector\n");
+ return NULL;
+ }
+
+ if(vec && !VectorObject_Check(vec)) {
+ axis= _PyUnicode_AsString((PyObject *)vec);
+ if(axis==NULL || axis[0]=='\0' || axis[1]!='\0' || axis[0] < 'X' || axis[0] > 'Z') {
+ PyErr_SetString(PyExc_TypeError, "mathutils.RotationMatrix(): 3rd argument axis value must be a 3D vector or a string in 'X', 'Y', 'Z'\n");
+ return NULL;
+ }
+ else {
+ /* use the string */
+ vec= NULL;
+ }
+ }
+
+ while (angle<-(Py_PI*2))
+ angle+=(Py_PI*2);
+ while (angle>(Py_PI*2))
+ angle-=(Py_PI*2);
+
+ if(matSize != 2 && matSize != 3 && matSize != 4) {
+ PyErr_SetString(PyExc_AttributeError, "mathutils.RotationMatrix(): can only return a 2x2 3x3 or 4x4 matrix\n");
+ return NULL;
+ }
+ if(matSize == 2 && (vec != NULL)) {
+ PyErr_SetString(PyExc_AttributeError, "mathutils.RotationMatrix(): cannot create a 2x2 rotation matrix around arbitrary axis\n");
+ return NULL;
+ }
+ if((matSize == 3 || matSize == 4) && (axis == NULL) && (vec == NULL)) {
+ PyErr_SetString(PyExc_AttributeError, "mathutils.RotationMatrix(): please choose an axis of rotation for 3d and 4d matrices\n");
+ return NULL;
+ }
+ if(vec) {
+ if(vec->size != 3) {
+ PyErr_SetString(PyExc_AttributeError, "mathutils.RotationMatrix(): the vector axis must be a 3D vector\n");
+ return NULL;
+ }
+
+ if(!BaseMath_ReadCallback(vec))
+ return NULL;
+
+ }
+
+ /* check for valid vector/axis above */
+ if(vec) {
+ axis_angle_to_mat3( (float (*)[3])mat,vec->vec, angle);
+ }
+ else if(matSize == 2) {
+ //2D rotation matrix
+ mat[0] = (float) cos (angle);
+ mat[1] = (float) sin (angle);
+ mat[2] = -((float) sin(angle));
+ mat[3] = (float) cos(angle);
+ } else if(strcmp(axis, "X") == 0) {
+ //rotation around X
+ mat[0] = 1.0f;
+ mat[4] = (float) cos(angle);
+ mat[5] = (float) sin(angle);
+ mat[7] = -((float) sin(angle));
+ mat[8] = (float) cos(angle);
+ } else if(strcmp(axis, "Y") == 0) {
+ //rotation around Y
+ mat[0] = (float) cos(angle);
+ mat[2] = -((float) sin(angle));
+ mat[4] = 1.0f;
+ mat[6] = (float) sin(angle);
+ mat[8] = (float) cos(angle);
+ } else if(strcmp(axis, "Z") == 0) {
+ //rotation around Z
+ mat[0] = (float) cos(angle);
+ mat[1] = (float) sin(angle);
+ mat[3] = -((float) sin(angle));
+ mat[4] = (float) cos(angle);
+ mat[8] = 1.0f;
+ }
+ else {
+ /* should never get here */
+ PyErr_SetString(PyExc_AttributeError, "mathutils.RotationMatrix(): unknown error\n");
+ return NULL;
+ }
+
+ if(matSize == 4) {
+ //resize matrix
+ mat[10] = mat[8];
+ mat[9] = mat[7];
+ mat[8] = mat[6];
+ mat[7] = 0.0f;
+ mat[6] = mat[5];
+ mat[5] = mat[4];
+ mat[4] = mat[3];
+ mat[3] = 0.0f;
+ }
+ //pass to matrix creation
+ return newMatrixObject(mat, matSize, matSize, Py_NEW, (PyTypeObject *)cls);
+}
+
+
+static char C_Matrix_Translation_doc[] =
+".. classmethod:: Translation(vector)\n"
+"\n"
+" Create a matrix representing a translation.\n"
+"\n"
+" :arg vector: The translation vector.\n"
+" :type vector: :class:`Vector`\n"
+" :return: An identity matrix with a translation.\n"
+" :rtype: :class:`Matrix`\n";
+
+static PyObject *C_Matrix_Translation(PyObject *cls, VectorObject * vec)
+{
+ float mat[16] = {0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f,
+ 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f};
+
+ if(!VectorObject_Check(vec)) {
+ PyErr_SetString(PyExc_TypeError, "mathutils.TranslationMatrix(): expected vector\n");
+ return NULL;
+ }
+ if(vec->size != 3 && vec->size != 4) {
+ PyErr_SetString(PyExc_TypeError, "mathutils.TranslationMatrix(): vector must be 3D or 4D\n");
+ return NULL;
+ }
+
+ if(!BaseMath_ReadCallback(vec))
+ return NULL;
+
+ //create a identity matrix and add translation
+ unit_m4((float(*)[4]) mat);
+ mat[12] = vec->vec[0];
+ mat[13] = vec->vec[1];
+ mat[14] = vec->vec[2];
+
+ return newMatrixObject(mat, 4, 4, Py_NEW, (PyTypeObject *)cls);
+}
+//----------------------------------mathutils.ScaleMatrix() -------------
+//mat is a 1D array of floats - row[0][0],row[0][1], row[1][0], etc.
+static char C_Matrix_Scale_doc[] =
+".. classmethod:: Scale(factor, size, axis)\n"
+"\n"
+" Create a matrix representing a scaling.\n"
+"\n"
+" :arg factor: The factor of scaling to apply.\n"
+" :type factor: float\n"
+" :arg size: The size of the scale matrix to construct [2, 4].\n"
+" :type size: int\n"
+" :arg axis: Direction to influence scale. (optional).\n"
+" :type axis: :class:`Vector`\n"
+" :return: A new scale matrix.\n"
+" :rtype: :class:`Matrix`\n";
+
+static PyObject *C_Matrix_Scale(PyObject *cls, PyObject *args)
+{
+ VectorObject *vec = NULL;
+ float norm = 0.0f, factor;
+ int matSize, x;
+ float mat[16] = {0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f,
+ 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f};
+
+ if(!PyArg_ParseTuple(args, "fi|O!", &factor, &matSize, &vector_Type, &vec)) {
+ PyErr_SetString(PyExc_TypeError, "mathutils.ScaleMatrix(): expected float int and optional vector\n");
+ return NULL;
+ }
+ if(matSize != 2 && matSize != 3 && matSize != 4) {
+ PyErr_SetString(PyExc_AttributeError, "mathutils.ScaleMatrix(): can only return a 2x2 3x3 or 4x4 matrix\n");
+ return NULL;
+ }
+ if(vec) {
+ if(vec->size > 2 && matSize == 2) {
+ PyErr_SetString(PyExc_AttributeError, "mathutils.ScaleMatrix(): please use 2D vectors when scaling in 2D\n");
+ return NULL;
+ }
+
+ if(!BaseMath_ReadCallback(vec))
+ return NULL;
+
+ }
+ if(vec == NULL) { //scaling along axis
+ if(matSize == 2) {
+ mat[0] = factor;
+ mat[3] = factor;
+ } else {
+ mat[0] = factor;
+ mat[4] = factor;
+ mat[8] = factor;
+ }
+ } else { //scaling in arbitrary direction
+ //normalize arbitrary axis
+ for(x = 0; x < vec->size; x++) {
+ norm += vec->vec[x] * vec->vec[x];
+ }
+ norm = (float) sqrt(norm);
+ for(x = 0; x < vec->size; x++) {
+ vec->vec[x] /= norm;
+ }
+ if(matSize == 2) {
+ mat[0] = 1 +((factor - 1) *(vec->vec[0] * vec->vec[0]));
+ mat[1] =((factor - 1) *(vec->vec[0] * vec->vec[1]));
+ mat[2] =((factor - 1) *(vec->vec[0] * vec->vec[1]));
+ mat[3] = 1 + ((factor - 1) *(vec->vec[1] * vec->vec[1]));
+ } else {
+ mat[0] = 1 + ((factor - 1) *(vec->vec[0] * vec->vec[0]));
+ mat[1] =((factor - 1) *(vec->vec[0] * vec->vec[1]));
+ mat[2] =((factor - 1) *(vec->vec[0] * vec->vec[2]));
+ mat[3] =((factor - 1) *(vec->vec[0] * vec->vec[1]));
+ mat[4] = 1 + ((factor - 1) *(vec->vec[1] * vec->vec[1]));
+ mat[5] =((factor - 1) *(vec->vec[1] * vec->vec[2]));
+ mat[6] =((factor - 1) *(vec->vec[0] * vec->vec[2]));
+ mat[7] =((factor - 1) *(vec->vec[1] * vec->vec[2]));
+ mat[8] = 1 + ((factor - 1) *(vec->vec[2] * vec->vec[2]));
+ }
+ }
+ if(matSize == 4) {
+ //resize matrix
+ mat[10] = mat[8];
+ mat[9] = mat[7];
+ mat[8] = mat[6];
+ mat[7] = 0.0f;
+ mat[6] = mat[5];
+ mat[5] = mat[4];
+ mat[4] = mat[3];
+ mat[3] = 0.0f;
+ }
+ //pass to matrix creation
+ return newMatrixObject(mat, matSize, matSize, Py_NEW, (PyTypeObject *)cls);
+}
+//----------------------------------mathutils.OrthoProjectionMatrix() ---
+//mat is a 1D array of floats - row[0][0],row[0][1], row[1][0], etc.
+static char C_Matrix_OrthoProjection_doc[] =
+".. classmethod:: OrthoProjection(plane, size, axis)\n"
+"\n"
+" Create a matrix to represent an orthographic projection.\n"
+"\n"
+" :arg plane: Can be any of the following: ['X', 'Y', 'XY', 'XZ', 'YZ', 'R'], where a single axis is for a 2D matrix and 'R' requires axis is given.\n"
+" :type plane: string\n"
+" :arg size: The size of the projection matrix to construct [2, 4].\n"
+" :type size: int\n"
+" :arg axis: Arbitrary perpendicular plane vector (optional).\n"
+" :type axis: :class:`Vector`\n"
+" :return: A new projection matrix.\n"
+" :rtype: :class:`Matrix`\n";
+static PyObject *C_Matrix_OrthoProjection(PyObject *cls, PyObject *args)
+{
+ VectorObject *vec = NULL;
+ char *plane;
+ int matSize, x;
+ float norm = 0.0f;
+ float mat[16] = {0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f,
+ 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f};
+
+ if(!PyArg_ParseTuple(args, "si|O!", &plane, &matSize, &vector_Type, &vec)) {
+ PyErr_SetString(PyExc_TypeError, "mathutils.OrthoProjectionMatrix(): expected string and int and optional vector\n");
+ return NULL;
+ }
+ if(matSize != 2 && matSize != 3 && matSize != 4) {
+ PyErr_SetString(PyExc_AttributeError,"mathutils.OrthoProjectionMatrix(): can only return a 2x2 3x3 or 4x4 matrix\n");
+ return NULL;
+ }
+ if(vec) {
+ if(vec->size > 2 && matSize == 2) {
+ PyErr_SetString(PyExc_AttributeError, "mathutils.OrthoProjectionMatrix(): please use 2D vectors when scaling in 2D\n");
+ return NULL;
+ }
+
+ if(!BaseMath_ReadCallback(vec))
+ return NULL;
+
+ }
+ if(vec == NULL) { //ortho projection onto cardinal plane
+ if((strcmp(plane, "X") == 0) && matSize == 2) {
+ mat[0] = 1.0f;
+ } else if((strcmp(plane, "Y") == 0) && matSize == 2) {
+ mat[3] = 1.0f;
+ } else if((strcmp(plane, "XY") == 0) && matSize > 2) {
+ mat[0] = 1.0f;
+ mat[4] = 1.0f;
+ } else if((strcmp(plane, "XZ") == 0) && matSize > 2) {
+ mat[0] = 1.0f;
+ mat[8] = 1.0f;
+ } else if((strcmp(plane, "YZ") == 0) && matSize > 2) {
+ mat[4] = 1.0f;
+ mat[8] = 1.0f;
+ } else {
+ PyErr_SetString(PyExc_AttributeError, "mathutils.OrthoProjectionMatrix(): unknown plane - expected: X, Y, XY, XZ, YZ\n");
+ return NULL;
+ }
+ } else { //arbitrary plane
+ //normalize arbitrary axis
+ for(x = 0; x < vec->size; x++) {
+ norm += vec->vec[x] * vec->vec[x];
+ }
+ norm = (float) sqrt(norm);
+ for(x = 0; x < vec->size; x++) {
+ vec->vec[x] /= norm;
+ }
+ if((strcmp(plane, "R") == 0) && matSize == 2) {
+ mat[0] = 1 - (vec->vec[0] * vec->vec[0]);
+ mat[1] = -(vec->vec[0] * vec->vec[1]);
+ mat[2] = -(vec->vec[0] * vec->vec[1]);
+ mat[3] = 1 - (vec->vec[1] * vec->vec[1]);
+ } else if((strcmp(plane, "R") == 0) && matSize > 2) {
+ mat[0] = 1 - (vec->vec[0] * vec->vec[0]);
+ mat[1] = -(vec->vec[0] * vec->vec[1]);
+ mat[2] = -(vec->vec[0] * vec->vec[2]);
+ mat[3] = -(vec->vec[0] * vec->vec[1]);
+ mat[4] = 1 - (vec->vec[1] * vec->vec[1]);
+ mat[5] = -(vec->vec[1] * vec->vec[2]);
+ mat[6] = -(vec->vec[0] * vec->vec[2]);
+ mat[7] = -(vec->vec[1] * vec->vec[2]);
+ mat[8] = 1 - (vec->vec[2] * vec->vec[2]);
+ } else {
+ PyErr_SetString(PyExc_AttributeError, "mathutils.OrthoProjectionMatrix(): unknown plane - expected: 'r' expected for axis designation\n");
+ return NULL;
+ }
+ }
+ if(matSize == 4) {
+ //resize matrix
+ mat[10] = mat[8];
+ mat[9] = mat[7];
+ mat[8] = mat[6];
+ mat[7] = 0.0f;
+ mat[6] = mat[5];
+ mat[5] = mat[4];
+ mat[4] = mat[3];
+ mat[3] = 0.0f;
+ }
+ //pass to matrix creation
+ return newMatrixObject(mat, matSize, matSize, Py_NEW, (PyTypeObject *)cls);
+}
+
+static char C_Matrix_Shear_doc[] =
+".. classmethod:: Shear(plane, factor, size)\n"
+"\n"
+" Create a matrix to represent an shear transformation.\n"
+"\n"
+" :arg plane: Can be any of the following: ['X', 'Y', 'XY', 'XZ', 'YZ'], where a single axis is for a 2D matrix.\n"
+" :type plane: string\n"
+" :arg factor: The factor of shear to apply.\n"
+" :type factor: float\n"
+" :arg size: The size of the shear matrix to construct [2, 4].\n"
+" :type size: int\n"
+" :return: A new shear matrix.\n"
+" :rtype: :class:`Matrix`\n";
+
+static PyObject *C_Matrix_Shear(PyObject *cls, PyObject *args)
+{
+ int matSize;
+ char *plane;
+ float factor;
+ float mat[16] = {0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f,
+ 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f};
+
+ if(!PyArg_ParseTuple(args, "sfi", &plane, &factor, &matSize)) {
+ PyErr_SetString(PyExc_TypeError,"mathutils.ShearMatrix(): expected string float and int\n");
+ return NULL;
+ }
+ if(matSize != 2 && matSize != 3 && matSize != 4) {
+ PyErr_SetString(PyExc_AttributeError,"mathutils.ShearMatrix(): can only return a 2x2 3x3 or 4x4 matrix\n");
+ return NULL;
+ }
+
+ if((strcmp(plane, "X") == 0)
+ && matSize == 2) {
+ mat[0] = 1.0f;
+ mat[2] = factor;
+ mat[3] = 1.0f;
+ } else if((strcmp(plane, "Y") == 0) && matSize == 2) {
+ mat[0] = 1.0f;
+ mat[1] = factor;
+ mat[3] = 1.0f;
+ } else if((strcmp(plane, "XY") == 0) && matSize > 2) {
+ mat[0] = 1.0f;
+ mat[4] = 1.0f;
+ mat[6] = factor;
+ mat[7] = factor;
+ } else if((strcmp(plane, "XZ") == 0) && matSize > 2) {
+ mat[0] = 1.0f;
+ mat[3] = factor;
+ mat[4] = 1.0f;
+ mat[5] = factor;
+ mat[8] = 1.0f;
+ } else if((strcmp(plane, "YZ") == 0) && matSize > 2) {
+ mat[0] = 1.0f;
+ mat[1] = factor;
+ mat[2] = factor;
+ mat[4] = 1.0f;
+ mat[8] = 1.0f;
+ } else {
+ PyErr_SetString(PyExc_AttributeError, "mathutils.ShearMatrix(): expected: x, y, xy, xz, yz or wrong matrix size for shearing plane\n");
+ return NULL;
+ }
+ if(matSize == 4) {
+ //resize matrix
+ mat[10] = mat[8];
+ mat[9] = mat[7];
+ mat[8] = mat[6];
+ mat[7] = 0.0f;
+ mat[6] = mat[5];
+ mat[5] = mat[4];
+ mat[4] = mat[3];
+ mat[3] = 0.0f;
+ }
+ //pass to matrix creation
+ return newMatrixObject(mat, matSize, matSize, Py_NEW, (PyTypeObject *)cls);
+}
+
/* assumes rowsize == colsize is checked and the read callback has run */
static float matrix_determinant(MatrixObject * self)
{
@@ -1094,7 +1526,6 @@ static PyObject *Matrix_mul(PyObject * m1, PyObject * m2)
return NULL;
}
else /* if(mat1) { */ {
-
if(VectorObject_Check(m2)) { /* MATRIX*VECTOR */
return column_vector_multiplication(mat1, (VectorObject *)m2); /* vector update done inside the function */
}
@@ -1300,12 +1731,12 @@ static PyObject *Matrix_getIsNegative( MatrixObject * self, void *type )
/* Python attributes get/set structure: */
/*****************************************************************************/
static PyGetSetDef Matrix_getseters[] = {
- {"row_size", (getter)Matrix_getRowSize, (setter)NULL, "The row size of the matrix (readonly). **type** int", NULL},
- {"col_size", (getter)Matrix_getColSize, (setter)NULL, "The column size of the matrix (readonly). **type** int", NULL},
- {"median_scale", (getter)Matrix_getMedianScale, (setter)NULL, "The average scale applied to each axis (readonly). **type** float", NULL},
- {"is_negative", (getter)Matrix_getIsNegative, (setter)NULL, "True if this matrix results in a negative scale, 3x3 and 4x4 only, (readonly). **type** bool", NULL},
+ {"row_size", (getter)Matrix_getRowSize, (setter)NULL, "The row size of the matrix (readonly).\n\n:type: int", NULL},
+ {"col_size", (getter)Matrix_getColSize, (setter)NULL, "The column size of the matrix (readonly).\n\n:type: int", NULL},
+ {"median_scale", (getter)Matrix_getMedianScale, (setter)NULL, "The average scale applied to each axis (readonly).\n\n:type: float", NULL},
+ {"is_negative", (getter)Matrix_getIsNegative, (setter)NULL, "True if this matrix results in a negative scale, 3x3 and 4x4 only, (readonly).\n\n:type: bool", NULL},
{"is_wrapped", (getter)BaseMathObject_getWrapped, (setter)NULL, BaseMathObject_Wrapped_doc, NULL},
- {"_owner",(getter)BaseMathObject_getOwner, (setter)NULL, BaseMathObject_Owner_doc, NULL},
+ {"owner",(getter)BaseMathObject_getOwner, (setter)NULL, BaseMathObject_Owner_doc, NULL},
{NULL,NULL,NULL,NULL,NULL} /* Sentinel */
};
@@ -1326,6 +1757,13 @@ static struct PyMethodDef Matrix_methods[] = {
{"to_quat", (PyCFunction) Matrix_toQuat, METH_NOARGS, Matrix_toQuat_doc},
{"copy", (PyCFunction) Matrix_copy, METH_NOARGS, Matrix_copy_doc},
{"__copy__", (PyCFunction) Matrix_copy, METH_NOARGS, Matrix_copy_doc},
+
+ /* class methods */
+ {"Rotation", (PyCFunction) C_Matrix_Rotation, METH_VARARGS | METH_CLASS, C_Matrix_Rotation_doc},
+ {"Scale", (PyCFunction) C_Matrix_Scale, METH_VARARGS | METH_CLASS, C_Matrix_Scale_doc},
+ {"Shear", (PyCFunction) C_Matrix_Shear, METH_VARARGS | METH_CLASS, C_Matrix_Shear_doc},
+ {"Translation", (PyCFunction) C_Matrix_Translation, METH_O | METH_CLASS, C_Matrix_Translation_doc},
+ {"OrthoProjection", (PyCFunction) C_Matrix_OrthoProjection, METH_VARARGS | METH_CLASS, C_Matrix_OrthoProjection_doc},
{NULL, NULL, 0, NULL}
};
diff --git a/source/blender/python/generic/mathutils_quat.c b/source/blender/python/generic/mathutils_quat.c
index 6cd2d0ec727..553844b6ee5 100644
--- a/source/blender/python/generic/mathutils_quat.c
+++ b/source/blender/python/generic/mathutils_quat.c
@@ -109,7 +109,7 @@ static PyObject *Quaternion_ToEuler(QuaternionObject * self, PyObject *args)
}
//----------------------------Quaternion.toMatrix()------------------
static char Quaternion_ToMatrix_doc[] =
-".. method:: to_matrix(other)\n"
+".. method:: to_matrix()\n"
"\n"
" Return a matrix representation of the quaternion.\n"
"\n"
@@ -922,15 +922,15 @@ static struct PyMethodDef Quaternion_methods[] = {
/* Python attributes get/set structure: */
/*****************************************************************************/
static PyGetSetDef Quaternion_getseters[] = {
- {"w", (getter)Quaternion_getAxis, (setter)Quaternion_setAxis, "Quaternion W value. **type** float", (void *)0},
- {"x", (getter)Quaternion_getAxis, (setter)Quaternion_setAxis, "Quaternion X axis. **type** float", (void *)1},
- {"y", (getter)Quaternion_getAxis, (setter)Quaternion_setAxis, "Quaternion Y axis. **type** float", (void *)2},
- {"z", (getter)Quaternion_getAxis, (setter)Quaternion_setAxis, "Quaternion Z axis. **type** float", (void *)3},
- {"magnitude", (getter)Quaternion_getMagnitude, (setter)NULL, "Size of the quaternion (readonly). **type** float", NULL},
- {"angle", (getter)Quaternion_getAngle, (setter)Quaternion_setAngle, "angle of the quaternion. **type** float", NULL},
- {"axis",(getter)Quaternion_getAxisVec, (setter)Quaternion_setAxisVec, "quaternion axis as a vector. **type** :class:`Vector`", NULL},
+ {"w", (getter)Quaternion_getAxis, (setter)Quaternion_setAxis, "Quaternion W value.\n\n:type: float", (void *)0},
+ {"x", (getter)Quaternion_getAxis, (setter)Quaternion_setAxis, "Quaternion X axis.\n\n:type: float", (void *)1},
+ {"y", (getter)Quaternion_getAxis, (setter)Quaternion_setAxis, "Quaternion Y axis.\n\n:type: float", (void *)2},
+ {"z", (getter)Quaternion_getAxis, (setter)Quaternion_setAxis, "Quaternion Z axis.\n\n:type: float", (void *)3},
+ {"magnitude", (getter)Quaternion_getMagnitude, (setter)NULL, "Size of the quaternion (readonly).\n\n:type: float", NULL},
+ {"angle", (getter)Quaternion_getAngle, (setter)Quaternion_setAngle, "angle of the quaternion.\n\n:type: float", NULL},
+ {"axis",(getter)Quaternion_getAxisVec, (setter)Quaternion_setAxisVec, "quaternion axis as a vector.\n\n:type: :class:`Vector`", NULL},
{"is_wrapped", (getter)BaseMathObject_getWrapped, (setter)NULL, BaseMathObject_Wrapped_doc, NULL},
- {"_owner", (getter)BaseMathObject_getOwner, (setter)NULL, BaseMathObject_Owner_doc, NULL},
+ {"owner", (getter)BaseMathObject_getOwner, (setter)NULL, BaseMathObject_Owner_doc, NULL},
{NULL,NULL,NULL,NULL,NULL} /* Sentinel */
};
diff --git a/source/blender/python/generic/mathutils_vector.c b/source/blender/python/generic/mathutils_vector.c
index 5c8401ca15a..7b73a7501bb 100644
--- a/source/blender/python/generic/mathutils_vector.c
+++ b/source/blender/python/generic/mathutils_vector.c
@@ -39,7 +39,7 @@
#define SWIZZLE_VALID_AXIS 0x4
#define SWIZZLE_AXIS 0x3
-static PyObject *row_vector_multiplication(VectorObject* vec, MatrixObject * mat); /* utility func */
+static int row_vector_multiplication(float rvec[4], VectorObject* vec, MatrixObject * mat); /* utility func */
static PyObject *Vector_ToTupleExt(VectorObject *self, int ndigits);
//----------------------------------mathutils.Vector() ------------------
@@ -508,7 +508,8 @@ static char Vector_angle_doc[] =
" :arg other: another vector to compare the angle with\n"
" :type other: :class:`Vector`\n"
" :arg fallback: return this value when the angle cant be calculated (zero length vector)\n"
-" :return angle: angle in radians or fallback when given\n"
+" :type fallback: any\n"
+" :return: angle in radians or fallback when given\n"
" :rtype: float\n"
"\n"
" .. note:: Zero length vectors raise an :exc:`AttributeError`.\n";
@@ -607,8 +608,9 @@ static char Vector_Project_doc[] =
"\n"
" Return the projection of this vector onto the *other*.\n"
"\n"
+" :arg other: second vector.\n"
" :type other: :class:`Vector`\n"
-" :return projection: the parallel projection vector\n"
+" :return: the parallel projection vector\n"
" :rtype: :class:`Vector`\n";
static PyObject *Vector_Project(VectorObject *self, VectorObject *value)
@@ -1000,7 +1002,11 @@ static PyObject *Vector_mul(PyObject * v1, PyObject * v2)
return PyFloat_FromDouble(dot);
}
- /*swap so vec1 is always the vector */
+ /* swap so vec1 is always the vector */
+ /* note: it would seem from this code that the matrix multiplication below
+ * is communicative. however the matrix class will always handle the
+ * (matrix * vector) case so we can ignore it here.
+ * This is NOT so for Quaternions: TODO, check if communicative (vec * quat) is correct */
if (vec2) {
vec1= vec2;
v2= v1;
@@ -1008,7 +1014,10 @@ static PyObject *Vector_mul(PyObject * v1, PyObject * v2)
if (MatrixObject_Check(v2)) {
/* VEC * MATRIX */
- return row_vector_multiplication(vec1, (MatrixObject*)v2);
+ float tvec[4];
+ if(row_vector_multiplication(tvec, vec1, (MatrixObject*)v2) == -1)
+ return NULL;
+ return newVectorObject(tvec, vec1->size, Py_NEW, NULL);
} else if (QuaternionObject_Check(v2)) {
/* VEC * QUAT */
QuaternionObject *quat2 = (QuaternionObject*)v2;
@@ -1054,42 +1063,20 @@ static PyObject *Vector_imul(PyObject * v1, PyObject * v2)
/* only support vec*=float and vec*=mat
vec*=vec result is a float so that wont work */
if (MatrixObject_Check(v2)) {
- float vecCopy[4];
- int x,y, size = vec->size;
- MatrixObject *mat= (MatrixObject*)v2;
-
- if(!BaseMath_ReadCallback(mat))
+ float tvec[4];
+ if(row_vector_multiplication(tvec, vec, (MatrixObject*)v2) == -1)
return NULL;
-
- if(mat->colSize != size){
- if(mat->rowSize == 4 && vec->size != 3){
- PyErr_SetString(PyExc_AttributeError, "vector * matrix: matrix column size and the vector size must be the same");
- return NULL;
- } else {
- vecCopy[3] = 1.0f;
- }
- }
-
- for(i = 0; i < size; i++){
- vecCopy[i] = vec->vec[i];
- }
-
- size = MIN2(size, mat->colSize);
-
- /*muliplication*/
- for(x = 0, i = 0; x < size; x++, i++) {
- double dot = 0.0f;
- for(y = 0; y < mat->rowSize; y++) {
- dot += mat->matrix[y][x] * vecCopy[y];
- }
- vec->vec[i] = (float)dot;
- }
+
+ i= vec->size - 1;
+ do {
+ vec->vec[i] = tvec[i];
+ } while(i--);
}
else if (((scalar= PyFloat_AsDouble(v2)) == -1.0 && PyErr_Occurred())==0) { /* VEC*=FLOAT */
-
- for(i = 0; i < vec->size; i++) {
+ i= vec->size - 1;
+ do {
vec->vec[i] *= scalar;
- }
+ } while(i--);
}
else {
PyErr_SetString(PyExc_TypeError, "Vector multiplication: arguments not acceptable for this operation\n");
@@ -1594,14 +1581,14 @@ static int Vector_setSwizzle(VectorObject *self, PyObject * value, void *closure
/* Python attributes get/set structure: */
/*****************************************************************************/
static PyGetSetDef Vector_getseters[] = {
- {"x", (getter)Vector_getAxis, (setter)Vector_setAxis, "Vector X axis. **type** float", (void *)0},
- {"y", (getter)Vector_getAxis, (setter)Vector_setAxis, "Vector Y axis. **type** float", (void *)1},
- {"z", (getter)Vector_getAxis, (setter)Vector_setAxis, "Vector Z axis (3D Vectors only). **type** float", (void *)2},
- {"w", (getter)Vector_getAxis, (setter)Vector_setAxis, "Vector W axis (4D Vectors only). **type** float", (void *)3},
- {"length", (getter)Vector_getLength, (setter)Vector_setLength, "Vector Length. **type** float", NULL},
- {"magnitude", (getter)Vector_getLength, (setter)Vector_setLength, "Vector Length. **type** float", NULL},
+ {"x", (getter)Vector_getAxis, (setter)Vector_setAxis, "Vector X axis.\n\n:type: float", (void *)0},
+ {"y", (getter)Vector_getAxis, (setter)Vector_setAxis, "Vector Y axis.\n\n:type: float", (void *)1},
+ {"z", (getter)Vector_getAxis, (setter)Vector_setAxis, "Vector Z axis (3D Vectors only).\n\n:type: float", (void *)2},
+ {"w", (getter)Vector_getAxis, (setter)Vector_setAxis, "Vector W axis (4D Vectors only).\n\n:type: float", (void *)3},
+ {"length", (getter)Vector_getLength, (setter)Vector_setLength, "Vector Length.\n\n:type: float", NULL},
+ {"magnitude", (getter)Vector_getLength, (setter)Vector_setLength, "Vector Length.\n\n:type: float", NULL},
{"is_wrapped", (getter)BaseMathObject_getWrapped, (setter)NULL, BaseMathObject_Wrapped_doc, NULL},
- {"_owner", (getter)BaseMathObject_getOwner, (setter)NULL, BaseMathObject_Owner_doc, NULL},
+ {"owner", (getter)BaseMathObject_getOwner, (setter)NULL, BaseMathObject_Owner_doc, NULL},
/* autogenerated swizzle attrs, see python script below */
{"xx", (getter)Vector_getSwizzle, (setter)NULL, NULL, SET_INT_IN_POINTER(((0|SWIZZLE_VALID_AXIS) | ((0|SWIZZLE_VALID_AXIS)<<SWIZZLE_BITS_PER_AXIS)))}, // 36
@@ -1990,37 +1977,37 @@ if len(unique) != len(items):
// [2][5][8]
// [3][6][9]
//vector/matrix multiplication IS NOT COMMUTATIVE!!!!
-static PyObject *row_vector_multiplication(VectorObject* vec, MatrixObject * mat)
+static int row_vector_multiplication(float rvec[4], VectorObject* vec, MatrixObject * mat)
{
- float vecNew[4], vecCopy[4];
+ float vecCopy[4];
double dot = 0.0f;
int x, y, z = 0, vec_size = vec->size;
if(mat->colSize != vec_size){
if(mat->colSize == 4 && vec_size != 3){
PyErr_SetString(PyExc_AttributeError, "vector * matrix: matrix column size and the vector size must be the same");
- return NULL;
+ return -1;
}else{
vecCopy[3] = 1.0f;
}
}
if(!BaseMath_ReadCallback(vec) || !BaseMath_ReadCallback(mat))
- return NULL;
+ return -1;
for(x = 0; x < vec_size; x++){
vecCopy[x] = vec->vec[x];
}
- vecNew[3] = 1.0f;
+ rvec[3] = 1.0f;
//muliplication
for(x = 0; x < mat->rowSize; x++) {
for(y = 0; y < mat->colSize; y++) {
dot += mat->matrix[x][y] * vecCopy[y];
}
- vecNew[z++] = (float)dot;
+ rvec[z++] = (float)dot;
dot = 0.0f;
}
- return newVectorObject(vecNew, vec_size, Py_NEW, NULL);
+ return 0;
}
/*----------------------------Vector.negate() -------------------- */
diff --git a/source/blender/python/generic/noise.c b/source/blender/python/generic/noise.c
index 168ee65795d..4a09cbb58d8 100644
--- a/source/blender/python/generic/noise.c
+++ b/source/blender/python/generic/noise.c
@@ -18,7 +18,7 @@
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software Foundation,
- * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
* The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
* All rights reserved.
@@ -658,7 +658,7 @@ static struct PyModuleDef noise_module_def = {
PyObject *Noise_Init(void)
{
PyObject *submodule = PyModule_Create(&noise_module_def);
- PyDict_SetItemString(PySys_GetObject("modules"), noise_module_def.m_name, submodule);
+ PyDict_SetItemString(PyImport_GetModuleDict(), noise_module_def.m_name, submodule);
/* use current time as seed for random number generator by default */
setRndSeed(0);
diff --git a/source/blender/python/generic/py_capi_utils.c b/source/blender/python/generic/py_capi_utils.c
new file mode 100644
index 00000000000..d59624b54ab
--- /dev/null
+++ b/source/blender/python/generic/py_capi_utils.c
@@ -0,0 +1,438 @@
+/**
+ * $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.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+*/
+
+#include <Python.h>
+#include "py_capi_utils.h"
+
+/* for debugging */
+void PyC_ObSpit(char *name, PyObject *var) {
+ fprintf(stderr, "<%s> : ", name);
+ if (var==NULL) {
+ fprintf(stderr, "<NIL>");
+ }
+ else {
+ PyObject_Print(var, stderr, 0);
+ fprintf(stderr, " ref:%d ", (int)var->ob_refcnt);
+ fprintf(stderr, " ptr:%p", (void *)var);
+
+ fprintf(stderr, " type:");
+ if(Py_TYPE(var))
+ fprintf(stderr, "%s", Py_TYPE(var)->tp_name);
+ else
+ fprintf(stderr, "<NIL>");
+ }
+ fprintf(stderr, "\n");
+}
+
+void PyC_LineSpit(void) {
+ const char *filename;
+ int lineno;
+
+ PyErr_Clear();
+ PyC_FileAndNum(&filename, &lineno);
+
+ fprintf(stderr, "%s:%d\n", filename, lineno);
+}
+
+void PyC_FileAndNum(const char **filename, int *lineno)
+{
+ PyObject *getframe, *frame;
+ PyObject *f_lineno= NULL, *co_filename= NULL;
+
+ if (filename) *filename= NULL;
+ if (lineno) *lineno = -1;
+
+ getframe = PySys_GetObject("_getframe"); // borrowed
+ if (getframe==NULL) {
+ PyErr_Clear();
+ return;
+ }
+
+ frame = PyObject_CallObject(getframe, NULL);
+ if (frame==NULL) {
+ PyErr_Clear();
+ return;
+ }
+
+ /* when executing a script */
+ if (filename) {
+ co_filename= PyC_Object_GetAttrStringArgs(frame, 1, "f_code", "co_filename");
+ if (co_filename==NULL) {
+ PyErr_SetString(PyExc_SystemError, "Could not access sys._getframe().f_code.co_filename");
+ Py_DECREF(frame);
+ return;
+ }
+
+ *filename = _PyUnicode_AsString(co_filename);
+ Py_DECREF(co_filename);
+ }
+
+ /* when executing a module */
+ if(filename && *filename == NULL) {
+ /* try an alternative method to get the filename - module based
+ * references below are all borrowed (double checked) */
+ PyObject *mod_name= PyDict_GetItemString(PyEval_GetGlobals(), "__name__");
+ if(mod_name) {
+ PyObject *mod= PyDict_GetItem(PyImport_GetModuleDict(), mod_name);
+ if(mod) {
+ *filename= PyModule_GetFilename(mod);
+ }
+
+ /* unlikely, fallback */
+ if(*filename == NULL) {
+ *filename= _PyUnicode_AsString(mod_name);
+ }
+ }
+ }
+
+
+ if (lineno) {
+ f_lineno= PyObject_GetAttrString(frame, "f_lineno");
+ if (f_lineno==NULL) {
+ PyErr_SetString(PyExc_SystemError, "Could not access sys._getframe().f_lineno");
+ Py_DECREF(frame);
+ return;
+ }
+
+ *lineno = (int)PyLong_AsSsize_t(f_lineno);
+ Py_DECREF(f_lineno);
+ }
+
+ Py_DECREF(frame);
+}
+
+/* Would be nice if python had this built in */
+PyObject *PyC_Object_GetAttrStringArgs(PyObject *o, Py_ssize_t n, ...)
+{
+ Py_ssize_t i;
+ PyObject *item= o;
+ char *attr;
+
+ va_list vargs;
+
+ va_start(vargs, n);
+ for (i=0; i<n; i++) {
+ attr = va_arg(vargs, char *);
+ item = PyObject_GetAttrString(item, attr);
+
+ if (item)
+ Py_DECREF(item);
+ else /* python will set the error value here */
+ break;
+
+ }
+ va_end(vargs);
+
+ Py_XINCREF(item); /* final value has is increfed, to match PyObject_GetAttrString */
+ return item;
+}
+
+/* returns the exception string as a new PyUnicode object, depends on external StringIO module */
+PyObject *PyC_ExceptionBuffer(void)
+{
+ PyObject *stdout_backup = PySys_GetObject("stdout"); /* borrowed */
+ PyObject *stderr_backup = PySys_GetObject("stderr"); /* borrowed */
+ PyObject *string_io = NULL;
+ PyObject *string_io_buf = NULL;
+ PyObject *string_io_mod= NULL;
+ PyObject *string_io_getvalue= NULL;
+
+ PyObject *error_type, *error_value, *error_traceback;
+
+ if (!PyErr_Occurred())
+ return NULL;
+
+ PyErr_Fetch(&error_type, &error_value, &error_traceback);
+
+ PyErr_Clear();
+
+ /* import io
+ * string_io = io.StringIO()
+ */
+
+ if(! (string_io_mod= PyImport_ImportModule("io")) ) {
+ goto error_cleanup;
+ } else if (! (string_io = PyObject_CallMethod(string_io_mod, "StringIO", NULL))) {
+ goto error_cleanup;
+ } else if (! (string_io_getvalue= PyObject_GetAttrString(string_io, "getvalue"))) {
+ goto error_cleanup;
+ }
+
+ Py_INCREF(stdout_backup); // since these were borrowed we dont want them freed when replaced.
+ Py_INCREF(stderr_backup);
+
+ PySys_SetObject("stdout", string_io); // both of these are free'd when restoring
+ PySys_SetObject("stderr", string_io);
+
+ PyErr_Restore(error_type, error_value, error_traceback);
+ PyErr_Print(); /* print the error */
+ PyErr_Clear();
+
+ string_io_buf = PyObject_CallObject(string_io_getvalue, NULL);
+
+ PySys_SetObject("stdout", stdout_backup);
+ PySys_SetObject("stderr", stderr_backup);
+
+ Py_DECREF(stdout_backup); /* now sys owns the ref again */
+ Py_DECREF(stderr_backup);
+
+ Py_DECREF(string_io_mod);
+ Py_DECREF(string_io_getvalue);
+ Py_DECREF(string_io); /* free the original reference */
+
+ PyErr_Clear();
+ return string_io_buf;
+
+
+error_cleanup:
+ /* could not import the module so print the error and close */
+ Py_XDECREF(string_io_mod);
+ Py_XDECREF(string_io);
+
+ PyErr_Restore(error_type, error_value, error_traceback);
+ PyErr_Print(); /* print the error */
+ PyErr_Clear();
+
+ return NULL;
+}
+
+
+/* string conversion, escape non-unicode chars, coerce must be set to NULL */
+const char *PuC_UnicodeAsByte(PyObject *py_str, PyObject **coerce)
+{
+ char *result;
+
+ result= _PyUnicode_AsString(py_str);
+
+ if(result) {
+ /* 99% of the time this is enough but we better support non unicode
+ * chars since blender doesnt limit this */
+ return result;
+ }
+ else {
+ /* mostly copied from fileio.c's, fileio_init */
+ PyObject *stringobj;
+ PyObject *u;
+
+ PyErr_Clear();
+
+ u= PyUnicode_FromObject(py_str); /* coerce into unicode */
+
+ if (u == NULL)
+ return NULL;
+
+ stringobj= PyUnicode_EncodeUTF8(PyUnicode_AS_UNICODE(u), PyUnicode_GET_SIZE(u), "surrogateescape");
+ Py_DECREF(u);
+ if (stringobj == NULL)
+ return NULL;
+ if (!PyBytes_Check(stringobj)) { /* this seems wrong but it works fine */
+ // printf("encoder failed to return bytes\n");
+ Py_DECREF(stringobj);
+ return NULL;
+ }
+ *coerce= stringobj;
+
+ return PyBytes_AS_STRING(stringobj);
+ }
+}
+
+PyObject *PyC_UnicodeFromByte(const char *str)
+{
+ PyObject *result= PyUnicode_FromString(str);
+ if(result) {
+ /* 99% of the time this is enough but we better support non unicode
+ * chars since blender doesnt limit this */
+ return result;
+ }
+ else {
+ PyErr_Clear();
+ result= PyUnicode_DecodeUTF8(str, strlen(str), "surrogateescape");
+ return result;
+ }
+}
+
+/*****************************************************************************
+* Description: This function creates a new Python dictionary object.
+* note: dict is owned by sys.modules["__main__"] module, reference is borrowed
+* note: important we use the dict from __main__, this is what python expects
+ for 'pickle' to work as well as strings like this...
+ >> foo = 10
+ >> print(__import__("__main__").foo)
+*****************************************************************************/
+PyObject *PyC_DefaultNameSpace(const char *filename)
+{
+ PyInterpreterState *interp= PyThreadState_GET()->interp;
+ PyObject *mod_main= PyModule_New("__main__");
+ PyDict_SetItemString(interp->modules, "__main__", mod_main);
+ Py_DECREF(mod_main); /* sys.modules owns now */
+ PyModule_AddStringConstant(mod_main, "__name__", "__main__");
+ if(filename)
+ PyModule_AddStringConstant(mod_main, "__file__", filename); /* __file__ only for nice UI'ness */
+ PyModule_AddObject(mod_main, "__builtins__", interp->builtins);
+ Py_INCREF(interp->builtins); /* AddObject steals a reference */
+ return PyModule_GetDict(mod_main);
+}
+
+
+/* Would be nice if python had this built in */
+void PyC_RunQuicky(const char *filepath, int n, ...)
+{
+ FILE *fp= fopen(filepath, "r");
+
+ if(fp) {
+ PyGILState_STATE gilstate= PyGILState_Ensure();
+
+ va_list vargs;
+
+ int *sizes= PyMem_MALLOC(sizeof(int) * (n / 2));
+ int i;
+
+ PyObject *py_dict = PyC_DefaultNameSpace(filepath);
+ PyObject *values= PyList_New(n / 2); /* namespace owns this, dont free */
+
+ PyObject *py_result, *ret;
+
+ PyObject *struct_mod= PyImport_ImportModule("struct");
+ PyObject *calcsize= PyObject_GetAttrString(struct_mod, "calcsize"); /* struct.calcsize */
+ PyObject *pack= PyObject_GetAttrString(struct_mod, "pack"); /* struct.pack */
+ PyObject *unpack= PyObject_GetAttrString(struct_mod, "unpack"); /* struct.unpack */
+
+ Py_DECREF(struct_mod);
+
+ va_start(vargs, n);
+ for (i=0; i * 2<n; i++) {
+ char *format = va_arg(vargs, char *);
+ void *ptr = va_arg(vargs, void *);
+
+ ret= PyObject_CallFunction(calcsize, "s", format);
+
+ if(ret) {
+ sizes[i]= PyLong_AsSsize_t(ret);
+ Py_DECREF(ret);
+ ret = PyObject_CallFunction(unpack, "sy#", format, (char *)ptr, sizes[i]);
+ }
+
+ if(ret == NULL) {
+ printf("PyC_InlineRun error, line:%d\n", __LINE__);
+ PyErr_Print();
+ PyErr_Clear();
+
+ PyList_SET_ITEM(values, i, Py_None); /* hold user */
+ Py_INCREF(Py_None);
+
+ sizes[i]= 0;
+ }
+ else {
+ if(PyTuple_GET_SIZE(ret) == 1) {
+ /* convenience, convert single tuples into single values */
+ PyObject *tmp= PyTuple_GET_ITEM(ret, 0);
+ Py_INCREF(tmp);
+ Py_DECREF(ret);
+ ret = tmp;
+ }
+
+ PyList_SET_ITEM(values, i, ret); /* hold user */
+ }
+ }
+ va_end(vargs);
+
+ /* set the value so we can access it */
+ PyDict_SetItemString(py_dict, "values", values);
+
+ py_result = PyRun_File(fp, filepath, Py_file_input, py_dict, py_dict);
+
+ fclose(fp);
+
+ if(py_result) {
+
+ /* we could skip this but then only slice assignment would work
+ * better not be so strict */
+ values= PyDict_GetItemString(py_dict, "values");
+
+ if(values && PyList_Check(values)) {
+
+ /* dont use the result */
+ Py_DECREF(py_result);
+ py_result= NULL;
+
+ /* now get the values back */
+ va_start(vargs, n);
+ for (i=0; i*2 <n; i++) {
+ char *format = va_arg(vargs, char *);
+ void *ptr = va_arg(vargs, void *);
+
+ PyObject *item;
+ PyObject *item_new;
+ /* prepend the string formatting and remake the tuple */
+ item= PyList_GET_ITEM(values, i);
+ if(PyTuple_CheckExact(item)) {
+ int ofs= PyTuple_GET_SIZE(item);
+ item_new= PyTuple_New(ofs + 1);
+ while(ofs--) {
+ PyObject *member= PyTuple_GET_ITEM(item, ofs);
+ PyTuple_SET_ITEM(item_new, ofs + 1, member);
+ Py_INCREF(member);
+ }
+
+ PyTuple_SET_ITEM(item_new, 0, PyUnicode_FromString(format));
+ }
+ else {
+ item_new= Py_BuildValue("sO", format, item);
+ }
+
+ ret = PyObject_Call(pack, item_new, NULL);
+
+ if(ret) {
+ /* copy the bytes back into memory */
+ memcpy(ptr, PyBytes_AS_STRING(ret), sizes[i]);
+ Py_DECREF(ret);
+ }
+ else {
+ printf("PyC_InlineRun error on arg '%d', line:%d\n", i, __LINE__);
+ PyC_ObSpit("failed converting:", item_new);
+ PyErr_Print();
+ PyErr_Clear();
+ }
+
+ Py_DECREF(item_new);
+ }
+ va_end(vargs);
+ }
+ else {
+ printf("PyC_InlineRun error, 'values' not a list, line:%d\n", __LINE__);
+ }
+ }
+ else {
+ printf("PyC_InlineRun error line:%d\n", __LINE__);
+ PyErr_Print();
+ PyErr_Clear();
+ }
+
+ Py_DECREF(calcsize);
+ Py_DECREF(pack);
+ Py_DECREF(unpack);
+
+ PyMem_FREE(sizes);
+
+ PyGILState_Release(gilstate);
+ }
+}
diff --git a/source/blender/python/generic/py_capi_utils.h b/source/blender/python/generic/py_capi_utils.h
new file mode 100644
index 00000000000..b378f7a5a34
--- /dev/null
+++ b/source/blender/python/generic/py_capi_utils.h
@@ -0,0 +1,42 @@
+/**
+ * $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.
+ *
+ * Contributor(s): Campbell Barton
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+#ifndef PY_CAPI_UTILS_H
+#define PY_CAPI_UTILS_H
+
+void PyC_ObSpit(char *name, PyObject *var);
+void PyC_LineSpit(void);
+PyObject * PyC_ExceptionBuffer(void);
+PyObject * PyC_Object_GetAttrStringArgs(PyObject *o, Py_ssize_t n, ...);
+void PyC_FileAndNum(const char **filename, int *lineno);
+int PyC_AsArray(void *array, PyObject *value, int length, PyTypeObject *type, char *error_prefix);
+
+/* follow http://www.python.org/dev/peps/pep-0383/ */
+PyObject * PyC_UnicodeFromByte(const char *str);
+const char * PuC_UnicodeAsByte(PyObject *py_str, PyObject **coerce); /* coerce must be NULL */
+
+/* name namespace function for bpy & bge */
+PyObject * PyC_DefaultNameSpace(const char *filename);
+void PyC_RunQuicky(const char *filepath, int n, ...);
+#endif // PY_CAPI_UTILS_H
diff --git a/source/blender/python/intern/Makefile b/source/blender/python/intern/Makefile
index 419092cbe21..6c0b7b4d14e 100644
--- a/source/blender/python/intern/Makefile
+++ b/source/blender/python/intern/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
# All rights reserved.
@@ -57,6 +57,7 @@ CPPFLAGS += -I../../imbuf
CPPFLAGS += -I../../blenloader
CPPFLAGS += -I../../windowmanager
CPPFLAGS += -I../../render/extern/include
+CPPFLAGS += -I$(NAN_AUDASPACE)/include
# path to the guarded memory allocator
CPPFLAGS += -I$(NAN_GUARDEDALLOC)/include
diff --git a/source/blender/python/intern/bpy.c b/source/blender/python/intern/bpy.c
index 7933c2a1bc7..12a5221f76e 100644
--- a/source/blender/python/intern/bpy.c
+++ b/source/blender/python/intern/bpy.c
@@ -41,6 +41,8 @@
#include "../generic/blf_api.h"
#include "../generic/IDProp.h"
+#include "AUD_PyInit.h"
+
static char bpy_script_paths_doc[] =
".. function:: script_paths()\n"
"\n"
@@ -65,7 +67,7 @@ PyObject *bpy_script_paths(PyObject *self)
static char bpy_blend_paths_doc[] =
".. function:: blend_paths(absolute=False)\n"
"\n"
-" Returns a list of paths associated with this blend file.\n"
+" Returns a list of paths to external files referenced by the loaded .blend file.\n"
"\n"
" :arg absolute: When true the paths returned are made absolute.\n"
" :type absolute: boolean\n"
@@ -153,18 +155,20 @@ void BPy_init_modules( void )
BGL_Init();
BLF_Init();
IDProp_Init_Types();
-
+ AUD_initPython();
mod = PyModule_New("_bpy");
/* add the module so we can import it */
- PyDict_SetItemString(PySys_GetObject("modules"), "_bpy", mod);
+ PyDict_SetItemString(PyImport_GetModuleDict(), "_bpy", mod);
Py_DECREF(mod);
/* run first, initializes rna types */
BPY_rna_init();
PyModule_AddObject( mod, "types", BPY_rna_types() ); /* needs to be first so bpy_types can run */
+ PyModule_AddObject(mod, "StructMetaIDProp", (PyObject *)&pyrna_struct_meta_idprop_Type); /* metaclass for idprop types, bpy_types.py needs access */
+
bpy_import_test("bpy_types");
PyModule_AddObject( mod, "data", BPY_rna_module() ); /* imports bpy_types by running this */
bpy_import_test("bpy_types");
diff --git a/source/blender/python/intern/bpy.h b/source/blender/python/intern/bpy.h
index 114d0f9a43d..76eef6ea4b9 100644
--- a/source/blender/python/intern/bpy.h
+++ b/source/blender/python/intern/bpy.h
@@ -22,4 +22,4 @@
* ***** END GPL LICENSE BLOCK ***** */
void BPy_init_modules( void );
- \ No newline at end of file
+
diff --git a/source/blender/python/intern/bpy_array.c b/source/blender/python/intern/bpy_array.c
index 9ceba4ae004..6d971d8708e 100644
--- a/source/blender/python/intern/bpy_array.c
+++ b/source/blender/python/intern/bpy_array.c
@@ -24,6 +24,7 @@
#include "bpy_rna.h"
#include "BKE_global.h"
+#include "MEM_guardedalloc.h"
#define MAX_ARRAY_DIMENSION 10
@@ -144,8 +145,9 @@ static int validate_array_length(PyObject *rvalue, PointerRNA *ptr, PropertyRNA
return 0;
}
#else
- PyErr_Format(PyExc_ValueError, "%s %s.%s: array length cannot be changed to %d", error_prefix, RNA_struct_identifier(ptr->type), RNA_property_identifier(prop), tot);
- return 0;
+ *totitem= tot;
+ return 1;
+
#endif
}
@@ -248,22 +250,25 @@ static int py_to_array(PyObject *py, PointerRNA *ptr, PropertyRNA *prop, Paramet
}
if (totitem) {
- if (!param_data || RNA_property_flag(prop) & PROP_DYNAMIC)
- data= PyMem_MALLOC(item_size * totitem);
- else
+ /* note: this code is confusing */
+ if(param_data && RNA_property_flag(prop) & PROP_DYNAMIC) {
+ /* not freeing allocated mem, RNA_parameter_list_free() will do this */
+ ParameterDynAlloc *param_alloc= (ParameterDynAlloc *)param_data;
+ param_alloc->array_tot= (int)totitem;
+ param_alloc->array= MEM_callocN(item_size * totitem, "py_to_array dyn"); /* freeing param list will free */
+
+ data= param_alloc->array;
+ }
+ else if (param_data) {
data= param_data;
+ }
+ else {
+ data= PyMem_MALLOC(item_size * totitem);
+ }
copy_values(py, ptr, prop, 0, data, item_size, NULL, convert_item, NULL);
- if (param_data) {
- if (RNA_property_flag(prop) & PROP_DYNAMIC) {
- /* not freeing allocated mem, RNA_parameter_list_free will do this */
- *(char**)param_data= data;
-
- RNA_parameter_length_set_data(parms, prop, param_data, totitem);
- }
- }
- else {
+ if (param_data==NULL) {
/* NULL can only pass through in case RNA property arraylength is 0 (impossible?) */
rna_set_array(ptr, prop, data);
PyMem_FREE(data);
@@ -395,7 +400,7 @@ int pyrna_py_to_array_index(PointerRNA *ptr, PropertyRNA *prop, int arraydim, in
return ret;
}
-static PyObject *pyrna_array_item(PointerRNA *ptr, PropertyRNA *prop, int index)
+PyObject *pyrna_array_index(PointerRNA *ptr, PropertyRNA *prop, int index)
{
PyObject *item;
@@ -436,7 +441,7 @@ static PyObject *pyrna_py_from_array_internal(PointerRNA *ptr, PropertyRNA *prop
if (dim + 1 < totdim)
item= pyrna_py_from_array_internal(ptr, prop, dim + 1, index);
else {
- item= pyrna_array_item(ptr, prop, *index);
+ item= pyrna_array_index(ptr, prop, *index);
*index= *index + 1;
}
@@ -452,10 +457,10 @@ static PyObject *pyrna_py_from_array_internal(PointerRNA *ptr, PropertyRNA *prop
}
#endif
-PyObject *pyrna_py_from_array_index(BPy_PropertyRNA *self, PointerRNA *ptr, PropertyRNA *prop, int index)
+PyObject *pyrna_py_from_array_index(BPy_PropertyArrayRNA *self, PointerRNA *ptr, PropertyRNA *prop, int index)
{
int totdim, arraydim, arrayoffset, dimsize[MAX_ARRAY_DIMENSION], i, len;
- BPy_PropertyRNA *ret= NULL;
+ BPy_PropertyArrayRNA *ret= NULL;
arraydim= self ? self->arraydim : 0;
arrayoffset = self ? self->arrayoffset : 0;
@@ -473,7 +478,7 @@ PyObject *pyrna_py_from_array_index(BPy_PropertyRNA *self, PointerRNA *ptr, Prop
totdim= RNA_property_array_dimension(ptr, prop, dimsize);
if (arraydim + 1 < totdim) {
- ret= (BPy_PropertyRNA*)pyrna_prop_CreatePyObject(ptr, prop);
+ ret= (BPy_PropertyArrayRNA*)pyrna_prop_CreatePyObject(ptr, prop);
ret->arraydim= arraydim + 1;
/* arr[3][4][5]
@@ -491,7 +496,7 @@ PyObject *pyrna_py_from_array_index(BPy_PropertyRNA *self, PointerRNA *ptr, Prop
}
else {
index = arrayoffset + index;
- ret= (BPy_PropertyRNA*)pyrna_array_item(ptr, prop, index);
+ ret= (BPy_PropertyArrayRNA *)pyrna_array_index(ptr, prop, index);
}
return (PyObject*)ret;
diff --git a/source/blender/python/intern/bpy_interface.c b/source/blender/python/intern/bpy_interface.c
index af2b5b41961..6aaac3cd0e8 100644
--- a/source/blender/python/intern/bpy_interface.c
+++ b/source/blender/python/intern/bpy_interface.c
@@ -41,6 +41,7 @@
#include "MEM_guardedalloc.h"
#include "BLI_path_util.h"
#include "BLI_math_base.h"
+#include "BLI_string.h"
#include "BKE_context.h"
#include "BKE_text.h"
@@ -51,6 +52,7 @@
#include "BPY_extern.h"
#include "../generic/bpy_internal_import.h" // our own imports
+#include "../generic/py_capi_utils.h"
/* for internal use, when starting and ending python scripts */
@@ -169,15 +171,7 @@ void BPY_start_python_path(void)
/* cmake/MSVC debug build crashes without this, why only
in this case is unknown.. */
{
- char *envpath = getenv("PYTHONPATH");
-
- if(envpath && envpath[0]) {
- char *newenvpath = BLI_sprintfN("%s;%s", py_path_bundle, envpath);
- BLI_setenv("PYTHONPATH", newenvpath);
- MEM_freeN(newenvpath);
- }
- else
- BLI_setenv("PYTHONPATH", py_path_bundle);
+ BLI_setenv("PYTHONPATH", py_path_bundle);
}
#endif
@@ -313,7 +307,6 @@ int BPY_run_python_script( bContext *C, const char *fn, struct Text *text, struc
if (text) {
char fn_dummy[FILE_MAXDIR];
bpy_text_filename_get(fn_dummy, text);
- py_dict = bpy_namespace_dict_new(fn_dummy);
if( !text->compiled ) { /* if it wasn't already compiled, do it now */
char *buf = txt_to_buf( text );
@@ -327,31 +320,36 @@ int BPY_run_python_script( bContext *C, const char *fn, struct Text *text, struc
BPY_free_compiled_text( text );
}
}
- if(text->compiled)
- py_result = PyEval_EvalCode( text->compiled, py_dict, py_dict );
+
+ if(text->compiled) {
+ py_dict = PyC_DefaultNameSpace(fn_dummy);
+ py_result = PyEval_EvalCode(text->compiled, py_dict, py_dict);
+ }
}
else {
FILE *fp= fopen(fn, "r");
- py_dict = bpy_namespace_dict_new(fn);
-
if(fp) {
+ py_dict = PyC_DefaultNameSpace(fn);
+
#ifdef _WIN32
/* Previously we used PyRun_File to run directly the code on a FILE
* object, but as written in the Python/C API Ref Manual, chapter 2,
* 'FILE structs for different C libraries can be different and
* incompatible'.
* So now we load the script file data to a buffer */
- char *pystring;
+ {
+ char *pystring;
- fclose(fp);
+ fclose(fp);
- pystring= MEM_mallocN(strlen(fn) + 32, "pystring");
- pystring[0]= '\0';
- sprintf(pystring, "exec(open(r'%s').read())", fn);
- py_result = PyRun_String( pystring, Py_file_input, py_dict, py_dict );
- MEM_freeN(pystring);
+ pystring= MEM_mallocN(strlen(fn) + 32, "pystring");
+ pystring[0]= '\0';
+ sprintf(pystring, "exec(open(r'%s').read())", fn);
+ py_result = PyRun_String( pystring, Py_file_input, py_dict, py_dict );
+ MEM_freeN(pystring);
+ }
#else
py_result = PyRun_File(fp, fn, Py_file_input, py_dict, py_dict);
fclose(fp);
@@ -478,7 +476,7 @@ int BPY_run_python_script_space(const char *modulename, const char *func)
gilstate = PyGILState_Ensure();
- py_dict = bpy_namespace_dict_new("<dummy>");
+ py_dict = PyC_DefaultNameSpace("<dummy>");
PyObject *module = PyImport_ImportModule(scpt->script.filename);
if (module==NULL) {
@@ -530,7 +528,7 @@ int BPY_eval_button(bContext *C, const char *expr, double *value)
bpy_context_set(C, &gilstate);
- py_dict= bpy_namespace_dict_new("<blender button>");
+ py_dict= PyC_DefaultNameSpace("<blender button>");
mod = PyImport_ImportModule("math");
if (mod) {
@@ -601,7 +599,7 @@ int BPY_eval_string(bContext *C, const char *expr)
bpy_context_set(C, &gilstate);
- py_dict= bpy_namespace_dict_new("<blender string>");
+ py_dict= PyC_DefaultNameSpace("<blender string>");
retval = PyRun_String(expr, Py_eval_input, py_dict, py_dict);
diff --git a/source/blender/python/intern/bpy_operator.c b/source/blender/python/intern/bpy_operator.c
index 0e54f158ac4..eeab1fce4b2 100644
--- a/source/blender/python/intern/bpy_operator.c
+++ b/source/blender/python/intern/bpy_operator.c
@@ -40,6 +40,45 @@
#include "MEM_guardedalloc.h"
#include "BKE_report.h"
+static PyObject *pyop_poll( PyObject * self, PyObject * args)
+{
+ wmOperatorType *ot;
+ char *opname;
+ PyObject *context_dict= NULL; /* optional args */
+ PyObject *context_dict_back;
+ PyObject *ret;
+
+ // XXX Todo, work out a better solution for passing on context, could make a tuple from self and pack the name and Context into it...
+ bContext *C = BPy_GetContext();
+
+ if (!PyArg_ParseTuple(args, "s|O:_bpy.ops.poll", &opname, &context_dict))
+ return NULL;
+
+ ot= WM_operatortype_find(opname, TRUE);
+
+ if (ot == NULL) {
+ PyErr_Format(PyExc_SystemError, "Polling operator \"bpy.ops.%s\" error, could not be found", opname);
+ return NULL;
+ }
+
+ if(!PyDict_Check(context_dict))
+ context_dict= NULL;
+
+ context_dict_back= CTX_py_dict_get(C);
+
+ CTX_py_dict_set(C, (void *)context_dict);
+ Py_XINCREF(context_dict); /* so we done loose it */
+
+ /* main purpose of thsi function */
+ ret= WM_operator_poll((bContext*)C, ot) ? Py_True : Py_False;
+
+ /* restore with original context dict, probably NULL but need this for nested operator calls */
+ Py_XDECREF(context_dict);
+ CTX_py_dict_set(C, (void *)context_dict_back);
+
+ Py_INCREF(ret);
+ return ret;
+}
static PyObject *pyop_call( PyObject * self, PyObject * args)
{
@@ -63,10 +102,10 @@ static PyObject *pyop_call( PyObject * self, PyObject * args)
if (!PyArg_ParseTuple(args, "sO|O!s:_bpy.ops.call", &opname, &context_dict, &PyDict_Type, &kw, &context_str))
return NULL;
- ot= WM_operatortype_exists(opname);
+ ot= WM_operatortype_find(opname, TRUE);
if (ot == NULL) {
- PyErr_Format( PyExc_SystemError, "Calling operator \"bpy.ops.%s\" error, could not be found", opname);
+ PyErr_Format(PyExc_SystemError, "Calling operator \"bpy.ops.%s\" error, could not be found", opname);
return NULL;
}
@@ -250,22 +289,36 @@ static PyObject *pyop_getrna(PyObject *self, PyObject *value)
return (PyObject *)pyrna;
}
-PyObject *BPY_operator_module( void )
+static struct PyMethodDef bpy_ops_methods[] = {
+ {"poll", (PyCFunction) pyop_poll, METH_VARARGS, NULL},
+ {"call", (PyCFunction) pyop_call, METH_VARARGS, NULL},
+ {"as_string", (PyCFunction) pyop_as_string, METH_VARARGS, NULL},
+ {"dir", (PyCFunction) pyop_dir, METH_NOARGS, NULL},
+ {"get_rna", (PyCFunction) pyop_getrna, METH_O, NULL},
+ {"macro_define", (PyCFunction) PYOP_wrap_macro_define, METH_VARARGS, NULL},
+ {NULL, NULL, 0, NULL}
+};
+
+static struct PyModuleDef bpy_ops_module = {
+ PyModuleDef_HEAD_INIT,
+ "_bpy.ops",
+ NULL,
+ -1,/* multiple "initialization" just copies the module dict. */
+ bpy_ops_methods,
+ NULL, NULL, NULL, NULL
+};
+
+PyObject *BPY_operator_module(void)
{
- static PyMethodDef pyop_call_meth = {"call", (PyCFunction) pyop_call, METH_VARARGS, NULL};
- static PyMethodDef pyop_as_string_meth ={"as_string", (PyCFunction) pyop_as_string, METH_VARARGS, NULL};
- static PyMethodDef pyop_dir_meth = {"dir", (PyCFunction) pyop_dir, METH_NOARGS, NULL};
- static PyMethodDef pyop_getrna_meth = {"get_rna", (PyCFunction) pyop_getrna, METH_O, NULL};
- static PyMethodDef pyop_macro_def_meth ={"macro_define", (PyCFunction) PYOP_wrap_macro_define, METH_VARARGS, NULL};
-
- PyObject *submodule = PyModule_New("_bpy.ops");
- PyDict_SetItemString(PySys_GetObject("modules"), "_bpy.ops", submodule);
-
- PyModule_AddObject( submodule, "call", PyCFunction_New(&pyop_call_meth, NULL) );
- PyModule_AddObject( submodule, "as_string",PyCFunction_New(&pyop_as_string_meth,NULL) );
- PyModule_AddObject( submodule, "dir", PyCFunction_New(&pyop_dir_meth, NULL) );
- PyModule_AddObject( submodule, "get_rna", PyCFunction_New(&pyop_getrna_meth, NULL) );
- PyModule_AddObject( submodule, "macro_define",PyCFunction_New(&pyop_macro_def_meth, NULL) );
+ PyObject *submodule;
+
+ submodule= PyModule_Create(&bpy_ops_module);
+ PyDict_SetItemString(PyImport_GetModuleDict(), bpy_ops_module.m_name, submodule);
+
+ /* INCREF since its its assumed that all these functions return the
+ * module with a new ref like PyDict_New, since they are passed to
+ * PyModule_AddObject which steals a ref */
+ Py_INCREF(submodule);
return submodule;
}
diff --git a/source/blender/python/intern/bpy_operator_wrap.c b/source/blender/python/intern/bpy_operator_wrap.c
index 0c1eafb4948..6d16896fb16 100644
--- a/source/blender/python/intern/bpy_operator_wrap.c
+++ b/source/blender/python/intern/bpy_operator_wrap.c
@@ -34,22 +34,15 @@
static void operator_properties_init(wmOperatorType *ot)
{
PyObject *py_class = ot->ext.data;
- PyObject *item= ((PyTypeObject*)py_class)->tp_dict; /* getattr(..., "__dict__") returns a proxy */
-
RNA_struct_blender_type_set(ot->ext.srna, ot);
- if(item) {
- /* only call this so pyrna_deferred_register_props gives a useful error
- * WM_operatortype_append_ptr will call RNA_def_struct_identifier
- * later */
- RNA_def_struct_identifier(ot->srna, ot->idname);
+ /* only call this so pyrna_deferred_register_class gives a useful error
+ * WM_operatortype_append_ptr will call RNA_def_struct_identifier
+ * later */
+ RNA_def_struct_identifier(ot->srna, ot->idname);
- if(pyrna_deferred_register_props(ot->srna, item) != 0) {
- PyErr_Print(); /* failed to register operator props */
- PyErr_Clear();
- }
- }
- else {
+ if(pyrna_deferred_register_class(ot->srna, py_class) != 0) {
+ PyErr_Print(); /* failed to register operator props */
PyErr_Clear();
}
}
@@ -105,7 +98,7 @@ PyObject *PYOP_wrap_macro_define(PyObject *self, PyObject *args)
if (!PyArg_ParseTuple(args, "Os:_bpy.ops.macro_define", &macro, &opname))
return NULL;
- if (WM_operatortype_exists(opname) == NULL) {
+ if (WM_operatortype_find(opname, TRUE) == NULL) {
PyErr_Format(PyExc_ValueError, "Macro Define: '%s' is not a valid operator id", opname);
return NULL;
}
@@ -114,7 +107,7 @@ PyObject *PYOP_wrap_macro_define(PyObject *self, PyObject *args)
srna= srna_from_self(macro, "Macro Define:");
macroname = RNA_struct_identifier(srna);
- ot = WM_operatortype_exists(macroname);
+ ot = WM_operatortype_find(macroname, TRUE);
if (!ot) {
PyErr_Format(PyExc_ValueError, "Macro Define: '%s' is not a valid macro or hasn't been registered yet", macroname);
diff --git a/source/blender/python/intern/bpy_props.c b/source/blender/python/intern/bpy_props.c
index c278ad56ab9..104027c0997 100644
--- a/source/blender/python/intern/bpy_props.c
+++ b/source/blender/python/intern/bpy_props.c
@@ -26,11 +26,15 @@
#include "bpy_rna.h"
#include "bpy_util.h"
+#include "BKE_utildefines.h"
+
#include "RNA_define.h" /* for defining our own rna */
#include "RNA_enum_types.h"
#include "MEM_guardedalloc.h"
+#include "../generic/py_capi_utils.h"
+
EnumPropertyItem property_flag_items[] = {
{PROP_HIDDEN, "HIDDEN", 0, "Hidden", ""},
{PROP_ANIMATABLE, "ANIMATABLE", 0, "Animateable", ""},
@@ -73,19 +77,62 @@ EnumPropertyItem property_subtype_array_items[] = {
{PROP_NONE, "NONE", 0, "None", ""},
{0, NULL, 0, NULL, NULL}};
-/* operators use this so it can store the args given but defer running
- * it until the operator runs where these values are used to setup the
- * default args for that operator instance */
-static PyObject *bpy_prop_deferred_return(void *func, PyObject *kw)
+/* PyObject's */
+static PyObject *pymeth_BoolProperty = NULL;
+static PyObject *pymeth_BoolVectorProperty = NULL;
+static PyObject *pymeth_IntProperty = NULL;
+static PyObject *pymeth_IntVectorProperty = NULL;
+static PyObject *pymeth_FloatProperty = NULL;
+static PyObject *pymeth_FloatVectorProperty = NULL;
+static PyObject *pymeth_StringProperty = NULL;
+static PyObject *pymeth_EnumProperty = NULL;
+static PyObject *pymeth_PointerProperty = NULL;
+static PyObject *pymeth_CollectionProperty = NULL;
+static PyObject *pymeth_RemoveProperty = NULL;
+
+
+/* operators and classes use this so it can store the args given but defer
+ * running it until the operator runs where these values are used to setup
+ * the default args for that operator instance */
+static PyObject *bpy_prop_deferred_return(PyObject *func, PyObject *kw)
{
PyObject *ret = PyTuple_New(2);
- PyTuple_SET_ITEM(ret, 0, PyCapsule_New(func, NULL, NULL));
- if(kw==NULL) kw= PyDict_New();
- else Py_INCREF(kw);
+ PyTuple_SET_ITEM(ret, 0, func);
+ Py_INCREF(func);
+
+ if(kw==NULL)
+ kw= PyDict_New();
+ else
+ Py_INCREF(kw);
+
PyTuple_SET_ITEM(ret, 1, kw);
+
return ret;
}
+/* this define runs at the start of each function and deals with
+ * returning a deferred property (to be registed later) */
+#define BPY_PROPDEF_HEAD(_func) \
+ if (PyTuple_GET_SIZE(args) == 1) { \
+ PyObject *ret; \
+ self= PyTuple_GET_ITEM(args, 0); \
+ args= PyTuple_New(0); \
+ ret= BPy_##_func(self, args, kw); \
+ Py_DECREF(args); \
+ return ret; \
+ } \
+ else if (PyTuple_GET_SIZE(args) > 1) { \
+ PyErr_SetString(PyExc_ValueError, "all args must be keywords"); \
+ return NULL; \
+ } \
+ srna= srna_from_self(self, #_func"(...):"); \
+ if(srna==NULL) { \
+ if(PyErr_Occurred()) \
+ return NULL; \
+ return bpy_prop_deferred_return((void *)pymeth_##_func, kw); \
+ } \
+
+
#if 0
static int bpy_struct_id_used(StructRNA *srna, char *identifier)
{
@@ -98,7 +145,7 @@ static int bpy_struct_id_used(StructRNA *srna, char *identifier)
/* Function that sets RNA, NOTE - self is NULL when called from python, but being abused from C so we can pass the srna allong
* This isnt incorrect since its a python object - but be careful */
-char BPy_BoolProperty_doc[] =
+static char BPy_BoolProperty_doc[] =
".. function:: BoolProperty(name=\"\", description=\"\", default=False, options={'ANIMATABLE'}, subtype='NONE')\n"
"\n"
" Returns a new boolean property definition.\n"
@@ -108,20 +155,13 @@ char BPy_BoolProperty_doc[] =
" :arg subtype: Enumerator in ['UNSIGNED', 'PERCENTAGE', 'FACTOR', 'ANGLE', 'TIME', 'DISTANCE', 'NONE'].\n"
" :type subtype: string";
-PyObject *BPy_BoolProperty(PyObject *self, PyObject *args, PyObject *kw)
+static PyObject *BPy_BoolProperty(PyObject *self, PyObject *args, PyObject *kw)
{
StructRNA *srna;
- if (PyTuple_GET_SIZE(args) > 0) {
- PyErr_SetString(PyExc_ValueError, "all args must be keywords");
- return NULL;
- }
+ BPY_PROPDEF_HEAD(BoolProperty)
- srna= srna_from_self(self, "BoolProperty(...):");
- if(srna==NULL && PyErr_Occurred()) {
- return NULL; /* self's type was compatible but error getting the srna */
- }
- else if(srna) {
+ if(srna) {
static char *kwlist[] = {"attr", "name", "description", "default", "options", "subtype", NULL};
char *id=NULL, *name="", *description="";
int def=0;
@@ -156,15 +196,13 @@ PyObject *BPy_BoolProperty(PyObject *self, PyObject *args, PyObject *kw)
if(opts & PROP_HIDDEN) RNA_def_property_flag(prop, PROP_HIDDEN);
if((opts & PROP_ANIMATABLE)==0) RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
}
- RNA_def_property_duplicate_pointers(prop);
- Py_RETURN_NONE;
- }
- else { /* operators defer running this function */
- return bpy_prop_deferred_return((void *)BPy_BoolProperty, kw);
+ RNA_def_property_duplicate_pointers(srna, prop);
}
+
+ Py_RETURN_NONE;
}
-char BPy_BoolVectorProperty_doc[] =
+static char BPy_BoolVectorProperty_doc[] =
".. function:: BoolVectorProperty(name=\"\", description=\"\", default=(False, False, False), options={'ANIMATABLE'}, subtype='NONE', size=3)\n"
"\n"
" Returns a new vector boolean property definition.\n"
@@ -173,20 +211,13 @@ char BPy_BoolVectorProperty_doc[] =
" :type options: set\n"
" :arg subtype: Enumerator in ['COLOR', 'TRANSLATION', 'DIRECTION', 'VELOCITY', 'ACCELERATION', 'MATRIX', 'EULER', 'QUATERNION', 'AXISANGLE', 'XYZ', 'COLOR_GAMMA', 'LAYER', 'NONE'].\n"
" :type subtype: string";
-PyObject *BPy_BoolVectorProperty(PyObject *self, PyObject *args, PyObject *kw)
+static PyObject *BPy_BoolVectorProperty(PyObject *self, PyObject *args, PyObject *kw)
{
StructRNA *srna;
- if (PyTuple_GET_SIZE(args) > 0) {
- PyErr_SetString(PyExc_ValueError, "all args must be keywords");
- return NULL;
- }
+ BPY_PROPDEF_HEAD(BoolVectorProperty)
- srna= srna_from_self(self, "BoolVectorProperty(...):");
- if(srna==NULL && PyErr_Occurred()) {
- return NULL; /* self's type was compatible but error getting the srna */
- }
- else if(srna) {
+ if(srna) {
static const char *kwlist[] = {"attr", "name", "description", "default", "options", "subtype", "size", NULL};
char *id=NULL, *name="", *description="";
int def[PYRNA_STACK_ARRAY]={0};
@@ -219,7 +250,7 @@ PyObject *BPy_BoolVectorProperty(PyObject *self, PyObject *args, PyObject *kw)
return NULL;
}
- if(pydef && BPyAsPrimitiveArray(def, pydef, size, &PyBool_Type, "BoolVectorProperty(default=sequence)") < 0)
+ if(pydef && PyC_AsArray(def, pydef, size, &PyBool_Type, "BoolVectorProperty(default=sequence)") < 0)
return NULL;
// prop= RNA_def_boolean_array(srna, id, size, pydef ? def:NULL, name, description);
@@ -232,15 +263,13 @@ PyObject *BPy_BoolVectorProperty(PyObject *self, PyObject *args, PyObject *kw)
if(opts & PROP_HIDDEN) RNA_def_property_flag(prop, PROP_HIDDEN);
if((opts & PROP_ANIMATABLE)==0) RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
}
- RNA_def_property_duplicate_pointers(prop);
- Py_RETURN_NONE;
- }
- else { /* operators defer running this function */
- return bpy_prop_deferred_return((void *)BPy_BoolVectorProperty, kw);
+ RNA_def_property_duplicate_pointers(srna, prop);
}
+
+ Py_RETURN_NONE;
}
-char BPy_IntProperty_doc[] =
+static char BPy_IntProperty_doc[] =
".. function:: IntProperty(name=\"\", description=\"\", default=0, min=-sys.maxint, max=sys.maxint, soft_min=-sys.maxint, soft_max=sys.maxint, step=1, options={'ANIMATABLE'}, subtype='NONE')\n"
"\n"
" Returns a new int property definition.\n"
@@ -249,20 +278,13 @@ char BPy_IntProperty_doc[] =
" :type options: set\n"
" :arg subtype: Enumerator in ['UNSIGNED', 'PERCENTAGE', 'FACTOR', 'ANGLE', 'TIME', 'DISTANCE', 'NONE'].\n"
" :type subtype: string";
-PyObject *BPy_IntProperty(PyObject *self, PyObject *args, PyObject *kw)
+static PyObject *BPy_IntProperty(PyObject *self, PyObject *args, PyObject *kw)
{
StructRNA *srna;
- if (PyTuple_GET_SIZE(args) > 0) {
- PyErr_SetString(PyExc_ValueError, "all args must be keywords");
- return NULL;
- }
+ BPY_PROPDEF_HEAD(IntProperty)
- srna= srna_from_self(self, "IntProperty(...):");
- if(srna==NULL && PyErr_Occurred()) {
- return NULL; /* self's type was compatible but error getting the srna */
- }
- else if(srna) {
+ if(srna) {
static const char *kwlist[] = {"attr", "name", "description", "default", "min", "max", "soft_min", "soft_max", "step", "options", "subtype", NULL};
char *id=NULL, *name="", *description="";
int min=INT_MIN, max=INT_MAX, soft_min=INT_MIN, soft_max=INT_MAX, step=1, def=0;
@@ -292,21 +314,18 @@ PyObject *BPy_IntProperty(PyObject *self, PyObject *args, PyObject *kw)
RNA_def_property_int_default(prop, def);
RNA_def_property_range(prop, min, max);
RNA_def_property_ui_text(prop, name, description);
- RNA_def_property_ui_range(prop, soft_min, soft_max, step, 3);
+ RNA_def_property_ui_range(prop, MAX2(soft_min, min), MIN2(soft_max, max), step, 3);
if(pyopts) {
if(opts & PROP_HIDDEN) RNA_def_property_flag(prop, PROP_HIDDEN);
if((opts & PROP_ANIMATABLE)==0) RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
}
- RNA_def_property_duplicate_pointers(prop);
- Py_RETURN_NONE;
- }
- else { /* operators defer running this function */
- return bpy_prop_deferred_return((void *)BPy_IntProperty, kw);
+ RNA_def_property_duplicate_pointers(srna, prop);
}
+ Py_RETURN_NONE;
}
-char BPy_IntVectorProperty_doc[] =
+static char BPy_IntVectorProperty_doc[] =
".. function:: IntVectorProperty(name=\"\", description=\"\", default=(0, 0, 0), min=-sys.maxint, max=sys.maxint, soft_min=-sys.maxint, soft_max=sys.maxint, options={'ANIMATABLE'}, subtype='NONE', size=3)\n"
"\n"
" Returns a new vector int property definition.\n"
@@ -315,20 +334,13 @@ char BPy_IntVectorProperty_doc[] =
" :type options: set\n"
" :arg subtype: Enumerator in ['COLOR', 'TRANSLATION', 'DIRECTION', 'VELOCITY', 'ACCELERATION', 'MATRIX', 'EULER', 'QUATERNION', 'AXISANGLE', 'XYZ', 'COLOR_GAMMA', 'LAYER', 'NONE'].\n"
" :type subtype: string";
-PyObject *BPy_IntVectorProperty(PyObject *self, PyObject *args, PyObject *kw)
+static PyObject *BPy_IntVectorProperty(PyObject *self, PyObject *args, PyObject *kw)
{
StructRNA *srna;
- if (PyTuple_GET_SIZE(args) > 0) {
- PyErr_SetString(PyExc_ValueError, "all args must be keywords");
- return NULL;
- }
+ BPY_PROPDEF_HEAD(IntVectorProperty)
- srna= srna_from_self(self, "IntVectorProperty(...):");
- if(srna==NULL && PyErr_Occurred()) {
- return NULL; /* self's type was compatible but error getting the srna */
- }
- else if(srna) {
+ if(srna) {
static const char *kwlist[] = {"attr", "name", "description", "default", "min", "max", "soft_min", "soft_max", "step", "options", "subtype", "size", NULL};
char *id=NULL, *name="", *description="";
int min=INT_MIN, max=INT_MAX, soft_min=INT_MIN, soft_max=INT_MAX, step=1, def[PYRNA_STACK_ARRAY]={0};
@@ -340,7 +352,7 @@ PyObject *BPy_IntVectorProperty(PyObject *self, PyObject *args, PyObject *kw)
char *pysubtype= NULL;
int subtype= PROP_NONE;
- if (!PyArg_ParseTupleAndKeywords(args, kw, "s|ssOiiiiO!si:IntVectorProperty", (char **)kwlist, &id, &name, &description, &pydef, &min, &max, &soft_min, &soft_max, &PySet_Type, &pyopts, &pysubtype, &size))
+ if (!PyArg_ParseTupleAndKeywords(args, kw, "s|ssOiiiiiO!si:IntVectorProperty", (char **)kwlist, &id, &name, &description, &pydef, &min, &max, &soft_min, &soft_max, &step, &PySet_Type, &pyopts, &pysubtype, &size))
return NULL;
if(RNA_def_property_free_identifier(srna, id) == -1) {
@@ -361,7 +373,7 @@ PyObject *BPy_IntVectorProperty(PyObject *self, PyObject *args, PyObject *kw)
return NULL;
}
- if(pydef && BPyAsPrimitiveArray(def, pydef, size, &PyLong_Type, "IntVectorProperty(default=sequence)") < 0)
+ if(pydef && PyC_AsArray(def, pydef, size, &PyLong_Type, "IntVectorProperty(default=sequence)") < 0)
return NULL;
prop= RNA_def_property(srna, id, PROP_INT, subtype);
@@ -369,22 +381,19 @@ PyObject *BPy_IntVectorProperty(PyObject *self, PyObject *args, PyObject *kw)
if(pydef) RNA_def_property_int_array_default(prop, def);
RNA_def_property_range(prop, min, max);
RNA_def_property_ui_text(prop, name, description);
- RNA_def_property_ui_range(prop, soft_min, soft_max, step, 3);
+ RNA_def_property_ui_range(prop, MAX2(soft_min, min), MIN2(soft_max, max), step, 3);
if(pyopts) {
if(opts & PROP_HIDDEN) RNA_def_property_flag(prop, PROP_HIDDEN);
if((opts & PROP_ANIMATABLE)==0) RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
}
- RNA_def_property_duplicate_pointers(prop);
- Py_RETURN_NONE;
- }
- else { /* operators defer running this function */
- return bpy_prop_deferred_return((void *)BPy_IntVectorProperty, kw);
+ RNA_def_property_duplicate_pointers(srna, prop);
}
+ Py_RETURN_NONE;
}
-char BPy_FloatProperty_doc[] =
+static char BPy_FloatProperty_doc[] =
".. function:: FloatProperty(name=\"\", description=\"\", default=0.0, min=sys.float_info.min, max=sys.float_info.max, soft_min=sys.float_info.min, soft_max=sys.float_info.max, step=3, precision=2, options={'ANIMATABLE'}, subtype='NONE', unit='NONE')\n"
"\n"
" Returns a new float property definition.\n"
@@ -395,20 +404,13 @@ char BPy_FloatProperty_doc[] =
" :type subtype: string\n"
" :arg unit: Enumerator in ['NONE', 'LENGTH', 'AREA', 'VOLUME', 'ROTATION', 'TIME', 'VELOCITY', 'ACCELERATION'].\n"
" :type unit: string\n";
-PyObject *BPy_FloatProperty(PyObject *self, PyObject *args, PyObject *kw)
+static PyObject *BPy_FloatProperty(PyObject *self, PyObject *args, PyObject *kw)
{
StructRNA *srna;
- if (PyTuple_GET_SIZE(args) > 0) {
- PyErr_SetString(PyExc_ValueError, "all args must be keywords");
- return NULL;
- }
+ BPY_PROPDEF_HEAD(FloatProperty)
- srna= srna_from_self(self, "FloatProperty(...):");
- if(srna==NULL && PyErr_Occurred()) {
- return NULL; /* self's type was compatible but error getting the srna */
- }
- else if(srna) {
+ if(srna) {
static const char *kwlist[] = {"attr", "name", "description", "default", "min", "max", "soft_min", "soft_max", "step", "precision", "options", "subtype", "unit", NULL};
char *id=NULL, *name="", *description="";
float min=-FLT_MAX, max=FLT_MAX, soft_min=-FLT_MAX, soft_max=FLT_MAX, step=3, def=0.0f;
@@ -446,21 +448,18 @@ PyObject *BPy_FloatProperty(PyObject *self, PyObject *args, PyObject *kw)
RNA_def_property_float_default(prop, def);
RNA_def_property_range(prop, min, max);
RNA_def_property_ui_text(prop, name, description);
- RNA_def_property_ui_range(prop, soft_min, soft_max, step, precision);
+ RNA_def_property_ui_range(prop, MAX2(soft_min, min), MIN2(soft_max, max), step, precision);
if(pyopts) {
if(opts & PROP_HIDDEN) RNA_def_property_flag(prop, PROP_HIDDEN);
if((opts & PROP_ANIMATABLE)==0) RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
}
- RNA_def_property_duplicate_pointers(prop);
- Py_RETURN_NONE;
- }
- else { /* operators defer running this function */
- return bpy_prop_deferred_return((void *)BPy_FloatProperty, kw);
+ RNA_def_property_duplicate_pointers(srna, prop);
}
+ Py_RETURN_NONE;
}
-char BPy_FloatVectorProperty_doc[] =
+static char BPy_FloatVectorProperty_doc[] =
".. function:: FloatVectorProperty(name=\"\", description=\"\", default=(0.0, 0.0, 0.0), min=sys.float_info.min, max=sys.float_info.max, soft_min=sys.float_info.min, soft_max=sys.float_info.max, step=3, precision=2, options={'ANIMATABLE'}, subtype='NONE', size=3)\n"
"\n"
" Returns a new vector float property definition.\n"
@@ -469,20 +468,13 @@ char BPy_FloatVectorProperty_doc[] =
" :type options: set\n"
" :arg subtype: Enumerator in ['COLOR', 'TRANSLATION', 'DIRECTION', 'VELOCITY', 'ACCELERATION', 'MATRIX', 'EULER', 'QUATERNION', 'AXISANGLE', 'XYZ', 'COLOR_GAMMA', 'LAYER', 'NONE'].\n"
" :type subtype: string";
-PyObject *BPy_FloatVectorProperty(PyObject *self, PyObject *args, PyObject *kw)
+static PyObject *BPy_FloatVectorProperty(PyObject *self, PyObject *args, PyObject *kw)
{
StructRNA *srna;
- if (PyTuple_GET_SIZE(args) > 0) {
- PyErr_SetString(PyExc_ValueError, "all args must be keywords");
- return NULL;
- }
+ BPY_PROPDEF_HEAD(FloatVectorProperty)
- srna= srna_from_self(self, "FloatVectorProperty(...):");
- if(srna==NULL && PyErr_Occurred()) {
- return NULL; /* self's type was compatible but error getting the srna */
- }
- else if(srna) {
+ if(srna) {
static const char *kwlist[] = {"attr", "name", "description", "default", "min", "max", "soft_min", "soft_max", "step", "precision", "options", "subtype", "size", NULL};
char *id=NULL, *name="", *description="";
float min=-FLT_MAX, max=FLT_MAX, soft_min=-FLT_MAX, soft_max=FLT_MAX, step=3, def[PYRNA_STACK_ARRAY]={0.0f};
@@ -515,7 +507,7 @@ PyObject *BPy_FloatVectorProperty(PyObject *self, PyObject *args, PyObject *kw)
return NULL;
}
- if(pydef && BPyAsPrimitiveArray(def, pydef, size, &PyFloat_Type, "FloatVectorProperty(default=sequence)") < 0)
+ if(pydef && PyC_AsArray(def, pydef, size, &PyFloat_Type, "FloatVectorProperty(default=sequence)") < 0)
return NULL;
prop= RNA_def_property(srna, id, PROP_FLOAT, subtype);
@@ -523,21 +515,18 @@ PyObject *BPy_FloatVectorProperty(PyObject *self, PyObject *args, PyObject *kw)
if(pydef) RNA_def_property_float_array_default(prop, def);
RNA_def_property_range(prop, min, max);
RNA_def_property_ui_text(prop, name, description);
- RNA_def_property_ui_range(prop, soft_min, soft_max, step, precision);
+ RNA_def_property_ui_range(prop, MAX2(soft_min, min), MIN2(soft_max, max), step, precision);
if(pyopts) {
if(opts & PROP_HIDDEN) RNA_def_property_flag(prop, PROP_HIDDEN);
if((opts & PROP_ANIMATABLE)==0) RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
}
- RNA_def_property_duplicate_pointers(prop);
- Py_RETURN_NONE;
- }
- else { /* operators defer running this function */
- return bpy_prop_deferred_return((void *)BPy_FloatVectorProperty, kw);
+ RNA_def_property_duplicate_pointers(srna, prop);
}
+ Py_RETURN_NONE;
}
-char BPy_StringProperty_doc[] =
+static char BPy_StringProperty_doc[] =
".. function:: StringProperty(name=\"\", description=\"\", default=\"\", maxlen=0, options={'ANIMATABLE'}, subtype='NONE')\n"
"\n"
" Returns a new string property definition.\n"
@@ -546,20 +535,13 @@ char BPy_StringProperty_doc[] =
" :type options: set\n"
" :arg subtype: Enumerator in ['FILE_PATH', 'DIR_PATH', 'FILENAME', 'NONE'].\n"
" :type subtype: string";
-PyObject *BPy_StringProperty(PyObject *self, PyObject *args, PyObject *kw)
+static PyObject *BPy_StringProperty(PyObject *self, PyObject *args, PyObject *kw)
{
StructRNA *srna;
- if (PyTuple_GET_SIZE(args) > 0) {
- PyErr_SetString(PyExc_ValueError, "all args must be keywords");
- return NULL;
- }
+ BPY_PROPDEF_HEAD(StringProperty)
- srna= srna_from_self(self, "StringProperty(...):");
- if(srna==NULL && PyErr_Occurred()) {
- return NULL; /* self's type was compatible but error getting the srna */
- }
- else if(srna) {
+ if(srna) {
static const char *kwlist[] = {"attr", "name", "description", "default", "maxlen", "options", "subtype", NULL};
char *id=NULL, *name="", *description="", *def="";
int maxlen=0;
@@ -594,12 +576,9 @@ PyObject *BPy_StringProperty(PyObject *self, PyObject *args, PyObject *kw)
if(opts & PROP_HIDDEN) RNA_def_property_flag(prop, PROP_HIDDEN);
if((opts & PROP_ANIMATABLE)==0) RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
}
- RNA_def_property_duplicate_pointers(prop);
- Py_RETURN_NONE;
- }
- else { /* operators defer running this function */
- return bpy_prop_deferred_return((void *)BPy_StringProperty, kw);
+ RNA_def_property_duplicate_pointers(srna, prop);
}
+ Py_RETURN_NONE;
}
static EnumPropertyItem *enum_items_from_py(PyObject *value, const char *def, int *defvalue)
@@ -648,7 +627,7 @@ static EnumPropertyItem *enum_items_from_py(PyObject *value, const char *def, in
return items;
}
-char BPy_EnumProperty_doc[] =
+static char BPy_EnumProperty_doc[] =
".. function:: EnumProperty(items, name=\"\", description=\"\", default=\"\", options={'ANIMATABLE'})\n"
"\n"
" Returns a new enumerator property definition.\n"
@@ -657,20 +636,13 @@ char BPy_EnumProperty_doc[] =
" :type options: set\n"
" :arg items: The items that make up this enumerator.\n"
" :type items: sequence of string triplets";
-PyObject *BPy_EnumProperty(PyObject *self, PyObject *args, PyObject *kw)
+static PyObject *BPy_EnumProperty(PyObject *self, PyObject *args, PyObject *kw)
{
StructRNA *srna;
- if (PyTuple_GET_SIZE(args) > 0) {
- PyErr_SetString(PyExc_ValueError, "all args must be keywords");
- return NULL;
- }
-
- srna= srna_from_self(self, "EnumProperty(...):");
- if(srna==NULL && PyErr_Occurred()) {
- return NULL; /* self's type was compatible but error getting the srna */
- }
- else if(srna) {
+ BPY_PROPDEF_HEAD(EnumProperty)
+
+ if(srna) {
static const char *kwlist[] = {"attr", "items", "name", "description", "default", "options", NULL};
char *id=NULL, *name="", *description="", *def="";
int defvalue=0;
@@ -700,14 +672,10 @@ PyObject *BPy_EnumProperty(PyObject *self, PyObject *args, PyObject *kw)
if(opts & PROP_HIDDEN) RNA_def_property_flag(prop, PROP_HIDDEN);
if((opts & PROP_ANIMATABLE)==0) RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
}
- RNA_def_property_duplicate_pointers(prop);
+ RNA_def_property_duplicate_pointers(srna, prop);
MEM_freeN(eitems);
-
- Py_RETURN_NONE;
- }
- else { /* operators defer running this function */
- return bpy_prop_deferred_return((void *)BPy_EnumProperty, kw);
}
+ Py_RETURN_NONE;
}
static StructRNA *pointer_type_from_py(PyObject *value, const char *error_prefix)
@@ -717,7 +685,7 @@ static StructRNA *pointer_type_from_py(PyObject *value, const char *error_prefix
srna= srna_from_self(value, "BoolProperty(...):");
if(!srna) {
- PyObject *msg= BPY_exception_buffer();
+ PyObject *msg= PyC_ExceptionBuffer();
char *msg_char= _PyUnicode_AsString(msg);
PyErr_Format(PyExc_TypeError, "%.200s expected an RNA type derived from IDPropertyGroup, failed with: %s", error_prefix, msg_char);
Py_DECREF(msg);
@@ -732,7 +700,7 @@ static StructRNA *pointer_type_from_py(PyObject *value, const char *error_prefix
return srna;
}
-char BPy_PointerProperty_doc[] =
+static char BPy_PointerProperty_doc[] =
".. function:: PointerProperty(items, type=\"\", description=\"\", default=\"\", options={'ANIMATABLE'})\n"
"\n"
" Returns a new pointer property definition.\n"
@@ -741,20 +709,13 @@ char BPy_PointerProperty_doc[] =
" :type options: set\n"
" :arg type: Dynamic type from :mod:`bpy.types`.\n"
" :type type: class";
-PyObject *BPy_PointerProperty(PyObject *self, PyObject *args, PyObject *kw)
+static PyObject *BPy_PointerProperty(PyObject *self, PyObject *args, PyObject *kw)
{
StructRNA *srna;
- if (PyTuple_GET_SIZE(args) > 0) {
- PyErr_SetString(PyExc_ValueError, "all args must be keywords");
- return NULL;
- }
+ BPY_PROPDEF_HEAD(PointerProperty)
- srna= srna_from_self(self, "PointerProperty(...):");
- if(srna==NULL && PyErr_Occurred()) {
- return NULL; /* self's type was compatible but error getting the srna */
- }
- else if(srna) {
+ if(srna) {
static const char *kwlist[] = {"attr", "type", "name", "description", "options", NULL};
char *id=NULL, *name="", *description="";
PropertyRNA *prop;
@@ -783,16 +744,12 @@ PyObject *BPy_PointerProperty(PyObject *self, PyObject *args, PyObject *kw)
if(opts & PROP_HIDDEN) RNA_def_property_flag(prop, PROP_HIDDEN);
if((opts & PROP_ANIMATABLE)==0) RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
}
- RNA_def_property_duplicate_pointers(prop);
- Py_RETURN_NONE;
- }
- else { /* operators defer running this function */
- return bpy_prop_deferred_return((void *)BPy_PointerProperty, kw);
+ RNA_def_property_duplicate_pointers(srna, prop);
}
- return NULL;
+ Py_RETURN_NONE;
}
-char BPy_CollectionProperty_doc[] =
+static char BPy_CollectionProperty_doc[] =
".. function:: CollectionProperty(items, type=\"\", description=\"\", default=\"\", options={'ANIMATABLE'})\n"
"\n"
" Returns a new collection property definition.\n"
@@ -801,20 +758,13 @@ char BPy_CollectionProperty_doc[] =
" :type options: set\n"
" :arg type: Dynamic type from :mod:`bpy.types`.\n"
" :type type: class";
-PyObject *BPy_CollectionProperty(PyObject *self, PyObject *args, PyObject *kw)
+static PyObject *BPy_CollectionProperty(PyObject *self, PyObject *args, PyObject *kw)
{
StructRNA *srna;
- if (PyTuple_GET_SIZE(args) > 0) {
- PyErr_SetString(PyExc_ValueError, "all args must be keywords");
- return NULL;
- }
+ BPY_PROPDEF_HEAD(CollectionProperty)
- srna= srna_from_self(self, "CollectionProperty(...):");
- if(srna==NULL && PyErr_Occurred()) {
- return NULL; /* self's type was compatible but error getting the srna */
- }
- else if(srna) {
+ if(srna) {
static const char *kwlist[] = {"attr", "type", "name", "description", "options", NULL};
char *id=NULL, *name="", *description="";
PropertyRNA *prop;
@@ -843,26 +793,35 @@ PyObject *BPy_CollectionProperty(PyObject *self, PyObject *args, PyObject *kw)
if(opts & PROP_HIDDEN) RNA_def_property_flag(prop, PROP_HIDDEN);
if((opts & PROP_ANIMATABLE)==0) RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
}
- RNA_def_property_duplicate_pointers(prop);
- Py_RETURN_NONE;
- }
- else { /* operators defer running this function */
- return bpy_prop_deferred_return((void *)BPy_CollectionProperty, kw);
+ RNA_def_property_duplicate_pointers(srna, prop);
}
- return NULL;
+ Py_RETURN_NONE;
}
-char BPy_RemoveProperty_doc[] =
+static char BPy_RemoveProperty_doc[] =
".. function:: RemoveProperty(attr)\n"
"\n"
" Removes a dynamically defined property.\n"
"\n"
" :arg attr: Property name.\n"
" :type attr: string";
-PyObject *BPy_RemoveProperty(PyObject *self, PyObject *args, PyObject *kw)
+static PyObject *BPy_RemoveProperty(PyObject *self, PyObject *args, PyObject *kw)
{
StructRNA *srna;
+ if(PyTuple_GET_SIZE(args) == 1) {
+ PyObject *ret;
+ self= PyTuple_GET_ITEM(args, 0);
+ args= PyTuple_New(0);
+ ret= BPy_RemoveProperty(self, args, kw);
+ Py_DECREF(args);
+ return ret;
+ }
+ else if (PyTuple_GET_SIZE(args) > 1) {
+ PyErr_SetString(PyExc_ValueError, "all args must be keywords"); \
+ return NULL;
+ }
+
srna= srna_from_self(self, "RemoveProperty(...):");
if(srna==NULL && PyErr_Occurred()) {
return NULL; /* self's type was compatible but error getting the srna */
@@ -883,9 +842,8 @@ PyObject *BPy_RemoveProperty(PyObject *self, PyObject *args, PyObject *kw)
PyErr_Format(PyExc_TypeError, "RemoveProperty(): '%s' not a defined dynamic property.", id);
return NULL;
}
-
- Py_RETURN_NONE;
}
+ Py_RETURN_NONE;
}
static struct PyMethodDef props_methods[] = {
@@ -900,8 +858,7 @@ static struct PyMethodDef props_methods[] = {
{"PointerProperty", (PyCFunction)BPy_PointerProperty, METH_VARARGS|METH_KEYWORDS, BPy_PointerProperty_doc},
{"CollectionProperty", (PyCFunction)BPy_CollectionProperty, METH_VARARGS|METH_KEYWORDS, BPy_CollectionProperty_doc},
- /* only useful as a bpy_struct method */
- /* {"RemoveProperty", (PyCFunction)BPy_RemoveProperty, METH_VARARGS|METH_KEYWORDS, BPy_RemoveProperty_doc}, */
+ {"RemoveProperty", (PyCFunction)BPy_RemoveProperty, METH_VARARGS|METH_KEYWORDS, BPy_RemoveProperty_doc},
{NULL, NULL, 0, NULL}
};
@@ -918,13 +875,32 @@ static struct PyModuleDef props_module = {
PyObject *BPY_rna_props( void )
{
PyObject *submodule;
+ PyObject *submodule_dict;
+
submodule= PyModule_Create(&props_module);
- PyDict_SetItemString(PySys_GetObject("modules"), props_module.m_name, submodule);
+ PyDict_SetItemString(PyImport_GetModuleDict(), props_module.m_name, submodule);
/* INCREF since its its assumed that all these functions return the
* module with a new ref like PyDict_New, since they are passed to
* PyModule_AddObject which steals a ref */
Py_INCREF(submodule);
-
+
+ /* api needs the PyObjects internally */
+ submodule_dict= PyModule_GetDict(submodule);
+
+#define ASSIGN_STATIC(_name) pymeth_##_name = PyDict_GetItemString(submodule_dict, #_name)
+
+ ASSIGN_STATIC(BoolProperty);
+ ASSIGN_STATIC(BoolVectorProperty);
+ ASSIGN_STATIC(IntProperty);
+ ASSIGN_STATIC(IntVectorProperty);
+ ASSIGN_STATIC(FloatProperty);
+ ASSIGN_STATIC(FloatVectorProperty);
+ ASSIGN_STATIC(StringProperty);
+ ASSIGN_STATIC(EnumProperty);
+ ASSIGN_STATIC(PointerProperty);
+ ASSIGN_STATIC(CollectionProperty);
+ ASSIGN_STATIC(RemoveProperty);
+
return submodule;
}
diff --git a/source/blender/python/intern/bpy_props.h b/source/blender/python/intern/bpy_props.h
index d90b12c0f91..fc295ccdf5d 100644
--- a/source/blender/python/intern/bpy_props.h
+++ b/source/blender/python/intern/bpy_props.h
@@ -29,32 +29,6 @@
PyObject *BPY_rna_props( void );
-/* functions for setting up new props - experemental */
-PyObject *BPy_BoolProperty(PyObject *self, PyObject *args, PyObject *kw);
-PyObject *BPy_BoolVectorProperty(PyObject *self, PyObject *args, PyObject *kw);
-PyObject *BPy_IntProperty(PyObject *self, PyObject *args, PyObject *kw);
-PyObject *BPy_IntVectorProperty(PyObject *self, PyObject *args, PyObject *kw);
-PyObject *BPy_FloatProperty(PyObject *self, PyObject *args, PyObject *kw);
-PyObject *BPy_FloatVectorProperty(PyObject *self, PyObject *args, PyObject *kw);
-PyObject *BPy_StringProperty(PyObject *self, PyObject *args, PyObject *kw);
-PyObject *BPy_EnumProperty(PyObject *self, PyObject *args, PyObject *kw);
-PyObject *BPy_PointerProperty(PyObject *self, PyObject *args, PyObject *kw);
-PyObject *BPy_CollectionProperty(PyObject *self, PyObject *args, PyObject *kw);
-
-PyObject *BPy_RemoveProperty(PyObject *self, PyObject *args, PyObject *kw);
-
-extern char BPy_BoolProperty_doc[];
-extern char BPy_BoolVectorProperty_doc[];
-extern char BPy_IntProperty_doc[];
-extern char BPy_IntVectorProperty_doc[];
-extern char BPy_FloatProperty_doc[];
-extern char BPy_FloatVectorProperty_doc[];
-extern char BPy_StringProperty_doc[];
-extern char BPy_EnumProperty_doc[];
-extern char BPy_PointerProperty_doc[];
-extern char BPy_CollectionProperty_doc[];\
-extern char BPy_RemoveProperty_doc[];
-
#define PYRNA_STACK_ARRAY 32
#endif
diff --git a/source/blender/python/intern/bpy_rna.c b/source/blender/python/intern/bpy_rna.c
index a18c9f7e92d..b0ae13640ba 100644
--- a/source/blender/python/intern/bpy_rna.c
+++ b/source/blender/python/intern/bpy_rna.c
@@ -32,9 +32,11 @@
#include "float.h" /* FLT_MIN/MAX */
#include "RNA_enum_types.h"
+#include "RNA_define.h" /* RNA_def_property_free_identifier */
#include "MEM_guardedalloc.h"
#include "BKE_utildefines.h"
+#include "BKE_idcode.h"
#include "BKE_context.h"
#include "BKE_global.h" /* evil G.* */
#include "BKE_report.h"
@@ -48,25 +50,28 @@
#include "ED_keyframing.h"
#define USE_MATHUTILS
+#define USE_STRING_COERCE
#ifdef USE_MATHUTILS
#include "../generic/mathutils.h" /* so we can have mathutils callbacks */
#include "../generic/IDProp.h" /* for IDprop lookups */
+#include "../generic/py_capi_utils.h"
-
-static PyObject *pyrna_prop_array_subscript_slice(BPy_PropertyRNA *self, PointerRNA *ptr, PropertyRNA *prop, int start, int stop, int length);
-static Py_ssize_t pyrna_prop_array_length(BPy_PropertyRNA *self);
+static int pyrna_py_to_prop(PointerRNA *ptr, PropertyRNA *prop, ParameterList *parms, void *data, PyObject *value, const char *error_prefix);
+static PyObject *pyrna_prop_array_subscript_slice(BPy_PropertyArrayRNA *self, PointerRNA *ptr, PropertyRNA *prop, int start, int stop, int length);
+static Py_ssize_t pyrna_prop_array_length(BPy_PropertyArrayRNA *self);
static Py_ssize_t pyrna_prop_collection_length(BPy_PropertyRNA *self);
static short pyrna_rotation_euler_order_get(PointerRNA *ptr, PropertyRNA **prop_eul_order, short order_fallback);
+static int deferred_register_prop(StructRNA *srna, PyObject *key, PyObject *item);
/* bpyrna vector/euler/quat callbacks */
static int mathutils_rna_array_cb_index= -1; /* index for our callbacks */
-/* not used yet but may want to use the subtype below */
+/* subtype not used much yet */
#define MATHUTILS_CB_SUBTYPE_EUL 0
#define MATHUTILS_CB_SUBTYPE_VEC 1
#define MATHUTILS_CB_SUBTYPE_QUAT 2
-#define MATHUTILS_CB_SUBTYPE_COLOR 0
+#define MATHUTILS_CB_SUBTYPE_COLOR 3
static int mathutils_rna_generic_check(BaseMathObject *bmo)
{
@@ -98,6 +103,11 @@ static int mathutils_rna_vector_set(BaseMathObject *bmo, int subtype)
float min, max;
if(self->prop==NULL)
return 0;
+
+ if (!RNA_property_editable_flag(&self->ptr, self->prop)) {
+ PyErr_Format(PyExc_AttributeError, "bpy_prop \"%.200s.%.200s\" is read-only", RNA_struct_identifier(self->ptr.type), RNA_property_identifier(self->prop));
+ return 0;
+ }
RNA_property_float_range(&self->ptr, self->prop, &min, &max);
@@ -141,6 +151,11 @@ static int mathutils_rna_vector_set_index(BaseMathObject *bmo, int subtype, int
if(self->prop==NULL)
return 0;
+
+ if (!RNA_property_editable_flag(&self->ptr, self->prop)) {
+ PyErr_Format(PyExc_AttributeError, "bpy_prop \"%.200s.%.200s\" is read-only", RNA_struct_identifier(self->ptr.type), RNA_property_identifier(self->prop));
+ return 0;
+ }
RNA_property_float_clamp(&self->ptr, self->prop, &bmo->data[index]);
RNA_property_float_set_index(&self->ptr, self->prop, index, bmo->data[index]);
@@ -177,6 +192,12 @@ static int mathutils_rna_matrix_set(BaseMathObject *bmo, int subtype)
if(self->prop==NULL)
return 0;
+
+ if (!RNA_property_editable_flag(&self->ptr, self->prop)) {
+ PyErr_Format(PyExc_AttributeError, "bpy_prop \"%.200s.%.200s\" is read-only", RNA_struct_identifier(self->ptr.type), RNA_property_identifier(self->prop));
+ return 0;
+ }
+
/* can ignore clamping here */
RNA_property_float_set_array(&self->ptr, self->prop, bmo->data);
RNA_property_update(BPy_GetContext(), &self->ptr, self->prop);
@@ -383,8 +404,7 @@ static PyObject *pyrna_struct_richcmp(PyObject *a, PyObject *b, int op)
return NULL;
}
- Py_INCREF(res);
- return res;
+ return Py_INCREF(res), res;
}
static PyObject *pyrna_prop_richcmp(PyObject *a, PyObject *b, int op)
@@ -413,30 +433,54 @@ static PyObject *pyrna_prop_richcmp(PyObject *a, PyObject *b, int op)
return NULL;
}
- Py_INCREF(res);
- return res;
+ return Py_INCREF(res), res;
}
/*----------------------repr--------------------------------------------*/
-static PyObject *pyrna_struct_repr( BPy_StructRNA *self )
+static PyObject *pyrna_struct_str( BPy_StructRNA *self )
{
- PyObject *pyob;
+ PyObject *ret;
char *name;
/* print name if available */
name= RNA_struct_name_get_alloc(&self->ptr, NULL, FALSE);
if(name) {
- pyob= PyUnicode_FromFormat( "<bpy_struct, %.200s(\"%.200s\")>", RNA_struct_identifier(self->ptr.type), name);
+ ret= PyUnicode_FromFormat( "<bpy_struct, %.200s(\"%.200s\")>", RNA_struct_identifier(self->ptr.type), name);
MEM_freeN(name);
- return pyob;
+ return ret;
}
return PyUnicode_FromFormat( "<bpy_struct, %.200s at %p>", RNA_struct_identifier(self->ptr.type), self->ptr.data);
}
-static PyObject *pyrna_prop_repr( BPy_PropertyRNA *self )
+static PyObject *pyrna_struct_repr(BPy_StructRNA *self)
{
- PyObject *pyob;
+ ID *id= self->ptr.id.data;
+ if(id == NULL)
+ return pyrna_struct_str(self); /* fallback */
+
+ if(RNA_struct_is_ID(self->ptr.type)) {
+ return PyUnicode_FromFormat( "bpy.data.%s[\"%s\"]", BKE_idcode_to_name_plural(GS(id->name)), id->name+2);
+ }
+ else {
+ PyObject *ret;
+ char *path;
+ path= RNA_path_from_ID_to_struct(&self->ptr);
+ if(path) {
+ ret= PyUnicode_FromFormat( "bpy.data.%s[\"%s\"].%s", BKE_idcode_to_name_plural(GS(id->name)), id->name+2, path);
+ MEM_freeN(path);
+ }
+ else { /* cant find, print something sane */
+ ret= PyUnicode_FromFormat( "bpy.data.%s[\"%s\"]...%s", BKE_idcode_to_name_plural(GS(id->name)), id->name+2, RNA_struct_identifier(self->ptr.type));
+ }
+
+ return ret;
+ }
+}
+
+static PyObject *pyrna_prop_str( BPy_PropertyRNA *self )
+{
+ PyObject *ret;
PointerRNA ptr;
char *name;
const char *type_id= NULL;
@@ -457,7 +501,7 @@ static PyObject *pyrna_prop_repr( BPy_PropertyRNA *self )
if(type==PROP_COLLECTION) {
len= pyrna_prop_collection_length(self);
} else if (RNA_property_array_check(&self->ptr, self->prop)) {
- len= pyrna_prop_array_length(self);
+ len= pyrna_prop_array_length((BPy_PropertyArrayRNA *)self);
}
if(len != -1)
@@ -470,15 +514,36 @@ static PyObject *pyrna_prop_repr( BPy_PropertyRNA *self )
name= RNA_struct_name_get_alloc(&ptr, NULL, FALSE);
if(name) {
- pyob= PyUnicode_FromFormat( "<bpy_%.200s, %.200s.%.200s(\"%.200s\")>", type_fmt, RNA_struct_identifier(self->ptr.type), RNA_property_identifier(self->prop), name);
+ ret= PyUnicode_FromFormat( "<bpy_%.200s, %.200s.%.200s(\"%.200s\")>", type_fmt, RNA_struct_identifier(self->ptr.type), RNA_property_identifier(self->prop), name);
MEM_freeN(name);
- return pyob;
+ return ret;
}
}
return PyUnicode_FromFormat( "<bpy_%.200s, %.200s.%.200s>", type_fmt, RNA_struct_identifier(self->ptr.type), RNA_property_identifier(self->prop));
}
+static PyObject *pyrna_prop_repr(BPy_PropertyRNA *self)
+{
+ ID *id= self->ptr.id.data;
+ PyObject *ret;
+ char *path;
+
+ if(id == NULL)
+ return pyrna_prop_str(self); /* fallback */
+
+ path= RNA_path_from_ID_to_property(&self->ptr, self->prop);
+ if(path) {
+ ret= PyUnicode_FromFormat( "bpy.data.%s[\"%s\"].%s", BKE_idcode_to_name_plural(GS(id->name)), id->name+2, path);
+ MEM_freeN(path);
+ }
+ else { /* cant find, print something sane */
+ ret= PyUnicode_FromFormat( "bpy.data.%s[\"%s\"]...%s", BKE_idcode_to_name_plural(GS(id->name)), id->name+2, RNA_property_identifier(self->prop));
+ }
+
+ return ret;
+}
+
static long pyrna_struct_hash( BPy_StructRNA *self )
{
return _Py_HashPointer(self->ptr.data);
@@ -721,9 +786,20 @@ PyObject * pyrna_prop_to_py(PointerRNA *ptr, PropertyRNA *prop)
break;
case PROP_STRING:
{
+ int subtype= RNA_property_subtype(prop);
char *buf;
buf = RNA_property_string_get_alloc(ptr, prop, NULL, -1);
- ret = PyUnicode_FromString( buf );
+#ifdef USE_STRING_COERCE
+ /* only file paths get special treatment, they may contain non utf-8 chars */
+ if(ELEM3(subtype, PROP_FILEPATH, PROP_DIRPATH, PROP_FILENAME)) {
+ ret= PyC_UnicodeFromByte(buf);
+ }
+ else {
+ ret= PyUnicode_FromString(buf);
+ }
+#else
+ ret= PyUnicode_FromString(buf);
+#endif
MEM_freeN(buf);
break;
}
@@ -841,7 +917,7 @@ static PyObject *pyrna_func_to_py(BPy_DummyPointerRNA *pyrna, FunctionRNA *func)
-int pyrna_py_to_prop(PointerRNA *ptr, PropertyRNA *prop, ParameterList *parms, void *data, PyObject *value, const char *error_prefix)
+static int pyrna_py_to_prop(PointerRNA *ptr, PropertyRNA *prop, ParameterList *parms, void *data, PyObject *value, const char *error_prefix)
{
/* XXX hard limits should be checked here */
int type = RNA_property_type(prop);
@@ -924,16 +1000,31 @@ int pyrna_py_to_prop(PointerRNA *ptr, PropertyRNA *prop, ParameterList *parms, v
}
case PROP_STRING:
{
- char *param = _PyUnicode_AsString(value);
+ const char *param;
+#ifdef USE_STRING_COERCE
+ PyObject *value_coerce= NULL;
+ int subtype= RNA_property_subtype(prop);
+ if(ELEM3(subtype, PROP_FILEPATH, PROP_DIRPATH, PROP_FILENAME)) {
+ param= PuC_UnicodeAsByte(value, &value_coerce);
+ }
+ else {
+ param= _PyUnicode_AsString(value);
+ }
+#else
+ param= _PyUnicode_AsString(value);
+#endif
if (param==NULL) {
PyErr_Format(PyExc_TypeError, "%.200s %.200s.%.200s expected a string type", error_prefix, RNA_struct_identifier(ptr->type), RNA_property_identifier(prop));
return -1;
}
else {
- if(data) *((char**)data)= param;
+ if(data) *((char**)data)= (char *)param; /*XXX, this is suspect but needed for function calls, need to see if theres a better way */
else RNA_property_string_set(ptr, prop, param);
}
+#ifdef USE_STRING_COERCE
+ Py_XDECREF(value_coerce);
+#endif
break;
}
case PROP_ENUM:
@@ -969,24 +1060,60 @@ int pyrna_py_to_prop(PointerRNA *ptr, PropertyRNA *prop, ParameterList *parms, v
}
case PROP_POINTER:
{
+ PyObject *value_new= NULL;
+
StructRNA *ptype= RNA_property_pointer_type(ptr, prop);
int flag = RNA_property_flag(prop);
+ /* this is really nasty!, so we can fake the operator having direct properties eg:
+ * layout.prop(self, "filepath")
+ * ... which infact should be
+ * layout.prop(self.properties, "filepath")
+ *
+ * we need to do this trick.
+ * if the prop is not an operator type and the pyobject is an operator, use its properties in place of its self.
+ *
+ * this is so bad that its almost a good reason to do away with fake 'self.properties -> self' class mixing
+ * if this causes problems in the future it should be removed.
+ */
+ if( (ptype == &RNA_AnyType) &&
+ (BPy_StructRNA_Check(value)) &&
+ (RNA_struct_is_a(((BPy_StructRNA *)value)->ptr.type, &RNA_Operator))
+ ) {
+ value= PyObject_GetAttrString(value, "properties");
+ value_new= value;
+ }
+
+
/* if property is an OperatorProperties pointer and value is a map, forward back to pyrna_pydict_to_props */
if (RNA_struct_is_a(ptype, &RNA_OperatorProperties) && PyDict_Check(value)) {
PointerRNA opptr = RNA_property_pointer_get(ptr, prop);
return pyrna_pydict_to_props(&opptr, value, 0, error_prefix);
}
+ /* another exception, allow to pass a collection as an RNA property */
+ if(Py_TYPE(value)==&pyrna_prop_collection_Type) { /* ok to ignore idprop collections */
+ PointerRNA c_ptr;
+ BPy_PropertyRNA *value_prop= (BPy_PropertyRNA *)value;
+ if(RNA_property_collection_type_get(&value_prop->ptr, value_prop->prop, &c_ptr)) {
+ value= pyrna_struct_CreatePyObject(&c_ptr);
+ value_new= value;
+ }
+ else {
+ PyErr_Format(PyExc_TypeError, "%.200s %.200s.%.200s collection has no type, cant be used as a %.200s type", error_prefix, RNA_struct_identifier(ptr->type), RNA_property_identifier(prop), RNA_struct_identifier(ptype));
+ return -1;
+ }
+ }
+
if(!BPy_StructRNA_Check(value) && value != Py_None) {
PyErr_Format(PyExc_TypeError, "%.200s %.200s.%.200s expected a %.200s type", error_prefix, RNA_struct_identifier(ptr->type), RNA_property_identifier(prop), RNA_struct_identifier(ptype));
- return -1;
+ Py_XDECREF(value_new); return -1;
} else if((flag & PROP_NEVER_NULL) && value == Py_None) {
PyErr_Format(PyExc_TypeError, "%.200s %.200s.%.200s does not support a 'None' assignment %.200s type", error_prefix, RNA_struct_identifier(ptr->type), RNA_property_identifier(prop), RNA_struct_identifier(ptype));
- return -1;
+ Py_XDECREF(value_new); return -1;
} else if(value != Py_None && ((flag & PROP_ID_SELF_CHECK) && ptr->id.data == ((BPy_StructRNA*)value)->ptr.id.data)) {
PyErr_Format(PyExc_TypeError, "%.200s %.200s.%.200s ID type does not support assignment to its self", error_prefix, RNA_struct_identifier(ptr->type), RNA_property_identifier(prop));
- return -1;
+ Py_XDECREF(value_new); return -1;
} else {
BPy_StructRNA *param= (BPy_StructRNA*)value;
int raise_error= FALSE;
@@ -1022,7 +1149,7 @@ int pyrna_py_to_prop(PointerRNA *ptr, PropertyRNA *prop, ParameterList *parms, v
PointerRNA tmp;
RNA_pointer_create(NULL, ptype, NULL, &tmp);
PyErr_Format(PyExc_TypeError, "%.200s %.200s.%.200s expected a %.200s type", error_prefix, RNA_struct_identifier(ptr->type), RNA_property_identifier(prop), RNA_struct_identifier(tmp.type));
- return -1;
+ Py_XDECREF(value_new); return -1;
}
}
@@ -1030,9 +1157,12 @@ int pyrna_py_to_prop(PointerRNA *ptr, PropertyRNA *prop, ParameterList *parms, v
PointerRNA tmp;
RNA_pointer_create(NULL, ptype, NULL, &tmp);
PyErr_Format(PyExc_TypeError, "%.200s %.200s.%.200s expected a %.200s type", error_prefix, RNA_struct_identifier(ptr->type), RNA_property_identifier(prop), RNA_struct_identifier(tmp.type));
- return -1;
+ Py_XDECREF(value_new); return -1;
}
}
+
+ Py_XDECREF(value_new);
+
break;
}
case PROP_COLLECTION:
@@ -1076,7 +1206,7 @@ int pyrna_py_to_prop(PointerRNA *ptr, PropertyRNA *prop, ParameterList *parms, v
RNA_property_collection_add(ptr, prop, &itemptr);
if(pyrna_pydict_to_props(&itemptr, item, 1, "Converting a python list to an RNA collection")==-1) {
- PyObject *msg= BPY_exception_buffer();
+ PyObject *msg= PyC_ExceptionBuffer();
char *msg_char= _PyUnicode_AsString(msg);
PyErr_Format(PyExc_TypeError, "%.200s %.200s.%.200s error converting a member of a collection from a dicts into an RNA collection, failed with: %s", error_prefix, RNA_struct_identifier(ptr->type), RNA_property_identifier(prop), msg_char);
@@ -1103,12 +1233,12 @@ int pyrna_py_to_prop(PointerRNA *ptr, PropertyRNA *prop, ParameterList *parms, v
return 0;
}
-static PyObject * pyrna_prop_to_py_index(BPy_PropertyRNA *self, int index)
+static PyObject * pyrna_prop_array_to_py_index(BPy_PropertyArrayRNA *self, int index)
{
return pyrna_py_from_array_index(self, &self->ptr, self->prop, index);
}
-static int pyrna_py_to_prop_index(BPy_PropertyRNA *self, int index, PyObject *value)
+static int pyrna_py_to_prop_array_index(BPy_PropertyArrayRNA *self, int index, PyObject *value)
{
int ret = 0;
int totdim;
@@ -1178,7 +1308,7 @@ static int pyrna_py_to_prop_index(BPy_PropertyRNA *self, int index, PyObject *va
}
//---------------sequence-------------------------------------------
-static Py_ssize_t pyrna_prop_array_length(BPy_PropertyRNA *self)
+static Py_ssize_t pyrna_prop_array_length(BPy_PropertyArrayRNA *self)
{
if (RNA_property_array_dimension(&self->ptr, self->prop, NULL) > 1)
return RNA_property_multi_array_length(&self->ptr, self->prop, self->arraydim);
@@ -1191,6 +1321,25 @@ static Py_ssize_t pyrna_prop_collection_length( BPy_PropertyRNA *self )
return RNA_property_collection_length(&self->ptr, self->prop);
}
+/* bool funcs are for speed, so we can avoid getting the length
+ * of 1000's of items in a linked list for eg. */
+static int pyrna_prop_array_bool(BPy_PropertyRNA *self)
+{
+ return RNA_property_array_length(&self->ptr, self->prop) ? 1 : 0;
+}
+
+static int pyrna_prop_collection_bool( BPy_PropertyRNA *self )
+{
+ /* no callback defined, just iterate and find the nth item */
+ CollectionPropertyIterator iter;
+ int test;
+
+ RNA_property_collection_begin(&self->ptr, self->prop, &iter);
+ test = iter.valid;
+ RNA_property_collection_end(&iter);
+ return test;
+}
+
/* internal use only */
static PyObject *pyrna_prop_collection_subscript_int(BPy_PropertyRNA *self, Py_ssize_t keynum)
{
@@ -1203,27 +1352,28 @@ static PyObject *pyrna_prop_collection_subscript_int(BPy_PropertyRNA *self, Py_s
if(RNA_property_collection_lookup_int(&self->ptr, self->prop, keynum, &newptr)) {
return pyrna_struct_CreatePyObject(&newptr);
}
- PyErr_Format(PyExc_IndexError, "bpy_prop_collection[index]: index %d could not be found", keynum);
- return NULL;
+ else { /* fail's if ptr.data == NULL, valid for mesh.materials */
+ Py_RETURN_NONE;
+ }
}
- PyErr_Format(PyExc_IndexError, "bpy_prop_collection[index]: index %d out of range", keynum);
+ PyErr_Format(PyExc_IndexError, "bpy_prop_collection[index]: index %d out of range, size %d", keynum, len);
return NULL;
}
-static PyObject *pyrna_prop_array_subscript_int(BPy_PropertyRNA *self, int keynum)
+static PyObject *pyrna_prop_array_subscript_int(BPy_PropertyArrayRNA *self, int keynum)
{
int len= pyrna_prop_array_length(self);
if(keynum < 0) keynum += len;
if(keynum >= 0 && keynum < len)
- return pyrna_prop_to_py_index(self, keynum);
+ return pyrna_prop_array_to_py_index(self, keynum);
PyErr_Format(PyExc_IndexError, "bpy_prop_array[index]: index %d out of range", keynum);
return NULL;
}
-static PyObject *pyrna_prop_collection_subscript_str(BPy_PropertyRNA *self, char *keyname)
+static PyObject *pyrna_prop_collection_subscript_str(BPy_PropertyRNA *self, const char *keyname)
{
PointerRNA newptr;
if(RNA_property_collection_lookup_string(&self->ptr, self->prop, keyname, &newptr))
@@ -1258,10 +1408,10 @@ static PyObject *pyrna_prop_collection_subscript_slice(PointerRNA *ptr, Property
}
/* TODO - dimensions
- * note: could also use pyrna_prop_to_py_index(self, count) in a loop but its a lot slower
+ * note: could also use pyrna_prop_array_to_py_index(self, count) in a loop but its a lot slower
* since at the moment it reads (and even allocates) the entire array for each index.
*/
-static PyObject *pyrna_prop_array_subscript_slice(BPy_PropertyRNA *self, PointerRNA *ptr, PropertyRNA *prop, int start, int stop, int length)
+static PyObject *pyrna_prop_array_subscript_slice(BPy_PropertyArrayRNA *self, PointerRNA *ptr, PropertyRNA *prop, int start, int stop, int length)
{
int count, totdim;
@@ -1271,7 +1421,7 @@ static PyObject *pyrna_prop_array_subscript_slice(BPy_PropertyRNA *self, Pointer
if (totdim > 1) {
for (count = start; count < stop; count++)
- PyList_SET_ITEM(list, count - start, pyrna_prop_to_py_index(self, count));
+ PyList_SET_ITEM(list, count - start, pyrna_prop_array_to_py_index(self, count));
}
else {
switch (RNA_property_type(prop)) {
@@ -1369,7 +1519,7 @@ static PyObject *pyrna_prop_collection_subscript(BPy_PropertyRNA *self, PyObject
}
}
-static PyObject *pyrna_prop_array_subscript(BPy_PropertyRNA *self, PyObject *key)
+static PyObject *pyrna_prop_array_subscript(BPy_PropertyArrayRNA *self, PyObject *key)
{
/*if (PyUnicode_Check(key)) {
return pyrna_prop_array_subscript_str(self, _PyUnicode_AsString(key));
@@ -1404,7 +1554,7 @@ static PyObject *pyrna_prop_array_subscript(BPy_PropertyRNA *self, PyObject *key
}
}
-/* could call (pyrna_py_to_prop_index(self, i, value) in a loop but it is slow */
+/* could call (pyrna_py_to_prop_array_index(self, i, value) in a loop but it is slow */
static int prop_subscript_ass_array_slice(PointerRNA *ptr, PropertyRNA *prop, int start, int stop, int length, PyObject *value_orig)
{
PyObject *value;
@@ -1507,20 +1657,20 @@ static int prop_subscript_ass_array_slice(PointerRNA *ptr, PropertyRNA *prop, in
}
-static int prop_subscript_ass_array_int(BPy_PropertyRNA *self, Py_ssize_t keynum, PyObject *value)
+static int prop_subscript_ass_array_int(BPy_PropertyArrayRNA *self, Py_ssize_t keynum, PyObject *value)
{
int len= pyrna_prop_array_length(self);
if(keynum < 0) keynum += len;
if(keynum >= 0 && keynum < len)
- return pyrna_py_to_prop_index(self, keynum, value);
+ return pyrna_py_to_prop_array_index(self, keynum, value);
PyErr_SetString(PyExc_IndexError, "bpy_prop_array[index] = value: index out of range");
return -1;
}
-static int pyrna_prop_array_ass_subscript( BPy_PropertyRNA *self, PyObject *key, PyObject *value )
+static int pyrna_prop_array_ass_subscript( BPy_PropertyArrayRNA *self, PyObject *key, PyObject *value )
{
/* char *keyname = NULL; */ /* not supported yet */
int ret= -1;
@@ -1582,6 +1732,31 @@ static PyMappingMethods pyrna_prop_collection_as_mapping = {
( objobjargproc ) NULL, /* mp_ass_subscript */
};
+/* only for fast bool's, large structs, assign nb_bool on init */
+static PyNumberMethods pyrna_prop_array_as_number = {
+ NULL, /* nb_add */
+ NULL, /* nb_subtract */
+ NULL, /* nb_multiply */
+ NULL, /* nb_remainder */
+ NULL, /* nb_divmod */
+ NULL, /* nb_power */
+ NULL, /* nb_negative */
+ NULL, /* nb_positive */
+ NULL, /* nb_absolute */
+ (inquiry) pyrna_prop_array_bool, /* nb_bool */
+};
+static PyNumberMethods pyrna_prop_collection_as_number = {
+ NULL, /* nb_add */
+ NULL, /* nb_subtract */
+ NULL, /* nb_multiply */
+ NULL, /* nb_remainder */
+ NULL, /* nb_divmod */
+ NULL, /* nb_power */
+ NULL, /* nb_negative */
+ NULL, /* nb_positive */
+ NULL, /* nb_absolute */
+ (inquiry) pyrna_prop_collection_bool, /* nb_bool */
+};
static int pyrna_prop_array_contains(BPy_PropertyRNA *self, PyObject *value)
{
@@ -1616,12 +1791,12 @@ static int pyrna_struct_contains(BPy_StructRNA *self, PyObject *value)
return -1;
}
- if(RNA_struct_idproperties_check(self->ptr.type)==0) {
+ if(RNA_struct_idprops_check(self->ptr.type)==0) {
PyErr_SetString( PyExc_TypeError, "bpy_struct: this type doesnt support IDProperties");
return -1;
}
- group= RNA_struct_idproperties(&self->ptr, 0);
+ group= RNA_struct_idprops(&self->ptr, 0);
if(!group)
return 0;
@@ -1674,7 +1849,7 @@ static PyObject *pyrna_struct_subscript( BPy_StructRNA *self, PyObject *key )
IDProperty *group, *idprop;
char *name= _PyUnicode_AsString(key);
- if(RNA_struct_idproperties_check(self->ptr.type)==0) {
+ if(RNA_struct_idprops_check(self->ptr.type)==0) {
PyErr_SetString( PyExc_TypeError, "this type doesn't support IDProperties");
return NULL;
}
@@ -1684,7 +1859,7 @@ static PyObject *pyrna_struct_subscript( BPy_StructRNA *self, PyObject *key )
return NULL;
}
- group= RNA_struct_idproperties(&self->ptr, 0);
+ group= RNA_struct_idprops(&self->ptr, 0);
if(group==NULL) {
PyErr_Format( PyExc_KeyError, "bpy_struct[key]: key \"%s\" not found", name);
@@ -1703,7 +1878,7 @@ static PyObject *pyrna_struct_subscript( BPy_StructRNA *self, PyObject *key )
static int pyrna_struct_ass_subscript( BPy_StructRNA *self, PyObject *key, PyObject *value )
{
- IDProperty *group= RNA_struct_idproperties(&self->ptr, 1);
+ IDProperty *group= RNA_struct_idprops(&self->ptr, 1);
if(group==NULL) {
PyErr_SetString(PyExc_TypeError, "bpy_struct[key] = val: id properties not supported for this type");
@@ -1733,12 +1908,12 @@ static PyObject *pyrna_struct_keys(BPy_PropertyRNA *self)
{
IDProperty *group;
- if(RNA_struct_idproperties_check(self->ptr.type)==0) {
+ if(RNA_struct_idprops_check(self->ptr.type)==0) {
PyErr_SetString( PyExc_TypeError, "bpy_struct.keys(): this type doesn't support IDProperties");
return NULL;
}
- group= RNA_struct_idproperties(&self->ptr, 0);
+ group= RNA_struct_idprops(&self->ptr, 0);
if(group==NULL)
return PyList_New(0);
@@ -1760,12 +1935,12 @@ static PyObject *pyrna_struct_items(BPy_PropertyRNA *self)
{
IDProperty *group;
- if(RNA_struct_idproperties_check(self->ptr.type)==0) {
+ if(RNA_struct_idprops_check(self->ptr.type)==0) {
PyErr_SetString( PyExc_TypeError, "bpy_struct.items(): this type doesn't support IDProperties");
return NULL;
}
- group= RNA_struct_idproperties(&self->ptr, 0);
+ group= RNA_struct_idprops(&self->ptr, 0);
if(group==NULL)
return PyList_New(0);
@@ -1787,12 +1962,12 @@ static PyObject *pyrna_struct_values(BPy_PropertyRNA *self)
{
IDProperty *group;
- if(RNA_struct_idproperties_check(self->ptr.type)==0) {
+ if(RNA_struct_idprops_check(self->ptr.type)==0) {
PyErr_SetString( PyExc_TypeError, "bpy_struct.values(): this type doesn't support IDProperties");
return NULL;
}
- group= RNA_struct_idproperties(&self->ptr, 0);
+ group= RNA_struct_idprops(&self->ptr, 0);
if(group==NULL)
return PyList_New(0);
@@ -1804,26 +1979,46 @@ static PyObject *pyrna_struct_values(BPy_PropertyRNA *self)
static int pyrna_struct_anim_args_parse(PointerRNA *ptr, const char *error_prefix, const char *path,
char **path_full, int *index)
{
+ const int is_idbase= RNA_struct_is_ID(ptr->type);
PropertyRNA *prop;
+ PointerRNA r_ptr;
if (ptr->data==NULL) {
PyErr_Format(PyExc_TypeError, "%.200s this struct has no data, can't be animated", error_prefix);
return -1;
}
- prop = RNA_struct_find_property(ptr, path);
-
+ /* full paths can only be given from ID base */
+ if(is_idbase) {
+ int r_index= -1;
+ if(RNA_path_resolve_full(ptr, path, &r_ptr, &prop, &r_index)==0) {
+ prop= NULL;
+ }
+ else if(r_index != -1) {
+ PyErr_Format(PyExc_ValueError, "%.200s path includes index, must be a separate argument", error_prefix, path);
+ return -1;
+ }
+ else if(ptr->id.data != r_ptr.id.data) {
+ PyErr_Format(PyExc_ValueError, "%.200s path spans ID blocks", error_prefix, path);
+ return -1;
+ }
+ }
+ else {
+ prop = RNA_struct_find_property(ptr, path);
+ r_ptr= *ptr;
+ }
+
if (prop==NULL) {
PyErr_Format( PyExc_TypeError, "%.200s property \"%s\" not found", error_prefix, path);
return -1;
}
- if (!RNA_property_animateable(ptr, prop)) {
+ if (!RNA_property_animateable(&r_ptr, prop)) {
PyErr_Format(PyExc_TypeError, "%.200s property \"%s\" not animatable", error_prefix, path);
return -1;
}
- if(RNA_property_array_check(ptr, prop) == 0) {
+ if(RNA_property_array_check(&r_ptr, prop) == 0) {
if((*index) == -1) {
*index= 0;
}
@@ -1833,18 +2028,23 @@ static int pyrna_struct_anim_args_parse(PointerRNA *ptr, const char *error_prefi
}
}
else {
- int array_len= RNA_property_array_length(ptr, prop);
+ int array_len= RNA_property_array_length(&r_ptr, prop);
if((*index) < -1 || (*index) >= array_len) {
PyErr_Format( PyExc_TypeError, "%.200s index out of range \"%s\", given %d, array length is %d", error_prefix, path, *index, array_len);
return -1;
}
}
- *path_full= RNA_path_from_ID_to_property(ptr, prop);
-
- if (*path_full==NULL) {
- PyErr_Format( PyExc_TypeError, "%.200s could not make path to \"%s\"", error_prefix, path);
- return -1;
+ if(is_idbase) {
+ *path_full= BLI_strdup(path);
+ }
+ else {
+ *path_full= RNA_path_from_ID_to_property(&r_ptr, prop);
+
+ if (*path_full==NULL) {
+ PyErr_Format( PyExc_TypeError, "%.200s could not make path to \"%s\"", error_prefix, path);
+ return -1;
+ }
}
return 0;
@@ -2039,12 +2239,34 @@ static char pyrna_struct_is_property_set_doc[] =
static PyObject *pyrna_struct_is_property_set(BPy_StructRNA *self, PyObject *args)
{
+ PropertyRNA *prop;
char *name;
+ int ret;
if (!PyArg_ParseTuple(args, "s:is_property_set", &name))
return NULL;
- return PyBool_FromLong(RNA_property_is_set(&self->ptr, name));
+ if((prop= RNA_struct_find_property(&self->ptr, name)) == NULL) {
+ PyErr_Format(PyExc_TypeError, "%.200s.is_property_set(\"%.200s\") not found", RNA_struct_identifier(self->ptr.type), name);
+ return NULL;
+ }
+
+ /* double property lookup, could speed up */
+ /* return PyBool_FromLong(RNA_property_is_set(&self->ptr, name)); */
+ if(RNA_property_flag(prop) & PROP_IDPROPERTY) {
+ IDProperty *group= RNA_struct_idprops(&self->ptr, 0);
+ if(group) {
+ ret= IDP_GetPropertyFromGroup(group, name) ? 1:0;
+ }
+ else {
+ ret= 0;
+ }
+ }
+ else {
+ ret= 1;
+ }
+
+ return PyBool_FromLong(ret);
}
static char pyrna_struct_is_property_hidden_doc[] =
@@ -2059,37 +2281,67 @@ static PyObject *pyrna_struct_is_property_hidden(BPy_StructRNA *self, PyObject *
{
PropertyRNA *prop;
char *name;
- int hidden;
if (!PyArg_ParseTuple(args, "s:is_property_hidden", &name))
return NULL;
-
- prop= RNA_struct_find_property(&self->ptr, name);
- hidden= (prop)? (RNA_property_flag(prop) & PROP_HIDDEN): 1;
- return PyBool_FromLong(hidden);
+ if((prop= RNA_struct_find_property(&self->ptr, name)) == NULL) {
+ PyErr_Format(PyExc_TypeError, "%.200s.is_property_hidden(\"%.200s\") not found", RNA_struct_identifier(self->ptr.type), name);
+ return NULL;
+ }
+
+ return PyBool_FromLong(RNA_property_flag(prop) & PROP_HIDDEN);
}
static char pyrna_struct_path_resolve_doc[] =
-".. method:: path_resolve(path)\n"
+".. method:: path_resolve(path, coerce=True)\n"
+"\n"
+" Returns the property from the path, raise an exception when not found.\n"
"\n"
-" Returns the property from the path given or None if the property is not found.";
+" :arg path: path which this property resolves.\n"
+" :type path: string\n"
+" :arg coerce: optional argument, when True, the property will be converted into its python representation.\n"
+" :type coerce: boolean\n";
-static PyObject *pyrna_struct_path_resolve(BPy_StructRNA *self, PyObject *value)
+static PyObject *pyrna_struct_path_resolve(BPy_StructRNA *self, PyObject *args)
{
- char *path= _PyUnicode_AsString(value);
+ char *path;
+ PyObject *coerce= Py_True;
PointerRNA r_ptr;
PropertyRNA *r_prop;
+ int index= -1;
- if(path==NULL) {
- PyErr_SetString(PyExc_TypeError, "bpy_struct.path_resolve(): accepts only a single string argument");
+ if (!PyArg_ParseTuple(args, "s|O!:path_resolve", &path, &PyBool_Type, &coerce))
return NULL;
- }
- if (RNA_path_resolve(&self->ptr, path, &r_ptr, &r_prop))
- return pyrna_prop_CreatePyObject(&r_ptr, r_prop);
-
- Py_RETURN_NONE;
+ if (RNA_path_resolve_full(&self->ptr, path, &r_ptr, &r_prop, &index)) {
+ if(r_prop) {
+ if(index != -1) {
+ if(index >= RNA_property_array_length(&r_ptr, r_prop) || index < 0) {
+ PyErr_Format(PyExc_TypeError, "%.200s.path_resolve(\"%.200s\") index out of range", RNA_struct_identifier(self->ptr.type), path);
+ return NULL;
+ }
+ else {
+ return pyrna_array_index(&r_ptr, r_prop, index);
+ }
+ }
+ else {
+ if(coerce == Py_False) {
+ return pyrna_prop_CreatePyObject(&r_ptr, r_prop);
+ }
+ else {
+ return pyrna_prop_to_py(&r_ptr, r_prop);
+ }
+ }
+ }
+ else {
+ return pyrna_struct_CreatePyObject(&r_ptr);
+ }
+ }
+ else {
+ PyErr_Format(PyExc_TypeError, "%.200s.path_resolve(\"%.200s\") could not be resolved", RNA_struct_identifier(self->ptr.type), path);
+ return NULL;
+ }
}
static char pyrna_struct_path_from_id_doc[] =
@@ -2164,15 +2416,15 @@ static PyObject *pyrna_prop_path_from_id(BPy_PropertyRNA *self)
return ret;
}
-static char pyrna_struct_recast_type_doc[] =
-".. method:: recast_type()\n"
+static char pyrna_struct_type_recast_doc[] =
+".. method:: type_recast()\n"
"\n"
" Return a new instance, this is needed because types such as textures can be changed at runtime.\n"
"\n"
" :return: a new instance of this object with the type initialized again.\n"
" :rtype: subclass of :class:`bpy_struct`";
-static PyObject *pyrna_struct_recast_type(BPy_StructRNA *self, PyObject *args)
+static PyObject *pyrna_struct_type_recast(BPy_StructRNA *self, PyObject *args)
{
PointerRNA r_ptr;
RNA_pointer_recast(&self->ptr, &r_ptr);
@@ -2287,9 +2539,13 @@ static PyObject *pyrna_struct_getattro( BPy_StructRNA *self, PyObject *pyname )
PropertyRNA *prop;
FunctionRNA *func;
- if(name[0]=='_') { // rna can't start with a "_", so for __dict__ and similar we can skip using rna lookups
+ if(name == NULL) {
+ PyErr_SetString(PyExc_AttributeError, "bpy_struct: __getattr__ must be a string");
+ ret = NULL;
+ }
+ else if(name[0]=='_') { // rna can't start with a "_", so for __dict__ and similar we can skip using rna lookups
/* annoying exception, maybe we need to have different types for this... */
- if((strcmp(name, "__getitem__")==0 || strcmp(name, "__setitem__")==0) && !RNA_struct_idproperties_check(self->ptr.type)) {
+ if((strcmp(name, "__getitem__")==0 || strcmp(name, "__setitem__")==0) && !RNA_struct_idprops_check(self->ptr.type)) {
PyErr_SetString(PyExc_AttributeError, "bpy_struct: no __getitem__ support for this type");
ret = NULL;
}
@@ -2390,12 +2646,69 @@ static int pyrna_struct_pydict_contains(PyObject *self, PyObject *pyname)
#endif
//--------------- setattr-------------------------------------------
+static int pyrna_is_deferred_prop(PyObject *value)
+{
+ return PyTuple_CheckExact(value) && PyTuple_GET_SIZE(value)==2 && PyCallable_Check(PyTuple_GET_ITEM(value, 0)) && PyDict_CheckExact(PyTuple_GET_ITEM(value, 1));
+}
+
+static PyObject *pyrna_struct_meta_idprop_getattro(PyObject *cls, PyObject *pyname)
+{
+ return PyType_Type.tp_getattro(cls, pyname);
+}
+
+static int pyrna_struct_meta_idprop_setattro(PyObject *cls, PyObject *attr, PyObject *value)
+{
+ StructRNA *srna= srna_from_self(cls, "");
+
+ if(srna == NULL) {
+ if(value && pyrna_is_deferred_prop(value)) {
+ PyErr_Format(PyExc_AttributeError, "pyrna_struct_meta_idprop_setattro() unable to get srna from class '%.200s'", ((PyTypeObject *)cls)->tp_name);
+ return -1;
+ }
+
+ /* srna_from_self may set an error */
+ PyErr_Clear();
+ return PyType_Type.tp_setattro(cls, attr, value);
+ }
+
+ if(value) {
+ /* check if the value is a property */
+ if(pyrna_is_deferred_prop(value)) {
+ int ret= deferred_register_prop(srna, attr, value);
+ if(ret < 0)
+ return ret;
+ /* pass through, when the value isn't assigned it still works but gets confusing from script writers POV */
+ }
+ else {
+ /* remove existing property if its set or we also end up with confusement */
+ char *attr_str= _PyUnicode_AsString(attr);
+ RNA_def_property_free_identifier(srna, attr_str); /* ignore on failier */
+ }
+ }
+ else { /* __delattr__ */
+ /* first find if this is a registered property */
+ char *attr_str= _PyUnicode_AsString(attr);
+ int ret= RNA_def_property_free_identifier(srna, attr_str);
+ if (ret == -1) {
+ PyErr_Format(PyExc_TypeError, "struct_meta_idprop.detattr(): '%s' not a dynamic property.", attr_str);
+ return -1;
+ }
+ }
+
+ /* fallback to standard py, delattr/setattr */
+ return PyType_Type.tp_setattro(cls, attr, value);
+}
+
static int pyrna_struct_setattro( BPy_StructRNA *self, PyObject *pyname, PyObject *value )
{
char *name = _PyUnicode_AsString(pyname);
PropertyRNA *prop= NULL;
- if (name[0] != '_' && (prop= RNA_struct_find_property(&self->ptr, name))) {
+ if(name == NULL) {
+ PyErr_SetString(PyExc_AttributeError, "bpy_struct: __setattr__ must be a string");
+ return -1;
+ }
+ else if (name[0] != '_' && (prop= RNA_struct_find_property(&self->ptr, name))) {
if (!RNA_property_editable_flag(&self->ptr, prop)) {
PyErr_Format( PyExc_AttributeError, "bpy_struct: attribute \"%.200s\" from \"%.200s\" is read-only", RNA_property_identifier(prop), RNA_struct_identifier(self->ptr.type) );
return -1;
@@ -2426,10 +2739,16 @@ static int pyrna_struct_setattro( BPy_StructRNA *self, PyObject *pyname, PyObjec
}
/* pyrna_py_to_prop sets its own exceptions */
- if(prop)
+ if(prop) {
+ if(value == NULL) {
+ PyErr_SetString(PyExc_AttributeError, "bpy_struct: del not supported");
+ return -1;
+ }
return pyrna_py_to_prop(&self->ptr, prop, NULL, NULL, value, "bpy_struct: item.attr = val:");
- else
+ }
+ else {
return PyObject_GenericSetAttr((PyObject *)self, pyname, value);
+ }
}
static PyObject *pyrna_prop_dir(BPy_PropertyRNA *self)
@@ -2461,7 +2780,11 @@ static PyObject *pyrna_prop_collection_getattro( BPy_PropertyRNA *self, PyObject
{
char *name = _PyUnicode_AsString(pyname);
- if(name[0] != '_') {
+ if(name == NULL) {
+ PyErr_SetString(PyExc_AttributeError, "bpy_prop_collection: __getattr__ must be a string");
+ return NULL;
+ }
+ else if(name[0] != '_') {
PyObject *ret;
PropertyRNA *prop;
FunctionRNA *func;
@@ -2494,7 +2817,15 @@ static int pyrna_prop_collection_setattro( BPy_PropertyRNA *self, PyObject *pyna
PropertyRNA *prop;
PointerRNA r_ptr;
- if(RNA_property_collection_type_get(&self->ptr, self->prop, &r_ptr)) {
+ if(name == NULL) {
+ PyErr_SetString(PyExc_AttributeError, "bpy_prop: __setattr__ must be a string");
+ return -1;
+ }
+ else if(value == NULL) {
+ PyErr_SetString(PyExc_AttributeError, "bpy_prop: del not supported");
+ return -1;
+ }
+ else if(RNA_property_collection_type_get(&self->ptr, self->prop, &r_ptr)) {
if ((prop = RNA_struct_find_property(&r_ptr, name))) {
/* pyrna_py_to_prop sets its own exceptions */
return pyrna_py_to_prop(&r_ptr, prop, NULL, NULL, value, "BPy_PropertyRNA - Attribute (setattr):");
@@ -2506,7 +2837,7 @@ static int pyrna_prop_collection_setattro( BPy_PropertyRNA *self, PyObject *pyna
}
/* odd case, we need to be able return a python method from a tp_getset */
-static PyObject *pyrna_prop_add(BPy_PropertyRNA *self)
+static PyObject *pyrna_prop_collection_idprop_add(BPy_PropertyRNA *self)
{
PointerRNA r_ptr;
@@ -2520,9 +2851,8 @@ static PyObject *pyrna_prop_add(BPy_PropertyRNA *self)
}
}
-static PyObject *pyrna_prop_remove(BPy_PropertyRNA *self, PyObject *value)
+static PyObject *pyrna_prop_collection_idprop_remove(BPy_PropertyRNA *self, PyObject *value)
{
- PyObject *ret;
int key= PyLong_AsSsize_t(value);
if (key==-1 && PyErr_Occurred()) {
@@ -2535,15 +2865,11 @@ static PyObject *pyrna_prop_remove(BPy_PropertyRNA *self, PyObject *value)
return NULL;
}
- ret = Py_None;
- Py_INCREF(ret);
-
- return ret;
+ Py_RETURN_NONE;
}
-static PyObject *pyrna_prop_move(BPy_PropertyRNA *self, PyObject *args)
+static PyObject *pyrna_prop_collection_idprop_move(BPy_PropertyRNA *self, PyObject *args)
{
- PyObject *ret;
int key=0, pos=0;
if (!PyArg_ParseTuple(args, "ii", &key, &pos)) {
@@ -2556,14 +2882,12 @@ static PyObject *pyrna_prop_move(BPy_PropertyRNA *self, PyObject *args)
return NULL;
}
- ret = Py_None;
- Py_INCREF(ret);
-
- return ret;
+ Py_RETURN_NONE;
}
-static PyObject *pyrna_struct_get_id_data(BPy_StructRNA *self)
+static PyObject *pyrna_struct_get_id_data(BPy_DummyPointerRNA *self)
{
+ /* used for struct and pointer since both have a ptr */
if(self->ptr.id.data) {
PointerRNA id_ptr;
RNA_id_pointer_create((ID *)self->ptr.id.data, &id_ptr);
@@ -2576,12 +2900,12 @@ static PyObject *pyrna_struct_get_id_data(BPy_StructRNA *self)
/*****************************************************************************/
/* Python attributes get/set structure: */
/*****************************************************************************/
-#if 0
+
static PyGetSetDef pyrna_prop_getseters[] = {
- {"active", (getter)pyrna_prop_get_active, (setter)pyrna_prop_set_active, "", NULL},
+ {"id_data", (getter)pyrna_struct_get_id_data, (setter)NULL, "The :class:`ID` object this datablock is from or None, (not available for all data types)", NULL},
{NULL,NULL,NULL,NULL,NULL} /* Sentinel */
};
-#endif
+
static PyGetSetDef pyrna_struct_getseters[] = {
{"id_data", (getter)pyrna_struct_get_id_data, (setter)NULL, "The :class:`ID` object this datablock is from or None, (not available for all data types)", NULL},
@@ -2684,12 +3008,12 @@ static PyObject *pyrna_struct_get(BPy_StructRNA *self, PyObject *args)
return NULL;
/* mostly copied from BPy_IDGroup_Map_GetItem */
- if(RNA_struct_idproperties_check(self->ptr.type)==0) {
+ if(RNA_struct_idprops_check(self->ptr.type)==0) {
PyErr_SetString( PyExc_TypeError, "this type doesn't support IDProperties");
return NULL;
}
- group= RNA_struct_idproperties(&self->ptr, 0);
+ group= RNA_struct_idprops(&self->ptr, 0);
if(group) {
idprop= IDP_GetPropertyFromGroup(group, key);
@@ -2697,26 +3021,22 @@ static PyObject *pyrna_struct_get(BPy_StructRNA *self, PyObject *args)
return BPy_IDGroup_WrapData(self->ptr.id.data, idprop);
}
- Py_INCREF(def);
- return def;
+ return Py_INCREF(def), def;
}
static char pyrna_struct_as_pointer_doc[] =
".. method:: as_pointer()\n"
"\n"
-" Returns capsule which holds a pointer to blenders internal data\n"
+" Returns the memory address which holds a pointer to blenders internal data\n"
"\n"
-" :return: capsule with a name set from the struct type.\n"
-" :rtype: PyCapsule\n"
+" :return: int (memory address).\n"
+" :rtype: int\n"
"\n"
" .. note:: This is intended only for advanced script writers who need to pass blender data to their own C/Python modules.\n";
static PyObject *pyrna_struct_as_pointer(BPy_StructRNA *self)
{
- if(self->ptr.data)
- return PyCapsule_New(self->ptr.data, RNA_struct_identifier(self->ptr.type), NULL);
-
- Py_RETURN_NONE;
+ return PyLong_FromVoidPtr(self->ptr.data);
}
static PyObject *pyrna_prop_get(BPy_PropertyRNA *self, PyObject *args)
@@ -2731,9 +3051,8 @@ static PyObject *pyrna_prop_get(BPy_PropertyRNA *self, PyObject *args)
if(RNA_property_collection_lookup_string(&self->ptr, self->prop, key, &newptr))
return pyrna_struct_CreatePyObject(&newptr);
-
- Py_INCREF(def);
- return def;
+
+ return Py_INCREF(def), def;
}
static void foreach_attr_type( BPy_PropertyRNA *self, char *attr,
@@ -2989,7 +3308,7 @@ static PyObject *pyrna_prop_foreach_set(BPy_PropertyRNA *self, PyObject *args)
/* A bit of a kludge, make a list out of a collection or array,
* then return the lists iter function, not especially fast but convenient for now */
-PyObject *pyrna_prop_array_iter(BPy_PropertyRNA *self)
+PyObject *pyrna_prop_array_iter(BPy_PropertyArrayRNA *self)
{
/* Try get values from a collection */
PyObject *ret;
@@ -3041,15 +3360,14 @@ static struct PyMethodDef pyrna_struct_methods[] = {
{"driver_remove", (PyCFunction)pyrna_struct_driver_remove, METH_VARARGS, pyrna_struct_driver_remove_doc},
{"is_property_set", (PyCFunction)pyrna_struct_is_property_set, METH_VARARGS, pyrna_struct_is_property_set_doc},
{"is_property_hidden", (PyCFunction)pyrna_struct_is_property_hidden, METH_VARARGS, pyrna_struct_is_property_hidden_doc},
- {"path_resolve", (PyCFunction)pyrna_struct_path_resolve, METH_O, pyrna_struct_path_resolve_doc},
+ {"path_resolve", (PyCFunction)pyrna_struct_path_resolve, METH_VARARGS, pyrna_struct_path_resolve_doc},
{"path_from_id", (PyCFunction)pyrna_struct_path_from_id, METH_VARARGS, pyrna_struct_path_from_id_doc},
- {"recast_type", (PyCFunction)pyrna_struct_recast_type, METH_NOARGS, pyrna_struct_recast_type_doc},
+ {"type_recast", (PyCFunction)pyrna_struct_type_recast, METH_NOARGS, pyrna_struct_type_recast_doc},
{"__dir__", (PyCFunction)pyrna_struct_dir, METH_NOARGS, NULL},
/* experemental */
{"callback_add", (PyCFunction)pyrna_callback_add, METH_VARARGS, NULL},
{"callback_remove", (PyCFunction)pyrna_callback_remove, METH_VARARGS, NULL},
-
{NULL, NULL, 0, NULL}
};
@@ -3060,8 +3378,6 @@ static struct PyMethodDef pyrna_prop_methods[] = {
};
static struct PyMethodDef pyrna_prop_array_methods[] = {
- {"foreach_get", (PyCFunction)pyrna_prop_foreach_get, METH_VARARGS, NULL},
- {"foreach_set", (PyCFunction)pyrna_prop_foreach_set, METH_VARARGS, NULL},
{NULL, NULL, 0, NULL}
};
@@ -3074,11 +3390,13 @@ static struct PyMethodDef pyrna_prop_collection_methods[] = {
{"values", (PyCFunction)pyrna_prop_values, METH_NOARGS, NULL},
{"get", (PyCFunction)pyrna_prop_get, METH_VARARGS, NULL},
+ {NULL, NULL, 0, NULL}
+};
- /* moved into a getset */
- {"add", (PyCFunction)pyrna_prop_add, METH_NOARGS, NULL},
- {"remove", (PyCFunction)pyrna_prop_remove, METH_O, NULL},
- {"move", (PyCFunction)pyrna_prop_move, METH_VARARGS, NULL},
+static struct PyMethodDef pyrna_prop_collection_idprop_methods[] = {
+ {"add", (PyCFunction)pyrna_prop_collection_idprop_add, METH_NOARGS, NULL},
+ {"remove", (PyCFunction)pyrna_prop_collection_idprop_remove, METH_O, NULL},
+ {"move", (PyCFunction)pyrna_prop_collection_idprop_move, METH_VARARGS, NULL},
{NULL, NULL, 0, NULL}
};
@@ -3140,9 +3458,9 @@ PyObject *pyrna_param_to_py(PointerRNA *ptr, ParameterList *parms, PropertyRNA *
int len;
if (flag & PROP_DYNAMIC) {
- len= RNA_parameter_length_get_data(parms, prop, data);
-
- data= *((void **)data);
+ ParameterDynAlloc *data_alloc= data;
+ len= data_alloc->array_tot;
+ data= data_alloc->array;
}
else
len= RNA_property_array_length(ptr, prop);
@@ -3204,10 +3522,30 @@ PyObject *pyrna_param_to_py(PointerRNA *ptr, ParameterList *parms, PropertyRNA *
break;
case PROP_STRING:
{
- if(flag & PROP_THICK_WRAP)
- ret = PyUnicode_FromString( (char*)data );
+ char *data_ch;
+ PyObject *value_coerce= NULL;
+ int subtype= RNA_property_subtype(prop);
+
+ if (flag & PROP_THICK_WRAP)
+ data_ch= (char *)data;
else
- ret = PyUnicode_FromString( *(char**)data );
+ data_ch= *(char **)data;
+
+#ifdef USE_STRING_COERCE
+ if(ELEM3(subtype, PROP_FILEPATH, PROP_DIRPATH, PROP_FILENAME)) {
+ ret= PyC_UnicodeFromByte(data_ch);
+ }
+ else {
+ ret= PyUnicode_FromString(data_ch);
+ }
+#else
+ ret = PyUnicode_FromString(data_ch);
+#endif
+
+#ifdef USE_STRING_COERCE
+ Py_XDECREF(value_coerce);
+#endif
+
break;
}
case PROP_ENUM:
@@ -3506,6 +3844,42 @@ static PyObject * pyrna_func_call(PyObject *self, PyObject *args, PyObject *kw)
Py_RETURN_NONE;
}
+
+/* subclasses of pyrna_struct_Type which support idprop definitions use this as a metaclass */
+/* note: tp_base member is set to &PyType_Type on init */
+PyTypeObject pyrna_struct_meta_idprop_Type = {
+ PyVarObject_HEAD_INIT(NULL, 0)
+ "bpy_struct_meta_idprop", /* tp_name */
+ sizeof(PyHeapTypeObject), /* tp_basicsize */ // XXX, would be PyTypeObject, but subtypes of Type must be PyHeapTypeObject's
+ 0, /* tp_itemsize */
+ /* methods */
+ NULL, /* tp_dealloc */
+ NULL, /* printfunc tp_print; */
+ NULL, /* getattrfunc tp_getattr; */
+ NULL, /* setattrfunc tp_setattr; */
+ NULL, /* tp_compare */ /* DEPRECATED in python 3.0! */
+ NULL, /* tp_repr */
+
+ /* Method suites for standard classes */
+ NULL, /* PyNumberMethods *tp_as_number; */
+ NULL, /* PySequenceMethods *tp_as_sequence; */
+ NULL, /* PyMappingMethods *tp_as_mapping; */
+
+ /* More standard operations (here for binary compatibility) */
+ NULL, /* hashfunc tp_hash; */
+ NULL, /* ternaryfunc tp_call; */
+ NULL, /* reprfunc tp_str; */
+ (getattrofunc) pyrna_struct_meta_idprop_getattro, /* getattrofunc tp_getattro; */
+ (setattrofunc) pyrna_struct_meta_idprop_setattro, /* setattrofunc tp_setattro; */
+
+ /* Functions to access object as input/output buffer */
+ NULL, /* PyBufferProcs *tp_as_buffer; */
+
+ /*** Flags to define presence of optional/expanded features ***/
+ Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /* long tp_flags; */
+};
+
+
/*-----------------------BPy_StructRNA method def------------------------------*/
PyTypeObject pyrna_struct_Type = {
PyVarObject_HEAD_INIT(NULL, 0)
@@ -3530,7 +3904,7 @@ PyTypeObject pyrna_struct_Type = {
( hashfunc )pyrna_struct_hash, /* hashfunc tp_hash; */
NULL, /* ternaryfunc tp_call; */
- NULL, /* reprfunc tp_str; */
+ (reprfunc) pyrna_struct_str, /* reprfunc tp_str; */
( getattrofunc ) pyrna_struct_getattro, /* getattrofunc tp_getattro; */
( setattrofunc ) pyrna_struct_setattro, /* setattrofunc tp_setattro; */
@@ -3597,7 +3971,7 @@ PyTypeObject pyrna_prop_Type = {
NULL, /* getattrfunc tp_getattr; */
NULL, /* setattrfunc tp_setattr; */
NULL, /* tp_compare */ /* DEPRECATED in python 3.0! */
- ( reprfunc ) pyrna_prop_repr, /* tp_repr */
+ (reprfunc) pyrna_prop_repr, /* tp_repr */
/* Method suites for standard classes */
@@ -3609,7 +3983,7 @@ PyTypeObject pyrna_prop_Type = {
( hashfunc ) pyrna_prop_hash, /* hashfunc tp_hash; */
NULL, /* ternaryfunc tp_call; */
- NULL, /* reprfunc tp_str; */
+ (reprfunc) pyrna_prop_str, /* reprfunc tp_str; */
/* will only use these if this is a subtype of a py class */
NULL, /* getattrofunc tp_getattro; */
@@ -3644,7 +4018,7 @@ PyTypeObject pyrna_prop_Type = {
/*** Attribute descriptor and subclassing stuff ***/
pyrna_prop_methods, /* struct PyMethodDef *tp_methods; */
NULL, /* struct PyMemberDef *tp_members; */
- NULL /*pyrna_prop_getseters*/, /* struct PyGetSetDef *tp_getset; */
+ pyrna_prop_getseters, /* struct PyGetSetDef *tp_getset; */
NULL, /* struct _typeobject *tp_base; */
NULL, /* PyObject *tp_dict; */
NULL, /* descrgetfunc tp_descr_get; */
@@ -3669,7 +4043,7 @@ PyTypeObject pyrna_prop_Type = {
PyTypeObject pyrna_prop_array_Type = {
PyVarObject_HEAD_INIT(NULL, 0)
"bpy_prop_array", /* tp_name */
- sizeof( BPy_PropertyRNA ), /* tp_basicsize */
+ sizeof( BPy_PropertyArrayRNA ), /* tp_basicsize */
0, /* tp_itemsize */
/* methods */
NULL, /* tp_dealloc */
@@ -3681,7 +4055,7 @@ PyTypeObject pyrna_prop_array_Type = {
/* Method suites for standard classes */
- NULL, /* PyNumberMethods *tp_as_number; */
+ &pyrna_prop_array_as_number, /* PyNumberMethods *tp_as_number; */
&pyrna_prop_array_as_sequence, /* PySequenceMethods *tp_as_sequence; */
&pyrna_prop_array_as_mapping, /* PyMappingMethods *tp_as_mapping; */
@@ -3761,7 +4135,7 @@ PyTypeObject pyrna_prop_collection_Type = {
/* Method suites for standard classes */
- NULL, /* PyNumberMethods *tp_as_number; */
+ &pyrna_prop_collection_as_number, /* PyNumberMethods *tp_as_number; */
&pyrna_prop_collection_as_sequence, /* PySequenceMethods *tp_as_sequence; */
&pyrna_prop_collection_as_mapping, /* PyMappingMethods *tp_as_mapping; */
@@ -3826,22 +4200,85 @@ PyTypeObject pyrna_prop_collection_Type = {
NULL
};
-static struct PyMethodDef pyrna_struct_subtype_methods[] = {
- {"BoolProperty", (PyCFunction)BPy_BoolProperty, METH_VARARGS|METH_KEYWORDS, BPy_BoolProperty_doc},
- {"BoolVectorProperty", (PyCFunction)BPy_BoolVectorProperty, METH_VARARGS|METH_KEYWORDS, BPy_BoolVectorProperty_doc},
- {"IntProperty", (PyCFunction)BPy_IntProperty, METH_VARARGS|METH_KEYWORDS, BPy_IntProperty_doc},
- {"IntVectorProperty", (PyCFunction)BPy_IntVectorProperty, METH_VARARGS|METH_KEYWORDS, BPy_IntVectorProperty_doc},
- {"FloatProperty", (PyCFunction)BPy_FloatProperty, METH_VARARGS|METH_KEYWORDS, BPy_FloatProperty_doc},
- {"FloatVectorProperty", (PyCFunction)BPy_FloatVectorProperty, METH_VARARGS|METH_KEYWORDS, BPy_FloatVectorProperty_doc},
- {"StringProperty", (PyCFunction)BPy_StringProperty, METH_VARARGS|METH_KEYWORDS, BPy_StringProperty_doc},
- {"EnumProperty", (PyCFunction)BPy_EnumProperty, METH_VARARGS|METH_KEYWORDS, BPy_EnumProperty_doc},
- {"PointerProperty", (PyCFunction)BPy_PointerProperty, METH_VARARGS|METH_KEYWORDS, BPy_PointerProperty_doc},
- {"CollectionProperty", (PyCFunction)BPy_CollectionProperty, METH_VARARGS|METH_KEYWORDS, BPy_CollectionProperty_doc},
-
- {"RemoveProperty", (PyCFunction)BPy_RemoveProperty, METH_VARARGS|METH_KEYWORDS, BPy_RemoveProperty_doc},
+/* only for add/remove/move methods */
+PyTypeObject pyrna_prop_collection_idprop_Type = {
+ PyVarObject_HEAD_INIT(NULL, 0)
+ "bpy_prop_collection_idprop", /* tp_name */
+ sizeof( BPy_PropertyRNA ), /* tp_basicsize */
+ 0, /* tp_itemsize */
+ /* methods */
+ NULL, /* tp_dealloc */
+ NULL, /* printfunc tp_print; */
+ NULL, /* getattrfunc tp_getattr; */
+ NULL, /* setattrfunc tp_setattr; */
+ NULL, /* tp_compare */ /* DEPRECATED in python 3.0! */
+ NULL, /* subclassed */ /* tp_repr */
-// {"__get_rna", (PyCFunction)BPy_GetStructRNA, METH_NOARGS, ""},
- {NULL, NULL, 0, NULL}
+ /* Method suites for standard classes */
+
+ NULL, /* PyNumberMethods *tp_as_number; */
+ NULL, /* PySequenceMethods *tp_as_sequence; */
+ NULL, /* PyMappingMethods *tp_as_mapping; */
+
+ /* More standard operations (here for binary compatibility) */
+
+ NULL, /* hashfunc tp_hash; */
+ NULL, /* ternaryfunc tp_call; */
+ NULL, /* reprfunc tp_str; */
+
+ /* will only use these if this is a subtype of a py class */
+ NULL, /* getattrofunc tp_getattro; */
+ NULL, /* setattrofunc tp_setattro; */
+
+ /* Functions to access object as input/output buffer */
+ NULL, /* PyBufferProcs *tp_as_buffer; */
+
+ /*** Flags to define presence of optional/expanded features ***/
+ Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /* long tp_flags; */
+
+ NULL, /* char *tp_doc; Documentation string */
+ /*** Assigned meaning in release 2.0 ***/
+ /* call function for all accessible objects */
+ NULL, /* traverseproc tp_traverse; */
+
+ /* delete references to contained objects */
+ NULL, /* inquiry tp_clear; */
+
+ /*** Assigned meaning in release 2.1 ***/
+ /*** rich comparisons ***/
+ NULL, /* subclassed */ /* richcmpfunc tp_richcompare; */
+
+ /*** weak reference enabler ***/
+ 0, /* long tp_weaklistoffset; */
+
+ /*** Added in release 2.2 ***/
+ /* Iterators */
+ NULL, /* getiterfunc tp_iter; */
+ NULL, /* iternextfunc tp_iternext; */
+
+ /*** Attribute descriptor and subclassing stuff ***/
+ pyrna_prop_collection_idprop_methods, /* struct PyMethodDef *tp_methods; */
+ NULL, /* struct PyMemberDef *tp_members; */
+ NULL /*pyrna_prop_getseters*/, /* struct PyGetSetDef *tp_getset; */
+ &pyrna_prop_collection_Type, /* struct _typeobject *tp_base; */
+ NULL, /* PyObject *tp_dict; */
+ NULL, /* descrgetfunc tp_descr_get; */
+ NULL, /* descrsetfunc tp_descr_set; */
+ 0, /* long tp_dictoffset; */
+ NULL, /* initproc tp_init; */
+ NULL, /* allocfunc tp_alloc; */
+ NULL, /* newfunc tp_new; */
+ /* Low-level free-memory routine */
+ NULL, /* freefunc tp_free; */
+ /* For PyObject_IS_GC */
+ NULL, /* inquiry tp_is_gc; */
+ NULL, /* PyObject *tp_bases; */
+ /* method resolution order */
+ NULL, /* PyObject *tp_mro; */
+ NULL, /* PyObject *tp_cache; */
+ NULL, /* PyObject *tp_subclasses; */
+ NULL, /* PyObject *tp_weaklist; */
+ NULL
};
static void pyrna_subtype_set_rna(PyObject *newclass, StructRNA *srna)
@@ -3852,7 +4289,7 @@ static void pyrna_subtype_set_rna(PyObject *newclass, StructRNA *srna)
Py_INCREF(newclass);
if (RNA_struct_py_type_get(srna))
- PyObSpit("RNA WAS SET - ", RNA_struct_py_type_get(srna));
+ PyC_ObSpit("RNA WAS SET - ", RNA_struct_py_type_get(srna));
Py_XDECREF(((PyObject *)RNA_struct_py_type_get(srna)));
@@ -3865,21 +4302,11 @@ static void pyrna_subtype_set_rna(PyObject *newclass, StructRNA *srna)
RNA_pointer_create(NULL, &RNA_Struct, srna, &ptr);
item = pyrna_struct_CreatePyObject(&ptr);
- //item = PyCapsule_New(srna, NULL, NULL);
- PyDict_SetItemString(((PyTypeObject *)newclass)->tp_dict, "bl_rna", item);
+ /* note, must set the class not the __dict__ else the internal slots are not updated correctly */
+ PyObject_SetAttrString(newclass, "bl_rna", item);
Py_DECREF(item);
+
/* done with rna instance */
-
- /* attach functions into the class
- * so you can do... bpy.types.Scene.SomeFunction()
- */
- {
- PyMethodDef *ml;
-
- for(ml= pyrna_struct_subtype_methods; ml->ml_name; ml++){
- PyObject_SetAttrString(newclass, ml->ml_name, PyCFunction_New(ml, newclass));
- }
- }
}
static PyObject* pyrna_srna_Subtype(StructRNA *srna);
@@ -3910,9 +4337,10 @@ static PyObject* pyrna_srna_PyBase(StructRNA *srna) //, PyObject *bpy_types_dict
/* check if we have a native python subclass, use it when it exists
* return a borrowed reference */
+static PyObject *bpy_types_dict= NULL;
+
static PyObject* pyrna_srna_ExternalType(StructRNA *srna)
{
- PyObject *bpy_types_dict= NULL;
const char *idname= RNA_struct_identifier(srna);
PyObject *newclass;
@@ -3925,7 +4353,6 @@ static PyObject* pyrna_srna_ExternalType(StructRNA *srna)
fprintf(stderr, "pyrna_srna_ExternalType: failed to find 'bpy_types' module\n");
return NULL;
}
-
bpy_types_dict = PyModule_GetDict(bpy_types); // borrow
Py_DECREF(bpy_types); // fairly safe to assume the dict is kept
}
@@ -3949,7 +4376,7 @@ static PyObject* pyrna_srna_ExternalType(StructRNA *srna)
if(base_compare != base) {
fprintf(stderr, "pyrna_srna_ExternalType: incorrect subclassing of SRNA '%s'\nSee bpy_types.py\n", idname);
- PyObSpit("Expected! ", base_compare);
+ PyC_ObSpit("Expected! ", base_compare);
newclass= NULL;
}
else {
@@ -3966,14 +4393,19 @@ static PyObject* pyrna_srna_Subtype(StructRNA *srna)
{
PyObject *newclass = NULL;
+ /* stupid/simple case */
if (srna == NULL) {
newclass= NULL; /* Nothing to do */
- } else if ((newclass= RNA_struct_py_type_get(srna))) {
+ } /* the class may have alredy been declared & allocated */
+ else if ((newclass= RNA_struct_py_type_get(srna))) {
Py_INCREF(newclass);
- } else if ((newclass= pyrna_srna_ExternalType(srna))) {
+ } /* check if bpy_types.py module has the class defined in it */
+ else if ((newclass= pyrna_srna_ExternalType(srna))) {
pyrna_subtype_set_rna(newclass, srna);
Py_INCREF(newclass);
- } else {
+ } /* create a new class instance with the C api
+ * maintly for the purposing of matching the C/rna type hierarchy */
+ else {
/* subclass equivelents
- class myClass(myBase):
some='value' # or ...
@@ -3982,26 +4414,38 @@ static PyObject* pyrna_srna_Subtype(StructRNA *srna)
/* Assume RNA_struct_py_type_get(srna) was already checked */
PyObject *py_base= pyrna_srna_PyBase(srna);
-
+ PyObject *metaclass;
const char *idname= RNA_struct_identifier(srna);
- const char *descr= RNA_struct_ui_description(srna);
- if(!descr) descr= "(no docs)";
-
+ /* remove __doc__ for now */
+ // const char *descr= RNA_struct_ui_description(srna);
+ // if(!descr) descr= "(no docs)";
+ // "__doc__",descr
+
+ if(RNA_struct_idprops_check(srna) && !PyObject_IsSubclass(py_base, (PyObject *)&pyrna_struct_meta_idprop_Type)) {
+ metaclass= (PyObject *)&pyrna_struct_meta_idprop_Type;
+ }
+ else {
+ metaclass= (PyObject *)&PyType_Type;
+ }
+
/* always use O not N when calling, N causes refcount errors */
- newclass = PyObject_CallFunction( (PyObject*)&PyType_Type, "s(O){sssss()}", idname, py_base, "__module__","bpy.types", "__doc__",descr, "__slots__");
+ newclass = PyObject_CallFunction(metaclass, "s(O){sss()}", idname, py_base, "__module__","bpy.types", "__slots__");
+
/* newclass will now have 2 ref's, ???, probably 1 is internal since decrefing here segfaults */
- /* PyObSpit("new class ref", newclass); */
+ /* PyC_ObSpit("new class ref", newclass); */
if (newclass) {
/* srna owns one, and the other is owned by the caller */
pyrna_subtype_set_rna(newclass, srna);
- Py_DECREF(newclass); /* let srna own */
+ // XXX, adding this back segfaults blender on load.
+ // Py_DECREF(newclass); /* let srna own */
}
else {
/* this should not happen */
+ printf("Error registering '%s'\n", idname);
PyErr_Print();
PyErr_Clear();
}
@@ -4057,7 +4501,7 @@ PyObject *pyrna_struct_CreatePyObject( PointerRNA *ptr )
pyrna->ptr= *ptr;
pyrna->freeptr= FALSE;
- // PyObSpit("NewStructRNA: ", (PyObject *)pyrna);
+ // PyC_ObSpit("NewStructRNA: ", (PyObject *)pyrna);
return ( PyObject * ) pyrna;
}
@@ -4065,12 +4509,29 @@ PyObject *pyrna_struct_CreatePyObject( PointerRNA *ptr )
PyObject *pyrna_prop_CreatePyObject( PointerRNA *ptr, PropertyRNA *prop )
{
BPy_PropertyRNA *pyrna;
- PyTypeObject *type;
- if (RNA_property_type(prop) == PROP_COLLECTION) type= &pyrna_prop_collection_Type;
- else if (RNA_property_array_check(ptr, prop)) type= &pyrna_prop_array_Type;
- else type= &pyrna_prop_Type;
- pyrna = ( BPy_PropertyRNA * ) PyObject_NEW(BPy_PropertyRNA, type);
+ if (RNA_property_array_check(ptr, prop) == 0) {
+ PyTypeObject *type;
+
+ if (RNA_property_type(prop) != PROP_COLLECTION) {
+ type= &pyrna_prop_Type;
+ }
+ else {
+ if((RNA_property_flag(prop) & PROP_IDPROPERTY) == 0) {
+ type= &pyrna_prop_collection_Type;
+ }
+ else {
+ type= &pyrna_prop_collection_idprop_Type;
+ }
+ }
+
+ pyrna = (BPy_PropertyRNA *) PyObject_NEW(BPy_PropertyRNA, type);
+ }
+ else {
+ pyrna = (BPy_PropertyRNA *) PyObject_NEW(BPy_PropertyArrayRNA, &pyrna_prop_array_Type);
+ ((BPy_PropertyArrayRNA *)pyrna)->arraydim= 0;
+ ((BPy_PropertyArrayRNA *)pyrna)->arrayoffset= 0;
+ }
if( !pyrna ) {
PyErr_SetString( PyExc_MemoryError, "couldn't create BPy_rna object" );
@@ -4079,9 +4540,6 @@ PyObject *pyrna_prop_CreatePyObject( PointerRNA *ptr, PropertyRNA *prop )
pyrna->ptr = *ptr;
pyrna->prop = prop;
-
- pyrna->arraydim= 0;
- pyrna->arrayoffset= 0;
return ( PyObject * ) pyrna;
}
@@ -4092,7 +4550,12 @@ void BPY_rna_init(void)
mathutils_rna_array_cb_index= Mathutils_RegisterCallback(&mathutils_rna_array_cb);
mathutils_rna_matrix_cb_index= Mathutils_RegisterCallback(&mathutils_rna_matrix_cb);
#endif
-
+
+ /* metaclass */
+ pyrna_struct_meta_idprop_Type.tp_base= &PyType_Type;
+ if( PyType_Ready( &pyrna_struct_meta_idprop_Type ) < 0 )
+ return;
+
if( PyType_Ready( &pyrna_struct_Type ) < 0 )
return;
@@ -4104,6 +4567,9 @@ void BPY_rna_init(void)
if( PyType_Ready( &pyrna_prop_collection_Type ) < 0 )
return;
+
+ if( PyType_Ready( &pyrna_prop_collection_idprop_Type ) < 0 )
+ return;
}
/* bpy.data from python */
@@ -4149,8 +4615,12 @@ static PyObject *pyrna_basetype_getattro( BPy_BaseTypeRNA *self, PyObject *pynam
PointerRNA newptr;
PyObject *ret;
char *name= _PyUnicode_AsString(pyname);
-
- if(strcmp(name, "register")==0) {
+
+ if(name == NULL) {
+ PyErr_SetString(PyExc_AttributeError, "bpy.types: __getattr__ must be a string");
+ ret = NULL;
+ }
+ else if(strcmp(name, "register")==0) {
/* this is called so often, make an exception and save a full lookup on all types */
ret= PyObject_GenericGetAttr((PyObject *)self, pyname);
}
@@ -4217,7 +4687,6 @@ PyObject *BPY_rna_types(void)
}
self= (BPy_BaseTypeRNA *)PyObject_NEW( BPy_BaseTypeRNA, &pyrna_basetype_Type );
- self->arraydim = self->arrayoffset = 0; /* unused but better set */
/* avoid doing this lookup for every getattr */
RNA_blender_rna_pointer_create(&self->ptr);
@@ -4291,30 +4760,32 @@ StructRNA *srna_from_self(PyObject *self, const char *error_prefix)
return pyrna_struct_as_srna(self, 0, error_prefix);
}
-static int deferred_register_prop(StructRNA *srna, PyObject *item, PyObject *key, PyObject *dummy_args)
+static int deferred_register_prop(StructRNA *srna, PyObject *key, PyObject *item)
{
/* We only care about results from C which
* are for sure types, save some time with error */
- if(PyTuple_CheckExact(item) && PyTuple_GET_SIZE(item)==2) {
+ if(pyrna_is_deferred_prop(item)) {
- PyObject *py_func_ptr, *py_kw, *py_srna_cobject, *py_ret;
- PyObject *(*pyfunc)(PyObject *, PyObject *, PyObject *);
+ PyObject *py_func, *py_kw, *py_srna_cobject, *py_ret;
- if(PyArg_ParseTuple(item, "O!O!", &PyCapsule_Type, &py_func_ptr, &PyDict_Type, &py_kw)) {
+ if(PyArg_ParseTuple(item, "OO!", &py_func, &PyDict_Type, &py_kw)) {
+ PyObject *args_fake;
if(*_PyUnicode_AsString(key)=='_') {
PyErr_Format(PyExc_ValueError, "bpy_struct \"%.200s\" registration error: %.200s could not register because the property starts with an '_'\n", RNA_struct_identifier(srna), _PyUnicode_AsString(key));
- Py_DECREF(dummy_args);
return -1;
}
- pyfunc = PyCapsule_GetPointer(py_func_ptr, NULL);
py_srna_cobject = PyCapsule_New(srna, NULL, NULL);
/* not 100% nice :/, modifies the dict passed, should be ok */
PyDict_SetItemString(py_kw, "attr", key);
+
+ args_fake= PyTuple_New(1);
+ PyTuple_SET_ITEM(args_fake, 0, py_srna_cobject);
+
+ py_ret = PyObject_Call(py_func, args_fake, py_kw);
- py_ret = pyfunc(py_srna_cobject, dummy_args, py_kw);
- Py_DECREF(py_srna_cobject);
+ Py_DECREF(args_fake); /* free's py_srna_cobject too */
if(py_ret) {
Py_DECREF(py_ret);
@@ -4323,10 +4794,8 @@ static int deferred_register_prop(StructRNA *srna, PyObject *item, PyObject *key
PyErr_Print();
PyErr_Clear();
- // PyLineSpit();
+ // PyC_LineSpit();
PyErr_Format(PyExc_ValueError, "bpy_struct \"%.200s\" registration error: %.200s could not register\n", RNA_struct_identifier(srna), _PyUnicode_AsString(key));
-
- Py_DECREF(dummy_args);
return -1;
}
}
@@ -4334,7 +4803,7 @@ static int deferred_register_prop(StructRNA *srna, PyObject *item, PyObject *key
/* Since this is a class dict, ignore args that can't be passed */
/* for testing only */
- /* PyObSpit("Why doesn't this work??", item);
+ /* PyC_ObSpit("Why doesn't this work??", item);
PyErr_Print(); */
PyErr_Clear();
}
@@ -4343,44 +4812,80 @@ static int deferred_register_prop(StructRNA *srna, PyObject *item, PyObject *key
return 0;
}
-int pyrna_deferred_register_props(StructRNA *srna, PyObject *class_dict)
+static int pyrna_deferred_register_props(StructRNA *srna, PyObject *class_dict)
{
PyObject *item, *key;
PyObject *order;
- PyObject *dummy_args;
Py_ssize_t pos = 0;
int ret;
- dummy_args = PyTuple_New(0);
-
- order= PyDict_GetItemString(class_dict, "order");
-
- if(order==NULL)
- PyErr_Clear();
-
- if(order && PyList_Check(order)) {
+ if( !PyDict_CheckExact(class_dict) &&
+ (order= PyDict_GetItemString(class_dict, "order")) &&
+ PyList_CheckExact(order)
+ ) {
for(pos= 0; pos<PyList_GET_SIZE(order); pos++) {
key= PyList_GET_ITEM(order, pos);
item= PyDict_GetItem(class_dict, key);
- ret= deferred_register_prop(srna, item, key, dummy_args);
+ ret= deferred_register_prop(srna, key, item);
if(ret==-1)
break;
}
}
else {
while (PyDict_Next(class_dict, &pos, &key, &item)) {
- ret= deferred_register_prop(srna, item, key, dummy_args);
+ ret= deferred_register_prop(srna, key, item);
if(ret==-1)
break;
}
}
- Py_DECREF(dummy_args);
-
return 0;
}
+static int pyrna_deferred_register_class_recursive(StructRNA *srna, PyTypeObject *py_class)
+{
+ const int len= PyTuple_GET_SIZE(py_class->tp_bases);
+ int i, ret;
+
+ /* first scan base classes for registerable properties */
+ for(i=0; i<len; i++) {
+ PyTypeObject *py_superclass= (PyTypeObject *)PyTuple_GET_ITEM(py_class->tp_bases, i);
+
+ /* the rules for using these base classes are not clear,
+ * 'object' is ofcourse not worth looking into and
+ * existing subclasses of RNA would cause a lot more dictionary
+ * looping then is needed (SomeOperator would scan Operator.__dict__)
+ * which is harmless but not at all useful.
+ *
+ * So only scan base classes which are not subclasses if blender types.
+ * This best fits having 'mix-in' classes for operators and render engines.
+ * */
+ if( py_superclass != &PyBaseObject_Type &&
+ !PyObject_IsSubclass((PyObject *)py_superclass, (PyObject *)&pyrna_struct_Type)
+ ) {
+ ret= pyrna_deferred_register_class_recursive(srna, py_superclass);
+
+ if(ret != 0) {
+ return ret;
+ }
+ }
+ }
+
+ /* not register out own properties */
+ return pyrna_deferred_register_props(srna, py_class->tp_dict); /* getattr(..., "__dict__") returns a proxy */
+}
+
+int pyrna_deferred_register_class(StructRNA *srna, PyObject *py_class)
+{
+ /* Panels and Menus dont need this
+ * save some time and skip the checks here */
+ if(!RNA_struct_idprops_register_check(srna))
+ return 0;
+
+ return pyrna_deferred_register_class_recursive(srna, (PyTypeObject *)py_class);
+}
+
/*-------------------- Type Registration ------------------------*/
static int rna_function_arg_count(FunctionRNA *func)
@@ -4388,7 +4893,7 @@ static int rna_function_arg_count(FunctionRNA *func)
const ListBase *lb= RNA_function_defined_parameters(func);
PropertyRNA *parm;
Link *link;
- int count= 1;
+ int count= (RNA_function_flag(func) & FUNC_NO_SELF) ? 0 : 1;
for(link=lb->first; link; link=link->next) {
parm= (PropertyRNA*)link;
@@ -4409,7 +4914,7 @@ static int bpy_class_validate(PointerRNA *dummyptr, void *py_data, int *have_fun
const char *class_type= RNA_struct_identifier(srna);
PyObject *py_class= (PyObject*)py_data;
PyObject *base_class= RNA_struct_py_type_get(srna);
- PyObject *item, *fitem;
+ PyObject *item;
PyObject *py_arg_count;
int i, flag, arg_count, func_arg_count;
const char *py_class_name = ((PyTypeObject *)py_class)->tp_name; // __name__
@@ -4446,25 +4951,33 @@ static int bpy_class_validate(PointerRNA *dummyptr, void *py_data, int *have_fun
PyErr_Clear();
}
else {
- Py_DECREF(item); /* no need to keep a ref, the class owns it */
-
- if (PyMethod_Check(item))
- fitem= PyMethod_Function(item); /* py 2.x */
- else
- fitem= item; /* py 3.x */
-
- if (PyFunction_Check(fitem)==0) {
- PyErr_Format( PyExc_TypeError, "expected %.200s, %.200s class \"%.200s\" attribute to be a function", class_type, py_class_name, RNA_function_identifier(func));
- return -1;
+ Py_DECREF(item); /* no need to keep a ref, the class owns it (technically we should keep a ref but...) */
+ if(flag & FUNC_NO_SELF) {
+ if (PyMethod_Check(item)==0) {
+ PyErr_Format( PyExc_TypeError, "expected %.200s, %.200s class \"%.200s\" attribute to be a method, not a %.200s", class_type, py_class_name, RNA_function_identifier(func), Py_TYPE(item)->tp_name);
+ return -1;
+ }
+ item= ((PyMethodObject *)item)->im_func;
+ }
+ else {
+ if (PyFunction_Check(item)==0) {
+ PyErr_Format( PyExc_TypeError, "expected %.200s, %.200s class \"%.200s\" attribute to be a function, not a %.200s", class_type, py_class_name, RNA_function_identifier(func), Py_TYPE(item)->tp_name);
+ return -1;
+ }
}
func_arg_count= rna_function_arg_count(func);
if (func_arg_count >= 0) { /* -1 if we dont care*/
- py_arg_count = PyObject_GetAttrString(PyFunction_GET_CODE(fitem), "co_argcount");
+ py_arg_count = PyObject_GetAttrString(PyFunction_GET_CODE(item), "co_argcount");
arg_count = PyLong_AsSsize_t(py_arg_count);
Py_DECREF(py_arg_count);
+ /* note, the number of args we check for and the number of args we give to
+ * @classmethods are different (quirk of python), this is why rna_function_arg_count() doesn't return the value -1*/
+ if(flag & FUNC_NO_SELF)
+ func_arg_count++;
+
if (arg_count != func_arg_count) {
PyErr_Format( PyExc_AttributeError, "expected %.200s, %.200s class \"%.200s\" function to have %d args, found %d", class_type, py_class_name, RNA_function_identifier(func), func_arg_count, arg_count);
return -1;
@@ -4537,6 +5050,7 @@ static int bpy_class_call(PointerRNA *ptr, FunctionRNA *func, ParameterList *par
ParameterIterator iter;
PointerRNA funcptr;
int err= 0, i, flag, ret_len=0;
+ int is_static = RNA_function_flag(func) & FUNC_NO_SELF;
PropertyRNA *pret_single= NULL;
void *retdata_single= NULL;
@@ -4552,54 +5066,56 @@ static int bpy_class_call(PointerRNA *ptr, FunctionRNA *func, ParameterList *par
fprintf(stderr, "bpy_class_call(): unable to get python class for rna struct '%.200s'\n", RNA_struct_identifier(ptr->type));
return -1;
}
-
+
bpy_context_set(C, &gilstate);
-
- /* exception, operators store their PyObjects for re-use */
- if(ptr->data) {
- if(RNA_struct_is_a(ptr->type, &RNA_Operator)) {
- wmOperator *op= ptr->data;
- if(op->py_instance) {
- py_class_instance= op->py_instance;
- Py_INCREF(py_class_instance);
- }
- else {
- /* store the instance here once its created */
- py_class_instance_store= &op->py_instance;
+
+ if (!is_static) {
+ /* exception, operators store their PyObjects for re-use */
+ if(ptr->data) {
+ if(RNA_struct_is_a(ptr->type, &RNA_Operator)) {
+ wmOperator *op= ptr->data;
+ if(op->py_instance) {
+ py_class_instance= op->py_instance;
+ Py_INCREF(py_class_instance);
+ }
+ else {
+ /* store the instance here once its created */
+ py_class_instance_store= &op->py_instance;
+ }
}
}
- }
- /* end exception */
-
- if(py_class_instance==NULL)
- py_srna= pyrna_struct_CreatePyObject(ptr);
-
- if(py_class_instance) {
- /* special case, instance is cached */
- }
- else if(py_srna == NULL) {
- py_class_instance = NULL;
- }
- else if(py_srna == Py_None) { /* probably wont ever happen but possible */
- Py_DECREF(py_srna);
- py_class_instance = NULL;
- }
- else {
- args = PyTuple_New(1);
- PyTuple_SET_ITEM(args, 0, py_srna);
- py_class_instance= PyObject_Call(py_class, args, NULL);
- Py_DECREF(args);
-
- if(py_class_instance == NULL) {
- err= -1; /* so the error is not overridden below */
+ /* end exception */
+
+ if(py_class_instance==NULL)
+ py_srna= pyrna_struct_CreatePyObject(ptr);
+
+ if(py_class_instance) {
+ /* special case, instance is cached */
+ }
+ else if(py_srna == NULL) {
+ py_class_instance = NULL;
}
- else if(py_class_instance_store) {
- *py_class_instance_store = py_class_instance;
- Py_INCREF(py_class_instance);
+ else if(py_srna == Py_None) { /* probably wont ever happen but possible */
+ Py_DECREF(py_srna);
+ py_class_instance = NULL;
+ }
+ else {
+ args = PyTuple_New(1);
+ PyTuple_SET_ITEM(args, 0, py_srna);
+ py_class_instance= PyObject_Call(py_class, args, NULL);
+ Py_DECREF(args);
+
+ if(py_class_instance == NULL) {
+ err= -1; /* so the error is not overridden below */
+ }
+ else if(py_class_instance_store) {
+ *py_class_instance_store = py_class_instance;
+ Py_INCREF(py_class_instance);
+ }
}
}
- if (py_class_instance) { /* Initializing the class worked, now run its invoke function */
+ if (is_static || py_class_instance) { /* Initializing the class worked, now run its invoke function */
PyObject *item= PyObject_GetAttrString(py_class, RNA_function_identifier(func));
// flag= RNA_function_flag(func);
@@ -4607,12 +5123,19 @@ static int bpy_class_call(PointerRNA *ptr, FunctionRNA *func, ParameterList *par
RNA_pointer_create(NULL, &RNA_Function, func, &funcptr);
args = PyTuple_New(rna_function_arg_count(func)); /* first arg is included in 'item' */
- PyTuple_SET_ITEM(args, 0, py_class_instance);
+
+ if(is_static) {
+ i= 0;
+ }
+ else {
+ PyTuple_SET_ITEM(args, 0, py_class_instance);
+ i= 1;
+ }
RNA_parameter_list_begin(parms, &iter);
/* parse function parameters */
- for (i= 1; iter.valid; RNA_parameter_list_next(&iter)) {
+ for (; iter.valid; RNA_parameter_list_next(&iter)) {
parm= iter.parm;
flag= RNA_property_flag(parm);
@@ -4657,13 +5180,17 @@ static int bpy_class_call(PointerRNA *ptr, FunctionRNA *func, ParameterList *par
err= -1;
}
else {
- if(ret_len==1) {
+ if(ret_len==0 && ret != Py_None) {
+ PyErr_Format(PyExc_RuntimeError, "expected class %.200s, function %.200s to return None, got a %.200s type instead.", RNA_struct_identifier(ptr->type), RNA_function_identifier(func), Py_TYPE(ret)->tp_name);
+ err= -1;
+ }
+ else if(ret_len==1) {
err= pyrna_py_to_prop(&funcptr, pret_single, parms, retdata_single, ret, "calling class function:");
}
else if (ret_len > 1) {
if(PyTuple_Check(ret)==0) {
- PyErr_Format(PyExc_RuntimeError, "expected class %.200s, function %.200s to return a tuple of size %d.", RNA_struct_identifier(ptr->type), RNA_function_identifier(func), ret_len);
+ PyErr_Format(PyExc_RuntimeError, "expected class %.200s, function %.200s to return a tuple of size %d, got a %.200s type instead.", RNA_struct_identifier(ptr->type), RNA_function_identifier(func), ret_len, Py_TYPE(ret)->tp_name);
err= -1;
}
else if (PyTuple_GET_SIZE(ret) != ret_len) {
@@ -4720,7 +5247,7 @@ static void bpy_class_free(void *pyob_ptr)
if(G.f&G_DEBUG) {
if(self->ob_refcnt > 1) {
- PyObSpit("zombie class - ref should be 1", self);
+ PyC_ObSpit("zombie class - ref should be 1", self);
}
}
@@ -4802,8 +5329,7 @@ static PyObject *pyrna_basetype_register(PyObject *self, PyObject *py_class)
StructRegisterFunc reg;
StructRNA *srna;
StructRNA *srna_new;
- PyObject *item;
- const char *identifier= "";
+ const char *identifier;
if(PyDict_GetItemString(((PyTypeObject*)py_class)->tp_dict, "bl_rna")) {
PyErr_SetString(PyExc_AttributeError, "bpy.types.register(...): already registered as a subclass.");
@@ -4837,12 +5363,7 @@ static PyObject *pyrna_basetype_register(PyObject *self, PyObject *py_class)
/* call the register callback with reports & identifier */
BKE_reports_init(&reports, RPT_STORE);
- item= PyObject_GetAttrString(py_class, "__name__");
-
- if(item) {
- identifier= _PyUnicode_AsString(item);
- Py_DECREF(item); /* no need to keep a ref, the class owns it */
- }
+ identifier= ((PyTypeObject*)py_class)->tp_name;
srna_new= reg(C, &reports, py_class, identifier, bpy_class_validate, bpy_class_call, bpy_class_free);
@@ -4866,15 +5387,8 @@ static PyObject *pyrna_basetype_register(PyObject *self, PyObject *py_class)
*
* item= PyObject_GetAttrString(py_class, "__dict__");
*/
- item= ((PyTypeObject*)py_class)->tp_dict;
- if(item) {
- if(pyrna_deferred_register_props(srna_new, item)!=0) {
- return NULL;
- }
- }
- else {
- PyErr_Clear();
- }
+ if(pyrna_deferred_register_class(srna_new, py_class)!=0)
+ return NULL;
Py_RETURN_NONE;
}
@@ -4913,7 +5427,7 @@ static PyObject *pyrna_basetype_unregister(PyObject *self, PyObject *py_class)
/*if(PyDict_GetItemString(((PyTypeObject*)py_class)->tp_dict, "bl_rna")==NULL) {
PWM_cursor_wait(0);
-yErr_SetString(PyExc_ValueError, "bpy.types.unregister(): not a registered as a subclass.");
+ PyErr_SetString(PyExc_ValueError, "bpy.types.unregister(): not a registered as a subclass.");
return NULL;
}*/
diff --git a/source/blender/python/intern/bpy_rna.h b/source/blender/python/intern/bpy_rna.h
index bd9838a76d4..7f750f94242 100644
--- a/source/blender/python/intern/bpy_rna.h
+++ b/source/blender/python/intern/bpy_rna.h
@@ -30,6 +30,7 @@
#include "RNA_types.h"
#include "BKE_idprop.h"
+extern PyTypeObject pyrna_struct_meta_idprop_Type;
extern PyTypeObject pyrna_struct_Type;
extern PyTypeObject pyrna_prop_Type;
extern PyTypeObject pyrna_prop_array_Type;
@@ -55,11 +56,17 @@ typedef struct {
PyObject_HEAD /* required python macro */
PointerRNA ptr;
PropertyRNA *prop;
+} BPy_PropertyRNA;
+
+typedef struct {
+ PyObject_HEAD /* required python macro */
+ PointerRNA ptr;
+ PropertyRNA *prop;
/* Arystan: this is a hack to allow sub-item r/w access like: face.uv[n][m] */
int arraydim; /* array dimension, e.g: 0 for face.uv, 2 for face.uv[n][m], etc. */
int arrayoffset; /* array first item offset, e.g. if face.uv is [4][2], arrayoffset for face.uv[n] is 2n */
-} BPy_PropertyRNA;
+} BPy_PropertyArrayRNA;
/* cheap trick */
#define BPy_BaseTypeRNA BPy_PropertyRNA
@@ -77,7 +84,6 @@ PyObject *pyrna_struct_CreatePyObject( PointerRNA *ptr );
PyObject *pyrna_prop_CreatePyObject( PointerRNA *ptr, PropertyRNA *prop );
/* operators also need this to set args */
-int pyrna_py_to_prop(PointerRNA *ptr, PropertyRNA *prop, ParameterList *parms, void *data, PyObject *value, const char *error_prefix);
int pyrna_pydict_to_props(PointerRNA *ptr, PyObject *kw, int all_args, const char *error_prefix);
PyObject * pyrna_prop_to_py(PointerRNA *ptr, PropertyRNA *prop);
@@ -86,7 +92,7 @@ int pyrna_set_to_enum_bitfield(EnumPropertyItem *items, PyObject *value, int *r_
int pyrna_enum_value_from_id(EnumPropertyItem *item, const char *identifier, int *value, const char *error_prefix);
-int pyrna_deferred_register_props(struct StructRNA *srna, PyObject *class_dict);
+int pyrna_deferred_register_class(struct StructRNA *srna, PyObject *py_class);
/* called before stopping python */
void pyrna_alloc_types(void);
@@ -95,9 +101,10 @@ void pyrna_free_types(void);
/* primitive type conversion */
int pyrna_py_to_array(PointerRNA *ptr, PropertyRNA *prop, ParameterList *parms, char *param_data, PyObject *py, const char *error_prefix);
int pyrna_py_to_array_index(PointerRNA *ptr, PropertyRNA *prop, int arraydim, int arrayoffset, int index, PyObject *py, const char *error_prefix);
+PyObject *pyrna_array_index(PointerRNA *ptr, PropertyRNA *prop, int index);
PyObject *pyrna_py_from_array(PointerRNA *ptr, PropertyRNA *prop);
-PyObject *pyrna_py_from_array_index(BPy_PropertyRNA *self, PointerRNA *ptr, PropertyRNA *prop, int index);
+PyObject *pyrna_py_from_array_index(BPy_PropertyArrayRNA *self, PointerRNA *ptr, PropertyRNA *prop, int index);
PyObject *pyrna_math_object_from_array(PointerRNA *ptr, PropertyRNA *prop);
int pyrna_array_contains_py(PointerRNA *ptr, PropertyRNA *prop, PyObject *value);
diff --git a/source/blender/python/intern/bpy_rna_callback.c b/source/blender/python/intern/bpy_rna_callback.c
index 2404442dc18..b2a7511f998 100644
--- a/source/blender/python/intern/bpy_rna_callback.c
+++ b/source/blender/python/intern/bpy_rna_callback.c
@@ -64,19 +64,28 @@ PyObject *pyrna_callback_add(BPy_StructRNA *self, PyObject *args)
char *cb_event_str= NULL;
int cb_event;
- if (!PyArg_ParseTuple(args, "OO|s:bpy_struct.callback_add", &cb_func, &cb_args, &cb_event_str))
+ if (!PyArg_ParseTuple(args, "OO!|s:bpy_struct.callback_add", &cb_func, &PyTuple_Type, &cb_args, &cb_event_str))
return NULL;
+
+ if(!PyCallable_Check(cb_func)) {
+ PyErr_SetString(PyExc_TypeError, "callback_add(): first argument isn't callable");
+ return NULL;
+ }
if(RNA_struct_is_a(self->ptr.type, &RNA_Region)) {
-
- static EnumPropertyItem region_draw_mode_items[] = {
- {REGION_DRAW_POST_VIEW, "POST_VIEW", 0, "Pose View", ""},
- {REGION_DRAW_POST_PIXEL, "POST_PIXEL", 0, "Post Pixel", ""},
- {REGION_DRAW_PRE_VIEW, "PRE_VIEW", 0, "Pre View", ""},
- {0, NULL, 0, NULL, NULL}};
-
- if(pyrna_enum_value_from_id(region_draw_mode_items, cb_event_str, &cb_event, "bpy_struct.callback_add()") < 0)
- return NULL;
+ if(cb_event_str) {
+ static EnumPropertyItem region_draw_mode_items[] = {
+ {REGION_DRAW_POST_PIXEL, "POST_PIXEL", 0, "Post Pixel", ""},
+ {REGION_DRAW_POST_VIEW, "POST_VIEW", 0, "Post View", ""},
+ {REGION_DRAW_PRE_VIEW, "PRE_VIEW", 0, "Pre View", ""},
+ {0, NULL, 0, NULL, NULL}};
+
+ if(pyrna_enum_value_from_id(region_draw_mode_items, cb_event_str, &cb_event, "bpy_struct.callback_add()") < 0)
+ return NULL;
+ }
+ else {
+ cb_event= REGION_DRAW_POST_PIXEL;
+ }
handle= ED_region_draw_cb_activate(((ARegion *)self->ptr.data)->type, cb_region_draw, (void *)args, cb_event);
Py_INCREF(args);
diff --git a/source/blender/python/intern/bpy_util.c b/source/blender/python/intern/bpy_util.c
index 38462d1b176..1a2d7b297b6 100644
--- a/source/blender/python/intern/bpy_util.c
+++ b/source/blender/python/intern/bpy_util.c
@@ -26,116 +26,14 @@
#include "BLI_dynstr.h"
#include "MEM_guardedalloc.h"
#include "BKE_report.h"
+#include "BKE_context.h"
+#include "../generic/py_capi_utils.h"
-#include "BKE_context.h"
bContext* __py_context = NULL;
bContext* BPy_GetContext(void) { return __py_context; };
void BPy_SetContext(bContext *C) { __py_context= C; };
-/* for debugging */
-void PyObSpit(char *name, PyObject *var) {
- fprintf(stderr, "<%s> : ", name);
- if (var==NULL) {
- fprintf(stderr, "<NIL>");
- }
- else {
- PyObject_Print(var, stderr, 0);
- fprintf(stderr, " ref:%d ", (int)var->ob_refcnt);
- fprintf(stderr, " ptr:%p", (void *)var);
-
- fprintf(stderr, " type:");
- if(Py_TYPE(var))
- fprintf(stderr, "%s", Py_TYPE(var)->tp_name);
- else
- fprintf(stderr, "<NIL>");
- }
- fprintf(stderr, "\n");
-}
-
-void PyLineSpit(void) {
- char *filename;
- int lineno;
-
- PyErr_Clear();
- BPY_getFileAndNum(&filename, &lineno);
-
- fprintf(stderr, "%s:%d\n", filename, lineno);
-}
-
-void BPY_getFileAndNum(char **filename, int *lineno)
-{
- PyObject *getframe, *frame;
- PyObject *f_lineno= NULL, *co_filename= NULL;
-
- if (filename) *filename= NULL;
- if (lineno) *lineno = -1;
-
- getframe = PySys_GetObject("_getframe"); // borrowed
- if (getframe==NULL) {
- PyErr_Clear();
- return;
- }
-
- frame = PyObject_CallObject(getframe, NULL);
- if (frame==NULL) {
- PyErr_Clear();
- return;
- }
-
- if (filename) {
- co_filename= PyObject_GetAttrStringArgs(frame, 1, "f_code", "co_filename");
- if (co_filename==NULL) {
- PyErr_SetString(PyExc_SystemError, "Could not access sys._getframe().f_code.co_filename");
- Py_DECREF(frame);
- return;
- }
-
- *filename = _PyUnicode_AsString(co_filename);
- Py_DECREF(co_filename);
- }
-
- if (lineno) {
- f_lineno= PyObject_GetAttrString(frame, "f_lineno");
- if (f_lineno==NULL) {
- PyErr_SetString(PyExc_SystemError, "Could not access sys._getframe().f_lineno");
- Py_DECREF(frame);
- return;
- }
-
- *lineno = (int)PyLong_AsSsize_t(f_lineno);
- Py_DECREF(f_lineno);
- }
-
- Py_DECREF(frame);
-}
-
-/* Would be nice if python had this built in */
-PyObject *PyObject_GetAttrStringArgs(PyObject *o, Py_ssize_t n, ...)
-{
- Py_ssize_t i;
- PyObject *item= o;
- char *attr;
-
- va_list vargs;
-
- va_start(vargs, n);
- for (i=0; i<n; i++) {
- attr = va_arg(vargs, char *);
- item = PyObject_GetAttrString(item, attr);
-
- if (item)
- Py_DECREF(item);
- else /* python will set the error value here */
- break;
-
- }
- va_end(vargs);
-
- Py_XINCREF(item); /* final value has is increfed, to match PyObject_GetAttrString */
- return item;
-}
-
int BPY_class_validate(const char *class_type, PyObject *class, PyObject *base_class, BPY_class_attr_check* class_attrs, PyObject **py_class_attrs)
{
PyObject *item, *fitem;
@@ -224,75 +122,6 @@ int BPY_class_validate(const char *class_type, PyObject *class, PyObject *base_c
-/* returns the exception string as a new PyUnicode object, depends on external StringIO module */
-PyObject *BPY_exception_buffer(void)
-{
- PyObject *stdout_backup = PySys_GetObject("stdout"); /* borrowed */
- PyObject *stderr_backup = PySys_GetObject("stderr"); /* borrowed */
- PyObject *string_io = NULL;
- PyObject *string_io_buf = NULL;
- PyObject *string_io_mod= NULL;
- PyObject *string_io_getvalue= NULL;
-
- PyObject *error_type, *error_value, *error_traceback;
-
- if (!PyErr_Occurred())
- return NULL;
-
- PyErr_Fetch(&error_type, &error_value, &error_traceback);
-
- PyErr_Clear();
-
- /* import io
- * string_io = io.StringIO()
- */
-
- if(! (string_io_mod= PyImport_ImportModule("io")) ) {
- goto error_cleanup;
- } else if (! (string_io = PyObject_CallMethod(string_io_mod, "StringIO", NULL))) {
- goto error_cleanup;
- } else if (! (string_io_getvalue= PyObject_GetAttrString(string_io, "getvalue"))) {
- goto error_cleanup;
- }
-
- Py_INCREF(stdout_backup); // since these were borrowed we dont want them freed when replaced.
- Py_INCREF(stderr_backup);
-
- PySys_SetObject("stdout", string_io); // both of these are free'd when restoring
- PySys_SetObject("stderr", string_io);
-
- PyErr_Restore(error_type, error_value, error_traceback);
- PyErr_Print(); /* print the error */
- PyErr_Clear();
-
- string_io_buf = PyObject_CallObject(string_io_getvalue, NULL);
-
- PySys_SetObject("stdout", stdout_backup);
- PySys_SetObject("stderr", stderr_backup);
-
- Py_DECREF(stdout_backup); /* now sys owns the ref again */
- Py_DECREF(stderr_backup);
-
- Py_DECREF(string_io_mod);
- Py_DECREF(string_io_getvalue);
- Py_DECREF(string_io); /* free the original reference */
-
- PyErr_Clear();
- return string_io_buf;
-
-
-error_cleanup:
- /* could not import the module so print the error and close */
- Py_XDECREF(string_io_mod);
- Py_XDECREF(string_io);
-
- PyErr_Restore(error_type, error_value, error_traceback);
- PyErr_Print(); /* print the error */
- PyErr_Clear();
-
- return NULL;
-}
-
char *BPy_enum_as_string(EnumPropertyItem *item)
{
DynStr *dynstr= BLI_dynstr_new();
@@ -330,7 +159,7 @@ int BPy_errors_to_report(ReportList *reports)
PyObject *pystring_format= NULL; // workaround, see below
char *cstring;
- char *filename;
+ const char *filename;
int lineno;
if (!PyErr_Occurred())
@@ -343,14 +172,14 @@ int BPy_errors_to_report(ReportList *reports)
return 1;
}
- pystring= BPY_exception_buffer();
+ pystring= PyC_ExceptionBuffer();
if(pystring==NULL) {
BKE_report(reports, RPT_ERROR, "unknown py-exception, could not convert");
return 0;
}
- BPY_getFileAndNum(&filename, &lineno);
+ PyC_FileAndNum(&filename, &lineno);
if(filename==NULL)
filename= "<unknown location>";
@@ -372,7 +201,7 @@ int BPy_errors_to_report(ReportList *reports)
}
/* array utility function */
-int BPyAsPrimitiveArray(void *array, PyObject *value, int length, PyTypeObject *type, char *error_prefix)
+int PyC_AsArray(void *array, PyObject *value, int length, PyTypeObject *type, char *error_prefix)
{
PyObject *value_fast;
int value_len;
diff --git a/source/blender/python/intern/bpy_util.h b/source/blender/python/intern/bpy_util.h
index e7e7bb09419..ae215725087 100644
--- a/source/blender/python/intern/bpy_util.h
+++ b/source/blender/python/intern/bpy_util.h
@@ -36,17 +36,6 @@
struct EnumPropertyItem;
struct ReportList;
-void PyObSpit(char *name, PyObject *var);
-void PyLineSpit(void);
-void BPY_getFileAndNum(char **filename, int *lineno);
-
-PyObject *BPY_exception_buffer(void);
-
-/* own python like utility function */
-PyObject *PyObject_GetAttrStringArgs(PyObject *o, Py_ssize_t n, ...);
-
-
-
/* Class type checking, use for checking classes can be added as operators, panels etc */
typedef struct BPY_class_attr_check {
const char *name; /* name of the class attribute */
@@ -77,6 +66,4 @@ void BPy_SetContext(struct bContext *C);
extern void bpy_context_set(struct bContext *C, PyGILState_STATE *gilstate);
extern void bpy_context_clear(struct bContext *C, PyGILState_STATE *gilstate);
-
-int BPyAsPrimitiveArray(void *array, PyObject *value, int length, PyTypeObject *type, char *error_prefix);
#endif
diff --git a/source/blender/quicktime/CMakeLists.txt b/source/blender/quicktime/CMakeLists.txt
index 63b6558e997..8d993cbb7d6 100644
--- a/source/blender/quicktime/CMakeLists.txt
+++ b/source/blender/quicktime/CMakeLists.txt
@@ -35,7 +35,6 @@ SET(INC
../quicktime
../makesdna
../makesrna
- ../../../intern/guardedalloc
../blenlib
../blenkernel
../avi
@@ -46,9 +45,10 @@ SET(INC
../include
../windowmanager
../../../intern/audaspace/intern
+ ../../../intern/guardedalloc
+ ${QUICKTIME_INC}
)
-SET(INC ${INC} ${QUICKTIME_INC})
ADD_DEFINITIONS(-DWITH_QUICKTIME)
BLENDERLIB(bf_quicktime "${SRC}" "${INC}")
diff --git a/source/blender/quicktime/Makefile b/source/blender/quicktime/Makefile
index 3d8ab2f0adc..d0055780556 100644
--- a/source/blender/quicktime/Makefile
+++ b/source/blender/quicktime/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
# All rights reserved.
diff --git a/source/blender/quicktime/SConscript b/source/blender/quicktime/SConscript
index c8aeb70aa57..24dfab13fd9 100644
--- a/source/blender/quicktime/SConscript
+++ b/source/blender/quicktime/SConscript
@@ -11,20 +11,20 @@ else:
incs = ['.',
- '../quicktime',
- '../makesdna',
- '../makesrna',
- '../windowmanager',
- '#/intern/guardedalloc',
- '../blenlib',
- '../blenkernel',
- '../avi',
- '../imbuf',
- '../imbuf/intern',
- '../blenloader',
- '../render/extern/include',
- '../editors/include',
- '#/intern/audaspace/intern']
+ '../quicktime',
+ '../makesdna',
+ '../makesrna',
+ '../windowmanager',
+ '#/intern/guardedalloc',
+ '../blenlib',
+ '../blenkernel',
+ '../avi',
+ '../imbuf',
+ '../imbuf/intern',
+ '../blenloader',
+ '../render/extern/include',
+ '../editors/include',
+ '#/intern/audaspace/intern']
incs.append(env['BF_QUICKTIME_INC'])
@@ -34,6 +34,6 @@ priorities = [200,235]
defs=['WITH_QUICKTIME']
if env['WITH_GHOST_COCOA']:
- defs.append('GHOST_COCOA')
+ defs.append('GHOST_COCOA')
env.BlenderLib ('bf_quicktime', sources=source_files, includes=incs, defines=defs, libtype=types, priority=priorities)
diff --git a/source/blender/quicktime/apple/Makefile b/source/blender/quicktime/apple/Makefile
index 88eea6ea002..cdb00ab9ef2 100644
--- a/source/blender/quicktime/apple/Makefile
+++ b/source/blender/quicktime/apple/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
# All rights reserved.
diff --git a/source/blender/quicktime/apple/qtkit_import.m b/source/blender/quicktime/apple/qtkit_import.m
index 80b97066b61..41c4e0cc5a3 100644
--- a/source/blender/quicktime/apple/qtkit_import.m
+++ b/source/blender/quicktime/apple/qtkit_import.m
@@ -30,6 +30,8 @@
*/
#ifdef WITH_QUICKTIME
+#include "MEM_guardedalloc.h"
+
#include "IMB_anim.h"
#include "BLO_sys_types.h"
#include "BKE_global.h"
@@ -113,6 +115,8 @@ int anim_is_quicktime (char *name)
void free_anim_quicktime (struct anim *anim) {
+ NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
+
if (anim == NULL) return;
if (anim->qtime == NULL) return;
@@ -122,11 +126,15 @@ void free_anim_quicktime (struct anim *anim) {
[anim->qtime->media release];
[anim->qtime->movie release];
+ [QTMovie exitQTKitOnThread];
+
if(anim->qtime) MEM_freeN (anim->qtime);
anim->qtime = NULL;
anim->duration = 0;
+
+ [pool drain];
}
static ImBuf * nsImageToiBuf(NSImage *sourceImage, int width, int height)
@@ -302,6 +310,8 @@ int startquicktime (struct anim *anim)
pool = [[NSAutoreleasePool alloc] init];
+ [QTMovie enterQTKitOnThread];
+
attributes = [NSDictionary dictionaryWithObjectsAndKeys:
[NSString stringWithCString:anim->name
encoding:[NSString defaultCStringEncoding]], QTMovieFileNameAttribute,
@@ -314,6 +324,7 @@ int startquicktime (struct anim *anim)
if(QTIME_DEBUG) printf("qt: bad movie %s\n", anim->name);
MEM_freeN(anim->qtime);
if(QTIME_DEBUG) printf("qt: can't load %s\n", anim->name);
+ [QTMovie exitQTKitOnThread];
[pool drain];
return -1;
}
@@ -328,6 +339,7 @@ int startquicktime (struct anim *anim)
[anim->qtime->movie release];
MEM_freeN(anim->qtime);
if(QTIME_DEBUG) printf("qt: can't load %s\n", anim->name);
+ [QTMovie exitQTKitOnThread];
[pool drain];
return -1;
}
diff --git a/source/blender/quicktime/apple/quicktime_import.c b/source/blender/quicktime/apple/quicktime_import.c
index 75f77dccbfa..f9793f04b88 100644
--- a/source/blender/quicktime/apple/quicktime_import.c
+++ b/source/blender/quicktime/apple/quicktime_import.c
@@ -32,6 +32,7 @@
#if defined(_WIN32) || defined(__APPLE__)
#ifndef USE_QTKIT
+#include "MEM_guardedalloc.h"
#include "IMB_anim.h"
#include "BLO_sys_types.h"
#include "BKE_global.h"
@@ -88,16 +89,22 @@ typedef struct _QuicktimeMovie {
void quicktime_init(void)
{
+ OSErr nerr;
#ifdef _WIN32
- if (InitializeQTML(0) != noErr)
+ QTLoadLibrary("QTCF.dll");
+ nerr = InitializeQTML(0);
+ if (nerr != noErr) {
G.have_quicktime = FALSE;
+ printf("Error initializing quicktime\n");
+ }
else
G.have_quicktime = TRUE;
#endif /* _WIN32 */
/* Initialize QuickTime */
#if defined(_WIN32) || defined (__APPLE__)
- if (EnterMovies() != noErr)
+ nerr = EnterMovies();
+ if (nerr != noErr)
G.have_quicktime = FALSE;
else
#endif /* _WIN32 || __APPLE__ */
@@ -317,7 +324,9 @@ ImBuf * qtime_fetchibuf (struct anim *anim, int position)
ImBuf *ibuf = NULL;
unsigned int *rect;
+#ifdef __APPLE__
unsigned char *from, *to;
+#endif
#ifdef _WIN32
unsigned char *crect;
#endif
@@ -373,7 +382,7 @@ ImBuf * qtime_fetchibuf (struct anim *anim, int position)
}
#endif
- ibuf->profile == IB_PROFILE_SRGB;
+ ibuf->profile = IB_PROFILE_SRGB;
IMB_flipy(ibuf);
return ibuf;
diff --git a/source/blender/quicktime/quicktime_import.h b/source/blender/quicktime/quicktime_import.h
index 1fccc776620..150aa07b1c2 100644
--- a/source/blender/quicktime/quicktime_import.h
+++ b/source/blender/quicktime/quicktime_import.h
@@ -72,4 +72,4 @@ ImBuf *qtime_fetchibuf (struct anim *anim, int position);
int imb_is_a_quicktime (char *name);
ImBuf *imb_quicktime_decode(unsigned char *mem, int size, int flags);
-#endif // __QUICKTIME_IMP_H__ \ No newline at end of file
+#endif // __QUICKTIME_IMP_H__
diff --git a/source/blender/readblenfile/Makefile b/source/blender/readblenfile/Makefile
index d291cb84315..f0a46d077a8 100644
--- a/source/blender/readblenfile/Makefile
+++ b/source/blender/readblenfile/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
# All rights reserved.
diff --git a/source/blender/readblenfile/intern/BLO_readblenfile.c b/source/blender/readblenfile/intern/BLO_readblenfile.c
index 7c876c96a86..dfcdaf756f7 100644
--- a/source/blender/readblenfile/intern/BLO_readblenfile.c
+++ b/source/blender/readblenfile/intern/BLO_readblenfile.c
@@ -132,7 +132,8 @@ blo_read_runtime(
ReportList *reports)
{
BlendFileData *bfd= NULL;
- int fd, actualsize, datastart;
+ size_t actualsize;
+ int fd, datastart;
char buf[8];
fd= open(path, O_BINARY|O_RDONLY, 0);
diff --git a/source/blender/readblenfile/intern/Makefile b/source/blender/readblenfile/intern/Makefile
index 54316903f23..dc59ca3b9ed 100644
--- a/source/blender/readblenfile/intern/Makefile
+++ b/source/blender/readblenfile/intern/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
# All rights reserved.
diff --git a/source/blender/readblenfile/stub/Makefile b/source/blender/readblenfile/stub/Makefile
index a2b0fe88f6a..94a55407418 100644
--- a/source/blender/readblenfile/stub/Makefile
+++ b/source/blender/readblenfile/stub/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
# All rights reserved.
diff --git a/source/blender/readblenfile/test/Makefile b/source/blender/readblenfile/test/Makefile
index 50f50f5c54c..cc294ac60b3 100644
--- a/source/blender/readblenfile/test/Makefile
+++ b/source/blender/readblenfile/test/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
# All rights reserved.
diff --git a/source/blender/render/CMakeLists.txt b/source/blender/render/CMakeLists.txt
index 2047ab29d24..8e0dbb457e8 100644
--- a/source/blender/render/CMakeLists.txt
+++ b/source/blender/render/CMakeLists.txt
@@ -27,15 +27,22 @@
FILE(GLOB SRC intern/source/*.c intern/raytrace/*.cpp)
SET(INC
- intern/include ../../../intern/guardedalloc ../blenlib ../makesdna
- extern/include ../blenkernel ../imbuf
- ../include ../../kernel/gen_messaging ../blenloader
- ../../../intern/smoke/extern
+ intern/include
+ extern/include
+ ../blenlib
+ ../blenloader
+ ../makesdna
../makesrna
+ ../blenkernel
+ ../imbuf
+ ../include
+ ../../kernel/gen_messaging
+ ../../../intern/smoke/extern
+ ../../../intern/guardedalloc
)
IF(WIN32)
- SET(INC ${INC} ${PTHREADS_INC})
+ LIST(APPEND INC ${PTHREADS_INC})
ENDIF(WIN32)
IF(WITH_IMAGE_OPENEXR)
@@ -43,7 +50,7 @@ IF(WITH_IMAGE_OPENEXR)
ENDIF(WITH_IMAGE_OPENEXR)
IF(WITH_QUICKTIME)
- SET(INC ${INC} ../quicktime ${QUICKTIME_INC})
+ LIST(APPEND INC ../quicktime ${QUICKTIME_INC})
ADD_DEFINITIONS(-DWITH_QUICKTIME)
ENDIF(WITH_QUICKTIME)
@@ -54,4 +61,4 @@ IF(APPLE)
ENDIF(CMAKE_OSX_ARCHITECTURES MATCHES "i386" OR CMAKE_OSX_ARCHITECTURES MATCHES "x86_64")
ENDIF(APPLE)
-BLENDERLIB_NOLIST(blender_render "${SRC}" "${INC}")
+BLENDERLIB_NOLIST(bf_render "${SRC}" "${INC}")
diff --git a/source/blender/render/Makefile b/source/blender/render/Makefile
index 11ddbad0b94..7be54ac359f 100644
--- a/source/blender/render/Makefile
+++ b/source/blender/render/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
# All rights reserved.
diff --git a/source/blender/render/extern/include/RE_pipeline.h b/source/blender/render/extern/include/RE_pipeline.h
index af7f3fcf387..b12e45ecd9c 100644
--- a/source/blender/render/extern/include/RE_pipeline.h
+++ b/source/blender/render/extern/include/RE_pipeline.h
@@ -193,7 +193,7 @@ void RE_SetPixelSize(struct Render *re, float pixsize);
void RE_SetView (struct Render *re, float mat[][4]);
/* make or free the dbase */
-void RE_Database_FromScene(struct Render *re, struct Scene *scene, unsigned int lay, int use_camera_view);
+void RE_Database_FromScene(struct Render *re, struct Main *bmain, struct Scene *scene, unsigned int lay, int use_camera_view);
void RE_Database_Free (struct Render *re);
/* project dbase again, when viewplane/perspective changed */
diff --git a/source/blender/render/extern/include/RE_render_ext.h b/source/blender/render/extern/include/RE_render_ext.h
index 98720897e8e..b04f7247e2a 100644
--- a/source/blender/render/extern/include/RE_render_ext.h
+++ b/source/blender/render/extern/include/RE_render_ext.h
@@ -51,7 +51,7 @@ struct ImBuf;
//void RE_zbufferall_radio(struct RadView *vw, struct RNode **rg_elem, int rg_totelem, struct Render *re);
/* particle.c, effect.c, editmesh_modes.c and brush.c, returns 1 if rgb, 0 otherwise */
-int externtex(struct MTex *mtex, float *vec, float *tin, float *tr, float *tg, float *tb, float *ta);
+int externtex(struct MTex *mtex, float *vec, float *tin, float *tr, float *tg, float *tb, float *ta, const int thread);
/* particle.c */
void texture_rgb_blend(float *in, float *tex, float *out, float fact, float facg, int blendtype);
diff --git a/source/blender/render/intern/Makefile b/source/blender/render/intern/Makefile
index 4fce37df175..4043902a40f 100644
--- a/source/blender/render/intern/Makefile
+++ b/source/blender/render/intern/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
# All rights reserved.
diff --git a/source/blender/render/intern/include/renderdatabase.h b/source/blender/render/intern/include/renderdatabase.h
index 76e7fe7b4f3..4c80616665d 100644
--- a/source/blender/render/intern/include/renderdatabase.h
+++ b/source/blender/render/intern/include/renderdatabase.h
@@ -34,6 +34,7 @@ struct Object;
struct VlakRen;
struct VertRen;
struct HaloRen;
+struct Main;
struct Material;
struct Render;
struct MCol;
@@ -137,7 +138,7 @@ void RE_set_customdata_names(struct ObjectRen *obr, struct CustomData *data);
/* convertblender.c */
void init_render_world(Render *re);
-void RE_Database_FromScene_Vectors(Render *re, struct Scene *sce, unsigned int lay);
+void RE_Database_FromScene_Vectors(Render *re, struct Main *bmain, struct Scene *sce, unsigned int lay);
#endif /* RENDERDATABASE_H */
diff --git a/source/blender/render/intern/raytrace/bvh.h b/source/blender/render/intern/raytrace/bvh.h
index e3efb90ec04..133a3d4a005 100644
--- a/source/blender/render/intern/raytrace/bvh.h
+++ b/source/blender/render/intern/raytrace/bvh.h
@@ -28,7 +28,6 @@
*/
#include "rayobject.h"
#include "raycounter.h"
-#include "MEM_guardedalloc.h"
#include "rayobject_rtbuild.h"
#include "rayobject_hint.h"
diff --git a/source/blender/render/intern/raytrace/rayobject_qbvh.cpp b/source/blender/render/intern/raytrace/rayobject_qbvh.cpp
index afffdd44f1f..c510af540db 100644
--- a/source/blender/render/intern/raytrace/rayobject_qbvh.cpp
+++ b/source/blender/render/intern/raytrace/rayobject_qbvh.cpp
@@ -26,6 +26,7 @@
*
* ***** END GPL LICENSE BLOCK *****
*/
+#include "MEM_guardedalloc.h"
#include "vbvh.h"
#include "svbvh.h"
#include "reorganize.h"
diff --git a/source/blender/render/intern/raytrace/rayobject_svbvh.cpp b/source/blender/render/intern/raytrace/rayobject_svbvh.cpp
index 389512ce469..647c5771e4f 100644
--- a/source/blender/render/intern/raytrace/rayobject_svbvh.cpp
+++ b/source/blender/render/intern/raytrace/rayobject_svbvh.cpp
@@ -26,6 +26,8 @@
*
* ***** END GPL LICENSE BLOCK *****
*/
+#include "MEM_guardedalloc.h"
+
#include "vbvh.h"
#include "svbvh.h"
#include "reorganize.h"
diff --git a/source/blender/render/intern/raytrace/reorganize.h b/source/blender/render/intern/raytrace/reorganize.h
index 7ef7296945c..1d923c92d6f 100644
--- a/source/blender/render/intern/raytrace/reorganize.h
+++ b/source/blender/render/intern/raytrace/reorganize.h
@@ -35,6 +35,7 @@
#include "BKE_global.h"
#ifdef _WIN32
+#undef INFINITY
#define INFINITY FLT_MAX // in mingw math.h: (1.0F/0.0F). This generates compile error, though.
#endif
diff --git a/source/blender/render/intern/source/convertblender.c b/source/blender/render/intern/source/convertblender.c
index e17e3a3c600..149890f830d 100644
--- a/source/blender/render/intern/source/convertblender.c
+++ b/source/blender/render/intern/source/convertblender.c
@@ -1528,6 +1528,10 @@ static int render_new_particle_system(Render *re, ObjectRen *obr, ParticleSystem
totchild=psys->totchild;
+ /* can happen for disconnected/global hair */
+ if(part->type==PART_HAIR && !psys->childcache)
+ totchild= 0;
+
if(G.rendering == 0) { /* preview render */
totchild = (int)((float)totchild * (float)part->disp / 100.0f);
}
@@ -4885,13 +4889,14 @@ static void database_init_objects(Render *re, unsigned int renderlay, int nolamp
}
/* used to be 'rotate scene' */
-void RE_Database_FromScene(Render *re, Scene *scene, unsigned int lay, int use_camera_view)
+void RE_Database_FromScene(Render *re, Main *bmain, Scene *scene, unsigned int lay, int use_camera_view)
{
extern int slurph_opt; /* key.c */
Scene *sce;
float mat[4][4];
float amb[3];
+ re->main= bmain;
re->scene= scene;
re->lay= lay;
@@ -5429,7 +5434,7 @@ static void free_dbase_object_vectors(ListBase *lb)
BLI_freelistN(lb);
}
-void RE_Database_FromScene_Vectors(Render *re, Scene *sce, unsigned int lay)
+void RE_Database_FromScene_Vectors(Render *re, Main *bmain, Scene *sce, unsigned int lay)
{
ObjectInstanceRen *obi, *oldobi;
StrandSurface *mesh;
@@ -5471,7 +5476,7 @@ void RE_Database_FromScene_Vectors(Render *re, Scene *sce, unsigned int lay)
re->strandsurface= strandsurface;
if(!re->test_break(re->tbh))
- RE_Database_FromScene(re, sce, lay, 1);
+ RE_Database_FromScene(re, bmain, sce, lay, 1);
if(!re->test_break(re->tbh)) {
for(step= 0; step<2; step++) {
diff --git a/source/blender/render/intern/source/imagetexture.c b/source/blender/render/intern/source/imagetexture.c
index f08529b3f2c..f78031c9030 100644
--- a/source/blender/render/intern/source/imagetexture.c
+++ b/source/blender/render/intern/source/imagetexture.c
@@ -1784,4 +1784,4 @@ void ibuf_sample(ImBuf *ibuf, float fx, float fy, float dx, float dy, float *res
result[1]= texres.tg;
result[2]= texres.tb;
result[3]= texres.ta;
-} \ No newline at end of file
+}
diff --git a/source/blender/render/intern/source/pipeline.c b/source/blender/render/intern/source/pipeline.c
index 6c6e200a74e..44c6a6f008f 100644
--- a/source/blender/render/intern/source/pipeline.c
+++ b/source/blender/render/intern/source/pipeline.c
@@ -39,6 +39,8 @@
#include "DNA_sequence_types.h"
#include "DNA_userdef_types.h"
+#include "MEM_guardedalloc.h"
+
#include "BKE_utildefines.h"
#include "BKE_global.h"
#include "BKE_image.h"
@@ -52,8 +54,6 @@
#include "BKE_pointcache.h"
#include "BKE_animsys.h" /* <------ should this be here?, needed for sequencer update */
-#include "MEM_guardedalloc.h"
-
#include "BLI_math.h"
#include "BLI_blenlib.h"
#include "BLI_rand.h"
@@ -1768,9 +1768,9 @@ static void do_render_3d(Render *re)
/* make render verts/faces/halos/lamps */
if(render_scene_needs_vector(re))
- RE_Database_FromScene_Vectors(re, re->scene, re->lay);
+ RE_Database_FromScene_Vectors(re, re->main, re->scene, re->lay);
else
- RE_Database_FromScene(re, re->scene, re->lay, 1);
+ RE_Database_FromScene(re, re->main, re->scene, re->lay, 1);
threaded_tile_processor(re);
@@ -2142,6 +2142,7 @@ static void render_scene(Render *re, Scene *sce, int cfra)
RE_InitState(resc, re, &sce->r, NULL, winx, winy, &re->disprect);
/* still unsure entity this... */
+ resc->main= re->main;
resc->scene= sce;
resc->lay= sce->lay;
@@ -2462,7 +2463,7 @@ static void do_render_seq(Render * re)
recurs_depth++;
- ibuf= give_ibuf_seq(re->scene, rr->rectx, rr->recty, cfra, 0, 100.0);
+ ibuf= give_ibuf_seq(re->main, re->scene, rr->rectx, rr->recty, cfra, 0, 100.0);
recurs_depth--;
@@ -2472,20 +2473,21 @@ static void do_render_seq(Render * re)
if(ibuf->rect_float) {
if (!rr->rectf)
rr->rectf= MEM_mallocN(4*sizeof(float)*rr->rectx*rr->recty, "render_seq rectf");
-
- memcpy(rr->rectf, ibuf->rect_float, 4*sizeof(float)*rr->rectx*rr->recty);
-
- /* sequencer float buffer is not in linear color space, convert
- * should always be true, use a fake ibuf for the colorspace conversion */
- if(ibuf->profile != IB_PROFILE_LINEAR_RGB) {
- ImBuf ibuf_dummy;
- memset(&ibuf_dummy, 0, sizeof(ImBuf));
- ibuf_dummy.profile= ibuf->profile;
- ibuf_dummy.x= rr->rectx;
- ibuf_dummy.y= rr->recty;
- ibuf_dummy.rect_float= rr->rectf;
- /* only touch the rr->rectf */
- IMB_convert_profile(&ibuf_dummy, IB_PROFILE_LINEAR_RGB);
+
+ /* color management: when off ensure rectf is non-lin, since thats what the internal
+ * render engine delivers */
+ if(re->r.color_mgt_flag & R_COLOR_MANAGEMENT) {
+ if(ibuf->profile == IB_PROFILE_LINEAR_RGB)
+ memcpy(rr->rectf, ibuf->rect_float, 4*sizeof(float)*rr->rectx*rr->recty);
+ else
+ srgb_to_linearrgb_rgba_rgba_buf(rr->rectf, ibuf->rect_float, rr->rectx*rr->recty);
+
+ }
+ else {
+ if(ibuf->profile != IB_PROFILE_LINEAR_RGB)
+ memcpy(rr->rectf, ibuf->rect_float, 4*sizeof(float)*rr->rectx*rr->recty);
+ else
+ linearrgb_to_srgb_rgba_rgba_buf(rr->rectf, ibuf->rect_float, rr->rectx*rr->recty);
}
/* TSK! Since sequence render doesn't free the *rr render result, the old rect32
diff --git a/source/blender/render/intern/source/pointdensity.c b/source/blender/render/intern/source/pointdensity.c
index a09c16b7ed9..1ca1ea10273 100644
--- a/source/blender/render/intern/source/pointdensity.c
+++ b/source/blender/render/intern/source/pointdensity.c
@@ -248,7 +248,8 @@ static void cache_pointdensity(Render *re, Tex *tex)
}
else if (pd->source == TEX_PD_OBJECT) {
Object *ob = pd->object;
- if (ob) pointdensity_cache_object(re, pd, ob);
+ if (ob && ob->type == OB_MESH)
+ pointdensity_cache_object(re, pd, ob);
}
}
diff --git a/source/blender/render/intern/source/rendercore.c b/source/blender/render/intern/source/rendercore.c
index 8e1a959abef..bd4af52cd91 100644
--- a/source/blender/render/intern/source/rendercore.c
+++ b/source/blender/render/intern/source/rendercore.c
@@ -2562,10 +2562,9 @@ static void shade_tface(BakeShade *bs)
if (bs->usemask) {
if (bs->ibuf->userdata==NULL) {
BLI_lock_thread(LOCK_CUSTOM1);
- if (bs->ibuf->userdata==NULL) { /* since the thread was locked, its possible another thread alloced the value */
+ if (bs->ibuf->userdata==NULL) /* since the thread was locked, its possible another thread alloced the value */
bs->ibuf->userdata = (void *)MEM_callocN(sizeof(char)*bs->rectx*bs->recty, "BakeMask");
- bs->rect_mask= (char *)bs->ibuf->userdata;
- }
+ bs->rect_mask= (char *)bs->ibuf->userdata;
BLI_unlock_thread(LOCK_CUSTOM1);
} else {
bs->rect_mask= (char *)bs->ibuf->userdata;
diff --git a/source/blender/render/intern/source/renderdatabase.c b/source/blender/render/intern/source/renderdatabase.c
index ce55935d392..91d58b7943e 100644
--- a/source/blender/render/intern/source/renderdatabase.c
+++ b/source/blender/render/intern/source/renderdatabase.c
@@ -1019,7 +1019,7 @@ HaloRen *RE_inithalo(Render *re, ObjectRen *obr, Material *ma, float *vec, f
}
}
- externtex(mtex, texvec, &tin, &tr, &tg, &tb, &ta);
+ externtex(mtex, texvec, &tin, &tr, &tg, &tb, &ta, 0);
yn= tin*mtex->colfac;
zn= tin*mtex->alphafac;
@@ -1151,7 +1151,7 @@ HaloRen *RE_inithalo_particle(Render *re, ObjectRen *obr, DerivedMesh *dm, Mater
VECCOPY(texvec, orco);
}
- externtex(mtex, texvec, &tin, &tr, &tg, &tb, &ta);
+ externtex(mtex, texvec, &tin, &tr, &tg, &tb, &ta, 0);
//yn= tin*mtex->colfac;
//zn= tin*mtex->alphafac;
diff --git a/source/blender/render/intern/source/shadeinput.c b/source/blender/render/intern/source/shadeinput.c
index 56ab56d0411..4754e0d15f1 100644
--- a/source/blender/render/intern/source/shadeinput.c
+++ b/source/blender/render/intern/source/shadeinput.c
@@ -792,10 +792,26 @@ void shade_input_set_normals(ShadeInput *shi)
{
float u= shi->u, v= shi->v;
float l= 1.0f+u+v;
+
+ shi->flippednor = 0;
+
+ /* test flip normals to viewing direction */
+ if(!(shi->vlr->flag & R_TANGENT)) {
+ if(dot_v3v3(shi->facenor, shi->view) < 0.0f) {
+ negate_v3(shi->facenor);
+ shi->flippednor= 1;
+ }
+ }
/* calculate vertexnormals */
if(shi->vlr->flag & R_SMOOTH) {
float *n1= shi->n1, *n2= shi->n2, *n3= shi->n3;
+
+ if(shi->flippednor) {
+ negate_v3(n1);
+ negate_v3(n2);
+ negate_v3(n3);
+ }
shi->vn[0]= l*n3[0]-u*n1[0]-v*n2[0];
shi->vn[1]= l*n3[1]-u*n1[1]-v*n2[1];
diff --git a/source/blender/render/intern/source/texture.c b/source/blender/render/intern/source/texture.c
index 60565d0ff16..be2c83a7edf 100644
--- a/source/blender/render/intern/source/texture.c
+++ b/source/blender/render/intern/source/texture.c
@@ -2509,6 +2509,7 @@ void do_halo_tex(HaloRen *har, float xn, float yn, float *colf)
if (R.r.scemode & R_NO_TEX) return;
mtex= har->mat->mtex[0];
+ if(har->mat->septex & (1<<0)) return;
if(mtex->tex==NULL) return;
/* no normal mapping */
@@ -3015,7 +3016,7 @@ void do_lamp_tex(LampRen *la, float *lavec, ShadeInput *shi, float *colf, int ef
/* ------------------------------------------------------------------------- */
-int externtex(MTex *mtex, float *vec, float *tin, float *tr, float *tg, float *tb, float *ta)
+int externtex(MTex *mtex, float *vec, float *tin, float *tr, float *tg, float *tb, float *ta, const int thread)
{
Tex *tex;
TexResult texr;
@@ -3041,7 +3042,7 @@ int externtex(MTex *mtex, float *vec, float *tin, float *tr, float *tg, float *t
do_2d_mapping(mtex, texvec, NULL, NULL, dxt, dyt);
}
- rgb= multitex(tex, texvec, dxt, dyt, 0, &texr, 0, mtex->which_output);
+ rgb= multitex(tex, texvec, dxt, dyt, 0, &texr, thread, mtex->which_output);
if(rgb) {
texr.tin= (0.35*texr.tr+0.45*texr.tg+0.2*texr.tb);
diff --git a/source/blender/verify/Makefile b/source/blender/verify/Makefile
index 88ac835c505..4451d5baf22 100644
--- a/source/blender/verify/Makefile
+++ b/source/blender/verify/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
# All rights reserved.
diff --git a/source/blender/verify/intern/Makefile b/source/blender/verify/intern/Makefile
index 5f1cac41e28..009fd1c6e28 100644
--- a/source/blender/verify/intern/Makefile
+++ b/source/blender/verify/intern/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
# All rights reserved.
diff --git a/source/blender/windowmanager/CMakeLists.txt b/source/blender/windowmanager/CMakeLists.txt
index ce7474af477..1919bf8e571 100644
--- a/source/blender/windowmanager/CMakeLists.txt
+++ b/source/blender/windowmanager/CMakeLists.txt
@@ -26,20 +26,27 @@
FILE(GLOB SRC intern/*.c)
-SET(INC .
- ../editors/include
- ../../../intern/guardedalloc ../../../intern/memutil
- ../blenlib ../makesdna ../makesrna ../blenkernel
- ../include ../imbuf ../render/extern/include
- ../../../intern/bsp/extern
- ../../../intern/decimation/extern ../blenloader
- ../../kernel/gen_system ../readstreamglue
- ../../../intern/elbeem/extern
- ../../../intern/ghost ../../../intern/opennl/extern ../../../extern/glew/include
- ../python
+SET(INC
+ .
../nodes
../gpu
../blenfont
+ ../blenlib
+ ../makesdna
+ ../makesrna
+ ../blenkernel
+ ../include
+ ../imbuf
+ ../blenloader
+ ../editors/include
+ ../render/extern/include
+ ../../kernel/gen_system
+ ../../../intern/guardedalloc
+ ../../../intern/memutil
+ ../../../intern/elbeem/extern
+ ../../../intern/ghost
+ ../../../intern/opennl/extern
+ ../../../extern/glew/include
${OPENGL_INCLUDE_DIR}
)
@@ -54,23 +61,23 @@ IF(WITH_OPENCOLLADA)
ENDIF(WITH_OPENCOLLADA)
IF(WITH_QUICKTIME)
- SET(INC ${INC} ../quicktime ${QUICKTIME_INC})
+ LIST(APPEND INC ../quicktime ${QUICKTIME_INC})
ADD_DEFINITIONS(-DWITH_QUICKTIME)
ENDIF(WITH_QUICKTIME)
IF(WITH_FFMPEG)
- SET(INC ${INC} ${FFMPEG_INC})
+ LIST(APPEND INC ${FFMPEG_INC})
ADD_DEFINITIONS(-DWITH_FFMPEG)
ENDIF(WITH_FFMPEG)
IF(WITH_PYTHON)
- SET(INC ${INC} ../python ${PYTHON_INC})
+ LIST(APPEND INC ../python ${PYTHON_INC})
ELSE(WITH_PYTHON)
ADD_DEFINITIONS(-DDISABLE_PYTHON)
ENDIF(WITH_PYTHON)
IF(WIN32)
- SET(INC ${INC} ${PTHREADS_INC})
+ LIST(APPEND INC ${PTHREADS_INC})
ENDIF(WIN32)
IF(WITH_COCOA)
diff --git a/source/blender/windowmanager/Makefile b/source/blender/windowmanager/Makefile
index 90621f66057..1596921b5ee 100644
--- a/source/blender/windowmanager/Makefile
+++ b/source/blender/windowmanager/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) Blender Foundation.
# All rights reserved.
diff --git a/source/blender/windowmanager/SConscript b/source/blender/windowmanager/SConscript
index 179b1ddc998..51168d7a9d3 100644
--- a/source/blender/windowmanager/SConscript
+++ b/source/blender/windowmanager/SConscript
@@ -17,22 +17,22 @@ incs += ' #/intern/elbeem #/extern/glew/include'
defs = [ 'GLEW_STATIC' ]
if not env['WITH_BF_PYTHON']:
- defs.append('DISABLE_PYTHON')
+ defs.append('DISABLE_PYTHON')
if env['WITH_BF_COLLADA']:
- defs.append('WITH_COLLADA')
+ defs.append('WITH_COLLADA')
if env['OURPLATFORM'] == 'linux2':
- cflags='-pthread'
- incs += ' ../../../extern/binreloc/include'
+ cflags='-pthread'
+ incs += ' ../../../extern/binreloc/include'
if env['OURPLATFORM'] in ('win32-vc', 'win32-mingw', 'linuxcross', 'win64-vc'):
- incs += ' ' + env['BF_PTHREADS_INC']
+ incs += ' ' + env['BF_PTHREADS_INC']
if env['WITH_GHOST_COCOA']:
- sources.remove('intern/wm_apple.c')
+ sources.remove('intern/wm_apple.c')
if env['BF_BUILDINFO']:
- defs.append('NAN_BUILDINFO')
+ defs.append('NAN_BUILDINFO')
env.BlenderLib ( 'bf_windowmanager', sources, Split(incs), defines=defs, libtype=['core'], priority=[5] )
diff --git a/source/blender/windowmanager/WM_api.h b/source/blender/windowmanager/WM_api.h
index 46d42b300bf..690d8ad0f75 100644
--- a/source/blender/windowmanager/WM_api.h
+++ b/source/blender/windowmanager/WM_api.h
@@ -52,12 +52,14 @@ typedef struct wmJob wmJob;
/* general API */
void WM_setprefsize (int stax, int stay, int sizx, int sizy);
+void WM_setinitialstate_fullscreen();
+void WM_setinitialstate_normal();
void WM_init (struct bContext *C, int argc, char **argv);
void WM_exit (struct bContext *C);
void WM_main (struct bContext *C);
-void WM_init_game (struct bContext *C);
+int WM_init_game (struct bContext *C);
void WM_init_splash (struct bContext *C);
@@ -78,7 +80,7 @@ void WM_window_open_temp (struct bContext *C, struct rcti *position, int type);
int WM_read_homefile (struct bContext *C, struct wmOperator *op);
int WM_write_homefile (struct bContext *C, struct wmOperator *op);
void WM_read_file (struct bContext *C, char *name, struct ReportList *reports);
-int WM_write_file (struct bContext *C, char *target, int fileflags, struct ReportList *reports, int copy);
+int WM_write_file (struct bContext *C, const char *target, int fileflags, struct ReportList *reports, int copy);
void WM_read_autosavefile(struct bContext *C);
void WM_autosave_init (struct wmWindowManager *wm);
@@ -97,8 +99,8 @@ void WM_paint_cursor_end(struct wmWindowManager *wm, void *handle);
void WM_cursor_warp (struct wmWindow *win, int x, int y);
/* keyconfig and keymap */
-wmKeyConfig *WM_keyconfig_add (struct wmWindowManager *wm, char *idname);
-wmKeyConfig *WM_keyconfig_add_user(struct wmWindowManager *wm, char *idname);
+wmKeyConfig *WM_keyconfig_new (struct wmWindowManager *wm, char *idname);
+wmKeyConfig *WM_keyconfig_new_user(struct wmWindowManager *wm, char *idname);
void WM_keyconfig_remove (struct wmWindowManager *wm, struct wmKeyConfig *keyconf);
void WM_keyconfig_free (struct wmKeyConfig *keyconf);
void WM_keyconfig_userdef(struct wmWindowManager *wm);
@@ -201,7 +203,6 @@ void WM_operator_free (struct wmOperator *op);
void WM_operator_stack_clear(struct bContext *C);
struct wmOperatorType *WM_operatortype_find(const char *idnamem, int quiet);
-struct wmOperatorType *WM_operatortype_exists(const char *idname);
struct wmOperatorType *WM_operatortype_first(void);
void WM_operatortype_append (void (*opfunc)(struct wmOperatorType*));
void WM_operatortype_append_ptr (void (*opfunc)(struct wmOperatorType*, void *), void *userdata);
diff --git a/source/blender/windowmanager/WM_types.h b/source/blender/windowmanager/WM_types.h
index c84a5e64889..3f67888a4e9 100644
--- a/source/blender/windowmanager/WM_types.h
+++ b/source/blender/windowmanager/WM_types.h
@@ -177,26 +177,29 @@ typedef struct wmNotifier {
#define ND_SEQUENCER (6<<16)
#define ND_OB_ACTIVE (7<<16)
#define ND_OB_SELECT (8<<16)
-#define ND_MODE (9<<16)
-#define ND_RENDER_RESULT (10<<16)
-#define ND_COMPO_RESULT (11<<16)
-#define ND_KEYINGSET (12<<16)
-#define ND_TOOLSETTINGS (13<<16)
-#define ND_LAYER (14<<16)
-#define ND_FRAME_RANGE (15<<16)
+#define ND_OB_VISIBLE (9<<16)
+#define ND_MODE (10<<16)
+#define ND_RENDER_RESULT (11<<16)
+#define ND_COMPO_RESULT (12<<16)
+#define ND_KEYINGSET (13<<16)
+#define ND_TOOLSETTINGS (14<<16)
+#define ND_LAYER (15<<16)
+#define ND_FRAME_RANGE (16<<16)
+#define ND_LAYER_CONTENT (101<<16)
/* NC_OBJECT Object */
-#define ND_TRANSFORM (16<<16)
-#define ND_OB_SHADING (17<<16)
-#define ND_POSE (18<<16)
-#define ND_BONE_ACTIVE (19<<16)
-#define ND_BONE_SELECT (20<<16)
-#define ND_DRAW (21<<16)
-#define ND_MODIFIER (22<<16)
-#define ND_KEYS (23<<16)
-#define ND_CONSTRAINT (24<<16)
-#define ND_PARTICLE (25<<16)
-#define ND_POINTCACHE (26<<16)
+#define ND_TRANSFORM (17<<16)
+#define ND_OB_SHADING (18<<16)
+#define ND_POSE (19<<16)
+#define ND_BONE_ACTIVE (20<<16)
+#define ND_BONE_SELECT (21<<16)
+#define ND_DRAW (22<<16)
+#define ND_MODIFIER (23<<16)
+#define ND_KEYS (24<<16)
+#define ND_CONSTRAINT (25<<16)
+#define ND_PARTICLE (26<<16)
+#define ND_POINTCACHE (27<<16)
+#define ND_PARENT (28<<16)
/* NC_MATERIAL Material */
#define ND_SHADING (30<<16)
@@ -384,6 +387,12 @@ typedef struct wmOperatorType {
* any interface code or input device state.
* - see defines below for return values */
int (*exec)(struct bContext *, struct wmOperator *);
+
+ /* this callback executes on a running operator whenever as property
+ * is changed. It can correct its own properties or report errors for
+ * invalid settings in exceptional cases.
+ * Boolean return value, True denotes a change has been made and to redraw */
+ int (*check)(struct bContext *, struct wmOperator *);
/* for modal temporary operators, initially invoke is called. then
* any further events are handled in modal. if the operation is
diff --git a/source/blender/windowmanager/intern/Makefile b/source/blender/windowmanager/intern/Makefile
index 18085194405..60be5fed4b2 100644
--- a/source/blender/windowmanager/intern/Makefile
+++ b/source/blender/windowmanager/intern/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
# All rights reserved.
diff --git a/source/blender/windowmanager/intern/wm.c b/source/blender/windowmanager/intern/wm.c
index fcf8951d796..148932fa941 100644
--- a/source/blender/windowmanager/intern/wm.c
+++ b/source/blender/windowmanager/intern/wm.c
@@ -26,7 +26,10 @@
* ***** END GPL LICENSE BLOCK *****
*/
-#include "string.h"
+#include <string.h>
+#include <stddef.h>
+
+#include "BLO_sys_types.h"
#include "DNA_windowmanager_types.h"
@@ -54,8 +57,10 @@
#include "MEM_guardedalloc.h"
#include "ED_screen.h"
-#include "BPY_extern.h"
+#ifndef DISABLE_PYTHON
+#include "BPY_extern.h"
+#endif
/* ****************************************************** */
@@ -149,9 +154,9 @@ MenuType *WM_menutype_find(const char *idname, int quiet)
MenuType* mt;
if (idname[0]) {
- for(mt=menutypes.first; mt; mt=mt->next)
- if(strcmp(idname, mt->idname)==0)
- return mt;
+ mt= BLI_findstring(&menutypes, idname, offsetof(MenuType, idname));
+ if(mt)
+ return mt;
}
if(!quiet)
@@ -194,7 +199,7 @@ void WM_keymap_init(bContext *C)
wmWindowManager *wm= CTX_wm_manager(C);
if(!wm->defaultconf)
- wm->defaultconf= WM_keyconfig_add(wm, "Blender");
+ wm->defaultconf= WM_keyconfig_new(wm, "Blender");
if(wm && CTX_py_init_get(C) && (wm->initialized & WM_INIT_KEYMAP) == 0) {
/* create default key config */
@@ -226,7 +231,7 @@ void WM_check(bContext *C)
}
/* case: no open windows at all, for old file reads */
- wm_window_add_ghostwindows(wm);
+ wm_window_add_ghostwindows(C, wm);
/* case: fileread */
if((wm->initialized & WM_INIT_WINDOW) == 0) {
diff --git a/source/blender/windowmanager/intern/wm_cursors.c b/source/blender/windowmanager/intern/wm_cursors.c
index b16e82726b4..1803a1cee91 100644
--- a/source/blender/windowmanager/intern/wm_cursors.c
+++ b/source/blender/windowmanager/intern/wm_cursors.c
@@ -32,6 +32,8 @@
#include "GHOST_C-api.h"
+#include "BLO_sys_types.h"
+
#include "DNA_listBase.h"
#include "DNA_userdef_types.h"
diff --git a/source/blender/windowmanager/intern/wm_dragdrop.c b/source/blender/windowmanager/intern/wm_dragdrop.c
index 3d519a5609b..18b1e7239ed 100644
--- a/source/blender/windowmanager/intern/wm_dragdrop.c
+++ b/source/blender/windowmanager/intern/wm_dragdrop.c
@@ -26,7 +26,7 @@
* ***** END GPL LICENSE BLOCK *****
*/
-#include "string.h"
+#include <string.h>
#include "DNA_windowmanager_types.h"
#include "DNA_screen_types.h"
diff --git a/source/blender/windowmanager/intern/wm_draw.c b/source/blender/windowmanager/intern/wm_draw.c
index 7a517dea766..81417e8f8f1 100644
--- a/source/blender/windowmanager/intern/wm_draw.c
+++ b/source/blender/windowmanager/intern/wm_draw.c
@@ -106,7 +106,7 @@ static int wm_area_test_invalid_backbuf(ScrArea *sa)
if(sa->spacetype == SPACE_VIEW3D)
return (((View3D*)sa->spacedata.first)->flag & V3D_INVALID_BACKBUF);
else
- return 0;
+ return 1;
}
/********************** draw all **************************/
@@ -710,6 +710,8 @@ static int wm_automatic_draw_method(wmWindow *win)
/* Windows software driver darkens color on each redraw */
else if(GPU_type_matches(GPU_DEVICE_SOFTWARE, GPU_OS_WIN, GPU_DRIVER_SOFTWARE))
return USER_DRAW_OVERLAP_FLIP;
+ else if(GPU_type_matches(GPU_DEVICE_SOFTWARE, GPU_OS_UNIX, GPU_DRIVER_SOFTWARE))
+ return USER_DRAW_OVERLAP;
/* drawing lower color depth again degrades colors each time */
else if(GPU_color_depth() < 24)
return USER_DRAW_OVERLAP;
diff --git a/source/blender/windowmanager/intern/wm_event_system.c b/source/blender/windowmanager/intern/wm_event_system.c
index 867700980af..45c56164a30 100644
--- a/source/blender/windowmanager/intern/wm_event_system.c
+++ b/source/blender/windowmanager/intern/wm_event_system.c
@@ -425,6 +425,14 @@ static void wm_operator_reports(bContext *C, wmOperator *op, int retval, int pop
}
}
+/* this function is mainly to check that the rules for freeing
+ * an operator are kept in sync.
+ */
+static int wm_operator_register_check(wmWindowManager *wm, wmOperatorType *ot)
+{
+ return (wm->op_undo_depth == 0) && (ot->flag & OPTYPE_REGISTER);
+}
+
static void wm_operator_finished(bContext *C, wmOperator *op, int repeat)
{
wmWindowManager *wm= CTX_wm_manager(C);
@@ -445,7 +453,7 @@ static void wm_operator_finished(bContext *C, wmOperator *op, int repeat)
MEM_freeN(buf);
}
- if((wm->op_undo_depth == 0) && (op->type->flag & OPTYPE_REGISTER))
+ if(wm_operator_register_check(wm, op->type))
wm_operator_register(C, op);
else
WM_operator_free(op);
@@ -807,11 +815,11 @@ int WM_operator_name_call(bContext *C, const char *opstring, int context, Pointe
*/
int WM_operator_call_py(bContext *C, wmOperatorType *ot, int context, PointerRNA *properties, ReportList *reports)
{
+ wmWindowManager *wm= CTX_wm_manager(C);
int retval= OPERATOR_CANCELLED;
#if 0
wmOperator *op;
- wmWindowManager *wm= CTX_wm_manager(C);
op= wm_operator_create(wm, ot, properties, reports);
if (op->type->exec) {
@@ -830,9 +838,10 @@ int WM_operator_call_py(bContext *C, wmOperatorType *ot, int context, PointerRNA
retval= wm_operator_call_internal(C, ot, context, properties, reports);
/* keep the reports around if needed later */
- if (retval & OPERATOR_RUNNING_MODAL || ot->flag & OPTYPE_REGISTER)
- {
- reports->flag |= RPT_FREE;
+ if ( (retval & OPERATOR_RUNNING_MODAL) ||
+ ((retval & OPERATOR_FINISHED) && wm_operator_register_check(wm, ot))
+ ) {
+ reports->flag |= RPT_FREE; /* let blender manage freeing */
}
return retval;
@@ -1216,23 +1225,30 @@ static int wm_handler_fileselect_call(bContext *C, ListBase *handlers, wmEventHa
case EVT_FILESELECT_EXEC:
case EVT_FILESELECT_CANCEL:
+ case EVT_FILESELECT_EXTERNAL_CANCEL:
{
/* XXX validate area and region? */
bScreen *screen= CTX_wm_screen(C);
-
- if(screen != handler->filescreen)
- ED_screen_full_prevspace(C, CTX_wm_area(C));
- else
- ED_area_prevspace(C, CTX_wm_area(C));
-
- /* remlink now, for load file case */
+
+ /* remlink now, for load file case before removing*/
BLI_remlink(handlers, handler);
+ if(event->val!=EVT_FILESELECT_EXTERNAL_CANCEL) {
+ if(screen != handler->filescreen) {
+ ED_screen_full_prevspace(C, CTX_wm_area(C));
+ }
+ else {
+ ED_area_prevspace(C, CTX_wm_area(C));
+ }
+ }
+
wm_handler_op_context(C, handler);
/* needed for uiPupMenuReports */
if(event->val==EVT_FILESELECT_EXEC) {
+#if 0 // use REDALERT now
+
/* a bit weak, might become arg for WM_event_fileselect? */
/* XXX also extension code in image-save doesnt work for this yet */
if (RNA_struct_find_property(handler->op->ptr, "check_existing") &&
@@ -1243,7 +1259,9 @@ static int wm_handler_fileselect_call(bContext *C, ListBase *handlers, wmEventHa
if(path)
MEM_freeN(path);
}
- else {
+ else
+#endif
+ {
int retval;
if(handler->op->type->flag & OPTYPE_UNDO)
@@ -1792,9 +1810,17 @@ void WM_event_fileselect_event(bContext *C, void *ophandle, int eventval)
void WM_event_add_fileselect(bContext *C, wmOperator *op)
{
- wmEventHandler *handler= MEM_callocN(sizeof(wmEventHandler), "fileselect handler");
+ wmEventHandler *handler;
wmWindow *win= CTX_wm_window(C);
int full= 1; // XXX preset?
+
+ /* only allow file selector open per window bug [#23553] */
+ for(handler= win->modalhandlers.first; handler; handler=handler->next) {
+ if(handler->type == WM_HANDLER_FILESELECT)
+ return;
+ }
+
+ handler = MEM_callocN(sizeof(wmEventHandler), "fileselect handler");
handler->type= WM_HANDLER_FILESELECT;
handler->op= op;
@@ -1804,6 +1830,12 @@ void WM_event_add_fileselect(bContext *C, wmOperator *op)
BLI_addhead(&win->modalhandlers, handler);
+ /* check props once before invoking if check is available
+ * ensures initial properties are valid */
+ if(op->type->check) {
+ op->type->check(C, op); /* ignore return value */
+ }
+
WM_event_fileselect_event(C, op, full?EVT_FILESELECT_FULL_OPEN:EVT_FILESELECT_OPEN);
}
diff --git a/source/blender/windowmanager/intern/wm_files.c b/source/blender/windowmanager/intern/wm_files.c
index e2293f79e95..f0b8577be47 100644
--- a/source/blender/windowmanager/intern/wm_files.c
+++ b/source/blender/windowmanager/intern/wm_files.c
@@ -96,7 +96,9 @@
#include "GPU_draw.h"
+#ifndef DISABLE_PYTHON
#include "BPY_extern.h"
+#endif
#include "WM_api.h"
#include "WM_types.h"
@@ -334,6 +336,9 @@ void WM_read_file(bContext *C, char *name, ReportList *reports)
/* called on startup, (context entirely filled with NULLs) */
/* or called for 'New File' */
/* op can be NULL */
+/* note: G.sce is used to store the last saved path so backup and restore after loading
+ * G.main->name is similar to G.sce but when loading from memory set the name to startup.blend
+ * ...this could be changed but seems better then setting to "" */
int WM_read_homefile(bContext *C, wmOperator *op)
{
ListBase wmbase;
@@ -371,12 +376,17 @@ int WM_read_homefile(bContext *C, wmOperator *op)
if (wmbase.first == NULL) wm_clear_default_size(C);
}
+ /* prevent buggy files that had G_FILE_RELATIVE_REMAP written out by mistake. Screws up autosaves otherwise
+ * can remove this eventually, only in a 2.53 and older, now its not written */
+ G.fileflags &= ~G_FILE_RELATIVE_REMAP;
+
/* match the read WM with current WM */
wm_window_match_do(C, &wmbase);
WM_check(C); /* opens window(s), checks keymaps */
strcpy(G.sce, scestr); /* restore */
-
+ G.main->name[0]= '\0';
+
wm_init_userdef(C);
/* When loading factory settings, the reset solid OpenGL lights need to be applied. */
@@ -395,6 +405,13 @@ int WM_read_homefile(bContext *C, wmOperator *op)
ED_editors_init(C);
DAG_on_load_update(CTX_data_main(C));
+
+#ifndef DISABLE_PYTHON
+ if(CTX_py_init_get(C)) {
+ /* sync addons, these may have changed from the defaults */
+ BPY_eval_string(C, "__import__('bpy').utils.addon_reset_all()");
+ }
+#endif
WM_event_add_notifier(C, NC_WM|ND_FILEREAD, NULL);
CTX_wm_window_set(C, NULL); /* exits queues */
@@ -522,7 +539,7 @@ static ImBuf *blend_file_thumb(const char *path, Scene *scene, int **thumb_pt)
return NULL;
/* gets scaled to BLEN_THUMB_SIZE */
- ibuf= ED_view3d_draw_offscreen_imbuf_simple(scene, BLEN_THUMB_SIZE * 2, BLEN_THUMB_SIZE * 2, OB_SOLID);
+ ibuf= ED_view3d_draw_offscreen_imbuf_simple(scene, BLEN_THUMB_SIZE * 2, BLEN_THUMB_SIZE * 2, IB_rect, OB_SOLID);
if(ibuf) {
float aspect= (scene->r.xsch*scene->r.xasp) / (scene->r.ysch*scene->r.yasp);
@@ -568,7 +585,7 @@ int write_crash_blend(void)
}
}
-int WM_write_file(bContext *C, char *target, int fileflags, ReportList *reports, int copy)
+int WM_write_file(bContext *C, const char *target, int fileflags, ReportList *reports, int copy)
{
Library *li;
int len;
@@ -589,25 +606,20 @@ int WM_write_file(bContext *C, char *target, int fileflags, ReportList *reports,
return -1;
}
+ BLI_strncpy(di, target, FILE_MAX);
+ BLI_replace_extension(di, FILE_MAX, ".blend");
+ /* dont use 'target' anymore */
+
/* send the OnSave event */
for (li= G.main->library.first; li; li= li->id.next) {
- if (BLI_streq(li->name, target)) {
- BKE_report(reports, RPT_ERROR, "Cannot overwrite used library");
+ if (strcmp(li->filepath, di) == 0) {
+ BKE_reportf(reports, RPT_ERROR, "Can't overwrite used library '%f'", di);
return -1;
}
}
-
- if (!BLO_has_bfile_extension(target) && (len+6 < FILE_MAX)) {
- sprintf(di, "%s.blend", target);
- } else {
- strcpy(di, target);
- }
-// if (BLI_exists(di)) {
-// XXX if(!saveover(di))
-// XXX return;
-// }
-
+ /* operator now handles overwrite checks */
+
if (G.fileflags & G_AUTOPACK) {
packAll(G.main, reports);
}
diff --git a/source/blender/windowmanager/intern/wm_init_exit.c b/source/blender/windowmanager/intern/wm_init_exit.c
index 558d20021ce..4d4e399a1c7 100644
--- a/source/blender/windowmanager/intern/wm_init_exit.c
+++ b/source/blender/windowmanager/intern/wm_init_exit.c
@@ -49,6 +49,7 @@
#include "BKE_font.h"
#include "BKE_global.h"
#include "BKE_library.h"
+#include "BKE_main.h"
#include "BKE_mball.h"
#include "BKE_report.h"
#include "BKE_utildefines.h"
@@ -94,6 +95,7 @@
#include "BKE_depsgraph.h"
#include "BKE_sound.h"
+#include "GHOST_C-api.h"
static void wm_init_reports(bContext *C)
{
@@ -186,18 +188,115 @@ void WM_init_splash(bContext *C)
}
}
-void WM_init_game(bContext *C)
+static ScrArea *biggest_view3d(bContext *C)
+{
+ bScreen *sc= CTX_wm_screen(C);
+ ScrArea *sa, *big= NULL;
+ int size, maxsize= 0;
+
+ for(sa= sc->areabase.first; sa; sa= sa->next) {
+ if(sa->spacetype==SPACE_VIEW3D) {
+ size= sa->winx * sa->winy;
+ if(size > maxsize) {
+ maxsize= size;
+ big= sa;
+ }
+ }
+ }
+ return big;
+}
+
+int WM_init_game(bContext *C)
{
- //XXX copied from WM_init_splash we may not even need those "window" related code
- //XXX not working yet, it fails at the game_start_operator pool (it needs an area)
wmWindowManager *wm= CTX_wm_manager(C);
- wmWindow *prevwin= CTX_wm_window(C);
-
- if(wm->windows.first) {
- CTX_wm_window_set(C, wm->windows.first);
+ wmWindow* win;
+
+ ScrArea *sa;
+ ARegion *ar;
+
+ Scene *scene= CTX_data_scene(C);
+
+ if (!scene) {
+ // XXX, this should not be needed.
+ Main *bmain = CTX_data_main(C);
+ scene= bmain->scene.first;
+ }
+
+ win = wm->windows.first;
+
+ //first to get a valid window
+ if(win)
+ CTX_wm_window_set(C, win);
+
+ sa = biggest_view3d(C);
+
+ if(sa)
+ {
+ for(ar=sa->regionbase.first; ar; ar=ar->next) {
+ if(ar->regiontype == RGN_TYPE_WINDOW) {
+ break;
+ }
+ }
+ }
+
+ // if we have a valid 3D view
+ if (sa && ar) {
+ ARegion *arhide;
+
+ CTX_wm_area_set(C, sa);
+ CTX_wm_region_set(C, ar);
+
+ /* disable quad view */
+ if(ar->alignment == RGN_ALIGN_QSPLIT)
+ WM_operator_name_call(C, "SCREEN_OT_region_quadview", WM_OP_EXEC_DEFAULT, NULL);
+
+ /* toolbox, properties panel and header are hidden */
+ for(arhide=sa->regionbase.first; arhide; arhide=arhide->next) {
+ if(arhide->regiontype != RGN_TYPE_WINDOW) {
+ if(!(arhide->flag & RGN_FLAG_HIDDEN)) {
+ ED_region_toggle_hidden(C, arhide);
+ }
+ }
+ }
+
+ /* full screen the area */
+ if(!sa->full) {
+ ED_screen_full_toggle(C, wm->windows.first, sa);
+ }
+
+ /* Fullscreen */
+ if(scene->gm.fullscreen) {
+ WM_operator_name_call(C, "WM_OT_window_fullscreen_toggle", WM_OP_EXEC_DEFAULT, NULL);
+ wm_get_screensize(&ar->winrct.xmax, &ar->winrct.ymax);
+ }
+ else
+ {
+ GHOST_RectangleHandle rect = GHOST_GetClientBounds(win->ghostwin);
+ ar->winrct.ymax = GHOST_GetHeightRectangle(rect);
+ ar->winrct.xmax = GHOST_GetWidthRectangle(rect);
+ GHOST_DisposeRectangle(rect);
+ }
+
WM_operator_name_call(C, "VIEW3D_OT_game_start", WM_OP_EXEC_DEFAULT, NULL);
- CTX_wm_window_set(C, prevwin);
+
+ return 1;
+ }
+ else
+ {
+ ReportTimerInfo *rti;
+
+ BKE_report(&wm->reports, RPT_ERROR, "No valid 3D View found. Game auto start is not possible.");
+
+ /* After adding the report to the global list, reset the report timer. */
+ WM_event_remove_timer(wm, NULL, wm->reports.reporttimer);
+
+ /* Records time since last report was added */
+ wm->reports.reporttimer = WM_event_add_timer(wm, CTX_wm_window(C), TIMER, 0.02);
+
+ rti = MEM_callocN(sizeof(ReportTimerInfo), "ReportTimerInfo");
+ wm->reports.reporttimer->customdata = rti;
}
+ return 0;
}
/* free strings of open recent files */
diff --git a/source/blender/windowmanager/intern/wm_keymap.c b/source/blender/windowmanager/intern/wm_keymap.c
index e79d08dc2f1..f1873b14232 100644
--- a/source/blender/windowmanager/intern/wm_keymap.c
+++ b/source/blender/windowmanager/intern/wm_keymap.c
@@ -74,7 +74,7 @@ void WM_keymap_properties_reset(wmKeyMapItem *kmi)
keymap_properties_set(kmi);
}
-wmKeyConfig *WM_keyconfig_add(wmWindowManager *wm, char *idname)
+wmKeyConfig *WM_keyconfig_new(wmWindowManager *wm, char *idname)
{
wmKeyConfig *keyconf;
@@ -85,9 +85,9 @@ wmKeyConfig *WM_keyconfig_add(wmWindowManager *wm, char *idname)
return keyconf;
}
-wmKeyConfig *WM_keyconfig_add_user(wmWindowManager *wm, char *idname)
+wmKeyConfig *WM_keyconfig_new_user(wmWindowManager *wm, char *idname)
{
- wmKeyConfig *keyconf = WM_keyconfig_add(wm, idname);
+ wmKeyConfig *keyconf = WM_keyconfig_new(wm, idname);
keyconf->flag |= KEYCONF_USER;
diff --git a/source/blender/windowmanager/intern/wm_operators.c b/source/blender/windowmanager/intern/wm_operators.c
index 4c3e88d978e..b84b7eab55f 100644
--- a/source/blender/windowmanager/intern/wm_operators.c
+++ b/source/blender/windowmanager/intern/wm_operators.c
@@ -30,12 +30,13 @@
#include <string.h>
#include <ctype.h>
#include <stdio.h>
+#include <stddef.h>
+
#include "DNA_ID.h"
#include "DNA_object_types.h"
#include "DNA_screen_types.h"
#include "DNA_scene_types.h"
-#include "DNA_brush_types.h"
#include "DNA_userdef_types.h"
#include "DNA_windowmanager_types.h"
@@ -62,7 +63,7 @@
#include "BKE_scene.h"
#include "BKE_screen.h" /* BKE_ST_MAXNAME */
#include "BKE_utildefines.h"
-#include "BKE_brush.h" // JW
+#include "BKE_idcode.h"
#include "BIF_gl.h"
#include "BIF_glutil.h" /* for paint cursor */
@@ -71,7 +72,6 @@
#include "ED_screen.h"
#include "ED_util.h"
-#include "ED_view3d.h" // JW
#include "RNA_access.h"
#include "RNA_define.h"
@@ -89,8 +89,6 @@
#include "wm_subwindow.h"
#include "wm_window.h"
-
-
static ListBase global_ops= {NULL, NULL};
/* ************ operator API, exported ********** */
@@ -102,11 +100,11 @@ wmOperatorType *WM_operatortype_find(const char *idname, int quiet)
char idname_bl[OP_MAX_TYPENAME]; // XXX, needed to support python style names without the _OT_ syntax
WM_operator_bl_idname(idname_bl, idname);
-
+
if (idname_bl[0]) {
- for(ot= global_ops.first; ot; ot= ot->next) {
- if(strncmp(ot->idname, idname_bl, OP_MAX_TYPENAME)==0)
- return ot;
+ ot= (wmOperatorType *)BLI_findstring_ptr(&global_ops, idname_bl, offsetof(wmOperatorType, idname));
+ if(ot) {
+ return ot;
}
}
@@ -116,22 +114,6 @@ wmOperatorType *WM_operatortype_find(const char *idname, int quiet)
return NULL;
}
-wmOperatorType *WM_operatortype_exists(const char *idname)
-{
- wmOperatorType *ot;
-
- char idname_bl[OP_MAX_TYPENAME]; // XXX, needed to support python style names without the _OT_ syntax
- WM_operator_bl_idname(idname_bl, idname);
-
- if(idname_bl[0]) {
- for(ot= global_ops.first; ot; ot= ot->next) {
- if(strncmp(ot->idname, idname_bl, OP_MAX_TYPENAME)==0)
- return ot;
- }
- }
- return NULL;
-}
-
wmOperatorType *WM_operatortype_first(void)
{
return global_ops.first;
@@ -332,7 +314,7 @@ wmOperatorType *WM_operatortype_append_macro(char *idname, char *name, int flag)
{
wmOperatorType *ot;
- if(WM_operatortype_exists(idname)) {
+ if(WM_operatortype_find(idname, TRUE)) {
printf("Macro error: operator %s exists\n", idname);
return NULL;
}
@@ -946,6 +928,16 @@ static void dialog_exec_cb(bContext *C, void *arg1, void *arg2)
uiPupBlockClose(C, block);
}
+void dialog_check_cb(bContext *C, void *op_ptr, void *dummy2)
+{
+ wmOperator *op= op_ptr;
+ if(op->type->check) {
+ if(op->type->check(C, op)) {
+ /* refresh */
+ }
+ }
+}
+
/* Dialogs are popups that require user verification (click OK) before exec */
static uiBlock *wm_block_create_dialog(bContext *C, ARegion *ar, void *userData)
{
@@ -971,6 +963,8 @@ static uiBlock *wm_block_create_dialog(bContext *C, ARegion *ar, void *userData)
RNA_pointer_create(&wm->id, op->type->srna, op->properties, &ptr);
layout= uiBlockLayout(block, UI_LAYOUT_VERTICAL, UI_LAYOUT_PANEL, 0, 0, data->width, data->height, style);
uiItemL(layout, op->type->name, 0);
+
+ uiBlockSetFunc(block, dialog_check_cb, op, NULL);
if (op->type->ui) {
op->layout= layout;
@@ -979,6 +973,8 @@ static uiBlock *wm_block_create_dialog(bContext *C, ARegion *ar, void *userData)
}
else
uiDefAutoButsRNA(C, layout, &ptr, columns);
+
+ uiBlockSetFunc(block, NULL, NULL, NULL);
/* Create OK button, the callback of which will execute op */
btn= uiDefBut(block, BUT, 0, "OK", 0, 0, 0, 20, NULL, 0, 0, 0, 0, "");
@@ -1165,6 +1161,7 @@ static uiBlock *wm_block_create_splash(bContext *C, ARegion *ar, void *arg_unuse
int i;
Menu menu= {0};
MenuType *mt= WM_menutype_find("USERPREF_MT_splash", TRUE);
+ char url[64];
#ifdef NAN_BUILDINFO
int ver_width, rev_width;
@@ -1217,10 +1214,11 @@ static uiBlock *wm_block_create_splash(bContext *C, ARegion *ar, void *arg_unuse
uiItemStringO(col, "Release Log", ICON_URL, "WM_OT_url_open", "url", "http://www.blender.org/development/release-logs/blender-250/");
uiItemStringO(col, "Manual", ICON_URL, "WM_OT_url_open", "url", "http://wiki.blender.org/index.php/Doc:Manual");
uiItemStringO(col, "Blender Website", ICON_URL, "WM_OT_url_open", "url", "http://www.blender.org/");
- uiItemStringO(col, "User Community", ICON_URL, "WM_OT_url_open", "url", "http://www.blender.org/community/user-community/");
- uiItemStringO(col, "Python API Reference", ICON_URL, "WM_OT_url_open", "url", "http://www.blender.org/documentation/250PythonDoc/contents.html");
+ uiItemStringO(col, "User Community", ICON_URL, "WM_OT_url_open", "url", "http://www.blender.org/community/user-community/"); //
+ BLI_snprintf(url, sizeof(url), "http://www.blender.org/documentation/blender_python_api_%d_%d_%d", BLENDER_VERSION/100, BLENDER_VERSION%100, BLENDER_SUBVERSION);
+ uiItemStringO(col, "Python API Reference", ICON_URL, "WM_OT_url_open", "url", url);
uiItemL(col, "", 0);
-
+
col = uiLayoutColumn(split, 0);
uiItemL(col, "Recent", 0);
for(recent = G.recent_files.first, i=0; (i<5) && (recent); recent = recent->next, i++) {
@@ -1586,7 +1584,7 @@ static int wm_link_append_exec(bContext *C, wmOperator *op)
scene_deselect_all(scene);
bh = BLO_blendhandle_from_file(libname);
- idcode = BLO_idcode_from_name(group);
+ idcode = BKE_idcode_from_name(group);
flag = wm_link_append_flag(op);
@@ -1815,6 +1813,18 @@ static int wm_save_as_mainfile_exec(bContext *C, wmOperator *op)
return OPERATOR_FINISHED;
}
+/* function used for WM_OT_save_mainfile too */
+static int blend_save_check(bContext *C, wmOperator *op)
+{
+ char filepath[FILE_MAX];
+ RNA_string_get(op->ptr, "filepath", filepath);
+ if(BLI_replace_extension(filepath, sizeof(filepath), ".blend")) {
+ RNA_string_set(op->ptr, "filepath", filepath);
+ return TRUE;
+ }
+ return FALSE;
+}
+
static void WM_OT_save_as_mainfile(wmOperatorType *ot)
{
ot->name= "Save As Blender File";
@@ -1823,6 +1833,7 @@ static void WM_OT_save_as_mainfile(wmOperatorType *ot)
ot->invoke= wm_save_as_mainfile_invoke;
ot->exec= wm_save_as_mainfile_exec;
+ ot->check= blend_save_check;
ot->poll= WM_operator_winactive;
WM_operator_properties_filesel(ot, FOLDERFILE|BLENDERFILE, FILE_BLENDER, FILE_SAVE, WM_FILESEL_FILEPATH);
@@ -1873,6 +1884,7 @@ static void WM_OT_save_mainfile(wmOperatorType *ot)
ot->invoke= wm_save_mainfile_invoke;
ot->exec= wm_save_as_mainfile_exec;
+ ot->check= blend_save_check;
ot->poll= NULL;
WM_operator_properties_filesel(ot, FOLDERFILE|BLENDERFILE, FILE_BLENDER, FILE_SAVE, WM_FILESEL_FILEPATH);
@@ -1888,9 +1900,10 @@ static void WM_OT_save_mainfile(wmOperatorType *ot)
static int wm_collada_export_invoke(bContext *C, wmOperator *op, wmEvent *event)
{
if(!RNA_property_is_set(op->ptr, "filepath")) {
- char *path = BLI_replacestr(G.sce, ".blend", ".dae");
- RNA_string_set(op->ptr, "filepath", path);
- MEM_freeN(path);
+ char *filepath[FILE_MAX];
+ BLI_strncpy(filepath, G.sce, sizeof(filepath));
+ BLI_replace_extension(filepath, sizeof(filepath), ".dae");
+ RNA_string_set(op->ptr, "filepath", filepath);
}
WM_event_add_fileselect(C, op);
@@ -2598,33 +2611,22 @@ const int WM_RADIAL_CONTROL_DISPLAY_SIZE = 200;
typedef struct wmRadialControl {
int mode;
float initial_value, value, max_value;
+ float col[4], tex_col[4];
int initial_mouse[2];
void *cursor;
GLuint tex;
} wmRadialControl;
-extern Paint *paint_get_active(Scene *sce);
-extern struct Brush *paint_brush(struct Paint *paint);
-
static void wm_radial_control_paint(bContext *C, int x, int y, void *customdata)
{
wmRadialControl *rc = (wmRadialControl*)customdata;
ARegion *ar = CTX_wm_region(C);
float r1=0.0f, r2=0.0f, r3=0.0f, angle=0.0f;
- Paint *paint = paint_get_active(CTX_data_scene(C));
- struct Brush *brush = paint_brush(paint);
-
- ViewContext vc;
-
// int hit = 0;
-
- int flip;
- int sign;
-
- float* col;
-
- const float str = rc->mode == WM_RADIALCONTROL_STRENGTH ? (rc->value + 0.5) : (brush->texture_overlay_alpha / 100.0f);
+
+ if(rc->mode == WM_RADIALCONTROL_STRENGTH)
+ rc->tex_col[3]= (rc->value + 0.5);
if(rc->mode == WM_RADIALCONTROL_SIZE) {
r1= rc->value;
@@ -2642,18 +2644,6 @@ static void wm_radial_control_paint(bContext *C, int x, int y, void *customdata)
x = rc->initial_mouse[0] - ar->winrct.xmin;
y = rc->initial_mouse[1] - ar->winrct.ymin;
- view3d_set_viewcontext(C, &vc);
-
- // XXX: no way currently to know state of pen flip or invert key modifier without starting a stroke
- flip = 1;
-
- sign = flip * ((brush->flag & BRUSH_DIR_IN)? -1 : 1);
-
- if (sign < 0 && ELEM4(brush->sculpt_tool, SCULPT_TOOL_DRAW, SCULPT_TOOL_INFLATE, SCULPT_TOOL_CLAY, SCULPT_TOOL_PINCH))
- col = brush->sub_col;
- else
- col = brush->add_col;
-
glTranslatef((float)x, (float)y, 0.0f);
glEnable(GL_BLEND);
@@ -2670,7 +2660,7 @@ static void wm_radial_control_paint(bContext *C, int x, int y, void *customdata)
glEnable(GL_TEXTURE_2D);
glBegin(GL_QUADS);
- glColor4f(U.sculpt_paint_overlay_col[0],U.sculpt_paint_overlay_col[1],U.sculpt_paint_overlay_col[2], str);
+ glColor4f(rc->tex_col[0], rc->tex_col[1], rc->tex_col[2], rc->tex_col[3]);
glTexCoord2f(0,0);
glVertex2f(-r3, -r3);
glTexCoord2f(1,0);
@@ -2684,7 +2674,7 @@ static void wm_radial_control_paint(bContext *C, int x, int y, void *customdata)
}
if(rc->mode == WM_RADIALCONTROL_ANGLE) {
- glColor4f(col[0], col[1], col[2], 0.5f);
+ glColor4f(rc->col[0], rc->col[1], rc->col[2], rc->col[3]);
glEnable(GL_LINE_SMOOTH);
glRotatef(-angle, 0, 0, 1);
fdrawline(0, 0, WM_RADIAL_CONTROL_DISPLAY_SIZE, 0);
@@ -2693,7 +2683,7 @@ static void wm_radial_control_paint(bContext *C, int x, int y, void *customdata)
glDisable(GL_LINE_SMOOTH);
}
- glColor4f(col[0], col[1], col[2], 0.5f);
+ glColor4f(rc->col[0], rc->col[1], rc->col[2], rc->col[3]);
glutil_draw_lined_arc(0.0, M_PI*2.0, r1, 40);
glutil_draw_lined_arc(0.0, M_PI*2.0, r2, 40);
glDisable(GL_BLEND);
@@ -2819,6 +2809,9 @@ int WM_radial_control_invoke(bContext *C, wmOperator *op, wmEvent *event)
MEM_freeN(im);
}
+ RNA_float_get_array(op->ptr, "color", rc->col);
+ RNA_float_get_array(op->ptr, "texture_color", rc->tex_col);
+
RNA_int_set_array(op->ptr, "initial_mouse", mouse);
RNA_float_set(op->ptr, "new_value", initial_value);
@@ -2863,6 +2856,8 @@ void WM_OT_radial_control_partial(wmOperatorType *ot)
{WM_RADIALCONTROL_STRENGTH, "STRENGTH", 0, "Strength", ""},
{WM_RADIALCONTROL_ANGLE, "ANGLE", 0, "Angle", ""},
{0, NULL, 0, NULL, NULL}};
+ static float color[4] = {1.0f, 1.0f, 1.0f, 0.5f};
+ static float tex_color[4] = {1.0f, 1.0f, 1.0f, 1.0f};
/* Should be set in custom invoke() */
RNA_def_float(ot->srna, "initial_value", 0, 0, FLT_MAX, "Initial Value", "", 0, FLT_MAX);
@@ -2874,7 +2869,10 @@ void WM_OT_radial_control_partial(wmOperatorType *ot)
RNA_def_enum(ot->srna, "mode", radial_mode_items, 0, "Mode", "");
/* Internal */
- RNA_def_int_vector(ot->srna, "initial_mouse", 2, NULL, INT_MIN, INT_MAX, "initial_mouse", "", INT_MIN, INT_MAX);
+ RNA_def_int_vector(ot->srna, "initial_mouse", 2, NULL, INT_MIN, INT_MAX, "Initial Mouse", "", INT_MIN, INT_MAX);
+
+ RNA_def_float_color(ot->srna, "color", 4, color, 0.0f, FLT_MAX, "Color", "Radial control color", 0.0f, 1.0f);
+ RNA_def_float_color(ot->srna, "texture_color", 4, tex_color, 0.0f, FLT_MAX, "Texture Color", "Radial control texture color", 0.0f, 1.0f);
}
/* ************************** timer for testing ***************** */
diff --git a/source/blender/windowmanager/intern/wm_window.c b/source/blender/windowmanager/intern/wm_window.c
index e4bb5b797d3..4baad110232 100644
--- a/source/blender/windowmanager/intern/wm_window.c
+++ b/source/blender/windowmanager/intern/wm_window.c
@@ -67,13 +67,13 @@
GHOST_SystemHandle g_system= NULL;
/* set by commandline */
-static int prefsizx= 0, prefsizy= 0, prefstax= 0, prefstay= 0;
+static int prefsizx= 0, prefsizy= 0, prefstax= 0, prefstay= 0, initialstate= GHOST_kWindowStateNormal;
/* ******** win open & close ************ */
/* XXX this one should correctly check for apple top header...
done for Cocoa : returns window contents (and not frame) max size*/
-static void wm_get_screensize(int *width_r, int *height_r)
+void wm_get_screensize(int *width_r, int *height_r)
{
unsigned int uiwidth;
unsigned int uiheight;
@@ -289,19 +289,21 @@ void wm_window_title(wmWindowManager *wm, wmWindow *win)
}
/* belongs to below */
-static void wm_window_add_ghostwindow(wmWindowManager *wm, char *title, wmWindow *win)
+static void wm_window_add_ghostwindow(bContext *C, wmWindowManager *wm, char *title, wmWindow *win)
{
GHOST_WindowHandle ghostwin;
- GHOST_TWindowState inital_state;
int scr_w, scr_h, posy;
+ GHOST_TWindowState initial_state;
+
+ /* when there is no window open uses the initial state */
+ if(!CTX_wm_window(C))
+ initial_state= initialstate;
+ else
+ initial_state= GHOST_kWindowStateNormal;
wm_get_screensize(&scr_w, &scr_h);
posy= (scr_h - win->posy - win->sizey);
- // inital_state = GHOST_kWindowStateFullScreen;
- // inital_state = GHOST_kWindowStateMaximized;
- inital_state = GHOST_kWindowStateNormal;
-
#if defined(__APPLE__) && !defined(GHOST_COCOA)
{
extern int macPrefState; /* creator.c */
@@ -312,13 +314,16 @@ static void wm_window_add_ghostwindow(wmWindowManager *wm, char *title, wmWindow
doesn't work well when AA is initialized, even if not used. */
ghostwin= GHOST_CreateWindow(g_system, title,
win->posx, posy, win->sizex, win->sizey,
- inital_state,
+ initial_state,
GHOST_kDrawingContextTypeOpenGL,
0 /* no stereo */,
0 /* no AA */);
if (ghostwin) {
+ /* set the state*/
+ GHOST_SetWindowState(ghostwin, initial_state);
+
win->ghostwin= ghostwin;
GHOST_SetWindowUserData(ghostwin, win); /* pointer back */
@@ -342,7 +347,7 @@ static void wm_window_add_ghostwindow(wmWindowManager *wm, char *title, wmWindow
/* for wmWindows without ghostwin, open these and clear */
/* window size is read from window, if 0 it uses prefsize */
/* called in WM_check, also inits stuff after file read */
-void wm_window_add_ghostwindows(wmWindowManager *wm)
+void wm_window_add_ghostwindows(bContext* C, wmWindowManager *wm)
{
wmKeyMap *keymap;
wmWindow *win;
@@ -372,9 +377,9 @@ void wm_window_add_ghostwindows(wmWindowManager *wm)
win->posy= prefstay;
win->sizex= prefsizx;
win->sizey= prefsizy;
- win->windowstate= 0;
+ win->windowstate= initialstate;
}
- wm_window_add_ghostwindow(wm, "Blender", win);
+ wm_window_add_ghostwindow(C, wm, "Blender", win);
}
/* happens after fileread */
if(win->eventstate==NULL)
@@ -1106,6 +1111,17 @@ void WM_setprefsize(int stax, int stay, int sizx, int sizy)
prefsizy= sizy;
}
+/* for borderless and border windows set from command-line */
+void WM_setinitialstate_fullscreen()
+{
+ initialstate= GHOST_kWindowStateFullScreen;
+}
+
+void WM_setinitialstate_normal()
+{
+ initialstate= GHOST_kWindowStateNormal;
+}
+
/* This function requires access to the GHOST_SystemHandle (g_system) */
void WM_cursor_warp(wmWindow *win, int x, int y)
{
diff --git a/source/blender/windowmanager/wm_event_types.h b/source/blender/windowmanager/wm_event_types.h
index 6cb3971bd21..e4b56080b03 100644
--- a/source/blender/windowmanager/wm_event_types.h
+++ b/source/blender/windowmanager/wm_event_types.h
@@ -269,10 +269,11 @@
#define EVT_FILESELECT 0x5020
/* event->val */
-#define EVT_FILESELECT_OPEN 1
-#define EVT_FILESELECT_FULL_OPEN 2
-#define EVT_FILESELECT_EXEC 3
-#define EVT_FILESELECT_CANCEL 4
+#define EVT_FILESELECT_OPEN 1
+#define EVT_FILESELECT_FULL_OPEN 2
+#define EVT_FILESELECT_EXEC 3
+#define EVT_FILESELECT_CANCEL 4
+#define EVT_FILESELECT_EXTERNAL_CANCEL 5
/* event->type */
#define EVT_BUT_OPEN 0x5021
diff --git a/source/blender/windowmanager/wm_window.h b/source/blender/windowmanager/wm_window.h
index fa244036645..5a425df01e1 100644
--- a/source/blender/windowmanager/wm_window.h
+++ b/source/blender/windowmanager/wm_window.h
@@ -36,12 +36,14 @@ struct wmOperator;
void wm_ghost_init (bContext *C);
void wm_ghost_exit(void);
+void wm_get_screensize(int *width_r, int *height_r);
+
wmWindow *wm_window_new (bContext *C);
void wm_window_free (bContext *C, wmWindowManager *wm, wmWindow *win);
void wm_window_close (bContext *C, wmWindowManager *wm, wmWindow *win);
void wm_window_title (wmWindowManager *wm, wmWindow *win);
-void wm_window_add_ghostwindows (wmWindowManager *wm);
+void wm_window_add_ghostwindows (bContext *C, wmWindowManager *wm);
void wm_window_process_events (const bContext *C);
void wm_window_process_events_nosleep(const bContext *C);
diff --git a/source/blenderplayer/CMakeLists.txt b/source/blenderplayer/CMakeLists.txt
index 566bc88e46d..a61152d37ba 100644
--- a/source/blenderplayer/CMakeLists.txt
+++ b/source/blenderplayer/CMakeLists.txt
@@ -64,8 +64,8 @@ IF(UNIX)
SET(BLENDER_SORTED_LIBS
gp_ghost
gp_common
- bf_string
- bf_ghost
+ bf_intern_string
+ bf_intern_ghost
bf_rna
bf_blenkernel
bf_blenloader
@@ -82,11 +82,11 @@ IF(UNIX)
bf_expressions
bf_scenegraph
bf_ikplugin
- bf_ITASC
- bf_IK
- bf_smoke
+ bf_intern_itasc
+ bf_intern_ik
+ bf_intern_smoke
bf_modifiers
- bf_moto
+ bf_intern_moto
bf_kernel
bf_nodes
bf_gpu
@@ -96,23 +96,24 @@ IF(UNIX)
bf_ngnetwork
bf_loopbacknetwork
extern_bullet
- bf_guardedalloc
- bf_memutil
+ bf_intern_guardedalloc
+ bf_intern_memutil
bf_python
- bf_gen_python
+ bf_python_ext
bf_blenlib
bf_cineon
bf_openexr
- extern_libopenjpeg
+ extern_openjpeg
bf_dds
bf_readblenfile
bf_dna
bf_videotex
bf_blenfont
- bf_audaspace
+ bf_intern_audaspace
blenkernel_blc
extern_binreloc
extern_glew
+ extern_minilzo
)
IF(WITH_QUICKTIME)
@@ -120,7 +121,7 @@ IF(UNIX)
ENDIF(WITH_QUICKTIME)
IF(WITH_CXX_GUARDEDALLOC)
- SET(BLENDER_SORTED_LIBS ${BLENDER_SORTED_LIBS} bf_guardedalloc_cpp)
+ SET(BLENDER_SORTED_LIBS ${BLENDER_SORTED_LIBS} bf_intern_guardedalloc_cpp)
ENDIF(WITH_CXX_GUARDEDALLOC)
FOREACH(SORTLIB ${BLENDER_SORTED_LIBS})
diff --git a/source/blenderplayer/bad_level_call_stubs/CMakeLists.txt b/source/blenderplayer/bad_level_call_stubs/CMakeLists.txt
index 9a53997fd66..dbcf4d96942 100644
--- a/source/blenderplayer/bad_level_call_stubs/CMakeLists.txt
+++ b/source/blenderplayer/bad_level_call_stubs/CMakeLists.txt
@@ -34,8 +34,9 @@ ENDIF(WITH_BUILDINFO)
SET(INC
.
..
+ ../../../intern/guardedalloc
../../../source/blender/makesdna
- ../../../source/blender/makesrna
+ ../../../source/blender/makesrna
)
IF(WITH_GAMEENGINE)
diff --git a/source/blenderplayer/bad_level_call_stubs/Makefile b/source/blenderplayer/bad_level_call_stubs/Makefile
index 1d9f6a27327..49efd08c710 100644
--- a/source/blenderplayer/bad_level_call_stubs/Makefile
+++ b/source/blenderplayer/bad_level_call_stubs/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
# All rights reserved.
diff --git a/source/blenderplayer/bad_level_call_stubs/SConscript b/source/blenderplayer/bad_level_call_stubs/SConscript
index aa84b88932e..5d71f83719f 100644
--- a/source/blenderplayer/bad_level_call_stubs/SConscript
+++ b/source/blenderplayer/bad_level_call_stubs/SConscript
@@ -3,7 +3,8 @@ Import ('env')
sources = 'stubs.c'
-incs = '#/source/blender/makesdna'
+incs = '#/intern/guardedalloc'
+incs += ' #/source/blender/makesdna'
incs += ' #/source/blender/makesrna'
defs = ''
@@ -11,6 +12,6 @@ if env['WITH_BF_INTERNATIONAL']:
defs += 'WITH_FREETYPE2'
if env['WITH_BF_GAMEENGINE']:
- defs += ' GAMEBLENDER=1'
+ defs += ' GAMEBLENDER=1'
env.BlenderLib ('blenkernel_blc', sources = Split(sources), includes=Split(incs), defines=Split(defs), libtype=['player'],priority=[220] )
diff --git a/source/blenderplayer/bad_level_call_stubs/stubs.c b/source/blenderplayer/bad_level_call_stubs/stubs.c
index 6400628fb08..b341f798478 100644
--- a/source/blenderplayer/bad_level_call_stubs/stubs.c
+++ b/source/blenderplayer/bad_level_call_stubs/stubs.c
@@ -112,10 +112,10 @@ struct RenderResult *RE_GetResult(struct Render *re){return (struct RenderResult
struct Render *RE_GetRender(const char *name){return (struct Render *) NULL;}
/* blenkernel */
-char* btempdir(){return (char *) NULL;}
+char btempdir[] = "";
void RE_FreeRenderResult(struct RenderResult *res){}
-char* datatoc_bmonofont_ttf(){return (char *) NULL;}
-int datatoc_bmonofont_ttf_size(){return 0;}
+char datatoc_bmonofont_ttf[] = "";
+int datatoc_bmonofont_ttf_size = 0;
struct RenderResult *RE_MultilayerConvert(void *exrhandle, int rectx, int recty){return (struct RenderResult *) NULL;}
void RE_GetResultImage(struct Render *re, struct RenderResult *rr){}
int RE_RenderInProgress(struct Render *re){return 0;}
@@ -145,6 +145,9 @@ void WM_operator_stack_clear(struct bContext *C) {}
void WM_autosave_init(struct bContext *C){}
void WM_jobs_stop_all(struct wmWindowManager *wm){}
+char *WM_clipboard_text_get(int selection){return (char*)0;}
+void WM_clipboard_text_set(char *buf, int selection){}
+
struct wmKeyMapItem *WM_keymap_item_find_id(struct wmKeyMap *keymap, int id){return (struct wmKeyMapItem *) NULL;}
int WM_enum_search_invoke(struct bContext *C, struct wmOperator *op, struct wmEvent *event){return 0;}
void WM_event_add_notifier(const struct bContext *C, unsigned int type, void *reference){}
@@ -182,8 +185,8 @@ struct wmKeyMap *WM_keymap_find(struct wmKeyConfig *keyconf, char *idname, int s
struct wmKeyMap *WM_keymap_add_item(struct wmKeyMap *keymap, char *idname, int type, int val, int modifier, int keymodifier){return (struct wmKeyMap *) NULL;}
struct wmKeyMap *WM_keymap_copy_to_user(struct wmKeyMap *kemap){return (struct wmKeyMap *) NULL;}
struct wmKeyMap *WM_keymap_list_find(struct ListBase *lb, char *idname, int spaceid, int regionid){return (struct wmKeyMap *) NULL;}
-struct wmKeyConfig *WM_keyconfig_add(struct wmWindowManager *wm, char *idname){return (struct wmKeyConfig *) NULL;}
-struct wmKeyConfig *WM_keyconfig_add_user(struct wmWindowManager *wm, char *idname){return (struct wmKeyConfig *) NULL;}
+struct wmKeyConfig *WM_keyconfig_new(struct wmWindowManager *wm, char *idname){return (struct wmKeyConfig *) NULL;}
+struct wmKeyConfig *WM_keyconfig_new_user(struct wmWindowManager *wm, char *idname){return (struct wmKeyConfig *) NULL;}
void WM_keyconfig_remove(struct wmWindowManager *wm, char *idname){}
void WM_keymap_remove_item(struct wmKeyMap *keymap, struct wmKeyMapItem *kmi){}
void WM_keymap_restore_to_default(struct wmKeyMap *keymap){}
@@ -245,6 +248,10 @@ void ED_mesh_geometry_add(struct Mesh *mesh, struct ReportList *reports, int ver
void ED_mesh_material_add(struct Mesh *me, struct Material *ma){}
void ED_mesh_transform(struct Mesh *me, float *mat){}
void ED_mesh_update(struct Mesh *mesh, struct bContext *C){}
+void ED_mesh_vertices_add(struct Mesh *mesh, struct ReportList *reports, int count){}
+void ED_mesh_edges_add(struct Mesh *mesh, struct ReportList *reports, int count){}
+void ED_mesh_faces_add(struct Mesh *mesh, struct ReportList *reports, int count){}
+void ED_mesh_material_link(struct Mesh *mesh, struct Material *ma){}
int ED_mesh_color_add(struct bContext *C, struct Scene *scene, struct Object *ob, struct Mesh *me){return 0;}
int ED_mesh_uv_texture_add(struct bContext *C, struct Scene *scene, struct Object *ob, struct Mesh *me){return 0;}
void ED_object_constraint_dependency_update(struct Scene *scene, struct Object *ob){}
@@ -264,6 +271,13 @@ struct MTFace *EM_get_active_mtface(struct EditMesh *em, struct EditFace **act_e
void make_editMesh(struct Scene *scene, struct Object *ob){}
void load_editMesh(struct Scene *scene, struct Object *ob){}
+void make_editLatt(struct Object *obedit){}
+void load_editLatt(struct Object *obedit){}
+
+void load_editNurb (struct Object *obedit){}
+void make_editNurb (struct Object *obedit){}
+
+
void uiItemR(struct uiLayout *layout, struct PointerRNA *ptr, char *propname, int flag, char *name, int icon){}
struct PointerRNA uiItemFullO(struct uiLayout *layout, char *idname, char *name, int icon, struct IDProperty *properties, int context, int flag){struct PointerRNA a; return a;}
@@ -276,6 +290,7 @@ void uiItemsEnumR(struct uiLayout *layout, struct PointerRNA *ptr, char *propnam
void uiItemMenuEnumR(struct uiLayout *layout, struct PointerRNA *ptr, char *propname, char *name, int icon){}
void uiItemEnumR_string(struct uiLayout *layout, struct PointerRNA *ptr, char *propname, char *value, char *name, int icon){}
void uiItemPointerR(struct uiLayout *layout, struct PointerRNA *ptr, char *propname, struct PointerRNA *searchptr, char *searchpropname, char *name, int icon){}
+void uiItemPointerSubR(struct uiLayout *layout, struct PointerRNA *ptr, char *propname, char *searchpropname, char *name, int icon){}
void uiItemsEnumO(struct uiLayout *layout, char *opname, char *propname){}
void uiItemEnumO_string(struct uiLayout *layout, char *name, int icon, char *opname, char *propname, char *value_str){}
void uiItemMenuEnumO(struct uiLayout *layout, char *opname, char *propname, char *name, int icon){}
@@ -302,7 +317,6 @@ void uiTemplateIDPreview(struct uiLayout *layout, struct bContext *C, struct Poi
void uiTemplateCurveMapping(struct uiLayout *layout, struct CurveMapping *cumap, int type, int compact){}
void uiTemplateColorRamp(struct uiLayout *layout, struct ColorBand *coba, int expand){}
void uiTemplateLayers(struct uiLayout *layout, struct PointerRNA *ptr, char *propname){}
-void uiTemplateTriColorSet(struct uiLayout *layout, struct PointerRNA *ptr, char *propname){}
void uiTemplateImageLayers(struct uiLayout *layout, struct bContext *C, struct Image *ima, struct ImageUser *iuser){}
ListBase uiTemplateList(struct uiLayout *layout, struct bContext *C, struct PointerRNA *ptr, char *propname, struct PointerRNA *activeptr, char *activepropname, int rows, int listtype){struct ListBase b = {0,0}; return b;}
void uiTemplateRunningJobs(struct uiLayout *layout, struct bContext *C){}
diff --git a/source/creator/CMakeLists.txt b/source/creator/CMakeLists.txt
index cec5793ae97..8b5e1a26f41 100644
--- a/source/creator/CMakeLists.txt
+++ b/source/creator/CMakeLists.txt
@@ -82,12 +82,6 @@ IF(NOT WITH_SDL)
ADD_DEFINITIONS(-DDISABLE_SDL)
ENDIF(NOT WITH_SDL)
-IF(UNIX AND NOT APPLE)
- SET(BLENDERPATH ${CMAKE_INSTALL_PREFIX}/share/blender/${BLENDER_VERSION})
- # blender_path in creator.c
- ADD_DEFINITIONS(-DBLENDERPATH="${BLENDERPATH}")
-ENDIF(UNIX AND NOT APPLE)
-
IF(CMAKE_SYSTEM_NAME MATCHES "Linux")
ADD_DEFINITIONS(-DWITH_BINRELOC)
INCLUDE_DIRECTORIES(${BINRELOC_INC})
@@ -97,17 +91,19 @@ ENDIF(CMAKE_SYSTEM_NAME MATCHES "Linux")
SET(EXESRC creator.c)
IF(WIN32)
- SET(EXESRC ${EXESRC} ../icons/winblender.rc)
+ LIST(APPEND EXESRC ../icons/winblender.rc)
ENDIF(WIN32)
IF(WITH_BUILDINFO)
- ADD_DEFINITIONS(-DBUILD_DATE="${BUILD_DATE}")
- ADD_DEFINITIONS(-DBUILD_TIME="${BUILD_TIME}")
- ADD_DEFINITIONS(-DBUILD_REV="${BUILD_REV}")
- ADD_DEFINITIONS(-DBUILD_PLATFORM="${CMAKE_SYSTEM_NAME}")
- ADD_DEFINITIONS(-DBUILD_TYPE="${CMAKE_BUILD_TYPE}")
-
- SET(EXESRC ${EXESRC} buildinfo.c)
+ ADD_DEFINITIONS(
+ -DBUILD_DATE="${BUILD_DATE}"
+ -DBUILD_TIME="${BUILD_TIME}"
+ -DBUILD_REV="${BUILD_REV}"
+ -DBUILD_PLATFORM="${CMAKE_SYSTEM_NAME}"
+ -DBUILD_TYPE="${CMAKE_BUILD_TYPE}"
+ )
+
+ LIST(APPEND EXESRC buildinfo.c)
ENDIF(WITH_BUILDINFO)
MESSAGE(STATUS "Configuring blender")
@@ -139,7 +135,7 @@ IF(WITH_INSTALL)
COMMAND mkdir ${TARGETDIR}/${BLENDER_VERSION}/
COMMAND cp ${CMAKE_SOURCE_DIR}/release/bin/.blender/.bfont.ttf ${TARGETDIR}/${BLENDER_VERSION}/
)
-
+
IF(WITH_INTERNATIONAL)
ADD_CUSTOM_COMMAND(
TARGET blender POST_BUILD MAIN_DEPENDENCY blender
@@ -147,7 +143,7 @@ IF(WITH_INSTALL)
COMMAND cp -R ${CMAKE_SOURCE_DIR}/release/bin/.blender/locale ${TARGETDIR}/${BLENDER_VERSION}/
)
ENDIF(WITH_INTERNATIONAL)
-
+
IF(WITH_PYTHON)
ADD_CUSTOM_COMMAND(
TARGET blender POST_BUILD MAIN_DEPENDENCY blender
@@ -173,7 +169,7 @@ IF(WITH_INSTALL)
COMMAND rm -rf ${TARGETDIR}/${BLENDER_VERSION}/python/lib/python${PYTHON_VERSION}/config
COMMAND rm -rf ${TARGETDIR}/${BLENDER_VERSION}/python/lib/python${PYTHON_VERSION}/site-packages
- COMMAND mkdir ${TARGETDIR}/${BLENDER_VERSION}/python/lib/python${PYTHON_VERSION}/site-packages # python needs it.
+ COMMAND mkdir ${TARGETDIR}/${BLENDER_VERSION}/python/lib/python${PYTHON_VERSION}/site-packages # python needs it.
COMMAND rm -f ${TARGETDIR}/${BLENDER_VERSION}/python/lib/python${PYTHON_VERSION}/lib-dynload/_tkinter.so
COMMAND find ${TARGETDIR}/${BLENDER_VERSION}/python/lib/python${PYTHON_VERSION} -name "test" -prune -exec rm -rf {} "\;"
@@ -182,13 +178,13 @@ IF(WITH_INSTALL)
)
ENDIF(WITH_PYTHON_INSTALL)
ENDIF(WITH_PYTHON)
-
+
ADD_CUSTOM_COMMAND(
TARGET blender POST_BUILD MAIN_DEPENDENCY blender
COMMAND find ${TARGETDIR} -name .svn -prune -exec rm -rf {} "\;"
)
-
-
+
+
# Above we bundle a portable distribution in ./bin
# This is an optional "make install" which installs blender on the system.
INSTALL(
@@ -204,47 +200,47 @@ IF(WITH_INSTALL)
ENDIF(WITH_GAMEENGINE AND WITH_PLAYER)
INSTALL(
- FILES ${CMAKE_SOURCE_DIR}/release/freedesktop/blender.desktop
- DESTINATION ${CMAKE_INSTALL_PREFIX}/share/applications
- )
+ FILES ${CMAKE_SOURCE_DIR}/release/freedesktop/blender.desktop
+ DESTINATION ${CMAKE_INSTALL_PREFIX}/share/applications
+ )
INSTALL(
- FILES ${CMAKE_SOURCE_DIR}/release/freedesktop/icons/scalable/blender.svg
- DESTINATION ${CMAKE_INSTALL_PREFIX}/share/pixmaps
- )
+ FILES ${CMAKE_SOURCE_DIR}/release/freedesktop/icons/scalable/blender.svg
+ DESTINATION ${CMAKE_INSTALL_PREFIX}/share/pixmaps
+ )
INSTALL(
PROGRAMS ${CMAKE_SOURCE_DIR}/release/bin/blender-thumbnailer.py
DESTINATION ${CMAKE_INSTALL_PREFIX}/bin
)
INSTALL(
- FILES ${CMAKE_SOURCE_DIR}/doc/blender.1
- DESTINATION ${CMAKE_INSTALL_PREFIX}/share/man/man1
- )
+ FILES ${CMAKE_SOURCE_DIR}/doc/blender.1
+ DESTINATION ${CMAKE_INSTALL_PREFIX}/share/man/man1
+ )
INSTALL(
- DIRECTORY ${CMAKE_SOURCE_DIR}/release/text/
- DESTINATION ${CMAKE_INSTALL_PREFIX}/share/doc/blender
- PATTERN ".svn" EXCLUDE
- )
+ DIRECTORY ${CMAKE_SOURCE_DIR}/release/text/
+ DESTINATION ${CMAKE_INSTALL_PREFIX}/share/doc/blender
+ PATTERN ".svn" EXCLUDE
+ )
INSTALL(
- DIRECTORY ${CMAKE_SOURCE_DIR}/release/scripts/
- DESTINATION ${BLENDERPATH}/scripts
- PATTERN ".svn" EXCLUDE
+ DIRECTORY ${CMAKE_SOURCE_DIR}/release/scripts/
+ DESTINATION ${CMAKE_INSTALL_PREFIX}/share/blender/${BLENDER_VERSION}/scripts
+ PATTERN ".svn" EXCLUDE
PATTERN "*.pyc" EXCLUDE
- )
+ )
INSTALL(
DIRECTORY ${CMAKE_SOURCE_DIR}/release/datafiles/brushicons/
- DESTINATION ${BLENDERPATH}/datafiles/brushicons
+ DESTINATION ${CMAKE_INSTALL_PREFIX}/share/blender/${BLENDER_VERSION}/datafiles/brushicons
PATTERN ".svn" EXCLUDE
)
IF(WITH_INTERNATIONAL)
INSTALL(
- DIRECTORY ${CMAKE_SOURCE_DIR}/release/bin/.blender/locale/
- DESTINATION ${BLENDERPATH}/datafiles/locale
- PATTERN ".svn" EXCLUDE
- )
+ DIRECTORY ${CMAKE_SOURCE_DIR}/release/bin/.blender/locale/
+ DESTINATION ${CMAKE_INSTALL_PREFIX}/share/blender/${BLENDER_VERSION}/datafiles/locale
+ PATTERN ".svn" EXCLUDE
+ )
ENDIF(WITH_INTERNATIONAL)
-
+
# end "make install"
-
+
ENDIF(UNIX AND NOT APPLE)
IF(APPLE)
@@ -262,7 +258,7 @@ IF(WITH_INSTALL)
COMMAND mkdir ${TARGETDIR}/blender.app/Contents/MacOS/datafiles/
COMMAND cp ${CMAKE_SOURCE_DIR}/release/bin/.blender/.bfont.ttf ${TARGETDIR}/blender.app/Contents/MacOS/datafiles/
)
-
+
IF(WITH_INTERNATIONAL)
ADD_CUSTOM_COMMAND(
TARGET blender POST_BUILD MAIN_DEPENDENCY blender
@@ -270,7 +266,7 @@ IF(WITH_INSTALL)
COMMAND cp -Rf ${CMAKE_SOURCE_DIR}/release/bin/.blender/locale ${TARGETDIR}/blender.app/Contents/MacOS/datafiles/
)
ENDIF(WITH_INTERNATIONAL)
-
+
IF(WITH_PYTHON)
SET(PYTHON_ZIP "python_${CMAKE_OSX_ARCHITECTURES}.zip")
ADD_CUSTOM_COMMAND(
@@ -281,13 +277,13 @@ IF(WITH_INSTALL)
COMMAND unzip -q ${LIBDIR}/release/${PYTHON_ZIP} -d ${TARGETDIR}/blender.app/Contents/MacOS/python/
COMMAND find ${TARGETDIR}/blender.app -name "*.py?" -prune -exec rm -rf {} "\;"
)
- ENDIF(WITH_PYTHON)
-
+ ENDIF(WITH_PYTHON)
+
ADD_CUSTOM_COMMAND(
- TARGET blender POST_BUILD MAIN_DEPENDENCY blender
+ TARGET blender POST_BUILD MAIN_DEPENDENCY blender
COMMAND find ${TARGETDIR}/blender.app -name .DS_Store -prune -exec rm -rf {} "\;"
COMMAND find ${TARGETDIR}/blender.app -name .svn -prune -exec rm -rf {} "\;"
- COMMAND find ${TARGETDIR}/blender.app -name __MACOSX -prune -exec rm -rf {} "\;"
+ COMMAND find ${TARGETDIR}/blender.app -name __MACOSX -prune -exec rm -rf {} "\;"
)
ENDIF(APPLE)
@@ -295,41 +291,99 @@ IF(WITH_INSTALL)
ADD_CUSTOM_COMMAND(TARGET blender
POST_BUILD
MAIN_DEPENDENCY blender
- COMMAND if not exist \"${TARGETDIR}\\.blender\" mkdir \"${TARGETDIR}\\.blender\"
- COMMAND if not exist \"${TARGETDIR}\\.blender\\locale\" mkdir \"${TARGETDIR}\\.blender\\locale\"
- COMMAND if not exist \"${TARGETDIR}\\.blender\\scripts\" mkdir \"${TARGETDIR}\\.blender\\scripts\"
+ COMMAND if not exist \"${TARGETDIR}\\${BLENDER_VERSION}\" mkdir \"${TARGETDIR}\\${BLENDER_VERSION}\"
+ COMMAND if not exist \"${TARGETDIR}\\${BLENDER_VERSION}\\scripts\" mkdir \"${TARGETDIR}\\${BLENDER_VERSION}\\scripts\"
+ COMMAND if not exist \"${TARGETDIR}\\${BLENDER_VERSION}\\config\" mkdir \"${TARGETDIR}\\${BLENDER_VERSION}\\config\"
COMMAND if not exist \"${TARGETDIR}\\plugins\" mkdir \"${TARGETDIR}\\plugins\"
- COMMAND copy /Y \"${CMAKE_SOURCE_DIR}\\release\\bin\\.blender\\.Blanguages\" \"${TARGETDIR}\\.blender\\\"
- COMMAND copy /Y \"${CMAKE_SOURCE_DIR}\\release\\bin\\.blender\\.bfont.ttf\" \"${TARGETDIR}\\.blender\\\"
- COMMAND xcopy /E /Y \"${CMAKE_SOURCE_DIR}\\release\\bin\\.blender\\locale\\*.*\" \"${TARGETDIR}\\.blender\\locale\"
- COMMAND xcopy /E /Y \"${CMAKE_SOURCE_DIR}\\release\\scripts\\*.*\" \"${TARGETDIR}\\.blender\\scripts\"
- COMMAND xcopy /E /Y \"${CMAKE_SOURCE_DIR}\\release\\plugins\\*.*\" \"${TARGETDIR}\\plugins\"
- COMMAND copy /Y \"${CMAKE_SOURCE_DIR}\\release\\text\\*.*\" \"${TARGETDIR}\"
- # TODO, copy python bundle
- # COMMAND copy /Y \"${CMAKE_SOURCE_DIR}\\release\\windows\\extra\\python31.zip\" \"${TARGETDIR}\\\"
+ COMMAND copy /Y \"${CMAKE_SOURCE_DIR}\\release\\bin\\.blender\\.bfont.ttf\" \"${TARGETDIR}\\${BLENDER_VERSION}\\config\\\"
+ COMMAND xcopy /E /Y \"${CMAKE_SOURCE_DIR}\\release\\scripts\\*.*\" \"${TARGETDIR}\\${BLENDER_VERSION}\\scripts\\\"
+ COMMAND xcopy /E /Y \"${CMAKE_SOURCE_DIR}\\release\\plugins\\*.*\" \"${TARGETDIR}\\${BLENDER_VERSION}\\plugins\\\"
+ COMMAND copy /Y \"${CMAKE_SOURCE_DIR}\\release\\text\\*.*\" \"${TARGETDIR}\\\"
)
-
- ADD_CUSTOM_COMMAND(TARGET blender
- POST_BUILD
- MAIN_DEPENDENCY blender
- COMMAND copy /Y \"${LIBDIR}\\release\\python31.zip\" \"${TARGETDIR}\\\"
- COMMAND copy /Y \"${LIBDIR}\\release\\python31.zip\" \"${TARGETDIR}\\python31_d.zip\"
- COMMAND copy /Y \"${LIBDIR}\\gettext\\lib\\gnu_gettext.dll\" \"${TARGETDIR}\\\"
- COMMAND copy /Y \"${LIBDIR}\\png\\lib\\libpng.dll\" \"${TARGETDIR}\\\"
- COMMAND copy /Y \"${LIBDIR}\\sdl\\lib\\SDL.dll\" \"${TARGETDIR}\\\"
- COMMAND copy /Y \"${LIBDIR}\\zlib\\lib\\zlib.dll\" \"${TARGETDIR}\\\"
- COMMAND copy /Y \"${LIBDIR}\\python\\lib\\python31.dll\" \"${TARGETDIR}\\\"
- COMMAND copy /Y \"${LIBDIR}\\python\\lib\\python31_d.dll\" \"${TARGETDIR}\\\"
- COMMAND copy /Y \"${LIBDIR}\\pthreads\\lib\\pthreadVC2.dll\" \"${TARGETDIR}\\\"
- # COMMAND copy /Y \"${LIBDIR}\\samplerate\\lib\\libsamplerate-0.dll\" \"${TARGETDIR}\\\"
- )
-
- IF(WITH_INTERNATIONAL)
+
+ IF(CMAKE_CL_64)
+ # gettext and png are statically linked on win64
ADD_CUSTOM_COMMAND(TARGET blender
POST_BUILD
MAIN_DEPENDENCY blender
- COMMAND copy /Y \"${LIBDIR}\\iconv\\lib\\iconv.dll\" \"${TARGETDIR}\\\"
+ COMMAND copy /Y \"${LIBDIR}\\zlib\\lib\\zlib.dll\" \"${TARGETDIR}\\\"
+ # COMMAND copy /Y \"${LIBDIR}\\samplerate\\lib\\libsamplerate-0.dll\" \"${TARGETDIR}\\\"
)
+ ELSE(CMAKE_CL_64)
+ ADD_CUSTOM_COMMAND(TARGET blender
+ POST_BUILD
+ MAIN_DEPENDENCY blender
+ COMMAND copy /Y \"${LIBDIR}\\gettext\\lib\\gnu_gettext.dll\" \"${TARGETDIR}\\\"
+ COMMAND copy /Y \"${LIBDIR}\\png\\lib\\libpng.dll\" \"${TARGETDIR}\\\"
+ COMMAND copy /Y \"${LIBDIR}\\zlib\\lib\\zlib.dll\" \"${TARGETDIR}\\\"
+ # COMMAND copy /Y \"${LIBDIR}\\samplerate\\lib\\libsamplerate-0.dll\" \"${TARGETDIR}\\\"
+ )
+ ENDIF(CMAKE_CL_64)
+
+
+ IF(MSVC)
+ ADD_CUSTOM_COMMAND(TARGET blender
+ POST_BUILD
+ MAIN_DEPENDENCY blender
+ COMMAND copy /Y \"${LIBDIR}\\pthreads\\lib\\pthreadVC2.dll\" \"${TARGETDIR}\\\"
+ )
+ ELSE(MSVC)
+ ADD_CUSTOM_COMMAND(TARGET blender
+ POST_BUILD
+ MAIN_DEPENDENCY blender
+ COMMAND copy /Y \"${LIBDIR}\\pthreads\\lib\\pthreadGC2.dll\" \"${TARGETDIR}\\\"
+ )
+ ENDIF(MSVC)
+
+ IF(WITH_PYTHON)
+ IF(NOT CMAKE_BUILD_TYPE) # hack: with multi-configuration generator this is "", so for now copy both python31.dll/zip and python31_d.dll/zip
+ ADD_CUSTOM_COMMAND(TARGET blender
+ POST_BUILD
+ MAIN_DEPENDENCY blender
+ COMMAND copy /Y \"${LIBDIR}\\python\\lib\\python31_d.dll\" \"${TARGETDIR}\\\"
+ COMMAND copy /Y \"${LIBDIR}\\release\\python31_d.zip\" \"${TARGETDIR}\\\"
+ COMMAND copy /Y \"${LIBDIR}\\python\\lib\\python31.dll\" \"${TARGETDIR}\\\"
+ COMMAND copy /Y \"${LIBDIR}\\release\\python31.zip\" \"${TARGETDIR}\\\"
+ )
+ ELSE(NOT CMAKE_BUILD_TYPE)
+ IF(CMAKE_BUILD_TYPE STREQUAL Debug OR CMAKE_BUILD_TYPE STREQUAL RelWithDebInfo)
+ ADD_CUSTOM_COMMAND(TARGET blender
+ POST_BUILD
+ MAIN_DEPENDENCY blender
+ COMMAND copy /Y \"${LIBDIR}\\python\\lib\\python31_d.dll\" \"${TARGETDIR}\\\"
+ COMMAND copy /Y \"${LIBDIR}\\release\\python31_d.zip\" \"${TARGETDIR}\\\"
+ )
+ ELSE(CMAKE_BUILD_TYPE STREQUAL Debug OR CMAKE_BUILD_TYPE STREQUAL RelWithDebInfo)
+ ADD_CUSTOM_COMMAND(TARGET blender
+ POST_BUILD
+ MAIN_DEPENDENCY blender
+ COMMAND copy /Y \"${LIBDIR}\\python\\lib\\python31.dll\" \"${TARGETDIR}\\\"
+ COMMAND copy /Y \"${LIBDIR}\\release\\python31.zip\" \"${TARGETDIR}\\\"
+ )
+ ENDIF(CMAKE_BUILD_TYPE STREQUAL Debug OR CMAKE_BUILD_TYPE STREQUAL RelWithDebInfo)
+ ENDIF(NOT CMAKE_BUILD_TYPE)
+ ENDIF(WITH_PYTHON)
+
+ IF(WITH_INTERNATIONAL)
+ IF(CMAKE_CL_64)
+ # iconv is statically linked on win64
+ ADD_CUSTOM_COMMAND(TARGET blender
+ POST_BUILD
+ MAIN_DEPENDENCY blender
+ COMMAND if not exist \"${TARGETDIR}\\${BLENDER_VERSION}\\config\\locale\" mkdir \"${TARGETDIR}\\${BLENDER_VERSION}\\config\\locale\"
+ COMMAND copy /Y \"${CMAKE_SOURCE_DIR}\\release\\bin\\.blender\\.Blanguages\" \"${TARGETDIR}\\${BLENDER_VERSION}\\config\\\"
+ COMMAND xcopy /E /Y \"${CMAKE_SOURCE_DIR}\\release\\bin\\.blender\\locale\\*.*\" \"${TARGETDIR}\\${BLENDER_VERSION}\\config\\locale\\\"
+ )
+ ELSE(CMAKE_CL_64)
+ ADD_CUSTOM_COMMAND(TARGET blender
+ POST_BUILD
+ MAIN_DEPENDENCY blender
+ COMMAND copy /Y \"${LIBDIR}\\iconv\\lib\\iconv.dll\" \"${TARGETDIR}\\\"
+ COMMAND if not exist \"${TARGETDIR}\\${BLENDER_VERSION}\\config\\locale\" mkdir \"${TARGETDIR}\\${BLENDER_VERSION}\\config\\locale\"
+ COMMAND copy /Y \"${CMAKE_SOURCE_DIR}\\release\\bin\\.blender\\.Blanguages\" \"${TARGETDIR}\\${BLENDER_VERSION}\\config\\\"
+ COMMAND xcopy /E /Y \"${CMAKE_SOURCE_DIR}\\release\\bin\\.blender\\locale\\*.*\" \"${TARGETDIR}\\${BLENDER_VERSION}\\config\\locale\\\"
+ )
+ ENDIF(CMAKE_CL_64)
ENDIF(WITH_INTERNATIONAL)
IF(WITH_FFMPEG)
@@ -375,6 +429,15 @@ IF(WITH_INSTALL)
)
ENDIF(WITH_OPENAL)
+ IF(WITH_SDL)
+ IF(NOT CMAKE_CL_64)
+ ADD_CUSTOM_COMMAND(TARGET blender
+ POST_BUILD
+ MAIN_DEPENDENCY blender
+ COMMAND copy /Y \"${LIBDIR}\\sdl\\lib\\SDL.dll\" \"${TARGETDIR}\\\"
+ )
+ ENDIF(NOT CMAKE_CL_64)
+ ENDIF(WITH_SDL)
ENDIF(WIN32)
ENDIF(WITH_INSTALL)
@@ -383,14 +446,14 @@ ADD_DEPENDENCIES(blender makesdna)
FILE(READ ${CMAKE_BINARY_DIR}/cmake_blender_libs.txt BLENDER_LINK_LIBS)
-SET(BLENDER_LINK_LIBS bf_nodes ${BLENDER_LINK_LIBS} bf_windowmanager blender_render)
+SET(BLENDER_LINK_LIBS bf_nodes ${BLENDER_LINK_LIBS} bf_windowmanager bf_render)
IF(WITH_FLUID)
- SET(BLENDER_LINK_LIBS ${BLENDER_LINK_LIBS} bf_elbeem)
+ LIST(APPEND BLENDER_LINK_LIBS bf_intern_elbeem)
ENDIF(WITH_FLUID)
IF(CMAKE_SYSTEM_NAME MATCHES "Linux")
- SET(BLENDER_LINK_LIBS ${BLENDER_LINK_LIBS} extern_binreloc)
+ LIST(APPEND BLENDER_LINK_LIBS extern_binreloc)
ENDIF(CMAKE_SYSTEM_NAME MATCHES "Linux")
#IF(UNIX)
@@ -398,49 +461,49 @@ ENDIF(CMAKE_SYSTEM_NAME MATCHES "Linux")
SET(BLENDER_SORTED_LIBS
bf_windowmanager
- bf_editor_space_api
- bf_editor_space_action
- bf_editor_space_buttons
- bf_editor_space_console
- bf_editor_space_file
- bf_editor_space_graph
- bf_editor_space_image
- bf_editor_space_info
- bf_editor_space_logic
- bf_editor_space_nla
- bf_editor_space_node
- bf_editor_space_outliner
- bf_editor_space_script
- bf_editor_space_sequencer
- bf_editor_space_sound
- bf_editor_space_time
- bf_editor_space_userpref
- bf_editor_space_view3d
-
- bf_editor_text
- bf_editor_transform
- bf_editor_util
- bf_editor_uvedit
- bf_editor_curve
- bf_editor_armature
- bf_editor_gpencil
- bf_editor_interface
- bf_editor_mesh
- bf_editor_metaball
- bf_editor_object
- bf_editor_physics
- bf_editor_render
- bf_editor_screen
- bf_editor_sculpt_paint
- bf_editor_sound
- bf_editor_animation
- bf_editor_datafiles
-
- blender_BSP
- blender_render
- blender_ONL
+ bf_editor_space_api
+ bf_editor_space_action
+ bf_editor_space_buttons
+ bf_editor_space_console
+ bf_editor_space_file
+ bf_editor_space_graph
+ bf_editor_space_image
+ bf_editor_space_info
+ bf_editor_space_logic
+ bf_editor_space_nla
+ bf_editor_space_node
+ bf_editor_space_outliner
+ bf_editor_space_script
+ bf_editor_space_sequencer
+ bf_editor_space_sound
+ bf_editor_space_time
+ bf_editor_space_userpref
+ bf_editor_space_view3d
+
+ bf_editor_text
+ bf_editor_transform
+ bf_editor_util
+ bf_editor_uvedit
+ bf_editor_curve
+ bf_editor_armature
+ bf_editor_gpencil
+ bf_editor_interface
+ bf_editor_mesh
+ bf_editor_metaball
+ bf_editor_object
+ bf_editor_physics
+ bf_editor_render
+ bf_editor_screen
+ bf_editor_sculpt_paint
+ bf_editor_sound
+ bf_editor_animation
+ bf_editor_datafiles
+
+ bf_intern_bsp
+ bf_render
+ bf_intern_opennl
bf_python
- bf_gen_python
+ bf_python_ext
bf_ikplugin
bf_modifiers
bf_blenkernel
@@ -448,8 +511,8 @@ ENDIF(CMAKE_SYSTEM_NAME MATCHES "Linux")
bf_gpu
bf_blenloader
bf_blenlib
- bf_ghost
- bf_string
+ bf_intern_ghost
+ bf_intern_string
bf_blenpluginapi
bf_imbuf
bf_avi
@@ -458,24 +521,24 @@ ENDIF(CMAKE_SYSTEM_NAME MATCHES "Linux")
bf_dds
bf_readblenfile
bf_collada
- blender_BSP
- blender_bop
+ bf_intern_bsp
+ bf_intern_bop
bf_kernel
- bf_decimation
- bf_elbeem
- bf_IK
- bf_memutil
- bf_guardedalloc
- blender_CTR
- bf_moto
+ bf_intern_decimate
+ bf_intern_elbeem
+ bf_intern_ik
+ bf_intern_memutil
+ bf_intern_guardedalloc
+ bf_intern_ctr
+ bf_intern_moto
bf_windowmanager
bf_blroutines
bf_converter
bf_dummy
bf_bullet
- bf_smoke
- bf_minilzo
- bf_lzma
+ bf_intern_smoke
+ extern_minilzo
+ extern_lzma
bf_common
bf_ketsji
bf_logic
@@ -483,37 +546,41 @@ ENDIF(CMAKE_SYSTEM_NAME MATCHES "Linux")
bf_oglrasterizer
bf_expressions
bf_scenegraph
- bf_moto
+ bf_intern_moto
bf_blroutines
kx_network
bf_kernel
bf_ngnetwork
extern_bullet
bf_loopbacknetwork
- bf_ITASC
+ bf_intern_itasc
bf_common
- bf_moto
+ bf_intern_moto
bf_python
- bf_gen_python
+ bf_python_ext
extern_binreloc
extern_glew
- extern_libopenjpeg
+ extern_openjpeg
extern_recastnavigation
bf_videotex
bf_rna
bf_dna
bf_blenfont
- bf_audaspace
- bf_decimation
+ bf_intern_audaspace
+ bf_intern_decimate
)
IF(WITH_CXX_GUARDEDALLOC)
- SET(BLENDER_SORTED_LIBS ${BLENDER_SORTED_LIBS} bf_guardedalloc_cpp)
+ LIST(APPEND BLENDER_SORTED_LIBS bf_intern_guardedalloc_cpp)
ENDIF(WITH_CXX_GUARDEDALLOC)
+ IF(WITH_IK_ITASC)
+ LIST(APPEND BLENDER_SORTED_LIBS bf_intern_itasc)
+ ENDIF(WITH_IK_ITASC)
+
IF(WITH_QUICKTIME)
- SET(BLENDER_SORTED_LIBS ${BLENDER_SORTED_LIBS} bf_quicktime)
+ LIST(APPEND BLENDER_SORTED_LIBS bf_quicktime)
ENDIF(WITH_QUICKTIME)
diff --git a/source/creator/Makefile b/source/creator/Makefile
index bfbb2173cff..08f732ad486 100644
--- a/source/creator/Makefile
+++ b/source/creator/Makefile
@@ -17,7 +17,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
# All rights reserved.
diff --git a/source/creator/SConscript b/source/creator/SConscript
index 01e62d33269..6ee9aea29a5 100644
--- a/source/creator/SConscript
+++ b/source/creator/SConscript
@@ -13,37 +13,37 @@ incs += ' ' + env['BF_OPENGL_INC']
defs = []
if env['WITH_BF_QUICKTIME']:
- incs += ' ' + env['BF_QUICKTIME_INC']
- defs.append('WITH_QUICKTIME')
+ incs += ' ' + env['BF_QUICKTIME_INC']
+ defs.append('WITH_QUICKTIME')
if env['WITH_BF_BINRELOC']:
- incs += ' ../../extern/binreloc/include'
- defs.append('WITH_BINRELOC')
+ incs += ' ../../extern/binreloc/include'
+ defs.append('WITH_BINRELOC')
if env['WITH_BF_OPENEXR']:
- defs.append('WITH_OPENEXR')
+ defs.append('WITH_OPENEXR')
if env['WITH_BF_TIFF']:
- defs.append('WITH_TIFF')
+ defs.append('WITH_TIFF')
if not env['WITH_BF_SDL']:
- defs.append('DISABLE_SDL')
+ defs.append('DISABLE_SDL')
if env['WITH_BF_PYTHON']:
- incs += ' ../blender/python'
- if env['BF_DEBUG']:
- defs.append('_DEBUG')
+ incs += ' ../blender/python'
+ if env['BF_DEBUG']:
+ defs.append('_DEBUG')
else:
- defs.append('DISABLE_PYTHON')
-
+ defs.append('DISABLE_PYTHON')
+
if env['BF_BUILDINFO']:
- defs.append('BUILD_DATE')
- defs.append('NAN_BUILDINFO')
+ defs.append('BUILD_DATE')
+ defs.append('NAN_BUILDINFO')
if env['OURPLATFORM'] in ('win32-vc', 'win32-mingw', 'linuxcross', 'win64-vc'):
incs += ' ' + env['BF_PTHREADS_INC']
if env['OURPLATFORM'] in ('win32-vc', 'win32-mingw', 'linuxcross', 'win64-vc'):
- incs += ' ' + env['BF_PTHREADS_INC']
+ incs += ' ' + env['BF_PTHREADS_INC']
env.BlenderLib ( libname = 'bf_creator', sources = Split(sources), includes = Split(incs), defines = defs, libtype='core', priority = 0 )
diff --git a/source/creator/creator.c b/source/creator/creator.c
index 05359b06112..4066d16186b 100644
--- a/source/creator/creator.c
+++ b/source/creator/creator.c
@@ -131,6 +131,8 @@ extern int pluginapi_force_ref(void); /* from blenpluginapi:pluginapi.c */
char bprogname[FILE_MAXDIR+FILE_MAXFILE]; /* from blenpluginapi:pluginapi.c */
char btempdir[FILE_MAXDIR+FILE_MAXFILE];
+#define BLEND_VERSION_STRING_FMT "Blender %d.%02d (sub %d) Build\n", BLENDER_VERSION/100, BLENDER_VERSION%100, BLENDER_SUBVERSION
+
/* Initialise callbacks for the modules that need them */
static void setCallbacks(void);
@@ -175,17 +177,14 @@ static void strip_quotes(char *str)
static int print_version(int argc, char **argv, void *data)
{
+ printf (BLEND_VERSION_STRING_FMT);
#ifdef BUILD_DATE
- printf ("Blender %d.%02d (sub %d) Build\n", BLENDER_VERSION/100, BLENDER_VERSION%100, BLENDER_SUBVERSION);
printf ("\tbuild date: %s\n", build_date);
printf ("\tbuild time: %s\n", build_time);
printf ("\tbuild revision: %s\n", build_rev);
printf ("\tbuild platform: %s\n", build_platform);
printf ("\tbuild type: %s\n", build_type);
-#else
- printf ("Blender %d.%02d (sub %d) Build\n", BLENDER_VERSION/100, BLENDER_VERSION%100, BLENDER_SUBVERSION);
#endif
-
exit(0);
return 0;
@@ -195,7 +194,7 @@ static int print_help(int argc, char **argv, void *data)
{
bArgs *ba = (bArgs*)data;
- printf ("Blender %d.%02d (sub %d) Build\n", BLENDER_VERSION/100, BLENDER_VERSION%100, BLENDER_SUBVERSION);
+ printf (BLEND_VERSION_STRING_FMT);
printf ("Usage: blender [args ...] [file] [args ...]\n\n");
printf ("Render Options:\n");
@@ -344,7 +343,7 @@ static int background_mode(int argc, char **argv, void *data)
static int debug_mode(int argc, char **argv, void *data)
{
G.f |= G_DEBUG; /* std output printf's */
- printf ("Blender %d.%02d (sub %d) Build\n", BLENDER_VERSION/100, BLENDER_VERSION%100, BLENDER_SUBVERSION);
+ printf(BLEND_VERSION_STRING_FMT);
MEM_set_memory_debug();
#ifdef NAN_BUILDINFO
@@ -413,16 +412,13 @@ static int prefsize(int argc, char **argv, void *data)
static int with_borders(int argc, char **argv, void *data)
{
- /* with borders XXX OLD CRUFT!*/
-
+ WM_setinitialstate_normal();
return 0;
}
static int without_borders(int argc, char **argv, void *data)
{
- /* borderless, win + linux XXX OLD CRUFT */
- /* XXX, fixme mein, borderless on OSX */
-
+ WM_setinitialstate_fullscreen();
return 0;
}
@@ -1144,8 +1140,10 @@ int main(int argc, char **argv)
else {
if((G.fileflags & G_FILE_AUTOPLAY) && (G.f & G_SCRIPT_AUTOEXEC))
- WM_init_game(C);
-
+ {
+ if(WM_init_game(C))
+ return 0;
+ }
else if(!G.file_loaded)
WM_init_splash(C);
}
diff --git a/source/darwin/Makefile b/source/darwin/Makefile
index 7e65d399d44..5c68f43f606 100644
--- a/source/darwin/Makefile
+++ b/source/darwin/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
# All rights reserved.
diff --git a/source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp b/source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp
index a83ec7e132f..5a0522a9aa6 100644
--- a/source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp
+++ b/source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp
@@ -32,7 +32,7 @@
#include <stdlib.h>
#include <stdio.h>
-#ifdef WIN32
+#if defined(WIN32) && !defined(FREE_WINDOWS)
// don't show stl-warnings
#pragma warning (disable:4786)
#endif
@@ -72,6 +72,7 @@ extern "C" {
/***/
#include "DNA_view3d_types.h"
#include "DNA_screen_types.h"
+#include "DNA_userdef_types.h"
#include "DNA_windowmanager_types.h"
#include "BKE_global.h"
#include "BKE_report.h"
@@ -154,6 +155,10 @@ extern "C" void StartKetsjiShell(struct bContext *C, struct ARegion *ar, rcti *c
bgl::InitExtensions(true);
+ // VBO code for derived mesh is not compatible with BGE (couldn't find why), so disable
+ int disableVBO = (U.gameflags & USER_DISABLE_VBO);
+ U.gameflags |= USER_DISABLE_VBO;
+
do
{
View3D *v3d= CTX_wm_view3d(C);
@@ -388,9 +393,15 @@ extern "C" void StartKetsjiShell(struct bContext *C, struct ARegion *ar, rcti *c
ketsjiengine->InitDome(scene->gm.dome.res, scene->gm.dome.mode, scene->gm.dome.angle, scene->gm.dome.resbuf, scene->gm.dome.tilt, scene->gm.dome.warptext);
// initialize 3D Audio Settings
- AUD_set3DSetting(AUD_3DS_SPEED_OF_SOUND, scene->audio.speed_of_sound);
- AUD_set3DSetting(AUD_3DS_DOPPLER_FACTOR, scene->audio.doppler_factor);
- AUD_set3DSetting(AUD_3DS_DISTANCE_MODEL, scene->audio.distance_model);
+ AUD_setSpeedOfSound(scene->audio.speed_of_sound);
+ AUD_setDopplerFactor(scene->audio.doppler_factor);
+ AUD_setDistanceModel(AUD_DistanceModel(scene->audio.distance_model));
+
+ // from see blender.c:
+ // FIXME: this version patching should really be part of the file-reading code,
+ // but we still get too many unrelated data-corruption crashes otherwise...
+ if (blenderdata->versionfile < 250)
+ do_versions_ipos_to_animato(blenderdata);
if (sceneconverter)
{
@@ -557,6 +568,9 @@ extern "C" void StartKetsjiShell(struct bContext *C, struct ARegion *ar, rcti *c
} while (exitrequested == KX_EXIT_REQUEST_RESTART_GAME || exitrequested == KX_EXIT_REQUEST_START_OTHER_GAME);
+ if (!disableVBO)
+ U.gameflags &= ~USER_DISABLE_VBO;
+
if (bfd) BLO_blendfiledata_free(bfd);
BLI_strncpy(G.sce, oldsce, sizeof(G.sce));
diff --git a/source/gameengine/BlenderRoutines/CMakeLists.txt b/source/gameengine/BlenderRoutines/CMakeLists.txt
index 57d28561647..853cba543a4 100644
--- a/source/gameengine/BlenderRoutines/CMakeLists.txt
+++ b/source/gameengine/BlenderRoutines/CMakeLists.txt
@@ -44,7 +44,7 @@ IF(WITH_FFMPEG)
ENDIF(WITH_FFMPEG)
IF(WITH_PYTHON)
- SET(INC ${INC} ${PYTHON_INC})
+ LIST(APPEND INC ${PYTHON_INC})
ELSE(WITH_PYTHON)
ADD_DEFINITIONS(-DDISABLE_PYTHON)
ENDIF(WITH_PYTHON)
diff --git a/source/gameengine/BlenderRoutines/KX_BlenderInputDevice.h b/source/gameengine/BlenderRoutines/KX_BlenderInputDevice.h
index 5bdf0ccd81d..b7f7be4a279 100644
--- a/source/gameengine/BlenderRoutines/KX_BlenderInputDevice.h
+++ b/source/gameengine/BlenderRoutines/KX_BlenderInputDevice.h
@@ -29,7 +29,7 @@
#ifndef __KX_BLENDERINPUTDEVICE
#define __KX_BLENDERINPUTDEVICE
-#ifdef WIN32
+#if defined(WIN32) && !defined(FREE_WINDOWS)
#pragma warning(disable : 4786) // shut off 255 char limit debug template warning
#endif
diff --git a/source/gameengine/BlenderRoutines/KX_BlenderKeyboardDevice.cpp b/source/gameengine/BlenderRoutines/KX_BlenderKeyboardDevice.cpp
index e8cb25af868..bc7996a98c0 100644
--- a/source/gameengine/BlenderRoutines/KX_BlenderKeyboardDevice.cpp
+++ b/source/gameengine/BlenderRoutines/KX_BlenderKeyboardDevice.cpp
@@ -26,7 +26,7 @@
* ***** END GPL LICENSE BLOCK *****
*/
-#ifdef WIN32
+#if defined(WIN32) && !defined(FREE_WINDOWS)
// annoying warnings about truncated STL debug info
#pragma warning (disable :4786)
#endif
diff --git a/source/gameengine/BlenderRoutines/KX_BlenderMouseDevice.cpp b/source/gameengine/BlenderRoutines/KX_BlenderMouseDevice.cpp
index c3e3935fca5..0326b53dfb1 100644
--- a/source/gameengine/BlenderRoutines/KX_BlenderMouseDevice.cpp
+++ b/source/gameengine/BlenderRoutines/KX_BlenderMouseDevice.cpp
@@ -26,7 +26,7 @@
* ***** END GPL LICENSE BLOCK *****
*/
-#ifdef WIN32
+#if defined(WIN32) && !defined(FREE_WINDOWS)
// annoying warnings about truncated STL debug info
#pragma warning (disable :4786)
#endif
diff --git a/source/gameengine/BlenderRoutines/KX_BlenderRenderTools.h b/source/gameengine/BlenderRoutines/KX_BlenderRenderTools.h
index 9a7d9c7bcc0..517e0713352 100644
--- a/source/gameengine/BlenderRoutines/KX_BlenderRenderTools.h
+++ b/source/gameengine/BlenderRoutines/KX_BlenderRenderTools.h
@@ -30,7 +30,7 @@
#ifndef __KX_BLENDERRENDERTOOLS
#define __KX_BLENDERRENDERTOOLS
-#ifdef WIN32
+#if defined(WIN32) && !defined(FREE_WINDOWS)
// don't show stl-warnings
#pragma warning (disable:4786)
#endif
diff --git a/source/gameengine/BlenderRoutines/KX_BlenderSystem.cpp b/source/gameengine/BlenderRoutines/KX_BlenderSystem.cpp
index 813869dd032..a6a9ee2133f 100644
--- a/source/gameengine/BlenderRoutines/KX_BlenderSystem.cpp
+++ b/source/gameengine/BlenderRoutines/KX_BlenderSystem.cpp
@@ -28,11 +28,14 @@
#include "KX_ISystem.h"
-#ifdef WIN32
+#if defined(WIN32) && !defined(FREE_WINDOWS)
#pragma warning (disable :4786)
-#include <windows.h>
#endif //WIN32
+#ifdef WIN32
+#include <windows.h>
+#endif
+
#include <iostream>
#include <stdio.h>
#include "KX_BlenderInputDevice.h"
diff --git a/source/gameengine/BlenderRoutines/Makefile b/source/gameengine/BlenderRoutines/Makefile
index 4a437aff97d..3d0f5344c74 100644
--- a/source/gameengine/BlenderRoutines/Makefile
+++ b/source/gameengine/BlenderRoutines/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
# All rights reserved.
diff --git a/source/gameengine/BlenderRoutines/SConscript b/source/gameengine/BlenderRoutines/SConscript
index e5b263ad930..f53fc509c6d 100644
--- a/source/gameengine/BlenderRoutines/SConscript
+++ b/source/gameengine/BlenderRoutines/SConscript
@@ -26,9 +26,9 @@ if env['WITH_BF_FFMPEG']:
defs.append('WITH_FFMPEG')
if env['WITH_BF_PYTHON']:
- incs += ' ' + env['BF_PYTHON_INC']
+ incs += ' ' + env['BF_PYTHON_INC']
else:
- defs.append('DISABLE_PYTHON')
+ defs.append('DISABLE_PYTHON')
incs += ' ' + env['BF_BULLET_INC']
incs += ' ' + env['BF_OPENGL_INC']
diff --git a/source/gameengine/Converter/BL_ArmatureChannel.cpp b/source/gameengine/Converter/BL_ArmatureChannel.cpp
index 424c8441c0e..8f5ec230486 100644
--- a/source/gameengine/Converter/BL_ArmatureChannel.cpp
+++ b/source/gameengine/Converter/BL_ArmatureChannel.cpp
@@ -197,8 +197,7 @@ int BL_ArmatureChannel::py_attr_setattr(void *self_v, const struct KX_PYATTRIBUT
PyObject* BL_ArmatureChannel::py_attr_get_joint_rotation(void *self_v, const struct KX_PYATTRIBUTE_DEF *attrdef)
{
- BL_ArmatureChannel* self= static_cast<BL_ArmatureChannel*>(self_v);
- bPoseChannel* pchan = self->m_posechannel;
+ bPoseChannel* pchan = static_cast<bPoseChannel*>(self_v);
// decompose the pose matrix in euler rotation
float rest_mat[3][3];
float pose_mat[3][3];
diff --git a/source/gameengine/Converter/BL_ArmatureObject.cpp b/source/gameengine/Converter/BL_ArmatureObject.cpp
index 7dd2543e89d..97d6b6efd27 100644
--- a/source/gameengine/Converter/BL_ArmatureObject.cpp
+++ b/source/gameengine/Converter/BL_ArmatureObject.cpp
@@ -30,6 +30,7 @@
#include "BL_ArmatureObject.h"
#include "BL_ActionActuator.h"
#include "KX_BlenderSceneConverter.h"
+#include "MEM_guardedalloc.h"
#include "BLI_blenlib.h"
#include "BLI_ghash.h"
#include "BLI_math.h"
diff --git a/source/gameengine/Converter/BL_ArmatureObject.h b/source/gameengine/Converter/BL_ArmatureObject.h
index 6ad7de03489..646e9d45365 100644
--- a/source/gameengine/Converter/BL_ArmatureObject.h
+++ b/source/gameengine/Converter/BL_ArmatureObject.h
@@ -94,7 +94,7 @@ public:
BL_ArmatureConstraint* GetConstraint(int index);
// for pose channel python API
void LoadChannels();
- size_t GetChannelNumber() const { return m_constraintNumber; }
+ size_t GetChannelNumber() const { return m_channelNumber; }
BL_ArmatureChannel* GetChannel(bPoseChannel* channel);
BL_ArmatureChannel* GetChannel(const char* channel);
BL_ArmatureChannel* GetChannel(int index);
diff --git a/source/gameengine/Converter/BL_BlenderDataConversion.cpp b/source/gameengine/Converter/BL_BlenderDataConversion.cpp
index 832e33cb4b6..926452d61d6 100644
--- a/source/gameengine/Converter/BL_BlenderDataConversion.cpp
+++ b/source/gameengine/Converter/BL_BlenderDataConversion.cpp
@@ -28,7 +28,7 @@
* Convert blender data to ketsji
*/
-#ifdef WIN32
+#if defined(WIN32) && !defined(FREE_WINDOWS)
#pragma warning (disable : 4786)
#endif
@@ -1573,6 +1573,15 @@ void BL_CreatePhysicsObjectNew(KX_GameObject* gameobj,
objprop.m_boundobject.c.m_height = 2.f*bb.m_extends[2];
break;
}
+ case OB_BOUND_CAPSULE:
+ {
+ objprop.m_boundclass = KX_BOUNDCAPSULE;
+ objprop.m_boundobject.c.m_radius = MT_max(bb.m_extends[0], bb.m_extends[1]);
+ objprop.m_boundobject.c.m_height = 2.f*(bb.m_extends[2]-objprop.m_boundobject.c.m_radius);
+ if (objprop.m_boundobject.c.m_height < 0.f)
+ objprop.m_boundobject.c.m_height = 0.f;
+ break;
+ }
}
}
@@ -2635,7 +2644,7 @@ void BL_ConvertBlenderObjects(struct Main* maggie,
sumolist->Release();
// convert world
- KX_WorldInfo* worldinfo = new BlenderWorldInfo(blenderscene->world);
+ KX_WorldInfo* worldinfo = new BlenderWorldInfo(blenderscene, blenderscene->world);
converter->RegisterWorldInfo(worldinfo);
kxscene->SetWorldInfo(worldinfo);
diff --git a/source/gameengine/Converter/BL_DeformableGameObject.h b/source/gameengine/Converter/BL_DeformableGameObject.h
index 5d16e3ba1a8..076bfaeb458 100644
--- a/source/gameengine/Converter/BL_DeformableGameObject.h
+++ b/source/gameengine/Converter/BL_DeformableGameObject.h
@@ -30,7 +30,7 @@
#ifndef BL_DEFORMABLEGAMEOBJECT
#define BL_DEFORMABLEGAMEOBJECT
-#ifdef WIN32
+#if defined(WIN32) && !defined(FREE_WINDOWS)
#pragma warning (disable:4786) // get rid of stupid stl-visual compiler debug warning
#endif //WIN32
diff --git a/source/gameengine/Converter/BL_MeshDeformer.cpp b/source/gameengine/Converter/BL_MeshDeformer.cpp
index 332c6fee2cf..25dd8678e60 100644
--- a/source/gameengine/Converter/BL_MeshDeformer.cpp
+++ b/source/gameengine/Converter/BL_MeshDeformer.cpp
@@ -28,7 +28,7 @@
* Simple deformation controller that restores a mesh to its rest position
*/
-#ifdef WIN32
+#if defined(WIN32) && !defined(FREE_WINDOWS)
// This warning tells us about truncation of __long__ stl-generated names.
// It can occasionally cause DevStudio to have internal compiler warnings.
#pragma warning( disable : 4786 )
diff --git a/source/gameengine/Converter/BL_MeshDeformer.h b/source/gameengine/Converter/BL_MeshDeformer.h
index 50bad254b42..48878d3f084 100644
--- a/source/gameengine/Converter/BL_MeshDeformer.h
+++ b/source/gameengine/Converter/BL_MeshDeformer.h
@@ -36,7 +36,7 @@
#include "MT_Point3.h"
#include <stdlib.h>
-#ifdef WIN32
+#if defined(WIN32) && !defined(FREE_WINDOWS)
#pragma warning (disable:4786) // get rid of stupid stl-visual compiler debug warning
#endif //WIN32
diff --git a/source/gameengine/Converter/BL_ModifierDeformer.cpp b/source/gameengine/Converter/BL_ModifierDeformer.cpp
index 5ccf8de29b1..f1f30938577 100644
--- a/source/gameengine/Converter/BL_ModifierDeformer.cpp
+++ b/source/gameengine/Converter/BL_ModifierDeformer.cpp
@@ -27,7 +27,7 @@
* ***** END GPL LICENSE BLOCK *****
*/
-#ifdef WIN32
+#if defined(WIN32) && !defined(FREE_WINDOWS)
#pragma warning (disable : 4786)
#endif //WIN32
diff --git a/source/gameengine/Converter/BL_ModifierDeformer.h b/source/gameengine/Converter/BL_ModifierDeformer.h
index 6e0ede8e62f..49998f36ccb 100644
--- a/source/gameengine/Converter/BL_ModifierDeformer.h
+++ b/source/gameengine/Converter/BL_ModifierDeformer.h
@@ -30,7 +30,7 @@
#ifndef BL_MODIFIERDEFORMER
#define BL_MODIFIERDEFORMER
-#ifdef WIN32
+#if defined(WIN32) && !defined(FREE_WINDOWS)
#pragma warning (disable:4786) // get rid of stupid stl-visual compiler debug warning
#endif //WIN32
diff --git a/source/gameengine/Converter/BL_ShapeDeformer.cpp b/source/gameengine/Converter/BL_ShapeDeformer.cpp
index 1a90001adca..2fc78646d92 100644
--- a/source/gameengine/Converter/BL_ShapeDeformer.cpp
+++ b/source/gameengine/Converter/BL_ShapeDeformer.cpp
@@ -27,7 +27,7 @@
* ***** END GPL LICENSE BLOCK *****
*/
-#ifdef WIN32
+#if defined(WIN32) && !defined(FREE_WINDOWS)
#pragma warning (disable : 4786)
#endif //WIN32
diff --git a/source/gameengine/Converter/BL_ShapeDeformer.h b/source/gameengine/Converter/BL_ShapeDeformer.h
index 98bd4a1b4ba..b3b0996c27b 100644
--- a/source/gameengine/Converter/BL_ShapeDeformer.h
+++ b/source/gameengine/Converter/BL_ShapeDeformer.h
@@ -30,7 +30,7 @@
#ifndef BL_SHAPEDEFORMER
#define BL_SHAPEDEFORMER
-#ifdef WIN32
+#if defined(WIN32) && !defined(FREE_WINDOWS)
#pragma warning (disable:4786) // get rid of stupid stl-visual compiler debug warning
#endif //WIN32
diff --git a/source/gameengine/Converter/BL_SkinDeformer.cpp b/source/gameengine/Converter/BL_SkinDeformer.cpp
index c6e371dc0bf..748df4c2e41 100644
--- a/source/gameengine/Converter/BL_SkinDeformer.cpp
+++ b/source/gameengine/Converter/BL_SkinDeformer.cpp
@@ -27,7 +27,7 @@
* ***** END GPL LICENSE BLOCK *****
*/
-#ifdef WIN32
+#if defined(WIN32) && !defined(FREE_WINDOWS)
#pragma warning (disable : 4786)
#endif //WIN32
diff --git a/source/gameengine/Converter/BL_SkinDeformer.h b/source/gameengine/Converter/BL_SkinDeformer.h
index df7e8f6dffc..f8483519eb2 100644
--- a/source/gameengine/Converter/BL_SkinDeformer.h
+++ b/source/gameengine/Converter/BL_SkinDeformer.h
@@ -30,7 +30,7 @@
#ifndef BL_SKINDEFORMER
#define BL_SKINDEFORMER
-#ifdef WIN32
+#if defined(WIN32) && !defined(FREE_WINDOWS)
#pragma warning (disable:4786) // get rid of stupid stl-visual compiler debug warning
#endif //WIN32
diff --git a/source/gameengine/Converter/BlenderWorldInfo.cpp b/source/gameengine/Converter/BlenderWorldInfo.cpp
index 47653519cfd..f0d6083a8fa 100644
--- a/source/gameengine/Converter/BlenderWorldInfo.cpp
+++ b/source/gameengine/Converter/BlenderWorldInfo.cpp
@@ -2,7 +2,7 @@
* $Id$
* ***** BEGIN GPL LICENSE BLOCK *****
*
- * This program is free software; you can redistribute it and/or
+ * This program is free software; you can [0]istribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
@@ -55,11 +55,13 @@
#include "DNA_world_types.h"
#include "DNA_screen_types.h"
+#include "BLI_math.h"
+
#include "BKE_global.h"
/* end of blender include block */
-BlenderWorldInfo::BlenderWorldInfo(struct World* blenderworld)
+BlenderWorldInfo::BlenderWorldInfo(struct Scene *blenderscene, struct World* blenderworld)
{
if (blenderworld)
{
@@ -71,27 +73,24 @@ BlenderWorldInfo::BlenderWorldInfo(struct World* blenderworld)
m_hasmist = true;
m_miststart = blenderworld->miststa;
m_mistdistance = blenderworld->mistdist;
- m_mistred = blenderworld->horr;
- m_mistgreen = blenderworld->horg;
- m_mistblue = blenderworld->horb;
+ copy_v3_v3(m_mistcolor, &blenderworld->horr);
}
else
{
m_hasmist = false;
m_miststart = 0.0;
m_mistdistance = 0.0;
- m_mistred = 0.0;
- m_mistgreen = 0.0;
- m_mistblue = 0.0;
+ zero_v3(m_mistcolor);
}
- m_backgroundred = blenderworld->horr;
- m_backgroundgreen = blenderworld->horg;
- m_backgroundblue = blenderworld->horb;
-
- m_ambientred = blenderworld->ambr;
- m_ambientgreen = blenderworld->ambg;
- m_ambientblue = blenderworld->ambb;
+ copy_v3_v3(m_backgroundcolor, &blenderworld->horr);
+ copy_v3_v3(m_ambientcolor, &blenderworld->ambr);
+
+ if(blenderscene->r.color_mgt_flag & R_COLOR_MANAGEMENT) {
+ linearrgb_to_srgb_v3_v3(m_mistcolor, m_mistcolor);
+ linearrgb_to_srgb_v3_v3(m_backgroundcolor, m_backgroundcolor);
+ linearrgb_to_srgb_v3_v3(m_ambientcolor, m_ambientcolor);
+ }
}
else
{
@@ -123,37 +122,37 @@ bool BlenderWorldInfo::hasMist()
float BlenderWorldInfo::getBackColorRed()
{
- return m_backgroundred;
+ return m_backgroundcolor[0];
}
float BlenderWorldInfo::getBackColorGreen()
{
- return m_backgroundgreen;
+ return m_backgroundcolor[1];
}
float BlenderWorldInfo::getBackColorBlue()
{
- return m_backgroundblue;
+ return m_backgroundcolor[2];
}
float BlenderWorldInfo::getAmbientColorRed()
{
- return m_ambientred;
+ return m_ambientcolor[0];
}
float BlenderWorldInfo::getAmbientColorGreen()
{
- return m_ambientgreen;
+ return m_ambientcolor[1];
}
float BlenderWorldInfo::getAmbientColorBlue()
{
- return m_ambientblue;
+ return m_ambientcolor[2];
}
float BlenderWorldInfo::getMistStart()
@@ -172,21 +171,21 @@ float BlenderWorldInfo::getMistDistance()
float BlenderWorldInfo::getMistColorRed()
{
- return m_mistred;
+ return m_mistcolor[0];
}
float BlenderWorldInfo::getMistColorGreen()
{
- return m_mistgreen;
+ return m_mistcolor[1];
}
float BlenderWorldInfo::getMistColorBlue()
{
- return m_mistblue;
+ return m_mistcolor[2];
}
@@ -210,7 +209,7 @@ BlenderWorldInfo::setMistDistance(
BlenderWorldInfo::setMistColorRed(
float d
) {
- m_mistred = d;
+ m_mistcolor[0] = d;
}
@@ -218,7 +217,7 @@ BlenderWorldInfo::setMistColorRed(
BlenderWorldInfo::setMistColorGreen(
float d
) {
- m_mistgreen = d;
+ m_mistcolor[1] = d;
}
@@ -226,5 +225,5 @@ BlenderWorldInfo::setMistColorGreen(
BlenderWorldInfo::setMistColorBlue(
float d
) {
- m_mistblue = d;
+ m_mistcolor[2] = d;
}
diff --git a/source/gameengine/Converter/BlenderWorldInfo.h b/source/gameengine/Converter/BlenderWorldInfo.h
index b500c55a7f2..a430e18223e 100644
--- a/source/gameengine/Converter/BlenderWorldInfo.h
+++ b/source/gameengine/Converter/BlenderWorldInfo.h
@@ -35,23 +35,17 @@
class BlenderWorldInfo : public KX_WorldInfo
{
bool m_hasworld;
- float m_backgroundred;
- float m_backgroundgreen;
- float m_backgroundblue;
+ float m_backgroundcolor[3];
bool m_hasmist;
float m_miststart;
float m_mistdistance;
- float m_mistred;
- float m_mistgreen;
- float m_mistblue;
+ float m_mistcolor[3];
- float m_ambientred;
- float m_ambientgreen;
- float m_ambientblue;
+ float m_ambientcolor[3];
public:
- BlenderWorldInfo(struct World* blenderworld);
+ BlenderWorldInfo(struct Scene *blenderscene, struct World* blenderworld);
~BlenderWorldInfo();
bool hasWorld();
diff --git a/source/gameengine/Converter/CMakeLists.txt b/source/gameengine/Converter/CMakeLists.txt
index 135ed820c4f..65483eff9b4 100644
--- a/source/gameengine/Converter/CMakeLists.txt
+++ b/source/gameengine/Converter/CMakeLists.txt
@@ -65,7 +65,7 @@ SET(INC
)
IF(WITH_PYTHON)
- SET(INC ${INC} ${PYTHON_INC})
+ LIST(APPEND INC ${PYTHON_INC})
ELSE(WITH_PYTHON)
ADD_DEFINITIONS(-DDISABLE_PYTHON)
ENDIF(WITH_PYTHON)
diff --git a/source/gameengine/Converter/KX_BlenderSceneConverter.cpp b/source/gameengine/Converter/KX_BlenderSceneConverter.cpp
index 0575c55846b..f50fb6838e3 100644
--- a/source/gameengine/Converter/KX_BlenderSceneConverter.cpp
+++ b/source/gameengine/Converter/KX_BlenderSceneConverter.cpp
@@ -26,8 +26,8 @@
* ***** END GPL LICENSE BLOCK *****
*/
-#ifdef WIN32
- #pragma warning (disable:4786) // suppress stl-MSVC debug info warning
+#if defined(WIN32) && !defined(FREE_WINDOWS)
+#pragma warning (disable:4786) // suppress stl-MSVC debug info warning
#endif
#include "KX_Scene.h"
@@ -100,6 +100,7 @@ extern "C"
extern "C" {
#include "BKE_context.h"
#include "BLO_readfile.h"
+ #include "BKE_idcode.h"
#include "BKE_report.h"
#include "DNA_space_types.h"
#include "DNA_windowmanager_types.h" /* report api */
@@ -931,14 +932,29 @@ Main* KX_BlenderSceneConverter::GetMainDynamicPath(const char *path)
return NULL;
}
-bool KX_BlenderSceneConverter::LinkBlendFile(const char *path, char *group, KX_Scene *scene_merge, char **err_str)
+bool KX_BlenderSceneConverter::LinkBlendFileMemory(void *data, int length, const char *path, char *group, KX_Scene *scene_merge, char **err_str)
+{
+ BlendHandle *bpy_openlib = BLO_blendhandle_from_memory(data, length);
+
+ // Error checking is done in LinkBlendFile
+ return LinkBlendFile(bpy_openlib, path, group, scene_merge, err_str);
+}
+
+bool KX_BlenderSceneConverter::LinkBlendFilePath(const char *path, char *group, KX_Scene *scene_merge, char **err_str)
+{
+ BlendHandle *bpy_openlib = BLO_blendhandle_from_file( (char *)path );
+
+ // Error checking is done in LinkBlendFile
+ return LinkBlendFile(bpy_openlib, path, group, scene_merge, err_str);
+}
+
+bool KX_BlenderSceneConverter::LinkBlendFile(BlendHandle *bpy_openlib, const char *path, char *group, KX_Scene *scene_merge, char **err_str)
{
bContext *C;
Main *main_newlib; /* stored as a dynamic 'main' until we free it */
Main *main_tmp= NULL; /* created only for linking, then freed */
LinkNode *names = NULL;
- BlendHandle *bpy_openlib = NULL; /* ptr to the open .blend file */
- int idcode= BLO_idcode_from_name(group);
+ int idcode= BKE_idcode_from_name(group);
short flag= 0; /* dont need any special options */
ReportList reports;
static char err_local[255];
@@ -955,7 +971,6 @@ bool KX_BlenderSceneConverter::LinkBlendFile(const char *path, char *group, KX_S
return false;
}
- bpy_openlib = BLO_blendhandle_from_file( (char *)path );
if(bpy_openlib==NULL) {
snprintf(err_local, sizeof(err_local), "could not open blendfile \"%s\"\n", path);
*err_str= err_local;
diff --git a/source/gameengine/Converter/KX_BlenderSceneConverter.h b/source/gameengine/Converter/KX_BlenderSceneConverter.h
index 23d506c98ff..20f3f863563 100644
--- a/source/gameengine/Converter/KX_BlenderSceneConverter.h
+++ b/source/gameengine/Converter/KX_BlenderSceneConverter.h
@@ -142,7 +142,9 @@ public:
struct Main* GetMainDynamicPath(const char *path);
vector<struct Main*> &GetMainDynamic();
- bool LinkBlendFile(const char *path, char *group, KX_Scene *scene_merge, char **err_str);
+ bool LinkBlendFileMemory(void *data, int length, const char *path, char *group, KX_Scene *scene_merge, char **err_str);
+ bool LinkBlendFilePath(const char *path, char *group, KX_Scene *scene_merge, char **err_str);
+ bool LinkBlendFile(struct BlendHandle *bpy_openlib, const char *path, char *group, KX_Scene *scene_merge, char **err_str);
bool MergeScene(KX_Scene *to, KX_Scene *from);
RAS_MeshObject *ConvertMeshSpecial(KX_Scene* kx_scene, Main *maggie, const char *name);
bool FreeBlendFile(struct Main *maggie);
diff --git a/source/gameengine/Converter/KX_ConvertActuators.cpp b/source/gameengine/Converter/KX_ConvertActuators.cpp
index 0d70836e54c..d765c89c5aa 100644
--- a/source/gameengine/Converter/KX_ConvertActuators.cpp
+++ b/source/gameengine/Converter/KX_ConvertActuators.cpp
@@ -28,7 +28,7 @@
* Convert Blender actuators for use in the GameEngine
*/
-#ifdef WIN32
+#if defined(WIN32) && !defined(FREE_WINDOWS)
#pragma warning (disable : 4786)
#endif //WIN32
diff --git a/source/gameengine/Converter/KX_ConvertSensors.cpp b/source/gameengine/Converter/KX_ConvertSensors.cpp
index d65fee93a12..20597d46e82 100644
--- a/source/gameengine/Converter/KX_ConvertSensors.cpp
+++ b/source/gameengine/Converter/KX_ConvertSensors.cpp
@@ -30,7 +30,7 @@
#include <stdio.h>
-#ifdef WIN32
+#if defined(WIN32) && !defined(FREE_WINDOWS)
#pragma warning (disable : 4786)
#endif //WIN32
@@ -39,7 +39,7 @@
#include "KX_ConvertSensors.h"
/* This little block needed for linking to Blender... */
-#ifdef WIN32
+#if defined(WIN32) && !defined(FREE_WINDOWS)
#include "BLI_winstuff.h"
#endif
diff --git a/source/gameengine/Converter/KX_IpoConvert.cpp b/source/gameengine/Converter/KX_IpoConvert.cpp
index c983c8a5100..774efb3879d 100644
--- a/source/gameengine/Converter/KX_IpoConvert.cpp
+++ b/source/gameengine/Converter/KX_IpoConvert.cpp
@@ -26,8 +26,7 @@
* ***** END GPL LICENSE BLOCK *****
*/
-#ifdef WIN32
-
+#if defined(WIN32) && !defined(FREE_WINDOWS)
// don't show stl-warnings
#pragma warning (disable:4786)
#endif
diff --git a/source/gameengine/Converter/KX_SoftBodyDeformer.cpp b/source/gameengine/Converter/KX_SoftBodyDeformer.cpp
index 9d58a16ddfc..bace00a872d 100644
--- a/source/gameengine/Converter/KX_SoftBodyDeformer.cpp
+++ b/source/gameengine/Converter/KX_SoftBodyDeformer.cpp
@@ -27,7 +27,7 @@
* ***** END GPL LICENSE BLOCK *****
*/
-#ifdef WIN32
+#if defined(WIN32) && !defined(FREE_WINDOWS)
#pragma warning (disable : 4786)
#endif //WIN32
diff --git a/source/gameengine/Converter/KX_SoftBodyDeformer.h b/source/gameengine/Converter/KX_SoftBodyDeformer.h
index ce3f695ef11..76874bdc782 100644
--- a/source/gameengine/Converter/KX_SoftBodyDeformer.h
+++ b/source/gameengine/Converter/KX_SoftBodyDeformer.h
@@ -30,7 +30,7 @@
#ifndef KX_SOFTBODYDEFORMER
#define KX_SOFTBODYDEFORMER
-#ifdef WIN32
+#if defined(WIN32) && !defined(FREE_WINDOWS)
#pragma warning (disable:4786) // get rid of stupid stl-visual compiler debug warning
#endif //WIN32
diff --git a/source/gameengine/Converter/Makefile b/source/gameengine/Converter/Makefile
index b6da47930d3..142841b2b36 100644
--- a/source/gameengine/Converter/Makefile
+++ b/source/gameengine/Converter/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
# All rights reserved.
diff --git a/source/gameengine/Converter/SConscript b/source/gameengine/Converter/SConscript
index 7c7a109a345..36657367621 100644
--- a/source/gameengine/Converter/SConscript
+++ b/source/gameengine/Converter/SConscript
@@ -25,12 +25,12 @@ incs += ' #extern/recastnavigation/Detour/Include'
incs += ' ' + env['BF_BULLET_INC']
if env['BF_DEBUG']:
- if env['OURPLATFORM'] in ('win32-mingw', 'win32-vc', 'win64-vc'):
- defs.append('_DEBUG')
-
+ if env['OURPLATFORM'] in ('win32-mingw', 'win32-vc', 'win64-vc'):
+ defs.append('_DEBUG')
+
if env['WITH_BF_PYTHON']:
- incs += ' ' + env['BF_PYTHON_INC']
+ incs += ' ' + env['BF_PYTHON_INC']
else:
- defs.append('DISABLE_PYTHON')
+ defs.append('DISABLE_PYTHON')
env.BlenderLib ( 'bf_converter', sources, Split(incs), defs, libtype=['core','player'], priority=[305,40], cxx_compileflags=env['BGE_CXXFLAGS'])
diff --git a/source/gameengine/Expressions/CMakeLists.txt b/source/gameengine/Expressions/CMakeLists.txt
index 85b5daa3b4a..126192d2188 100644
--- a/source/gameengine/Expressions/CMakeLists.txt
+++ b/source/gameengine/Expressions/CMakeLists.txt
@@ -37,7 +37,7 @@ SET(INC
)
IF(WITH_PYTHON)
- SET(INC ${INC} ${PYTHON_INC})
+ LIST(APPEND INC ${PYTHON_INC})
ELSE(WITH_PYTHON)
ADD_DEFINITIONS(-DDISABLE_PYTHON)
ENDIF(WITH_PYTHON)
diff --git a/source/gameengine/Expressions/Makefile b/source/gameengine/Expressions/Makefile
index 09512c3ae87..892a8c2b246 100644
--- a/source/gameengine/Expressions/Makefile
+++ b/source/gameengine/Expressions/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
# All rights reserved.
diff --git a/source/gameengine/Expressions/PyObjectPlus.h b/source/gameengine/Expressions/PyObjectPlus.h
index 7afa85c8c31..625549a272e 100644
--- a/source/gameengine/Expressions/PyObjectPlus.h
+++ b/source/gameengine/Expressions/PyObjectPlus.h
@@ -319,9 +319,6 @@ typedef struct KX_PYATTRIBUTE_DEF {
} m_typeCheck;
} PyAttributeDef;
-#define KX_PYATTRIBUTE_DUMMY(name) \
- { name, KX_PYATTRIBUTE_TYPE_DUMMY, KX_PYATTRIBUTE_RO, 0, 0, 0.f, 0.f, false, false, 0, 0, 1, NULL, NULL, NULL, {NULL, NULL, NULL, NULL, NULL, NULL, NULL} }
-
#define KX_PYATTRIBUTE_BOOL_RW(name,object,field) \
{ name, KX_PYATTRIBUTE_TYPE_BOOL, KX_PYATTRIBUTE_RW, 0, 1, 0.f, 0.f, false, false, offsetof(object,field), 0, 1, NULL, NULL, NULL, {&((object *)0)->field, NULL, NULL, NULL, NULL, NULL, NULL} }
#define KX_PYATTRIBUTE_BOOL_RW_CHECK(name,object,field,function) \
diff --git a/source/gameengine/Expressions/SConscript b/source/gameengine/Expressions/SConscript
index 94af9dcfec8..007d6373c77 100644
--- a/source/gameengine/Expressions/SConscript
+++ b/source/gameengine/Expressions/SConscript
@@ -8,8 +8,8 @@ incs ='. #source/kernel/gen_system #intern/guardedalloc #intern/string #intern/m
defs = []
if env['WITH_BF_PYTHON']:
- incs += ' ' + env['BF_PYTHON_INC']
+ incs += ' ' + env['BF_PYTHON_INC']
else:
- defs.append('DISABLE_PYTHON')
+ defs.append('DISABLE_PYTHON')
env.BlenderLib ( 'bf_expressions', sources, Split(incs), defs, libtype=['core','player'], priority = [360,80], cxx_compileflags=env['BGE_CXXFLAGS'])
diff --git a/source/gameengine/Expressions/Value.h b/source/gameengine/Expressions/Value.h
index 2bb9e39cafc..009d95ee4d2 100644
--- a/source/gameengine/Expressions/Value.h
+++ b/source/gameengine/Expressions/Value.h
@@ -13,7 +13,7 @@
*
*/
-#ifdef WIN32
+#if defined(WIN32) && !defined(FREE_WINDOWS)
#pragma warning (disable:4786)
#endif //WIN32
diff --git a/source/gameengine/Expressions/VectorValue.cpp b/source/gameengine/Expressions/VectorValue.cpp
index 59ff601746f..c7b0db4a8f9 100644
--- a/source/gameengine/Expressions/VectorValue.cpp
+++ b/source/gameengine/Expressions/VectorValue.cpp
@@ -12,7 +12,7 @@
*
*/
-#ifdef WIN32
+#if defined(WIN32) && !defined(FREE_WINDOWS)
#pragma warning (disable:4786)
#endif
diff --git a/source/gameengine/GameLogic/CMakeLists.txt b/source/gameengine/GameLogic/CMakeLists.txt
index 93183dafeee..84d915847e9 100644
--- a/source/gameengine/GameLogic/CMakeLists.txt
+++ b/source/gameengine/GameLogic/CMakeLists.txt
@@ -43,7 +43,7 @@ ELSE(WITH_SDL)
ENDIF(WITH_SDL)
IF(WITH_PYTHON)
- SET(INC ${INC} ${PYTHON_INC})
+ LIST(APPEND INC ${PYTHON_INC})
ELSE(WITH_PYTHON)
ADD_DEFINITIONS(-DDISABLE_PYTHON)
ENDIF(WITH_PYTHON)
diff --git a/source/gameengine/GameLogic/Joystick/Makefile b/source/gameengine/GameLogic/Joystick/Makefile
index 02def1cec62..5ab297824dd 100644
--- a/source/gameengine/GameLogic/Joystick/Makefile
+++ b/source/gameengine/GameLogic/Joystick/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
# All rights reserved.
diff --git a/source/gameengine/GameLogic/Makefile b/source/gameengine/GameLogic/Makefile
index ba1e1c25ee7..9c8bd73cdc0 100644
--- a/source/gameengine/GameLogic/Makefile
+++ b/source/gameengine/GameLogic/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
# All rights reserved.
diff --git a/source/gameengine/GameLogic/SCA_ActuatorEventManager.cpp b/source/gameengine/GameLogic/SCA_ActuatorEventManager.cpp
index 9a6ed25a203..db741040ccc 100644
--- a/source/gameengine/GameLogic/SCA_ActuatorEventManager.cpp
+++ b/source/gameengine/GameLogic/SCA_ActuatorEventManager.cpp
@@ -61,4 +61,4 @@ void SCA_ActuatorEventManager::UpdateFrame()
{
(*it)->Update();
}
-} \ No newline at end of file
+}
diff --git a/source/gameengine/GameLogic/SCA_AlwaysSensor.cpp b/source/gameengine/GameLogic/SCA_AlwaysSensor.cpp
index 0f3b81a057e..e364225af3d 100644
--- a/source/gameengine/GameLogic/SCA_AlwaysSensor.cpp
+++ b/source/gameengine/GameLogic/SCA_AlwaysSensor.cpp
@@ -29,7 +29,7 @@
* ***** END GPL LICENSE BLOCK *****
*/
-#ifdef WIN32
+#if defined(WIN32) && !defined(FREE_WINDOWS)
// This warning tells us about truncation of __long__ stl-generated names.
// It can occasionally cause DevStudio to have internal compiler warnings.
#pragma warning( disable : 4786 )
diff --git a/source/gameengine/GameLogic/SCA_DelaySensor.cpp b/source/gameengine/GameLogic/SCA_DelaySensor.cpp
index 701bcb2fc2f..6cad801e429 100644
--- a/source/gameengine/GameLogic/SCA_DelaySensor.cpp
+++ b/source/gameengine/GameLogic/SCA_DelaySensor.cpp
@@ -29,7 +29,7 @@
* ***** END GPL LICENSE BLOCK *****
*/
-#ifdef WIN32
+#if defined(WIN32) && !defined(FREE_WINDOWS)
// This warning tells us about truncation of __long__ stl-generated names.
// It can occasionally cause DevStudio to have internal compiler warnings.
#pragma warning( disable : 4786 )
diff --git a/source/gameengine/GameLogic/SCA_ISensor.cpp b/source/gameengine/GameLogic/SCA_ISensor.cpp
index bff02326c9c..fada69848b2 100644
--- a/source/gameengine/GameLogic/SCA_ISensor.cpp
+++ b/source/gameengine/GameLogic/SCA_ISensor.cpp
@@ -357,9 +357,8 @@ PyAttributeDef SCA_ISensor::Attributes[] = {
KX_PYATTRIBUTE_RO_FUNCTION("triggered", SCA_ISensor, pyattr_get_triggered),
KX_PYATTRIBUTE_RO_FUNCTION("positive", SCA_ISensor, pyattr_get_positive),
KX_PYATTRIBUTE_RO_FUNCTION("status", SCA_ISensor, pyattr_get_status),
- //KX_PYATTRIBUTE_TODO("links"),
- //KX_PYATTRIBUTE_TODO("posTicks"),
- //KX_PYATTRIBUTE_TODO("negTicks"),
+ KX_PYATTRIBUTE_RO_FUNCTION("pos_ticks", SCA_ISensor, pyattr_get_posTicks),
+ KX_PYATTRIBUTE_RO_FUNCTION("neg_ticks", SCA_ISensor, pyattr_get_negTicks),
{ NULL } //Sentinel
};
@@ -401,6 +400,18 @@ PyObject* SCA_ISensor::pyattr_get_status(void *self_v, const KX_PYATTRIBUTE_DEF
return PyLong_FromSsize_t(status);
}
+PyObject* SCA_ISensor::pyattr_get_posTicks(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef)
+{
+ SCA_ISensor* self= static_cast<SCA_ISensor*>(self_v);
+ return PyLong_FromLong(self->GetPosTicks());
+}
+
+PyObject* SCA_ISensor::pyattr_get_negTicks(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef)
+{
+ SCA_ISensor* self= static_cast<SCA_ISensor*>(self_v);
+ return PyLong_FromLong(self->GetNegTicks());
+}
+
int SCA_ISensor::pyattr_check_level(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef)
{
SCA_ISensor* self= static_cast<SCA_ISensor*>(self_v);
diff --git a/source/gameengine/GameLogic/SCA_ISensor.h b/source/gameengine/GameLogic/SCA_ISensor.h
index 42d06d856b6..2d3a3ef08a0 100644
--- a/source/gameengine/GameLogic/SCA_ISensor.h
+++ b/source/gameengine/GameLogic/SCA_ISensor.h
@@ -167,6 +167,18 @@ public:
return m_prev_state;
}
+ /** get the number of ticks since the last positive pulse */
+ int GetPosTicks()
+ {
+ return m_pos_ticks;
+ }
+
+ /** get the number of ticks since the last negative pulse */
+ int GetNegTicks()
+ {
+ return m_neg_ticks;
+ }
+
/** Resume sensing. */
void Resume();
@@ -185,6 +197,9 @@ public:
static PyObject* pyattr_get_triggered(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef);
static PyObject* pyattr_get_positive(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef);
static PyObject* pyattr_get_status(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef);
+ static PyObject* pyattr_get_posTicks(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef);
+ static PyObject* pyattr_get_negTicks(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef);
+
static int pyattr_check_level(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef);
static int pyattr_check_tap(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef);
diff --git a/source/gameengine/GameLogic/SCA_JoystickSensor.cpp b/source/gameengine/GameLogic/SCA_JoystickSensor.cpp
index 5ab42ae7608..29a6a73b865 100644
--- a/source/gameengine/GameLogic/SCA_JoystickSensor.cpp
+++ b/source/gameengine/GameLogic/SCA_JoystickSensor.cpp
@@ -290,7 +290,6 @@ PyAttributeDef SCA_JoystickSensor::Attributes[] = {
KX_PYATTRIBUTE_RO_FUNCTION("numButtons", SCA_JoystickSensor, pyattr_get_num_buttons),
KX_PYATTRIBUTE_RO_FUNCTION("numHats", SCA_JoystickSensor, pyattr_get_num_hats),
KX_PYATTRIBUTE_RO_FUNCTION("connected", SCA_JoystickSensor, pyattr_get_connected),
- //KX_PYATTRIBUTE_TODO("events"),
{ NULL } //Sentinel
};
diff --git a/source/gameengine/GameLogic/SCA_LogicManager.h b/source/gameengine/GameLogic/SCA_LogicManager.h
index c5f377eeb44..9ddb62df361 100644
--- a/source/gameengine/GameLogic/SCA_LogicManager.h
+++ b/source/gameengine/GameLogic/SCA_LogicManager.h
@@ -30,7 +30,7 @@
#ifndef __KX_LOGICMANAGER
#define __KX_LOGICMANAGER
-#ifdef WIN32
+#if defined(WIN32) && !defined(FREE_WINDOWS)
#pragma warning (disable:4786)
#endif
diff --git a/source/gameengine/GameLogic/SCA_MouseManager.cpp b/source/gameengine/GameLogic/SCA_MouseManager.cpp
index f7f9a566c8d..1241bd07229 100644
--- a/source/gameengine/GameLogic/SCA_MouseManager.cpp
+++ b/source/gameengine/GameLogic/SCA_MouseManager.cpp
@@ -30,7 +30,7 @@
* ***** END GPL LICENSE BLOCK *****
*/
-#ifdef WIN32
+#if defined(WIN32) && !defined(FREE_WINDOWS)
// This warning tells us about truncation of __long__ stl-generated names.
// It can occasionally cause DevStudio to have internal compiler warnings.
#pragma warning( disable : 4786 )
diff --git a/source/gameengine/GameLogic/SCA_PythonController.cpp b/source/gameengine/GameLogic/SCA_PythonController.cpp
index 48fdcb3eb44..1f05846abe4 100644
--- a/source/gameengine/GameLogic/SCA_PythonController.cpp
+++ b/source/gameengine/GameLogic/SCA_PythonController.cpp
@@ -178,7 +178,7 @@ PyObject* SCA_PythonController::sPyGetCurrentController(PyObject *self)
{
if(m_sCurrentController==NULL)
{
- PyErr_SetString(PyExc_SystemError, "GameLogic.getCurrentController(), this function is being run outside the python controllers context, or blenders internal state is corrupt.");
+ PyErr_SetString(PyExc_SystemError, "bge.logic.getCurrentController(), this function is being run outside the python controllers context, or blenders internal state is corrupt.");
return NULL;
}
return m_sCurrentController->GetProxy();
diff --git a/source/gameengine/GameLogic/SCA_PythonKeyboard.cpp b/source/gameengine/GameLogic/SCA_PythonKeyboard.cpp
index 7951a749254..3d5d3568335 100644
--- a/source/gameengine/GameLogic/SCA_PythonKeyboard.cpp
+++ b/source/gameengine/GameLogic/SCA_PythonKeyboard.cpp
@@ -33,11 +33,17 @@ SCA_PythonKeyboard::SCA_PythonKeyboard(SCA_IInputDevice* keyboard)
: PyObjectPlus(),
m_keyboard(keyboard)
{
+#ifndef DISABLE_PYTHON
+ m_event_dict = PyDict_New();
+#endif
}
SCA_PythonKeyboard::~SCA_PythonKeyboard()
{
- /* intentionally empty */
+#ifndef DISABLE_PYTHON
+ PyDict_Clear(m_event_dict);
+ Py_DECREF(m_event_dict);
+#endif
}
#ifndef DISABLE_PYTHON
@@ -81,24 +87,15 @@ PyAttributeDef SCA_PythonKeyboard::Attributes[] = {
PyObject* SCA_PythonKeyboard::pyattr_get_events(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef)
{
SCA_PythonKeyboard* self = static_cast<SCA_PythonKeyboard*>(self_v);
-
- PyObject* resultlist = PyList_New(0);
for (int i=SCA_IInputDevice::KX_BEGINKEY; i<=SCA_IInputDevice::KX_ENDKEY; i++)
{
const SCA_InputEvent & inevent = self->m_keyboard->GetEventValue((SCA_IInputDevice::KX_EnumInputs)i);
-
- if (inevent.m_status != SCA_InputEvent::KX_NO_INPUTSTATUS)
- {
- PyObject* keypair = PyTuple_New(2);
- PyTuple_SET_ITEM(keypair, 0, PyLong_FromSsize_t(i));
- PyTuple_SET_ITEM(keypair, 1, PyLong_FromSsize_t(inevent.m_status));
- PyList_Append(resultlist, keypair);
- }
+ PyDict_SetItem(self->m_event_dict, PyLong_FromSsize_t(i), PyLong_FromSsize_t(inevent.m_status));
}
-
- return resultlist;
+ Py_INCREF(self->m_event_dict);
+ return self->m_event_dict;
}
#endif
diff --git a/source/gameengine/GameLogic/SCA_PythonKeyboard.h b/source/gameengine/GameLogic/SCA_PythonKeyboard.h
index 0b353ac444c..260835155e6 100644
--- a/source/gameengine/GameLogic/SCA_PythonKeyboard.h
+++ b/source/gameengine/GameLogic/SCA_PythonKeyboard.h
@@ -30,7 +30,11 @@
class SCA_PythonKeyboard : public PyObjectPlus
{
Py_Header;
+private:
class SCA_IInputDevice *m_keyboard;
+#ifndef DISABLE_PYTHON
+ PyObject* m_event_dict;
+#endif
public:
SCA_PythonKeyboard(class SCA_IInputDevice* keyboard);
virtual ~SCA_PythonKeyboard();
diff --git a/source/gameengine/GameLogic/SCA_PythonMouse.cpp b/source/gameengine/GameLogic/SCA_PythonMouse.cpp
index 041a0169879..936ee2ff5c4 100644
--- a/source/gameengine/GameLogic/SCA_PythonMouse.cpp
+++ b/source/gameengine/GameLogic/SCA_PythonMouse.cpp
@@ -35,11 +35,17 @@ SCA_PythonMouse::SCA_PythonMouse(SCA_IInputDevice* mouse, RAS_ICanvas* canvas)
m_mouse(mouse),
m_canvas(canvas)
{
+#ifndef DISABLE_PYTHON
+ m_event_dict = PyDict_New();
+#endif
}
SCA_PythonMouse::~SCA_PythonMouse()
{
- /* intentionally empty */
+#ifndef DISABLE_PYTHON
+ PyDict_Clear(m_event_dict);
+ Py_DECREF(m_event_dict);
+#endif
}
#ifndef DISABLE_PYTHON
@@ -72,7 +78,6 @@ PyTypeObject SCA_PythonMouse::Type = {
};
PyMethodDef SCA_PythonMouse::Methods[] = {
-// KX_PYMETHODTABLE(SCA_PythonMouse, show),
{NULL,NULL} //Sentinel
};
@@ -86,26 +91,18 @@ PyAttributeDef SCA_PythonMouse::Attributes[] = {
PyObject* SCA_PythonMouse::pyattr_get_events(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef)
{
SCA_PythonMouse* self = static_cast<SCA_PythonMouse*>(self_v);
-
- PyObject* resultlist = PyList_New(0);
-
+
for (int i=SCA_IInputDevice::KX_BEGINMOUSE; i<=SCA_IInputDevice::KX_ENDMOUSE; i++)
{
const SCA_InputEvent & inevent = self->m_mouse->GetEventValue((SCA_IInputDevice::KX_EnumInputs)i);
-
- if (inevent.m_status != SCA_InputEvent::KX_NO_INPUTSTATUS)
- {
- PyObject* keypair = PyTuple_New(2);
- PyTuple_SET_ITEM(keypair, 0, PyLong_FromSsize_t(i));
- PyTuple_SET_ITEM(keypair, 1, PyLong_FromSsize_t(inevent.m_status));
- PyList_Append(resultlist, keypair);
- }
+ PyDict_SetItem(self->m_event_dict, PyLong_FromSsize_t(i), PyLong_FromSsize_t(inevent.m_status));
}
-
- return resultlist;
+ Py_INCREF(self->m_event_dict);
+ return self->m_event_dict;
}
+
PyObject* SCA_PythonMouse::pyattr_get_position(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef)
{
SCA_PythonMouse* self = static_cast<SCA_PythonMouse*>(self_v);
diff --git a/source/gameengine/GameLogic/SCA_PythonMouse.h b/source/gameengine/GameLogic/SCA_PythonMouse.h
index c73e6683fc8..9e1085e6bec 100644
--- a/source/gameengine/GameLogic/SCA_PythonMouse.h
+++ b/source/gameengine/GameLogic/SCA_PythonMouse.h
@@ -30,8 +30,12 @@
class SCA_PythonMouse : public PyObjectPlus
{
Py_Header;
+private:
class SCA_IInputDevice *m_mouse;
class RAS_ICanvas *m_canvas;
+#ifndef DISABLE_PYTHON
+ PyObject* m_event_dict;
+#endif
public:
SCA_PythonMouse(class SCA_IInputDevice* mouse, class RAS_ICanvas* canvas);
virtual ~SCA_PythonMouse();
diff --git a/source/gameengine/GameLogic/SCA_TimeEventManager.cpp b/source/gameengine/GameLogic/SCA_TimeEventManager.cpp
index d794a4f1227..8b99fd669a9 100644
--- a/source/gameengine/GameLogic/SCA_TimeEventManager.cpp
+++ b/source/gameengine/GameLogic/SCA_TimeEventManager.cpp
@@ -26,8 +26,7 @@
* ***** END GPL LICENSE BLOCK *****
*/
-#ifdef WIN32
-
+#if defined(WIN32) && !defined(FREE_WINDOWS)
// This warning tells us about truncation of __long__ stl-generated names.
// It can occasionally cause DevStudio to have internal compiler warnings.
#pragma warning( disable : 4786 )
diff --git a/source/gameengine/GameLogic/SConscript b/source/gameengine/GameLogic/SConscript
index 3840754ed06..507bb7f0bdd 100644
--- a/source/gameengine/GameLogic/SConscript
+++ b/source/gameengine/GameLogic/SConscript
@@ -10,17 +10,17 @@ incs += ' #/source/gameengine/Rasterizer #/source/gameengine/SceneGraph'
defs = []
if env['WITH_BF_SDL']:
- incs += ' ' + env['BF_SDL_INC']
+ incs += ' ' + env['BF_SDL_INC']
else:
- defs.append('DISABLE_SDL')
+ defs.append('DISABLE_SDL')
if env['WITH_BF_PYTHON']:
- incs += ' ' + env['BF_PYTHON_INC']
+ incs += ' ' + env['BF_PYTHON_INC']
else:
- defs.append('DISABLE_PYTHON')
+ defs.append('DISABLE_PYTHON')
if env['OURPLATFORM'] in ('win32-vc', 'win64-vc'):
- if env['BF_DEBUG']:
- defs.append('_DEBUG')
+ if env['BF_DEBUG']:
+ defs.append('_DEBUG')
env.BlenderLib ( 'bf_logic', sources, Split(incs), defs, libtype=['core','player'], priority=[330,65], cxx_compileflags=env['BGE_CXXFLAGS'])
diff --git a/source/gameengine/GamePlayer/Makefile b/source/gameengine/GamePlayer/Makefile
index c4f78f23117..30a13f26503 100644
--- a/source/gameengine/GamePlayer/Makefile
+++ b/source/gameengine/GamePlayer/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
# All rights reserved.
diff --git a/source/gameengine/GamePlayer/common/Makefile b/source/gameengine/GamePlayer/common/Makefile
index e1b07a226f6..e28cacb826a 100644
--- a/source/gameengine/GamePlayer/common/Makefile
+++ b/source/gameengine/GamePlayer/common/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
# All rights reserved.
diff --git a/source/gameengine/GamePlayer/common/SConscript b/source/gameengine/GamePlayer/common/SConscript
index b66d644f9f5..7a16e950b36 100644
--- a/source/gameengine/GamePlayer/common/SConscript
+++ b/source/gameengine/GamePlayer/common/SConscript
@@ -42,7 +42,7 @@ incs = ['.',
'#source/blender/misc',
'#source/blender/blenloader',
'#source/blender/gpu',
- '#extern/glew/include']
+ '#extern/glew/include']
#This is all plugin stuff!
#if sys.platform=='win32':
@@ -61,9 +61,9 @@ incs = ['.',
defs = [ 'GLEW_STATIC' ]
if env['WITH_BF_PYTHON']:
- incs += Split(env['BF_PYTHON_INC'])
+ incs += Split(env['BF_PYTHON_INC'])
else:
- defs.append('DISABLE_PYTHON')
+ defs.append('DISABLE_PYTHON')
incs += Split(env['BF_PNG_INC'])
incs += Split(env['BF_ZLIB_INC'])
diff --git a/source/gameengine/GamePlayer/common/unix/Makefile b/source/gameengine/GamePlayer/common/unix/Makefile
index c86f61b45d8..db29a087b28 100644
--- a/source/gameengine/GamePlayer/common/unix/Makefile
+++ b/source/gameengine/GamePlayer/common/unix/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
# All rights reserved.
diff --git a/source/gameengine/GamePlayer/common/windows/Makefile b/source/gameengine/GamePlayer/common/windows/Makefile
index 3f1deb05f3a..200f84dd3e6 100644
--- a/source/gameengine/GamePlayer/common/windows/Makefile
+++ b/source/gameengine/GamePlayer/common/windows/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
# All rights reserved.
diff --git a/source/gameengine/GamePlayer/ghost/GPG_Application.cpp b/source/gameengine/GamePlayer/ghost/GPG_Application.cpp
index 71507642226..d1b8fb12336 100644
--- a/source/gameengine/GamePlayer/ghost/GPG_Application.cpp
+++ b/source/gameengine/GamePlayer/ghost/GPG_Application.cpp
@@ -370,6 +370,7 @@ bool GPG_Application::startFullScreen(
fSystem->beginFullScreen(setting, &m_mainWindow, stereoVisual);
m_mainWindow->setCursorVisibility(false);
+ m_mainWindow->setState(GHOST_kWindowStateFullScreen);
success = initEngine(m_mainWindow, stereoMode);
if (success) {
diff --git a/source/gameengine/GamePlayer/ghost/GPG_ghost.cpp b/source/gameengine/GamePlayer/ghost/GPG_ghost.cpp
index 9cdee2a340c..9c0b5a24aeb 100644
--- a/source/gameengine/GamePlayer/ghost/GPG_ghost.cpp
+++ b/source/gameengine/GamePlayer/ghost/GPG_ghost.cpp
@@ -161,17 +161,29 @@ static BOOL scr_saver_init(int argc, char **argv)
#endif /* WIN32 */
-void usage(const char* program)
+void usage(const char* program, bool isBlenderPlayer)
{
const char * consoleoption;
+ const char * filename = "";
+ const char * pathname = "";
+
#ifdef _WIN32
consoleoption = "-c ";
#else
consoleoption = "";
#endif
+
+ if (isBlenderPlayer) {
+ filename = "filename.blend";
+#ifdef _WIN32
+ pathname = "c:\\";
+#else
+ pathname = "//home//user//";
+#endif
+ }
printf("usage: %s [-w [w h l t]] [-f [fw fh fb ff]] %s[-g gamengineoptions] "
- "[-s stereomode] filename.blend\n", program, consoleoption);
+ "[-s stereomode] %s\n", program, consoleoption, filename);
printf(" -h: Prints this command summary\n\n");
printf(" -w: display in a window\n");
printf(" --Optional parameters--\n");
@@ -227,8 +239,8 @@ void usage(const char* program)
printf("\n");
printf(" - : all arguments after this are ignored, allowing python to access them from sys.argv\n");
printf("\n");
- printf("example: %s -w 320 200 10 10 -g noaudio c:\\loadtest.blend\n", program);
- printf("example: %s -g show_framerate = 0 c:\\loadtest.blend\n", program);
+ printf("example: %s -w 320 200 10 10 -g noaudio%s%s\n", program, pathname, filename);
+ printf("example: %s -g show_framerate = 0 %s%s\n", program, pathname, filename);
}
static void get_filename(int argc, char **argv, char *filename)
@@ -337,8 +349,8 @@ int main(int argc, char** argv)
int fullScreenBpp = 32;
int fullScreenFrequency = 60;
GHOST_TEmbedderWindowID parentWindow = 0;
-
-
+ bool isBlenderPlayer = false;
+ int validArguments=0;
#ifdef __linux__
#ifdef __alpha__
@@ -412,7 +424,14 @@ int main(int argc, char** argv)
U.audioformat = 0x24;
U.audiochannels = 2;
- for (i = 1; (i < argc) && !error
+ /* if running blenderplayer the last argument can't be parsed since it has to be the filename. */
+ isBlenderPlayer = !blo_is_a_runtime(argv[0]);
+ if (isBlenderPlayer)
+ validArguments = argc - 1;
+ else
+ validArguments = argc;
+
+ for (i = 1; (i < validArguments) && !error
#ifdef WIN32
&& scr_saver_mode == SCREEN_SAVER_MODE_NONE
#endif
@@ -436,14 +455,14 @@ int main(int argc, char** argv)
// Parse game options
{
i++;
- if (i < argc)
+ if (i <= validArguments)
{
char* paramname = argv[i];
// Check for single value versus assignment
- if (i+1 < argc && (*(argv[i+1]) == '='))
+ if (i+1 <= validArguments && (*(argv[i+1]) == '='))
{
i++;
- if (i + 1 < argc)
+ if (i + 1 <= validArguments)
{
i++;
// Assignment
@@ -479,14 +498,14 @@ int main(int argc, char** argv)
i++;
fullScreen = true;
fullScreenParFound = true;
- if ((i + 2) <= argc && argv[i][0] != '-' && argv[i+1][0] != '-')
+ if ((i + 2) <= validArguments && argv[i][0] != '-' && argv[i+1][0] != '-')
{
fullScreenWidth = atoi(argv[i++]);
fullScreenHeight = atoi(argv[i++]);
- if ((i + 1) <= argc && argv[i][0] != '-')
+ if ((i + 1) <= validArguments && argv[i][0] != '-')
{
fullScreenBpp = atoi(argv[i++]);
- if ((i + 1) <= argc && argv[i][0] != '-')
+ if ((i + 1) <= validArguments && argv[i][0] != '-')
fullScreenFrequency = atoi(argv[i++]);
}
}
@@ -497,11 +516,11 @@ int main(int argc, char** argv)
fullScreen = false;
windowParFound = true;
- if ((i + 2) <= argc && argv[i][0] != '-' && argv[i+1][0] != '-')
+ if ((i + 2) <= validArguments && argv[i][0] != '-' && argv[i+1][0] != '-')
{
windowWidth = atoi(argv[i++]);
windowHeight = atoi(argv[i++]);
- if ((i +2) <= argc && argv[i][0] != '-' && argv[i+1][0] != '-')
+ if ((i + 2) <= validArguments && argv[i][0] != '-' && argv[i+1][0] != '-')
{
windowLeft = atoi(argv[i++]);
windowTop = atoi(argv[i++]);
@@ -510,14 +529,19 @@ int main(int argc, char** argv)
break;
case 'h':
- usage(argv[0]);
+ usage(argv[0], isBlenderPlayer);
return 0;
break;
#ifndef _WIN32
case 'i':
i++;
- if ( (i + 1) < argc )
- parentWindow = atoi(argv[i++]);
+ if ( (i + 1) <= validArguments )
+ parentWindow = atoi(argv[i++]);
+ else {
+ error = true;
+ printf("error: too few options for parent window argument.\n");
+ }
+
#ifndef NDEBUG
printf("XWindows ID = %d\n", parentWindow);
#endif //NDEBUG
@@ -529,7 +553,7 @@ int main(int argc, char** argv)
break;
case 's': // stereo
i++;
- if ((i + 1) < argc)
+ if ((i + 1) <= validArguments)
{
stereomode = (RAS_IRasterizer::StereoMode) atoi(argv[i]);
if (stereomode < RAS_IRasterizer::RAS_STEREO_NOSTEREO || stereomode >= RAS_IRasterizer::RAS_STEREO_MAXSTEREO)
@@ -575,7 +599,7 @@ int main(int argc, char** argv)
stereoFlag = STEREO_DOME;
stereomode = RAS_IRasterizer::RAS_STEREO_DOME;
i++;
- if ((i + 1) < argc)
+ if ((i + 1) <= validArguments)
{
if(!strcmp(argv[i], "angle")){
i++;
@@ -631,7 +655,7 @@ int main(int argc, char** argv)
if (error )
{
- usage(argv[0]);
+ usage(argv[0], isBlenderPlayer);
return 0;
}
@@ -714,7 +738,7 @@ int main(int argc, char** argv)
//::printf("game data loaded from %s\n", filename);
if (!bfd) {
- usage(argv[0]);
+ usage(argv[0], isBlenderPlayer);
error = true;
exitcode = KX_EXIT_REQUEST_QUIT_GAME;
}
diff --git a/source/gameengine/GamePlayer/ghost/Makefile b/source/gameengine/GamePlayer/ghost/Makefile
index a7fcf46b695..b2fcd2ac1ff 100644
--- a/source/gameengine/GamePlayer/ghost/Makefile
+++ b/source/gameengine/GamePlayer/ghost/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
# All rights reserved.
diff --git a/source/gameengine/GamePlayer/ghost/SConscript b/source/gameengine/GamePlayer/ghost/SConscript
index 2269b6400e3..41520a06c66 100644
--- a/source/gameengine/GamePlayer/ghost/SConscript
+++ b/source/gameengine/GamePlayer/ghost/SConscript
@@ -43,9 +43,9 @@ incs = ['.',
defs = [ 'GLEW_STATIC' ]
if env['WITH_BF_PYTHON']:
- incs += Split(env['BF_PYTHON_INC'])
+ incs += Split(env['BF_PYTHON_INC'])
else:
- defs.append('DISABLE_PYTHON')
+ defs.append('DISABLE_PYTHON')
if env['WITH_BF_FFMPEG']:
defs.append('WITH_FFMPEG')
diff --git a/source/gameengine/Ketsji/CMakeLists.txt b/source/gameengine/Ketsji/CMakeLists.txt
index a4f9dffb360..18ee86cea13 100644
--- a/source/gameengine/Ketsji/CMakeLists.txt
+++ b/source/gameengine/Ketsji/CMakeLists.txt
@@ -73,7 +73,7 @@ ELSE(WITH_SDL)
ENDIF(WITH_SDL)
IF(WITH_PYTHON)
- SET(INC ${INC} ${PYTHON_INC})
+ LIST(APPEND INC ${PYTHON_INC})
ELSE(WITH_PYTHON)
ADD_DEFINITIONS(-DDISABLE_PYTHON)
ENDIF(WITH_PYTHON)
diff --git a/source/gameengine/Ketsji/KXNetwork/CMakeLists.txt b/source/gameengine/Ketsji/KXNetwork/CMakeLists.txt
index ce3d8fa22fc..106d1a84a92 100644
--- a/source/gameengine/Ketsji/KXNetwork/CMakeLists.txt
+++ b/source/gameengine/Ketsji/KXNetwork/CMakeLists.txt
@@ -39,7 +39,7 @@ SET(INC
)
IF(WITH_PYTHON)
- SET(INC ${INC} ${PYTHON_INC})
+ LIST(APPEND INC ${PYTHON_INC})
ELSE(WITH_PYTHON)
ADD_DEFINITIONS(-DDISABLE_PYTHON)
ENDIF(WITH_PYTHON)
diff --git a/source/gameengine/Ketsji/KXNetwork/Makefile b/source/gameengine/Ketsji/KXNetwork/Makefile
index 365ed8fc9c3..aebbd7921cb 100644
--- a/source/gameengine/Ketsji/KXNetwork/Makefile
+++ b/source/gameengine/Ketsji/KXNetwork/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
# All rights reserved.
diff --git a/source/gameengine/Ketsji/KXNetwork/SConscript b/source/gameengine/Ketsji/KXNetwork/SConscript
index 64d00489c89..e7f98ff5850 100644
--- a/source/gameengine/Ketsji/KXNetwork/SConscript
+++ b/source/gameengine/Ketsji/KXNetwork/SConscript
@@ -10,8 +10,8 @@ incs += ' #source/gameengine/Network #source/gameengine/SceneGraph'
defs = []
if env['WITH_BF_PYTHON']:
- incs += ' ' + env['BF_PYTHON_INC']
+ incs += ' ' + env['BF_PYTHON_INC']
else:
- defs.append('DISABLE_PYTHON')
+ defs.append('DISABLE_PYTHON')
env.BlenderLib ( 'bf_network', Split(sources), Split(incs), defines=defs,libtype=['core','player'], priority=[400,125], cxx_compileflags=env['BGE_CXXFLAGS'])
diff --git a/source/gameengine/Ketsji/KX_BlenderMaterial.cpp b/source/gameengine/Ketsji/KX_BlenderMaterial.cpp
index 2ef7e55429f..d88997e2128 100644
--- a/source/gameengine/Ketsji/KX_BlenderMaterial.cpp
+++ b/source/gameengine/Ketsji/KX_BlenderMaterial.cpp
@@ -794,9 +794,9 @@ PyMethodDef KX_BlenderMaterial::Methods[] =
};
PyAttributeDef KX_BlenderMaterial::Attributes[] = {
- //KX_PYATTRIBUTE_TODO("shader"),
- //KX_PYATTRIBUTE_TODO("materialIndex"),
- //KX_PYATTRIBUTE_TODO("blending"),
+ KX_PYATTRIBUTE_RO_FUNCTION("shader", KX_BlenderMaterial, pyattr_get_shader),
+ KX_PYATTRIBUTE_RO_FUNCTION("material_index", KX_BlenderMaterial, pyattr_get_materialIndex),
+ KX_PYATTRIBUTE_RW_FUNCTION("blending", KX_BlenderMaterial, pyattr_get_blending, pyattr_set_blending),
{ NULL } //Sentinel
};
@@ -822,6 +822,37 @@ PyTypeObject KX_BlenderMaterial::Type = {
py_base_new
};
+PyObject* KX_BlenderMaterial::pyattr_get_shader(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef)
+{
+ KX_BlenderMaterial* self= static_cast<KX_BlenderMaterial*>(self_v);
+ return self->PygetShader(NULL, NULL);
+}
+
+PyObject* KX_BlenderMaterial::pyattr_get_materialIndex(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef)
+{
+ KX_BlenderMaterial* self= static_cast<KX_BlenderMaterial*>(self_v);
+ return PyLong_FromSsize_t(self->GetMaterialIndex());
+}
+
+PyObject* KX_BlenderMaterial::pyattr_get_blending(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef)
+{
+ KX_BlenderMaterial* self= static_cast<KX_BlenderMaterial*>(self_v);
+ unsigned int* bfunc = self->getBlendFunc();
+ return Py_BuildValue("(ll)", (long int)bfunc[0], (long int)bfunc[1]);
+}
+
+int KX_BlenderMaterial::pyattr_set_blending(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef, PyObject *value)
+{
+ KX_BlenderMaterial* self= static_cast<KX_BlenderMaterial*>(self_v);
+ PyObject* obj = self->PysetBlending(value, NULL);
+ if(obj)
+ {
+ Py_DECREF(obj);
+ return 0;
+ }
+ return -1;
+}
+
KX_PYMETHODDEF_DOC( KX_BlenderMaterial, getShader , "getShader()")
{
if( !GLEW_ARB_fragment_shader) {
@@ -908,7 +939,7 @@ static unsigned int GL_array[11] = {
GL_SRC_ALPHA_SATURATE
};
-KX_PYMETHODDEF_DOC( KX_BlenderMaterial, setBlending , "setBlending( GameLogic.src, GameLogic.dest)")
+KX_PYMETHODDEF_DOC( KX_BlenderMaterial, setBlending , "setBlending( bge.logic.src, bge.logic.dest)")
{
unsigned int b[2];
if(PyArg_ParseTuple(args, "ii:setBlending", &b[0], &b[1]))
diff --git a/source/gameengine/Ketsji/KX_BlenderMaterial.h b/source/gameengine/Ketsji/KX_BlenderMaterial.h
index 5bf62ff6b7c..239e334f68a 100644
--- a/source/gameengine/Ketsji/KX_BlenderMaterial.h
+++ b/source/gameengine/Ketsji/KX_BlenderMaterial.h
@@ -79,6 +79,9 @@ public:
Image * getImage (unsigned int idx) {
return (idx < MAXTEX && mMaterial) ? mMaterial->img[idx] : NULL;
}
+ unsigned int* getBlendFunc() {
+ return mBlendFunc;
+ }
// for ipos
void UpdateIPO(
MT_Vector4 rgba, MT_Vector3 specrgb,
@@ -99,6 +102,11 @@ public:
// --------------------------------
virtual PyObject* py_repr(void) { return PyUnicode_FromString(mMaterial->matname.ReadPtr()); }
+ static PyObject* pyattr_get_shader(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef);
+ static PyObject* pyattr_get_materialIndex(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef);
+ static PyObject* pyattr_get_blending(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef);
+ static int pyattr_set_blending(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef, PyObject *value);
+
KX_PYMETHOD_DOC( KX_BlenderMaterial, getShader );
KX_PYMETHOD_DOC( KX_BlenderMaterial, getMaterialIndex );
KX_PYMETHOD_DOC( KX_BlenderMaterial, getTexture );
diff --git a/source/gameengine/Ketsji/KX_Camera.cpp b/source/gameengine/Ketsji/KX_Camera.cpp
index 36b90411e1f..2402baf92ac 100644
--- a/source/gameengine/Ketsji/KX_Camera.cpp
+++ b/source/gameengine/Ketsji/KX_Camera.cpp
@@ -553,8 +553,8 @@ KX_PYMETHODDEF_DOC_VARARGS(KX_Camera, sphereInsideFrustum,
"\tcenter = the center of the sphere (in world coordinates.)\n"
"\tradius = the radius of the sphere\n\n"
"\tExample:\n"
-"\timport GameLogic\n\n"
-"\tco = GameLogic.getCurrentController()\n"
+"\timport bge.logic\n\n"
+"\tco = bge.logic.getCurrentController()\n"
"\tcam = co.GetOwner()\n\n"
"\t# A sphere of radius 4.0 located at [x, y, z] = [1.0, 1.0, 1.0]\n"
"\tif (cam.sphereInsideFrustum([1.0, 1.0, 1.0], 4) != cam.OUTSIDE):\n"
@@ -586,8 +586,8 @@ KX_PYMETHODDEF_DOC_O(KX_Camera, boxInsideFrustum,
"\tinside/outside/intersects this camera's viewing frustum.\n\n"
"\tbox = a list of the eight (8) corners of the box (in world coordinates.)\n\n"
"\tExample:\n"
-"\timport GameLogic\n\n"
-"\tco = GameLogic.getCurrentController()\n"
+"\timport bge.logic\n\n"
+"\tco = bge.logic.getCurrentController()\n"
"\tcam = co.GetOwner()\n\n"
"\tbox = []\n"
"\tbox.append([-1.0, -1.0, -1.0])\n"
@@ -630,8 +630,8 @@ KX_PYMETHODDEF_DOC_O(KX_Camera, pointInsideFrustum,
"\treturns 1 if the given point is inside this camera's viewing frustum.\n\n"
"\tpoint = The point to test (in world coordinates.)\n\n"
"\tExample:\n"
-"\timport GameLogic\n\n"
-"\tco = GameLogic.getCurrentController()\n"
+"\timport bge.logic\n\n"
+"\tco = bge.logic.getCurrentController()\n"
"\tcam = co.GetOwner()\n\n"
"\t# Test point [0.0, 0.0, 0.0]"
"\tif (cam.pointInsideFrustum([0.0, 0.0, 0.0])):\n"
diff --git a/source/gameengine/Ketsji/KX_ConstraintWrapper.cpp b/source/gameengine/Ketsji/KX_ConstraintWrapper.cpp
index 8af6e63f343..b1baa5fe9e1 100644
--- a/source/gameengine/Ketsji/KX_ConstraintWrapper.cpp
+++ b/source/gameengine/Ketsji/KX_ConstraintWrapper.cpp
@@ -110,8 +110,14 @@ PyMethodDef KX_ConstraintWrapper::Methods[] = {
};
PyAttributeDef KX_ConstraintWrapper::Attributes[] = {
- //KX_PYATTRIBUTE_TODO("constraintId"),
+ KX_PYATTRIBUTE_RO_FUNCTION("constraint_id", KX_ConstraintWrapper, pyattr_get_constraintId),
{ NULL } //Sentinel
};
+PyObject* KX_ConstraintWrapper::pyattr_get_constraintId(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef)
+{
+ KX_ConstraintWrapper* self= static_cast<KX_ConstraintWrapper*>(self_v);
+ return self->PyGetConstraintId();
+}
+
#endif // DISABLE_PYTHON
diff --git a/source/gameengine/Ketsji/KX_ConstraintWrapper.h b/source/gameengine/Ketsji/KX_ConstraintWrapper.h
index 530ecf16fed..db9543c23ae 100644
--- a/source/gameengine/Ketsji/KX_ConstraintWrapper.h
+++ b/source/gameengine/Ketsji/KX_ConstraintWrapper.h
@@ -44,6 +44,8 @@ public:
KX_PYMETHOD_NOARGS(KX_ConstraintWrapper,GetConstraintId);
KX_PYMETHOD(KX_ConstraintWrapper,SetParam);
KX_PYMETHOD(KX_ConstraintWrapper,GetParam);
+
+ static PyObject* pyattr_get_constraintId(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef);
#endif
private:
diff --git a/source/gameengine/Ketsji/KX_ConvertPhysicsObject.h b/source/gameengine/Ketsji/KX_ConvertPhysicsObject.h
index 879bcd472c6..ca20aa6b618 100644
--- a/source/gameengine/Ketsji/KX_ConvertPhysicsObject.h
+++ b/source/gameengine/Ketsji/KX_ConvertPhysicsObject.h
@@ -53,7 +53,8 @@ typedef enum {
KX_BOUNDCONE,
KX_BOUNDMESH,
KX_BOUNDPOLYTOPE,
- KX_BOUND_DYN_MESH
+ KX_BOUND_DYN_MESH,
+ KX_BOUNDCAPSULE
} KX_BoundBoxClass;
struct KX_BoxBounds
@@ -168,4 +169,3 @@ bool KX_ReInstanceBulletShapeFromMesh(KX_GameObject *gameobj, KX_GameObject *fro
#endif
#endif //KX_CONVERTPHYSICSOBJECTS
-
diff --git a/source/gameengine/Ketsji/KX_ConvertPhysicsObjects.cpp b/source/gameengine/Ketsji/KX_ConvertPhysicsObjects.cpp
index 44ae032179b..061220ce0c1 100644
--- a/source/gameengine/Ketsji/KX_ConvertPhysicsObjects.cpp
+++ b/source/gameengine/Ketsji/KX_ConvertPhysicsObjects.cpp
@@ -26,7 +26,7 @@
*
* ***** END GPL LICENSE BLOCK *****
*/
-#ifdef WIN32
+#if defined(WIN32) && !defined(FREE_WINDOWS)
#pragma warning (disable : 4786)
#endif
@@ -184,6 +184,14 @@ void KX_ConvertBulletObject( class KX_GameObject* gameobj,
bm = shapeInfo->CreateBulletShape(ci.m_margin);
break;
}
+ case KX_BOUNDCAPSULE:
+ {
+ shapeInfo->m_radius = objprop->m_boundobject.c.m_radius;
+ shapeInfo->m_height = objprop->m_boundobject.c.m_height;
+ shapeInfo->m_shapeType = PHY_SHAPE_CAPSULE;
+ bm = shapeInfo->CreateBulletShape(ci.m_margin);
+ break;
+ }
case KX_BOUNDMESH:
{
// mesh shapes can be shared, check first if we already have a shape on that mesh
diff --git a/source/gameengine/Ketsji/KX_Dome.cpp b/source/gameengine/Ketsji/KX_Dome.cpp
index 94258088e9f..44d7827db6a 100644
--- a/source/gameengine/Ketsji/KX_Dome.cpp
+++ b/source/gameengine/Ketsji/KX_Dome.cpp
@@ -2049,11 +2049,11 @@ void KX_Dome::RenderDomeFrame(KX_Scene* scene, KX_Camera* cam, int i)
m_rasterizer->SetViewMatrix(viewmat, cam->NodeGetWorldOrientation(), cam->NodeGetWorldPosition(), 1.0);
cam->SetModelviewMatrix(viewmat);
- scene->CalculateVisibleMeshes(m_rasterizer,cam);
- scene->RenderBuckets(camtrans, m_rasterizer, m_rendertools);
-
// restore the original orientation
cam->NodeSetLocalOrientation(camori);
cam->NodeUpdateGS(0.f);
+
+ scene->CalculateVisibleMeshes(m_rasterizer,cam);
+ scene->RenderBuckets(camtrans, m_rasterizer, m_rendertools);
}
diff --git a/source/gameengine/Ketsji/KX_GameObject.cpp b/source/gameengine/Ketsji/KX_GameObject.cpp
index d135e3d9d7b..e955c344f0a 100644
--- a/source/gameengine/Ketsji/KX_GameObject.cpp
+++ b/source/gameengine/Ketsji/KX_GameObject.cpp
@@ -34,7 +34,7 @@ typedef unsigned __int64 uint_ptr;
typedef unsigned long uint_ptr;
#endif
-#ifdef WIN32
+#if defined(WIN32) && !defined(FREE_WINDOWS)
// This warning tells us about truncation of __long__ stl-generated names.
// It can occasionally cause DevStudio to have internal compiler warnings.
#pragma warning( disable : 4786 )
diff --git a/source/gameengine/Ketsji/KX_GameObject.h b/source/gameengine/Ketsji/KX_GameObject.h
index c0683ae0b4e..5d7f3948a61 100644
--- a/source/gameengine/Ketsji/KX_GameObject.h
+++ b/source/gameengine/Ketsji/KX_GameObject.h
@@ -31,7 +31,7 @@
#ifndef __KX_GAMEOBJECT
#define __KX_GAMEOBJECT
-#ifdef WIN32
+#if defined(WIN32) && !defined(FREE_WINDOWS)
// get rid of this stupid "warning 'this' used in initialiser list", generated by VC when including Solid/Sumo
#pragma warning (disable : 4355)
#endif
diff --git a/source/gameengine/Ketsji/KX_IPO_SGController.cpp b/source/gameengine/Ketsji/KX_IPO_SGController.cpp
index 1d4c64483f5..abe63a68e79 100644
--- a/source/gameengine/Ketsji/KX_IPO_SGController.cpp
+++ b/source/gameengine/Ketsji/KX_IPO_SGController.cpp
@@ -34,7 +34,7 @@ typedef unsigned __int64 uint_ptr;
typedef unsigned long uint_ptr;
#endif
-#ifdef WIN32
+#if defined(WIN32) && !defined(FREE_WINDOWS)
// This warning tells us about truncation of __long__ stl-generated names.
// It can occasionally cause DevStudio to have internal compiler warnings.
#pragma warning( disable : 4786 )
diff --git a/source/gameengine/Ketsji/KX_KetsjiEngine.cpp b/source/gameengine/Ketsji/KX_KetsjiEngine.cpp
index 2d9f4bbadf3..1e8e896cff6 100644
--- a/source/gameengine/Ketsji/KX_KetsjiEngine.cpp
+++ b/source/gameengine/Ketsji/KX_KetsjiEngine.cpp
@@ -28,7 +28,7 @@
* The engine ties all game modules together.
*/
-#ifdef WIN32
+#if defined(WIN32) && !defined(FREE_WINDOWS)
#pragma warning (disable : 4786)
#endif //WIN32
@@ -237,7 +237,7 @@ void KX_KetsjiEngine::SetRasterizer(RAS_IRasterizer* rasterizer)
#ifndef DISABLE_PYTHON
/*
- * At the moment the GameLogic module is imported into 'pythondictionary' after this function is called.
+ * At the moment the bge.logic module is imported into 'pythondictionary' after this function is called.
* if this function ever changes to assign a copy, make sure the game logic module is imported into this dictionary before hand.
*/
void KX_KetsjiEngine::SetPyNamespace(PyObject* pythondictionary)
@@ -968,44 +968,17 @@ void KX_KetsjiEngine::DoSound(KX_Scene* scene)
KX_Camera* cam = scene->GetActiveCamera();
if (!cam)
return;
- MT_Point3 listenerposition = cam->NodeGetWorldPosition();
- MT_Vector3 listenervelocity = cam->GetLinearVelocity();
- MT_Matrix3x3 listenerorientation = cam->NodeGetWorldOrientation();
- {
- AUD_3DData data;
- float f;
-
- listenerorientation.getValue3x3(data.orientation);
- listenerposition.getValue(data.position);
- listenervelocity.getValue(data.velocity);
-
- f = data.position[1];
- data.position[1] = data.position[2];
- data.position[2] = -f;
-
- f = data.velocity[1];
- data.velocity[1] = data.velocity[2];
- data.velocity[2] = -f;
+ float f[4];
- f = data.orientation[1];
- data.orientation[1] = data.orientation[2];
- data.orientation[2] = -f;
+ cam->NodeGetWorldPosition().getValue(f);
+ AUD_setListenerLocation(f);
- f = data.orientation[3];
- data.orientation[3] = -data.orientation[6];
- data.orientation[6] = f;
+ cam->GetLinearVelocity().getValue(f);
+ AUD_setListenerVelocity(f);
- f = data.orientation[4];
- data.orientation[4] = -data.orientation[8];
- data.orientation[8] = -f;
-
- f = data.orientation[5];
- data.orientation[5] = data.orientation[7];
- data.orientation[7] = f;
-
- AUD_updateListener(&data);
- }
+ cam->NodeGetWorldOrientation().getRotation().getValue(f);
+ AUD_setListenerOrientation(f);
}
diff --git a/source/gameengine/Ketsji/KX_Light.cpp b/source/gameengine/Ketsji/KX_Light.cpp
index ac20b4f2f56..e282d7ac375 100644
--- a/source/gameengine/Ketsji/KX_Light.cpp
+++ b/source/gameengine/Ketsji/KX_Light.cpp
@@ -26,8 +26,7 @@
* ***** END GPL LICENSE BLOCK *****
*/
-#ifdef WIN32
-
+#if defined(WIN32) && !defined(FREE_WINDOWS)
#pragma warning (disable : 4786)
#endif
diff --git a/source/gameengine/Ketsji/KX_MouseFocusSensor.cpp b/source/gameengine/Ketsji/KX_MouseFocusSensor.cpp
index 63771ae08dc..19114c86c98 100644
--- a/source/gameengine/Ketsji/KX_MouseFocusSensor.cpp
+++ b/source/gameengine/Ketsji/KX_MouseFocusSensor.cpp
@@ -28,7 +28,7 @@
* KX_MouseFocusSensor determines mouse in/out/over events.
*/
-#ifdef WIN32
+#if defined(WIN32) && !defined(FREE_WINDOWS)
// This warning tells us about truncation of __long__ stl-generated names.
// It can occasionally cause DevStudio to have internal compiler warnings.
#pragma warning( disable : 4786 )
diff --git a/source/gameengine/Ketsji/KX_PolyProxy.cpp b/source/gameengine/Ketsji/KX_PolyProxy.cpp
index 837c79c77b3..9395e57e68b 100644
--- a/source/gameengine/Ketsji/KX_PolyProxy.cpp
+++ b/source/gameengine/Ketsji/KX_PolyProxy.cpp
@@ -72,90 +72,19 @@ PyMethodDef KX_PolyProxy::Methods[] = {
};
PyAttributeDef KX_PolyProxy::Attributes[] = {
- /* All dummy's so they come up in a dir() */
- //KX_PYATTRIBUTE_TODO("DummyProps"),
- KX_PYATTRIBUTE_DUMMY("matname"),
- KX_PYATTRIBUTE_DUMMY("texture"),
- KX_PYATTRIBUTE_DUMMY("material"),
- KX_PYATTRIBUTE_DUMMY("matid"),
- KX_PYATTRIBUTE_DUMMY("v1"),
- KX_PYATTRIBUTE_DUMMY("v2"),
- KX_PYATTRIBUTE_DUMMY("v3"),
- KX_PYATTRIBUTE_DUMMY("v4"),
- KX_PYATTRIBUTE_DUMMY("visible"),
- KX_PYATTRIBUTE_DUMMY("collide"),
+ KX_PYATTRIBUTE_RO_FUNCTION("material_name", KX_PolyProxy, pyattr_get_material_name),
+ KX_PYATTRIBUTE_RO_FUNCTION("texture_name", KX_PolyProxy, pyattr_get_texture_name),
+ KX_PYATTRIBUTE_RO_FUNCTION("material", KX_PolyProxy, pyattr_get_material),
+ KX_PYATTRIBUTE_RO_FUNCTION("material_id", KX_PolyProxy, pyattr_get_material_id),
+ KX_PYATTRIBUTE_RO_FUNCTION("v1", KX_PolyProxy, pyattr_get_v1),
+ KX_PYATTRIBUTE_RO_FUNCTION("v2", KX_PolyProxy, pyattr_get_v2),
+ KX_PYATTRIBUTE_RO_FUNCTION("v3", KX_PolyProxy, pyattr_get_v3),
+ KX_PYATTRIBUTE_RO_FUNCTION("v4", KX_PolyProxy, pyattr_get_v4),
+ KX_PYATTRIBUTE_RO_FUNCTION("visible", KX_PolyProxy, pyattr_get_visible),
+ KX_PYATTRIBUTE_RO_FUNCTION("collide", KX_PolyProxy, pyattr_get_collide),
{ NULL } //Sentinel
};
-#if 0
-PyObject* KX_PolyProxy::py_getattro(PyObject *attr)
-{
- char *attr_str= _PyUnicode_AsString(attr);
- if (!strcmp(attr_str, "matname"))
- {
- return PyUnicode_FromString(m_polygon->GetMaterial()->GetPolyMaterial()->GetMaterialName());
- }
- if (!strcmp(attr_str, "texture"))
- {
- return PyUnicode_FromString(m_polygon->GetMaterial()->GetPolyMaterial()->GetTextureName());
- }
- if (!strcmp(attr_str, "material"))
- {
- RAS_IPolyMaterial *polymat = m_polygon->GetMaterial()->GetPolyMaterial();
- if(polymat->GetFlag() & RAS_BLENDERMAT)
- {
- KX_BlenderMaterial* mat = static_cast<KX_BlenderMaterial*>(polymat);
- return mat->GetProxy();
- }
- else
- {
- KX_PolygonMaterial* mat = static_cast<KX_PolygonMaterial*>(polymat);
- return mat->GetProxy();
- }
- }
- if (!strcmp(attr_str, "matid"))
- {
- // we'll have to scan through the material bucket of the mes and compare with
- // the one of the polygon
- RAS_MaterialBucket* polyBucket = m_polygon->GetMaterial();
- unsigned int matid;
- for (matid=0; matid<(unsigned int)m_mesh->NumMaterials(); matid++)
- {
- RAS_MeshMaterial* meshMat = m_mesh->GetMeshMaterial(matid);
- if (meshMat->m_bucket == polyBucket)
- // found it
- break;
- }
- return PyLong_FromSsize_t(matid);
- }
- if (!strcmp(attr_str, "v1"))
- {
- return PyLong_FromSsize_t(m_polygon->GetVertexOffsetAbs(m_mesh, 0));
- }
- if (!strcmp(attr_str, "v2"))
- {
- return PyLong_FromSsize_t(m_polygon->GetVertexOffsetAbs(m_mesh, 1));
- }
- if (!strcmp(attr_str, "v3"))
- {
- return PyLong_FromSsize_t(m_polygon->GetVertexOffsetAbs(m_mesh, 2));
- }
- if (!strcmp(attr_str, "v4"))
- {
- return PyLong_FromSsize_t(((m_polygon->VertexCount()>3)?m_polygon->GetVertexOffsetAbs(m_mesh, 3):0));
- }
- if (!strcmp(attr_str, "visible"))
- {
- return PyLong_FromSsize_t(m_polygon->IsVisible());
- }
- if (!strcmp(attr_str, "collide"))
- {
- return PyLong_FromSsize_t(m_polygon->IsCollider());
- }
- // py_getattro_up(CValue); // XXX -- todo, make all these attributes
-}
-#endif
-
KX_PolyProxy::KX_PolyProxy(const RAS_MeshObject*mesh, RAS_Polygon* polygon)
: m_polygon(polygon),
m_mesh((RAS_MeshObject*)mesh)
@@ -179,7 +108,75 @@ CValue* KX_PolyProxy::GetReplica() { return NULL;}
// stuff for python integration
-KX_PYMETHODDEF_DOC_NOARGS(KX_PolyProxy, getMaterialIndex,
+PyObject* KX_PolyProxy::pyattr_get_material_name(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef)
+{
+ KX_PolyProxy* self= static_cast<KX_PolyProxy*>(self_v);
+ return self->PygetMaterialName();
+}
+
+PyObject* KX_PolyProxy::pyattr_get_texture_name(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef)
+{
+ KX_PolyProxy* self= static_cast<KX_PolyProxy*>(self_v);
+ return self->PygetTextureName();
+}
+
+PyObject* KX_PolyProxy::pyattr_get_material(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef)
+{
+ KX_PolyProxy* self= static_cast<KX_PolyProxy*>(self_v);
+ return self->PygetMaterial();
+}
+
+PyObject* KX_PolyProxy::pyattr_get_material_id(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef)
+{
+ KX_PolyProxy* self= static_cast<KX_PolyProxy*>(self_v);
+ return self->PygetMaterialIndex();
+}
+
+PyObject* KX_PolyProxy::pyattr_get_v1(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef)
+{
+ KX_PolyProxy* self= static_cast<KX_PolyProxy*>(self_v);
+
+ return PyLong_FromSsize_t(self->m_polygon->GetVertexOffsetAbs(self->m_mesh, 0));
+}
+
+PyObject* KX_PolyProxy::pyattr_get_v2(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef)
+{
+ KX_PolyProxy* self= static_cast<KX_PolyProxy*>(self_v);
+
+ return PyLong_FromSsize_t(self->m_polygon->GetVertexOffsetAbs(self->m_mesh, 1));
+}
+
+PyObject* KX_PolyProxy::pyattr_get_v3(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef)
+{
+ KX_PolyProxy* self= static_cast<KX_PolyProxy*>(self_v);
+
+ return PyLong_FromSsize_t(self->m_polygon->GetVertexOffsetAbs(self->m_mesh, 2));
+}
+
+PyObject* KX_PolyProxy::pyattr_get_v4(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef)
+{
+ KX_PolyProxy* self= static_cast<KX_PolyProxy*>(self_v);
+
+ if (3 < self->m_polygon->VertexCount())
+ {
+ return PyLong_FromSsize_t(self->m_polygon->GetVertexOffsetAbs(self->m_mesh, 3));
+ }
+ return PyLong_FromSsize_t(0);
+}
+
+PyObject* KX_PolyProxy::pyattr_get_visible(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef)
+{
+ KX_PolyProxy* self= static_cast<KX_PolyProxy*>(self_v);
+ return self->PyisVisible();
+}
+
+PyObject* KX_PolyProxy::pyattr_get_collide(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef)
+{
+ KX_PolyProxy* self= static_cast<KX_PolyProxy*>(self_v);
+ return self->PyisCollider();
+}
+
+KX_PYMETHODDEF_DOC_NOARGS(KX_PolyProxy, getMaterialIndex,
"getMaterialIndex() : return the material index of the polygon in the mesh\n")
{
RAS_MaterialBucket* polyBucket = m_polygon->GetMaterial();
diff --git a/source/gameengine/Ketsji/KX_PolyProxy.h b/source/gameengine/Ketsji/KX_PolyProxy.h
index 97d89b37435..3e669630e30 100644
--- a/source/gameengine/Ketsji/KX_PolyProxy.h
+++ b/source/gameengine/Ketsji/KX_PolyProxy.h
@@ -54,6 +54,16 @@ public:
// stuff for python integration
+ static PyObject* pyattr_get_material_name(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef);
+ static PyObject* pyattr_get_texture_name(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef);
+ static PyObject* pyattr_get_material(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef);
+ static PyObject* pyattr_get_material_id(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef);
+ static PyObject* pyattr_get_v1(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef);
+ static PyObject* pyattr_get_v2(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef);
+ static PyObject* pyattr_get_v3(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef);
+ static PyObject* pyattr_get_v4(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef);
+ static PyObject* pyattr_get_visible(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef);
+ static PyObject* pyattr_get_collide(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef);
KX_PYMETHOD_DOC_NOARGS(KX_PolyProxy,getMaterialIndex)
KX_PYMETHOD_DOC_NOARGS(KX_PolyProxy,getNumVertex)
diff --git a/source/gameengine/Ketsji/KX_PolygonMaterial.cpp b/source/gameengine/Ketsji/KX_PolygonMaterial.cpp
index dacc74f139f..63204b16e8b 100644
--- a/source/gameengine/Ketsji/KX_PolygonMaterial.cpp
+++ b/source/gameengine/Ketsji/KX_PolygonMaterial.cpp
@@ -233,7 +233,7 @@ PyAttributeDef KX_PolygonMaterial::Attributes[] = {
KX_PYATTRIBUTE_FLOAT_RW("shininess", 0.0f, 1000.0f, KX_PolygonMaterial, m_shininess),
KX_PYATTRIBUTE_FLOAT_RW("specularity", 0.0f, 1000.0f, KX_PolygonMaterial, m_specularity),
- KX_PYATTRIBUTE_RW_FUNCTION("diffuse", KX_PolygonMaterial, pyattr_get_texture, pyattr_set_diffuse),
+ KX_PYATTRIBUTE_RW_FUNCTION("diffuse", KX_PolygonMaterial, pyattr_get_diffuse, pyattr_set_diffuse),
KX_PYATTRIBUTE_RW_FUNCTION("specular",KX_PolygonMaterial, pyattr_get_specular, pyattr_set_specular),
KX_PYATTRIBUTE_RO_FUNCTION("tface", KX_PolygonMaterial, pyattr_get_tface), /* How the heck is this even useful??? - Campbell */
diff --git a/source/gameengine/Ketsji/KX_PyMath.cpp b/source/gameengine/Ketsji/KX_PyMath.cpp
index 59d1c197cf3..12f88331d15 100644
--- a/source/gameengine/Ketsji/KX_PyMath.cpp
+++ b/source/gameengine/Ketsji/KX_PyMath.cpp
@@ -28,7 +28,7 @@
* Initialize Python thingies.
*/
-#ifdef WIN32
+#if defined(WIN32) && !defined(FREE_WINDOWS)
#pragma warning (disable : 4786)
#endif //WIN32
diff --git a/source/gameengine/Ketsji/KX_PythonInit.cpp b/source/gameengine/Ketsji/KX_PythonInit.cpp
index 871d6821dd4..38a9229814d 100644
--- a/source/gameengine/Ketsji/KX_PythonInit.cpp
+++ b/source/gameengine/Ketsji/KX_PythonInit.cpp
@@ -30,7 +30,7 @@
#include "GL/glew.h"
-#ifdef WIN32
+#if defined(WIN32) && !defined(FREE_WINDOWS)
#pragma warning (disable : 4786)
#endif //WIN32
@@ -38,6 +38,7 @@
extern "C" {
#include "bpy_internal_import.h" /* from the blender python api, but we want to import text too! */
+ #include "py_capi_utils.h"
#include "mathutils.h" // Blender.Mathutils module copied here so the blenderlayer can use.
#include "geometry.h" // Blender.Geometry module copied here so the blenderlayer can use.
#include "bgl.h"
@@ -45,6 +46,10 @@ extern "C" {
#include "marshal.h" /* python header for loading/saving dicts */
}
+
+#define WITH_PYTHON
+#include "AUD_PyInit.h"
+
#endif
#include "KX_PythonInit.h"
@@ -120,7 +125,7 @@ extern "C" {
#include "KX_BlenderSceneConverter.h"
#include "KX_MeshProxy.h" /* for creating a new library of mesh objects */
extern "C" {
- #include "BLO_readfile.h"
+ #include "BKE_idcode.h"
}
#include "NG_NetworkScene.h" //Needed for sendMessage()
@@ -271,8 +276,8 @@ static PyObject* gPyRestartGame(PyObject*)
}
static char gPySaveGlobalDict_doc[] =
-"saveGlobalDict()\n\
-Saves GameLogic.globalDict to a file";
+ "saveGlobalDict()\n"
+ "Saves bge.logic.globalDict to a file";
static PyObject* gPySaveGlobalDict(PyObject*)
{
@@ -308,8 +313,8 @@ static PyObject* gPySaveGlobalDict(PyObject*)
}
static char gPyLoadGlobalDict_doc[] =
-"LoadGlobalDict()\n\
-Loads GameLogic.globalDict from a file";
+ "LoadGlobalDict()\n"
+ "Loads bge.logic.globalDict from a file";
static PyObject* gPyLoadGlobalDict(PyObject*)
{
@@ -384,15 +389,6 @@ static PyObject* gPyGetSpectrum(PyObject*)
return resultlist;
}
-
-static PyObject* gPyStopDSP(PyObject*, PyObject* args)
-{
- PyErr_SetString(PyExc_RuntimeError, "no audio device available");
- return NULL;
-
- Py_RETURN_NONE;
-}
-
static PyObject* gPySetLogicTicRate(PyObject*, PyObject* args)
{
float ticrate;
@@ -640,13 +636,28 @@ static PyObject *gLibLoad(PyObject*, PyObject* args)
KX_Scene *kx_scene= gp_KetsjiScene;
char *path;
char *group;
+ Py_buffer py_buffer;
+ py_buffer.buf = NULL;
char *err_str= NULL;
- if (!PyArg_ParseTuple(args,"ss:LibLoad",&path, &group))
+ if (!PyArg_ParseTuple(args,"ss|y*:LibLoad",&path, &group, &py_buffer))
return NULL;
- if(kx_scene->GetSceneConverter()->LinkBlendFile(path, group, kx_scene, &err_str)) {
- Py_RETURN_TRUE;
+ if (!py_buffer.buf)
+ {
+ if(kx_scene->GetSceneConverter()->LinkBlendFilePath(path, group, kx_scene, &err_str)) {
+ Py_RETURN_TRUE;
+ }
+ }
+ else
+ {
+
+ if(kx_scene->GetSceneConverter()->LinkBlendFileMemory(py_buffer.buf, py_buffer.len, path, group, kx_scene, &err_str)) {
+ PyBuffer_Release(&py_buffer);
+ Py_RETURN_TRUE;
+ }
+
+ PyBuffer_Release(&py_buffer);
}
if(err_str) {
@@ -675,7 +686,7 @@ static PyObject *gLibNew(PyObject*, PyObject* args)
return NULL;
}
- idcode= BLO_idcode_from_name(group);
+ idcode= BKE_idcode_from_name(group);
if(idcode==0) {
PyErr_Format(PyExc_ValueError, "invalid group given \"%s\"", group);
return NULL;
@@ -761,7 +772,6 @@ static struct PyMethodDef game_methods[] = {
{"getRandomFloat",(PyCFunction) gPyGetRandomFloat, METH_NOARGS, (const char *)gPyGetRandomFloat_doc},
{"setGravity",(PyCFunction) gPySetGravity, METH_O, (const char *)"set Gravitation"},
{"getSpectrum",(PyCFunction) gPyGetSpectrum, METH_NOARGS, (const char *)"get audio spectrum"},
- {"stopDSP",(PyCFunction) gPyStopDSP, METH_VARARGS, (const char *)"stop using the audio dsp (for performance reasons)"},
{"getMaxLogicFrame", (PyCFunction) gPyGetMaxLogicFrame, METH_NOARGS, (const char *)"Gets the max number of logic frame per render frame"},
{"setMaxLogicFrame", (PyCFunction) gPySetMaxLogicFrame, METH_VARARGS, (const char *)"Sets the max number of logic frame per render frame"},
{"getMaxPhysicsFrame", (PyCFunction) gPyGetMaxPhysicsFrame, METH_NOARGS, (const char *)"Gets the max number of physics frame per render frame"},
@@ -944,7 +954,6 @@ static PyObject* gPyDisableMist(PyObject*)
Py_RETURN_NONE;
}
-
static PyObject* gPySetMistStart(PyObject*, PyObject* args)
{
@@ -1241,7 +1250,7 @@ static struct PyMethodDef rasterizer_methods[] = {
// Initialization function for the module (*must* be called initGameLogic)
static char GameLogic_module_documentation[] =
-"This is the Python API for the game engine of GameLogic"
+"This is the Python API for the game engine of bge.logic"
;
static char Rasterizer_module_documentation[] =
@@ -1322,7 +1331,6 @@ PyObject* initGameLogic(KX_KetsjiEngine *engine, KX_Scene* scene) // quick hack
KX_MACRO_addTypesToDict(d, KX_PROPSENSOR_EXPRESSION, SCA_PropertySensor::KX_PROPSENSOR_EXPRESSION);
/* 3. Constraint actuator */
- /* XXX, TODO NXBGE, move constants names from KX_ACT_CONSTRAINT_foo to KX_CONSTRAINTACT_foo */
KX_MACRO_addTypesToDict(d, KX_CONSTRAINTACT_LOCX, KX_ConstraintActuator::KX_ACT_CONSTRAINT_LOCX);
KX_MACRO_addTypesToDict(d, KX_CONSTRAINTACT_LOCY, KX_ConstraintActuator::KX_ACT_CONSTRAINT_LOCY);
KX_MACRO_addTypesToDict(d, KX_CONSTRAINTACT_LOCZ, KX_ConstraintActuator::KX_ACT_CONSTRAINT_LOCZ);
@@ -1338,18 +1346,18 @@ PyObject* initGameLogic(KX_KetsjiEngine *engine, KX_Scene* scene) // quick hack
KX_MACRO_addTypesToDict(d, KX_CONSTRAINTACT_ORIX, KX_ConstraintActuator::KX_ACT_CONSTRAINT_ORIX);
KX_MACRO_addTypesToDict(d, KX_CONSTRAINTACT_ORIY, KX_ConstraintActuator::KX_ACT_CONSTRAINT_ORIY);
KX_MACRO_addTypesToDict(d, KX_CONSTRAINTACT_ORIZ, KX_ConstraintActuator::KX_ACT_CONSTRAINT_ORIZ);
- KX_MACRO_addTypesToDict(d, KX_ACT_CONSTRAINT_FHPX, KX_ConstraintActuator::KX_ACT_CONSTRAINT_FHPX);
- KX_MACRO_addTypesToDict(d, KX_ACT_CONSTRAINT_FHPY, KX_ConstraintActuator::KX_ACT_CONSTRAINT_FHPY);
- KX_MACRO_addTypesToDict(d, KX_ACT_CONSTRAINT_FHPZ, KX_ConstraintActuator::KX_ACT_CONSTRAINT_FHPZ);
- KX_MACRO_addTypesToDict(d, KX_ACT_CONSTRAINT_FHNX, KX_ConstraintActuator::KX_ACT_CONSTRAINT_FHNX);
- KX_MACRO_addTypesToDict(d, KX_ACT_CONSTRAINT_FHNY, KX_ConstraintActuator::KX_ACT_CONSTRAINT_FHNY);
- KX_MACRO_addTypesToDict(d, KX_ACT_CONSTRAINT_FHNZ, KX_ConstraintActuator::KX_ACT_CONSTRAINT_FHNZ);
- KX_MACRO_addTypesToDict(d, KX_ACT_CONSTRAINT_NORMAL, KX_ConstraintActuator::KX_ACT_CONSTRAINT_NORMAL);
- KX_MACRO_addTypesToDict(d, KX_ACT_CONSTRAINT_MATERIAL, KX_ConstraintActuator::KX_ACT_CONSTRAINT_MATERIAL);
- KX_MACRO_addTypesToDict(d, KX_ACT_CONSTRAINT_PERMANENT, KX_ConstraintActuator::KX_ACT_CONSTRAINT_PERMANENT);
- KX_MACRO_addTypesToDict(d, KX_ACT_CONSTRAINT_DISTANCE, KX_ConstraintActuator::KX_ACT_CONSTRAINT_DISTANCE);
- KX_MACRO_addTypesToDict(d, KX_ACT_CONSTRAINT_LOCAL, KX_ConstraintActuator::KX_ACT_CONSTRAINT_LOCAL);
- KX_MACRO_addTypesToDict(d, KX_ACT_CONSTRAINT_DOROTFH, KX_ConstraintActuator::KX_ACT_CONSTRAINT_DOROTFH);
+ KX_MACRO_addTypesToDict(d, KX_CONSTRAINTACT_FHPX, KX_ConstraintActuator::KX_ACT_CONSTRAINT_FHPX);
+ KX_MACRO_addTypesToDict(d, KX_CONSTRAINTACT_FHPY, KX_ConstraintActuator::KX_ACT_CONSTRAINT_FHPY);
+ KX_MACRO_addTypesToDict(d, KX_CONSTRAINTACT_FHPZ, KX_ConstraintActuator::KX_ACT_CONSTRAINT_FHPZ);
+ KX_MACRO_addTypesToDict(d, KX_CONSTRAINTACT_FHNX, KX_ConstraintActuator::KX_ACT_CONSTRAINT_FHNX);
+ KX_MACRO_addTypesToDict(d, KX_CONSTRAINTACT_FHNY, KX_ConstraintActuator::KX_ACT_CONSTRAINT_FHNY);
+ KX_MACRO_addTypesToDict(d, KX_CONSTRAINTACT_FHNZ, KX_ConstraintActuator::KX_ACT_CONSTRAINT_FHNZ);
+ KX_MACRO_addTypesToDict(d, KX_CONSTRAINTACT_NORMAL, KX_ConstraintActuator::KX_ACT_CONSTRAINT_NORMAL);
+ KX_MACRO_addTypesToDict(d, KX_CONSTRAINTACT_MATERIAL, KX_ConstraintActuator::KX_ACT_CONSTRAINT_MATERIAL);
+ KX_MACRO_addTypesToDict(d, KX_CONSTRAINTACT_PERMANENT, KX_ConstraintActuator::KX_ACT_CONSTRAINT_PERMANENT);
+ KX_MACRO_addTypesToDict(d, KX_CONSTRAINTACT_DISTANCE, KX_ConstraintActuator::KX_ACT_CONSTRAINT_DISTANCE);
+ KX_MACRO_addTypesToDict(d, KX_CONSTRAINTACT_LOCAL, KX_ConstraintActuator::KX_ACT_CONSTRAINT_LOCAL);
+ KX_MACRO_addTypesToDict(d, KX_CONSTRAINTACT_DOROTFH, KX_ConstraintActuator::KX_ACT_CONSTRAINT_DOROTFH);
/* 4. Ipo actuator, simple part */
KX_MACRO_addTypesToDict(d, KX_IPOACT_PLAY, KX_IpoActuator::KX_ACT_IPO_PLAY);
@@ -1602,7 +1610,7 @@ PyObject* initGameLogic(KX_KetsjiEngine *engine, KX_Scene* scene) // quick hack
// Check for errors
if (PyErr_Occurred())
{
- Py_FatalError("can't initialize module GameLogic");
+ Py_FatalError("can't initialize module bge.logic");
}
return m;
@@ -1933,7 +1941,7 @@ PyObject* initGamePlayerPythonScripting(const STR_String& progname, TPythonSecur
PyObjectPlus::ClearDeprecationWarning();
- return bpy_namespace_dict_new(NULL);
+ return PyC_DefaultNameSpace(NULL);
}
void exitGamePlayerPythonScripting()
@@ -1969,7 +1977,7 @@ PyObject* initGamePythonScripting(const STR_String& progname, TPythonSecurityLev
PyObjectPlus::NullDeprecationWarning();
- return bpy_namespace_dict_new(NULL);
+ return PyC_DefaultNameSpace(NULL);
}
void exitGamePythonScripting()
@@ -1999,7 +2007,6 @@ void setupGamePython(KX_KetsjiEngine* ketsjiengine, KX_Scene* startscene, Main *
PyDict_SetItemString(PyModule_GetDict(*gameLogic), "globalDict", pyGlobalDict); // Same as importing the module.
*gameLogic_keys = PyDict_Keys(PyModule_GetDict(*gameLogic));
- PyDict_SetItemString(dictionaryobject, "GameLogic", *gameLogic); // Same as importing the module.
initGameKeys();
initPythonConstraintBinding();
@@ -2007,10 +2014,11 @@ void setupGamePython(KX_KetsjiEngine* ketsjiengine, KX_Scene* startscene, Main *
initGeometry();
initBGL();
initBLF();
+ AUD_initPython();
initVideoTexture();
/* could be done a lot more nicely, but for now a quick way to get bge.* working */
- PyRun_SimpleString("__import__('sys').modules['bge']=[mod for mod in (type(__builtins__)('bge'), ) if mod.__dict__.update({'logic':__import__('GameLogic'), 'render':__import__('Rasterizer'), 'events':__import__('GameKeys'), 'constraints':__import__('PhysicsConstraints'), 'types':__import__('GameTypes')}) is None][0]");
+ PyRun_SimpleString("sys = __import__('sys');mod = sys.modules['bge'] = type(sys)('bge');mod.__dict__.update({'logic':__import__('GameLogic'), 'render':__import__('Rasterizer'), 'events':__import__('GameKeys'), 'constraints':__import__('PhysicsConstraints'), 'types':__import__('GameTypes'), 'texture':__import__('VideoTexture')});");
}
static struct PyModuleDef Rasterizer_module_def = {
@@ -2358,15 +2366,15 @@ int saveGamePythonConfig( char **marshal_buffer)
memcpy(*marshal_buffer, marshal_cstring, marshal_length);
Py_DECREF(pyGlobalDictMarshal);
} else {
- printf("Error, GameLogic.globalDict could not be marshal'd\n");
+ printf("Error, bge.logic.globalDict could not be marshal'd\n");
}
} else {
- printf("Error, GameLogic.globalDict was removed\n");
+ printf("Error, bge.logic.globalDict was removed\n");
}
Py_DECREF(gameLogic);
} else {
PyErr_Clear();
- printf("Error, GameLogic failed to import GameLogic.globalDict will be lost\n");
+ printf("Error, bge.logic failed to import bge.logic.globalDict will be lost\n");
}
return marshal_length;
}
@@ -2398,7 +2406,7 @@ int loadGamePythonConfig(char *marshal_buffer, int marshal_length)
}
} else {
PyErr_Clear();
- printf("Error, GameLogic failed to import GameLogic.globalDict will be lost\n");
+ printf("Error, bge.logic failed to import bge.logic.globalDict will be lost\n");
}
}
return 0;
diff --git a/source/gameengine/Ketsji/KX_Scene.cpp b/source/gameengine/Ketsji/KX_Scene.cpp
index cbd4b96f566..f755e87fee0 100644
--- a/source/gameengine/Ketsji/KX_Scene.cpp
+++ b/source/gameengine/Ketsji/KX_Scene.cpp
@@ -28,7 +28,7 @@
* Ketsji scene. Holds references to all scene data.
*/
-#ifdef WIN32
+#if defined(WIN32) && !defined(FREE_WINDOWS)
#pragma warning (disable : 4786)
#endif //WIN32
diff --git a/source/gameengine/Ketsji/KX_SoundActuator.cpp b/source/gameengine/Ketsji/KX_SoundActuator.cpp
index 7f9b090d680..9ebb36578c4 100644
--- a/source/gameengine/Ketsji/KX_SoundActuator.cpp
+++ b/source/gameengine/Ketsji/KX_SoundActuator.cpp
@@ -31,6 +31,7 @@
*/
#include "KX_SoundActuator.h"
+#include "AUD_C-API.h"
#include "KX_GameObject.h"
#include "KX_PyMath.h" // needed for PyObjectFrom()
#include <iostream>
@@ -75,23 +76,20 @@ void KX_SoundActuator::play()
// this is the sound that will be played and not deleted afterwards
AUD_Sound* sound = m_sound;
- // this sounds are for temporary stacked sounds, will be deleted if not NULL
+ // this sound is for temporary stacked sounds, will be deleted if not NULL
AUD_Sound* sound2 = NULL;
- AUD_Sound* sound3 = NULL;
+
+ bool loop = false;
switch (m_type)
{
case KX_SOUNDACT_LOOPBIDIRECTIONAL:
case KX_SOUNDACT_LOOPBIDIRECTIONAL_STOP:
- // create a ping pong sound on sound2 stacked on the orignal sound
- sound2 = AUD_pingpongSound(sound);
- // create a loop sound on sound3 stacked on the pingpong sound and let that one play (save it to sound)
- sound = sound3 = AUD_loopSound(sound2);
- break;
+ sound = sound2 = AUD_pingpongSound(sound);
+ // fall through
case KX_SOUNDACT_LOOPEND:
case KX_SOUNDACT_LOOPSTOP:
- // create a loop sound on sound2 stacked on the pingpong sound and let that one play (save it to sound)
- sound = sound2 = AUD_loopSound(sound);
+ loop = true;
break;
case KX_SOUNDACT_PLAYSTOP:
case KX_SOUNDACT_PLAYEND:
@@ -102,28 +100,27 @@ void KX_SoundActuator::play()
if(m_is3d)
{
// sound shall be played 3D
- m_handle = AUD_play3D(sound, 0);
-
- AUD_set3DSourceSetting(m_handle, AUD_3DSS_MAX_GAIN, m_3d.max_gain);
- AUD_set3DSourceSetting(m_handle, AUD_3DSS_MIN_GAIN, m_3d.min_gain);
- AUD_set3DSourceSetting(m_handle, AUD_3DSS_REFERENCE_DISTANCE, m_3d.reference_distance);
- AUD_set3DSourceSetting(m_handle, AUD_3DSS_MAX_DISTANCE, m_3d.max_distance);
- AUD_set3DSourceSetting(m_handle, AUD_3DSS_ROLLOFF_FACTOR, m_3d.rolloff_factor);
- AUD_set3DSourceSetting(m_handle, AUD_3DSS_CONE_INNER_ANGLE, m_3d.cone_inner_angle);
- AUD_set3DSourceSetting(m_handle, AUD_3DSS_CONE_OUTER_ANGLE, m_3d.cone_outer_angle);
- AUD_set3DSourceSetting(m_handle, AUD_3DSS_CONE_OUTER_GAIN, m_3d.cone_outer_gain);
+ m_handle = AUD_play(sound, 0);
+
+ AUD_setRelative(m_handle, false);
+ AUD_setVolumeMaximum(m_handle, m_3d.max_gain);
+ AUD_setVolumeMinimum(m_handle, m_3d.min_gain);
+ AUD_setDistanceReference(m_handle, m_3d.reference_distance);
+ AUD_setDistanceMaximum(m_handle, m_3d.max_distance);
+ AUD_setAttenuation(m_handle, m_3d.rolloff_factor);
+ AUD_setConeAngleInner(m_handle, m_3d.cone_inner_angle);
+ AUD_setConeAngleOuter(m_handle, m_3d.cone_outer_angle);
+ AUD_setConeVolumeOuter(m_handle, m_3d.cone_outer_gain);
}
else
m_handle = AUD_play(sound, 0);
+ if(loop)
+ AUD_setLoop(m_handle, -1);
AUD_setSoundPitch(m_handle, m_pitch);
AUD_setSoundVolume(m_handle, m_volume);
m_isplaying = true;
- // now we unload the pingpong and loop sounds, as we don't need them anymore
- // the started sound will continue playing like it was created, don't worry!
- if(sound3)
- AUD_unload(sound3);
if(sound2)
AUD_unload(sound2);
}
@@ -183,7 +180,7 @@ bool KX_SoundActuator::Update(double curtime, bool frame)
case KX_SOUNDACT_LOOPBIDIRECTIONAL:
{
// stop the looping so that the sound stops when it finished
- AUD_setLoop(m_handle, 0, -1);
+ AUD_setLoop(m_handle, 0);
break;
}
default:
@@ -215,39 +212,15 @@ bool KX_SoundActuator::Update(double curtime, bool frame)
{
if(m_is3d)
{
- AUD_3DData data;
- float f;
- ((KX_GameObject*)this->GetParent())->NodeGetWorldPosition().getValue(data.position);
- ((KX_GameObject*)this->GetParent())->GetLinearVelocity().getValue(data.velocity);
- ((KX_GameObject*)this->GetParent())->NodeGetWorldOrientation().getValue3x3(data.orientation);
-
- /*
- * The 3D data from blender has to be transformed for OpenAL:
- * - In blender z is up and y is forwards
- * - In OpenAL y is up and z is backwards
- * We have to do that for all 5 vectors.
- */
- f = data.position[1];
- data.position[1] = data.position[2];
- data.position[2] = -f;
-
- f = data.velocity[1];
- data.velocity[1] = data.velocity[2];
- data.velocity[2] = -f;
-
- f = data.orientation[1];
- data.orientation[1] = data.orientation[2];
- data.orientation[2] = -f;
-
- f = data.orientation[4];
- data.orientation[4] = data.orientation[5];
- data.orientation[5] = -f;
-
- f = data.orientation[7];
- data.orientation[7] = data.orientation[8];
- data.orientation[8] = -f;
-
- AUD_update3DSource(m_handle, &data);
+ KX_GameObject* obj = (KX_GameObject*)this->GetParent();
+ float f[4];
+
+ obj->NodeGetWorldPosition().getValue(f);
+ AUD_setSourceLocation(m_handle, f);
+ obj->GetLinearVelocity().getValue(f);
+ AUD_setSourceVelocity(m_handle, f);
+ obj->NodeGetWorldOrientation().getRotation().getValue(f);
+ AUD_setSourceOrientation(m_handle, f);
}
result = true;
}
@@ -300,19 +273,18 @@ PyMethodDef KX_SoundActuator::Methods[] = {
PyAttributeDef KX_SoundActuator::Attributes[] = {
KX_PYATTRIBUTE_BOOL_RO("is3D", KX_SoundActuator, m_is3d),
- KX_PYATTRIBUTE_RW_FUNCTION("maxGain3D", KX_SoundActuator, pyattr_get_3d_property, pyattr_set_3d_property),
- KX_PYATTRIBUTE_RW_FUNCTION("minGain3D", KX_SoundActuator, pyattr_get_3d_property, pyattr_set_3d_property),
- KX_PYATTRIBUTE_RW_FUNCTION("referenceDistance3D", KX_SoundActuator, pyattr_get_3d_property, pyattr_set_3d_property),
- KX_PYATTRIBUTE_RW_FUNCTION("maxDistance3D", KX_SoundActuator, pyattr_get_3d_property, pyattr_set_3d_property),
- KX_PYATTRIBUTE_RW_FUNCTION("rolloffFactor3D", KX_SoundActuator, pyattr_get_3d_property, pyattr_set_3d_property),
- KX_PYATTRIBUTE_RW_FUNCTION("coneInnerAngle3D", KX_SoundActuator, pyattr_get_3d_property, pyattr_set_3d_property),
- KX_PYATTRIBUTE_RW_FUNCTION("coneOuterAngle3D", KX_SoundActuator, pyattr_get_3d_property, pyattr_set_3d_property),
- KX_PYATTRIBUTE_RW_FUNCTION("coneOuterGain3D", KX_SoundActuator, pyattr_get_3d_property, pyattr_set_3d_property),
-
+ KX_PYATTRIBUTE_RW_FUNCTION("volume_maximum", KX_SoundActuator, pyattr_get_3d_property, pyattr_set_3d_property),
+ KX_PYATTRIBUTE_RW_FUNCTION("volume_minimum", KX_SoundActuator, pyattr_get_3d_property, pyattr_set_3d_property),
+ KX_PYATTRIBUTE_RW_FUNCTION("distance_reference", KX_SoundActuator, pyattr_get_3d_property, pyattr_set_3d_property),
+ KX_PYATTRIBUTE_RW_FUNCTION("distance_maximum", KX_SoundActuator, pyattr_get_3d_property, pyattr_set_3d_property),
+ KX_PYATTRIBUTE_RW_FUNCTION("attenuation", KX_SoundActuator, pyattr_get_3d_property, pyattr_set_3d_property),
+ KX_PYATTRIBUTE_RW_FUNCTION("cone_angle_inner", KX_SoundActuator, pyattr_get_3d_property, pyattr_set_3d_property),
+ KX_PYATTRIBUTE_RW_FUNCTION("cone_angle_outer", KX_SoundActuator, pyattr_get_3d_property, pyattr_set_3d_property),
+ KX_PYATTRIBUTE_RW_FUNCTION("cone_volume_outer", KX_SoundActuator, pyattr_get_3d_property, pyattr_set_3d_property),
+
KX_PYATTRIBUTE_RW_FUNCTION("time", KX_SoundActuator, pyattr_get_audposition, pyattr_set_audposition),
KX_PYATTRIBUTE_RW_FUNCTION("volume", KX_SoundActuator, pyattr_get_gain, pyattr_set_gain),
KX_PYATTRIBUTE_RW_FUNCTION("pitch", KX_SoundActuator, pyattr_get_pitch, pyattr_set_pitch),
- KX_PYATTRIBUTE_RW_FUNCTION("rollOffFactor", KX_SoundActuator, pyattr_get_rollOffFactor, pyattr_set_rollOffFactor),
KX_PYATTRIBUTE_ENUM_RW("mode",KX_SoundActuator::KX_SOUNDACT_NODEF+1,KX_SoundActuator::KX_SOUNDACT_MAX-1,false,KX_SoundActuator,m_type),
{ NULL } //Sentinel
};
@@ -358,28 +330,28 @@ PyObject* KX_SoundActuator::pyattr_get_3d_property(void *self, const struct KX_P
const char* prop = attrdef->m_name;
float result_value = 0.0;
- if(!strcmp(prop, "maxGain3D")) {
+ if(!strcmp(prop, "volume_maximum")) {
result_value = actuator->m_3d.max_gain;
- } else if (!strcmp(prop, "minGain3D")) {
+ } else if (!strcmp(prop, "volume_minimum")) {
result_value = actuator->m_3d.min_gain;
- } else if (!strcmp(prop, "referenceDistance3D")) {
+ } else if (!strcmp(prop, "distance_reference")) {
result_value = actuator->m_3d.reference_distance;
- } else if (!strcmp(prop, "maxDistance3D")) {
+ } else if (!strcmp(prop, "distance_maximum")) {
result_value = actuator->m_3d.max_distance;
- } else if (!strcmp(prop, "rolloffFactor3D")) {
+ } else if (!strcmp(prop, "attenuation")) {
result_value = actuator->m_3d.rolloff_factor;
- } else if (!strcmp(prop, "coneInnerAngle3D")) {
+ } else if (!strcmp(prop, "cone_angle_inner")) {
result_value = actuator->m_3d.cone_inner_angle;
- } else if (!strcmp(prop, "coneOuterAngle3D")) {
+ } else if (!strcmp(prop, "cone_angle_outer")) {
result_value = actuator->m_3d.cone_outer_angle;
- } else if (!strcmp(prop, "coneOuterGain3D")) {
+ } else if (!strcmp(prop, "cone_volume_outer")) {
result_value = actuator->m_3d.cone_outer_gain;
} else {
@@ -423,66 +395,63 @@ PyObject* KX_SoundActuator::pyattr_get_pitch(void *self, const struct KX_PYATTRI
return result;
}
-PyObject* KX_SoundActuator::pyattr_get_rollOffFactor(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef)
-{
- KX_SoundActuator * actuator = static_cast<KX_SoundActuator *> (self);
- float rollofffactor = actuator->m_3d.rolloff_factor;
- PyObject* result = PyFloat_FromDouble(rollofffactor);
-
- return result;
-}
-
int KX_SoundActuator::pyattr_set_3d_property(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef, PyObject *value)
{
KX_SoundActuator * actuator = static_cast<KX_SoundActuator *> (self);
const char* prop = attrdef->m_name;
float prop_value = 0.0;
- AUD_3DSourceSetting setting = AUD_3DSS_NONE;
if (!PyArg_Parse(value, "f", &prop_value))
return PY_SET_ATTR_FAIL;
- // update the internal value
- if(!strcmp(prop, "maxGain3D")) {
+ // if sound is working and 3D, set the new setting
+ if(!actuator->m_is3d)
+ return PY_SET_ATTR_FAIL;
+
+ if(!strcmp(prop, "volume_maximum")) {
actuator->m_3d.max_gain = prop_value;
- setting = AUD_3DSS_MAX_GAIN;
+ if(actuator->m_handle)
+ AUD_setVolumeMaximum(actuator->m_handle, prop_value);
- } else if (!strcmp(prop, "minGain3D")) {
+ } else if (!strcmp(prop, "volume_minimum")) {
actuator->m_3d.min_gain = prop_value;
- setting = AUD_3DSS_MIN_GAIN;
+ if(actuator->m_handle)
+ AUD_setVolumeMinimum(actuator->m_handle, prop_value);
- } else if (!strcmp(prop, "referenceDistance3D")) {
+ } else if (!strcmp(prop, "distance_reference")) {
actuator->m_3d.reference_distance = prop_value;
- setting = AUD_3DSS_REFERENCE_DISTANCE;
+ if(actuator->m_handle)
+ AUD_setDistanceReference(actuator->m_handle, prop_value);
- } else if (!strcmp(prop, "maxDistance3D")) {
+ } else if (!strcmp(prop, "distance_maximum")) {
actuator->m_3d.max_distance = prop_value;
- setting = AUD_3DSS_MAX_DISTANCE;
+ if(actuator->m_handle)
+ AUD_setDistanceMaximum(actuator->m_handle, prop_value);
- } else if (!strcmp(prop, "rolloffFactor3D")) {
+ } else if (!strcmp(prop, "attenuation")) {
actuator->m_3d.rolloff_factor = prop_value;
- setting = AUD_3DSS_ROLLOFF_FACTOR;
+ if(actuator->m_handle)
+ AUD_setAttenuation(actuator->m_handle, prop_value);
- } else if (!!strcmp(prop, "coneInnerAngle3D")) {
+ } else if (!!strcmp(prop, "cone_angle_inner")) {
actuator->m_3d.cone_inner_angle = prop_value;
- setting = AUD_3DSS_CONE_INNER_ANGLE;
+ if(actuator->m_handle)
+ AUD_setConeAngleInner(actuator->m_handle, prop_value);
- } else if (!strcmp(prop, "coneOuterAngle3D")) {
+ } else if (!strcmp(prop, "cone_angle_outer")) {
actuator->m_3d.cone_outer_angle = prop_value;
- setting = AUD_3DSS_CONE_OUTER_ANGLE;
+ if(actuator->m_handle)
+ AUD_setConeAngleOuter(actuator->m_handle, prop_value);
- } else if (!strcmp(prop, "coneOuterGain3D")) {
+ } else if (!strcmp(prop, "cone_volume_outer")) {
actuator->m_3d.cone_outer_gain = prop_value;
- setting = AUD_3DSS_CONE_OUTER_GAIN;
+ if(actuator->m_handle)
+ AUD_setConeVolumeOuter(actuator->m_handle, prop_value);
} else {
return PY_SET_ATTR_FAIL;
- }
+ }
- // if sound is working and 3D, set the new setting
- if(actuator->m_handle && actuator->m_is3d && setting != AUD_3DSS_NONE)
- AUD_set3DSourceSetting(actuator->m_handle, setting, prop_value);
-
return PY_SET_ATTR_SUCCESS;
}
@@ -527,18 +496,4 @@ int KX_SoundActuator::pyattr_set_pitch(void *self, const struct KX_PYATTRIBUTE_D
return PY_SET_ATTR_SUCCESS;
}
-int KX_SoundActuator::pyattr_set_rollOffFactor(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef, PyObject *value)
-{
- KX_SoundActuator * actuator = static_cast<KX_SoundActuator *> (self);
- float rollofffactor = 1.0;
- if (!PyArg_Parse(value, "f", &rollofffactor))
- return PY_SET_ATTR_FAIL;
-
- actuator->m_3d.rolloff_factor = rollofffactor;
- if(actuator->m_handle)
- AUD_set3DSourceSetting(actuator->m_handle, AUD_3DSS_ROLLOFF_FACTOR, rollofffactor);
-
- return PY_SET_ATTR_SUCCESS;
-}
-
#endif // DISABLE_PYTHON
diff --git a/source/gameengine/Ketsji/KX_SoundActuator.h b/source/gameengine/Ketsji/KX_SoundActuator.h
index 1eaea276191..c175a184a15 100644
--- a/source/gameengine/Ketsji/KX_SoundActuator.h
+++ b/source/gameengine/Ketsji/KX_SoundActuator.h
@@ -58,7 +58,7 @@ class KX_SoundActuator : public SCA_IActuator
float m_pitch;
bool m_is3d;
KX_3DSoundSettings m_3d;
- AUD_Handle* m_handle;
+ AUD_Channel* m_handle;
void play();
@@ -107,14 +107,12 @@ public:
static int pyattr_set_audposition(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef, PyObject *value);
static int pyattr_set_gain(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef, PyObject *value);
static int pyattr_set_pitch(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef, PyObject *value);
- static int pyattr_set_rollOffFactor(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef, PyObject *value);
static int pyattr_set_type(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef, PyObject *value);
static PyObject* pyattr_get_3d_property(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef);
static PyObject* pyattr_get_audposition(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef);
static PyObject* pyattr_get_gain(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef);
static PyObject* pyattr_get_pitch(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef);
- static PyObject* pyattr_get_rollOffFactor(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef);
static PyObject* pyattr_get_type(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef);
#endif // DISABLE_PYTHON
diff --git a/source/gameengine/Ketsji/KX_TimeCategoryLogger.h b/source/gameengine/Ketsji/KX_TimeCategoryLogger.h
index b020683bfc6..f4eb4d18ab3 100644
--- a/source/gameengine/Ketsji/KX_TimeCategoryLogger.h
+++ b/source/gameengine/Ketsji/KX_TimeCategoryLogger.h
@@ -30,7 +30,7 @@
#ifndef __KX_TIME_CATEGORY_LOGGER_H
#define __KX_TIME_CATEGORY_LOGGER_H
-#ifdef WIN32
+#if defined(WIN32) && !defined(FREE_WINDOWS)
#pragma warning (disable:4786) // suppress stl-MSVC debug info warning
#endif
diff --git a/source/gameengine/Ketsji/KX_TimeLogger.h b/source/gameengine/Ketsji/KX_TimeLogger.h
index 058b1c2b6c7..9a5c124a462 100644
--- a/source/gameengine/Ketsji/KX_TimeLogger.h
+++ b/source/gameengine/Ketsji/KX_TimeLogger.h
@@ -30,7 +30,7 @@
#ifndef __KX_TIME_LOGGER_H
#define __KX_TIME_LOGGER_H
-#ifdef WIN32
+#if defined(WIN32) && !defined(FREE_WINDOWS)
#pragma warning (disable:4786) // suppress stl-MSVC debug info warning
#endif
diff --git a/source/gameengine/Ketsji/KX_VertexProxy.cpp b/source/gameengine/Ketsji/KX_VertexProxy.cpp
index 652bf5eafed..09630ad2851 100644
--- a/source/gameengine/Ketsji/KX_VertexProxy.cpp
+++ b/source/gameengine/Ketsji/KX_VertexProxy.cpp
@@ -73,247 +73,359 @@ PyMethodDef KX_VertexProxy::Methods[] = {
};
PyAttributeDef KX_VertexProxy::Attributes[] = {
- //KX_PYATTRIBUTE_TODO("DummyProps"),
+ KX_PYATTRIBUTE_RW_FUNCTION("x", KX_VertexProxy, pyattr_get_x, pyattr_set_x),
+ KX_PYATTRIBUTE_RW_FUNCTION("y", KX_VertexProxy, pyattr_get_y, pyattr_set_y),
+ KX_PYATTRIBUTE_RW_FUNCTION("z", KX_VertexProxy, pyattr_get_z, pyattr_set_z),
- KX_PYATTRIBUTE_DUMMY("x"),
- KX_PYATTRIBUTE_DUMMY("y"),
- KX_PYATTRIBUTE_DUMMY("z"),
+ KX_PYATTRIBUTE_RW_FUNCTION("r", KX_VertexProxy, pyattr_get_r, pyattr_set_r),
+ KX_PYATTRIBUTE_RW_FUNCTION("g", KX_VertexProxy, pyattr_get_g, pyattr_set_g),
+ KX_PYATTRIBUTE_RW_FUNCTION("b", KX_VertexProxy, pyattr_get_b, pyattr_set_b),
+ KX_PYATTRIBUTE_RW_FUNCTION("a", KX_VertexProxy, pyattr_get_a, pyattr_set_a),
- KX_PYATTRIBUTE_DUMMY("r"),
- KX_PYATTRIBUTE_DUMMY("g"),
- KX_PYATTRIBUTE_DUMMY("b"),
- KX_PYATTRIBUTE_DUMMY("a"),
+ KX_PYATTRIBUTE_RW_FUNCTION("u", KX_VertexProxy, pyattr_get_u, pyattr_set_u),
+ KX_PYATTRIBUTE_RW_FUNCTION("v", KX_VertexProxy, pyattr_get_v, pyattr_set_v),
- KX_PYATTRIBUTE_DUMMY("u"),
- KX_PYATTRIBUTE_DUMMY("v"),
+ KX_PYATTRIBUTE_RW_FUNCTION("u2", KX_VertexProxy, pyattr_get_u2, pyattr_set_u2),
+ KX_PYATTRIBUTE_RW_FUNCTION("v2", KX_VertexProxy, pyattr_get_v2, pyattr_set_v2),
- KX_PYATTRIBUTE_DUMMY("u2"),
- KX_PYATTRIBUTE_DUMMY("v2"),
+ KX_PYATTRIBUTE_RW_FUNCTION("XYZ", KX_VertexProxy, pyattr_get_XYZ, pyattr_set_XYZ),
+ KX_PYATTRIBUTE_RW_FUNCTION("UV", KX_VertexProxy, pyattr_get_UV, pyattr_set_UV),
- KX_PYATTRIBUTE_DUMMY("XYZ"),
- KX_PYATTRIBUTE_DUMMY("UV"),
-
- KX_PYATTRIBUTE_DUMMY("color"),
- KX_PYATTRIBUTE_DUMMY("colour"),
-
- KX_PYATTRIBUTE_DUMMY("normal"),
+ KX_PYATTRIBUTE_RW_FUNCTION("color", KX_VertexProxy, pyattr_get_color, pyattr_set_color),
+ KX_PYATTRIBUTE_RW_FUNCTION("normal", KX_VertexProxy, pyattr_get_normal, pyattr_set_normal),
{ NULL } //Sentinel
};
-#if 0
-PyObject*
-KX_VertexProxy::py_getattro(PyObject *attr)
-{
- char *attr_str= _PyUnicode_AsString(attr);
- if (attr_str[1]=='\0') { // Group single letters
- // pos
- if (attr_str[0]=='x')
- return PyFloat_FromDouble(m_vertex->getXYZ()[0]);
- if (attr_str[0]=='y')
- return PyFloat_FromDouble(m_vertex->getXYZ()[1]);
- if (attr_str[0]=='z')
- return PyFloat_FromDouble(m_vertex->getXYZ()[2]);
-
- // Col
- if (attr_str[0]=='r')
- return PyFloat_FromDouble(m_vertex->getRGBA()[0]/255.0);
- if (attr_str[0]=='g')
- return PyFloat_FromDouble(m_vertex->getRGBA()[1]/255.0);
- if (attr_str[0]=='b')
- return PyFloat_FromDouble(m_vertex->getRGBA()[2]/255.0);
- if (attr_str[0]=='a')
- return PyFloat_FromDouble(m_vertex->getRGBA()[3]/255.0);
-
- // UV
- if (attr_str[0]=='u')
- return PyFloat_FromDouble(m_vertex->getUV1()[0]);
- if (attr_str[0]=='v')
- return PyFloat_FromDouble(m_vertex->getUV1()[1]);
- }
-
-
- if (!strcmp(attr_str, "XYZ"))
- return PyObjectFrom(MT_Vector3(m_vertex->getXYZ()));
-
- if (!strcmp(attr_str, "UV"))
- return PyObjectFrom(MT_Point2(m_vertex->getUV1()));
-
- if (!strcmp(attr_str, "color") || !strcmp(attr_str, "colour"))
- {
- const unsigned char *colp = m_vertex->getRGBA();
- MT_Vector4 color(colp[0], colp[1], colp[2], colp[3]);
- color /= 255.0;
- return PyObjectFrom(color);
- }
+PyObject* KX_VertexProxy::pyattr_get_x(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef)
+{
+ KX_VertexProxy* self= static_cast<KX_VertexProxy*>(self_v);
+ return PyFloat_FromDouble(self->m_vertex->getXYZ()[0]);
+}
- if (!strcmp(attr_str, "normal"))
- {
- return PyObjectFrom(MT_Vector3(m_vertex->getNormal()));
- }
+PyObject* KX_VertexProxy::pyattr_get_y(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef)
+{
+ KX_VertexProxy* self= static_cast<KX_VertexProxy*>(self_v);
+ return PyFloat_FromDouble(self->m_vertex->getXYZ()[1]);
+}
- py_getattro_up(CValue);
+PyObject* KX_VertexProxy::pyattr_get_z(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef)
+{
+ KX_VertexProxy* self= static_cast<KX_VertexProxy*>(self_v);
+ return PyFloat_FromDouble(self->m_vertex->getXYZ()[2]);
}
-#endif
+PyObject* KX_VertexProxy::pyattr_get_r(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef)
+{
+ KX_VertexProxy* self= static_cast<KX_VertexProxy*>(self_v);
+ return PyFloat_FromDouble(self->m_vertex->getRGBA()[0]/255.0);
+}
-#if 0
-int KX_VertexProxy::py_setattro(PyObject *attr, PyObject *pyvalue)
+PyObject* KX_VertexProxy::pyattr_get_g(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef)
{
- char *attr_str= _PyUnicode_AsString(attr);
- if (PySequence_Check(pyvalue))
- {
- if (!strcmp(attr_str, "XYZ"))
- {
- MT_Point3 vec;
- if (PyVecTo(pyvalue, vec))
- {
- m_vertex->SetXYZ(vec);
- m_mesh->SetMeshModified(true);
- return PY_SET_ATTR_SUCCESS;
- }
- return PY_SET_ATTR_FAIL;
- }
+ KX_VertexProxy* self= static_cast<KX_VertexProxy*>(self_v);
+ return PyFloat_FromDouble(self->m_vertex->getRGBA()[1]/255.0);
+}
- if (!strcmp(attr_str, "UV"))
- {
- MT_Point2 vec;
- if (PyVecTo(pyvalue, vec))
- {
- m_vertex->SetUV(vec);
- m_mesh->SetMeshModified(true);
- return PY_SET_ATTR_SUCCESS;
- }
- return PY_SET_ATTR_FAIL;
- }
+PyObject* KX_VertexProxy::pyattr_get_b(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef)
+{
+ KX_VertexProxy* self= static_cast<KX_VertexProxy*>(self_v);
+ return PyFloat_FromDouble(self->m_vertex->getRGBA()[2]/255.0);
+}
- if (!strcmp(attr_str, "color") || !strcmp(attr_str, "colour"))
- {
- MT_Vector4 vec;
- if (PyVecTo(pyvalue, vec))
- {
- m_vertex->SetRGBA(vec);
- m_mesh->SetMeshModified(true);
- return PY_SET_ATTR_SUCCESS;
- }
- return PY_SET_ATTR_FAIL;
- }
+PyObject* KX_VertexProxy::pyattr_get_a(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef)
+{
+ KX_VertexProxy* self= static_cast<KX_VertexProxy*>(self_v);
+ return PyFloat_FromDouble(self->m_vertex->getRGBA()[3]/255.0);
+}
- if (!strcmp(attr_str, "normal"))
- {
- MT_Vector3 vec;
- if (PyVecTo(pyvalue, vec))
- {
- m_vertex->SetNormal(vec);
- m_mesh->SetMeshModified(true);
- return PY_SET_ATTR_SUCCESS;
- }
- return PY_SET_ATTR_FAIL;
- }
- }
-
- if (PyFloat_Check(pyvalue))
- {
- float val = PyFloat_AsDouble(pyvalue);
- // pos
- MT_Point3 pos(m_vertex->getXYZ());
- if (!strcmp(attr_str, "x"))
+PyObject* KX_VertexProxy::pyattr_get_u(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef)
+{
+ KX_VertexProxy* self= static_cast<KX_VertexProxy*>(self_v);
+ return PyFloat_FromDouble(self->m_vertex->getUV1()[0]);
+}
+
+PyObject* KX_VertexProxy::pyattr_get_v(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef)
+{
+ KX_VertexProxy* self= static_cast<KX_VertexProxy*>(self_v);
+ return PyFloat_FromDouble(self->m_vertex->getUV1()[1]);
+}
+
+PyObject* KX_VertexProxy::pyattr_get_u2(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef)
+{
+ KX_VertexProxy* self= static_cast<KX_VertexProxy*>(self_v);
+ return PyFloat_FromDouble(self->m_vertex->getUV2()[0]);
+}
+
+PyObject* KX_VertexProxy::pyattr_get_v2(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef)
+{
+ KX_VertexProxy* self= static_cast<KX_VertexProxy*>(self_v);
+ return PyFloat_FromDouble(self->m_vertex->getUV2()[1]);
+}
+
+PyObject* KX_VertexProxy::pyattr_get_XYZ(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef)
+{
+ KX_VertexProxy* self= static_cast<KX_VertexProxy*>(self_v);
+ return PyObjectFrom(MT_Vector3(self->m_vertex->getXYZ()));
+}
+
+PyObject* KX_VertexProxy::pyattr_get_UV(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef)
+{
+ KX_VertexProxy* self= static_cast<KX_VertexProxy*>(self_v);
+ return PyObjectFrom(MT_Point2(self->m_vertex->getUV1()));
+}
+
+PyObject* KX_VertexProxy::pyattr_get_color(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef)
+{
+ KX_VertexProxy* self= static_cast<KX_VertexProxy*>(self_v);
+ const unsigned char *colp = self->m_vertex->getRGBA();
+ MT_Vector4 color(colp[0], colp[1], colp[2], colp[3]);
+ color /= 255.0;
+ return PyObjectFrom(color);
+}
+
+PyObject* KX_VertexProxy::pyattr_get_normal(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef)
+{
+ KX_VertexProxy* self= static_cast<KX_VertexProxy*>(self_v);
+ return PyObjectFrom(MT_Vector3(self->m_vertex->getNormal()));
+}
+
+int KX_VertexProxy::pyattr_set_x(void *self_v, const struct KX_PYATTRIBUTE_DEF *attrdef, PyObject *value)
+{
+ KX_VertexProxy* self= static_cast<KX_VertexProxy*>(self_v);
+ if (PyFloat_Check(value))
{
+ float val = PyFloat_AsDouble(value);
+ MT_Point3 pos(self->m_vertex->getXYZ());
pos.x() = val;
- m_vertex->SetXYZ(pos);
- m_mesh->SetMeshModified(true);
+ self->m_vertex->SetXYZ(pos);
+ self->m_mesh->SetMeshModified(true);
return PY_SET_ATTR_SUCCESS;
}
+ return PY_SET_ATTR_FAIL;
+}
- if (!strcmp(attr_str, "y"))
+int KX_VertexProxy::pyattr_set_y(void *self_v, const struct KX_PYATTRIBUTE_DEF *attrdef, PyObject *value)
+{
+ KX_VertexProxy* self= static_cast<KX_VertexProxy*>(self_v);
+ if (PyFloat_Check(value))
{
+ float val = PyFloat_AsDouble(value);
+ MT_Point3 pos(self->m_vertex->getXYZ());
pos.y() = val;
- m_vertex->SetXYZ(pos);
- m_mesh->SetMeshModified(true);
+ self->m_vertex->SetXYZ(pos);
+ self->m_mesh->SetMeshModified(true);
return PY_SET_ATTR_SUCCESS;
}
+ return PY_SET_ATTR_FAIL;
+}
- if (!strcmp(attr_str, "z"))
+int KX_VertexProxy::pyattr_set_z(void *self_v, const struct KX_PYATTRIBUTE_DEF *attrdef, PyObject *value)
+{
+ KX_VertexProxy* self= static_cast<KX_VertexProxy*>(self_v);
+ if (PyFloat_Check(value))
{
+ float val = PyFloat_AsDouble(value);
+ MT_Point3 pos(self->m_vertex->getXYZ());
pos.z() = val;
- m_vertex->SetXYZ(pos);
- m_mesh->SetMeshModified(true);
+ self->m_vertex->SetXYZ(pos);
+ self->m_mesh->SetMeshModified(true);
return PY_SET_ATTR_SUCCESS;
}
+ return PY_SET_ATTR_FAIL;
+}
- // uv
- MT_Point2 uv = m_vertex->getUV1();
- if (!strcmp(attr_str, "u"))
+int KX_VertexProxy::pyattr_set_u(void *self_v, const struct KX_PYATTRIBUTE_DEF *attrdef, PyObject *value)
+{
+ KX_VertexProxy* self= static_cast<KX_VertexProxy*>(self_v);
+ if (PyFloat_Check(value))
{
+ float val = PyFloat_AsDouble(value);
+ MT_Point2 uv = self->m_vertex->getUV1();
uv[0] = val;
- m_vertex->SetUV(uv);
- m_mesh->SetMeshModified(true);
+ self->m_vertex->SetUV(uv);
+ self->m_mesh->SetMeshModified(true);
return PY_SET_ATTR_SUCCESS;
}
+ return PY_SET_ATTR_FAIL;
+}
- if (!strcmp(attr_str, "v"))
+int KX_VertexProxy::pyattr_set_v(void *self_v, const struct KX_PYATTRIBUTE_DEF *attrdef, PyObject *value)
+{
+ KX_VertexProxy* self= static_cast<KX_VertexProxy*>(self_v);
+ if (PyFloat_Check(value))
{
+ float val = PyFloat_AsDouble(value);
+ MT_Point2 uv = self->m_vertex->getUV1();
uv[1] = val;
- m_vertex->SetUV(uv);
- m_mesh->SetMeshModified(true);
+ self->m_vertex->SetUV(uv);
+ self->m_mesh->SetMeshModified(true);
return PY_SET_ATTR_SUCCESS;
}
+ return PY_SET_ATTR_FAIL;
+}
- // uv
- MT_Point2 uv2 = m_vertex->getUV2();
- if (!strcmp(attr_str, "u2"))
+int KX_VertexProxy::pyattr_set_u2(void *self_v, const struct KX_PYATTRIBUTE_DEF *attrdef, PyObject *value)
+{
+ KX_VertexProxy* self= static_cast<KX_VertexProxy*>(self_v);
+ if (PyFloat_Check(value))
{
+ float val = PyFloat_AsDouble(value);
+ MT_Point2 uv = self->m_vertex->getUV2();
uv[0] = val;
- m_vertex->SetUV2(uv);
- m_mesh->SetMeshModified(true);
- return 0;
+ self->m_vertex->SetUV2(uv);
+ self->m_mesh->SetMeshModified(true);
+ return PY_SET_ATTR_SUCCESS;
}
+ return PY_SET_ATTR_FAIL;
+}
- if (!strcmp(attr_str, "v2"))
+int KX_VertexProxy::pyattr_set_v2(void *self_v, const struct KX_PYATTRIBUTE_DEF *attrdef, PyObject *value)
+{
+ KX_VertexProxy* self= static_cast<KX_VertexProxy*>(self_v);
+ if (PyFloat_Check(value))
{
+ float val = PyFloat_AsDouble(value);
+ MT_Point2 uv = self->m_vertex->getUV2();
uv[1] = val;
- m_vertex->SetUV2(uv);
- m_mesh->SetMeshModified(true);
+ self->m_vertex->SetUV2(uv);
+ self->m_mesh->SetMeshModified(true);
return PY_SET_ATTR_SUCCESS;
}
+ return PY_SET_ATTR_FAIL;
+}
- // col
- unsigned int icol = *((const unsigned int *)m_vertex->getRGBA());
- unsigned char *cp = (unsigned char*) &icol;
- val *= 255.0;
- if (!strcmp(attr_str, "r"))
+int KX_VertexProxy::pyattr_set_r(void *self_v, const struct KX_PYATTRIBUTE_DEF *attrdef, PyObject *value)
+{
+ KX_VertexProxy* self= static_cast<KX_VertexProxy*>(self_v);
+ if (PyFloat_Check(value))
{
+ float val = PyFloat_AsDouble(value);
+ unsigned int icol = *((const unsigned int *)self->m_vertex->getRGBA());
+ unsigned char *cp = (unsigned char*) &icol;
+ val *= 255.0;
cp[0] = (unsigned char) val;
- m_vertex->SetRGBA(icol);
- m_mesh->SetMeshModified(true);
+ self->m_vertex->SetRGBA(icol);
+ self->m_mesh->SetMeshModified(true);
return PY_SET_ATTR_SUCCESS;
}
- if (!strcmp(attr_str, "g"))
+ return PY_SET_ATTR_FAIL;
+}
+
+int KX_VertexProxy::pyattr_set_g(void *self_v, const struct KX_PYATTRIBUTE_DEF *attrdef, PyObject *value)
+{
+ KX_VertexProxy* self= static_cast<KX_VertexProxy*>(self_v);
+ if (PyFloat_Check(value))
{
+ float val = PyFloat_AsDouble(value);
+ unsigned int icol = *((const unsigned int *)self->m_vertex->getRGBA());
+ unsigned char *cp = (unsigned char*) &icol;
+ val *= 255.0;
cp[1] = (unsigned char) val;
- m_vertex->SetRGBA(icol);
- m_mesh->SetMeshModified(true);
+ self->m_vertex->SetRGBA(icol);
+ self->m_mesh->SetMeshModified(true);
return PY_SET_ATTR_SUCCESS;
}
- if (!strcmp(attr_str, "b"))
+ return PY_SET_ATTR_FAIL;
+}
+
+int KX_VertexProxy::pyattr_set_b(void *self_v, const struct KX_PYATTRIBUTE_DEF *attrdef, PyObject *value)
+{
+ KX_VertexProxy* self= static_cast<KX_VertexProxy*>(self_v);
+ if (PyFloat_Check(value))
{
+ float val = PyFloat_AsDouble(value);
+ unsigned int icol = *((const unsigned int *)self->m_vertex->getRGBA());
+ unsigned char *cp = (unsigned char*) &icol;
+ val *= 255.0;
cp[2] = (unsigned char) val;
- m_vertex->SetRGBA(icol);
- m_mesh->SetMeshModified(true);
+ self->m_vertex->SetRGBA(icol);
+ self->m_mesh->SetMeshModified(true);
return PY_SET_ATTR_SUCCESS;
}
- if (!strcmp(attr_str, "a"))
+ return PY_SET_ATTR_FAIL;
+}
+
+int KX_VertexProxy::pyattr_set_a(void *self_v, const struct KX_PYATTRIBUTE_DEF *attrdef, PyObject *value)
+{
+ KX_VertexProxy* self= static_cast<KX_VertexProxy*>(self_v);
+ if (PyFloat_Check(value))
{
+ float val = PyFloat_AsDouble(value);
+ unsigned int icol = *((const unsigned int *)self->m_vertex->getRGBA());
+ unsigned char *cp = (unsigned char*) &icol;
+ val *= 255.0;
cp[3] = (unsigned char) val;
- m_vertex->SetRGBA(icol);
- m_mesh->SetMeshModified(true);
+ self->m_vertex->SetRGBA(icol);
+ self->m_mesh->SetMeshModified(true);
return PY_SET_ATTR_SUCCESS;
}
- }
+ return PY_SET_ATTR_FAIL;
+}
- return CValue::py_setattro(attr, pyvalue);
+int KX_VertexProxy::pyattr_set_XYZ(void *self_v, const struct KX_PYATTRIBUTE_DEF *attrdef, PyObject *value)
+{
+ KX_VertexProxy* self= static_cast<KX_VertexProxy*>(self_v);
+ if (PySequence_Check(value))
+ {
+ MT_Point3 vec;
+ if (PyVecTo(value, vec))
+ {
+ self->m_vertex->SetXYZ(vec);
+ self->m_mesh->SetMeshModified(true);
+ return PY_SET_ATTR_SUCCESS;
+ }
+ }
+ return PY_SET_ATTR_FAIL;
+}
+
+int KX_VertexProxy::pyattr_set_UV(void *self_v, const struct KX_PYATTRIBUTE_DEF *attrdef, PyObject *value)
+{
+ KX_VertexProxy* self= static_cast<KX_VertexProxy*>(self_v);
+ if (PySequence_Check(value))
+ {
+ MT_Point2 vec;
+ if (PyVecTo(value, vec))
+ {
+ self->m_vertex->SetUV(vec);
+ self->m_mesh->SetMeshModified(true);
+ return PY_SET_ATTR_SUCCESS;
+ }
+ }
+ return PY_SET_ATTR_FAIL;
+}
+
+int KX_VertexProxy::pyattr_set_color(void *self_v, const struct KX_PYATTRIBUTE_DEF *attrdef, PyObject *value)
+{
+ KX_VertexProxy* self= static_cast<KX_VertexProxy*>(self_v);
+ if (PySequence_Check(value))
+ {
+ MT_Vector4 vec;
+ if (PyVecTo(value, vec))
+ {
+ self->m_vertex->SetRGBA(vec);
+ self->m_mesh->SetMeshModified(true);
+ return PY_SET_ATTR_SUCCESS;
+ }
+ }
+ return PY_SET_ATTR_FAIL;
+}
+
+int KX_VertexProxy::pyattr_set_normal(void *self_v, const struct KX_PYATTRIBUTE_DEF *attrdef, PyObject *value)
+{
+ KX_VertexProxy* self= static_cast<KX_VertexProxy*>(self_v);
+ if (PySequence_Check(value))
+ {
+ MT_Vector3 vec;
+ if (PyVecTo(value, vec))
+ {
+ self->m_vertex->SetNormal(vec);
+ self->m_mesh->SetMeshModified(true);
+ return PY_SET_ATTR_SUCCESS;
+ }
+ }
+ return PY_SET_ATTR_FAIL;
}
-#endif
KX_VertexProxy::KX_VertexProxy(KX_MeshProxy*mesh, RAS_TexVert* vertex)
: m_vertex(vertex),
diff --git a/source/gameengine/Ketsji/KX_VertexProxy.h b/source/gameengine/Ketsji/KX_VertexProxy.h
index 08fe0e7e2f8..b39d3ecb7d4 100644
--- a/source/gameengine/Ketsji/KX_VertexProxy.h
+++ b/source/gameengine/Ketsji/KX_VertexProxy.h
@@ -56,6 +56,37 @@ public:
// stuff for python integration
+ static PyObject* pyattr_get_x(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef);
+ static PyObject* pyattr_get_y(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef);
+ static PyObject* pyattr_get_z(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef);
+ static PyObject* pyattr_get_r(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef);
+ static PyObject* pyattr_get_g(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef);
+ static PyObject* pyattr_get_b(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef);
+ static PyObject* pyattr_get_a(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef);
+ static PyObject* pyattr_get_u(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef);
+ static PyObject* pyattr_get_v(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef);
+ static PyObject* pyattr_get_u2(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef);
+ static PyObject* pyattr_get_v2(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef);
+ static PyObject* pyattr_get_XYZ(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef);
+ static PyObject* pyattr_get_UV(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef);
+ static PyObject* pyattr_get_color(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef);
+ static PyObject* pyattr_get_normal(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef);
+ static int pyattr_set_x(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef, PyObject *value);
+ static int pyattr_set_y(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef, PyObject *value);
+ static int pyattr_set_z(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef, PyObject *value);
+ static int pyattr_set_u(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef, PyObject *value);
+ static int pyattr_set_v(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef, PyObject *value);
+ static int pyattr_set_u2(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef, PyObject *value);
+ static int pyattr_set_v2(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef, PyObject *value);
+ static int pyattr_set_r(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef, PyObject *value);
+ static int pyattr_set_g(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef, PyObject *value);
+ static int pyattr_set_b(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef, PyObject *value);
+ static int pyattr_set_a(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef, PyObject *value);
+ static int pyattr_set_XYZ(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef, PyObject *value);
+ static int pyattr_set_UV(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef, PyObject *value);
+ static int pyattr_set_color(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef, PyObject *value);
+ static int pyattr_set_normal(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef, PyObject *value);
+
KX_PYMETHOD_NOARGS(KX_VertexProxy,GetXYZ);
KX_PYMETHOD_O(KX_VertexProxy,SetXYZ);
KX_PYMETHOD_NOARGS(KX_VertexProxy,GetUV);
diff --git a/source/gameengine/Ketsji/Makefile b/source/gameengine/Ketsji/Makefile
index 1a7ec415382..79c8626d295 100644
--- a/source/gameengine/Ketsji/Makefile
+++ b/source/gameengine/Ketsji/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
# All rights reserved.
diff --git a/source/gameengine/Ketsji/SConscript b/source/gameengine/Ketsji/SConscript
index 694175e8aca..37193d7cc77 100644
--- a/source/gameengine/Ketsji/SConscript
+++ b/source/gameengine/Ketsji/SConscript
@@ -28,18 +28,18 @@ incs += ' ' + env['BF_OPENGL_INC']
if env['WITH_BF_SDL']:
incs += ' ' + env['BF_SDL_INC']
else:
- defs.append('DISABLE_SDL')
+ defs.append('DISABLE_SDL')
if env['WITH_BF_PYTHON']:
- incs += ' ' + env['BF_PYTHON_INC']
+ incs += ' ' + env['BF_PYTHON_INC']
else:
- defs.append('DISABLE_PYTHON')
+ defs.append('DISABLE_PYTHON')
if env['WITH_BF_FFMPEG']:
- defs.append('WITH_FFMPEG')
-
+ defs.append('WITH_FFMPEG')
+
if env['OURPLATFORM'] in ('win32-vc', 'win64-vc', 'win32-mingw'):
- if env['BF_DEBUG']:
- defs.append('_DEBUG') # for Python
+ if env['BF_DEBUG']:
+ defs.append('_DEBUG') # for Python
env.BlenderLib ( 'bf_ketsji', sources, Split(incs), defs, libtype=['core','player'], priority=[320,45], cxx_compileflags=env['BGE_CXXFLAGS'])
diff --git a/source/gameengine/Makefile b/source/gameengine/Makefile
index bcb4b9098e7..0fdac2acce2 100644
--- a/source/gameengine/Makefile
+++ b/source/gameengine/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
# All rights reserved.
diff --git a/source/gameengine/Network/LoopBackNetwork/Makefile b/source/gameengine/Network/LoopBackNetwork/Makefile
index 690fd644094..236c28b0f23 100644
--- a/source/gameengine/Network/LoopBackNetwork/Makefile
+++ b/source/gameengine/Network/LoopBackNetwork/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
# All rights reserved.
diff --git a/source/gameengine/Network/Makefile b/source/gameengine/Network/Makefile
index c6b22276113..99a047c8b95 100644
--- a/source/gameengine/Network/Makefile
+++ b/source/gameengine/Network/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
# All rights reserved.
diff --git a/source/gameengine/Network/TerraplayNetwork/Makefile b/source/gameengine/Network/TerraplayNetwork/Makefile
index d987263d433..d5a4c86740b 100644
--- a/source/gameengine/Network/TerraplayNetwork/Makefile
+++ b/source/gameengine/Network/TerraplayNetwork/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
# All rights reserved.
diff --git a/source/gameengine/Physics/Bullet/CcdPhysicsController.cpp b/source/gameengine/Physics/Bullet/CcdPhysicsController.cpp
index fd1a62d8997..421a9fc64b8 100644
--- a/source/gameengine/Physics/Bullet/CcdPhysicsController.cpp
+++ b/source/gameengine/Physics/Bullet/CcdPhysicsController.cpp
@@ -2027,6 +2027,11 @@ btCollisionShape* CcdShapeConstructionInfo::CreateBulletShape(btScalar margin, b
collisionShape->setMargin(margin);
break;
+ case PHY_SHAPE_CAPSULE:
+ collisionShape = new btCapsuleShapeZ(m_radius, m_height);
+ collisionShape->setMargin(margin);
+ break;
+
case PHY_SHAPE_MESH:
// Let's use the latest btScaledBvhTriangleMeshShape: it allows true sharing of
// triangle mesh information between duplicates => drastic performance increase when
@@ -2162,4 +2167,3 @@ CcdShapeConstructionInfo::~CcdShapeConstructionInfo()
}
}
-
diff --git a/source/gameengine/Physics/Bullet/Makefile b/source/gameengine/Physics/Bullet/Makefile
index 433d1df3d2f..0514565534d 100644
--- a/source/gameengine/Physics/Bullet/Makefile
+++ b/source/gameengine/Physics/Bullet/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
# All rights reserved.
diff --git a/source/gameengine/Physics/Bullet/SConscript b/source/gameengine/Physics/Bullet/SConscript
index 976c6825351..f58085ab354 100644
--- a/source/gameengine/Physics/Bullet/SConscript
+++ b/source/gameengine/Physics/Bullet/SConscript
@@ -23,8 +23,8 @@ incs += ' ' + env['BF_BULLET_INC']
defs = []
if env['WITH_BF_PYTHON']:
- incs += ' ' + env['BF_PYTHON_INC']
+ incs += ' ' + env['BF_PYTHON_INC']
else:
- defs.append('DISABLE_PYTHON')
+ defs.append('DISABLE_PYTHON')
env.BlenderLib ( 'bf_bullet', Split(sources), Split(incs), defs, libtype=['core','player'], priority=[350,50], cxx_compileflags=env['BGE_CXXFLAGS'])
diff --git a/source/gameengine/Physics/Dummy/Makefile b/source/gameengine/Physics/Dummy/Makefile
index 0e36266ae09..9a600a0365f 100644
--- a/source/gameengine/Physics/Dummy/Makefile
+++ b/source/gameengine/Physics/Dummy/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
# All rights reserved.
diff --git a/source/gameengine/Physics/Makefile b/source/gameengine/Physics/Makefile
index da0d4cafd2e..f5f914c2ac2 100644
--- a/source/gameengine/Physics/Makefile
+++ b/source/gameengine/Physics/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
# All rights reserved.
diff --git a/source/gameengine/Physics/common/Makefile b/source/gameengine/Physics/common/Makefile
index f87da383520..369699e1b90 100644
--- a/source/gameengine/Physics/common/Makefile
+++ b/source/gameengine/Physics/common/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
# All rights reserved.
diff --git a/source/gameengine/Physics/common/PHY_DynamicTypes.h b/source/gameengine/Physics/common/PHY_DynamicTypes.h
index 08d94a2850a..cc0f06a58cf 100644
--- a/source/gameengine/Physics/common/PHY_DynamicTypes.h
+++ b/source/gameengine/Physics/common/PHY_DynamicTypes.h
@@ -138,6 +138,7 @@ typedef enum PHY_ShapeType {
PHY_SHAPE_SPHERE,
PHY_SHAPE_CYLINDER,
PHY_SHAPE_CONE,
+ PHY_SHAPE_CAPSULE,
PHY_SHAPE_MESH,
PHY_SHAPE_POLYTOPE,
PHY_SHAPE_COMPOUND,
@@ -148,4 +149,3 @@ typedef enum PHY_ShapeType {
typedef float PHY_Vector3[3];
#endif //__PHY_DYNAMIC_TYPES
-
diff --git a/source/gameengine/PyDoc/PhysicsConstraints.py b/source/gameengine/PyDoc/PhysicsConstraints.py
index 2859aedd2d1..01c922583e6 100644
--- a/source/gameengine/PyDoc/PhysicsConstraints.py
+++ b/source/gameengine/PyDoc/PhysicsConstraints.py
@@ -291,4 +291,4 @@ def setNumTimeSubSteps(numSubStep):
# Does something
#
# @rtype:
-# """ \ No newline at end of file
+# """
diff --git a/source/gameengine/PyDoc/VideoTexture.py b/source/gameengine/PyDoc/VideoTexture.py
index c74bd4f0f16..80ac1f4392a 100644
--- a/source/gameengine/PyDoc/VideoTexture.py
+++ b/source/gameengine/PyDoc/VideoTexture.py
@@ -215,4 +215,4 @@ def VideoFFmpeg():
Does something
@rtype:
- """ \ No newline at end of file
+ """
diff --git a/source/gameengine/PyDoc/bge.logic.rst b/source/gameengine/PyDoc/bge.logic.rst
index a10733569f3..a7eb5635d0f 100644
--- a/source/gameengine/PyDoc/bge.logic.rst
+++ b/source/gameengine/PyDoc/bge.logic.rst
@@ -173,14 +173,16 @@ General functions
Restarts the current game by reloading the .blend file (the last saved version, not what is currently running).
-.. function:: LibLoad(blend, type)
+.. function:: LibLoad(blend, type, data)
Converts the all of the datablocks of the given type from the given blend.
- :arg blend: The path to the blend file
+ :arg blend: The path to the blend file (or the name to use for the library if data is supplied)
:type blend: string
:arg type: The datablock type (currently only "Scene" and "Mesh" are supported)
:type type: string
+ :arg data: Binary data from a blend file (optional)
+ :type data: bytes
.. function:: LibNew(name, type, data)
diff --git a/source/gameengine/PyDoc/bge.types.rst b/source/gameengine/PyDoc/bge.types.rst
index 028b4fa72f3..96ba8d278f1 100644
--- a/source/gameengine/PyDoc/bge.types.rst
+++ b/source/gameengine/PyDoc/bge.types.rst
@@ -71,9 +71,9 @@ Game Engine bge.types Module
.. attribute:: events
- A list of pressed keys that have either been pressed, or just released, or are active this frame. (read-only).
+ A dictionary containing the status of each keyboard event or key. (read-only).
- :type: list [[:ref:`keycode<keyboard-keys>`, :ref:`status<input-status>`], ...]
+ :type: dictionary {:ref:`keycode<keyboard-keys>`::ref:`status<input-status>`, ...}
.. class:: SCA_PythonMouse(PyObjectPlus)
@@ -81,9 +81,9 @@ Game Engine bge.types Module
.. attribute:: events
- a list of pressed buttons that have either been pressed, or just released, or are active this frame. (read-only).
+ a dictionary containing the status of each mouse event. (read-only).
- :type: list [[:ref:`keycode<mouse-keys>`, :ref:`status<input-status>`], ...]
+ :type: dictionary {:ref:`keycode<mouse-keys>`::ref:`status<input-status>`, ...}
.. attribute:: position
diff --git a/source/gameengine/PyDoc/how_to_build_win.txt b/source/gameengine/PyDoc/how_to_build_win.txt
index 018a28a9bfd..5610ced3b2a 100644
--- a/source/gameengine/PyDoc/how_to_build_win.txt
+++ b/source/gameengine/PyDoc/how_to_build_win.txt
@@ -13,4 +13,4 @@ C:\Python26\python.exe C:\Python26\Scripts\epydoc.py --debug -v -o BPY_GE --url
4) run your created batch file. If everything goes well it creates a folder named BPY_GE with all the generated documentation.
-Documentation valid in March of 2010 - Blender 2.5alpha2 \ No newline at end of file
+Documentation valid in March of 2010 - Blender 2.5alpha2
diff --git a/source/gameengine/Rasterizer/Makefile b/source/gameengine/Rasterizer/Makefile
index c877e423a71..d800a02b181 100644
--- a/source/gameengine/Rasterizer/Makefile
+++ b/source/gameengine/Rasterizer/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
# All rights reserved.
diff --git a/source/gameengine/Rasterizer/RAS_BucketManager.cpp b/source/gameengine/Rasterizer/RAS_BucketManager.cpp
index 32fb1e31780..42cdb9659e6 100644
--- a/source/gameengine/Rasterizer/RAS_BucketManager.cpp
+++ b/source/gameengine/Rasterizer/RAS_BucketManager.cpp
@@ -26,7 +26,7 @@
* ***** END GPL LICENSE BLOCK *****
*/
-#ifdef WIN32
+#if defined(WIN32) && !defined(FREE_WINDOWS)
// don't show these anoying STL warnings
#pragma warning (disable:4786)
#endif
diff --git a/source/gameengine/Rasterizer/RAS_Deformer.h b/source/gameengine/Rasterizer/RAS_Deformer.h
index 17c2cb4695e..f61ac7ea18a 100644
--- a/source/gameengine/Rasterizer/RAS_Deformer.h
+++ b/source/gameengine/Rasterizer/RAS_Deformer.h
@@ -30,7 +30,7 @@
#ifndef RAS_DEFORMER
#define RAS_DEFORMER
-#ifdef WIN32
+#if defined(WIN32) && !defined(FREE_WINDOWS)
#pragma warning (disable:4786) // get rid of stupid stl-visual compiler debug warning
#endif //WIN32
diff --git a/source/gameengine/Rasterizer/RAS_IRasterizer.h b/source/gameengine/Rasterizer/RAS_IRasterizer.h
index ebca97a806a..32ba28bc395 100644
--- a/source/gameengine/Rasterizer/RAS_IRasterizer.h
+++ b/source/gameengine/Rasterizer/RAS_IRasterizer.h
@@ -29,7 +29,7 @@
#ifndef __RAS_IRASTERIZER
#define __RAS_IRASTERIZER
-#ifdef WIN32
+#if defined(WIN32) && !defined(FREE_WINDOWS)
#pragma warning (disable:4786)
#endif
diff --git a/source/gameengine/Rasterizer/RAS_MaterialBucket.cpp b/source/gameengine/Rasterizer/RAS_MaterialBucket.cpp
index 14acd0259da..ef9bf4e22b7 100644
--- a/source/gameengine/Rasterizer/RAS_MaterialBucket.cpp
+++ b/source/gameengine/Rasterizer/RAS_MaterialBucket.cpp
@@ -28,8 +28,11 @@
#include "RAS_MaterialBucket.h"
-#ifdef WIN32
+#if defined(WIN32) && !defined(FREE_WINDOWS)
#pragma warning (disable:4786)
+#endif
+
+#ifdef WIN32
#include <windows.h>
#endif // WIN32
diff --git a/source/gameengine/Rasterizer/RAS_MeshObject.h b/source/gameengine/Rasterizer/RAS_MeshObject.h
index 5a834bf26b0..11499b4fbcb 100644
--- a/source/gameengine/Rasterizer/RAS_MeshObject.h
+++ b/source/gameengine/Rasterizer/RAS_MeshObject.h
@@ -29,7 +29,7 @@
#ifndef __RAS_MESHOBJECT
#define __RAS_MESHOBJECT
-#ifdef WIN32
+#if defined(WIN32) && !defined(FREE_WINDOWS)
// disable the STL warnings ("debug information length > 255")
#pragma warning (disable:4786)
#endif
diff --git a/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/Makefile b/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/Makefile
index aedbc2705f0..357bdf9d99b 100644
--- a/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/Makefile
+++ b/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
# All rights reserved.
diff --git a/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OpenGLRasterizer.h b/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OpenGLRasterizer.h
index f2f70c68068..e531264eaec 100644
--- a/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OpenGLRasterizer.h
+++ b/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OpenGLRasterizer.h
@@ -29,7 +29,7 @@
#ifndef __RAS_OPENGLRASTERIZER
#define __RAS_OPENGLRASTERIZER
-#ifdef WIN32
+#if defined(WIN32) && !defined(FREE_WINDOWS)
#pragma warning (disable:4786)
#endif
diff --git a/source/gameengine/Rasterizer/RAS_Polygon.cpp b/source/gameengine/Rasterizer/RAS_Polygon.cpp
index b038d3bf31a..ab31bb59c36 100644
--- a/source/gameengine/Rasterizer/RAS_Polygon.cpp
+++ b/source/gameengine/Rasterizer/RAS_Polygon.cpp
@@ -26,7 +26,7 @@
* ***** END GPL LICENSE BLOCK *****
*/
-#ifdef WIN32
+#if defined(WIN32) && !defined(FREE_WINDOWS)
#pragma warning (disable:4786)
#endif
diff --git a/source/gameengine/Rasterizer/SConscript b/source/gameengine/Rasterizer/SConscript
index 8bc99f1596e..a78a0289d98 100644
--- a/source/gameengine/Rasterizer/SConscript
+++ b/source/gameengine/Rasterizer/SConscript
@@ -9,8 +9,8 @@ incs = '. #intern/guardedalloc #source/kernel/gen_system #intern/string #intern/
defs = [ 'GLEW_STATIC' ]
if env['WITH_BF_PYTHON']:
- incs += ' ' + env['BF_PYTHON_INC']
+ incs += ' ' + env['BF_PYTHON_INC']
else:
- defs.append('DISABLE_PYTHON')
+ defs.append('DISABLE_PYTHON')
env.BlenderLib ( 'bf_rasterizer', sources, Split(incs), defs, libtype=['core','player'], priority=[350,70], cxx_compileflags=env['BGE_CXXFLAGS'])
diff --git a/source/gameengine/SceneGraph/Makefile b/source/gameengine/SceneGraph/Makefile
index acec1b729e8..8a797ae5a0e 100644
--- a/source/gameengine/SceneGraph/Makefile
+++ b/source/gameengine/SceneGraph/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
# All rights reserved.
diff --git a/source/gameengine/VideoTexture/CMakeLists.txt b/source/gameengine/VideoTexture/CMakeLists.txt
index 3af514ca0de..34a32328e29 100644
--- a/source/gameengine/VideoTexture/CMakeLists.txt
+++ b/source/gameengine/VideoTexture/CMakeLists.txt
@@ -58,7 +58,7 @@ IF(WITH_FFMPEG)
ENDIF(WITH_FFMPEG)
IF(WITH_PYTHON)
- SET(INC ${INC} ${PYTHON_INC})
+ LIST(APPEND INC ${PYTHON_INC})
ELSE(WITH_PYTHON)
ADD_DEFINITIONS(-DDISABLE_PYTHON)
ENDIF(WITH_PYTHON)
diff --git a/source/gameengine/VideoTexture/Makefile b/source/gameengine/VideoTexture/Makefile
index 1cb147860cd..af3417eef02 100644
--- a/source/gameengine/VideoTexture/Makefile
+++ b/source/gameengine/VideoTexture/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
# All rights reserved.
diff --git a/source/gameengine/VideoTexture/SConscript b/source/gameengine/VideoTexture/SConscript
index 70c7dfc6d3a..21a5f8ce3fe 100644
--- a/source/gameengine/VideoTexture/SConscript
+++ b/source/gameengine/VideoTexture/SConscript
@@ -16,13 +16,13 @@ incs += ' #intern/guardedalloc #extern/glew/include'
defs = []
if env['OURPLATFORM'] in ('win32-vc', 'win64-vc','win32-mingw'):
- if env['BF_DEBUG']:
- defs.append('_DEBUG')
+ if env['BF_DEBUG']:
+ defs.append('_DEBUG')
if env['WITH_BF_PYTHON']:
- incs += ' ' + env['BF_PYTHON_INC']
+ incs += ' ' + env['BF_PYTHON_INC']
else:
- defs.append('DISABLE_PYTHON')
+ defs.append('DISABLE_PYTHON')
if env['WITH_BF_FFMPEG']:
defs.append('WITH_FFMPEG')
diff --git a/source/icons/Makefile b/source/icons/Makefile
index a31ae9a56c7..5832a098592 100644
--- a/source/icons/Makefile
+++ b/source/icons/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
# All rights reserved.
diff --git a/source/icons/SConscript b/source/icons/SConscript
index 5abb36aafea..ca6308781e9 100644
--- a/source/icons/SConscript
+++ b/source/icons/SConscript
@@ -2,8 +2,8 @@
Import ('env')
if env['OURPLATFORM'] == 'linuxcross':
- source = 'linuxcrossblender.rcscons'
+ source = 'linuxcrossblender.rcscons'
else:
- source = 'winblender.rcscons'
+ source = 'winblender.rcscons'
env.BlenderRes('winresource', source, ['core'], priority=[95])
diff --git a/source/icons/winblender.ico b/source/icons/winblender.ico
index 85fccd71bf5..e6b368c562b 100644
--- a/source/icons/winblender.ico
+++ b/source/icons/winblender.ico
Binary files differ
diff --git a/source/icons/wincreator.ico b/source/icons/wincreator.ico
deleted file mode 100644
index 4fb7be08788..00000000000
--- a/source/icons/wincreator.ico
+++ /dev/null
Binary files differ
diff --git a/source/icons/wincreator.rc b/source/icons/wincreator.rc
deleted file mode 100644
index e11bdaf15e3..00000000000
--- a/source/icons/wincreator.rc
+++ /dev/null
@@ -1,2 +0,0 @@
-APPICON ICON "wincreator.ico"
-BLENDERFILE ICON "winblenderfile.ico"
diff --git a/source/icons/winlockedfile.ico b/source/icons/winlockedfile.ico
deleted file mode 100644
index 8b23d5c3d4d..00000000000
--- a/source/icons/winlockedfile.ico
+++ /dev/null
Binary files differ
diff --git a/source/icons/winplayer.ico b/source/icons/winplayer.ico
deleted file mode 100644
index 336ff09f94f..00000000000
--- a/source/icons/winplayer.ico
+++ /dev/null
Binary files differ
diff --git a/source/icons/winplayer.rc b/source/icons/winplayer.rc
deleted file mode 100644
index e2b255e7280..00000000000
--- a/source/icons/winplayer.rc
+++ /dev/null
@@ -1 +0,0 @@
-APPICON ICON "winplayer.ico"
diff --git a/source/icons/winpublisher.ico b/source/icons/winpublisher.ico
deleted file mode 100644
index 9a6f4690681..00000000000
--- a/source/icons/winpublisher.ico
+++ /dev/null
Binary files differ
diff --git a/source/icons/winpublisher.rc b/source/icons/winpublisher.rc
deleted file mode 100644
index b296c0ffc8f..00000000000
--- a/source/icons/winpublisher.rc
+++ /dev/null
@@ -1,3 +0,0 @@
-APPICON ICON "winpublisher.ico"
-BLENDERFILE ICON "winblenderfile.ico"
-LOCKEDFILE ICON "winlockedfile.ico"
diff --git a/source/kernel/CMakeLists.txt b/source/kernel/CMakeLists.txt
index 46c5ea89ce5..66d14014587 100644
--- a/source/kernel/CMakeLists.txt
+++ b/source/kernel/CMakeLists.txt
@@ -24,7 +24,13 @@
#
# ***** END GPL LICENSE BLOCK *****
-SET(INC gen_messaging gen_system ../../intern/string ../../intern/moto/include ../../source/blender/blenloader )
+SET(INC
+ gen_messaging
+ gen_system
+ ../../intern/string
+ ../../intern/moto/include
+ ../../source/blender/blenloader
+)
FILE(GLOB SRC
gen_messaging/intern/messaging.c
diff --git a/source/kernel/Makefile b/source/kernel/Makefile
index b71491b46d1..aa0b3dd3bf1 100644
--- a/source/kernel/Makefile
+++ b/source/kernel/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
# All rights reserved.
diff --git a/source/kernel/gen_messaging/Makefile b/source/kernel/gen_messaging/Makefile
index f94f6f082dd..a1d203bcf18 100644
--- a/source/kernel/gen_messaging/Makefile
+++ b/source/kernel/gen_messaging/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
# All rights reserved.
diff --git a/source/kernel/gen_messaging/intern/Makefile b/source/kernel/gen_messaging/intern/Makefile
index f88bcd53c6e..7b6b2169540 100644
--- a/source/kernel/gen_messaging/intern/Makefile
+++ b/source/kernel/gen_messaging/intern/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
# All rights reserved.
diff --git a/source/kernel/gen_system/GEN_HashedPtr.cpp b/source/kernel/gen_system/GEN_HashedPtr.cpp
index 4713c9d5eed..f6c71c34896 100644
--- a/source/kernel/gen_system/GEN_HashedPtr.cpp
+++ b/source/kernel/gen_system/GEN_HashedPtr.cpp
@@ -54,4 +54,4 @@ unsigned int GEN_Hash(void * inDWord)
return (unsigned int)(key ^ (key>>4));
#endif
}
-#endif \ No newline at end of file
+#endif
diff --git a/source/kernel/gen_system/Makefile b/source/kernel/gen_system/Makefile
index 31535ad2a97..45f491cbeb4 100644
--- a/source/kernel/gen_system/Makefile
+++ b/source/kernel/gen_system/Makefile
@@ -15,7 +15,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
-# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
# All rights reserved.