Add support to serialize btOptimizedBvh/btQuantizedBvh for a btBvhTriangleMeshShape (using the new btSerializer). This is a new implementation, with full cross-platform support.

So it is different from the in-place method (btQuantizedBvh::serializeInPlace/deserializeInPlace).

It is also possible to serialize/deserialize just the bvh, using the btSerializer (needs some code snippet/helper)
See also http://bulletphysics.org/Bullet/phpBB3/viewtopic.php?f=9&t=4770
This commit is contained in:
erwin.coumans
2010-02-23 09:03:46 +00:00
parent e4c3c2a1a2
commit 41e9115bca
15 changed files with 929 additions and 451 deletions

View File

@@ -72,13 +72,13 @@ ELSE (USE_GLUT)
) )
ENDIF (USE_GLUT) ENDIF (USE_GLUT)
IF (NOT INTERNAL_CREATE_DISTRIBUTABLE_MSVC_PROJECTFILES) IF (NOT INTERNAL_CREATE_DISTRIBUTABLE_MSVC_PROJECTFILES AND NOT INTERNAL_UPDATE_SERIALIZATION_STRUCTURES)
ADD_CUSTOM_COMMAND( ADD_CUSTOM_COMMAND(
TARGET AppSerializeDemo TARGET AppSerializeDemo
POST_BUILD POST_BUILD
COMMAND ${CMAKE_COMMAND} ARGS -E copy_if_different ${BULLET_PHYSICS_SOURCE_DIR}/Demos/SerializeDemo/testFile.bullet ${CMAKE_CURRENT_BINARY_DIR}/testFile.bullet COMMAND ${CMAKE_COMMAND} ARGS -E copy_if_different ${BULLET_PHYSICS_SOURCE_DIR}/Demos/SerializeDemo/testFile.bullet ${CMAKE_CURRENT_BINARY_DIR}/testFile.bullet
) )
ENDIF (NOT INTERNAL_CREATE_DISTRIBUTABLE_MSVC_PROJECTFILES) ENDIF ()
IF (INTERNAL_ADD_POSTFIX_EXECUTABLE_NAMES) IF (INTERNAL_ADD_POSTFIX_EXECUTABLE_NAMES)

View File

@@ -162,6 +162,11 @@ void btBulletFile::parseData()
m_constraints.push_back((bStructHandle*) id); m_constraints.push_back((bStructHandle*) id);
} }
if (dataChunk.code == BT_QUANTIZED_BVH_CODE)
{
m_bvhs.push_back((bStructHandle*) id);
}
if (dataChunk.code == BT_COLLISIONOBJECT_CODE) if (dataChunk.code == BT_COLLISIONOBJECT_CODE)
{ {
m_collisionObjects.push_back((bStructHandle*) id); m_collisionObjects.push_back((bStructHandle*) id);

View File

@@ -25,6 +25,8 @@ subject to the following restrictions:
#define BT_RIGIDBODY_CODE MAKE_ID('R','B','D','Y') #define BT_RIGIDBODY_CODE MAKE_ID('R','B','D','Y')
#define BT_CONSTRAINT_CODE MAKE_ID('C','O','N','S') #define BT_CONSTRAINT_CODE MAKE_ID('C','O','N','S')
#define BT_BOXSHAPE_CODE MAKE_ID('B','O','X','S') #define BT_BOXSHAPE_CODE MAKE_ID('B','O','X','S')
#define BT_QUANTIZED_BVH_CODE MAKE_ID('Q','B','V','H')
#define BT_SHAPE_CODE MAKE_ID('S','H','A','P') #define BT_SHAPE_CODE MAKE_ID('S','H','A','P')
@@ -48,6 +50,8 @@ namespace bParse {
btAlignedObjectArray<bStructHandle*> m_collisionShapes; btAlignedObjectArray<bStructHandle*> m_collisionShapes;
btAlignedObjectArray<bStructHandle*> m_constraints; btAlignedObjectArray<bStructHandle*> m_constraints;
btAlignedObjectArray<bStructHandle*> m_bvhs;
btBulletFile(); btBulletFile();

View File

@@ -282,7 +282,22 @@ btCollisionShape* btBulletWorldImporter::convertCollisionShape( btCollisionShap
btVector3 scaling; scaling.deSerializeFloat(trimesh->m_meshInterface.m_scaling); btVector3 scaling; scaling.deSerializeFloat(trimesh->m_meshInterface.m_scaling);
meshInterface->setScaling(scaling); meshInterface->setScaling(scaling);
btCollisionShape* trimeshShape = createBvhTriangleMeshShape(meshInterface);
btOptimizedBvh* bvh = 0;
if (trimesh->m_quantizedFloatBvh)
{
bvh = createOptimizedBvh();
bvh->deSerializeFloat(*trimesh->m_quantizedFloatBvh);
}
if (trimesh->m_quantizedDoubleBvh)
{
bvh = createOptimizedBvh();
bvh->deSerializeDouble(*trimesh->m_quantizedDoubleBvh);
}
btCollisionShape* trimeshShape = createBvhTriangleMeshShape(meshInterface,bvh);
trimeshShape->setMargin(trimesh->m_collisionMargin); trimeshShape->setMargin(trimesh->m_collisionMargin);
shape = trimeshShape; shape = trimeshShape;
@@ -750,8 +765,20 @@ btTriangleIndexVertexArray* btBulletWorldImporter::createTriangleMeshContainer()
{ {
return new btTriangleIndexVertexArray(); return new btTriangleIndexVertexArray();
} }
btCollisionShape* btBulletWorldImporter::createBvhTriangleMeshShape(btStridingMeshInterface* trimesh)
btOptimizedBvh* btBulletWorldImporter::createOptimizedBvh()
{ {
return new btOptimizedBvh();
}
btCollisionShape* btBulletWorldImporter::createBvhTriangleMeshShape(btStridingMeshInterface* trimesh, btOptimizedBvh* bvh)
{
if (bvh)
{
btBvhTriangleMeshShape* bvhTriMesh = new btBvhTriangleMeshShape(trimesh,bvh->isQuantized(), false);
bvhTriMesh->setOptimizedBvh(bvh);
return bvhTriMesh;
}
return new btBvhTriangleMeshShape(trimesh,true); return new btBvhTriangleMeshShape(trimesh,true);
} }
btCollisionShape* btBulletWorldImporter::createConvexTriangleMeshShape(btStridingMeshInterface* trimesh) btCollisionShape* btBulletWorldImporter::createConvexTriangleMeshShape(btStridingMeshInterface* trimesh)

View File

@@ -36,6 +36,7 @@ class btTriangleIndexVertexArray;
class btStridingMeshInterface; class btStridingMeshInterface;
struct btStridingMeshInterfaceData; struct btStridingMeshInterfaceData;
class btGImpactMeshShape; class btGImpactMeshShape;
class btOptimizedBvh;
namespace bParse namespace bParse
{ {
@@ -114,7 +115,8 @@ public:
virtual btCollisionShape* createCylinderShapeY(btScalar radius,btScalar height); virtual btCollisionShape* createCylinderShapeY(btScalar radius,btScalar height);
virtual btCollisionShape* createCylinderShapeZ(btScalar radius,btScalar height); virtual btCollisionShape* createCylinderShapeZ(btScalar radius,btScalar height);
virtual class btTriangleIndexVertexArray* createTriangleMeshContainer(); virtual class btTriangleIndexVertexArray* createTriangleMeshContainer();
virtual btCollisionShape* createBvhTriangleMeshShape(btStridingMeshInterface* trimesh); virtual btCollisionShape* createBvhTriangleMeshShape(btStridingMeshInterface* trimesh, btOptimizedBvh* bvh);
virtual btOptimizedBvh* createOptimizedBvh();
virtual btCollisionShape* createConvexTriangleMeshShape(btStridingMeshInterface* trimesh); virtual btCollisionShape* createConvexTriangleMeshShape(btStridingMeshInterface* trimesh);
virtual btGImpactMeshShape* createGimpactShape(btStridingMeshInterface* trimesh); virtual btGImpactMeshShape* createGimpactShape(btStridingMeshInterface* trimesh);
virtual class btConvexHullShape* createConvexHullShape(); virtual class btConvexHullShape* createConvexHullShape();

View File

@@ -122,13 +122,14 @@ typedef unsigned long uintptr_t;
#include "LinearMath/btVector3.h" #include "LinearMath/btVector3.h"
#include "LinearMath/btMatrix3x3.h" #include "LinearMath/btMatrix3x3.h"
#include "LinearMath/btTransform.h" #include "LinearMath/btTransform.h"
#include "BulletCollision/BroadphaseCollision/btQuantizedBvh.h"
#include "BulletCollision/CollisionShapes/btCollisionShape.h" #include "BulletCollision/CollisionShapes/btCollisionShape.h"
#include "BulletCollision/CollisionShapes/btStaticPlaneShape.h" #include "BulletCollision/CollisionShapes/btStaticPlaneShape.h"
#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/btStridingMeshInterface.h"
#include "BulletCollision/CollisionShapes/btTriangleMeshShape.h" #include "BulletCollision/CollisionShapes/btBvhTriangleMeshShape.h"
#include "BulletCollision/CollisionShapes/btCompoundShape.h" #include "BulletCollision/CollisionShapes/btCompoundShape.h"
#include "BulletCollision/CollisionShapes/btCylinderShape.h" #include "BulletCollision/CollisionShapes/btCylinderShape.h"
#include "BulletCollision/CollisionShapes/btCapsuleShape.h" #include "BulletCollision/CollisionShapes/btCapsuleShape.h"
@@ -160,12 +161,13 @@ char *includefiles[] = {
"../../../src/LinearMath/btVector3.h", "../../../src/LinearMath/btVector3.h",
"../../../src/LinearMath/btMatrix3x3.h", "../../../src/LinearMath/btMatrix3x3.h",
"../../../src/LinearMath/btTransform.h", "../../../src/LinearMath/btTransform.h",
"../../../src/BulletCollision/BroadphaseCollision/btQuantizedBvh.h",
"../../../src/BulletCollision/CollisionShapes/btCollisionShape.h", "../../../src/BulletCollision/CollisionShapes/btCollisionShape.h",
"../../../src/BulletCollision/CollisionShapes/btStaticPlaneShape.h", "../../../src/BulletCollision/CollisionShapes/btStaticPlaneShape.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/btStridingMeshInterface.h",
"../../../src/BulletCollision/CollisionShapes/btTriangleMeshShape.h", "../../../src/BulletCollision/CollisionShapes/btBvhTriangleMeshShape.h",
"../../../src/BulletCollision/CollisionShapes/btCompoundShape.h", "../../../src/BulletCollision/CollisionShapes/btCompoundShape.h",
"../../../src/BulletCollision/CollisionShapes/btCylinderShape.h", "../../../src/BulletCollision/CollisionShapes/btCylinderShape.h",
"../../../src/BulletCollision/CollisionShapes/btCapsuleShape.h", "../../../src/BulletCollision/CollisionShapes/btCapsuleShape.h",

View File

@@ -17,6 +17,7 @@ subject to the following restrictions:
#include "LinearMath/btAabbUtil2.h" #include "LinearMath/btAabbUtil2.h"
#include "LinearMath/btIDebugDraw.h" #include "LinearMath/btIDebugDraw.h"
#include "LinearMath/btSerializer.h"
#define RAYAABB2 #define RAYAABB2
@@ -1143,6 +1144,231 @@ m_bulletVersion(BT_BULLET_VERSION)
} }
void btQuantizedBvh::deSerializeFloat(struct btQuantizedBvhFloatData& quantizedBvhFloatData)
{
m_bvhAabbMax.deSerializeFloat(quantizedBvhFloatData.m_bvhAabbMax);
m_bvhAabbMin.deSerializeFloat(quantizedBvhFloatData.m_bvhAabbMin);
m_bvhQuantization.deSerializeFloat(quantizedBvhFloatData.m_bvhQuantization);
m_curNodeIndex = quantizedBvhFloatData.m_curNodeIndex;
m_useQuantization = quantizedBvhFloatData.m_useQuantization!=0;
{
int numElem = quantizedBvhFloatData.m_numContiguousLeafNodes;
m_contiguousNodes.resize(numElem);
if (numElem)
{
btOptimizedBvhNodeFloatData* memPtr = quantizedBvhFloatData.m_contiguousNodesPtr;
for (int i=0;i<numElem;i++,memPtr++)
{
m_contiguousNodes[i].m_aabbMaxOrg.deSerializeFloat(memPtr->m_aabbMaxOrg);
m_contiguousNodes[i].m_aabbMinOrg.deSerializeFloat(memPtr->m_aabbMinOrg);
m_contiguousNodes[i].m_escapeIndex = memPtr->m_escapeIndex;
m_contiguousNodes[i].m_subPart = memPtr->m_subPart;
m_contiguousNodes[i].m_triangleIndex = memPtr->m_triangleIndex;
}
}
}
{
int numElem = quantizedBvhFloatData.m_numQuantizedContiguousNodes;
m_quantizedContiguousNodes.resize(numElem);
if (numElem)
{
btQuantizedBvhNodeData* memPtr = quantizedBvhFloatData.m_quantizedContiguousNodesPtr;
for (int i=0;i<numElem;i++,memPtr++)
{
m_quantizedContiguousNodes[i].m_escapeIndexOrTriangleIndex = memPtr->m_escapeIndexOrTriangleIndex;
m_quantizedContiguousNodes[i].m_quantizedAabbMax[0] = memPtr->m_quantizedAabbMax[0];
m_quantizedContiguousNodes[i].m_quantizedAabbMax[1] = memPtr->m_quantizedAabbMax[1];
m_quantizedContiguousNodes[i].m_quantizedAabbMax[2] = memPtr->m_quantizedAabbMax[2];
m_quantizedContiguousNodes[i].m_quantizedAabbMin[0] = memPtr->m_quantizedAabbMin[0];
m_quantizedContiguousNodes[i].m_quantizedAabbMin[1] = memPtr->m_quantizedAabbMin[1];
m_quantizedContiguousNodes[i].m_quantizedAabbMin[2] = memPtr->m_quantizedAabbMin[2];
}
}
}
m_traversalMode = btTraversalMode(quantizedBvhFloatData.m_traversalMode);
{
int numElem = quantizedBvhFloatData.m_numSubtreeHeaders;
m_SubtreeHeaders.resize(numElem);
if (numElem)
{
btBvhSubtreeInfoData* memPtr = quantizedBvhFloatData.m_subTreeInfoPtr;
for (int i=0;i<numElem;i++,memPtr++)
{
m_SubtreeHeaders[i].m_quantizedAabbMax[0] = memPtr->m_quantizedAabbMax[0] ;
m_SubtreeHeaders[i].m_quantizedAabbMax[1] = memPtr->m_quantizedAabbMax[1];
m_SubtreeHeaders[i].m_quantizedAabbMax[2] = memPtr->m_quantizedAabbMax[2];
m_SubtreeHeaders[i].m_quantizedAabbMin[0] = memPtr->m_quantizedAabbMin[0];
m_SubtreeHeaders[i].m_quantizedAabbMin[1] = memPtr->m_quantizedAabbMin[1];
m_SubtreeHeaders[i].m_quantizedAabbMin[2] = memPtr->m_quantizedAabbMin[2];
m_SubtreeHeaders[i].m_rootNodeIndex = memPtr->m_rootNodeIndex;
m_SubtreeHeaders[i].m_subtreeSize = memPtr->m_subtreeSize;
}
}
}
}
void btQuantizedBvh::deSerializeDouble(struct btQuantizedBvhDoubleData& quantizedBvhDoubleData)
{
m_bvhAabbMax.deSerializeDouble(quantizedBvhDoubleData.m_bvhAabbMax);
m_bvhAabbMin.deSerializeDouble(quantizedBvhDoubleData.m_bvhAabbMin);
m_bvhQuantization.deSerializeDouble(quantizedBvhDoubleData.m_bvhQuantization);
m_curNodeIndex = quantizedBvhDoubleData.m_curNodeIndex;
m_useQuantization = quantizedBvhDoubleData.m_useQuantization!=0;
{
int numElem = quantizedBvhDoubleData.m_numContiguousLeafNodes;
m_contiguousNodes.resize(numElem);
if (numElem)
{
btOptimizedBvhNodeDoubleData* memPtr = quantizedBvhDoubleData.m_contiguousNodesPtr;
for (int i=0;i<numElem;i++,memPtr++)
{
m_contiguousNodes[i].m_aabbMaxOrg.deSerializeDouble(memPtr->m_aabbMaxOrg);
m_contiguousNodes[i].m_aabbMinOrg.deSerializeDouble(memPtr->m_aabbMinOrg);
m_contiguousNodes[i].m_escapeIndex = memPtr->m_escapeIndex;
m_contiguousNodes[i].m_subPart = memPtr->m_subPart;
m_contiguousNodes[i].m_triangleIndex = memPtr->m_triangleIndex;
}
}
}
{
int numElem = quantizedBvhDoubleData.m_numQuantizedContiguousNodes;
m_quantizedContiguousNodes.resize(numElem);
if (numElem)
{
btQuantizedBvhNodeData* memPtr = quantizedBvhDoubleData.m_quantizedContiguousNodesPtr;
for (int i=0;i<numElem;i++,memPtr++)
{
m_quantizedContiguousNodes[i].m_escapeIndexOrTriangleIndex = memPtr->m_escapeIndexOrTriangleIndex;
m_quantizedContiguousNodes[i].m_quantizedAabbMax[0] = memPtr->m_quantizedAabbMax[0];
m_quantizedContiguousNodes[i].m_quantizedAabbMax[1] = memPtr->m_quantizedAabbMax[1];
m_quantizedContiguousNodes[i].m_quantizedAabbMax[2] = memPtr->m_quantizedAabbMax[2];
m_quantizedContiguousNodes[i].m_quantizedAabbMin[0] = memPtr->m_quantizedAabbMin[0];
m_quantizedContiguousNodes[i].m_quantizedAabbMin[1] = memPtr->m_quantizedAabbMin[1];
m_quantizedContiguousNodes[i].m_quantizedAabbMin[2] = memPtr->m_quantizedAabbMin[2];
}
}
}
m_traversalMode = btTraversalMode(quantizedBvhDoubleData.m_traversalMode);
{
int numElem = quantizedBvhDoubleData.m_numSubtreeHeaders;
m_SubtreeHeaders.resize(numElem);
if (numElem)
{
btBvhSubtreeInfoData* memPtr = quantizedBvhDoubleData.m_subTreeInfoPtr;
for (int i=0;i<numElem;i++,memPtr++)
{
m_SubtreeHeaders[i].m_quantizedAabbMax[0] = memPtr->m_quantizedAabbMax[0] ;
m_SubtreeHeaders[i].m_quantizedAabbMax[1] = memPtr->m_quantizedAabbMax[1];
m_SubtreeHeaders[i].m_quantizedAabbMax[2] = memPtr->m_quantizedAabbMax[2];
m_SubtreeHeaders[i].m_quantizedAabbMin[0] = memPtr->m_quantizedAabbMin[0];
m_SubtreeHeaders[i].m_quantizedAabbMin[1] = memPtr->m_quantizedAabbMin[1];
m_SubtreeHeaders[i].m_quantizedAabbMin[2] = memPtr->m_quantizedAabbMin[2];
m_SubtreeHeaders[i].m_rootNodeIndex = memPtr->m_rootNodeIndex;
m_SubtreeHeaders[i].m_subtreeSize = memPtr->m_subtreeSize;
}
}
}
}
///fills the dataBuffer and returns the struct name (and 0 on failure)
const char* btQuantizedBvh::serialize(void* dataBuffer, btSerializer* serializer) const
{
btQuantizedBvhData* quantizedData = (btQuantizedBvhData*)dataBuffer;
m_bvhAabbMax.serialize(quantizedData->m_bvhAabbMax);
m_bvhAabbMin.serialize(quantizedData->m_bvhAabbMin);
m_bvhQuantization.serialize(quantizedData->m_bvhQuantization);
quantizedData->m_curNodeIndex = m_curNodeIndex;
quantizedData->m_useQuantization = m_useQuantization;
quantizedData->m_numContiguousLeafNodes = m_contiguousNodes.size();
quantizedData->m_contiguousNodesPtr = (btOptimizedBvhNodeData*) (m_contiguousNodes.size() ? &m_contiguousNodes[0] : 0);
if (quantizedData->m_contiguousNodesPtr)
{
int sz = sizeof(btOptimizedBvhNodeData);
int numElem = m_contiguousNodes.size();
btChunk* chunk = serializer->allocate(sz,numElem);
btOptimizedBvhNodeData* memPtr = (btOptimizedBvhNodeData*)chunk->m_oldPtr;
for (int i=0;i<numElem;i++,memPtr++)
{
m_contiguousNodes[i].m_aabbMaxOrg.serialize(memPtr->m_aabbMaxOrg);
m_contiguousNodes[i].m_aabbMinOrg.serialize(memPtr->m_aabbMinOrg);
memPtr->m_escapeIndex = m_contiguousNodes[i].m_escapeIndex;
memPtr->m_subPart = m_contiguousNodes[i].m_subPart;
memPtr->m_triangleIndex = m_contiguousNodes[i].m_triangleIndex;
}
serializer->finalizeChunk(chunk,"btOptimizedBvhNodeData",BT_ARRAY_CODE,(void*)&m_contiguousNodes[0]);
}
quantizedData->m_numQuantizedContiguousNodes = m_quantizedContiguousNodes.size();
quantizedData->m_quantizedContiguousNodesPtr = (btQuantizedBvhNodeData*) (m_quantizedContiguousNodes.size() ? &m_quantizedContiguousNodes[0] : 0);
if (quantizedData->m_quantizedContiguousNodesPtr)
{
int sz = sizeof(btQuantizedBvhNodeData);
int numElem = m_quantizedContiguousNodes.size();
btChunk* chunk = serializer->allocate(sz,numElem);
btQuantizedBvhNodeData* memPtr = (btQuantizedBvhNodeData*)chunk->m_oldPtr;
for (int i=0;i<numElem;i++,memPtr++)
{
memPtr->m_escapeIndexOrTriangleIndex = m_quantizedContiguousNodes[i].m_escapeIndexOrTriangleIndex;
memPtr->m_quantizedAabbMax[0] = m_quantizedContiguousNodes[i].m_quantizedAabbMax[0];
memPtr->m_quantizedAabbMax[1] = m_quantizedContiguousNodes[i].m_quantizedAabbMax[1];
memPtr->m_quantizedAabbMax[2] = m_quantizedContiguousNodes[i].m_quantizedAabbMax[2];
memPtr->m_quantizedAabbMin[0] = m_quantizedContiguousNodes[i].m_quantizedAabbMin[0];
memPtr->m_quantizedAabbMin[1] = m_quantizedContiguousNodes[i].m_quantizedAabbMin[1];
memPtr->m_quantizedAabbMin[2] = m_quantizedContiguousNodes[i].m_quantizedAabbMin[2];
}
serializer->finalizeChunk(chunk,"btQuantizedBvhNodeData",BT_ARRAY_CODE,(void*)&m_quantizedContiguousNodes[0]);
}
quantizedData->m_traversalMode = int(m_traversalMode);
quantizedData->m_numSubtreeHeaders = m_SubtreeHeaders.size();
quantizedData->m_subTreeInfoPtr = (btBvhSubtreeInfoData*) (m_SubtreeHeaders.size() ? &m_SubtreeHeaders[0] : 0);
if (quantizedData->m_subTreeInfoPtr)
{
int sz = sizeof(btBvhSubtreeInfoData);
int numElem = m_SubtreeHeaders.size();
btChunk* chunk = serializer->allocate(sz,numElem);
btBvhSubtreeInfoData* memPtr = (btBvhSubtreeInfoData*)chunk->m_oldPtr;
for (int i=0;i<numElem;i++,memPtr++)
{
memPtr->m_quantizedAabbMax[0] = m_SubtreeHeaders[i].m_quantizedAabbMax[0];
memPtr->m_quantizedAabbMax[1] = m_SubtreeHeaders[i].m_quantizedAabbMax[1];
memPtr->m_quantizedAabbMax[2] = m_SubtreeHeaders[i].m_quantizedAabbMax[2];
memPtr->m_quantizedAabbMin[0] = m_SubtreeHeaders[i].m_quantizedAabbMin[0];
memPtr->m_quantizedAabbMin[1] = m_SubtreeHeaders[i].m_quantizedAabbMin[1];
memPtr->m_quantizedAabbMin[2] = m_SubtreeHeaders[i].m_quantizedAabbMin[2];
memPtr->m_rootNodeIndex = m_SubtreeHeaders[i].m_rootNodeIndex;
memPtr->m_subtreeSize = m_SubtreeHeaders[i].m_subtreeSize;
}
serializer->finalizeChunk(chunk,"btBvhSubtreeInfoData",BT_ARRAY_CODE,(void*)&m_SubtreeHeaders[0]);
}
return btQuantizedBvhDataName;
}

View File

@@ -16,6 +16,8 @@ subject to the following restrictions:
#ifndef QUANTIZED_BVH_H #ifndef QUANTIZED_BVH_H
#define QUANTIZED_BVH_H #define QUANTIZED_BVH_H
class btSerializer;
//#define DEBUG_CHECK_DEQUANTIZATION 1 //#define DEBUG_CHECK_DEQUANTIZATION 1
#ifdef DEBUG_CHECK_DEQUANTIZATION #ifdef DEBUG_CHECK_DEQUANTIZATION
#ifdef __SPU__ #ifdef __SPU__
@@ -29,6 +31,17 @@ subject to the following restrictions:
#include "LinearMath/btVector3.h" #include "LinearMath/btVector3.h"
#include "LinearMath/btAlignedAllocator.h" #include "LinearMath/btAlignedAllocator.h"
#ifdef BT_USE_DOUBLE_PRECISION
#define btQuantizedBvhData btQuantizedBvhDoubleData
#define btOptimizedBvhNodeData btOptimizedBvhNodeDoubleData
#define btQuantizedBvhDataName "btQuantizedBvhDoubleData"
#else
#define btQuantizedBvhData btQuantizedBvhFloatData
#define btOptimizedBvhNodeData btOptimizedBvhNodeFloatData
#define btQuantizedBvhDataName "btQuantizedBvhFloatData"
#endif
//http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vclang/html/vclrf__m128.asp //http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vclang/html/vclrf__m128.asp
@@ -443,6 +456,7 @@ public:
return m_SubtreeHeaders; return m_SubtreeHeaders;
} }
////////////////////////////////////////////////////////////////////
/////Calculate space needed to store BVH for serialization /////Calculate space needed to store BVH for serialization
unsigned calculateSerializeBufferSize() const; unsigned calculateSerializeBufferSize() const;
@@ -454,6 +468,20 @@ public:
static btQuantizedBvh *deSerializeInPlace(void *i_alignedDataBuffer, unsigned int i_dataBufferSize, bool i_swapEndian); static btQuantizedBvh *deSerializeInPlace(void *i_alignedDataBuffer, unsigned int i_dataBufferSize, bool i_swapEndian);
static unsigned int getAlignmentSerializationPadding(); static unsigned int getAlignmentSerializationPadding();
//////////////////////////////////////////////////////////////////////
virtual int calculateSerializeBufferSizeNew() const;
///fills the dataBuffer and returns the struct name (and 0 on failure)
virtual const char* serialize(void* dataBuffer, btSerializer* serializer) const;
virtual void deSerializeFloat(struct btQuantizedBvhFloatData& quantizedBvhFloatData);
virtual void deSerializeDouble(struct btQuantizedBvhDoubleData& quantizedBvhDoubleData);
////////////////////////////////////////////////////////////////////
SIMD_FORCE_INLINE bool isQuantized() SIMD_FORCE_INLINE bool isQuantized()
{ {
@@ -470,4 +498,82 @@ private:
; ;
struct btBvhSubtreeInfoData
{
int m_rootNodeIndex;
int m_subtreeSize;
unsigned short int m_quantizedAabbMin[3];
unsigned short int m_quantizedAabbMax[3];
};
struct btOptimizedBvhNodeFloatData
{
btVector3FloatData m_aabbMinOrg;
btVector3FloatData m_aabbMaxOrg;
int m_escapeIndex;
int m_subPart;
int m_triangleIndex;
};
struct btOptimizedBvhNodeDoubleData
{
btVector3DoubleData m_aabbMinOrg;
btVector3DoubleData m_aabbMaxOrg;
int m_escapeIndex;
int m_subPart;
int m_triangleIndex;
};
struct btQuantizedBvhNodeData
{
int m_escapeIndexOrTriangleIndex;
unsigned short int m_quantizedAabbMin[3];
unsigned short int m_quantizedAabbMax[3];
};
struct btQuantizedBvhFloatData
{
btVector3FloatData m_bvhAabbMin;
btVector3FloatData m_bvhAabbMax;
btVector3FloatData m_bvhQuantization;
int m_curNodeIndex;
int m_useQuantization;
int m_numContiguousLeafNodes;
int m_numQuantizedContiguousNodes;
btOptimizedBvhNodeFloatData *m_contiguousNodesPtr;
btQuantizedBvhNodeData *m_quantizedContiguousNodesPtr;
int m_traversalMode;
int m_numSubtreeHeaders;
btBvhSubtreeInfoData *m_subTreeInfoPtr;
};
struct btQuantizedBvhDoubleData
{
btVector3DoubleData m_bvhAabbMin;
btVector3DoubleData m_bvhAabbMax;
btVector3DoubleData m_bvhQuantization;
int m_curNodeIndex;
int m_useQuantization;
int m_numContiguousLeafNodes;
int m_numQuantizedContiguousNodes;
btOptimizedBvhNodeDoubleData *m_contiguousNodesPtr;
btQuantizedBvhNodeData *m_quantizedContiguousNodesPtr;
int m_traversalMode;
int m_numSubtreeHeaders;
btBvhSubtreeInfoData *m_subTreeInfoPtr;
};
SIMD_FORCE_INLINE int btQuantizedBvh::calculateSerializeBufferSizeNew() const
{
return sizeof(btQuantizedBvhData);
}
#endif //QUANTIZED_BVH_H #endif //QUANTIZED_BVH_H

View File

@@ -17,6 +17,7 @@ subject to the following restrictions:
#include "BulletCollision/CollisionShapes/btBvhTriangleMeshShape.h" #include "BulletCollision/CollisionShapes/btBvhTriangleMeshShape.h"
#include "BulletCollision/CollisionShapes/btOptimizedBvh.h" #include "BulletCollision/CollisionShapes/btOptimizedBvh.h"
#include "LinearMath/btSerializer.h"
///Bvh Concave triangle mesh is a static-triangle mesh shape with Bounding Volume Hierarchy optimization. ///Bvh Concave triangle mesh is a static-triangle mesh shape with Bounding Volume Hierarchy optimization.
///Uses an interface to access the triangles to allow for sharing graphics/physics triangles. ///Uses an interface to access the triangles to allow for sharing graphics/physics triangles.
@@ -364,3 +365,54 @@ void btBvhTriangleMeshShape::setOptimizedBvh(btOptimizedBvh* bvh, const btVect
} }
///fills the dataBuffer and returns the struct name (and 0 on failure)
const char* btBvhTriangleMeshShape::serialize(void* dataBuffer, btSerializer* serializer) const
{
btTriangleMeshShapeData* trimeshData = (btTriangleMeshShapeData*) dataBuffer;
btCollisionShape::serialize(&trimeshData->m_collisionShapeData,serializer);
m_meshInterface->serialize(&trimeshData->m_meshInterface, serializer);
trimeshData->m_collisionMargin = float(m_collisionMargin);
if (m_bvh)
{
void* chunk = serializer->findPointer(m_bvh);
if (chunk)
{
#ifdef BT_USE_DOUBLE_PRECISION
trimeshData->m_quantizedDoubleBvh = (btQuantizedBvhData*)chunk;
trimeshData->m_quantizedFloatBvh = 0;
#else
trimeshData->m_quantizedFloatBvh = (btQuantizedBvhData*)chunk;
trimeshData->m_quantizedDoubleBvh= 0;
#endif //BT_USE_DOUBLE_PRECISION
} else
{
#ifdef BT_USE_DOUBLE_PRECISION
trimeshData->m_quantizedDoubleBvh = (btQuantizedBvhData*)m_bvh;
trimeshData->m_quantizedFloatBvh = 0;
#else
trimeshData->m_quantizedFloatBvh = (btQuantizedBvhData*)m_bvh;
trimeshData->m_quantizedDoubleBvh= 0;
#endif //BT_USE_DOUBLE_PRECISION
int sz = m_bvh->calculateSerializeBufferSizeNew();
btChunk* chunk = serializer->allocate(sz,1);
const char* structType = m_bvh->serialize(chunk->m_oldPtr, serializer);
serializer->finalizeChunk(chunk,structType,BT_QUANTIZED_BVH_CODE,m_bvh);
}
} else
{
trimeshData->m_quantizedFloatBvh = 0;
trimeshData->m_quantizedDoubleBvh = 0;
}
return "btTriangleMeshShapeData";
}

View File

@@ -83,32 +83,35 @@ public:
return m_useQuantizedAabbCompression; return m_useQuantizedAabbCompression;
} }
//virtual int calculateSerializeBufferSize(); virtual int calculateSerializeBufferSize() const;
///fills the dataBuffer and returns the struct name (and 0 on failure) ///fills the dataBuffer and returns the struct name (and 0 on failure)
//virtual const char* serialize(void* dataBuffer, btSerializer* serializer) const; virtual const char* serialize(void* dataBuffer, btSerializer* serializer) const;
}; };
#if 0 ///do not change those serialization structures, it requires an updated sBulletDNAstr/sBulletDNAstr64
struct btBvhTriangleMeshShapeData struct btTriangleMeshShapeData
{ {
btCollisionShapeData m_collisionShapeData;
btTriangleMeshShapeData m_trimeshData; btStridingMeshInterfaceData m_meshInterface;
//btOptimizedBvhData m_bvh;
char m_useQuantizedAabbCompression; btQuantizedBvhFloatData *m_quantizedFloatBvh;
char m_ownsBvh; btQuantizedBvhDoubleData *m_quantizedDoubleBvh;
float m_collisionMargin;
char m_pad3[4];
}; };
SIMD_FORCE_INLINE int btBvhTriangleMeshShape::calculateSerializeBufferSize()
SIMD_FORCE_INLINE int btBvhTriangleMeshShape::calculateSerializeBufferSize() const
{ {
return sizeof(btBvhTriangleMeshShapeData); return sizeof(btTriangleMeshShapeData);
} }
#endif
#endif //BVH_TRIANGLE_MESH_SHAPE_H #endif //BVH_TRIANGLE_MESH_SHAPE_H

View File

@@ -47,7 +47,7 @@ public:
void updateBvhNodes(btStridingMeshInterface* meshInterface,int firstNode,int endNode,int index); void updateBvhNodes(btStridingMeshInterface* meshInterface,int firstNode,int endNode,int index);
/// Data buffer MUST be 16 byte aligned /// Data buffer MUST be 16 byte aligned
virtual bool serialize(void *o_alignedDataBuffer, unsigned i_dataBufferSize, bool i_swapEndian) const virtual bool serializeInPlace(void *o_alignedDataBuffer, unsigned i_dataBufferSize, bool i_swapEndian) const
{ {
return btQuantizedBvh::serialize(o_alignedDataBuffer,i_dataBufferSize,i_swapEndian); return btQuantizedBvh::serialize(o_alignedDataBuffer,i_dataBufferSize,i_swapEndian);

View File

@@ -209,16 +209,3 @@ btVector3 btTriangleMeshShape::localGetSupportingVertex(const btVector3& vec) co
} }
///fills the dataBuffer and returns the struct name (and 0 on failure)
const char* btTriangleMeshShape::serialize(void* dataBuffer, btSerializer* serializer) const
{
btTriangleMeshShapeData* trimeshData = (btTriangleMeshShapeData*) dataBuffer;
btCollisionShape::serialize(&trimeshData->m_collisionShapeData,serializer);
m_meshInterface->serialize(&trimeshData->m_meshInterface, serializer);
trimeshData->m_collisionMargin = float(m_collisionMargin);
return "btTriangleMeshShapeData";
}

View File

@@ -20,7 +20,6 @@ subject to the following restrictions:
#include "btStridingMeshInterface.h" #include "btStridingMeshInterface.h"
///The btTriangleMeshShape is an internal concave triangle mesh interface. Don't use this class directly, use btBvhTriangleMeshShape instead. ///The btTriangleMeshShape is an internal concave triangle mesh interface. Don't use this class directly, use btBvhTriangleMeshShape instead.
class btTriangleMeshShape : public btConcaveShape class btTriangleMeshShape : public btConcaveShape
{ {
@@ -80,31 +79,10 @@ public:
//debugging //debugging
virtual const char* getName()const {return "TRIANGLEMESH";} virtual const char* getName()const {return "TRIANGLEMESH";}
virtual int calculateSerializeBufferSize() const;
///fills the dataBuffer and returns the struct name (and 0 on failure)
virtual const char* serialize(void* dataBuffer, btSerializer* serializer) const;
}; };
///do not change those serialization structures, it requires an updated sBulletDNAstr/sBulletDNAstr64
struct btTriangleMeshShapeData
{
btCollisionShapeData m_collisionShapeData;
btStridingMeshInterfaceData m_meshInterface;
float m_collisionMargin;
char m_padding[4];
};
SIMD_FORCE_INLINE int btTriangleMeshShape::calculateSerializeBufferSize() const
{
return sizeof(btTriangleMeshShapeData);
}

View File

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

View File

@@ -101,6 +101,7 @@ public:
#define BT_RIGIDBODY_CODE MAKE_ID('R','B','D','Y') #define BT_RIGIDBODY_CODE MAKE_ID('R','B','D','Y')
#define BT_CONSTRAINT_CODE MAKE_ID('C','O','N','S') #define BT_CONSTRAINT_CODE MAKE_ID('C','O','N','S')
#define BT_BOXSHAPE_CODE MAKE_ID('B','O','X','S') #define BT_BOXSHAPE_CODE MAKE_ID('B','O','X','S')
#define BT_QUANTIZED_BVH_CODE MAKE_ID('Q','B','V','H')
#define BT_SHAPE_CODE MAKE_ID('S','H','A','P') #define BT_SHAPE_CODE MAKE_ID('S','H','A','P')
#define BT_ARRAY_CODE MAKE_ID('A','R','A','Y') #define BT_ARRAY_CODE MAKE_ID('A','R','A','Y')