more work on serialization, initial for btTriangleMeshShape/btBvhTriangleMeshShape (only for floating point vertices, integer indices) work-in-progress

This commit is contained in:
erwin.coumans
2010-01-23 20:59:41 +00:00
parent e459145b91
commit 9d7d1c3983
11 changed files with 342 additions and 100 deletions

View File

@@ -29,6 +29,10 @@
#include "bullet_btConvexInternalShapeData.h" #include "bullet_btConvexInternalShapeData.h"
#include "bullet_btPositionAndRadius.h" #include "bullet_btPositionAndRadius.h"
#include "bullet_btMultiSphereShapeData.h" #include "bullet_btMultiSphereShapeData.h"
#include "bullet_btIntIndexData.h"
#include "bullet_btMeshPartData.h"
#include "bullet_btStridingMeshInterfaceData.h"
#include "bullet_btTriangleMeshShapeData.h"
#include "bullet_btConvexHullShapeData.h" #include "bullet_btConvexHullShapeData.h"
#include "bullet_btCollisionObjectData.h" #include "bullet_btCollisionObjectData.h"
#include "bullet_btRigidBodyData.h" #include "bullet_btRigidBodyData.h"

View File

@@ -36,6 +36,10 @@ namespace Bullet {
class btConvexInternalShapeData; class btConvexInternalShapeData;
class btPositionAndRadius; class btPositionAndRadius;
class btMultiSphereShapeData; class btMultiSphereShapeData;
class btIntIndexData;
class btMeshPartData;
class btStridingMeshInterfaceData;
class btTriangleMeshShapeData;
class btConvexHullShapeData; class btConvexHullShapeData;
class btCollisionObjectData; class btCollisionObjectData;
class btRigidBodyData; class btRigidBodyData;

View File

@@ -0,0 +1,39 @@
/* Copyright (C) 2006-2009 Erwin Coumans & Charlie C
*
* This software is provided 'as-is', without any express or implied
* warranty. In no event will the authors be held liable for any damages
* arising from the use of this software.
*
* Permission is granted to anyone to use this software for any purpose,
* including commercial applications, and to alter it and redistribute it
* freely, subject to the following restrictions:
*
* 1. The origin of this software must not be misrepresented; you must not
* claim that you wrote the original software. If you use this software
* in a product, an acknowledgment in the product documentation would be
* appreciated but is not required.
* 2. Altered source versions must be plainly marked as such, and must not be
* misrepresented as being the original software.
* 3. This notice may not be removed or altered from any source distribution.
*/
// Auto generated from makesdna dna.c
#ifndef __BULLET_BTINTINDEXDATA__H__
#define __BULLET_BTINTINDEXDATA__H__
// -------------------------------------------------- //
#include "bullet_Common.h"
namespace Bullet {
// ---------------------------------------------- //
class btIntIndexData
{
public:
int m_value;
};
}
#endif//__BULLET_BTINTINDEXDATA__H__

View File

@@ -0,0 +1,42 @@
/* Copyright (C) 2006-2009 Erwin Coumans & Charlie C
*
* This software is provided 'as-is', without any express or implied
* warranty. In no event will the authors be held liable for any damages
* arising from the use of this software.
*
* Permission is granted to anyone to use this software for any purpose,
* including commercial applications, and to alter it and redistribute it
* freely, subject to the following restrictions:
*
* 1. The origin of this software must not be misrepresented; you must not
* claim that you wrote the original software. If you use this software
* in a product, an acknowledgment in the product documentation would be
* appreciated but is not required.
* 2. Altered source versions must be plainly marked as such, and must not be
* misrepresented as being the original software.
* 3. This notice may not be removed or altered from any source distribution.
*/
// Auto generated from makesdna dna.c
#ifndef __BULLET_BTMESHPARTDATA__H__
#define __BULLET_BTMESHPARTDATA__H__
// -------------------------------------------------- //
#include "bullet_Common.h"
namespace Bullet {
// ---------------------------------------------- //
class btMeshPartData
{
public:
btVector3Data *m_vertices;
btIntIndexData *m_indices;
int m_numTriangles;
int m_numVertices;
};
}
#endif//__BULLET_BTMESHPARTDATA__H__

View File

@@ -0,0 +1,43 @@
/* Copyright (C) 2006-2009 Erwin Coumans & Charlie C
*
* This software is provided 'as-is', without any express or implied
* warranty. In no event will the authors be held liable for any damages
* arising from the use of this software.
*
* Permission is granted to anyone to use this software for any purpose,
* including commercial applications, and to alter it and redistribute it
* freely, subject to the following restrictions:
*
* 1. The origin of this software must not be misrepresented; you must not
* claim that you wrote the original software. If you use this software
* in a product, an acknowledgment in the product documentation would be
* appreciated but is not required.
* 2. Altered source versions must be plainly marked as such, and must not be
* misrepresented as being the original software.
* 3. This notice may not be removed or altered from any source distribution.
*/
// Auto generated from makesdna dna.c
#ifndef __BULLET_BTSTRIDINGMESHINTERFACEDATA__H__
#define __BULLET_BTSTRIDINGMESHINTERFACEDATA__H__
// -------------------------------------------------- //
#include "bullet_Common.h"
#include "bullet_btVector3Data.h"
namespace Bullet {
// ---------------------------------------------- //
class btStridingMeshInterfaceData
{
public:
btMeshPartData *m_meshPartsPtr;
int m_numMeshParts;
btVector3Data m_scaling;
char m_padding[4];
};
}
#endif//__BULLET_BTSTRIDINGMESHINTERFACEDATA__H__

View File

@@ -0,0 +1,43 @@
/* Copyright (C) 2006-2009 Erwin Coumans & Charlie C
*
* This software is provided 'as-is', without any express or implied
* warranty. In no event will the authors be held liable for any damages
* arising from the use of this software.
*
* Permission is granted to anyone to use this software for any purpose,
* including commercial applications, and to alter it and redistribute it
* freely, subject to the following restrictions:
*
* 1. The origin of this software must not be misrepresented; you must not
* claim that you wrote the original software. If you use this software
* in a product, an acknowledgment in the product documentation would be
* appreciated but is not required.
* 2. Altered source versions must be plainly marked as such, and must not be
* misrepresented as being the original software.
* 3. This notice may not be removed or altered from any source distribution.
*/
// Auto generated from makesdna dna.c
#ifndef __BULLET_BTTRIANGLEMESHSHAPEDATA__H__
#define __BULLET_BTTRIANGLEMESHSHAPEDATA__H__
// -------------------------------------------------- //
#include "bullet_Common.h"
#include "bullet_btStridingMeshInterfaceData.h"
namespace Bullet {
// ---------------------------------------------- //
class btTriangleMeshShapeData
{
public:
bInvalidHandle btCollisionShapeData;
bInvalidHandle m_collisionShapeData;
btStridingMeshInterfaceData m_meshInterface;
btScalar m_collisionMargin;
};
}
#endif//__BULLET_BTTRIANGLEMESHSHAPEDATA__H__

View File

@@ -144,6 +144,31 @@ bool btBulletFileLoader::loadFileFromMemory( bParse::btBulletFile* bulletFile2)
} }
break; break;
} }
case TRIANGLE_MESH_SHAPE_PROXYTYPE:
{
btTriangleMeshShapeData* trimesh = (btTriangleMeshShapeData*)shapeData;
btTriangleIndexVertexArray* meshInterface = new btTriangleIndexVertexArray();
for (int i=0;i<trimesh->m_meshInterface.m_numMeshParts;i++)
{
btIndexedMesh meshPart;
meshPart.m_triangleIndexStride = 3*sizeof(int);
meshPart.m_vertexStride = sizeof(btVector3Data);
meshPart.m_numTriangles = trimesh->m_meshInterface.m_meshPartsPtr[i].m_numTriangles;
meshPart.m_numVertices = trimesh->m_meshInterface.m_meshPartsPtr[i].m_numVertices;
meshPart.m_triangleIndexBase = (const unsigned char*)trimesh->m_meshInterface.m_meshPartsPtr[i].m_indices;
meshPart.m_vertexBase = (const unsigned char*)trimesh->m_meshInterface.m_meshPartsPtr[i].m_vertices;
meshInterface->addIndexedMesh(meshPart);
}
btVector3 scaling; scaling.deSerialize(trimesh->m_meshInterface.m_scaling);
meshInterface->setScaling(scaling);
btBvhTriangleMeshShape* trimeshShape = new btBvhTriangleMeshShape(meshInterface,true);
trimeshShape->setMargin(trimesh->m_collisionMargin);
shapeMap.insert(shapeData,trimeshShape);
//printf("trimesh->m_collisionMargin=%f\n",trimesh->m_collisionMargin);
break;
}
default: default:
{ {
printf("unsupported shape type (%d)\n",shapeData->m_shapeType); printf("unsupported shape type (%d)\n",shapeData->m_shapeType);

View File

@@ -126,6 +126,8 @@ typedef unsigned long uintptr_t;
#include "BulletCollision/CollisionShapes/btConvexInternalShape.h" #include "BulletCollision/CollisionShapes/btConvexInternalShape.h"
#include "BulletCollision/CollisionShapes/btMultiSphereShape.h" #include "BulletCollision/CollisionShapes/btMultiSphereShape.h"
#include "BulletCollision/CollisionShapes/btConvexHullShape.h" #include "BulletCollision/CollisionShapes/btConvexHullShape.h"
#include "BulletCollision/CollisionShapes/btStridingMeshInterface.h"
#include "BulletCollision/CollisionShapes/btTriangleMeshShape.h"
#include "BulletCollision/CollisionDispatch/btCollisionObject.h" #include "BulletCollision/CollisionDispatch/btCollisionObject.h"
#include "BulletDynamics/Dynamics/btRigidBody.h" #include "BulletDynamics/Dynamics/btRigidBody.h"
@@ -149,6 +151,8 @@ char *includefiles[] = {
"../../../src/BulletCollision/CollisionShapes/btCollisionShape.h", "../../../src/BulletCollision/CollisionShapes/btCollisionShape.h",
"../../../src/BulletCollision/CollisionShapes/btConvexInternalShape.h", "../../../src/BulletCollision/CollisionShapes/btConvexInternalShape.h",
"../../../src/BulletCollision/CollisionShapes/btMultiSphereShape.h", "../../../src/BulletCollision/CollisionShapes/btMultiSphereShape.h",
"../../../src/BulletCollision/CollisionShapes/btStridingMeshInterface.h",
"../../../src/BulletCollision/CollisionShapes/btTriangleMeshShape.h",
"../../../src/BulletCollision/CollisionShapes/btConvexHullShape.h", "../../../src/BulletCollision/CollisionShapes/btConvexHullShape.h",
"../../../src/BulletCollision/CollisionDispatch/btCollisionObject.h", "../../../src/BulletCollision/CollisionDispatch/btCollisionObject.h",
"../../../src/BulletDynamics/Dynamics/btRigidBody.h", "../../../src/BulletDynamics/Dynamics/btRigidBody.h",

View File

@@ -192,14 +192,14 @@ const char* btStridingMeshInterface::serialize(void* dataBuffer, btSerializer* s
void* uniquePtr = 0; void* uniquePtr = 0;
trimeshData->m_meshPartsPtr = trimeshData->m_numMeshParts ? (btMeshPartData*) uniquePtr : 0; trimeshData->m_meshPartsPtr = 0;
if (trimeshData->m_numMeshParts) if (trimeshData->m_numMeshParts)
{ {
btChunk* chunk = serializer->allocate(sizeof(btMeshPartData),trimeshData->m_numMeshParts); btChunk* chunk = serializer->allocate(sizeof(btMeshPartData),trimeshData->m_numMeshParts);
btMeshPartData* memPtr = (btMeshPartData*)chunk->m_oldPtr; btMeshPartData* memPtr = (btMeshPartData*)chunk->m_oldPtr;
trimeshData->m_meshPartsPtr = memPtr;
int numtotalphysicsverts = 0; int numtotalphysicsverts = 0;
int part,graphicssubparts = getNumSubParts(); int part,graphicssubparts = getNumSubParts();
@@ -215,7 +215,7 @@ const char* btStridingMeshInterface::serialize(void* dataBuffer, btSerializer* s
btVector3 meshScaling = getScaling(); btVector3 meshScaling = getScaling();
///if the number of parts is big, the performance might drop due to the innerloop switch on indextype ///if the number of parts is big, the performance might drop due to the innerloop switch on indextype
for (part=0;part<graphicssubparts ;part++) for (part=0;part<graphicssubparts ;part++,memPtr++)
{ {
getLockedReadOnlyVertexIndexBase(&vertexbase,numverts,type,stride,&indexbase,indexstride,numtriangles,gfxindextype,part); getLockedReadOnlyVertexIndexBase(&vertexbase,numverts,type,stride,&indexbase,indexstride,numtriangles,gfxindextype,part);
memPtr->m_numTriangles = numtriangles;//indices = 3*numtriangles memPtr->m_numTriangles = numtriangles;//indices = 3*numtriangles
@@ -230,17 +230,37 @@ const char* btStridingMeshInterface::serialize(void* dataBuffer, btSerializer* s
{ {
case PHY_INTEGER: case PHY_INTEGER:
{ {
for (gfxindex=0;gfxindex<numtriangles;gfxindex++) int numindices = numtriangles*3;
{ memPtr->m_indices = 0;
unsigned int* tri_indices= (unsigned int*)(indexbase+gfxindex*indexstride); if (numindices)
graphicsbase = (float*)(vertexbase+tri_indices[0]*stride); {
triangle[0].setValue(graphicsbase[0]*meshScaling.getX(),graphicsbase[1]*meshScaling.getY(),graphicsbase[2]*meshScaling.getZ()); btChunk* chunk = serializer->allocate(sizeof(btIntIndexData),numindices);
graphicsbase = (float*)(vertexbase+tri_indices[1]*stride); btIntIndexData* tmpIndices = (btIntIndexData*)chunk->m_oldPtr;
triangle[1].setValue(graphicsbase[0]*meshScaling.getX(),graphicsbase[1]*meshScaling.getY(), graphicsbase[2]*meshScaling.getZ()); memPtr->m_indices = tmpIndices;
graphicsbase = (float*)(vertexbase+tri_indices[2]*stride); for (gfxindex=0;gfxindex<numtriangles;gfxindex++)
triangle[2].setValue(graphicsbase[0]*meshScaling.getX(),graphicsbase[1]*meshScaling.getY(), graphicsbase[2]*meshScaling.getZ()); {
unsigned int* tri_indices= (unsigned int*)(indexbase+gfxindex*indexstride);
} tmpIndices[gfxindex*3].m_value = tri_indices[0];
tmpIndices[gfxindex*3+1].m_value = tri_indices[1];
tmpIndices[gfxindex*3+2].m_value = tri_indices[2];
}
serializer->finalizeChunk(chunk,"btIntIndexData",BT_ARRAY_CODE,(void*)chunk->m_oldPtr);
}
memPtr->m_vertices = 0;
if (numverts)
{
btChunk* chunk = serializer->allocate(sizeof(btVector3Data),numverts);
btVector3Data* tmpVertices = (btVector3Data*) chunk->m_oldPtr;
memPtr->m_vertices = tmpVertices;
for (int i=0;i<numverts;i++)
{
graphicsbase = (float*)(vertexbase+i*stride);
tmpVertices[i].m_floats[0] = graphicsbase[0];
tmpVertices[i].m_floats[1] = graphicsbase[1];
tmpVertices[i].m_floats[2] = graphicsbase[2];
}
serializer->finalizeChunk(chunk,"btVector3Data",BT_ARRAY_CODE,(void*)chunk->m_oldPtr);
}
break; break;
} }
case PHY_SHORT: case PHY_SHORT:
@@ -311,7 +331,7 @@ const char* btStridingMeshInterface::serialize(void* dataBuffer, btSerializer* s
unLockReadOnlyVertexBase(part); unLockReadOnlyVertexBase(part);
} }
serializer->finalizeChunk(chunk,"btMeshPartData",BT_ARRAY_CODE,uniquePtr); serializer->finalizeChunk(chunk,"btMeshPartData",BT_ARRAY_CODE,chunk->m_oldPtr);
} }

View File

@@ -106,7 +106,7 @@ struct btMeshPartData
{ {
btVector3Data *m_vertices; btVector3Data *m_vertices;
btIntIndexData *m_indices; btIntIndexData *m_indices;
int m_numTriangles; int m_numTriangles;//length of m_indices = 3*m_numTriangles
int m_numVertices; int m_numVertices;
}; };
@@ -118,6 +118,8 @@ struct btStridingMeshInterfaceData
btVector3Data m_scaling; btVector3Data m_scaling;
char m_padding[4];
}; };

View File

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