Add BulletWorldImporter: it takes the in-memory data from BulletFileLoader and instantiates objects in a BulletDynamicsWorld.

Note that BulletFileLoader is has no dependencies on BulletDynamics/BulletCollision.
Also added a custom build step to copy asset (.bullet and .obj file) into the executable folder
Made a few 'char*' 'const char*' to avoid compiler warnings
This commit is contained in:
erwin.coumans
2010-01-25 21:58:32 +00:00
parent b68f2710cd
commit a7a6ab8835
13 changed files with 76 additions and 187 deletions

View File

@@ -16,12 +16,13 @@ ${BULLET_PHYSICS_SOURCE_DIR}/src
${BULLET_PHYSICS_SOURCE_DIR}/Demos/OpenGL
${BULLET_PHYSICS_SOURCE_DIR}/Extras/ConvexDecomposition
${BULLET_PHYSICS_SOURCE_DIR}/Extras/Serialize/BulletFileLoader
${BULLET_PHYSICS_SOURCE_DIR}/Extras/Serialize/BulletWorldImporter
)
IF (USE_GLUT)
LINK_LIBRARIES(
OpenGLSupport BulletFileLoader BulletDynamics BulletCollision LinearMath ConvexDecomposition ${GLUT_glut_LIBRARY} ${OPENGL_gl_LIBRARY} ${OPENGL_glu_LIBRARY}
OpenGLSupport BulletWorldImporter BulletDynamics BulletCollision LinearMath BulletFileLoader ConvexDecomposition ${GLUT_glut_LIBRARY} ${OPENGL_gl_LIBRARY} ${OPENGL_glu_LIBRARY}
)
ADD_EXECUTABLE(AppConvexDecompositionDemo
@@ -32,7 +33,7 @@ IF (USE_GLUT)
ELSE (USE_GLUT)
LINK_LIBRARIES(
OpenGLSupport BulletFileLoader BulletDynamics BulletCollision LinearMath ConvexDecomposition ${OPENGL_gl_LIBRARY} ${OPENGL_glu_LIBRARY}
OpenGLSupport BulletWorldImporter BulletDynamics BulletCollision LinearMath BulletFileLoader ConvexDecomposition ${OPENGL_gl_LIBRARY} ${OPENGL_glu_LIBRARY}
)
ADD_EXECUTABLE(AppConvexDecompositionDemo
@@ -45,3 +46,11 @@ LINK_LIBRARIES(
ENDIF (USE_GLUT)
ADD_CUSTOM_COMMAND(
TARGET AppConvexDecompositionDemo
POST_BUILD
COMMAND ${CMAKE_COMMAND} ARGS -E copy_if_different ${BULLET_PHYSICS_SOURCE_DIR}/Demos/ConvexDecompositionDemo/testFile32Single.bullet ${CMAKE_CURRENT_BINARY_DIR}
COMMAND ${CMAKE_COMMAND} ARGS -E copy_if_different ${BULLET_PHYSICS_SOURCE_DIR}/file.obj ${CMAKE_CURRENT_BINARY_DIR}
)

View File

@@ -24,11 +24,12 @@ subject to the following restrictions:
#include "BulletCollision/CollisionShapes/btShapeHull.h"
#define TEST_SERIALIZATION
#define NO_OBJ_TO_BULLET
#ifdef TEST_SERIALIZATION
#include "LinearMath/btSerializer.h"
#include "btBulletFile.h"
#include "btBulletFileLoader.h"
#include "btBulletWorldImporter.h"
#endif
//#define USE_PARALLEL_DISPATCHER 1
@@ -145,13 +146,20 @@ m_collisionConfiguration = new btDefaultCollisionConfiguration();
void ConvexDecompositionDemo::initPhysics(const char* filename)
{
gContactAddedCallback = &MyContactCallback;
setupEmptyDynamicsWorld();
setTexturing(true);
setShadows(true);
setCameraDistance(26.f);
#ifndef NO_OBJ_TO_BULLET
ConvexDecomposition::WavefrontObj wo;
tcount = wo.loadObj(filename);
@@ -163,7 +171,8 @@ void ConvexDecompositionDemo::initPhysics(const char* filename)
}
setupEmptyDynamicsWorld();
btTransform startTransform;
startTransform.setIdentity();
@@ -483,6 +492,7 @@ void ConvexDecompositionDemo::initPhysics(const char* filename)
}
#ifdef TEST_SERIALIZATION
//test serializing this
@@ -499,14 +509,19 @@ void ConvexDecompositionDemo::initPhysics(const char* filename)
//now try again from the loaded file
setupEmptyDynamicsWorld();
#endif //TEST_SERIALIZATION
btBulletFileLoader* fileLoader = new btBulletFileLoader(m_dynamicsWorld);
fileLoader->setVerboseMode(true);
#endif //NO_OBJ_TO_BULLET
fileLoader->loadFileFromMemory("testFile.bullet");
#ifdef TEST_SERIALIZATION
btBulletWorldImporter* fileLoader = new btBulletWorldImporter(m_dynamicsWorld);
//fileLoader->setVerboseMode(true);
//fileLoader->loadFileFromMemory("testFile.bullet");
//fileLoader->loadFileFromMemory("testFile64Double.bullet");
//fileLoader->loadFileFromMemory("testFile64Single.bullet");
//fileLoader->loadFileFromMemory("testFile32Single.bullet");
fileLoader->loadFileFromMemory("testFile32Single.bullet");

View File

@@ -15,12 +15,13 @@ INCLUDE_DIRECTORIES(
${BULLET_PHYSICS_SOURCE_DIR}/src
${BULLET_PHYSICS_SOURCE_DIR}/Demos/OpenGL
${BULLET_PHYSICS_SOURCE_DIR}/Extras/Serialize/BulletFileLoader
${BULLET_PHYSICS_SOURCE_DIR}/Extras/Serialize/BulletWorldImporter
)
IF (USE_GLUT)
LINK_LIBRARIES(
OpenGLSupport BulletDynamics BulletCollision LinearMath BulletFileLoader ${GLUT_glut_LIBRARY} ${OPENGL_gl_LIBRARY} ${OPENGL_glu_LIBRARY}
OpenGLSupport BulletWorldImporter BulletDynamics BulletCollision LinearMath BulletFileLoader ${GLUT_glut_LIBRARY} ${OPENGL_gl_LIBRARY} ${OPENGL_glu_LIBRARY}
)
ADD_EXECUTABLE(AppSerializeDemo
@@ -31,7 +32,7 @@ IF (USE_GLUT)
ELSE (USE_GLUT)
LINK_LIBRARIES(
OpenGLSupport BulletDynamics BulletCollision LinearMath BulletFileLoader ${OPENGL_gl_LIBRARY} ${OPENGL_glu_LIBRARY}
OpenGLSupport BulletWorldImporter BulletDynamics BulletCollision LinearMath BulletFileLoader ${OPENGL_gl_LIBRARY} ${OPENGL_glu_LIBRARY}
)
ADD_EXECUTABLE(AppSerializeDemo

View File

@@ -37,7 +37,7 @@ subject to the following restrictions:
#ifdef TEST_SERIALIZATION
#include "LinearMath/btSerializer.h"
#include "btBulletFile.h"
#include "btBulletFileLoader.h"
#include "btBulletWorldImporter.h"
@@ -229,7 +229,7 @@ void SerializeDemo::initPhysics()
//now try again from the loaded file
setupEmptyDynamicsWorld();
btBulletFileLoader* fileLoader = new btBulletFileLoader(m_dynamicsWorld);
btBulletWorldImporter* fileLoader = new btBulletWorldImporter(m_dynamicsWorld);
fileLoader->loadFileFromMemory("testFile.bullet");

View File

@@ -14,6 +14,4 @@ bFile.cpp
bFile.h
btBulletFile.cpp
btBulletFile.h
btBulletFileLoader.cpp
btBulletFileLoader.h
)

View File

@@ -64,7 +64,7 @@ int ChunkUtils::getOffset(int flags)
// ----------------------------------------------------- //
int ChunkUtils::getNextBlock(bChunkInd *dataChunk, char *dataPtr, const int flags)
int ChunkUtils::getNextBlock(bChunkInd *dataChunk, const char *dataPtr, const int flags)
{
bool swap = false;
bool varies = false;

View File

@@ -65,7 +65,7 @@ namespace bParse {
{
public:
// buffer offset util
static int getNextBlock(bChunkInd *dataChunk, char *dataPtr, const int flags);
static int getNextBlock(bChunkInd *dataChunk, const char *dataPtr, const int flags);
// file chunk offset
static int getOffset(int flags);

View File

@@ -0,0 +1,10 @@
INCLUDE_DIRECTORIES(
${BULLET_PHYSICS_SOURCE_DIR}/src
${BULLET_PHYSICS_SOURCE_DIR}/Extras/Serialize/BulletFileLoader
)
ADD_LIBRARY(
BulletWorldImporter
btBulletWorldImporter.cpp
btBulletWorldImporter.h
)

View File

@@ -1,17 +1,17 @@
#include "btBulletFileLoader.h"
#include "btBulletWorldImporter.h"
#include "btBulletFile.h"
#include "btBulletDynamicsCommon.h"
btBulletFileLoader::btBulletFileLoader(btDynamicsWorld* world)
btBulletWorldImporter::btBulletWorldImporter(btDynamicsWorld* world)
:m_dynamicsWorld(world),
m_verboseDumpAllTypes(false)
{
}
bool btBulletFileLoader::loadFileFromMemory( char* fileName)
bool btBulletWorldImporter::loadFileFromMemory( const char* fileName)
{
bParse::btBulletFile* bulletFile2 = new bParse::btBulletFile(fileName);
@@ -25,7 +25,7 @@ bool btBulletFileLoader::loadFileFromMemory( char* fileName)
bool btBulletFileLoader::loadFileFromMemory( char* memoryBuffer, int len)
bool btBulletWorldImporter::loadFileFromMemory( char* memoryBuffer, int len)
{
bParse::btBulletFile* bulletFile2 = new bParse::btBulletFile(memoryBuffer,len);
@@ -37,7 +37,7 @@ bool btBulletFileLoader::loadFileFromMemory( char* memoryBuffer, int len)
}
bool btBulletFileLoader::loadFileFromMemory( bParse::btBulletFile* bulletFile2)
bool btBulletWorldImporter::loadFileFromMemory( bParse::btBulletFile* bulletFile2)
{
@@ -270,7 +270,7 @@ bool btBulletFileLoader::loadFileFromMemory( bParse::btBulletFile* bulletFile2)
return false;
}
btTypedConstraint* btBulletFileLoader::createUniversalD6Constraint(class btRigidBody* body0,class btRigidBody* otherBody,
btTypedConstraint* btBulletWorldImporter::createUniversalD6Constraint(class btRigidBody* body0,class btRigidBody* otherBody,
btTransform& localAttachmentFrameRef,
btTransform& localAttachmentOther,
const btVector3& linearMinLimits,
@@ -282,7 +282,7 @@ btTypedConstraint* btBulletFileLoader::createUniversalD6Constraint(class btRig
return 0;
}
btRigidBody* btBulletFileLoader::createRigidBody(bool isDynamic, btScalar mass, const btTransform& startTransform,btCollisionShape* shape)
btRigidBody* btBulletWorldImporter::createRigidBody(bool isDynamic, btScalar mass, const btTransform& startTransform,btCollisionShape* shape)
{
btVector3 localInertia;
@@ -297,52 +297,52 @@ btRigidBody* btBulletFileLoader::createRigidBody(bool isDynamic, btScalar mass,
return body;
}
btCollisionShape* btBulletFileLoader::createPlaneShape(const btVector3& planeNormal,btScalar planeConstant)
btCollisionShape* btBulletWorldImporter::createPlaneShape(const btVector3& planeNormal,btScalar planeConstant)
{
return 0;
}
btCollisionShape* btBulletFileLoader::createBoxShape(const btVector3& halfExtents)
btCollisionShape* btBulletWorldImporter::createBoxShape(const btVector3& halfExtents)
{
return new btBoxShape(halfExtents);
}
btCollisionShape* btBulletFileLoader::createSphereShape(btScalar radius)
btCollisionShape* btBulletWorldImporter::createSphereShape(btScalar radius)
{
return new btSphereShape(radius);
}
btCollisionShape* btBulletFileLoader::createCapsuleShape(btScalar radius, btScalar height)
btCollisionShape* btBulletWorldImporter::createCapsuleShape(btScalar radius, btScalar height)
{
return new btCapsuleShape(radius,height);
}
btCollisionShape* btBulletFileLoader::createCylinderShapeY(btScalar radius,btScalar height)
btCollisionShape* btBulletWorldImporter::createCylinderShapeY(btScalar radius,btScalar height)
{
return new btCylinderShape(btVector3(radius,height,radius));
}
btTriangleMesh* btBulletFileLoader::createTriangleMeshContainer()
btTriangleMesh* btBulletWorldImporter::createTriangleMeshContainer()
{
return 0;
}
btCollisionShape* btBulletFileLoader::createBvhTriangleMeshShape(btTriangleMesh* trimesh)
btCollisionShape* btBulletWorldImporter::createBvhTriangleMeshShape(btTriangleMesh* trimesh)
{
return 0;
}
btCollisionShape* btBulletFileLoader::createConvexTriangleMeshShape(btTriangleMesh* trimesh)
btCollisionShape* btBulletWorldImporter::createConvexTriangleMeshShape(btTriangleMesh* trimesh)
{
return 0;
}
btCollisionShape* btBulletFileLoader::createGimpactShape(btTriangleMesh* trimesh)
btCollisionShape* btBulletWorldImporter::createGimpactShape(btTriangleMesh* trimesh)
{
return 0;
}
btConvexHullShape* btBulletFileLoader::createConvexHullShape()
btConvexHullShape* btBulletWorldImporter::createConvexHullShape()
{
return 0;
}
btCompoundShape* btBulletFileLoader::createCompoundShape()
btCompoundShape* btBulletWorldImporter::createCompoundShape()
{
return 0;
}

View File

@@ -14,8 +14,8 @@ subject to the following restrictions:
*/
#ifndef BULLET_FILE_LOADER_H
#define BULLET_FILE_LOADER_H
#ifndef BULLET_WORLD_IMPORTER_H
#define BULLET_WORLD_IMPORTER_H
#include "LinearMath/btTransform.h"
#include "LinearMath/btVector3.h"
@@ -36,7 +36,7 @@ namespace bParse
};
class btBulletFileLoader
class btBulletWorldImporter
{
btDynamicsWorld* m_dynamicsWorld;
@@ -44,10 +44,11 @@ class btBulletFileLoader
public:
btBulletFileLoader(btDynamicsWorld* world);
btBulletWorldImporter(btDynamicsWorld* world);
bool loadFileFromMemory(char* fileName);
bool loadFileFromMemory(const char* fileName);
///the memoryBuffer might be modified (for example if endian swaps are necessary)
bool loadFileFromMemory(char *memoryBuffer, int len);
bool loadFileFromMemory(bParse::btBulletFile* file);
@@ -93,4 +94,4 @@ public:
};
#endif //BULLET_FILE_LOADER_H
#endif //BULLET_WORLD_IMPORTER_H

View File

@@ -1,9 +1,9 @@
SUBDIRS ( BulletFileLoader )
SUBDIRS ( BulletFileLoader BulletWorldImporter )
# makesdna and HeaderGenerator are for advanced use only
# makesdna can re-generate the binary DNA representing the Bullet serialization structures
# Be very careful modifying any of this, otherwise the .bullet format becomes incompatible
#SUBDIRS ( BulletFileLoader BlenderSerialize HeaderGenerator makesdna)
#SUBDIRS ( BulletFileLoader BulletWorldImporter BlenderSerialize HeaderGenerator makesdna)

View File

@@ -1,148 +1,3 @@
unsigned char sBulletDNAstr64[]= {
83,68,78,65,78,65,77,69,85,0,0,0,109,95,115,105,122,101,0,109,
95,99,97,112,97,99,105,116,121,0,42,109,95,100,97,116,97,0,109,95,
99,111,108,108,105,115,105,111,110,83,104,97,112,101,115,0,109,95,99,111,
108,108,105,115,105,111,110,79,98,106,101,99,116,115,0,109,95,99,111,110,
115,116,114,97,105,110,116,115,0,42,102,105,114,115,116,0,42,108,97,115,
116,0,109,95,102,108,111,97,116,115,91,52,93,0,109,95,101,108,91,51,
93,0,109,95,98,97,115,105,115,0,109,95,111,114,105,103,105,110,0,42,
109,95,117,115,101,114,80,111,105,110,116,101,114,0,109,95,115,104,97,112,
101,84,121,112,101,0,109,95,112,97,100,100,105,110,103,91,52,93,0,109,
95,99,111,108,108,105,115,105,111,110,83,104,97,112,101,68,97,116,97,0,
109,95,108,111,99,97,108,83,99,97,108,105,110,103,0,109,95,105,109,112,
108,105,99,105,116,83,104,97,112,101,68,105,109,101,110,115,105,111,110,115,
0,109,95,99,111,108,108,105,115,105,111,110,77,97,114,103,105,110,0,109,
95,112,97,100,100,105,110,103,0,109,95,112,111,115,0,109,95,114,97,100,
105,117,115,0,109,95,99,111,110,118,101,120,73,110,116,101,114,110,97,108,
83,104,97,112,101,68,97,116,97,0,42,109,95,108,111,99,97,108,80,111,
115,105,116,105,111,110,65,114,114,97,121,80,116,114,0,109,95,108,111,99,
97,108,80,111,115,105,116,105,111,110,65,114,114,97,121,83,105,122,101,0,
109,95,118,97,108,117,101,0,105,110,116,0,42,109,95,118,101,114,116,105,
99,101,115,51,102,0,42,109,95,118,101,114,116,105,99,101,115,51,100,0,
42,109,95,105,110,100,105,99,101,115,51,50,0,42,109,95,105,110,100,105,
99,101,115,49,54,0,109,95,110,117,109,84,114,105,97,110,103,108,101,115,
0,109,95,110,117,109,86,101,114,116,105,99,101,115,0,42,109,95,109,101,
115,104,80,97,114,116,115,80,116,114,0,109,95,115,99,97,108,105,110,103,
0,109,95,110,117,109,77,101,115,104,80,97,114,116,115,0,109,95,109,101,
115,104,73,110,116,101,114,102,97,99,101,0,42,109,95,117,110,115,99,97,
108,101,100,80,111,105,110,116,115,70,108,111,97,116,80,116,114,0,42,109,
95,117,110,115,99,97,108,101,100,80,111,105,110,116,115,68,111,117,98,108,
101,80,116,114,0,109,95,110,117,109,85,110,115,99,97,108,101,100,80,111,
105,110,116,115,0,109,95,112,97,100,100,105,110,103,51,91,52,93,0,42,
109,95,98,114,111,97,100,112,104,97,115,101,72,97,110,100,108,101,0,42,
109,95,99,111,108,108,105,115,105,111,110,83,104,97,112,101,0,42,109,95,
114,111,111,116,67,111,108,108,105,115,105,111,110,83,104,97,112,101,0,42,
109,95,117,115,101,114,79,98,106,101,99,116,80,111,105,110,116,101,114,0,
109,95,119,111,114,108,100,84,114,97,110,115,102,111,114,109,0,109,95,105,
110,116,101,114,112,111,108,97,116,105,111,110,87,111,114,108,100,84,114,97,
110,115,102,111,114,109,0,109,95,105,110,116,101,114,112,111,108,97,116,105,
111,110,76,105,110,101,97,114,86,101,108,111,99,105,116,121,0,109,95,105,
110,116,101,114,112,111,108,97,116,105,111,110,65,110,103,117,108,97,114,86,
101,108,111,99,105,116,121,0,109,95,97,110,105,115,111,116,114,111,112,105,
99,70,114,105,99,116,105,111,110,0,109,95,99,111,110,116,97,99,116,80,
114,111,99,101,115,115,105,110,103,84,104,114,101,115,104,111,108,100,0,109,
95,100,101,97,99,116,105,118,97,116,105,111,110,84,105,109,101,0,109,95,
102,114,105,99,116,105,111,110,0,109,95,114,101,115,116,105,116,117,116,105,
111,110,0,109,95,104,105,116,70,114,97,99,116,105,111,110,0,109,95,99,
99,100,83,119,101,112,116,83,112,104,101,114,101,82,97,100,105,117,115,0,
109,95,99,99,100,77,111,116,105,111,110,84,104,114,101,115,104,111,108,100,
0,109,95,104,97,115,65,110,105,115,111,116,114,111,112,105,99,70,114,105,
99,116,105,111,110,0,109,95,99,111,108,108,105,115,105,111,110,70,108,97,
103,115,0,109,95,105,115,108,97,110,100,84,97,103,49,0,109,95,99,111,
109,112,97,110,105,111,110,73,100,0,109,95,97,99,116,105,118,97,116,105,
111,110,83,116,97,116,101,49,0,109,95,105,110,116,101,114,110,97,108,84,
121,112,101,0,109,95,99,104,101,99,107,67,111,108,108,105,100,101,87,105,
116,104,0,109,95,99,111,108,108,105,115,105,111,110,79,98,106,101,99,116,
68,97,116,97,0,109,95,105,110,118,73,110,101,114,116,105,97,84,101,110,
115,111,114,87,111,114,108,100,0,109,95,108,105,110,101,97,114,86,101,108,
111,99,105,116,121,0,109,95,97,110,103,117,108,97,114,86,101,108,111,99,
105,116,121,0,109,95,97,110,103,117,108,97,114,70,97,99,116,111,114,0,
109,95,108,105,110,101,97,114,70,97,99,116,111,114,0,109,95,103,114,97,
118,105,116,121,0,109,95,103,114,97,118,105,116,121,95,97,99,99,101,108,
101,114,97,116,105,111,110,0,109,95,105,110,118,73,110,101,114,116,105,97,
76,111,99,97,108,0,109,95,116,111,116,97,108,70,111,114,99,101,0,109,
95,116,111,116,97,108,84,111,114,113,117,101,0,109,95,105,110,118,101,114,
115,101,77,97,115,115,0,109,95,108,105,110,101,97,114,68,97,109,112,105,
110,103,0,109,95,97,110,103,117,108,97,114,68,97,109,112,105,110,103,0,
109,95,97,100,100,105,116,105,111,110,97,108,68,97,109,112,105,110,103,70,
97,99,116,111,114,0,109,95,97,100,100,105,116,105,111,110,97,108,76,105,
110,101,97,114,68,97,109,112,105,110,103,84,104,114,101,115,104,111,108,100,
83,113,114,0,109,95,97,100,100,105,116,105,111,110,97,108,65,110,103,117,
108,97,114,68,97,109,112,105,110,103,84,104,114,101,115,104,111,108,100,83,
113,114,0,109,95,97,100,100,105,116,105,111,110,97,108,65,110,103,117,108,
97,114,68,97,109,112,105,110,103,70,97,99,116,111,114,0,109,95,108,105,
110,101,97,114,83,108,101,101,112,105,110,103,84,104,114,101,115,104,111,108,
100,0,109,95,97,110,103,117,108,97,114,83,108,101,101,112,105,110,103,84,
104,114,101,115,104,111,108,100,0,109,95,97,100,100,105,116,105,111,110,97,
108,68,97,109,112,105,110,103,0,0,0,0,84,89,80,69,33,0,0,0,
99,104,97,114,0,117,99,104,97,114,0,115,104,111,114,116,0,117,115,104,
111,114,116,0,105,110,116,0,108,111,110,103,0,117,108,111,110,103,0,102,
108,111,97,116,0,100,111,117,98,108,101,0,118,111,105,100,0,80,111,105,
110,116,101,114,65,114,114,97,121,0,98,116,80,104,121,115,105,99,115,83,
121,115,116,101,109,0,76,105,115,116,66,97,115,101,0,98,116,86,101,99,
116,111,114,51,70,108,111,97,116,68,97,116,97,0,98,116,86,101,99,116,
111,114,51,68,111,117,98,108,101,68,97,116,97,0,98,116,77,97,116,114,
105,120,51,120,51,70,108,111,97,116,68,97,116,97,0,98,116,77,97,116,
114,105,120,51,120,51,68,111,117,98,108,101,68,97,116,97,0,98,116,84,
114,97,110,115,102,111,114,109,70,108,111,97,116,68,97,116,97,0,98,116,
84,114,97,110,115,102,111,114,109,68,111,117,98,108,101,68,97,116,97,0,
98,116,67,111,108,108,105,115,105,111,110,83,104,97,112,101,68,97,116,97,
0,98,116,67,111,110,118,101,120,73,110,116,101,114,110,97,108,83,104,97,
112,101,68,97,116,97,0,98,116,80,111,115,105,116,105,111,110,65,110,100,
82,97,100,105,117,115,0,98,116,77,117,108,116,105,83,112,104,101,114,101,
83,104,97,112,101,68,97,116,97,0,98,116,73,110,116,73,110,100,101,120,
68,97,116,97,0,98,116,83,104,111,114,116,73,110,116,73,110,100,101,120,
68,97,116,97,0,98,116,77,101,115,104,80,97,114,116,68,97,116,97,0,
98,116,83,116,114,105,100,105,110,103,77,101,115,104,73,110,116,101,114,102,
97,99,101,68,97,116,97,0,98,116,84,114,105,97,110,103,108,101,77,101,
115,104,83,104,97,112,101,68,97,116,97,0,98,116,67,111,110,118,101,120,
72,117,108,108,83,104,97,112,101,68,97,116,97,0,98,116,67,111,108,108,
105,115,105,111,110,79,98,106,101,99,116,68,111,117,98,108,101,68,97,116,
97,0,98,116,67,111,108,108,105,115,105,111,110,79,98,106,101,99,116,70,
108,111,97,116,68,97,116,97,0,98,116,82,105,103,105,100,66,111,100,121,
70,108,111,97,116,68,97,116,97,0,98,116,82,105,103,105,100,66,111,100,
121,68,111,117,98,108,101,68,97,116,97,0,84,76,69,78,1,0,1,0,
2,0,2,0,4,0,4,0,4,0,4,0,8,0,0,0,16,0,48,0,
16,0,16,0,32,0,48,0,96,0,64,0,-128,0,16,0,56,0,20,0,
72,0,4,0,4,0,40,0,32,0,56,0,80,0,-40,1,8,1,-16,1,
-88,3,0,0,83,84,82,67,23,0,0,0,10,0,3,0,4,0,0,0,
4,0,1,0,9,0,2,0,11,0,3,0,10,0,3,0,10,0,4,0,
10,0,5,0,12,0,2,0,9,0,6,0,9,0,7,0,13,0,1,0,
7,0,8,0,14,0,1,0,8,0,8,0,15,0,1,0,13,0,9,0,
16,0,1,0,14,0,9,0,17,0,2,0,15,0,10,0,13,0,11,0,
18,0,2,0,16,0,10,0,14,0,11,0,19,0,3,0,9,0,12,0,
4,0,13,0,0,0,14,0,20,0,5,0,19,0,15,0,13,0,16,0,
13,0,17,0,7,0,18,0,4,0,19,0,21,0,2,0,13,0,20,0,
7,0,21,0,22,0,4,0,20,0,22,0,21,0,23,0,4,0,24,0,
0,0,14,0,23,0,1,0,4,0,25,0,24,0,2,0,2,0,26,0,
2,0,25,0,25,0,6,0,13,0,27,0,14,0,28,0,23,0,29,0,
24,0,30,0,4,0,31,0,4,0,32,0,26,0,4,0,25,0,33,0,
13,0,34,0,4,0,35,0,0,0,14,0,27,0,4,0,19,0,15,0,
26,0,36,0,7,0,18,0,0,0,14,0,28,0,5,0,20,0,22,0,
13,0,37,0,14,0,38,0,4,0,39,0,0,0,40,0,29,0,24,0,
9,0,41,0,9,0,42,0,19,0,43,0,9,0,44,0,18,0,45,0,
18,0,46,0,14,0,47,0,14,0,48,0,14,0,49,0,8,0,50,0,
8,0,51,0,8,0,52,0,8,0,53,0,8,0,54,0,8,0,55,0,
8,0,56,0,4,0,57,0,4,0,58,0,4,0,59,0,4,0,60,0,
4,0,61,0,4,0,62,0,4,0,63,0,0,0,14,0,30,0,23,0,
9,0,41,0,9,0,42,0,19,0,43,0,9,0,44,0,17,0,45,0,
17,0,46,0,13,0,47,0,13,0,48,0,13,0,49,0,7,0,50,0,
7,0,51,0,7,0,52,0,7,0,53,0,7,0,54,0,7,0,55,0,
7,0,56,0,4,0,57,0,4,0,58,0,4,0,59,0,4,0,60,0,
4,0,61,0,4,0,62,0,4,0,63,0,31,0,21,0,30,0,64,0,
15,0,65,0,13,0,66,0,13,0,67,0,13,0,68,0,13,0,69,0,
13,0,70,0,13,0,71,0,13,0,72,0,13,0,73,0,13,0,74,0,
7,0,75,0,7,0,76,0,7,0,77,0,7,0,78,0,7,0,79,0,
7,0,80,0,7,0,81,0,7,0,82,0,7,0,83,0,4,0,84,0,
32,0,22,0,29,0,64,0,16,0,65,0,14,0,66,0,14,0,67,0,
14,0,68,0,14,0,69,0,14,0,70,0,14,0,71,0,14,0,72,0,
14,0,73,0,14,0,74,0,8,0,75,0,8,0,76,0,8,0,77,0,
8,0,78,0,8,0,79,0,8,0,80,0,8,0,81,0,8,0,82,0,
8,0,83,0,4,0,84,0,0,0,14,0,};
int sBulletDNAlen64= sizeof(sBulletDNAstr64);
unsigned char sBulletDNAstr[]= {
83,68,78,65,78,65,77,69,85,0,0,0,109,95,115,105,122,101,0,109,
95,99,97,112,97,99,105,116,121,0,42,109,95,100,97,116,97,0,109,95,