diff options
Diffstat (limited to 'thirdparty/bullet/Bullet3Serialize')
13 files changed, 0 insertions, 22994 deletions
diff --git a/thirdparty/bullet/Bullet3Serialize/Bullet2FileLoader/autogenerated/bullet2.h b/thirdparty/bullet/Bullet3Serialize/Bullet2FileLoader/autogenerated/bullet2.h deleted file mode 100644 index eaa27dfe8f..0000000000 --- a/thirdparty/bullet/Bullet3Serialize/Bullet2FileLoader/autogenerated/bullet2.h +++ /dev/null @@ -1,987 +0,0 @@ -/* Copyright (C) 2011 Erwin Coumans & Charlie C -* -* This software is provided 'as-is', without any express or implied -* warranty. In no event will the authors be held liable for any damages -* arising from the use of this software. -* -* Permission is granted to anyone to use this software for any purpose, -* including commercial applications, and to alter it and redistribute it -* freely, subject to the following restrictions: -* -* 1. The origin of this software must not be misrepresented; you must not -* claim that you wrote the original software. If you use this software -* in a product, an acknowledgment in the product documentation would be -* appreciated but is not required. -* 2. Altered source versions must be plainly marked as such, and must not be -* misrepresented as being the original software. -* 3. This notice may not be removed or altered from any source distribution. -*/ -// Auto generated from Bullet/Extras/HeaderGenerator/bulletGenerate.py -#ifndef __BULLET2_H__ -#define __BULLET2_H__ -namespace Bullet3SerializeBullet2 -{ -// put an empty struct in the case -typedef struct bInvalidHandle -{ - int unused; -} bInvalidHandle; - -class PointerArray; -class b3PhysicsSystem; -class ListBase; -class b3Vector3FloatData; -class b3Vector3DoubleData; -class b3Matrix3x3FloatData; -class b3Matrix3x3DoubleData; -class b3TransformFloatData; -class b3TransformDoubleData; -class b3BvhSubtreeInfoData; -class b3OptimizedBvhNodeFloatData; -class b3OptimizedBvhNodeDoubleData; -class b3QuantizedBvhNodeData; -class b3QuantizedBvhFloatData; -class b3QuantizedBvhDoubleData; -class b3CollisionShapeData; -class b3StaticPlaneShapeData; -class b3ConvexInternalShapeData; -class b3PositionAndRadius; -class b3MultiSphereShapeData; -class b3IntIndexData; -class b3ShortIntIndexData; -class b3ShortIntIndexTripletData; -class b3CharIndexTripletData; -class b3MeshPartData; -class b3StridingMeshInterfaceData; -class b3TriangleMeshShapeData; -class b3ScaledTriangleMeshShapeData; -class b3CompoundShapeChildData; -class b3CompoundShapeData; -class b3CylinderShapeData; -class b3CapsuleShapeData; -class b3TriangleInfoData; -class b3TriangleInfoMapData; -class b3GImpactMeshShapeData; -class b3ConvexHullShapeData; -class b3CollisionObjectDoubleData; -class b3CollisionObjectFloatData; -class b3DynamicsWorldDoubleData; -class b3DynamicsWorldFloatData; -class b3RigidBodyFloatData; -class b3RigidBodyDoubleData; -class b3ConstraintInfo1; -class b3TypedConstraintData; -class b3Point2PointConstraintFloatData; -class b3Point2PointConstraintDoubleData; -class b3HingeConstraintDoubleData; -class b3HingeConstraintFloatData; -class b3ConeTwistConstraintData; -class b3Generic6DofConstraintData; -class b3Generic6DofSpringConstraintData; -class b3SliderConstraintData; -class b3ContactSolverInfoDoubleData; -class b3ContactSolverInfoFloatData; -class SoftBodyMaterialData; -class SoftBodyNodeData; -class SoftBodyLinkData; -class SoftBodyFaceData; -class SoftBodyTetraData; -class SoftRigidAnchorData; -class SoftBodyConfigData; -class SoftBodyPoseData; -class SoftBodyClusterData; -class b3SoftBodyJointData; -class b3SoftBodyFloatData; -// -------------------------------------------------- // -class PointerArray -{ -public: - int m_size; - int m_capacity; - void *m_data; -}; - -// -------------------------------------------------- // -class b3PhysicsSystem -{ -public: - PointerArray m_collisionShapes; - PointerArray m_collisionObjects; - PointerArray m_constraints; -}; - -// -------------------------------------------------- // -class ListBase -{ -public: - void *first; - void *last; -}; - -// -------------------------------------------------- // -class b3Vector3FloatData -{ -public: - float m_floats[4]; -}; - -// -------------------------------------------------- // -class b3Vector3DoubleData -{ -public: - double m_floats[4]; -}; - -// -------------------------------------------------- // -class b3Matrix3x3FloatData -{ -public: - b3Vector3FloatData m_el[3]; -}; - -// -------------------------------------------------- // -class b3Matrix3x3DoubleData -{ -public: - b3Vector3DoubleData m_el[3]; -}; - -// -------------------------------------------------- // -class b3TransformFloatData -{ -public: - b3Matrix3x3FloatData m_basis; - b3Vector3FloatData m_origin; -}; - -// -------------------------------------------------- // -class b3TransformDoubleData -{ -public: - b3Matrix3x3DoubleData m_basis; - b3Vector3DoubleData m_origin; -}; - -// -------------------------------------------------- // -class b3BvhSubtreeInfoData -{ -public: - int m_rootNodeIndex; - int m_subtreeSize; - short m_quantizedAabbMin[3]; - short m_quantizedAabbMax[3]; -}; - -// -------------------------------------------------- // -class b3OptimizedBvhNodeFloatData -{ -public: - b3Vector3FloatData m_aabbMinOrg; - b3Vector3FloatData m_aabbMaxOrg; - int m_escapeIndex; - int m_subPart; - int m_triangleIndex; - char m_pad[4]; -}; - -// -------------------------------------------------- // -class b3OptimizedBvhNodeDoubleData -{ -public: - b3Vector3DoubleData m_aabbMinOrg; - b3Vector3DoubleData m_aabbMaxOrg; - int m_escapeIndex; - int m_subPart; - int m_triangleIndex; - char m_pad[4]; -}; - -// -------------------------------------------------- // -class b3QuantizedBvhNodeData -{ -public: - short m_quantizedAabbMin[3]; - short m_quantizedAabbMax[3]; - int m_escapeIndexOrTriangleIndex; -}; - -// -------------------------------------------------- // -class b3QuantizedBvhFloatData -{ -public: - b3Vector3FloatData m_bvhAabbMin; - b3Vector3FloatData m_bvhAabbMax; - b3Vector3FloatData m_bvhQuantization; - int m_curNodeIndex; - int m_useQuantization; - int m_numContiguousLeafNodes; - int m_numQuantizedContiguousNodes; - b3OptimizedBvhNodeFloatData *m_contiguousNodesPtr; - b3QuantizedBvhNodeData *m_quantizedContiguousNodesPtr; - b3BvhSubtreeInfoData *m_subTreeInfoPtr; - int m_traversalMode; - int m_numSubtreeHeaders; -}; - -// -------------------------------------------------- // -class b3QuantizedBvhDoubleData -{ -public: - b3Vector3DoubleData m_bvhAabbMin; - b3Vector3DoubleData m_bvhAabbMax; - b3Vector3DoubleData m_bvhQuantization; - int m_curNodeIndex; - int m_useQuantization; - int m_numContiguousLeafNodes; - int m_numQuantizedContiguousNodes; - b3OptimizedBvhNodeDoubleData *m_contiguousNodesPtr; - b3QuantizedBvhNodeData *m_quantizedContiguousNodesPtr; - int m_traversalMode; - int m_numSubtreeHeaders; - b3BvhSubtreeInfoData *m_subTreeInfoPtr; -}; - -// -------------------------------------------------- // -class b3CollisionShapeData -{ -public: - char *m_name; - int m_shapeType; - char m_padding[4]; -}; - -// -------------------------------------------------- // -class b3StaticPlaneShapeData -{ -public: - b3CollisionShapeData m_collisionShapeData; - b3Vector3FloatData m_localScaling; - b3Vector3FloatData m_planeNormal; - float m_planeConstant; - char m_pad[4]; -}; - -// -------------------------------------------------- // -class b3ConvexInternalShapeData -{ -public: - b3CollisionShapeData m_collisionShapeData; - b3Vector3FloatData m_localScaling; - b3Vector3FloatData m_implicitShapeDimensions; - float m_collisionMargin; - int m_padding; -}; - -// -------------------------------------------------- // -class b3PositionAndRadius -{ -public: - b3Vector3FloatData m_pos; - float m_radius; -}; - -// -------------------------------------------------- // -class b3MultiSphereShapeData -{ -public: - b3ConvexInternalShapeData m_convexInternalShapeData; - b3PositionAndRadius *m_localPositionArrayPtr; - int m_localPositionArraySize; - char m_padding[4]; -}; - -// -------------------------------------------------- // -class b3IntIndexData -{ -public: - int m_value; -}; - -// -------------------------------------------------- // -class b3ShortIntIndexData -{ -public: - short m_value; - char m_pad[2]; -}; - -// -------------------------------------------------- // -class b3ShortIntIndexTripletData -{ -public: - short m_values[3]; - char m_pad[2]; -}; - -// -------------------------------------------------- // -class b3CharIndexTripletData -{ -public: - char m_values[3]; - char m_pad; -}; - -// -------------------------------------------------- // -class b3MeshPartData -{ -public: - b3Vector3FloatData *m_vertices3f; - b3Vector3DoubleData *m_vertices3d; - b3IntIndexData *m_indices32; - b3ShortIntIndexTripletData *m_3indices16; - b3CharIndexTripletData *m_3indices8; - b3ShortIntIndexData *m_indices16; - int m_numTriangles; - int m_numVertices; -}; - -// -------------------------------------------------- // -class b3StridingMeshInterfaceData -{ -public: - b3MeshPartData *m_meshPartsPtr; - b3Vector3FloatData m_scaling; - int m_numMeshParts; - char m_padding[4]; -}; - -// -------------------------------------------------- // -class b3TriangleMeshShapeData -{ -public: - b3CollisionShapeData m_collisionShapeData; - b3StridingMeshInterfaceData m_meshInterface; - b3QuantizedBvhFloatData *m_quantizedFloatBvh; - b3QuantizedBvhDoubleData *m_quantizedDoubleBvh; - b3TriangleInfoMapData *m_triangleInfoMap; - float m_collisionMargin; - char m_pad3[4]; -}; - -// -------------------------------------------------- // -class b3ScaledTriangleMeshShapeData -{ -public: - b3TriangleMeshShapeData m_trimeshShapeData; - b3Vector3FloatData m_localScaling; -}; - -// -------------------------------------------------- // -class b3CompoundShapeChildData -{ -public: - b3TransformFloatData m_transform; - b3CollisionShapeData *m_childShape; - int m_childShapeType; - float m_childMargin; -}; - -// -------------------------------------------------- // -class b3CompoundShapeData -{ -public: - b3CollisionShapeData m_collisionShapeData; - b3CompoundShapeChildData *m_childShapePtr; - int m_numChildShapes; - float m_collisionMargin; -}; - -// -------------------------------------------------- // -class b3CylinderShapeData -{ -public: - b3ConvexInternalShapeData m_convexInternalShapeData; - int m_upAxis; - char m_padding[4]; -}; - -// -------------------------------------------------- // -class b3CapsuleShapeData -{ -public: - b3ConvexInternalShapeData m_convexInternalShapeData; - int m_upAxis; - char m_padding[4]; -}; - -// -------------------------------------------------- // -class b3TriangleInfoData -{ -public: - int m_flags; - float m_edgeV0V1Angle; - float m_edgeV1V2Angle; - float m_edgeV2V0Angle; -}; - -// -------------------------------------------------- // -class b3TriangleInfoMapData -{ -public: - int *m_hashTablePtr; - int *m_nextPtr; - b3TriangleInfoData *m_valueArrayPtr; - int *m_keyArrayPtr; - float m_convexEpsilon; - float m_planarEpsilon; - float m_equalVertexThreshold; - float m_edgeDistanceThreshold; - float m_zeroAreaThreshold; - int m_nextSize; - int m_hashTableSize; - int m_numValues; - int m_numKeys; - char m_padding[4]; -}; - -// -------------------------------------------------- // -class b3GImpactMeshShapeData -{ -public: - b3CollisionShapeData m_collisionShapeData; - b3StridingMeshInterfaceData m_meshInterface; - b3Vector3FloatData m_localScaling; - float m_collisionMargin; - int m_gimpactSubType; -}; - -// -------------------------------------------------- // -class b3ConvexHullShapeData -{ -public: - b3ConvexInternalShapeData m_convexInternalShapeData; - b3Vector3FloatData *m_unscaledPointsFloatPtr; - b3Vector3DoubleData *m_unscaledPointsDoublePtr; - int m_numUnscaledPoints; - char m_padding3[4]; -}; - -// -------------------------------------------------- // -class b3CollisionObjectDoubleData -{ -public: - void *m_broadphaseHandle; - void *m_collisionShape; - b3CollisionShapeData *m_rootCollisionShape; - char *m_name; - b3TransformDoubleData m_worldTransform; - b3TransformDoubleData m_interpolationWorldTransform; - b3Vector3DoubleData m_interpolationLinearVelocity; - b3Vector3DoubleData m_interpolationAngularVelocity; - b3Vector3DoubleData m_anisotropicFriction; - double m_contactProcessingThreshold; - double m_deactivationTime; - double m_friction; - double m_rollingFriction; - double m_restitution; - double m_hitFraction; - double m_ccdSweptSphereRadius; - double m_ccdMotionThreshold; - int m_hasAnisotropicFriction; - int m_collisionFlags; - int m_islandTag1; - int m_companionId; - int m_activationState1; - int m_internalType; - int m_checkCollideWith; - char m_padding[4]; -}; - -// -------------------------------------------------- // -class b3CollisionObjectFloatData -{ -public: - void *m_broadphaseHandle; - void *m_collisionShape; - b3CollisionShapeData *m_rootCollisionShape; - char *m_name; - b3TransformFloatData m_worldTransform; - b3TransformFloatData m_interpolationWorldTransform; - b3Vector3FloatData m_interpolationLinearVelocity; - b3Vector3FloatData m_interpolationAngularVelocity; - b3Vector3FloatData m_anisotropicFriction; - float m_contactProcessingThreshold; - float m_deactivationTime; - float m_friction; - float m_rollingFriction; - float m_restitution; - float m_hitFraction; - float m_ccdSweptSphereRadius; - float m_ccdMotionThreshold; - int m_hasAnisotropicFriction; - int m_collisionFlags; - int m_islandTag1; - int m_companionId; - int m_activationState1; - int m_internalType; - int m_checkCollideWith; - char m_padding[4]; -}; - -// -------------------------------------------------- // -class b3RigidBodyFloatData -{ -public: - b3CollisionObjectFloatData m_collisionObjectData; - b3Matrix3x3FloatData m_invInertiaTensorWorld; - b3Vector3FloatData m_linearVelocity; - b3Vector3FloatData m_angularVelocity; - b3Vector3FloatData m_angularFactor; - b3Vector3FloatData m_linearFactor; - b3Vector3FloatData m_gravity; - b3Vector3FloatData m_gravity_acceleration; - b3Vector3FloatData m_invInertiaLocal; - b3Vector3FloatData m_totalForce; - b3Vector3FloatData m_totalTorque; - float m_inverseMass; - float m_linearDamping; - float m_angularDamping; - float m_additionalDampingFactor; - float m_additionalLinearDampingThresholdSqr; - float m_additionalAngularDampingThresholdSqr; - float m_additionalAngularDampingFactor; - float m_linearSleepingThreshold; - float m_angularSleepingThreshold; - int m_additionalDamping; -}; - -// -------------------------------------------------- // -class b3RigidBodyDoubleData -{ -public: - b3CollisionObjectDoubleData m_collisionObjectData; - b3Matrix3x3DoubleData m_invInertiaTensorWorld; - b3Vector3DoubleData m_linearVelocity; - b3Vector3DoubleData m_angularVelocity; - b3Vector3DoubleData m_angularFactor; - b3Vector3DoubleData m_linearFactor; - b3Vector3DoubleData m_gravity; - b3Vector3DoubleData m_gravity_acceleration; - b3Vector3DoubleData m_invInertiaLocal; - b3Vector3DoubleData m_totalForce; - b3Vector3DoubleData m_totalTorque; - double m_inverseMass; - double m_linearDamping; - double m_angularDamping; - double m_additionalDampingFactor; - double m_additionalLinearDampingThresholdSqr; - double m_additionalAngularDampingThresholdSqr; - double m_additionalAngularDampingFactor; - double m_linearSleepingThreshold; - double m_angularSleepingThreshold; - int m_additionalDamping; - char m_padding[4]; -}; - -// -------------------------------------------------- // -class b3ConstraintInfo1 -{ -public: - int m_numConstraintRows; - int nub; -}; - -// -------------------------------------------------- // -class b3TypedConstraintData -{ -public: - bInvalidHandle *m_rbA; - bInvalidHandle *m_rbB; - char *m_name; - int m_objectType; - int m_userConstraintType; - int m_userConstraintId; - int m_needsFeedback; - float m_appliedImpulse; - float m_dbgDrawSize; - int m_disableCollisionsBetweenLinkedBodies; - int m_overrideNumSolverIterations; - float m_breakingImpulseThreshold; - int m_isEnabled; -}; - -// -------------------------------------------------- // -class b3Point2PointConstraintFloatData -{ -public: - b3TypedConstraintData m_typeConstraintData; - b3Vector3FloatData m_pivotInA; - b3Vector3FloatData m_pivotInB; -}; - -// -------------------------------------------------- // -class b3Point2PointConstraintDoubleData -{ -public: - b3TypedConstraintData m_typeConstraintData; - b3Vector3DoubleData m_pivotInA; - b3Vector3DoubleData m_pivotInB; -}; - -// -------------------------------------------------- // -class b3HingeConstraintDoubleData -{ -public: - b3TypedConstraintData m_typeConstraintData; - b3TransformDoubleData m_rbAFrame; - b3TransformDoubleData m_rbBFrame; - int m_useReferenceFrameA; - int m_angularOnly; - int m_enableAngularMotor; - float m_motorTargetVelocity; - float m_maxMotorImpulse; - float m_lowerLimit; - float m_upperLimit; - float m_limitSoftness; - float m_biasFactor; - float m_relaxationFactor; -}; - -// -------------------------------------------------- // -class b3HingeConstraintFloatData -{ -public: - b3TypedConstraintData m_typeConstraintData; - b3TransformFloatData m_rbAFrame; - b3TransformFloatData m_rbBFrame; - int m_useReferenceFrameA; - int m_angularOnly; - int m_enableAngularMotor; - float m_motorTargetVelocity; - float m_maxMotorImpulse; - float m_lowerLimit; - float m_upperLimit; - float m_limitSoftness; - float m_biasFactor; - float m_relaxationFactor; -}; - -// -------------------------------------------------- // -class b3ConeTwistConstraintData -{ -public: - b3TypedConstraintData m_typeConstraintData; - b3TransformFloatData m_rbAFrame; - b3TransformFloatData m_rbBFrame; - float m_swingSpan1; - float m_swingSpan2; - float m_twistSpan; - float m_limitSoftness; - float m_biasFactor; - float m_relaxationFactor; - float m_damping; - char m_pad[4]; -}; - -// -------------------------------------------------- // -class b3Generic6DofConstraintData -{ -public: - b3TypedConstraintData m_typeConstraintData; - b3TransformFloatData m_rbAFrame; - b3TransformFloatData m_rbBFrame; - b3Vector3FloatData m_linearUpperLimit; - b3Vector3FloatData m_linearLowerLimit; - b3Vector3FloatData m_angularUpperLimit; - b3Vector3FloatData m_angularLowerLimit; - int m_useLinearReferenceFrameA; - int m_useOffsetForConstraintFrame; -}; - -// -------------------------------------------------- // -class b3Generic6DofSpringConstraintData -{ -public: - b3Generic6DofConstraintData m_6dofData; - int m_springEnabled[6]; - float m_equilibriumPoint[6]; - float m_springStiffness[6]; - float m_springDamping[6]; -}; - -// -------------------------------------------------- // -class b3SliderConstraintData -{ -public: - b3TypedConstraintData m_typeConstraintData; - b3TransformFloatData m_rbAFrame; - b3TransformFloatData m_rbBFrame; - float m_linearUpperLimit; - float m_linearLowerLimit; - float m_angularUpperLimit; - float m_angularLowerLimit; - int m_useLinearReferenceFrameA; - int m_useOffsetForConstraintFrame; -}; - -// -------------------------------------------------- // -class b3ContactSolverInfoDoubleData -{ -public: - double m_tau; - double m_damping; - double m_friction; - double m_timeStep; - double m_restitution; - double m_maxErrorReduction; - double m_sor; - double m_erp; - double m_erp2; - double m_globalCfm; - double m_splitImpulsePenetrationThreshold; - double m_splitImpulseTurnErp; - double m_linearSlop; - double m_warmstartingFactor; - double m_maxGyroscopicForce; - double m_singleAxisRollingFrictionThreshold; - int m_numIterations; - int m_solverMode; - int m_restingContactRestitutionThreshold; - int m_minimumSolverBatchSize; - int m_splitImpulse; - char m_padding[4]; -}; - -// -------------------------------------------------- // -class b3ContactSolverInfoFloatData -{ -public: - float m_tau; - float m_damping; - float m_friction; - float m_timeStep; - float m_restitution; - float m_maxErrorReduction; - float m_sor; - float m_erp; - float m_erp2; - float m_globalCfm; - float m_splitImpulsePenetrationThreshold; - float m_splitImpulseTurnErp; - float m_linearSlop; - float m_warmstartingFactor; - float m_maxGyroscopicForce; - float m_singleAxisRollingFrictionThreshold; - int m_numIterations; - int m_solverMode; - int m_restingContactRestitutionThreshold; - int m_minimumSolverBatchSize; - int m_splitImpulse; - char m_padding[4]; -}; - -// -------------------------------------------------- // -class b3DynamicsWorldDoubleData -{ -public: - b3ContactSolverInfoDoubleData m_solverInfo; - b3Vector3DoubleData m_gravity; -}; - -// -------------------------------------------------- // -class b3DynamicsWorldFloatData -{ -public: - b3ContactSolverInfoFloatData m_solverInfo; - b3Vector3FloatData m_gravity; -}; - -// -------------------------------------------------- // -class SoftBodyMaterialData -{ -public: - float m_linearStiffness; - float m_angularStiffness; - float m_volumeStiffness; - int m_flags; -}; - -// -------------------------------------------------- // -class SoftBodyNodeData -{ -public: - SoftBodyMaterialData *m_material; - b3Vector3FloatData m_position; - b3Vector3FloatData m_previousPosition; - b3Vector3FloatData m_velocity; - b3Vector3FloatData m_accumulatedForce; - b3Vector3FloatData m_normal; - float m_inverseMass; - float m_area; - int m_attach; - int m_pad; -}; - -// -------------------------------------------------- // -class SoftBodyLinkData -{ -public: - SoftBodyMaterialData *m_material; - int m_nodeIndices[2]; - float m_restLength; - int m_bbending; -}; - -// -------------------------------------------------- // -class SoftBodyFaceData -{ -public: - b3Vector3FloatData m_normal; - SoftBodyMaterialData *m_material; - int m_nodeIndices[3]; - float m_restArea; -}; - -// -------------------------------------------------- // -class SoftBodyTetraData -{ -public: - b3Vector3FloatData m_c0[4]; - SoftBodyMaterialData *m_material; - int m_nodeIndices[4]; - float m_restVolume; - float m_c1; - float m_c2; - int m_pad; -}; - -// -------------------------------------------------- // -class SoftRigidAnchorData -{ -public: - b3Matrix3x3FloatData m_c0; - b3Vector3FloatData m_c1; - b3Vector3FloatData m_localFrame; - bInvalidHandle *m_rigidBody; - int m_nodeIndex; - float m_c2; -}; - -// -------------------------------------------------- // -class SoftBodyConfigData -{ -public: - int m_aeroModel; - float m_baumgarte; - float m_damping; - float m_drag; - float m_lift; - float m_pressure; - float m_volume; - float m_dynamicFriction; - float m_poseMatch; - float m_rigidContactHardness; - float m_kineticContactHardness; - float m_softContactHardness; - float m_anchorHardness; - float m_softRigidClusterHardness; - float m_softKineticClusterHardness; - float m_softSoftClusterHardness; - float m_softRigidClusterImpulseSplit; - float m_softKineticClusterImpulseSplit; - float m_softSoftClusterImpulseSplit; - float m_maxVolume; - float m_timeScale; - int m_velocityIterations; - int m_positionIterations; - int m_driftIterations; - int m_clusterIterations; - int m_collisionFlags; -}; - -// -------------------------------------------------- // -class SoftBodyPoseData -{ -public: - b3Matrix3x3FloatData m_rot; - b3Matrix3x3FloatData m_scale; - b3Matrix3x3FloatData m_aqq; - b3Vector3FloatData m_com; - b3Vector3FloatData *m_positions; - float *m_weights; - int m_numPositions; - int m_numWeigts; - int m_bvolume; - int m_bframe; - float m_restVolume; - int m_pad; -}; - -// -------------------------------------------------- // -class SoftBodyClusterData -{ -public: - b3TransformFloatData m_framexform; - b3Matrix3x3FloatData m_locii; - b3Matrix3x3FloatData m_invwi; - b3Vector3FloatData m_com; - b3Vector3FloatData m_vimpulses[2]; - b3Vector3FloatData m_dimpulses[2]; - b3Vector3FloatData m_lv; - b3Vector3FloatData m_av; - b3Vector3FloatData *m_framerefs; - int *m_nodeIndices; - float *m_masses; - int m_numFrameRefs; - int m_numNodes; - int m_numMasses; - float m_idmass; - float m_imass; - int m_nvimpulses; - int m_ndimpulses; - float m_ndamping; - float m_ldamping; - float m_adamping; - float m_matching; - float m_maxSelfCollisionImpulse; - float m_selfCollisionImpulseFactor; - int m_containsAnchor; - int m_collide; - int m_clusterIndex; -}; - -// -------------------------------------------------- // -class b3SoftBodyJointData -{ -public: - void *m_bodyA; - void *m_bodyB; - b3Vector3FloatData m_refs[2]; - float m_cfm; - float m_erp; - float m_split; - int m_delete; - b3Vector3FloatData m_relPosition[2]; - int m_bodyAtype; - int m_bodyBtype; - int m_jointType; - int m_pad; -}; - -// -------------------------------------------------- // -class b3SoftBodyFloatData -{ -public: - b3CollisionObjectFloatData m_collisionObjectData; - SoftBodyPoseData *m_pose; - SoftBodyMaterialData **m_materials; - SoftBodyNodeData *m_nodes; - SoftBodyLinkData *m_links; - SoftBodyFaceData *m_faces; - SoftBodyTetraData *m_tetrahedra; - SoftRigidAnchorData *m_anchors; - SoftBodyClusterData *m_clusters; - b3SoftBodyJointData *m_joints; - int m_numMaterials; - int m_numNodes; - int m_numLinks; - int m_numFaces; - int m_numTetrahedra; - int m_numAnchors; - int m_numClusters; - int m_numJoints; - SoftBodyConfigData m_config; -}; - -} // namespace Bullet3SerializeBullet2 -#endif //__BULLET2_H__
\ No newline at end of file diff --git a/thirdparty/bullet/Bullet3Serialize/Bullet2FileLoader/b3BulletFile.cpp b/thirdparty/bullet/Bullet3Serialize/Bullet2FileLoader/b3BulletFile.cpp deleted file mode 100644 index d2a7163670..0000000000 --- a/thirdparty/bullet/Bullet3Serialize/Bullet2FileLoader/b3BulletFile.cpp +++ /dev/null @@ -1,400 +0,0 @@ -/* -bParse -Copyright (c) 2006-2010 Erwin Coumans http://gamekit.googlecode.com - -This software is provided 'as-is', without any express or implied warranty. -In no event will the authors be held liable for any damages arising from the use of this software. -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it freely, -subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. -*/ - -#include "b3BulletFile.h" -#include "b3Defines.h" -#include "b3DNA.h" - -#if !defined(__CELLOS_LV2__) && !defined(__MWERKS__) -#include <memory.h> -#endif -#include <string.h> - -// 32 && 64 bit versions -#ifdef B3_INTERNAL_UPDATE_SERIALIZATION_STRUCTURES -#ifdef _WIN64 -extern char b3s_bulletDNAstr64[]; -extern int b3s_bulletDNAlen64; -#else -extern char b3s_bulletDNAstr[]; -extern int b3s_bulletDNAlen; -#endif //_WIN64 -#else //B3_INTERNAL_UPDATE_SERIALIZATION_STRUCTURES - -extern char b3s_bulletDNAstr64[]; -extern int b3s_bulletDNAlen64; -extern char b3s_bulletDNAstr[]; -extern int b3s_bulletDNAlen; - -#endif //B3_INTERNAL_UPDATE_SERIALIZATION_STRUCTURES - -using namespace bParse; - -b3BulletFile::b3BulletFile() - : bFile("", "BULLET ") -{ - mMemoryDNA = new bDNA(); //this memory gets released in the bFile::~bFile destructor,@todo not consistent with the rule 'who allocates it, has to deallocate it" - - m_DnaCopy = 0; - -#ifdef B3_INTERNAL_UPDATE_SERIALIZATION_STRUCTURES -#ifdef _WIN64 - m_DnaCopy = (char*)b3AlignedAlloc(b3s_bulletDNAlen64, 16); - memcpy(m_DnaCopy, b3s_bulletDNAstr64, b3s_bulletDNAlen64); - mMemoryDNA->init(m_DnaCopy, b3s_bulletDNAlen64); -#else //_WIN64 - m_DnaCopy = (char*)b3AlignedAlloc(b3s_bulletDNAlen, 16); - memcpy(m_DnaCopy, b3s_bulletDNAstr, b3s_bulletDNAlen); - mMemoryDNA->init(m_DnaCopy, b3s_bulletDNAlen); -#endif //_WIN64 -#else //B3_INTERNAL_UPDATE_SERIALIZATION_STRUCTURES - if (VOID_IS_8) - { - m_DnaCopy = (char*)b3AlignedAlloc(b3s_bulletDNAlen64, 16); - memcpy(m_DnaCopy, b3s_bulletDNAstr64, b3s_bulletDNAlen64); - mMemoryDNA->init(m_DnaCopy, b3s_bulletDNAlen64); - } - else - { - m_DnaCopy = (char*)b3AlignedAlloc(b3s_bulletDNAlen, 16); - memcpy(m_DnaCopy, b3s_bulletDNAstr, b3s_bulletDNAlen); - mMemoryDNA->init(m_DnaCopy, b3s_bulletDNAlen); - } -#endif //B3_INTERNAL_UPDATE_SERIALIZATION_STRUCTURES -} - -b3BulletFile::b3BulletFile(const char* fileName) - : bFile(fileName, "BULLET ") -{ - m_DnaCopy = 0; -} - -b3BulletFile::b3BulletFile(char* memoryBuffer, int len) - : bFile(memoryBuffer, len, "BULLET ") -{ - m_DnaCopy = 0; -} - -b3BulletFile::~b3BulletFile() -{ - if (m_DnaCopy) - b3AlignedFree(m_DnaCopy); - - while (m_dataBlocks.size()) - { - char* dataBlock = m_dataBlocks[m_dataBlocks.size() - 1]; - delete[] dataBlock; - m_dataBlocks.pop_back(); - } -} - -// ----------------------------------------------------- // -void b3BulletFile::parseData() -{ - // printf ("Building datablocks"); - // printf ("Chunk size = %d",CHUNK_HEADER_LEN); - // printf ("File chunk size = %d",ChunkUtils::getOffset(mFlags)); - - const bool brokenDNA = (mFlags & FD_BROKEN_DNA) != 0; - - //const bool swap = (mFlags&FD_ENDIAN_SWAP)!=0; - - mDataStart = 12; - - char* dataPtr = mFileBuffer + mDataStart; - - bChunkInd dataChunk; - dataChunk.code = 0; - - //dataPtr += ChunkUtils::getNextBlock(&dataChunk, dataPtr, mFlags); - int seek = getNextBlock(&dataChunk, dataPtr, mFlags); - - if (mFlags & FD_ENDIAN_SWAP) - swapLen(dataPtr); - - //dataPtr += ChunkUtils::getOffset(mFlags); - char* dataPtrHead = 0; - - while (dataChunk.code != B3_DNA1) - { - if (!brokenDNA || (dataChunk.code != B3_QUANTIZED_BVH_CODE)) - { - // one behind - if (dataChunk.code == B3_SDNA) break; - //if (dataChunk.code == DNA1) break; - - // same as (BHEAD+DATA dependency) - dataPtrHead = dataPtr + ChunkUtils::getOffset(mFlags); - if (dataChunk.dna_nr >= 0) - { - char* id = readStruct(dataPtrHead, dataChunk); - - // lookup maps - if (id) - { - m_chunkPtrPtrMap.insert(dataChunk.oldPtr, dataChunk); - mLibPointers.insert(dataChunk.oldPtr, (bStructHandle*)id); - - m_chunks.push_back(dataChunk); - // block it - //bListBasePtr *listID = mMain->getListBasePtr(dataChunk.code); - //if (listID) - // listID->push_back((bStructHandle*)id); - } - - if (dataChunk.code == B3_SOFTBODY_CODE) - { - m_softBodies.push_back((bStructHandle*)id); - } - - if (dataChunk.code == B3_RIGIDBODY_CODE) - { - m_rigidBodies.push_back((bStructHandle*)id); - } - - if (dataChunk.code == B3_DYNAMICSWORLD_CODE) - { - m_dynamicsWorldInfo.push_back((bStructHandle*)id); - } - - if (dataChunk.code == B3_CONSTRAINT_CODE) - { - m_constraints.push_back((bStructHandle*)id); - } - - if (dataChunk.code == B3_QUANTIZED_BVH_CODE) - { - m_bvhs.push_back((bStructHandle*)id); - } - - if (dataChunk.code == B3_TRIANLGE_INFO_MAP) - { - m_triangleInfoMaps.push_back((bStructHandle*)id); - } - - if (dataChunk.code == B3_COLLISIONOBJECT_CODE) - { - m_collisionObjects.push_back((bStructHandle*)id); - } - - if (dataChunk.code == B3_SHAPE_CODE) - { - m_collisionShapes.push_back((bStructHandle*)id); - } - - // if (dataChunk.code == GLOB) - // { - // m_glob = (bStructHandle*) id; - // } - } - else - { - //printf("unknown chunk\n"); - - mLibPointers.insert(dataChunk.oldPtr, (bStructHandle*)dataPtrHead); - } - } - else - { - printf("skipping B3_QUANTIZED_BVH_CODE due to broken DNA\n"); - } - - dataPtr += seek; - - seek = getNextBlock(&dataChunk, dataPtr, mFlags); - if (mFlags & FD_ENDIAN_SWAP) - swapLen(dataPtr); - - if (seek < 0) - break; - } -} - -void b3BulletFile::addDataBlock(char* dataBlock) -{ - m_dataBlocks.push_back(dataBlock); -} - -void b3BulletFile::writeDNA(FILE* fp) -{ - bChunkInd dataChunk; - dataChunk.code = B3_DNA1; - dataChunk.dna_nr = 0; - dataChunk.nr = 1; -#ifdef B3_INTERNAL_UPDATE_SERIALIZATION_STRUCTURES - if (VOID_IS_8) - { -#ifdef _WIN64 - dataChunk.len = b3s_bulletDNAlen64; - dataChunk.oldPtr = b3s_bulletDNAstr64; - fwrite(&dataChunk, sizeof(bChunkInd), 1, fp); - fwrite(b3s_bulletDNAstr64, b3s_bulletDNAlen64, 1, fp); -#else - b3Assert(0); -#endif - } - else - { -#ifndef _WIN64 - dataChunk.len = b3s_bulletDNAlen; - dataChunk.oldPtr = b3s_bulletDNAstr; - fwrite(&dataChunk, sizeof(bChunkInd), 1, fp); - fwrite(b3s_bulletDNAstr, b3s_bulletDNAlen, 1, fp); -#else //_WIN64 - b3Assert(0); -#endif //_WIN64 - } -#else //B3_INTERNAL_UPDATE_SERIALIZATION_STRUCTURES - if (VOID_IS_8) - { - dataChunk.len = b3s_bulletDNAlen64; - dataChunk.oldPtr = b3s_bulletDNAstr64; - fwrite(&dataChunk, sizeof(bChunkInd), 1, fp); - fwrite(b3s_bulletDNAstr64, b3s_bulletDNAlen64, 1, fp); - } - else - { - dataChunk.len = b3s_bulletDNAlen; - dataChunk.oldPtr = b3s_bulletDNAstr; - fwrite(&dataChunk, sizeof(bChunkInd), 1, fp); - fwrite(b3s_bulletDNAstr, b3s_bulletDNAlen, 1, fp); - } -#endif //B3_INTERNAL_UPDATE_SERIALIZATION_STRUCTURES -} - -void b3BulletFile::parse(int verboseMode) -{ -#ifdef B3_INTERNAL_UPDATE_SERIALIZATION_STRUCTURES - if (VOID_IS_8) - { -#ifdef _WIN64 - - if (m_DnaCopy) - delete m_DnaCopy; - m_DnaCopy = (char*)b3AlignedAlloc(b3s_bulletDNAlen64, 16); - memcpy(m_DnaCopy, b3s_bulletDNAstr64, b3s_bulletDNAlen64); - parseInternal(verboseMode, (char*)b3s_bulletDNAstr64, b3s_bulletDNAlen64); -#else - b3Assert(0); -#endif - } - else - { -#ifndef _WIN64 - - if (m_DnaCopy) - delete m_DnaCopy; - m_DnaCopy = (char*)b3AlignedAlloc(b3s_bulletDNAlen, 16); - memcpy(m_DnaCopy, b3s_bulletDNAstr, b3s_bulletDNAlen); - parseInternal(verboseMode, m_DnaCopy, b3s_bulletDNAlen); -#else - b3Assert(0); -#endif - } -#else //B3_INTERNAL_UPDATE_SERIALIZATION_STRUCTURES - if (VOID_IS_8) - { - if (m_DnaCopy) - delete m_DnaCopy; - m_DnaCopy = (char*)b3AlignedAlloc(b3s_bulletDNAlen64, 16); - memcpy(m_DnaCopy, b3s_bulletDNAstr64, b3s_bulletDNAlen64); - parseInternal(verboseMode, m_DnaCopy, b3s_bulletDNAlen64); - } - else - { - if (m_DnaCopy) - delete m_DnaCopy; - m_DnaCopy = (char*)b3AlignedAlloc(b3s_bulletDNAlen, 16); - memcpy(m_DnaCopy, b3s_bulletDNAstr, b3s_bulletDNAlen); - parseInternal(verboseMode, m_DnaCopy, b3s_bulletDNAlen); - } -#endif //B3_INTERNAL_UPDATE_SERIALIZATION_STRUCTURES - - //the parsing will convert to cpu endian - mFlags &= ~FD_ENDIAN_SWAP; - - int littleEndian = 1; - littleEndian = ((char*)&littleEndian)[0]; - - mFileBuffer[8] = littleEndian ? 'v' : 'V'; -} - -// experimental -int b3BulletFile::write(const char* fileName, bool fixupPointers) -{ - FILE* fp = fopen(fileName, "wb"); - if (fp) - { - char header[B3_SIZEOFBLENDERHEADER]; - memcpy(header, m_headerString, 7); - int endian = 1; - endian = ((char*)&endian)[0]; - - if (endian) - { - header[7] = '_'; - } - else - { - header[7] = '-'; - } - if (VOID_IS_8) - { - header[8] = 'V'; - } - else - { - header[8] = 'v'; - } - - header[9] = '2'; - header[10] = '7'; - header[11] = '5'; - - fwrite(header, B3_SIZEOFBLENDERHEADER, 1, fp); - - writeChunks(fp, fixupPointers); - - writeDNA(fp); - - fclose(fp); - } - else - { - printf("Error: cannot open file %s for writing\n", fileName); - return 0; - } - return 1; -} - -void b3BulletFile::addStruct(const char* structType, void* data, int len, void* oldPtr, int code) -{ - bParse::bChunkInd dataChunk; - dataChunk.code = code; - dataChunk.nr = 1; - dataChunk.len = len; - dataChunk.dna_nr = mMemoryDNA->getReverseType(structType); - dataChunk.oldPtr = oldPtr; - - ///Perform structure size validation - short* structInfo = mMemoryDNA->getStruct(dataChunk.dna_nr); - int elemBytes; - elemBytes = mMemoryDNA->getLength(structInfo[0]); - // int elemBytes = mMemoryDNA->getElementSize(structInfo[0],structInfo[1]); - assert(len == elemBytes); - - mLibPointers.insert(dataChunk.oldPtr, (bStructHandle*)data); - m_chunks.push_back(dataChunk); -} diff --git a/thirdparty/bullet/Bullet3Serialize/Bullet2FileLoader/b3BulletFile.h b/thirdparty/bullet/Bullet3Serialize/Bullet2FileLoader/b3BulletFile.h deleted file mode 100644 index ede1d378ae..0000000000 --- a/thirdparty/bullet/Bullet3Serialize/Bullet2FileLoader/b3BulletFile.h +++ /dev/null @@ -1,74 +0,0 @@ -/* -bParse -Copyright (c) 2006-2010 Charlie C & Erwin Coumans http://gamekit.googlecode.com - -This software is provided 'as-is', without any express or implied warranty. -In no event will the authors be held liable for any damages arising from the use of this software. -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it freely, -subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. -*/ - -#ifndef B3_BULLET_FILE_H -#define B3_BULLET_FILE_H - -#include "b3File.h" -#include "Bullet3Common/b3AlignedObjectArray.h" -#include "b3Defines.h" - -#include "Bullet3Serialize/Bullet2FileLoader/b3Serializer.h" - -namespace bParse -{ -// ----------------------------------------------------- // -class b3BulletFile : public bFile -{ -protected: - char* m_DnaCopy; - -public: - b3AlignedObjectArray<bStructHandle*> m_softBodies; - - b3AlignedObjectArray<bStructHandle*> m_rigidBodies; - - b3AlignedObjectArray<bStructHandle*> m_collisionObjects; - - b3AlignedObjectArray<bStructHandle*> m_collisionShapes; - - b3AlignedObjectArray<bStructHandle*> m_constraints; - - b3AlignedObjectArray<bStructHandle*> m_bvhs; - - b3AlignedObjectArray<bStructHandle*> m_triangleInfoMaps; - - b3AlignedObjectArray<bStructHandle*> m_dynamicsWorldInfo; - - b3AlignedObjectArray<char*> m_dataBlocks; - b3BulletFile(); - - b3BulletFile(const char* fileName); - - b3BulletFile(char* memoryBuffer, int len); - - virtual ~b3BulletFile(); - - virtual void addDataBlock(char* dataBlock); - - // experimental - virtual int write(const char* fileName, bool fixupPointers = false); - - virtual void parse(int verboseMode); - - virtual void parseData(); - - virtual void writeDNA(FILE* fp); - - void addStruct(const char* structType, void* data, int len, void* oldPtr, int code); -}; -}; // namespace bParse - -#endif //B3_BULLET_FILE_H diff --git a/thirdparty/bullet/Bullet3Serialize/Bullet2FileLoader/b3Chunk.cpp b/thirdparty/bullet/Bullet3Serialize/Bullet2FileLoader/b3Chunk.cpp deleted file mode 100644 index ff75ff8cc4..0000000000 --- a/thirdparty/bullet/Bullet3Serialize/Bullet2FileLoader/b3Chunk.cpp +++ /dev/null @@ -1,69 +0,0 @@ -/* -bParse -Copyright (c) 2006-2009 Charlie C & Erwin Coumans http://gamekit.googlecode.com - -This software is provided 'as-is', without any express or implied warranty. -In no event will the authors be held liable for any damages arising from the use of this software. -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it freely, -subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. -*/ - -#include "b3Chunk.h" -#include "b3Defines.h" -#include "b3File.h" - -#if !defined(__CELLOS_LV2__) && !defined(__MWERKS__) -#include <memory.h> -#endif -#include <string.h> - -using namespace bParse; - -// ----------------------------------------------------- // -short ChunkUtils::swapShort(short sht) -{ - B3_SWITCH_SHORT(sht); - return sht; -} - -// ----------------------------------------------------- // -int ChunkUtils::swapInt(int inte) -{ - B3_SWITCH_INT(inte); - return inte; -} - -// ----------------------------------------------------- // -b3Long64 ChunkUtils::swapLong64(b3Long64 lng) -{ - B3_SWITCH_LONGINT(lng); - return lng; -} - -// ----------------------------------------------------- // -int ChunkUtils::getOffset(int flags) -{ - // if the file is saved in a - // different format, get the - // file's chunk size - int res = CHUNK_HEADER_LEN; - - if (VOID_IS_8) - { - if (flags & FD_BITS_VARIES) - res = sizeof(bChunkPtr4); - } - else - { - if (flags & FD_BITS_VARIES) - res = sizeof(bChunkPtr8); - } - return res; -} - -//eof diff --git a/thirdparty/bullet/Bullet3Serialize/Bullet2FileLoader/b3Chunk.h b/thirdparty/bullet/Bullet3Serialize/Bullet2FileLoader/b3Chunk.h deleted file mode 100644 index c9d0f37d9e..0000000000 --- a/thirdparty/bullet/Bullet3Serialize/Bullet2FileLoader/b3Chunk.h +++ /dev/null @@ -1,84 +0,0 @@ -/* -bParse -Copyright (c) 2006-2009 Charlie C & Erwin Coumans http://gamekit.googlecode.com - -This software is provided 'as-is', without any express or implied warranty. -In no event will the authors be held liable for any damages arising from the use of this software. -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it freely, -subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. -*/ - -#ifndef __BCHUNK_H__ -#define __BCHUNK_H__ - -#if defined(_WIN32) && !defined(__MINGW32__) -#define b3Long64 __int64 -#elif defined(__MINGW32__) -#include <stdint.h> -#define b3Long64 int64_t -#else -#define b3Long64 long long -#endif - -namespace bParse -{ -// ----------------------------------------------------- // -class bChunkPtr4 -{ -public: - bChunkPtr4() {} - int code; - int len; - union { - int m_uniqueInt; - }; - int dna_nr; - int nr; -}; - -// ----------------------------------------------------- // -class bChunkPtr8 -{ -public: - bChunkPtr8() {} - int code, len; - union { - b3Long64 oldPrev; - int m_uniqueInts[2]; - }; - int dna_nr, nr; -}; - -// ----------------------------------------------------- // -class bChunkInd -{ -public: - bChunkInd() {} - int code, len; - void *oldPtr; - int dna_nr, nr; -}; - -// ----------------------------------------------------- // -class ChunkUtils -{ -public: - // file chunk offset - static int getOffset(int flags); - - // endian utils - static short swapShort(short sht); - static int swapInt(int inte); - static b3Long64 swapLong64(b3Long64 lng); -}; - -const int CHUNK_HEADER_LEN = ((sizeof(bChunkInd))); -const bool VOID_IS_8 = ((sizeof(void *) == 8)); -} // namespace bParse - -#endif //__BCHUNK_H__ diff --git a/thirdparty/bullet/Bullet3Serialize/Bullet2FileLoader/b3Common.h b/thirdparty/bullet/Bullet3Serialize/Bullet2FileLoader/b3Common.h deleted file mode 100644 index 5884fad4d6..0000000000 --- a/thirdparty/bullet/Bullet3Serialize/Bullet2FileLoader/b3Common.h +++ /dev/null @@ -1,40 +0,0 @@ -/* -bParse -Copyright (c) 2006-2009 Charlie C & Erwin Coumans http://gamekit.googlecode.com - -This software is provided 'as-is', without any express or implied warranty. -In no event will the authors be held liable for any damages arising from the use of this software. -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it freely, -subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. -*/ - -#ifndef __BCOMMON_H__ -#define __BCOMMON_H__ - -#include <assert.h> -//#include "bLog.h" -#include "Bullet3Common/b3AlignedObjectArray.h" -#include "Bullet3Common/b3HashMap.h" - -namespace bParse -{ -class bMain; -class bFileData; -class bFile; -class bDNA; - -// delete void* undefined -typedef struct bStructHandle -{ - int unused; -} bStructHandle; -typedef b3AlignedObjectArray<bStructHandle*> bListBasePtr; -typedef b3HashMap<b3HashPtr, bStructHandle*> bPtrMap; -} // namespace bParse - -#endif //__BCOMMON_H__ diff --git a/thirdparty/bullet/Bullet3Serialize/Bullet2FileLoader/b3DNA.cpp b/thirdparty/bullet/Bullet3Serialize/Bullet2FileLoader/b3DNA.cpp deleted file mode 100644 index 09c8f23859..0000000000 --- a/thirdparty/bullet/Bullet3Serialize/Bullet2FileLoader/b3DNA.cpp +++ /dev/null @@ -1,616 +0,0 @@ -/* -bParse -Copyright (c) 2006-2009 Charlie C & Erwin Coumans http://gamekit.googlecode.com - -This software is provided 'as-is', without any express or implied warranty. -In no event will the authors be held liable for any damages arising from the use of this software. -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it freely, -subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. -*/ -#include <assert.h> - -#include "b3DNA.h" -#include "b3Chunk.h" -#include <string.h> -#include <stdlib.h> -#include <stdio.h> - -//this define will force traversal of structures, to check backward (and forward) compatibility -//#define TEST_BACKWARD_FORWARD_COMPATIBILITY - -using namespace bParse; - -// ----------------------------------------------------- // -bDNA::bDNA() - : mPtrLen(0) -{ - // -- -} - -// ----------------------------------------------------- // -bDNA::~bDNA() -{ - // -- -} - -// ----------------------------------------------------- // -bool bDNA::lessThan(bDNA *file) -{ - return (m_Names.size() < file->m_Names.size()); -} - -// ----------------------------------------------------- // -char *bDNA::getName(int ind) -{ - assert(ind <= (int)m_Names.size()); - return m_Names[ind].m_name; -} - -// ----------------------------------------------------- // -char *bDNA::getType(int ind) -{ - assert(ind <= (int)mTypes.size()); - return mTypes[ind]; -} - -// ----------------------------------------------------- // -short *bDNA::getStruct(int ind) -{ - assert(ind <= (int)mStructs.size()); - return mStructs[ind]; -} - -// ----------------------------------------------------- // -short bDNA::getLength(int ind) -{ - assert(ind <= (int)mTlens.size()); - return mTlens[ind]; -} - -// ----------------------------------------------------- // -int bDNA::getReverseType(short type) -{ - int *intPtr = mStructReverse.find(type); - if (intPtr) - return *intPtr; - - return -1; -} - -// ----------------------------------------------------- // -int bDNA::getReverseType(const char *type) -{ - b3HashString key(type); - int *valuePtr = mTypeLookup.find(key); - if (valuePtr) - return *valuePtr; - - return -1; -} - -// ----------------------------------------------------- // -int bDNA::getNumStructs() -{ - return (int)mStructs.size(); -} - -// ----------------------------------------------------- // -bool bDNA::flagNotEqual(int dna_nr) -{ - assert(dna_nr <= (int)mCMPFlags.size()); - return mCMPFlags[dna_nr] == FDF_STRUCT_NEQU; -} - -// ----------------------------------------------------- // -bool bDNA::flagEqual(int dna_nr) -{ - assert(dna_nr <= (int)mCMPFlags.size()); - int flag = mCMPFlags[dna_nr]; - return flag == FDF_STRUCT_EQU; -} - -// ----------------------------------------------------- // -bool bDNA::flagNone(int dna_nr) -{ - assert(dna_nr <= (int)mCMPFlags.size()); - return mCMPFlags[dna_nr] == FDF_NONE; -} - -// ----------------------------------------------------- // -int bDNA::getPointerSize() -{ - return mPtrLen; -} - -// ----------------------------------------------------- // -void bDNA::initRecurseCmpFlags(int iter) -{ - // iter is FDF_STRUCT_NEQU - - short *oldStrc = mStructs[iter]; - short type = oldStrc[0]; - - for (int i = 0; i < (int)mStructs.size(); i++) - { - if (i != iter && mCMPFlags[i] == FDF_STRUCT_EQU) - { - short *curStruct = mStructs[i]; - int eleLen = curStruct[1]; - curStruct += 2; - - for (int j = 0; j < eleLen; j++, curStruct += 2) - { - if (curStruct[0] == type) - { - //char *name = m_Names[curStruct[1]].m_name; - //if (name[0] != '*') - if (m_Names[curStruct[1]].m_isPointer) - { - mCMPFlags[i] = FDF_STRUCT_NEQU; - initRecurseCmpFlags(i); - } - } - } - } - } -} - -// ----------------------------------------------------- // -void bDNA::initCmpFlags(bDNA *memDNA) -{ - // compare the file to memory - // this ptr should be the file data - - assert(!(m_Names.size() == 0)); // && "SDNA empty!"); - mCMPFlags.resize(mStructs.size(), FDF_NONE); - - int i; - for (i = 0; i < (int)mStructs.size(); i++) - { - short *oldStruct = mStructs[i]; - - int oldLookup = getReverseType(oldStruct[0]); - if (oldLookup == -1) - { - mCMPFlags[i] = FDF_NONE; - continue; - } - //char* typeName = mTypes[oldStruct[0]]; - -//#define SLOW_FORWARD_COMPATIBLE 1 -#ifdef SLOW_FORWARD_COMPATIBLE - char *typeName = mTypes[oldLookup]; - int newLookup = memDNA->getReverseType(typeName); - if (newLookup == -1) - { - mCMPFlags[i] = FDF_NONE; - continue; - } - short *curStruct = memDNA->mStructs[newLookup]; -#else - // memory for file - - if (oldLookup < memDNA->mStructs.size()) - { - short *curStruct = memDNA->mStructs[oldLookup]; -#endif - - // rebuild... - mCMPFlags[i] = FDF_STRUCT_NEQU; - -#ifndef TEST_BACKWARD_FORWARD_COMPATIBILITY - - if (curStruct[1] == oldStruct[1]) - { - // type len same ... - if (mTlens[oldStruct[0]] == memDNA->mTlens[curStruct[0]]) - { - bool isSame = true; - int elementLength = oldStruct[1]; - - curStruct += 2; - oldStruct += 2; - - for (int j = 0; j < elementLength; j++, curStruct += 2, oldStruct += 2) - { - // type the same - //const char* typeFileDNA = mTypes[oldStruct[0]]; - //const char* typeMemDNA = mTypes[curStruct[0]]; - if (strcmp(mTypes[oldStruct[0]], memDNA->mTypes[curStruct[0]]) != 0) - { - isSame = false; - break; - } - - // name the same - if (strcmp(m_Names[oldStruct[1]].m_name, memDNA->m_Names[curStruct[1]].m_name) != 0) - { - isSame = false; - break; - } - } - // flag valid == - if (isSame) - mCMPFlags[i] = FDF_STRUCT_EQU; - } - } -#endif - } -} - -// recurse in -for (i = 0; i < (int)mStructs.size(); i++) -{ - if (mCMPFlags[i] == FDF_STRUCT_NEQU) - initRecurseCmpFlags(i); -} -} - -static int name_is_array(char *name, int *dim1, int *dim2) -{ - int len = strlen(name); - /*fprintf(stderr,"[%s]",name);*/ - /*if (len >= 1) { - if (name[len-1] != ']') - return 1; - } - return 0;*/ - char *bp; - int num; - if (dim1) - { - *dim1 = 1; - } - if (dim2) - { - *dim2 = 1; - } - bp = strchr(name, '['); - if (!bp) - { - return 0; - } - num = 0; - while (++bp < name + len - 1) - { - const char c = *bp; - if (c == ']') - { - break; - } - if (c <= '9' && c >= '0') - { - num *= 10; - num += (c - '0'); - } - else - { - printf("array parse error.\n"); - return 0; - } - } - if (dim2) - { - *dim2 = num; - } - - /* find second dim, if any. */ - bp = strchr(bp, '['); - if (!bp) - { - return 1; /* at least we got the first dim. */ - } - num = 0; - while (++bp < name + len - 1) - { - const char c = *bp; - if (c == ']') - { - break; - } - if (c <= '9' && c >= '0') - { - num *= 10; - num += (c - '0'); - } - else - { - printf("array2 parse error.\n"); - return 1; - } - } - if (dim1) - { - if (dim2) - { - *dim1 = *dim2; - *dim2 = num; - } - else - { - *dim1 = num; - } - } - - return 1; -} - -// ----------------------------------------------------- // -void bDNA::init(char *data, int len, bool swap) -{ - int *intPtr = 0; - short *shtPtr = 0; - char *cp = 0; - int dataLen = 0; - //long nr=0; - intPtr = (int *)data; - - /* - SDNA (4 bytes) (magic number) - NAME (4 bytes) - <nr> (4 bytes) amount of names (int) - <string> - <string> - */ - - if (strncmp(data, "SDNA", 4) == 0) - { - // skip ++ NAME - intPtr++; - intPtr++; - } - - // Parse names - if (swap) - { - *intPtr = ChunkUtils::swapInt(*intPtr); - } - dataLen = *intPtr; - intPtr++; - - cp = (char *)intPtr; - int i; - for (i = 0; i < dataLen; i++) - { - bNameInfo info; - info.m_name = cp; - info.m_isPointer = (info.m_name[0] == '*') || (info.m_name[1] == '*'); - name_is_array(info.m_name, &info.m_dim0, &info.m_dim1); - m_Names.push_back(info); - while (*cp) cp++; - cp++; - } - - cp = b3AlignPointer(cp, 4); - - /* - TYPE (4 bytes) - <nr> amount of types (int) - <string> - <string> - */ - - intPtr = (int *)cp; - assert(strncmp(cp, "TYPE", 4) == 0); - intPtr++; - - if (swap) - { - *intPtr = ChunkUtils::swapInt(*intPtr); - } - dataLen = *intPtr; - intPtr++; - - cp = (char *)intPtr; - for (i = 0; i < dataLen; i++) - { - mTypes.push_back(cp); - while (*cp) cp++; - cp++; - } - - cp = b3AlignPointer(cp, 4); - - /* - TLEN (4 bytes) - <len> (short) the lengths of types - <len> - */ - - // Parse type lens - intPtr = (int *)cp; - assert(strncmp(cp, "TLEN", 4) == 0); - intPtr++; - - dataLen = (int)mTypes.size(); - - shtPtr = (short *)intPtr; - for (i = 0; i < dataLen; i++, shtPtr++) - { - if (swap) - shtPtr[0] = ChunkUtils::swapShort(shtPtr[0]); - mTlens.push_back(shtPtr[0]); - } - - if (dataLen & 1) shtPtr++; - - /* - STRC (4 bytes) - <nr> amount of structs (int) - <typenr> - <nr_of_elems> - <typenr> - <namenr> - <typenr> - <namenr> - */ - - intPtr = (int *)shtPtr; - cp = (char *)intPtr; - assert(strncmp(cp, "STRC", 4) == 0); - intPtr++; - - if (swap) - { - *intPtr = ChunkUtils::swapInt(*intPtr); - } - dataLen = *intPtr; - intPtr++; - - shtPtr = (short *)intPtr; - for (i = 0; i < dataLen; i++) - { - mStructs.push_back(shtPtr); - if (swap) - { - shtPtr[0] = ChunkUtils::swapShort(shtPtr[0]); - shtPtr[1] = ChunkUtils::swapShort(shtPtr[1]); - - int len = shtPtr[1]; - shtPtr += 2; - - for (int a = 0; a < len; a++, shtPtr += 2) - { - shtPtr[0] = ChunkUtils::swapShort(shtPtr[0]); - shtPtr[1] = ChunkUtils::swapShort(shtPtr[1]); - } - } - else - shtPtr += (2 * shtPtr[1]) + 2; - } - - // build reverse lookups - for (i = 0; i < (int)mStructs.size(); i++) - { - short *strc = mStructs.at(i); - if (!mPtrLen && strcmp(mTypes[strc[0]], "ListBase") == 0) - { - mPtrLen = mTlens[strc[0]] / 2; - } - - mStructReverse.insert(strc[0], i); - mTypeLookup.insert(b3HashString(mTypes[strc[0]]), i); - } -} - -// ----------------------------------------------------- // -int bDNA::getArraySize(char *string) -{ - int ret = 1; - int len = strlen(string); - - char *next = 0; - for (int i = 0; i < len; i++) - { - char c = string[i]; - - if (c == '[') - next = &string[i + 1]; - else if (c == ']') - if (next) - ret *= atoi(next); - } - - // print (string << ' ' << ret); - return ret; -} - -void bDNA::dumpTypeDefinitions() -{ - int i; - - int numTypes = mTypes.size(); - - for (i = 0; i < numTypes; i++) - { - } - - for (i = 0; i < (int)mStructs.size(); i++) - { - int totalBytes = 0; - short *oldStruct = mStructs[i]; - - int oldLookup = getReverseType(oldStruct[0]); - if (oldLookup == -1) - { - mCMPFlags[i] = FDF_NONE; - continue; - } - - short *newStruct = mStructs[oldLookup]; - char *typeName = mTypes[newStruct[0]]; - printf("%3d: %s ", i, typeName); - - //char *name = mNames[oldStruct[1]]; - int len = oldStruct[1]; - printf(" (%d fields) ", len); - oldStruct += 2; - - printf("{"); - int j; - for (j = 0; j < len; ++j, oldStruct += 2) - { - const char *name = m_Names[oldStruct[1]].m_name; - printf("%s %s", mTypes[oldStruct[0]], name); - int elemNumBytes = 0; - int arrayDimensions = getArraySizeNew(oldStruct[1]); - - if (m_Names[oldStruct[1]].m_isPointer) - { - elemNumBytes = VOID_IS_8 ? 8 : 4; - } - else - { - elemNumBytes = getLength(oldStruct[0]); - } - printf(" /* %d bytes */", elemNumBytes * arrayDimensions); - - if (j == len - 1) - { - printf(";}"); - } - else - { - printf("; "); - } - totalBytes += elemNumBytes * arrayDimensions; - } - printf("\ntotalBytes=%d\n\n", totalBytes); - } - -#if 0 - /* dump out display of types and their sizes */ - for (i=0; i<bf->types_count; ++i) { - /* if (!bf->types[i].is_struct)*/ - { - printf("%3d: sizeof(%s%s)=%d", - i, - bf->types[i].is_struct ? "struct " : "atomic ", - bf->types[i].name, bf->types[i].size); - if (bf->types[i].is_struct) { - int j; - printf(", %d fields: { ", bf->types[i].fieldtypes_count); - for (j=0; j<bf->types[i].fieldtypes_count; ++j) { - printf("%s %s", - bf->types[bf->types[i].fieldtypes[j]].name, - bf->names[bf->types[i].fieldnames[j]]); - if (j == bf->types[i].fieldtypes_count-1) { - printf(";}"); - } else { - printf("; "); - } - } - } - printf("\n\n"); - - } - } -#endif -} - -//eof diff --git a/thirdparty/bullet/Bullet3Serialize/Bullet2FileLoader/b3DNA.h b/thirdparty/bullet/Bullet3Serialize/Bullet2FileLoader/b3DNA.h deleted file mode 100644 index ca6004d960..0000000000 --- a/thirdparty/bullet/Bullet3Serialize/Bullet2FileLoader/b3DNA.h +++ /dev/null @@ -1,101 +0,0 @@ -/* -bParse -Copyright (c) 2006-2009 Charlie C & Erwin Coumans http://gamekit.googlecode.com - -This software is provided 'as-is', without any express or implied warranty. -In no event will the authors be held liable for any damages arising from the use of this software. -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it freely, -subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. -*/ - -#ifndef __BDNA_H__ -#define __BDNA_H__ - -#include "b3Common.h" - -namespace bParse -{ -struct bNameInfo -{ - char *m_name; - bool m_isPointer; - int m_dim0; - int m_dim1; -}; - -class bDNA -{ -public: - bDNA(); - ~bDNA(); - - void init(char *data, int len, bool swap = false); - - int getArraySize(char *str); - int getArraySizeNew(short name) - { - const bNameInfo &nameInfo = m_Names[name]; - return nameInfo.m_dim0 * nameInfo.m_dim1; - } - int getElementSize(short type, short name) - { - const bNameInfo &nameInfo = m_Names[name]; - int size = nameInfo.m_isPointer ? mPtrLen * nameInfo.m_dim0 * nameInfo.m_dim1 : mTlens[type] * nameInfo.m_dim0 * nameInfo.m_dim1; - return size; - } - - int getNumNames() const - { - return m_Names.size(); - } - - char *getName(int ind); - char *getType(int ind); - short *getStruct(int ind); - short getLength(int ind); - int getReverseType(short type); - int getReverseType(const char *type); - - int getNumStructs(); - - // - bool lessThan(bDNA *other); - - void initCmpFlags(bDNA *memDNA); - bool flagNotEqual(int dna_nr); - bool flagEqual(int dna_nr); - bool flagNone(int dna_nr); - - int getPointerSize(); - - void dumpTypeDefinitions(); - -private: - enum FileDNAFlags - { - FDF_NONE = 0, - FDF_STRUCT_NEQU, - FDF_STRUCT_EQU - }; - - void initRecurseCmpFlags(int i); - - b3AlignedObjectArray<int> mCMPFlags; - - b3AlignedObjectArray<bNameInfo> m_Names; - b3AlignedObjectArray<char *> mTypes; - b3AlignedObjectArray<short *> mStructs; - b3AlignedObjectArray<short> mTlens; - b3HashMap<b3HashInt, int> mStructReverse; - b3HashMap<b3HashString, int> mTypeLookup; - - int mPtrLen; -}; -} // namespace bParse - -#endif //__BDNA_H__ diff --git a/thirdparty/bullet/Bullet3Serialize/Bullet2FileLoader/b3Defines.h b/thirdparty/bullet/Bullet3Serialize/Bullet2FileLoader/b3Defines.h deleted file mode 100644 index 0524c94db1..0000000000 --- a/thirdparty/bullet/Bullet3Serialize/Bullet2FileLoader/b3Defines.h +++ /dev/null @@ -1,149 +0,0 @@ -/* Copyright (C) 2006-2009 Charlie C & Erwin Coumans http://gamekit.googlecode.com -* -* This software is provided 'as-is', without any express or implied -* warranty. In no event will the authors be held liable for any damages -* arising from the use of this software. -* -* Permission is granted to anyone to use this software for any purpose, -* including commercial applications, and to alter it and redistribute it -* freely, subject to the following restrictions: -* -* 1. The origin of this software must not be misrepresented; you must not -* claim that you wrote the original software. If you use this software -* in a product, an acknowledgment in the product documentation would be -* appreciated but is not required. -* 2. Altered source versions must be plainly marked as such, and must not be -* misrepresented as being the original software. -* 3. This notice may not be removed or altered from any source distribution. -*/ -#ifndef __B_DEFINES_H__ -#define __B_DEFINES_H__ - -// MISC defines, see BKE_global.h, BKE_utildefines.h -#define B3_SIZEOFBLENDERHEADER 12 - -// ------------------------------------------------------------ -#if defined(__sgi) || defined(__sparc) || defined(__sparc__) || defined(__PPC__) || defined(__ppc__) || defined(__BIG_ENDIAN__) -#define B3_MAKE_ID(a, b, c, d) ((int)(a) << 24 | (int)(b) << 16 | (c) << 8 | (d)) -#else -#define B3_MAKE_ID(a, b, c, d) ((int)(d) << 24 | (int)(c) << 16 | (b) << 8 | (a)) -#endif - -// ------------------------------------------------------------ -#if defined(__sgi) || defined(__sparc) || defined(__sparc__) || defined(__PPC__) || defined(__ppc__) || defined(__BIG_ENDIAN__) -#define B3_MAKE_ID2(c, d) ((c) << 8 | (d)) -#else -#define B3_MAKE_ID2(c, d) ((d) << 8 | (c)) -#endif - -// ------------------------------------------------------------ -#define B3_ID_SCE B3_MAKE_ID2('S', 'C') -#define B3_ID_LI B3_MAKE_ID2('L', 'I') -#define B3_ID_OB B3_MAKE_ID2('O', 'B') -#define B3_ID_ME B3_MAKE_ID2('M', 'E') -#define B3_ID_CU B3_MAKE_ID2('C', 'U') -#define B3_ID_MB B3_MAKE_ID2('M', 'B') -#define B3_ID_MA B3_MAKE_ID2('M', 'A') -#define B3_ID_TE B3_MAKE_ID2('T', 'E') -#define B3_ID_IM B3_MAKE_ID2('I', 'M') -#define B3_ID_IK B3_MAKE_ID2('I', 'K') -#define B3_ID_WV B3_MAKE_ID2('W', 'V') -#define B3_ID_LT B3_MAKE_ID2('L', 'T') -#define B3_ID_SE B3_MAKE_ID2('S', 'E') -#define B3_ID_LF B3_MAKE_ID2('L', 'F') -#define B3_ID_LA B3_MAKE_ID2('L', 'A') -#define B3_ID_CA B3_MAKE_ID2('C', 'A') -#define B3_ID_IP B3_MAKE_ID2('I', 'P') -#define B3_ID_KE B3_MAKE_ID2('K', 'E') -#define B3_ID_WO B3_MAKE_ID2('W', 'O') -#define B3_ID_SCR B3_MAKE_ID2('S', 'R') -#define B3_ID_VF B3_MAKE_ID2('V', 'F') -#define B3_ID_TXT B3_MAKE_ID2('T', 'X') -#define B3_ID_SO B3_MAKE_ID2('S', 'O') -#define B3_ID_SAMPLE B3_MAKE_ID2('S', 'A') -#define B3_ID_GR B3_MAKE_ID2('G', 'R') -#define B3_ID_ID B3_MAKE_ID2('I', 'D') -#define B3_ID_AR B3_MAKE_ID2('A', 'R') -#define B3_ID_AC B3_MAKE_ID2('A', 'C') -#define B3_ID_SCRIPT B3_MAKE_ID2('P', 'Y') -#define B3_ID_FLUIDSIM B3_MAKE_ID2('F', 'S') -#define B3_ID_NT B3_MAKE_ID2('N', 'T') -#define B3_ID_BR B3_MAKE_ID2('B', 'R') - -#define B3_ID_SEQ B3_MAKE_ID2('S', 'Q') -#define B3_ID_CO B3_MAKE_ID2('C', 'O') -#define B3_ID_PO B3_MAKE_ID2('A', 'C') -#define B3_ID_NLA B3_MAKE_ID2('N', 'L') - -#define B3_ID_VS B3_MAKE_ID2('V', 'S') -#define B3_ID_VN B3_MAKE_ID2('V', 'N') - -// ------------------------------------------------------------ -#define B3_FORM B3_MAKE_ID('F', 'O', 'R', 'M') -#define B3_DDG1 B3_MAKE_ID('3', 'D', 'G', '1') -#define B3_DDG2 B3_MAKE_ID('3', 'D', 'G', '2') -#define B3_DDG3 B3_MAKE_ID('3', 'D', 'G', '3') -#define B3_DDG4 B3_MAKE_ID('3', 'D', 'G', '4') -#define B3_GOUR B3_MAKE_ID('G', 'O', 'U', 'R') -#define B3_BLEN B3_MAKE_ID('B', 'L', 'E', 'N') -#define B3_DER_ B3_MAKE_ID('D', 'E', 'R', '_') -#define B3_V100 B3_MAKE_ID('V', '1', '0', '0') -#define B3_DATA B3_MAKE_ID('D', 'A', 'T', 'A') -#define B3_GLOB B3_MAKE_ID('G', 'L', 'O', 'B') -#define B3_IMAG B3_MAKE_ID('I', 'M', 'A', 'G') -#define B3_TEST B3_MAKE_ID('T', 'E', 'S', 'T') -#define B3_USER B3_MAKE_ID('U', 'S', 'E', 'R') - -// ------------------------------------------------------------ -#define B3_DNA1 B3_MAKE_ID('D', 'N', 'A', '1') -#define B3_REND B3_MAKE_ID('R', 'E', 'N', 'D') -#define B3_ENDB B3_MAKE_ID('E', 'N', 'D', 'B') -#define B3_NAME B3_MAKE_ID('N', 'A', 'M', 'E') -#define B3_SDNA B3_MAKE_ID('S', 'D', 'N', 'A') -#define B3_TYPE B3_MAKE_ID('T', 'Y', 'P', 'E') -#define B3_TLEN B3_MAKE_ID('T', 'L', 'E', 'N') -#define B3_STRC B3_MAKE_ID('S', 'T', 'R', 'C') - -// ------------------------------------------------------------ -#define B3_SWITCH_INT(a) \ - { \ - char s_i, *p_i; \ - p_i = (char *)&(a); \ - s_i = p_i[0]; \ - p_i[0] = p_i[3]; \ - p_i[3] = s_i; \ - s_i = p_i[1]; \ - p_i[1] = p_i[2]; \ - p_i[2] = s_i; \ - } - -// ------------------------------------------------------------ -#define B3_SWITCH_SHORT(a) \ - { \ - char s_i, *p_i; \ - p_i = (char *)&(a); \ - s_i = p_i[0]; \ - p_i[0] = p_i[1]; \ - p_i[1] = s_i; \ - } - -// ------------------------------------------------------------ -#define B3_SWITCH_LONGINT(a) \ - { \ - char s_i, *p_i; \ - p_i = (char *)&(a); \ - s_i = p_i[0]; \ - p_i[0] = p_i[7]; \ - p_i[7] = s_i; \ - s_i = p_i[1]; \ - p_i[1] = p_i[6]; \ - p_i[6] = s_i; \ - s_i = p_i[2]; \ - p_i[2] = p_i[5]; \ - p_i[5] = s_i; \ - s_i = p_i[3]; \ - p_i[3] = p_i[4]; \ - p_i[4] = s_i; \ - } - -#endif //__B_DEFINES_H__ diff --git a/thirdparty/bullet/Bullet3Serialize/Bullet2FileLoader/b3File.cpp b/thirdparty/bullet/Bullet3Serialize/Bullet2FileLoader/b3File.cpp deleted file mode 100644 index f6c779a919..0000000000 --- a/thirdparty/bullet/Bullet3Serialize/Bullet2FileLoader/b3File.cpp +++ /dev/null @@ -1,1653 +0,0 @@ -/* -bParse -Copyright (c) 2006-2009 Charlie C & Erwin Coumans http://gamekit.googlecode.com - -This software is provided 'as-is', without any express or implied warranty. -In no event will the authors be held liable for any damages arising from the use of this software. -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it freely, -subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. -*/ -#include "b3File.h" -#include "b3Common.h" -#include "b3Chunk.h" -#include "b3DNA.h" -#include <math.h> -#include <string.h> -#include <stdlib.h> -#include "b3Defines.h" -#include "Bullet3Serialize/Bullet2FileLoader/b3Serializer.h" -#include "Bullet3Common/b3AlignedAllocator.h" -#include "Bullet3Common/b3MinMax.h" - -#define B3_SIZEOFBLENDERHEADER 12 -#define MAX_ARRAY_LENGTH 512 -using namespace bParse; -#define MAX_STRLEN 1024 - -const char *getCleanName(const char *memName, char *buffer) -{ - int slen = strlen(memName); - assert(slen < MAX_STRLEN); - slen = b3Min(slen, MAX_STRLEN); - for (int i = 0; i < slen; i++) - { - if (memName[i] == ']' || memName[i] == '[') - { - buffer[i] = 0; //'_'; - } - else - { - buffer[i] = memName[i]; - } - } - buffer[slen] = 0; - return buffer; -} - -// ----------------------------------------------------- // -bFile::bFile(const char *filename, const char headerString[7]) - : mOwnsBuffer(true), - mFileBuffer(0), - mFileLen(0), - mVersion(0), - mDataStart(0), - mFileDNA(0), - mMemoryDNA(0), - mFlags(FD_INVALID) -{ - for (int i = 0; i < 7; i++) - { - m_headerString[i] = headerString[i]; - } - - FILE *fp = fopen(filename, "rb"); - if (fp) - { - fseek(fp, 0L, SEEK_END); - mFileLen = ftell(fp); - fseek(fp, 0L, SEEK_SET); - - mFileBuffer = (char *)malloc(mFileLen + 1); - int bytesRead; - bytesRead = fread(mFileBuffer, mFileLen, 1, fp); - - fclose(fp); - - // - parseHeader(); - } -} - -// ----------------------------------------------------- // -bFile::bFile(char *memoryBuffer, int len, const char headerString[7]) - : mOwnsBuffer(false), - mFileBuffer(0), - mFileLen(0), - mVersion(0), - mDataStart(0), - mFileDNA(0), - mMemoryDNA(0), - mFlags(FD_INVALID) -{ - for (int i = 0; i < 7; i++) - { - m_headerString[i] = headerString[i]; - } - mFileBuffer = memoryBuffer; - mFileLen = len; - - parseHeader(); -} - -// ----------------------------------------------------- // -bFile::~bFile() -{ - if (mOwnsBuffer && mFileBuffer) - { - free(mFileBuffer); - mFileBuffer = 0; - } - - delete mMemoryDNA; - delete mFileDNA; -} - -// ----------------------------------------------------- // -void bFile::parseHeader() -{ - if (!mFileLen || !mFileBuffer) - return; - - char *blenderBuf = mFileBuffer; - char header[B3_SIZEOFBLENDERHEADER + 1]; - memcpy(header, blenderBuf, B3_SIZEOFBLENDERHEADER); - header[B3_SIZEOFBLENDERHEADER] = '\0'; - - if (strncmp(header, m_headerString, 6) != 0) - { - memcpy(header, m_headerString, B3_SIZEOFBLENDERHEADER); - return; - } - - if (header[6] == 'd') - { - mFlags |= FD_DOUBLE_PRECISION; - } - - char *ver = header + 9; - mVersion = atoi(ver); - if (mVersion <= 241) - { - //printf("Warning, %d not fully tested : <= 242\n", mVersion); - } - - int littleEndian = 1; - littleEndian = ((char *)&littleEndian)[0]; - - // swap ptr sizes... - if (header[7] == '-') - { - mFlags |= FD_FILE_64; - if (!VOID_IS_8) - mFlags |= FD_BITS_VARIES; - } - else if (VOID_IS_8) - mFlags |= FD_BITS_VARIES; - - // swap endian... - if (header[8] == 'V') - { - if (littleEndian == 1) - mFlags |= FD_ENDIAN_SWAP; - } - else if (littleEndian == 0) - mFlags |= FD_ENDIAN_SWAP; - - mFlags |= FD_OK; -} - -// ----------------------------------------------------- // -bool bFile::ok() -{ - return (mFlags & FD_OK) != 0; -} - -// ----------------------------------------------------- // -void bFile::parseInternal(int verboseMode, char *memDna, int memDnaLength) -{ - if ((mFlags & FD_OK) == 0) - return; - - char *blenderData = mFileBuffer; - bChunkInd dna; - dna.oldPtr = 0; - - char *tempBuffer = blenderData; - for (int i = 0; i < mFileLen; i++) - { - // looking for the data's starting position - // and the start of SDNA decls - - if (!mDataStart && strncmp(tempBuffer, "REND", 4) == 0) - mDataStart = i; - - if (strncmp(tempBuffer, "DNA1", 4) == 0) - { - // read the DNA1 block and extract SDNA - if (getNextBlock(&dna, tempBuffer, mFlags) > 0) - { - if (strncmp((tempBuffer + ChunkUtils::getOffset(mFlags)), "SDNANAME", 8) == 0) - dna.oldPtr = (tempBuffer + ChunkUtils::getOffset(mFlags)); - else - dna.oldPtr = 0; - } - else - dna.oldPtr = 0; - } - // Some Bullet files are missing the DNA1 block - // In Blender it's DNA1 + ChunkUtils::getOffset() + SDNA + NAME - // In Bullet tests its SDNA + NAME - else if (strncmp(tempBuffer, "SDNANAME", 8) == 0) - { - dna.oldPtr = blenderData + i; - dna.len = mFileLen - i; - - // Also no REND block, so exit now. - if (mVersion == 276) break; - } - - if (mDataStart && dna.oldPtr) break; - tempBuffer++; - } - if (!dna.oldPtr || !dna.len) - { - //printf("Failed to find DNA1+SDNA pair\n"); - mFlags &= ~FD_OK; - return; - } - - mFileDNA = new bDNA(); - - ///mFileDNA->init will convert part of DNA file endianness to current CPU endianness if necessary - mFileDNA->init((char *)dna.oldPtr, dna.len, (mFlags & FD_ENDIAN_SWAP) != 0); - - if (mVersion == 276) - { - int i; - for (i = 0; i < mFileDNA->getNumNames(); i++) - { - if (strcmp(mFileDNA->getName(i), "int") == 0) - { - mFlags |= FD_BROKEN_DNA; - } - } - if ((mFlags & FD_BROKEN_DNA) != 0) - { - //printf("warning: fixing some broken DNA version\n"); - } - } - - if (verboseMode & FD_VERBOSE_DUMP_DNA_TYPE_DEFINITIONS) - mFileDNA->dumpTypeDefinitions(); - - mMemoryDNA = new bDNA(); - int littleEndian = 1; - littleEndian = ((char *)&littleEndian)[0]; - - mMemoryDNA->init(memDna, memDnaLength, littleEndian == 0); - - ///@todo we need a better version check, add version/sub version info from FileGlobal into memory DNA/header files - if (mMemoryDNA->getNumNames() != mFileDNA->getNumNames()) - { - mFlags |= FD_VERSION_VARIES; - //printf ("Warning, file DNA is different than built in, performance is reduced. Best to re-export file with a matching version/platform"); - } - - // as long as it kept up to date it will be ok!! - if (mMemoryDNA->lessThan(mFileDNA)) - { - //printf ("Warning, file DNA is newer than built in."); - } - - mFileDNA->initCmpFlags(mMemoryDNA); - - parseData(); - - resolvePointers(verboseMode); - - updateOldPointers(); -} - -// ----------------------------------------------------- // -void bFile::swap(char *head, bChunkInd &dataChunk, bool ignoreEndianFlag) -{ - char *data = head; - short *strc = mFileDNA->getStruct(dataChunk.dna_nr); - - const char s[] = "SoftBodyMaterialData"; - int szs = sizeof(s); - if (strncmp((char *)&dataChunk.code, "ARAY", 4) == 0) - { - short *oldStruct = mFileDNA->getStruct(dataChunk.dna_nr); - char *oldType = mFileDNA->getType(oldStruct[0]); - if (strncmp(oldType, s, szs) == 0) - { - return; - } - } - - int len = mFileDNA->getLength(strc[0]); - - for (int i = 0; i < dataChunk.nr; i++) - { - swapStruct(dataChunk.dna_nr, data, ignoreEndianFlag); - data += len; - } -} - -void bFile::swapLen(char *dataPtr) -{ - const bool VOID_IS_8 = ((sizeof(void *) == 8)); - if (VOID_IS_8) - { - if (mFlags & FD_BITS_VARIES) - { - bChunkPtr4 *c = (bChunkPtr4 *)dataPtr; - if ((c->code & 0xFFFF) == 0) - c->code >>= 16; - B3_SWITCH_INT(c->len); - B3_SWITCH_INT(c->dna_nr); - B3_SWITCH_INT(c->nr); - } - else - { - bChunkPtr8 *c = (bChunkPtr8 *)dataPtr; - if ((c->code & 0xFFFF) == 0) - c->code >>= 16; - B3_SWITCH_INT(c->len); - B3_SWITCH_INT(c->dna_nr); - B3_SWITCH_INT(c->nr); - } - } - else - { - if (mFlags & FD_BITS_VARIES) - { - bChunkPtr8 *c = (bChunkPtr8 *)dataPtr; - if ((c->code & 0xFFFF) == 0) - c->code >>= 16; - B3_SWITCH_INT(c->len); - B3_SWITCH_INT(c->dna_nr); - B3_SWITCH_INT(c->nr); - } - else - { - bChunkPtr4 *c = (bChunkPtr4 *)dataPtr; - if ((c->code & 0xFFFF) == 0) - c->code >>= 16; - B3_SWITCH_INT(c->len); - - B3_SWITCH_INT(c->dna_nr); - B3_SWITCH_INT(c->nr); - } - } -} - -void bFile::swapDNA(char *ptr) -{ - bool swap = ((mFlags & FD_ENDIAN_SWAP) != 0); - - char *data = &ptr[20]; - // void bDNA::init(char *data, int len, bool swap) - int *intPtr = 0; - short *shtPtr = 0; - char *cp = 0; - int dataLen = 0; - //long nr=0; - intPtr = (int *)data; - - /* - SDNA (4 bytes) (magic number) - NAME (4 bytes) - <nr> (4 bytes) amount of names (int) - <string> - <string> - */ - - if (strncmp(data, "SDNA", 4) == 0) - { - // skip ++ NAME - intPtr++; - intPtr++; - } - - // Parse names - if (swap) - dataLen = ChunkUtils::swapInt(*intPtr); - else - dataLen = *intPtr; - - *intPtr = ChunkUtils::swapInt(*intPtr); - intPtr++; - - cp = (char *)intPtr; - int i; - for (i = 0; i < dataLen; i++) - { - while (*cp) cp++; - cp++; - } - - cp = b3AlignPointer(cp, 4); - - /* - TYPE (4 bytes) - <nr> amount of types (int) - <string> - <string> - */ - - intPtr = (int *)cp; - assert(strncmp(cp, "TYPE", 4) == 0); - intPtr++; - - if (swap) - dataLen = ChunkUtils::swapInt(*intPtr); - else - dataLen = *intPtr; - - *intPtr = ChunkUtils::swapInt(*intPtr); - - intPtr++; - - cp = (char *)intPtr; - for (i = 0; i < dataLen; i++) - { - while (*cp) cp++; - cp++; - } - - cp = b3AlignPointer(cp, 4); - - /* - TLEN (4 bytes) - <len> (short) the lengths of types - <len> - */ - - // Parse type lens - intPtr = (int *)cp; - assert(strncmp(cp, "TLEN", 4) == 0); - intPtr++; - - shtPtr = (short *)intPtr; - for (i = 0; i < dataLen; i++, shtPtr++) - { - //??????if (swap) - shtPtr[0] = ChunkUtils::swapShort(shtPtr[0]); - } - - if (dataLen & 1) - shtPtr++; - - /* - STRC (4 bytes) - <nr> amount of structs (int) - <typenr> - <nr_of_elems> - <typenr> - <namenr> - <typenr> - <namenr> - */ - - intPtr = (int *)shtPtr; - cp = (char *)intPtr; - assert(strncmp(cp, "STRC", 4) == 0); - intPtr++; - - if (swap) - dataLen = ChunkUtils::swapInt(*intPtr); - else - dataLen = *intPtr; - - *intPtr = ChunkUtils::swapInt(*intPtr); - - intPtr++; - - shtPtr = (short *)intPtr; - for (i = 0; i < dataLen; i++) - { - //if (swap) - { - int len = shtPtr[1]; - - shtPtr[0] = ChunkUtils::swapShort(shtPtr[0]); - shtPtr[1] = ChunkUtils::swapShort(shtPtr[1]); - - shtPtr += 2; - - for (int a = 0; a < len; a++, shtPtr += 2) - { - shtPtr[0] = ChunkUtils::swapShort(shtPtr[0]); - shtPtr[1] = ChunkUtils::swapShort(shtPtr[1]); - } - } - // else - // shtPtr+= (2*shtPtr[1])+2; - } -} - -void bFile::writeFile(const char *fileName) -{ - FILE *f = fopen(fileName, "wb"); - fwrite(mFileBuffer, 1, mFileLen, f); - fclose(f); -} - -void bFile::preSwap() -{ - //const bool brokenDNA = (mFlags&FD_BROKEN_DNA)!=0; - //FD_ENDIAN_SWAP - //byte 8 determines the endianness of the file, little (v) versus big (V) - int littleEndian = 1; - littleEndian = ((char *)&littleEndian)[0]; - - if (mFileBuffer[8] == 'V') - { - mFileBuffer[8] = 'v'; - } - else - { - mFileBuffer[8] = 'V'; - } - - mDataStart = 12; - - char *dataPtr = mFileBuffer + mDataStart; - - bChunkInd dataChunk; - dataChunk.code = 0; - bool ignoreEndianFlag = true; - - //we always want to swap here - - int seek = getNextBlock(&dataChunk, dataPtr, mFlags); - //dataPtr += ChunkUtils::getOffset(mFlags); - char *dataPtrHead = 0; - - while (1) - { - // one behind - if (dataChunk.code == B3_SDNA || dataChunk.code == B3_DNA1 || dataChunk.code == B3_TYPE || dataChunk.code == B3_TLEN || dataChunk.code == B3_STRC) - { - swapDNA(dataPtr); - break; - } - else - { - //if (dataChunk.code == DNA1) break; - dataPtrHead = dataPtr + ChunkUtils::getOffset(mFlags); - - swapLen(dataPtr); - if (dataChunk.dna_nr >= 0) - { - swap(dataPtrHead, dataChunk, ignoreEndianFlag); - } - else - { - //printf("unknown chunk\n"); - } - } - - // next please! - dataPtr += seek; - - seek = getNextBlock(&dataChunk, dataPtr, mFlags); - if (seek < 0) - break; - } - - if (mFlags & FD_ENDIAN_SWAP) - { - mFlags &= ~FD_ENDIAN_SWAP; - } - else - { - mFlags |= FD_ENDIAN_SWAP; - } -} - -// ----------------------------------------------------- // -char *bFile::readStruct(char *head, bChunkInd &dataChunk) -{ - bool ignoreEndianFlag = false; - - if (mFlags & FD_ENDIAN_SWAP) - swap(head, dataChunk, ignoreEndianFlag); - - if (!mFileDNA->flagEqual(dataChunk.dna_nr)) - { - // Ouch! need to rebuild the struct - short *oldStruct, *curStruct; - char *oldType, *newType; - int oldLen, curLen, reverseOld; - - oldStruct = mFileDNA->getStruct(dataChunk.dna_nr); - oldType = mFileDNA->getType(oldStruct[0]); - - oldLen = mFileDNA->getLength(oldStruct[0]); - - if ((mFlags & FD_BROKEN_DNA) != 0) - { - if ((strcmp(oldType, "b3QuantizedBvhNodeData") == 0) && oldLen == 20) - { - return 0; - } - if ((strcmp(oldType, "b3ShortIntIndexData") == 0)) - { - int allocLen = 2; - char *dataAlloc = new char[(dataChunk.nr * allocLen) + 1]; - memset(dataAlloc, 0, (dataChunk.nr * allocLen) + 1); - short *dest = (short *)dataAlloc; - const short *src = (short *)head; - for (int i = 0; i < dataChunk.nr; i++) - { - dest[i] = src[i]; - if (mFlags & FD_ENDIAN_SWAP) - { - B3_SWITCH_SHORT(dest[i]); - } - } - addDataBlock(dataAlloc); - return dataAlloc; - } - } - - ///don't try to convert Link block data, just memcpy it. Other data can be converted. - if (strcmp("Link", oldType) != 0) - { - reverseOld = mMemoryDNA->getReverseType(oldType); - - if ((reverseOld != -1)) - { - // make sure it's here - //assert(reverseOld!= -1 && "getReverseType() returned -1, struct required!"); - - // - curStruct = mMemoryDNA->getStruct(reverseOld); - newType = mMemoryDNA->getType(curStruct[0]); - curLen = mMemoryDNA->getLength(curStruct[0]); - - // make sure it's the same - assert((strcmp(oldType, newType) == 0) && "internal error, struct mismatch!"); - - // numBlocks * length - - int allocLen = (curLen); - char *dataAlloc = new char[(dataChunk.nr * allocLen) + 1]; - memset(dataAlloc, 0, (dataChunk.nr * allocLen)); - - // track allocated - addDataBlock(dataAlloc); - - char *cur = dataAlloc; - char *old = head; - for (int block = 0; block < dataChunk.nr; block++) - { - bool fixupPointers = true; - parseStruct(cur, old, dataChunk.dna_nr, reverseOld, fixupPointers); - mLibPointers.insert(old, (bStructHandle *)cur); - - cur += curLen; - old += oldLen; - } - return dataAlloc; - } - } - else - { - //printf("Link found\n"); - } - } - else - { -//#define DEBUG_EQUAL_STRUCTS -#ifdef DEBUG_EQUAL_STRUCTS - short *oldStruct; - char *oldType; - oldStruct = mFileDNA->getStruct(dataChunk.dna_nr); - oldType = mFileDNA->getType(oldStruct[0]); - printf("%s equal structure, just memcpy\n", oldType); -#endif // - } - - char *dataAlloc = new char[(dataChunk.len) + 1]; - memset(dataAlloc, 0, dataChunk.len + 1); - - // track allocated - addDataBlock(dataAlloc); - - memcpy(dataAlloc, head, dataChunk.len); - return dataAlloc; -} - -// ----------------------------------------------------- // -void bFile::parseStruct(char *strcPtr, char *dtPtr, int old_dna, int new_dna, bool fixupPointers) -{ - if (old_dna == -1) return; - if (new_dna == -1) return; - - //disable this, because we need to fixup pointers/ListBase - if (0) //mFileDNA->flagEqual(old_dna)) - { - short *strc = mFileDNA->getStruct(old_dna); - int len = mFileDNA->getLength(strc[0]); - - memcpy(strcPtr, dtPtr, len); - return; - } - - // Ok, now build the struct - char *memType, *memName, *cpc, *cpo; - short *fileStruct, *filePtrOld, *memoryStruct, *firstStruct; - int elementLength, size, revType, old_nr, new_nr, fpLen; - short firstStructType; - - // File to memory lookup - memoryStruct = mMemoryDNA->getStruct(new_dna); - fileStruct = mFileDNA->getStruct(old_dna); - firstStruct = fileStruct; - - filePtrOld = fileStruct; - firstStructType = mMemoryDNA->getStruct(0)[0]; - - // Get number of elements - elementLength = memoryStruct[1]; - memoryStruct += 2; - - cpc = strcPtr; - cpo = 0; - for (int ele = 0; ele < elementLength; ele++, memoryStruct += 2) - { - memType = mMemoryDNA->getType(memoryStruct[0]); - memName = mMemoryDNA->getName(memoryStruct[1]); - - size = mMemoryDNA->getElementSize(memoryStruct[0], memoryStruct[1]); - revType = mMemoryDNA->getReverseType(memoryStruct[0]); - - if (revType != -1 && memoryStruct[0] >= firstStructType && memName[0] != '*') - { - cpo = getFileElement(firstStruct, memName, memType, dtPtr, &filePtrOld); - if (cpo) - { - int arrayLen = mFileDNA->getArraySizeNew(filePtrOld[1]); - old_nr = mFileDNA->getReverseType(memType); - new_nr = revType; - fpLen = mFileDNA->getElementSize(filePtrOld[0], filePtrOld[1]); - if (arrayLen == 1) - { - parseStruct(cpc, cpo, old_nr, new_nr, fixupPointers); - } - else - { - char *tmpCpc = cpc; - char *tmpCpo = cpo; - - for (int i = 0; i < arrayLen; i++) - { - parseStruct(tmpCpc, tmpCpo, old_nr, new_nr, fixupPointers); - tmpCpc += size / arrayLen; - tmpCpo += fpLen / arrayLen; - } - } - cpc += size; - cpo += fpLen; - } - else - cpc += size; - } - else - { - getMatchingFileDNA(fileStruct, memName, memType, cpc, dtPtr, fixupPointers); - cpc += size; - } - } -} - -// ----------------------------------------------------- // -static void getElement(int arrayLen, const char *cur, const char *old, char *oldPtr, char *curData) -{ -#define b3GetEle(value, current, type, cast, size, ptr) \ - if (strcmp(current, type) == 0) \ - { \ - value = (*(cast *)ptr); \ - ptr += size; \ - } - -#define b3SetEle(value, current, type, cast, size, ptr) \ - if (strcmp(current, type) == 0) \ - { \ - (*(cast *)ptr) = (cast)value; \ - ptr += size; \ - } - double value = 0.0; - - for (int i = 0; i < arrayLen; i++) - { - b3GetEle(value, old, "char", char, sizeof(char), oldPtr); - b3SetEle(value, cur, "char", char, sizeof(char), curData); - b3GetEle(value, old, "short", short, sizeof(short), oldPtr); - b3SetEle(value, cur, "short", short, sizeof(short), curData); - b3GetEle(value, old, "ushort", unsigned short, sizeof(unsigned short), oldPtr); - b3SetEle(value, cur, "ushort", unsigned short, sizeof(unsigned short), curData); - b3GetEle(value, old, "int", int, sizeof(int), oldPtr); - b3SetEle(value, cur, "int", int, sizeof(int), curData); - b3GetEle(value, old, "long", int, sizeof(int), oldPtr); - b3SetEle(value, cur, "long", int, sizeof(int), curData); - b3GetEle(value, old, "float", float, sizeof(float), oldPtr); - b3SetEle(value, cur, "float", float, sizeof(float), curData); - b3GetEle(value, old, "double", double, sizeof(double), oldPtr); - b3SetEle(value, cur, "double", double, sizeof(double), curData); - } -} - -// ----------------------------------------------------- // -void bFile::swapData(char *data, short type, int arraySize, bool ignoreEndianFlag) -{ - if (ignoreEndianFlag || (mFlags & FD_ENDIAN_SWAP)) - { - if (type == 2 || type == 3) - { - short *sp = (short *)data; - for (int i = 0; i < arraySize; i++) - { - sp[0] = ChunkUtils::swapShort(sp[0]); - sp++; - } - } - if (type > 3 && type < 8) - { - char c; - char *cp = data; - for (int i = 0; i < arraySize; i++) - { - c = cp[0]; - cp[0] = cp[3]; - cp[3] = c; - c = cp[1]; - cp[1] = cp[2]; - cp[2] = c; - cp += 4; - } - } - } -} - -void bFile::safeSwapPtr(char *dst, const char *src) -{ - if (!src || !dst) - return; - - int ptrFile = mFileDNA->getPointerSize(); - int ptrMem = mMemoryDNA->getPointerSize(); - - if (ptrFile == ptrMem) - { - memcpy(dst, src, ptrMem); - } - else if (ptrMem == 4 && ptrFile == 8) - { - b3PointerUid *oldPtr = (b3PointerUid *)src; - b3PointerUid *newPtr = (b3PointerUid *)dst; - - if (oldPtr->m_uniqueIds[0] == oldPtr->m_uniqueIds[1]) - { - //Bullet stores the 32bit unique ID in both upper and lower part of 64bit pointers - //so it can be used to distinguish between .blend and .bullet - newPtr->m_uniqueIds[0] = oldPtr->m_uniqueIds[0]; - } - else - { - //deal with pointers the Blender .blend style way, see - //readfile.c in the Blender source tree - b3Long64 longValue = *((b3Long64 *)src); - //endian swap for 64bit pointer otherwise truncation will fail due to trailing zeros - if (mFlags & FD_ENDIAN_SWAP) - B3_SWITCH_LONGINT(longValue); - *((int *)dst) = (int)(longValue >> 3); - } - } - else if (ptrMem == 8 && ptrFile == 4) - { - b3PointerUid *oldPtr = (b3PointerUid *)src; - b3PointerUid *newPtr = (b3PointerUid *)dst; - if (oldPtr->m_uniqueIds[0] == oldPtr->m_uniqueIds[1]) - { - newPtr->m_uniqueIds[0] = oldPtr->m_uniqueIds[0]; - newPtr->m_uniqueIds[1] = 0; - } - else - { - *((b3Long64 *)dst) = *((int *)src); - } - } - else - { - printf("%d %d\n", ptrFile, ptrMem); - assert(0 && "Invalid pointer len"); - } -} - -// ----------------------------------------------------- // -void bFile::getMatchingFileDNA(short *dna_addr, const char *lookupName, const char *lookupType, char *strcData, char *data, bool fixupPointers) -{ - // find the matching memory dna data - // to the file being loaded. Fill the - // memory with the file data... - - int len = dna_addr[1]; - dna_addr += 2; - - for (int i = 0; i < len; i++, dna_addr += 2) - { - const char *type = mFileDNA->getType(dna_addr[0]); - const char *name = mFileDNA->getName(dna_addr[1]); - - int eleLen = mFileDNA->getElementSize(dna_addr[0], dna_addr[1]); - - if ((mFlags & FD_BROKEN_DNA) != 0) - { - if ((strcmp(type, "short") == 0) && (strcmp(name, "int") == 0)) - { - eleLen = 0; - } - } - - if (strcmp(lookupName, name) == 0) - { - //int arrayLenold = mFileDNA->getArraySize((char*)name.c_str()); - int arrayLen = mFileDNA->getArraySizeNew(dna_addr[1]); - //assert(arrayLenold == arrayLen); - - if (name[0] == '*') - { - // cast pointers - int ptrFile = mFileDNA->getPointerSize(); - int ptrMem = mMemoryDNA->getPointerSize(); - safeSwapPtr(strcData, data); - - if (fixupPointers) - { - if (arrayLen > 1) - { - //void **sarray = (void**)strcData; - //void **darray = (void**)data; - - char *cpc, *cpo; - cpc = (char *)strcData; - cpo = (char *)data; - - for (int a = 0; a < arrayLen; a++) - { - safeSwapPtr(cpc, cpo); - m_pointerFixupArray.push_back(cpc); - cpc += ptrMem; - cpo += ptrFile; - } - } - else - { - if (name[1] == '*') - m_pointerPtrFixupArray.push_back(strcData); - else - m_pointerFixupArray.push_back(strcData); - } - } - else - { - // printf("skipped %s %s : %x\n",type.c_str(),name.c_str(),strcData); - } - } - - else if (strcmp(type, lookupType) == 0) - memcpy(strcData, data, eleLen); - else - getElement(arrayLen, lookupType, type, data, strcData); - - // -- - return; - } - data += eleLen; - } -} - -// ----------------------------------------------------- // -char *bFile::getFileElement(short *firstStruct, char *lookupName, char *lookupType, char *data, short **foundPos) -{ - short *old = firstStruct; //mFileDNA->getStruct(old_nr); - int elementLength = old[1]; - old += 2; - - for (int i = 0; i < elementLength; i++, old += 2) - { - char *type = mFileDNA->getType(old[0]); - char *name = mFileDNA->getName(old[1]); - int len = mFileDNA->getElementSize(old[0], old[1]); - - if (strcmp(lookupName, name) == 0) - { - if (strcmp(type, lookupType) == 0) - { - if (foundPos) - *foundPos = old; - return data; - } - return 0; - } - data += len; - } - return 0; -} - -// ----------------------------------------------------- // -void bFile::swapStruct(int dna_nr, char *data, bool ignoreEndianFlag) -{ - if (dna_nr == -1) return; - - short *strc = mFileDNA->getStruct(dna_nr); - //short *firstStrc = strc; - - int elementLen = strc[1]; - strc += 2; - - short first = mFileDNA->getStruct(0)[0]; - - char *buf = data; - for (int i = 0; i < elementLen; i++, strc += 2) - { - char *type = mFileDNA->getType(strc[0]); - char *name = mFileDNA->getName(strc[1]); - - int size = mFileDNA->getElementSize(strc[0], strc[1]); - if (strc[0] >= first && name[0] != '*') - { - int old_nr = mFileDNA->getReverseType(type); - int arrayLen = mFileDNA->getArraySizeNew(strc[1]); - if (arrayLen == 1) - { - swapStruct(old_nr, buf, ignoreEndianFlag); - } - else - { - char *tmpBuf = buf; - for (int i = 0; i < arrayLen; i++) - { - swapStruct(old_nr, tmpBuf, ignoreEndianFlag); - tmpBuf += size / arrayLen; - } - } - } - else - { - //int arrayLenOld = mFileDNA->getArraySize(name); - int arrayLen = mFileDNA->getArraySizeNew(strc[1]); - //assert(arrayLenOld == arrayLen); - swapData(buf, strc[0], arrayLen, ignoreEndianFlag); - } - buf += size; - } -} - -void bFile::resolvePointersMismatch() -{ - // printf("resolvePointersStructMismatch\n"); - - int i; - - for (i = 0; i < m_pointerFixupArray.size(); i++) - { - char *cur = m_pointerFixupArray.at(i); - void **ptrptr = (void **)cur; - void *ptr = *ptrptr; - ptr = findLibPointer(ptr); - if (ptr) - { - //printf("Fixup pointer!\n"); - *(ptrptr) = ptr; - } - else - { - // printf("pointer not found: %x\n",cur); - } - } - - for (i = 0; i < m_pointerPtrFixupArray.size(); i++) - { - char *cur = m_pointerPtrFixupArray.at(i); - void **ptrptr = (void **)cur; - - bChunkInd *block = m_chunkPtrPtrMap.find(*ptrptr); - if (block) - { - int ptrMem = mMemoryDNA->getPointerSize(); - int ptrFile = mFileDNA->getPointerSize(); - - int blockLen = block->len / ptrFile; - - void *onptr = findLibPointer(*ptrptr); - if (onptr) - { - char *newPtr = new char[blockLen * ptrMem]; - addDataBlock(newPtr); - memset(newPtr, 0, blockLen * ptrMem); - - void **onarray = (void **)onptr; - char *oldPtr = (char *)onarray; - - int p = 0; - while (blockLen-- > 0) - { - b3PointerUid dp = {{0}}; - safeSwapPtr((char *)dp.m_uniqueIds, oldPtr); - - void **tptr = (void **)(newPtr + p * ptrMem); - *tptr = findLibPointer(dp.m_ptr); - - oldPtr += ptrFile; - ++p; - } - - *ptrptr = newPtr; - } - } - } -} - -///this loop only works fine if the Blender DNA structure of the file matches the headerfiles -void bFile::resolvePointersChunk(const bChunkInd &dataChunk, int verboseMode) -{ - bParse::bDNA *fileDna = mFileDNA ? mFileDNA : mMemoryDNA; - - short int *oldStruct = fileDna->getStruct(dataChunk.dna_nr); - short oldLen = fileDna->getLength(oldStruct[0]); - //char* structType = fileDna->getType(oldStruct[0]); - - char *cur = (char *)findLibPointer(dataChunk.oldPtr); - for (int block = 0; block < dataChunk.nr; block++) - { - resolvePointersStructRecursive(cur, dataChunk.dna_nr, verboseMode, 1); - cur += oldLen; - } -} - -int bFile::resolvePointersStructRecursive(char *strcPtr, int dna_nr, int verboseMode, int recursion) -{ - bParse::bDNA *fileDna = mFileDNA ? mFileDNA : mMemoryDNA; - - char *memType; - char *memName; - short firstStructType = fileDna->getStruct(0)[0]; - - char *elemPtr = strcPtr; - - short int *oldStruct = fileDna->getStruct(dna_nr); - - int elementLength = oldStruct[1]; - oldStruct += 2; - - int totalSize = 0; - - for (int ele = 0; ele < elementLength; ele++, oldStruct += 2) - { - memType = fileDna->getType(oldStruct[0]); - memName = fileDna->getName(oldStruct[1]); - - int arrayLen = fileDna->getArraySizeNew(oldStruct[1]); - if (memName[0] == '*') - { - if (arrayLen > 1) - { - void **array = (void **)elemPtr; - for (int a = 0; a < arrayLen; a++) - { - if (verboseMode & FD_VERBOSE_EXPORT_XML) - { - for (int i = 0; i < recursion; i++) - { - printf(" "); - } - //skip the * - printf("<%s type=\"pointer\"> ", &memName[1]); - printf("%p ", array[a]); - printf("</%s>\n", &memName[1]); - } - - array[a] = findLibPointer(array[a]); - } - } - else - { - void **ptrptr = (void **)elemPtr; - void *ptr = *ptrptr; - if (verboseMode & FD_VERBOSE_EXPORT_XML) - { - for (int i = 0; i < recursion; i++) - { - printf(" "); - } - printf("<%s type=\"pointer\"> ", &memName[1]); - printf("%p ", ptr); - printf("</%s>\n", &memName[1]); - } - ptr = findLibPointer(ptr); - - if (ptr) - { - // printf("Fixup pointer at 0x%x from 0x%x to 0x%x!\n",ptrptr,*ptrptr,ptr); - *(ptrptr) = ptr; - if (memName[1] == '*' && ptrptr && *ptrptr) - { - // This will only work if the given **array is continuous - void **array = (void **)*(ptrptr); - void *np = array[0]; - int n = 0; - while (np) - { - np = findLibPointer(array[n]); - if (np) array[n] = np; - n++; - } - } - } - else - { - // printf("Cannot fixup pointer at 0x%x from 0x%x to 0x%x!\n",ptrptr,*ptrptr,ptr); - } - } - } - else - { - int revType = fileDna->getReverseType(oldStruct[0]); - if (oldStruct[0] >= firstStructType) //revType != -1 && - { - char cleanName[MAX_STRLEN]; - getCleanName(memName, cleanName); - - int arrayLen = fileDna->getArraySizeNew(oldStruct[1]); - int byteOffset = 0; - - if (verboseMode & FD_VERBOSE_EXPORT_XML) - { - for (int i = 0; i < recursion; i++) - { - printf(" "); - } - - if (arrayLen > 1) - { - printf("<%s type=\"%s\" count=%d>\n", cleanName, memType, arrayLen); - } - else - { - printf("<%s type=\"%s\">\n", cleanName, memType); - } - } - - for (int i = 0; i < arrayLen; i++) - { - byteOffset += resolvePointersStructRecursive(elemPtr + byteOffset, revType, verboseMode, recursion + 1); - } - if (verboseMode & FD_VERBOSE_EXPORT_XML) - { - for (int i = 0; i < recursion; i++) - { - printf(" "); - } - printf("</%s>\n", cleanName); - } - } - else - { - //export a simple type - if (verboseMode & FD_VERBOSE_EXPORT_XML) - { - if (arrayLen > MAX_ARRAY_LENGTH) - { - printf("too long\n"); - } - else - { - //printf("%s %s\n",memType,memName); - - bool isIntegerType = (strcmp(memType, "char") == 0) || (strcmp(memType, "int") == 0) || (strcmp(memType, "short") == 0); - - if (isIntegerType) - { - const char *newtype = "int"; - int dbarray[MAX_ARRAY_LENGTH]; - int *dbPtr = 0; - char *tmp = elemPtr; - dbPtr = &dbarray[0]; - if (dbPtr) - { - char cleanName[MAX_STRLEN]; - getCleanName(memName, cleanName); - - int i; - getElement(arrayLen, newtype, memType, tmp, (char *)dbPtr); - for (i = 0; i < recursion; i++) - printf(" "); - if (arrayLen == 1) - printf("<%s type=\"%s\">", cleanName, memType); - else - printf("<%s type=\"%s\" count=%d>", cleanName, memType, arrayLen); - for (i = 0; i < arrayLen; i++) - printf(" %d ", dbPtr[i]); - printf("</%s>\n", cleanName); - } - } - else - { - const char *newtype = "double"; - double dbarray[MAX_ARRAY_LENGTH]; - double *dbPtr = 0; - char *tmp = elemPtr; - dbPtr = &dbarray[0]; - if (dbPtr) - { - int i; - getElement(arrayLen, newtype, memType, tmp, (char *)dbPtr); - for (i = 0; i < recursion; i++) - printf(" "); - char cleanName[MAX_STRLEN]; - getCleanName(memName, cleanName); - - if (arrayLen == 1) - { - printf("<%s type=\"%s\">", memName, memType); - } - else - { - printf("<%s type=\"%s\" count=%d>", cleanName, memType, arrayLen); - } - for (i = 0; i < arrayLen; i++) - printf(" %f ", dbPtr[i]); - printf("</%s>\n", cleanName); - } - } - } - } - } - } - - int size = fileDna->getElementSize(oldStruct[0], oldStruct[1]); - totalSize += size; - elemPtr += size; - } - - return totalSize; -} - -///Resolve pointers replaces the original pointers in structures, and linked lists by the new in-memory structures -void bFile::resolvePointers(int verboseMode) -{ - bParse::bDNA *fileDna = mFileDNA ? mFileDNA : mMemoryDNA; - - //char *dataPtr = mFileBuffer+mDataStart; - - if (1) //mFlags & (FD_BITS_VARIES | FD_VERSION_VARIES)) - { - resolvePointersMismatch(); - } - - { - if (verboseMode & FD_VERBOSE_EXPORT_XML) - { - printf("<?xml version=\"1.0\" encoding=\"utf-8\"?>\n"); - int numitems = m_chunks.size(); - printf("<bullet_physics version=%d itemcount = %d>\n", b3GetVersion(), numitems); - } - for (int i = 0; i < m_chunks.size(); i++) - { - const bChunkInd &dataChunk = m_chunks.at(i); - - if (!mFileDNA || fileDna->flagEqual(dataChunk.dna_nr)) - { - //dataChunk.len - short int *oldStruct = fileDna->getStruct(dataChunk.dna_nr); - char *oldType = fileDna->getType(oldStruct[0]); - - if (verboseMode & FD_VERBOSE_EXPORT_XML) - printf(" <%s pointer=%p>\n", oldType, dataChunk.oldPtr); - - resolvePointersChunk(dataChunk, verboseMode); - - if (verboseMode & FD_VERBOSE_EXPORT_XML) - printf(" </%s>\n", oldType); - } - else - { - //printf("skipping mStruct\n"); - } - } - if (verboseMode & FD_VERBOSE_EXPORT_XML) - { - printf("</bullet_physics>\n"); - } - } -} - -// ----------------------------------------------------- // -void *bFile::findLibPointer(void *ptr) -{ - bStructHandle **ptrptr = getLibPointers().find(ptr); - if (ptrptr) - return *ptrptr; - return 0; -} - -void bFile::updateOldPointers() -{ - int i; - - for (i = 0; i < m_chunks.size(); i++) - { - bChunkInd &dataChunk = m_chunks[i]; - dataChunk.oldPtr = findLibPointer(dataChunk.oldPtr); - } -} -void bFile::dumpChunks(bParse::bDNA *dna) -{ - int i; - - for (i = 0; i < m_chunks.size(); i++) - { - bChunkInd &dataChunk = m_chunks[i]; - char *codeptr = (char *)&dataChunk.code; - char codestr[5] = {codeptr[0], codeptr[1], codeptr[2], codeptr[3], 0}; - - short *newStruct = dna->getStruct(dataChunk.dna_nr); - char *typeName = dna->getType(newStruct[0]); - printf("%3d: %s ", i, typeName); - - printf("code=%s ", codestr); - - printf("ptr=%p ", dataChunk.oldPtr); - printf("len=%d ", dataChunk.len); - printf("nr=%d ", dataChunk.nr); - if (dataChunk.nr != 1) - { - printf("not 1\n"); - } - printf("\n"); - } - -#if 0 - IDFinderData ifd; - ifd.success = 0; - ifd.IDname = NULL; - ifd.just_print_it = 1; - for (i=0; i<bf->m_blocks.size(); ++i) - { - BlendBlock* bb = bf->m_blocks[i]; - printf("tag='%s'\tptr=%p\ttype=%s\t[%4d]", bb->tag, bb,bf->types[bb->type_index].name,bb->m_array_entries_.size()); - block_ID_finder(bb, bf, &ifd); - printf("\n"); - } -#endif -} - -void bFile::writeChunks(FILE *fp, bool fixupPointers) -{ - bParse::bDNA *fileDna = mFileDNA ? mFileDNA : mMemoryDNA; - - for (int i = 0; i < m_chunks.size(); i++) - { - bChunkInd &dataChunk = m_chunks.at(i); - - // Ouch! need to rebuild the struct - short *oldStruct, *curStruct; - char *oldType, *newType; - int oldLen, curLen, reverseOld; - - oldStruct = fileDna->getStruct(dataChunk.dna_nr); - oldType = fileDna->getType(oldStruct[0]); - oldLen = fileDna->getLength(oldStruct[0]); - ///don't try to convert Link block data, just memcpy it. Other data can be converted. - reverseOld = mMemoryDNA->getReverseType(oldType); - - if ((reverseOld != -1)) - { - // make sure it's here - //assert(reverseOld!= -1 && "getReverseType() returned -1, struct required!"); - // - curStruct = mMemoryDNA->getStruct(reverseOld); - newType = mMemoryDNA->getType(curStruct[0]); - // make sure it's the same - assert((strcmp(oldType, newType) == 0) && "internal error, struct mismatch!"); - - curLen = mMemoryDNA->getLength(curStruct[0]); - dataChunk.dna_nr = reverseOld; - if (strcmp("Link", oldType) != 0) - { - dataChunk.len = curLen * dataChunk.nr; - } - else - { - // printf("keep length of link = %d\n",dataChunk.len); - } - - //write the structure header - fwrite(&dataChunk, sizeof(bChunkInd), 1, fp); - - short int *curStruct1; - curStruct1 = mMemoryDNA->getStruct(dataChunk.dna_nr); - assert(curStruct1 == curStruct); - - char *cur = fixupPointers ? (char *)findLibPointer(dataChunk.oldPtr) : (char *)dataChunk.oldPtr; - - //write the actual contents of the structure(s) - fwrite(cur, dataChunk.len, 1, fp); - } - else - { - printf("serious error, struct mismatch: don't write\n"); - } - } -} - -// ----------------------------------------------------- // -int bFile::getNextBlock(bChunkInd *dataChunk, const char *dataPtr, const int flags) -{ - bool swap = false; - bool varies = false; - - if (flags & FD_ENDIAN_SWAP) - swap = true; - if (flags & FD_BITS_VARIES) - varies = true; - - if (VOID_IS_8) - { - if (varies) - { - bChunkPtr4 head; - memcpy(&head, dataPtr, sizeof(bChunkPtr4)); - - bChunkPtr8 chunk; - - chunk.code = head.code; - chunk.len = head.len; - chunk.m_uniqueInts[0] = head.m_uniqueInt; - chunk.m_uniqueInts[1] = 0; - chunk.dna_nr = head.dna_nr; - chunk.nr = head.nr; - - if (swap) - { - if ((chunk.code & 0xFFFF) == 0) - chunk.code >>= 16; - - B3_SWITCH_INT(chunk.len); - B3_SWITCH_INT(chunk.dna_nr); - B3_SWITCH_INT(chunk.nr); - } - - memcpy(dataChunk, &chunk, sizeof(bChunkInd)); - } - else - { - bChunkPtr8 c; - memcpy(&c, dataPtr, sizeof(bChunkPtr8)); - - if (swap) - { - if ((c.code & 0xFFFF) == 0) - c.code >>= 16; - - B3_SWITCH_INT(c.len); - B3_SWITCH_INT(c.dna_nr); - B3_SWITCH_INT(c.nr); - } - - memcpy(dataChunk, &c, sizeof(bChunkInd)); - } - } - else - { - if (varies) - { - bChunkPtr8 head; - memcpy(&head, dataPtr, sizeof(bChunkPtr8)); - - bChunkPtr4 chunk; - chunk.code = head.code; - chunk.len = head.len; - - if (head.m_uniqueInts[0] == head.m_uniqueInts[1]) - { - chunk.m_uniqueInt = head.m_uniqueInts[0]; - } - else - { - b3Long64 oldPtr = 0; - memcpy(&oldPtr, &head.m_uniqueInts[0], 8); - if (swap) - B3_SWITCH_LONGINT(oldPtr); - chunk.m_uniqueInt = (int)(oldPtr >> 3); - } - - chunk.dna_nr = head.dna_nr; - chunk.nr = head.nr; - - if (swap) - { - if ((chunk.code & 0xFFFF) == 0) - chunk.code >>= 16; - - B3_SWITCH_INT(chunk.len); - B3_SWITCH_INT(chunk.dna_nr); - B3_SWITCH_INT(chunk.nr); - } - - memcpy(dataChunk, &chunk, sizeof(bChunkInd)); - } - else - { - bChunkPtr4 c; - memcpy(&c, dataPtr, sizeof(bChunkPtr4)); - - if (swap) - { - if ((c.code & 0xFFFF) == 0) - c.code >>= 16; - - B3_SWITCH_INT(c.len); - B3_SWITCH_INT(c.dna_nr); - B3_SWITCH_INT(c.nr); - } - memcpy(dataChunk, &c, sizeof(bChunkInd)); - } - } - - if (dataChunk->len < 0) - return -1; - -#if 0 - print ("----------"); - print (dataChunk->code); - print (dataChunk->len); - print (dataChunk->old); - print (dataChunk->dna_nr); - print (dataChunk->nr); -#endif - return (dataChunk->len + ChunkUtils::getOffset(flags)); -} - -//eof diff --git a/thirdparty/bullet/Bullet3Serialize/Bullet2FileLoader/b3File.h b/thirdparty/bullet/Bullet3Serialize/Bullet2FileLoader/b3File.h deleted file mode 100644 index bda229cfbd..0000000000 --- a/thirdparty/bullet/Bullet3Serialize/Bullet2FileLoader/b3File.h +++ /dev/null @@ -1,158 +0,0 @@ -/* -bParse -Copyright (c) 2006-2009 Charlie C & Erwin Coumans http://gamekit.googlecode.com - -This software is provided 'as-is', without any express or implied warranty. -In no event will the authors be held liable for any damages arising from the use of this software. -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it freely, -subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. -*/ - -#ifndef __BFILE_H__ -#define __BFILE_H__ - -#include "b3Common.h" -#include "b3Chunk.h" -#include <stdio.h> - -namespace bParse -{ -// ----------------------------------------------------- // -enum bFileFlags -{ - FD_INVALID = 0, - FD_OK = 1, - FD_VOID_IS_8 = 2, - FD_ENDIAN_SWAP = 4, - FD_FILE_64 = 8, - FD_BITS_VARIES = 16, - FD_VERSION_VARIES = 32, - FD_DOUBLE_PRECISION = 64, - FD_BROKEN_DNA = 128 -}; - -enum bFileVerboseMode -{ - FD_VERBOSE_EXPORT_XML = 1, - FD_VERBOSE_DUMP_DNA_TYPE_DEFINITIONS = 2, - FD_VERBOSE_DUMP_CHUNKS = 4, - FD_VERBOSE_DUMP_FILE_INFO = 8, -}; -// ----------------------------------------------------- // -class bFile -{ -protected: - char m_headerString[7]; - - bool mOwnsBuffer; - char *mFileBuffer; - int mFileLen; - int mVersion; - - bPtrMap mLibPointers; - - int mDataStart; - bDNA *mFileDNA; - bDNA *mMemoryDNA; - - b3AlignedObjectArray<char *> m_pointerFixupArray; - b3AlignedObjectArray<char *> m_pointerPtrFixupArray; - - b3AlignedObjectArray<bChunkInd> m_chunks; - b3HashMap<b3HashPtr, bChunkInd> m_chunkPtrPtrMap; - - // - - bPtrMap mDataPointers; - - int mFlags; - - // //////////////////////////////////////////////////////////////////////////// - - // buffer offset util - int getNextBlock(bChunkInd *dataChunk, const char *dataPtr, const int flags); - void safeSwapPtr(char *dst, const char *src); - - virtual void parseHeader(); - - virtual void parseData() = 0; - - void resolvePointersMismatch(); - void resolvePointersChunk(const bChunkInd &dataChunk, int verboseMode); - - int resolvePointersStructRecursive(char *strcPtr, int old_dna, int verboseMode, int recursion); - //void swapPtr(char *dst, char *src); - - void parseStruct(char *strcPtr, char *dtPtr, int old_dna, int new_dna, bool fixupPointers); - void getMatchingFileDNA(short *old, const char *lookupName, const char *lookupType, char *strcData, char *data, bool fixupPointers); - char *getFileElement(short *firstStruct, char *lookupName, char *lookupType, char *data, short **foundPos); - - void swap(char *head, class bChunkInd &ch, bool ignoreEndianFlag); - void swapData(char *data, short type, int arraySize, bool ignoreEndianFlag); - void swapStruct(int dna_nr, char *data, bool ignoreEndianFlag); - void swapLen(char *dataPtr); - void swapDNA(char *ptr); - - char *readStruct(char *head, class bChunkInd &chunk); - char *getAsString(int code); - - void parseInternal(int verboseMode, char *memDna, int memDnaLength); - -public: - bFile(const char *filename, const char headerString[7]); - - //todo: make memoryBuffer const char - //bFile( const char *memoryBuffer, int len); - bFile(char *memoryBuffer, int len, const char headerString[7]); - virtual ~bFile(); - - bDNA *getFileDNA() - { - return mFileDNA; - } - - virtual void addDataBlock(char *dataBlock) = 0; - - int getFlags() const - { - return mFlags; - } - - bPtrMap &getLibPointers() - { - return mLibPointers; - } - - void *findLibPointer(void *ptr); - - bool ok(); - - virtual void parse(int verboseMode) = 0; - - virtual int write(const char *fileName, bool fixupPointers = false) = 0; - - virtual void writeChunks(FILE *fp, bool fixupPointers); - - virtual void writeDNA(FILE *fp) = 0; - - void updateOldPointers(); - void resolvePointers(int verboseMode); - - void dumpChunks(bDNA *dna); - - int getVersion() const - { - return mVersion; - } - //pre-swap the endianness, so that data loaded on a target with different endianness doesn't need to be swapped - void preSwap(); - void writeFile(const char *fileName); -}; -} // namespace bParse - -#endif //__BFILE_H__ diff --git a/thirdparty/bullet/Bullet3Serialize/Bullet2FileLoader/b3Serializer.cpp b/thirdparty/bullet/Bullet3Serialize/Bullet2FileLoader/b3Serializer.cpp deleted file mode 100644 index ea4a8e2007..0000000000 --- a/thirdparty/bullet/Bullet3Serialize/Bullet2FileLoader/b3Serializer.cpp +++ /dev/null @@ -1,18062 +0,0 @@ -char b3s_bulletDNAstr[] = { - char(83), - char(68), - char(78), - char(65), - char(78), - char(65), - char(77), - char(69), - char(63), - char(1), - char(0), - char(0), - char(109), - char(95), - char(115), - char(105), - char(122), - char(101), - char(0), - char(109), - char(95), - char(99), - char(97), - char(112), - char(97), - char(99), - char(105), - char(116), - char(121), - char(0), - char(42), - char(109), - char(95), - char(100), - char(97), - char(116), - char(97), - char(0), - char(109), - char(95), - char(99), - char(111), - char(108), - char(108), - char(105), - char(115), - char(105), - char(111), - char(110), - char(83), - char(104), - char(97), - char(112), - char(101), - char(115), - char(0), - char(109), - char(95), - char(99), - char(111), - char(108), - char(108), - char(105), - char(115), - char(105), - char(111), - char(110), - char(79), - char(98), - char(106), - char(101), - char(99), - char(116), - char(115), - char(0), - char(109), - char(95), - char(99), - char(111), - char(110), - char(115), - char(116), - char(114), - char(97), - char(105), - char(110), - char(116), - char(115), - char(0), - char(42), - char(102), - char(105), - char(114), - char(115), - char(116), - char(0), - char(42), - char(108), - char(97), - char(115), - char(116), - char(0), - char(109), - char(95), - char(102), - char(108), - char(111), - char(97), - char(116), - char(115), - char(91), - char(52), - char(93), - char(0), - char(109), - char(95), - char(101), - char(108), - char(91), - char(51), - char(93), - char(0), - char(109), - char(95), - char(98), - char(97), - char(115), - char(105), - char(115), - char(0), - char(109), - char(95), - char(111), - char(114), - char(105), - char(103), - char(105), - char(110), - char(0), - char(109), - char(95), - char(114), - char(111), - char(111), - char(116), - char(78), - char(111), - char(100), - char(101), - char(73), - char(110), - char(100), - char(101), - char(120), - char(0), - char(109), - char(95), - char(115), - char(117), - char(98), - char(116), - char(114), - char(101), - char(101), - char(83), - char(105), - char(122), - char(101), - char(0), - char(109), - char(95), - char(113), - char(117), - char(97), - char(110), - char(116), - char(105), - char(122), - char(101), - char(100), - char(65), - char(97), - char(98), - char(98), - char(77), - char(105), - char(110), - char(91), - char(51), - char(93), - char(0), - char(109), - char(95), - char(113), - char(117), - char(97), - char(110), - char(116), - char(105), - char(122), - char(101), - char(100), - char(65), - char(97), - char(98), - char(98), - char(77), - char(97), - char(120), - char(91), - char(51), - char(93), - char(0), - char(109), - char(95), - char(97), - char(97), - char(98), - char(98), - char(77), - char(105), - char(110), - char(79), - char(114), - char(103), - char(0), - char(109), - char(95), - char(97), - char(97), - char(98), - char(98), - char(77), - char(97), - char(120), - char(79), - char(114), - char(103), - char(0), - char(109), - char(95), - char(101), - char(115), - char(99), - char(97), - char(112), - char(101), - char(73), - char(110), - char(100), - char(101), - char(120), - char(0), - char(109), - char(95), - char(115), - char(117), - char(98), - char(80), - char(97), - char(114), - char(116), - char(0), - char(109), - char(95), - char(116), - char(114), - char(105), - char(97), - char(110), - char(103), - char(108), - char(101), - char(73), - char(110), - char(100), - char(101), - char(120), - char(0), - char(109), - char(95), - char(112), - char(97), - char(100), - char(91), - char(52), - char(93), - char(0), - char(109), - char(95), - char(101), - char(115), - char(99), - char(97), - char(112), - char(101), - char(73), - char(110), - char(100), - char(101), - char(120), - char(79), - char(114), - char(84), - char(114), - char(105), - char(97), - char(110), - char(103), - char(108), - char(101), - char(73), - char(110), - char(100), - char(101), - char(120), - char(0), - char(109), - char(95), - char(98), - char(118), - char(104), - char(65), - char(97), - char(98), - char(98), - char(77), - char(105), - char(110), - char(0), - char(109), - char(95), - char(98), - char(118), - char(104), - char(65), - char(97), - char(98), - char(98), - char(77), - char(97), - char(120), - char(0), - char(109), - char(95), - char(98), - char(118), - char(104), - char(81), - char(117), - char(97), - char(110), - char(116), - char(105), - char(122), - char(97), - char(116), - char(105), - char(111), - char(110), - char(0), - char(109), - char(95), - char(99), - char(117), - char(114), - char(78), - char(111), - char(100), - char(101), - char(73), - char(110), - char(100), - char(101), - char(120), - char(0), - char(109), - char(95), - char(117), - char(115), - char(101), - char(81), - char(117), - char(97), - char(110), - char(116), - char(105), - char(122), - char(97), - char(116), - char(105), - char(111), - char(110), - char(0), - char(109), - char(95), - char(110), - char(117), - char(109), - char(67), - char(111), - char(110), - char(116), - char(105), - char(103), - char(117), - char(111), - char(117), - char(115), - char(76), - char(101), - char(97), - char(102), - char(78), - char(111), - char(100), - char(101), - char(115), - char(0), - char(109), - char(95), - char(110), - char(117), - char(109), - char(81), - char(117), - char(97), - char(110), - char(116), - char(105), - char(122), - char(101), - char(100), - char(67), - char(111), - char(110), - char(116), - char(105), - char(103), - char(117), - char(111), - char(117), - char(115), - char(78), - char(111), - char(100), - char(101), - char(115), - char(0), - char(42), - char(109), - char(95), - char(99), - char(111), - char(110), - char(116), - char(105), - char(103), - char(117), - char(111), - char(117), - char(115), - char(78), - char(111), - char(100), - char(101), - char(115), - char(80), - char(116), - char(114), - char(0), - char(42), - char(109), - char(95), - char(113), - char(117), - char(97), - char(110), - char(116), - char(105), - char(122), - char(101), - char(100), - char(67), - char(111), - char(110), - char(116), - char(105), - char(103), - char(117), - char(111), - char(117), - char(115), - char(78), - char(111), - char(100), - char(101), - char(115), - char(80), - char(116), - char(114), - char(0), - char(42), - char(109), - char(95), - char(115), - char(117), - char(98), - char(84), - char(114), - char(101), - char(101), - char(73), - char(110), - char(102), - char(111), - char(80), - char(116), - char(114), - char(0), - char(109), - char(95), - char(116), - char(114), - char(97), - char(118), - char(101), - char(114), - char(115), - char(97), - char(108), - char(77), - char(111), - char(100), - char(101), - char(0), - char(109), - char(95), - char(110), - char(117), - char(109), - char(83), - char(117), - char(98), - char(116), - char(114), - char(101), - char(101), - char(72), - char(101), - char(97), - char(100), - char(101), - char(114), - char(115), - char(0), - char(42), - char(109), - char(95), - char(110), - char(97), - char(109), - char(101), - char(0), - char(109), - char(95), - char(115), - char(104), - char(97), - char(112), - char(101), - char(84), - char(121), - char(112), - char(101), - char(0), - char(109), - char(95), - char(112), - char(97), - char(100), - char(100), - char(105), - char(110), - char(103), - char(91), - char(52), - char(93), - char(0), - char(109), - char(95), - char(99), - char(111), - char(108), - char(108), - char(105), - char(115), - char(105), - char(111), - char(110), - char(83), - char(104), - char(97), - char(112), - char(101), - char(68), - char(97), - char(116), - char(97), - char(0), - char(109), - char(95), - char(108), - char(111), - char(99), - char(97), - char(108), - char(83), - char(99), - char(97), - char(108), - char(105), - char(110), - char(103), - char(0), - char(109), - char(95), - char(112), - char(108), - char(97), - char(110), - char(101), - char(78), - char(111), - char(114), - char(109), - char(97), - char(108), - char(0), - char(109), - char(95), - char(112), - char(108), - char(97), - char(110), - char(101), - char(67), - char(111), - char(110), - char(115), - char(116), - char(97), - char(110), - char(116), - char(0), - char(109), - char(95), - char(105), - char(109), - char(112), - char(108), - char(105), - char(99), - char(105), - char(116), - char(83), - char(104), - char(97), - char(112), - char(101), - char(68), - char(105), - char(109), - char(101), - char(110), - char(115), - char(105), - char(111), - char(110), - char(115), - char(0), - char(109), - char(95), - char(99), - char(111), - char(108), - char(108), - char(105), - char(115), - char(105), - char(111), - char(110), - char(77), - char(97), - char(114), - char(103), - char(105), - char(110), - char(0), - char(109), - char(95), - char(112), - char(97), - char(100), - char(100), - char(105), - char(110), - char(103), - char(0), - char(109), - char(95), - char(112), - char(111), - char(115), - char(0), - char(109), - char(95), - char(114), - char(97), - char(100), - char(105), - char(117), - char(115), - char(0), - char(109), - char(95), - char(99), - char(111), - char(110), - char(118), - char(101), - char(120), - char(73), - char(110), - char(116), - char(101), - char(114), - char(110), - char(97), - char(108), - char(83), - char(104), - char(97), - char(112), - char(101), - char(68), - char(97), - char(116), - char(97), - char(0), - char(42), - char(109), - char(95), - char(108), - char(111), - char(99), - char(97), - char(108), - char(80), - char(111), - char(115), - char(105), - char(116), - char(105), - char(111), - char(110), - char(65), - char(114), - char(114), - char(97), - char(121), - char(80), - char(116), - char(114), - char(0), - char(109), - char(95), - char(108), - char(111), - char(99), - char(97), - char(108), - char(80), - char(111), - char(115), - char(105), - char(116), - char(105), - char(111), - char(110), - char(65), - char(114), - char(114), - char(97), - char(121), - char(83), - char(105), - char(122), - char(101), - char(0), - char(109), - char(95), - char(118), - char(97), - char(108), - char(117), - char(101), - char(0), - char(109), - char(95), - char(112), - char(97), - char(100), - char(91), - char(50), - char(93), - char(0), - char(109), - char(95), - char(118), - char(97), - char(108), - char(117), - char(101), - char(115), - char(91), - char(51), - char(93), - char(0), - char(109), - char(95), - char(112), - char(97), - char(100), - char(0), - char(42), - char(109), - char(95), - char(118), - char(101), - char(114), - char(116), - char(105), - char(99), - char(101), - char(115), - char(51), - char(102), - char(0), - char(42), - char(109), - char(95), - char(118), - char(101), - char(114), - char(116), - char(105), - char(99), - char(101), - char(115), - char(51), - char(100), - char(0), - char(42), - char(109), - char(95), - char(105), - char(110), - char(100), - char(105), - char(99), - char(101), - char(115), - char(51), - char(50), - char(0), - char(42), - char(109), - char(95), - char(51), - char(105), - char(110), - char(100), - char(105), - char(99), - char(101), - char(115), - char(49), - char(54), - char(0), - char(42), - char(109), - char(95), - char(51), - char(105), - char(110), - char(100), - char(105), - char(99), - char(101), - char(115), - char(56), - char(0), - char(42), - char(109), - char(95), - char(105), - char(110), - char(100), - char(105), - char(99), - char(101), - char(115), - char(49), - char(54), - char(0), - char(109), - char(95), - char(110), - char(117), - char(109), - char(84), - char(114), - char(105), - char(97), - char(110), - char(103), - char(108), - char(101), - char(115), - char(0), - char(109), - char(95), - char(110), - char(117), - char(109), - char(86), - char(101), - char(114), - char(116), - char(105), - char(99), - char(101), - char(115), - char(0), - char(42), - char(109), - char(95), - char(109), - char(101), - char(115), - char(104), - char(80), - char(97), - char(114), - char(116), - char(115), - char(80), - char(116), - char(114), - char(0), - char(109), - char(95), - char(115), - char(99), - char(97), - char(108), - char(105), - char(110), - char(103), - char(0), - char(109), - char(95), - char(110), - char(117), - char(109), - char(77), - char(101), - char(115), - char(104), - char(80), - char(97), - char(114), - char(116), - char(115), - char(0), - char(109), - char(95), - char(109), - char(101), - char(115), - char(104), - char(73), - char(110), - char(116), - char(101), - char(114), - char(102), - char(97), - char(99), - char(101), - char(0), - char(42), - char(109), - char(95), - char(113), - char(117), - char(97), - char(110), - char(116), - char(105), - char(122), - char(101), - char(100), - char(70), - char(108), - char(111), - char(97), - char(116), - char(66), - char(118), - char(104), - char(0), - char(42), - char(109), - char(95), - char(113), - char(117), - char(97), - char(110), - char(116), - char(105), - char(122), - char(101), - char(100), - char(68), - char(111), - char(117), - char(98), - char(108), - char(101), - char(66), - char(118), - char(104), - char(0), - char(42), - char(109), - char(95), - char(116), - char(114), - char(105), - char(97), - char(110), - char(103), - char(108), - char(101), - char(73), - char(110), - char(102), - char(111), - char(77), - char(97), - char(112), - char(0), - char(109), - char(95), - char(112), - char(97), - char(100), - char(51), - char(91), - char(52), - char(93), - char(0), - char(109), - char(95), - char(116), - char(114), - char(105), - char(109), - char(101), - char(115), - char(104), - char(83), - char(104), - char(97), - char(112), - char(101), - char(68), - char(97), - char(116), - char(97), - char(0), - char(109), - char(95), - char(116), - char(114), - char(97), - char(110), - char(115), - char(102), - char(111), - char(114), - char(109), - char(0), - char(42), - char(109), - char(95), - char(99), - char(104), - char(105), - char(108), - char(100), - char(83), - char(104), - char(97), - char(112), - char(101), - char(0), - char(109), - char(95), - char(99), - char(104), - char(105), - char(108), - char(100), - char(83), - char(104), - char(97), - char(112), - char(101), - char(84), - char(121), - char(112), - char(101), - char(0), - char(109), - char(95), - char(99), - char(104), - char(105), - char(108), - char(100), - char(77), - char(97), - char(114), - char(103), - char(105), - char(110), - char(0), - char(42), - char(109), - char(95), - char(99), - char(104), - char(105), - char(108), - char(100), - char(83), - char(104), - char(97), - char(112), - char(101), - char(80), - char(116), - char(114), - char(0), - char(109), - char(95), - char(110), - char(117), - char(109), - char(67), - char(104), - char(105), - char(108), - char(100), - char(83), - char(104), - char(97), - char(112), - char(101), - char(115), - char(0), - char(109), - char(95), - char(117), - char(112), - char(65), - char(120), - char(105), - char(115), - char(0), - char(109), - char(95), - char(102), - char(108), - char(97), - char(103), - char(115), - char(0), - char(109), - char(95), - char(101), - char(100), - char(103), - char(101), - char(86), - char(48), - char(86), - char(49), - char(65), - char(110), - char(103), - char(108), - char(101), - char(0), - char(109), - char(95), - char(101), - char(100), - char(103), - char(101), - char(86), - char(49), - char(86), - char(50), - char(65), - char(110), - char(103), - char(108), - char(101), - char(0), - char(109), - char(95), - char(101), - char(100), - char(103), - char(101), - char(86), - char(50), - char(86), - char(48), - char(65), - char(110), - char(103), - char(108), - char(101), - char(0), - char(42), - char(109), - char(95), - char(104), - char(97), - char(115), - char(104), - char(84), - char(97), - char(98), - char(108), - char(101), - char(80), - char(116), - char(114), - char(0), - char(42), - char(109), - char(95), - char(110), - char(101), - char(120), - char(116), - char(80), - char(116), - char(114), - char(0), - char(42), - char(109), - char(95), - char(118), - char(97), - char(108), - char(117), - char(101), - char(65), - char(114), - char(114), - char(97), - char(121), - char(80), - char(116), - char(114), - char(0), - char(42), - char(109), - char(95), - char(107), - char(101), - char(121), - char(65), - char(114), - char(114), - char(97), - char(121), - char(80), - char(116), - char(114), - char(0), - char(109), - char(95), - char(99), - char(111), - char(110), - char(118), - char(101), - char(120), - char(69), - char(112), - char(115), - char(105), - char(108), - char(111), - char(110), - char(0), - char(109), - char(95), - char(112), - char(108), - char(97), - char(110), - char(97), - char(114), - char(69), - char(112), - char(115), - char(105), - char(108), - char(111), - char(110), - char(0), - char(109), - char(95), - char(101), - char(113), - char(117), - char(97), - char(108), - char(86), - char(101), - char(114), - char(116), - char(101), - char(120), - char(84), - char(104), - char(114), - char(101), - char(115), - char(104), - char(111), - char(108), - char(100), - char(0), - char(109), - char(95), - char(101), - char(100), - char(103), - char(101), - char(68), - char(105), - char(115), - char(116), - char(97), - char(110), - char(99), - char(101), - char(84), - char(104), - char(114), - char(101), - char(115), - char(104), - char(111), - char(108), - char(100), - char(0), - char(109), - char(95), - char(122), - char(101), - char(114), - char(111), - char(65), - char(114), - char(101), - char(97), - char(84), - char(104), - char(114), - char(101), - char(115), - char(104), - char(111), - char(108), - char(100), - char(0), - char(109), - char(95), - char(110), - char(101), - char(120), - char(116), - char(83), - char(105), - char(122), - char(101), - char(0), - char(109), - char(95), - char(104), - char(97), - char(115), - char(104), - char(84), - char(97), - char(98), - char(108), - char(101), - char(83), - char(105), - char(122), - char(101), - char(0), - char(109), - char(95), - char(110), - char(117), - char(109), - char(86), - char(97), - char(108), - char(117), - char(101), - char(115), - char(0), - char(109), - char(95), - char(110), - char(117), - char(109), - char(75), - char(101), - char(121), - char(115), - char(0), - char(109), - char(95), - char(103), - char(105), - char(109), - char(112), - char(97), - char(99), - char(116), - char(83), - char(117), - char(98), - char(84), - char(121), - char(112), - char(101), - char(0), - char(42), - char(109), - char(95), - char(117), - char(110), - char(115), - char(99), - char(97), - char(108), - char(101), - char(100), - char(80), - char(111), - char(105), - char(110), - char(116), - char(115), - char(70), - char(108), - char(111), - char(97), - char(116), - char(80), - char(116), - char(114), - char(0), - char(42), - char(109), - char(95), - char(117), - char(110), - char(115), - char(99), - char(97), - char(108), - char(101), - char(100), - char(80), - char(111), - char(105), - char(110), - char(116), - char(115), - char(68), - char(111), - char(117), - char(98), - char(108), - char(101), - char(80), - char(116), - char(114), - char(0), - char(109), - char(95), - char(110), - char(117), - char(109), - char(85), - char(110), - char(115), - char(99), - char(97), - char(108), - char(101), - char(100), - char(80), - char(111), - char(105), - char(110), - char(116), - char(115), - char(0), - char(109), - char(95), - char(112), - char(97), - char(100), - char(100), - char(105), - char(110), - char(103), - char(51), - char(91), - char(52), - char(93), - char(0), - char(42), - char(109), - char(95), - char(98), - char(114), - char(111), - char(97), - char(100), - char(112), - char(104), - char(97), - char(115), - char(101), - char(72), - char(97), - char(110), - char(100), - char(108), - char(101), - char(0), - char(42), - char(109), - char(95), - char(99), - char(111), - char(108), - char(108), - char(105), - char(115), - char(105), - char(111), - char(110), - char(83), - char(104), - char(97), - char(112), - char(101), - char(0), - char(42), - char(109), - char(95), - char(114), - char(111), - char(111), - char(116), - char(67), - char(111), - char(108), - char(108), - char(105), - char(115), - char(105), - char(111), - char(110), - char(83), - char(104), - char(97), - char(112), - char(101), - char(0), - char(109), - char(95), - char(119), - char(111), - char(114), - char(108), - char(100), - char(84), - char(114), - char(97), - char(110), - char(115), - char(102), - char(111), - char(114), - char(109), - char(0), - char(109), - char(95), - char(105), - char(110), - char(116), - char(101), - char(114), - char(112), - char(111), - char(108), - char(97), - char(116), - char(105), - char(111), - char(110), - char(87), - char(111), - char(114), - char(108), - char(100), - char(84), - char(114), - char(97), - char(110), - char(115), - char(102), - char(111), - char(114), - char(109), - char(0), - char(109), - char(95), - char(105), - char(110), - char(116), - char(101), - char(114), - char(112), - char(111), - char(108), - char(97), - char(116), - char(105), - char(111), - char(110), - char(76), - char(105), - char(110), - char(101), - char(97), - char(114), - char(86), - char(101), - char(108), - char(111), - char(99), - char(105), - char(116), - char(121), - char(0), - char(109), - char(95), - char(105), - char(110), - char(116), - char(101), - char(114), - char(112), - char(111), - char(108), - char(97), - char(116), - char(105), - char(111), - char(110), - char(65), - char(110), - char(103), - char(117), - char(108), - char(97), - char(114), - char(86), - char(101), - char(108), - char(111), - char(99), - char(105), - char(116), - char(121), - char(0), - char(109), - char(95), - char(97), - char(110), - char(105), - char(115), - char(111), - char(116), - char(114), - char(111), - char(112), - char(105), - char(99), - char(70), - char(114), - char(105), - char(99), - char(116), - char(105), - char(111), - char(110), - char(0), - char(109), - char(95), - char(99), - char(111), - char(110), - char(116), - char(97), - char(99), - char(116), - char(80), - char(114), - char(111), - char(99), - char(101), - char(115), - char(115), - char(105), - char(110), - char(103), - char(84), - char(104), - char(114), - char(101), - char(115), - char(104), - char(111), - char(108), - char(100), - char(0), - char(109), - char(95), - char(100), - char(101), - char(97), - char(99), - char(116), - char(105), - char(118), - char(97), - char(116), - char(105), - char(111), - char(110), - char(84), - char(105), - char(109), - char(101), - char(0), - char(109), - char(95), - char(102), - char(114), - char(105), - char(99), - char(116), - char(105), - char(111), - char(110), - char(0), - char(109), - char(95), - char(114), - char(111), - char(108), - char(108), - char(105), - char(110), - char(103), - char(70), - char(114), - char(105), - char(99), - char(116), - char(105), - char(111), - char(110), - char(0), - char(109), - char(95), - char(114), - char(101), - char(115), - char(116), - char(105), - char(116), - char(117), - char(116), - char(105), - char(111), - char(110), - char(0), - char(109), - char(95), - char(104), - char(105), - char(116), - char(70), - char(114), - char(97), - char(99), - char(116), - char(105), - char(111), - char(110), - char(0), - char(109), - char(95), - char(99), - char(99), - char(100), - char(83), - char(119), - char(101), - char(112), - char(116), - char(83), - char(112), - char(104), - char(101), - char(114), - char(101), - char(82), - char(97), - char(100), - char(105), - char(117), - char(115), - char(0), - char(109), - char(95), - char(99), - char(99), - char(100), - char(77), - char(111), - char(116), - char(105), - char(111), - char(110), - char(84), - char(104), - char(114), - char(101), - char(115), - char(104), - char(111), - char(108), - char(100), - char(0), - char(109), - char(95), - char(104), - char(97), - char(115), - char(65), - char(110), - char(105), - char(115), - char(111), - char(116), - char(114), - char(111), - char(112), - char(105), - char(99), - char(70), - char(114), - char(105), - char(99), - char(116), - char(105), - char(111), - char(110), - char(0), - char(109), - char(95), - char(99), - char(111), - char(108), - char(108), - char(105), - char(115), - char(105), - char(111), - char(110), - char(70), - char(108), - char(97), - char(103), - char(115), - char(0), - char(109), - char(95), - char(105), - char(115), - char(108), - char(97), - char(110), - char(100), - char(84), - char(97), - char(103), - char(49), - char(0), - char(109), - char(95), - char(99), - char(111), - char(109), - char(112), - char(97), - char(110), - char(105), - char(111), - char(110), - char(73), - char(100), - char(0), - char(109), - char(95), - char(97), - char(99), - char(116), - char(105), - char(118), - char(97), - char(116), - char(105), - char(111), - char(110), - char(83), - char(116), - char(97), - char(116), - char(101), - char(49), - char(0), - char(109), - char(95), - char(105), - char(110), - char(116), - char(101), - char(114), - char(110), - char(97), - char(108), - char(84), - char(121), - char(112), - char(101), - char(0), - char(109), - char(95), - char(99), - char(104), - char(101), - char(99), - char(107), - char(67), - char(111), - char(108), - char(108), - char(105), - char(100), - char(101), - char(87), - char(105), - char(116), - char(104), - char(0), - char(109), - char(95), - char(115), - char(111), - char(108), - char(118), - char(101), - char(114), - char(73), - char(110), - char(102), - char(111), - char(0), - char(109), - char(95), - char(103), - char(114), - char(97), - char(118), - char(105), - char(116), - char(121), - char(0), - char(109), - char(95), - char(99), - char(111), - char(108), - char(108), - char(105), - char(115), - char(105), - char(111), - char(110), - char(79), - char(98), - char(106), - char(101), - char(99), - char(116), - char(68), - char(97), - char(116), - char(97), - char(0), - char(109), - char(95), - char(105), - char(110), - char(118), - char(73), - char(110), - char(101), - char(114), - char(116), - char(105), - char(97), - char(84), - char(101), - char(110), - char(115), - char(111), - char(114), - char(87), - char(111), - char(114), - char(108), - char(100), - char(0), - char(109), - char(95), - char(108), - char(105), - char(110), - char(101), - char(97), - char(114), - char(86), - char(101), - char(108), - char(111), - char(99), - char(105), - char(116), - char(121), - char(0), - char(109), - char(95), - char(97), - char(110), - char(103), - char(117), - char(108), - char(97), - char(114), - char(86), - char(101), - char(108), - char(111), - char(99), - char(105), - char(116), - char(121), - char(0), - char(109), - char(95), - char(97), - char(110), - char(103), - char(117), - char(108), - char(97), - char(114), - char(70), - char(97), - char(99), - char(116), - char(111), - char(114), - char(0), - char(109), - char(95), - char(108), - char(105), - char(110), - char(101), - char(97), - char(114), - char(70), - char(97), - char(99), - char(116), - char(111), - char(114), - char(0), - char(109), - char(95), - char(103), - char(114), - char(97), - char(118), - char(105), - char(116), - char(121), - char(95), - char(97), - char(99), - char(99), - char(101), - char(108), - char(101), - char(114), - char(97), - char(116), - char(105), - char(111), - char(110), - char(0), - char(109), - char(95), - char(105), - char(110), - char(118), - char(73), - char(110), - char(101), - char(114), - char(116), - char(105), - char(97), - char(76), - char(111), - char(99), - char(97), - char(108), - char(0), - char(109), - char(95), - char(116), - char(111), - char(116), - char(97), - char(108), - char(70), - char(111), - char(114), - char(99), - char(101), - char(0), - char(109), - char(95), - char(116), - char(111), - char(116), - char(97), - char(108), - char(84), - char(111), - char(114), - char(113), - char(117), - char(101), - char(0), - char(109), - char(95), - char(105), - char(110), - char(118), - char(101), - char(114), - char(115), - char(101), - char(77), - char(97), - char(115), - char(115), - char(0), - char(109), - char(95), - char(108), - char(105), - char(110), - char(101), - char(97), - char(114), - char(68), - char(97), - char(109), - char(112), - char(105), - char(110), - char(103), - char(0), - char(109), - char(95), - char(97), - char(110), - char(103), - char(117), - char(108), - char(97), - char(114), - char(68), - char(97), - char(109), - char(112), - char(105), - char(110), - char(103), - char(0), - char(109), - char(95), - char(97), - char(100), - char(100), - char(105), - char(116), - char(105), - char(111), - char(110), - char(97), - char(108), - char(68), - char(97), - char(109), - char(112), - char(105), - char(110), - char(103), - char(70), - char(97), - char(99), - char(116), - char(111), - char(114), - char(0), - char(109), - char(95), - char(97), - char(100), - char(100), - char(105), - char(116), - char(105), - char(111), - char(110), - char(97), - char(108), - char(76), - char(105), - char(110), - char(101), - char(97), - char(114), - char(68), - char(97), - char(109), - char(112), - char(105), - char(110), - char(103), - char(84), - char(104), - char(114), - char(101), - char(115), - char(104), - char(111), - char(108), - char(100), - char(83), - char(113), - char(114), - char(0), - char(109), - char(95), - char(97), - char(100), - char(100), - char(105), - char(116), - char(105), - char(111), - char(110), - char(97), - char(108), - char(65), - char(110), - char(103), - char(117), - char(108), - char(97), - char(114), - char(68), - char(97), - char(109), - char(112), - char(105), - char(110), - char(103), - char(84), - char(104), - char(114), - char(101), - char(115), - char(104), - char(111), - char(108), - char(100), - char(83), - char(113), - char(114), - char(0), - char(109), - char(95), - char(97), - char(100), - char(100), - char(105), - char(116), - char(105), - char(111), - char(110), - char(97), - char(108), - char(65), - char(110), - char(103), - char(117), - char(108), - char(97), - char(114), - char(68), - char(97), - char(109), - char(112), - char(105), - char(110), - char(103), - char(70), - char(97), - char(99), - char(116), - char(111), - char(114), - char(0), - char(109), - char(95), - char(108), - char(105), - char(110), - char(101), - char(97), - char(114), - char(83), - char(108), - char(101), - char(101), - char(112), - char(105), - char(110), - char(103), - char(84), - char(104), - char(114), - char(101), - char(115), - char(104), - char(111), - char(108), - char(100), - char(0), - char(109), - char(95), - char(97), - char(110), - char(103), - char(117), - char(108), - char(97), - char(114), - char(83), - char(108), - char(101), - char(101), - char(112), - char(105), - char(110), - char(103), - char(84), - char(104), - char(114), - char(101), - char(115), - char(104), - char(111), - char(108), - char(100), - char(0), - char(109), - char(95), - char(97), - char(100), - char(100), - char(105), - char(116), - char(105), - char(111), - char(110), - char(97), - char(108), - char(68), - char(97), - char(109), - char(112), - char(105), - char(110), - char(103), - char(0), - char(109), - char(95), - char(110), - char(117), - char(109), - char(67), - char(111), - char(110), - char(115), - char(116), - char(114), - char(97), - char(105), - char(110), - char(116), - char(82), - char(111), - char(119), - char(115), - char(0), - char(110), - char(117), - char(98), - char(0), - char(42), - char(109), - char(95), - char(114), - char(98), - char(65), - char(0), - char(42), - char(109), - char(95), - char(114), - char(98), - char(66), - char(0), - char(109), - char(95), - char(111), - char(98), - char(106), - char(101), - char(99), - char(116), - char(84), - char(121), - char(112), - char(101), - char(0), - char(109), - char(95), - char(117), - char(115), - char(101), - char(114), - char(67), - char(111), - char(110), - char(115), - char(116), - char(114), - char(97), - char(105), - char(110), - char(116), - char(84), - char(121), - char(112), - char(101), - char(0), - char(109), - char(95), - char(117), - char(115), - char(101), - char(114), - char(67), - char(111), - char(110), - char(115), - char(116), - char(114), - char(97), - char(105), - char(110), - char(116), - char(73), - char(100), - char(0), - char(109), - char(95), - char(110), - char(101), - char(101), - char(100), - char(115), - char(70), - char(101), - char(101), - char(100), - char(98), - char(97), - char(99), - char(107), - char(0), - char(109), - char(95), - char(97), - char(112), - char(112), - char(108), - char(105), - char(101), - char(100), - char(73), - char(109), - char(112), - char(117), - char(108), - char(115), - char(101), - char(0), - char(109), - char(95), - char(100), - char(98), - char(103), - char(68), - char(114), - char(97), - char(119), - char(83), - char(105), - char(122), - char(101), - char(0), - char(109), - char(95), - char(100), - char(105), - char(115), - char(97), - char(98), - char(108), - char(101), - char(67), - char(111), - char(108), - char(108), - char(105), - char(115), - char(105), - char(111), - char(110), - char(115), - char(66), - char(101), - char(116), - char(119), - char(101), - char(101), - char(110), - char(76), - char(105), - char(110), - char(107), - char(101), - char(100), - char(66), - char(111), - char(100), - char(105), - char(101), - char(115), - char(0), - char(109), - char(95), - char(111), - char(118), - char(101), - char(114), - char(114), - char(105), - char(100), - char(101), - char(78), - char(117), - char(109), - char(83), - char(111), - char(108), - char(118), - char(101), - char(114), - char(73), - char(116), - char(101), - char(114), - char(97), - char(116), - char(105), - char(111), - char(110), - char(115), - char(0), - char(109), - char(95), - char(98), - char(114), - char(101), - char(97), - char(107), - char(105), - char(110), - char(103), - char(73), - char(109), - char(112), - char(117), - char(108), - char(115), - char(101), - char(84), - char(104), - char(114), - char(101), - char(115), - char(104), - char(111), - char(108), - char(100), - char(0), - char(109), - char(95), - char(105), - char(115), - char(69), - char(110), - char(97), - char(98), - char(108), - char(101), - char(100), - char(0), - char(109), - char(95), - char(116), - char(121), - char(112), - char(101), - char(67), - char(111), - char(110), - char(115), - char(116), - char(114), - char(97), - char(105), - char(110), - char(116), - char(68), - char(97), - char(116), - char(97), - char(0), - char(109), - char(95), - char(112), - char(105), - char(118), - char(111), - char(116), - char(73), - char(110), - char(65), - char(0), - char(109), - char(95), - char(112), - char(105), - char(118), - char(111), - char(116), - char(73), - char(110), - char(66), - char(0), - char(109), - char(95), - char(114), - char(98), - char(65), - char(70), - char(114), - char(97), - char(109), - char(101), - char(0), - char(109), - char(95), - char(114), - char(98), - char(66), - char(70), - char(114), - char(97), - char(109), - char(101), - char(0), - char(109), - char(95), - char(117), - char(115), - char(101), - char(82), - char(101), - char(102), - char(101), - char(114), - char(101), - char(110), - char(99), - char(101), - char(70), - char(114), - char(97), - char(109), - char(101), - char(65), - char(0), - char(109), - char(95), - char(97), - char(110), - char(103), - char(117), - char(108), - char(97), - char(114), - char(79), - char(110), - char(108), - char(121), - char(0), - char(109), - char(95), - char(101), - char(110), - char(97), - char(98), - char(108), - char(101), - char(65), - char(110), - char(103), - char(117), - char(108), - char(97), - char(114), - char(77), - char(111), - char(116), - char(111), - char(114), - char(0), - char(109), - char(95), - char(109), - char(111), - char(116), - char(111), - char(114), - char(84), - char(97), - char(114), - char(103), - char(101), - char(116), - char(86), - char(101), - char(108), - char(111), - char(99), - char(105), - char(116), - char(121), - char(0), - char(109), - char(95), - char(109), - char(97), - char(120), - char(77), - char(111), - char(116), - char(111), - char(114), - char(73), - char(109), - char(112), - char(117), - char(108), - char(115), - char(101), - char(0), - char(109), - char(95), - char(108), - char(111), - char(119), - char(101), - char(114), - char(76), - char(105), - char(109), - char(105), - char(116), - char(0), - char(109), - char(95), - char(117), - char(112), - char(112), - char(101), - char(114), - char(76), - char(105), - char(109), - char(105), - char(116), - char(0), - char(109), - char(95), - char(108), - char(105), - char(109), - char(105), - char(116), - char(83), - char(111), - char(102), - char(116), - char(110), - char(101), - char(115), - char(115), - char(0), - char(109), - char(95), - char(98), - char(105), - char(97), - char(115), - char(70), - char(97), - char(99), - char(116), - char(111), - char(114), - char(0), - char(109), - char(95), - char(114), - char(101), - char(108), - char(97), - char(120), - char(97), - char(116), - char(105), - char(111), - char(110), - char(70), - char(97), - char(99), - char(116), - char(111), - char(114), - char(0), - char(109), - char(95), - char(115), - char(119), - char(105), - char(110), - char(103), - char(83), - char(112), - char(97), - char(110), - char(49), - char(0), - char(109), - char(95), - char(115), - char(119), - char(105), - char(110), - char(103), - char(83), - char(112), - char(97), - char(110), - char(50), - char(0), - char(109), - char(95), - char(116), - char(119), - char(105), - char(115), - char(116), - char(83), - char(112), - char(97), - char(110), - char(0), - char(109), - char(95), - char(100), - char(97), - char(109), - char(112), - char(105), - char(110), - char(103), - char(0), - char(109), - char(95), - char(108), - char(105), - char(110), - char(101), - char(97), - char(114), - char(85), - char(112), - char(112), - char(101), - char(114), - char(76), - char(105), - char(109), - char(105), - char(116), - char(0), - char(109), - char(95), - char(108), - char(105), - char(110), - char(101), - char(97), - char(114), - char(76), - char(111), - char(119), - char(101), - char(114), - char(76), - char(105), - char(109), - char(105), - char(116), - char(0), - char(109), - char(95), - char(97), - char(110), - char(103), - char(117), - char(108), - char(97), - char(114), - char(85), - char(112), - char(112), - char(101), - char(114), - char(76), - char(105), - char(109), - char(105), - char(116), - char(0), - char(109), - char(95), - char(97), - char(110), - char(103), - char(117), - char(108), - char(97), - char(114), - char(76), - char(111), - char(119), - char(101), - char(114), - char(76), - char(105), - char(109), - char(105), - char(116), - char(0), - char(109), - char(95), - char(117), - char(115), - char(101), - char(76), - char(105), - char(110), - char(101), - char(97), - char(114), - char(82), - char(101), - char(102), - char(101), - char(114), - char(101), - char(110), - char(99), - char(101), - char(70), - char(114), - char(97), - char(109), - char(101), - char(65), - char(0), - char(109), - char(95), - char(117), - char(115), - char(101), - char(79), - char(102), - char(102), - char(115), - char(101), - char(116), - char(70), - char(111), - char(114), - char(67), - char(111), - char(110), - char(115), - char(116), - char(114), - char(97), - char(105), - char(110), - char(116), - char(70), - char(114), - char(97), - char(109), - char(101), - char(0), - char(109), - char(95), - char(54), - char(100), - char(111), - char(102), - char(68), - char(97), - char(116), - char(97), - char(0), - char(109), - char(95), - char(115), - char(112), - char(114), - char(105), - char(110), - char(103), - char(69), - char(110), - char(97), - char(98), - char(108), - char(101), - char(100), - char(91), - char(54), - char(93), - char(0), - char(109), - char(95), - char(101), - char(113), - char(117), - char(105), - char(108), - char(105), - char(98), - char(114), - char(105), - char(117), - char(109), - char(80), - char(111), - char(105), - char(110), - char(116), - char(91), - char(54), - char(93), - char(0), - char(109), - char(95), - char(115), - char(112), - char(114), - char(105), - char(110), - char(103), - char(83), - char(116), - char(105), - char(102), - char(102), - char(110), - char(101), - char(115), - char(115), - char(91), - char(54), - char(93), - char(0), - char(109), - char(95), - char(115), - char(112), - char(114), - char(105), - char(110), - char(103), - char(68), - char(97), - char(109), - char(112), - char(105), - char(110), - char(103), - char(91), - char(54), - char(93), - char(0), - char(109), - char(95), - char(116), - char(97), - char(117), - char(0), - char(109), - char(95), - char(116), - char(105), - char(109), - char(101), - char(83), - char(116), - char(101), - char(112), - char(0), - char(109), - char(95), - char(109), - char(97), - char(120), - char(69), - char(114), - char(114), - char(111), - char(114), - char(82), - char(101), - char(100), - char(117), - char(99), - char(116), - char(105), - char(111), - char(110), - char(0), - char(109), - char(95), - char(115), - char(111), - char(114), - char(0), - char(109), - char(95), - char(101), - char(114), - char(112), - char(0), - char(109), - char(95), - char(101), - char(114), - char(112), - char(50), - char(0), - char(109), - char(95), - char(103), - char(108), - char(111), - char(98), - char(97), - char(108), - char(67), - char(102), - char(109), - char(0), - char(109), - char(95), - char(115), - char(112), - char(108), - char(105), - char(116), - char(73), - char(109), - char(112), - char(117), - char(108), - char(115), - char(101), - char(80), - char(101), - char(110), - char(101), - char(116), - char(114), - char(97), - char(116), - char(105), - char(111), - char(110), - char(84), - char(104), - char(114), - char(101), - char(115), - char(104), - char(111), - char(108), - char(100), - char(0), - char(109), - char(95), - char(115), - char(112), - char(108), - char(105), - char(116), - char(73), - char(109), - char(112), - char(117), - char(108), - char(115), - char(101), - char(84), - char(117), - char(114), - char(110), - char(69), - char(114), - char(112), - char(0), - char(109), - char(95), - char(108), - char(105), - char(110), - char(101), - char(97), - char(114), - char(83), - char(108), - char(111), - char(112), - char(0), - char(109), - char(95), - char(119), - char(97), - char(114), - char(109), - char(115), - char(116), - char(97), - char(114), - char(116), - char(105), - char(110), - char(103), - char(70), - char(97), - char(99), - char(116), - char(111), - char(114), - char(0), - char(109), - char(95), - char(109), - char(97), - char(120), - char(71), - char(121), - char(114), - char(111), - char(115), - char(99), - char(111), - char(112), - char(105), - char(99), - char(70), - char(111), - char(114), - char(99), - char(101), - char(0), - char(109), - char(95), - char(115), - char(105), - char(110), - char(103), - char(108), - char(101), - char(65), - char(120), - char(105), - char(115), - char(82), - char(111), - char(108), - char(108), - char(105), - char(110), - char(103), - char(70), - char(114), - char(105), - char(99), - char(116), - char(105), - char(111), - char(110), - char(84), - char(104), - char(114), - char(101), - char(115), - char(104), - char(111), - char(108), - char(100), - char(0), - char(109), - char(95), - char(110), - char(117), - char(109), - char(73), - char(116), - char(101), - char(114), - char(97), - char(116), - char(105), - char(111), - char(110), - char(115), - char(0), - char(109), - char(95), - char(115), - char(111), - char(108), - char(118), - char(101), - char(114), - char(77), - char(111), - char(100), - char(101), - char(0), - char(109), - char(95), - char(114), - char(101), - char(115), - char(116), - char(105), - char(110), - char(103), - char(67), - char(111), - char(110), - char(116), - char(97), - char(99), - char(116), - char(82), - char(101), - char(115), - char(116), - char(105), - char(116), - char(117), - char(116), - char(105), - char(111), - char(110), - char(84), - char(104), - char(114), - char(101), - char(115), - char(104), - char(111), - char(108), - char(100), - char(0), - char(109), - char(95), - char(109), - char(105), - char(110), - char(105), - char(109), - char(117), - char(109), - char(83), - char(111), - char(108), - char(118), - char(101), - char(114), - char(66), - char(97), - char(116), - char(99), - char(104), - char(83), - char(105), - char(122), - char(101), - char(0), - char(109), - char(95), - char(115), - char(112), - char(108), - char(105), - char(116), - char(73), - char(109), - char(112), - char(117), - char(108), - char(115), - char(101), - char(0), - char(109), - char(95), - char(108), - char(105), - char(110), - char(101), - char(97), - char(114), - char(83), - char(116), - char(105), - char(102), - char(102), - char(110), - char(101), - char(115), - char(115), - char(0), - char(109), - char(95), - char(97), - char(110), - char(103), - char(117), - char(108), - char(97), - char(114), - char(83), - char(116), - char(105), - char(102), - char(102), - char(110), - char(101), - char(115), - char(115), - char(0), - char(109), - char(95), - char(118), - char(111), - char(108), - char(117), - char(109), - char(101), - char(83), - char(116), - char(105), - char(102), - char(102), - char(110), - char(101), - char(115), - char(115), - char(0), - char(42), - char(109), - char(95), - char(109), - char(97), - char(116), - char(101), - char(114), - char(105), - char(97), - char(108), - char(0), - char(109), - char(95), - char(112), - char(111), - char(115), - char(105), - char(116), - char(105), - char(111), - char(110), - char(0), - char(109), - char(95), - char(112), - char(114), - char(101), - char(118), - char(105), - char(111), - char(117), - char(115), - char(80), - char(111), - char(115), - char(105), - char(116), - char(105), - char(111), - char(110), - char(0), - char(109), - char(95), - char(118), - char(101), - char(108), - char(111), - char(99), - char(105), - char(116), - char(121), - char(0), - char(109), - char(95), - char(97), - char(99), - char(99), - char(117), - char(109), - char(117), - char(108), - char(97), - char(116), - char(101), - char(100), - char(70), - char(111), - char(114), - char(99), - char(101), - char(0), - char(109), - char(95), - char(110), - char(111), - char(114), - char(109), - char(97), - char(108), - char(0), - char(109), - char(95), - char(97), - char(114), - char(101), - char(97), - char(0), - char(109), - char(95), - char(97), - char(116), - char(116), - char(97), - char(99), - char(104), - char(0), - char(109), - char(95), - char(110), - char(111), - char(100), - char(101), - char(73), - char(110), - char(100), - char(105), - char(99), - char(101), - char(115), - char(91), - char(50), - char(93), - char(0), - char(109), - char(95), - char(114), - char(101), - char(115), - char(116), - char(76), - char(101), - char(110), - char(103), - char(116), - char(104), - char(0), - char(109), - char(95), - char(98), - char(98), - char(101), - char(110), - char(100), - char(105), - char(110), - char(103), - char(0), - char(109), - char(95), - char(110), - char(111), - char(100), - char(101), - char(73), - char(110), - char(100), - char(105), - char(99), - char(101), - char(115), - char(91), - char(51), - char(93), - char(0), - char(109), - char(95), - char(114), - char(101), - char(115), - char(116), - char(65), - char(114), - char(101), - char(97), - char(0), - char(109), - char(95), - char(99), - char(48), - char(91), - char(52), - char(93), - char(0), - char(109), - char(95), - char(110), - char(111), - char(100), - char(101), - char(73), - char(110), - char(100), - char(105), - char(99), - char(101), - char(115), - char(91), - char(52), - char(93), - char(0), - char(109), - char(95), - char(114), - char(101), - char(115), - char(116), - char(86), - char(111), - char(108), - char(117), - char(109), - char(101), - char(0), - char(109), - char(95), - char(99), - char(49), - char(0), - char(109), - char(95), - char(99), - char(50), - char(0), - char(109), - char(95), - char(99), - char(48), - char(0), - char(109), - char(95), - char(108), - char(111), - char(99), - char(97), - char(108), - char(70), - char(114), - char(97), - char(109), - char(101), - char(0), - char(42), - char(109), - char(95), - char(114), - char(105), - char(103), - char(105), - char(100), - char(66), - char(111), - char(100), - char(121), - char(0), - char(109), - char(95), - char(110), - char(111), - char(100), - char(101), - char(73), - char(110), - char(100), - char(101), - char(120), - char(0), - char(109), - char(95), - char(97), - char(101), - char(114), - char(111), - char(77), - char(111), - char(100), - char(101), - char(108), - char(0), - char(109), - char(95), - char(98), - char(97), - char(117), - char(109), - char(103), - char(97), - char(114), - char(116), - char(101), - char(0), - char(109), - char(95), - char(100), - char(114), - char(97), - char(103), - char(0), - char(109), - char(95), - char(108), - char(105), - char(102), - char(116), - char(0), - char(109), - char(95), - char(112), - char(114), - char(101), - char(115), - char(115), - char(117), - char(114), - char(101), - char(0), - char(109), - char(95), - char(118), - char(111), - char(108), - char(117), - char(109), - char(101), - char(0), - char(109), - char(95), - char(100), - char(121), - char(110), - char(97), - char(109), - char(105), - char(99), - char(70), - char(114), - char(105), - char(99), - char(116), - char(105), - char(111), - char(110), - char(0), - char(109), - char(95), - char(112), - char(111), - char(115), - char(101), - char(77), - char(97), - char(116), - char(99), - char(104), - char(0), - char(109), - char(95), - char(114), - char(105), - char(103), - char(105), - char(100), - char(67), - char(111), - char(110), - char(116), - char(97), - char(99), - char(116), - char(72), - char(97), - char(114), - char(100), - char(110), - char(101), - char(115), - char(115), - char(0), - char(109), - char(95), - char(107), - char(105), - char(110), - char(101), - char(116), - char(105), - char(99), - char(67), - char(111), - char(110), - char(116), - char(97), - char(99), - char(116), - char(72), - char(97), - char(114), - char(100), - char(110), - char(101), - char(115), - char(115), - char(0), - char(109), - char(95), - char(115), - char(111), - char(102), - char(116), - char(67), - char(111), - char(110), - char(116), - char(97), - char(99), - char(116), - char(72), - char(97), - char(114), - char(100), - char(110), - char(101), - char(115), - char(115), - char(0), - char(109), - char(95), - char(97), - char(110), - char(99), - char(104), - char(111), - char(114), - char(72), - char(97), - char(114), - char(100), - char(110), - char(101), - char(115), - char(115), - char(0), - char(109), - char(95), - char(115), - char(111), - char(102), - char(116), - char(82), - char(105), - char(103), - char(105), - char(100), - char(67), - char(108), - char(117), - char(115), - char(116), - char(101), - char(114), - char(72), - char(97), - char(114), - char(100), - char(110), - char(101), - char(115), - char(115), - char(0), - char(109), - char(95), - char(115), - char(111), - char(102), - char(116), - char(75), - char(105), - char(110), - char(101), - char(116), - char(105), - char(99), - char(67), - char(108), - char(117), - char(115), - char(116), - char(101), - char(114), - char(72), - char(97), - char(114), - char(100), - char(110), - char(101), - char(115), - char(115), - char(0), - char(109), - char(95), - char(115), - char(111), - char(102), - char(116), - char(83), - char(111), - char(102), - char(116), - char(67), - char(108), - char(117), - char(115), - char(116), - char(101), - char(114), - char(72), - char(97), - char(114), - char(100), - char(110), - char(101), - char(115), - char(115), - char(0), - char(109), - char(95), - char(115), - char(111), - char(102), - char(116), - char(82), - char(105), - char(103), - char(105), - char(100), - char(67), - char(108), - char(117), - char(115), - char(116), - char(101), - char(114), - char(73), - char(109), - char(112), - char(117), - char(108), - char(115), - char(101), - char(83), - char(112), - char(108), - char(105), - char(116), - char(0), - char(109), - char(95), - char(115), - char(111), - char(102), - char(116), - char(75), - char(105), - char(110), - char(101), - char(116), - char(105), - char(99), - char(67), - char(108), - char(117), - char(115), - char(116), - char(101), - char(114), - char(73), - char(109), - char(112), - char(117), - char(108), - char(115), - char(101), - char(83), - char(112), - char(108), - char(105), - char(116), - char(0), - char(109), - char(95), - char(115), - char(111), - char(102), - char(116), - char(83), - char(111), - char(102), - char(116), - char(67), - char(108), - char(117), - char(115), - char(116), - char(101), - char(114), - char(73), - char(109), - char(112), - char(117), - char(108), - char(115), - char(101), - char(83), - char(112), - char(108), - char(105), - char(116), - char(0), - char(109), - char(95), - char(109), - char(97), - char(120), - char(86), - char(111), - char(108), - char(117), - char(109), - char(101), - char(0), - char(109), - char(95), - char(116), - char(105), - char(109), - char(101), - char(83), - char(99), - char(97), - char(108), - char(101), - char(0), - char(109), - char(95), - char(118), - char(101), - char(108), - char(111), - char(99), - char(105), - char(116), - char(121), - char(73), - char(116), - char(101), - char(114), - char(97), - char(116), - char(105), - char(111), - char(110), - char(115), - char(0), - char(109), - char(95), - char(112), - char(111), - char(115), - char(105), - char(116), - char(105), - char(111), - char(110), - char(73), - char(116), - char(101), - char(114), - char(97), - char(116), - char(105), - char(111), - char(110), - char(115), - char(0), - char(109), - char(95), - char(100), - char(114), - char(105), - char(102), - char(116), - char(73), - char(116), - char(101), - char(114), - char(97), - char(116), - char(105), - char(111), - char(110), - char(115), - char(0), - char(109), - char(95), - char(99), - char(108), - char(117), - char(115), - char(116), - char(101), - char(114), - char(73), - char(116), - char(101), - char(114), - char(97), - char(116), - char(105), - char(111), - char(110), - char(115), - char(0), - char(109), - char(95), - char(114), - char(111), - char(116), - char(0), - char(109), - char(95), - char(115), - char(99), - char(97), - char(108), - char(101), - char(0), - char(109), - char(95), - char(97), - char(113), - char(113), - char(0), - char(109), - char(95), - char(99), - char(111), - char(109), - char(0), - char(42), - char(109), - char(95), - char(112), - char(111), - char(115), - char(105), - char(116), - char(105), - char(111), - char(110), - char(115), - char(0), - char(42), - char(109), - char(95), - char(119), - char(101), - char(105), - char(103), - char(104), - char(116), - char(115), - char(0), - char(109), - char(95), - char(110), - char(117), - char(109), - char(80), - char(111), - char(115), - char(105), - char(116), - char(105), - char(111), - char(110), - char(115), - char(0), - char(109), - char(95), - char(110), - char(117), - char(109), - char(87), - char(101), - char(105), - char(103), - char(116), - char(115), - char(0), - char(109), - char(95), - char(98), - char(118), - char(111), - char(108), - char(117), - char(109), - char(101), - char(0), - char(109), - char(95), - char(98), - char(102), - char(114), - char(97), - char(109), - char(101), - char(0), - char(109), - char(95), - char(102), - char(114), - char(97), - char(109), - char(101), - char(120), - char(102), - char(111), - char(114), - char(109), - char(0), - char(109), - char(95), - char(108), - char(111), - char(99), - char(105), - char(105), - char(0), - char(109), - char(95), - char(105), - char(110), - char(118), - char(119), - char(105), - char(0), - char(109), - char(95), - char(118), - char(105), - char(109), - char(112), - char(117), - char(108), - char(115), - char(101), - char(115), - char(91), - char(50), - char(93), - char(0), - char(109), - char(95), - char(100), - char(105), - char(109), - char(112), - char(117), - char(108), - char(115), - char(101), - char(115), - char(91), - char(50), - char(93), - char(0), - char(109), - char(95), - char(108), - char(118), - char(0), - char(109), - char(95), - char(97), - char(118), - char(0), - char(42), - char(109), - char(95), - char(102), - char(114), - char(97), - char(109), - char(101), - char(114), - char(101), - char(102), - char(115), - char(0), - char(42), - char(109), - char(95), - char(110), - char(111), - char(100), - char(101), - char(73), - char(110), - char(100), - char(105), - char(99), - char(101), - char(115), - char(0), - char(42), - char(109), - char(95), - char(109), - char(97), - char(115), - char(115), - char(101), - char(115), - char(0), - char(109), - char(95), - char(110), - char(117), - char(109), - char(70), - char(114), - char(97), - char(109), - char(101), - char(82), - char(101), - char(102), - char(115), - char(0), - char(109), - char(95), - char(110), - char(117), - char(109), - char(78), - char(111), - char(100), - char(101), - char(115), - char(0), - char(109), - char(95), - char(110), - char(117), - char(109), - char(77), - char(97), - char(115), - char(115), - char(101), - char(115), - char(0), - char(109), - char(95), - char(105), - char(100), - char(109), - char(97), - char(115), - char(115), - char(0), - char(109), - char(95), - char(105), - char(109), - char(97), - char(115), - char(115), - char(0), - char(109), - char(95), - char(110), - char(118), - char(105), - char(109), - char(112), - char(117), - char(108), - char(115), - char(101), - char(115), - char(0), - char(109), - char(95), - char(110), - char(100), - char(105), - char(109), - char(112), - char(117), - char(108), - char(115), - char(101), - char(115), - char(0), - char(109), - char(95), - char(110), - char(100), - char(97), - char(109), - char(112), - char(105), - char(110), - char(103), - char(0), - char(109), - char(95), - char(108), - char(100), - char(97), - char(109), - char(112), - char(105), - char(110), - char(103), - char(0), - char(109), - char(95), - char(97), - char(100), - char(97), - char(109), - char(112), - char(105), - char(110), - char(103), - char(0), - char(109), - char(95), - char(109), - char(97), - char(116), - char(99), - char(104), - char(105), - char(110), - char(103), - char(0), - char(109), - char(95), - char(109), - char(97), - char(120), - char(83), - char(101), - char(108), - char(102), - char(67), - char(111), - char(108), - char(108), - char(105), - char(115), - char(105), - char(111), - char(110), - char(73), - char(109), - char(112), - char(117), - char(108), - char(115), - char(101), - char(0), - char(109), - char(95), - char(115), - char(101), - char(108), - char(102), - char(67), - char(111), - char(108), - char(108), - char(105), - char(115), - char(105), - char(111), - char(110), - char(73), - char(109), - char(112), - char(117), - char(108), - char(115), - char(101), - char(70), - char(97), - char(99), - char(116), - char(111), - char(114), - char(0), - char(109), - char(95), - char(99), - char(111), - char(110), - char(116), - char(97), - char(105), - char(110), - char(115), - char(65), - char(110), - char(99), - char(104), - char(111), - char(114), - char(0), - char(109), - char(95), - char(99), - char(111), - char(108), - char(108), - char(105), - char(100), - char(101), - char(0), - char(109), - char(95), - char(99), - char(108), - char(117), - char(115), - char(116), - char(101), - char(114), - char(73), - char(110), - char(100), - char(101), - char(120), - char(0), - char(42), - char(109), - char(95), - char(98), - char(111), - char(100), - char(121), - char(65), - char(0), - char(42), - char(109), - char(95), - char(98), - char(111), - char(100), - char(121), - char(66), - char(0), - char(109), - char(95), - char(114), - char(101), - char(102), - char(115), - char(91), - char(50), - char(93), - char(0), - char(109), - char(95), - char(99), - char(102), - char(109), - char(0), - char(109), - char(95), - char(115), - char(112), - char(108), - char(105), - char(116), - char(0), - char(109), - char(95), - char(100), - char(101), - char(108), - char(101), - char(116), - char(101), - char(0), - char(109), - char(95), - char(114), - char(101), - char(108), - char(80), - char(111), - char(115), - char(105), - char(116), - char(105), - char(111), - char(110), - char(91), - char(50), - char(93), - char(0), - char(109), - char(95), - char(98), - char(111), - char(100), - char(121), - char(65), - char(116), - char(121), - char(112), - char(101), - char(0), - char(109), - char(95), - char(98), - char(111), - char(100), - char(121), - char(66), - char(116), - char(121), - char(112), - char(101), - char(0), - char(109), - char(95), - char(106), - char(111), - char(105), - char(110), - char(116), - char(84), - char(121), - char(112), - char(101), - char(0), - char(42), - char(109), - char(95), - char(112), - char(111), - char(115), - char(101), - char(0), - char(42), - char(42), - char(109), - char(95), - char(109), - char(97), - char(116), - char(101), - char(114), - char(105), - char(97), - char(108), - char(115), - char(0), - char(42), - char(109), - char(95), - char(110), - char(111), - char(100), - char(101), - char(115), - char(0), - char(42), - char(109), - char(95), - char(108), - char(105), - char(110), - char(107), - char(115), - char(0), - char(42), - char(109), - char(95), - char(102), - char(97), - char(99), - char(101), - char(115), - char(0), - char(42), - char(109), - char(95), - char(116), - char(101), - char(116), - char(114), - char(97), - char(104), - char(101), - char(100), - char(114), - char(97), - char(0), - char(42), - char(109), - char(95), - char(97), - char(110), - char(99), - char(104), - char(111), - char(114), - char(115), - char(0), - char(42), - char(109), - char(95), - char(99), - char(108), - char(117), - char(115), - char(116), - char(101), - char(114), - char(115), - char(0), - char(42), - char(109), - char(95), - char(106), - char(111), - char(105), - char(110), - char(116), - char(115), - char(0), - char(109), - char(95), - char(110), - char(117), - char(109), - char(77), - char(97), - char(116), - char(101), - char(114), - char(105), - char(97), - char(108), - char(115), - char(0), - char(109), - char(95), - char(110), - char(117), - char(109), - char(76), - char(105), - char(110), - char(107), - char(115), - char(0), - char(109), - char(95), - char(110), - char(117), - char(109), - char(70), - char(97), - char(99), - char(101), - char(115), - char(0), - char(109), - char(95), - char(110), - char(117), - char(109), - char(84), - char(101), - char(116), - char(114), - char(97), - char(104), - char(101), - char(100), - char(114), - char(97), - char(0), - char(109), - char(95), - char(110), - char(117), - char(109), - char(65), - char(110), - char(99), - char(104), - char(111), - char(114), - char(115), - char(0), - char(109), - char(95), - char(110), - char(117), - char(109), - char(67), - char(108), - char(117), - char(115), - char(116), - char(101), - char(114), - char(115), - char(0), - char(109), - char(95), - char(110), - char(117), - char(109), - char(74), - char(111), - char(105), - char(110), - char(116), - char(115), - char(0), - char(109), - char(95), - char(99), - char(111), - char(110), - char(102), - char(105), - char(103), - char(0), - char(84), - char(89), - char(80), - char(69), - char(76), - char(0), - char(0), - char(0), - char(99), - char(104), - char(97), - char(114), - char(0), - char(117), - char(99), - char(104), - char(97), - char(114), - char(0), - char(115), - char(104), - char(111), - char(114), - char(116), - char(0), - char(117), - char(115), - char(104), - char(111), - char(114), - char(116), - char(0), - char(105), - char(110), - char(116), - char(0), - char(108), - char(111), - char(110), - char(103), - char(0), - char(117), - char(108), - char(111), - char(110), - char(103), - char(0), - char(102), - char(108), - char(111), - char(97), - char(116), - char(0), - char(100), - char(111), - char(117), - char(98), - char(108), - char(101), - char(0), - char(118), - char(111), - char(105), - char(100), - char(0), - char(80), - char(111), - char(105), - char(110), - char(116), - char(101), - char(114), - char(65), - char(114), - char(114), - char(97), - char(121), - char(0), - char(98), - char(116), - char(80), - char(104), - char(121), - char(115), - char(105), - char(99), - char(115), - char(83), - char(121), - char(115), - char(116), - char(101), - char(109), - char(0), - char(76), - char(105), - char(115), - char(116), - char(66), - char(97), - char(115), - char(101), - char(0), - char(98), - char(116), - char(86), - char(101), - char(99), - char(116), - char(111), - char(114), - char(51), - char(70), - char(108), - char(111), - char(97), - char(116), - char(68), - char(97), - char(116), - char(97), - char(0), - char(98), - char(116), - char(86), - char(101), - char(99), - char(116), - char(111), - char(114), - char(51), - char(68), - char(111), - char(117), - char(98), - char(108), - char(101), - char(68), - char(97), - char(116), - char(97), - char(0), - char(98), - char(116), - char(77), - char(97), - char(116), - char(114), - char(105), - char(120), - char(51), - char(120), - char(51), - char(70), - char(108), - char(111), - char(97), - char(116), - char(68), - char(97), - char(116), - char(97), - char(0), - char(98), - char(116), - char(77), - char(97), - char(116), - char(114), - char(105), - char(120), - char(51), - char(120), - char(51), - char(68), - char(111), - char(117), - char(98), - char(108), - char(101), - char(68), - char(97), - char(116), - char(97), - char(0), - char(98), - char(116), - char(84), - char(114), - char(97), - char(110), - char(115), - char(102), - char(111), - char(114), - char(109), - char(70), - char(108), - char(111), - char(97), - char(116), - char(68), - char(97), - char(116), - char(97), - char(0), - char(98), - char(116), - char(84), - char(114), - char(97), - char(110), - char(115), - char(102), - char(111), - char(114), - char(109), - char(68), - char(111), - char(117), - char(98), - char(108), - char(101), - char(68), - char(97), - char(116), - char(97), - char(0), - char(98), - char(116), - char(66), - char(118), - char(104), - char(83), - char(117), - char(98), - char(116), - char(114), - char(101), - char(101), - char(73), - char(110), - char(102), - char(111), - char(68), - char(97), - char(116), - char(97), - char(0), - char(98), - char(116), - char(79), - char(112), - char(116), - char(105), - char(109), - char(105), - char(122), - char(101), - char(100), - char(66), - char(118), - char(104), - char(78), - char(111), - char(100), - char(101), - char(70), - char(108), - char(111), - char(97), - char(116), - char(68), - char(97), - char(116), - char(97), - char(0), - char(98), - char(116), - char(79), - char(112), - char(116), - char(105), - char(109), - char(105), - char(122), - char(101), - char(100), - char(66), - char(118), - char(104), - char(78), - char(111), - char(100), - char(101), - char(68), - char(111), - char(117), - char(98), - char(108), - char(101), - char(68), - char(97), - char(116), - char(97), - char(0), - char(98), - char(116), - char(81), - char(117), - char(97), - char(110), - char(116), - char(105), - char(122), - char(101), - char(100), - char(66), - char(118), - char(104), - char(78), - char(111), - char(100), - char(101), - char(68), - char(97), - char(116), - char(97), - char(0), - char(98), - char(116), - char(81), - char(117), - char(97), - char(110), - char(116), - char(105), - char(122), - char(101), - char(100), - char(66), - char(118), - char(104), - char(70), - char(108), - char(111), - char(97), - char(116), - char(68), - char(97), - char(116), - char(97), - char(0), - char(98), - char(116), - char(81), - char(117), - char(97), - char(110), - char(116), - char(105), - char(122), - char(101), - char(100), - char(66), - char(118), - char(104), - char(68), - char(111), - char(117), - char(98), - char(108), - char(101), - char(68), - char(97), - char(116), - char(97), - char(0), - char(98), - char(116), - char(67), - char(111), - char(108), - char(108), - char(105), - char(115), - char(105), - char(111), - char(110), - char(83), - char(104), - char(97), - char(112), - char(101), - char(68), - char(97), - char(116), - char(97), - char(0), - char(98), - char(116), - char(83), - char(116), - char(97), - char(116), - char(105), - char(99), - char(80), - char(108), - char(97), - char(110), - char(101), - char(83), - char(104), - char(97), - char(112), - char(101), - char(68), - char(97), - char(116), - char(97), - char(0), - char(98), - char(116), - char(67), - char(111), - char(110), - char(118), - char(101), - char(120), - char(73), - char(110), - char(116), - char(101), - char(114), - char(110), - char(97), - char(108), - char(83), - char(104), - char(97), - char(112), - char(101), - char(68), - char(97), - char(116), - char(97), - char(0), - char(98), - char(116), - char(80), - char(111), - char(115), - char(105), - char(116), - char(105), - char(111), - char(110), - char(65), - char(110), - char(100), - char(82), - char(97), - char(100), - char(105), - char(117), - char(115), - char(0), - char(98), - char(116), - char(77), - char(117), - char(108), - char(116), - char(105), - char(83), - char(112), - char(104), - char(101), - char(114), - char(101), - char(83), - char(104), - char(97), - char(112), - char(101), - char(68), - char(97), - char(116), - char(97), - char(0), - char(98), - char(116), - char(73), - char(110), - char(116), - char(73), - char(110), - char(100), - char(101), - char(120), - char(68), - char(97), - char(116), - char(97), - char(0), - char(98), - char(116), - char(83), - char(104), - char(111), - char(114), - char(116), - char(73), - char(110), - char(116), - char(73), - char(110), - char(100), - char(101), - char(120), - char(68), - char(97), - char(116), - char(97), - char(0), - char(98), - char(116), - char(83), - char(104), - char(111), - char(114), - char(116), - char(73), - char(110), - char(116), - char(73), - char(110), - char(100), - char(101), - char(120), - char(84), - char(114), - char(105), - char(112), - char(108), - char(101), - char(116), - char(68), - char(97), - char(116), - char(97), - char(0), - char(98), - char(116), - char(67), - char(104), - char(97), - char(114), - char(73), - char(110), - char(100), - char(101), - char(120), - char(84), - char(114), - char(105), - char(112), - char(108), - char(101), - char(116), - char(68), - char(97), - char(116), - char(97), - char(0), - char(98), - char(116), - char(77), - char(101), - char(115), - char(104), - char(80), - char(97), - char(114), - char(116), - char(68), - char(97), - char(116), - char(97), - char(0), - char(98), - char(116), - char(83), - char(116), - char(114), - char(105), - char(100), - char(105), - char(110), - char(103), - char(77), - char(101), - char(115), - char(104), - char(73), - char(110), - char(116), - char(101), - char(114), - char(102), - char(97), - char(99), - char(101), - char(68), - char(97), - char(116), - char(97), - char(0), - char(98), - char(116), - char(84), - char(114), - char(105), - char(97), - char(110), - char(103), - char(108), - char(101), - char(77), - char(101), - char(115), - char(104), - char(83), - char(104), - char(97), - char(112), - char(101), - char(68), - char(97), - char(116), - char(97), - char(0), - char(98), - char(116), - char(84), - char(114), - char(105), - char(97), - char(110), - char(103), - char(108), - char(101), - char(73), - char(110), - char(102), - char(111), - char(77), - char(97), - char(112), - char(68), - char(97), - char(116), - char(97), - char(0), - char(98), - char(116), - char(83), - char(99), - char(97), - char(108), - char(101), - char(100), - char(84), - char(114), - char(105), - char(97), - char(110), - char(103), - char(108), - char(101), - char(77), - char(101), - char(115), - char(104), - char(83), - char(104), - char(97), - char(112), - char(101), - char(68), - char(97), - char(116), - char(97), - char(0), - char(98), - char(116), - char(67), - char(111), - char(109), - char(112), - char(111), - char(117), - char(110), - char(100), - char(83), - char(104), - char(97), - char(112), - char(101), - char(67), - char(104), - char(105), - char(108), - char(100), - char(68), - char(97), - char(116), - char(97), - char(0), - char(98), - char(116), - char(67), - char(111), - char(109), - char(112), - char(111), - char(117), - char(110), - char(100), - char(83), - char(104), - char(97), - char(112), - char(101), - char(68), - char(97), - char(116), - char(97), - char(0), - char(98), - char(116), - char(67), - char(121), - char(108), - char(105), - char(110), - char(100), - char(101), - char(114), - char(83), - char(104), - char(97), - char(112), - char(101), - char(68), - char(97), - char(116), - char(97), - char(0), - char(98), - char(116), - char(67), - char(97), - char(112), - char(115), - char(117), - char(108), - char(101), - char(83), - char(104), - char(97), - char(112), - char(101), - char(68), - char(97), - char(116), - char(97), - char(0), - char(98), - char(116), - char(84), - char(114), - char(105), - char(97), - char(110), - char(103), - char(108), - char(101), - char(73), - char(110), - char(102), - char(111), - char(68), - char(97), - char(116), - char(97), - char(0), - char(98), - char(116), - char(71), - char(73), - char(109), - char(112), - char(97), - char(99), - char(116), - char(77), - char(101), - char(115), - char(104), - char(83), - char(104), - char(97), - char(112), - char(101), - char(68), - char(97), - char(116), - char(97), - char(0), - char(98), - char(116), - char(67), - char(111), - char(110), - char(118), - char(101), - char(120), - char(72), - char(117), - char(108), - char(108), - char(83), - char(104), - char(97), - char(112), - char(101), - char(68), - char(97), - char(116), - char(97), - char(0), - char(98), - char(116), - char(67), - char(111), - char(108), - char(108), - char(105), - char(115), - char(105), - char(111), - char(110), - char(79), - char(98), - char(106), - char(101), - char(99), - char(116), - char(68), - char(111), - char(117), - char(98), - char(108), - char(101), - char(68), - char(97), - char(116), - char(97), - char(0), - char(98), - char(116), - char(67), - char(111), - char(108), - char(108), - char(105), - char(115), - char(105), - char(111), - char(110), - char(79), - char(98), - char(106), - char(101), - char(99), - char(116), - char(70), - char(108), - char(111), - char(97), - char(116), - char(68), - char(97), - char(116), - char(97), - char(0), - char(98), - char(116), - char(68), - char(121), - char(110), - char(97), - char(109), - char(105), - char(99), - char(115), - char(87), - char(111), - char(114), - char(108), - char(100), - char(68), - char(111), - char(117), - char(98), - char(108), - char(101), - char(68), - char(97), - char(116), - char(97), - char(0), - char(98), - char(116), - char(67), - char(111), - char(110), - char(116), - char(97), - char(99), - char(116), - char(83), - char(111), - char(108), - char(118), - char(101), - char(114), - char(73), - char(110), - char(102), - char(111), - char(68), - char(111), - char(117), - char(98), - char(108), - char(101), - char(68), - char(97), - char(116), - char(97), - char(0), - char(98), - char(116), - char(68), - char(121), - char(110), - char(97), - char(109), - char(105), - char(99), - char(115), - char(87), - char(111), - char(114), - char(108), - char(100), - char(70), - char(108), - char(111), - char(97), - char(116), - char(68), - char(97), - char(116), - char(97), - char(0), - char(98), - char(116), - char(67), - char(111), - char(110), - char(116), - char(97), - char(99), - char(116), - char(83), - char(111), - char(108), - char(118), - char(101), - char(114), - char(73), - char(110), - char(102), - char(111), - char(70), - char(108), - char(111), - char(97), - char(116), - char(68), - char(97), - char(116), - char(97), - char(0), - char(98), - char(116), - char(82), - char(105), - char(103), - char(105), - char(100), - char(66), - char(111), - char(100), - char(121), - char(70), - char(108), - char(111), - char(97), - char(116), - char(68), - char(97), - char(116), - char(97), - char(0), - char(98), - char(116), - char(82), - char(105), - char(103), - char(105), - char(100), - char(66), - char(111), - char(100), - char(121), - char(68), - char(111), - char(117), - char(98), - char(108), - char(101), - char(68), - char(97), - char(116), - char(97), - char(0), - char(98), - char(116), - char(67), - char(111), - char(110), - char(115), - char(116), - char(114), - char(97), - char(105), - char(110), - char(116), - char(73), - char(110), - char(102), - char(111), - char(49), - char(0), - char(98), - char(116), - char(84), - char(121), - char(112), - char(101), - char(100), - char(67), - char(111), - char(110), - char(115), - char(116), - char(114), - char(97), - char(105), - char(110), - char(116), - char(68), - char(97), - char(116), - char(97), - char(0), - char(98), - char(116), - char(82), - char(105), - char(103), - char(105), - char(100), - char(66), - char(111), - char(100), - char(121), - char(68), - char(97), - char(116), - char(97), - char(0), - char(98), - char(116), - char(80), - char(111), - char(105), - char(110), - char(116), - char(50), - char(80), - char(111), - char(105), - char(110), - char(116), - char(67), - char(111), - char(110), - char(115), - char(116), - char(114), - char(97), - char(105), - char(110), - char(116), - char(70), - char(108), - char(111), - char(97), - char(116), - char(68), - char(97), - char(116), - char(97), - char(0), - char(98), - char(116), - char(80), - char(111), - char(105), - char(110), - char(116), - char(50), - char(80), - char(111), - char(105), - char(110), - char(116), - char(67), - char(111), - char(110), - char(115), - char(116), - char(114), - char(97), - char(105), - char(110), - char(116), - char(68), - char(111), - char(117), - char(98), - char(108), - char(101), - char(68), - char(97), - char(116), - char(97), - char(0), - char(98), - char(116), - char(72), - char(105), - char(110), - char(103), - char(101), - char(67), - char(111), - char(110), - char(115), - char(116), - char(114), - char(97), - char(105), - char(110), - char(116), - char(68), - char(111), - char(117), - char(98), - char(108), - char(101), - char(68), - char(97), - char(116), - char(97), - char(0), - char(98), - char(116), - char(72), - char(105), - char(110), - char(103), - char(101), - char(67), - char(111), - char(110), - char(115), - char(116), - char(114), - char(97), - char(105), - char(110), - char(116), - char(70), - char(108), - char(111), - char(97), - char(116), - char(68), - char(97), - char(116), - char(97), - char(0), - char(98), - char(116), - char(67), - char(111), - char(110), - char(101), - char(84), - char(119), - char(105), - char(115), - char(116), - char(67), - char(111), - char(110), - char(115), - char(116), - char(114), - char(97), - char(105), - char(110), - char(116), - char(68), - char(97), - char(116), - char(97), - char(0), - char(98), - char(116), - char(71), - char(101), - char(110), - char(101), - char(114), - char(105), - char(99), - char(54), - char(68), - char(111), - char(102), - char(67), - char(111), - char(110), - char(115), - char(116), - char(114), - char(97), - char(105), - char(110), - char(116), - char(68), - char(97), - char(116), - char(97), - char(0), - char(98), - char(116), - char(71), - char(101), - char(110), - char(101), - char(114), - char(105), - char(99), - char(54), - char(68), - char(111), - char(102), - char(83), - char(112), - char(114), - char(105), - char(110), - char(103), - char(67), - char(111), - char(110), - char(115), - char(116), - char(114), - char(97), - char(105), - char(110), - char(116), - char(68), - char(97), - char(116), - char(97), - char(0), - char(98), - char(116), - char(83), - char(108), - char(105), - char(100), - char(101), - char(114), - char(67), - char(111), - char(110), - char(115), - char(116), - char(114), - char(97), - char(105), - char(110), - char(116), - char(68), - char(97), - char(116), - char(97), - char(0), - char(83), - char(111), - char(102), - char(116), - char(66), - char(111), - char(100), - char(121), - char(77), - char(97), - char(116), - char(101), - char(114), - char(105), - char(97), - char(108), - char(68), - char(97), - char(116), - char(97), - char(0), - char(83), - char(111), - char(102), - char(116), - char(66), - char(111), - char(100), - char(121), - char(78), - char(111), - char(100), - char(101), - char(68), - char(97), - char(116), - char(97), - char(0), - char(83), - char(111), - char(102), - char(116), - char(66), - char(111), - char(100), - char(121), - char(76), - char(105), - char(110), - char(107), - char(68), - char(97), - char(116), - char(97), - char(0), - char(83), - char(111), - char(102), - char(116), - char(66), - char(111), - char(100), - char(121), - char(70), - char(97), - char(99), - char(101), - char(68), - char(97), - char(116), - char(97), - char(0), - char(83), - char(111), - char(102), - char(116), - char(66), - char(111), - char(100), - char(121), - char(84), - char(101), - char(116), - char(114), - char(97), - char(68), - char(97), - char(116), - char(97), - char(0), - char(83), - char(111), - char(102), - char(116), - char(82), - char(105), - char(103), - char(105), - char(100), - char(65), - char(110), - char(99), - char(104), - char(111), - char(114), - char(68), - char(97), - char(116), - char(97), - char(0), - char(83), - char(111), - char(102), - char(116), - char(66), - char(111), - char(100), - char(121), - char(67), - char(111), - char(110), - char(102), - char(105), - char(103), - char(68), - char(97), - char(116), - char(97), - char(0), - char(83), - char(111), - char(102), - char(116), - char(66), - char(111), - char(100), - char(121), - char(80), - char(111), - char(115), - char(101), - char(68), - char(97), - char(116), - char(97), - char(0), - char(83), - char(111), - char(102), - char(116), - char(66), - char(111), - char(100), - char(121), - char(67), - char(108), - char(117), - char(115), - char(116), - char(101), - char(114), - char(68), - char(97), - char(116), - char(97), - char(0), - char(98), - char(116), - char(83), - char(111), - char(102), - char(116), - char(66), - char(111), - char(100), - char(121), - char(74), - char(111), - char(105), - char(110), - char(116), - char(68), - char(97), - char(116), - char(97), - char(0), - char(98), - char(116), - char(83), - char(111), - char(102), - char(116), - char(66), - char(111), - char(100), - char(121), - char(70), - char(108), - char(111), - char(97), - char(116), - char(68), - char(97), - char(116), - char(97), - char(0), - char(0), - char(0), - char(84), - char(76), - char(69), - char(78), - char(1), - char(0), - char(1), - char(0), - char(2), - char(0), - char(2), - char(0), - char(4), - char(0), - char(4), - char(0), - char(4), - char(0), - char(4), - char(0), - char(8), - char(0), - char(0), - char(0), - char(12), - char(0), - char(36), - char(0), - char(8), - char(0), - char(16), - char(0), - char(32), - char(0), - char(48), - char(0), - char(96), - char(0), - char(64), - char(0), - char(-128), - char(0), - char(20), - char(0), - char(48), - char(0), - char(80), - char(0), - char(16), - char(0), - char(84), - char(0), - char(-124), - char(0), - char(12), - char(0), - char(52), - char(0), - char(52), - char(0), - char(20), - char(0), - char(64), - char(0), - char(4), - char(0), - char(4), - char(0), - char(8), - char(0), - char(4), - char(0), - char(32), - char(0), - char(28), - char(0), - char(60), - char(0), - char(56), - char(0), - char(76), - char(0), - char(76), - char(0), - char(24), - char(0), - char(60), - char(0), - char(60), - char(0), - char(16), - char(0), - char(64), - char(0), - char(68), - char(0), - char(-48), - char(1), - char(0), - char(1), - char(-72), - char(0), - char(-104), - char(0), - char(104), - char(0), - char(88), - char(0), - char(-24), - char(1), - char(-96), - char(3), - char(8), - char(0), - char(52), - char(0), - char(0), - char(0), - char(84), - char(0), - char(116), - char(0), - char(92), - char(1), - char(-36), - char(0), - char(-44), - char(0), - char(-4), - char(0), - char(92), - char(1), - char(-52), - char(0), - char(16), - char(0), - char(100), - char(0), - char(20), - char(0), - char(36), - char(0), - char(100), - char(0), - char(92), - char(0), - char(104), - char(0), - char(-64), - char(0), - char(92), - char(1), - char(104), - char(0), - char(-84), - char(1), - char(83), - char(84), - char(82), - char(67), - char(65), - char(0), - char(0), - char(0), - char(10), - char(0), - char(3), - char(0), - char(4), - char(0), - char(0), - char(0), - char(4), - char(0), - char(1), - char(0), - char(9), - char(0), - char(2), - char(0), - char(11), - char(0), - char(3), - char(0), - char(10), - char(0), - char(3), - char(0), - char(10), - char(0), - char(4), - char(0), - char(10), - char(0), - char(5), - char(0), - char(12), - char(0), - char(2), - char(0), - char(9), - char(0), - char(6), - char(0), - char(9), - char(0), - char(7), - char(0), - char(13), - char(0), - char(1), - char(0), - char(7), - char(0), - char(8), - char(0), - char(14), - char(0), - char(1), - char(0), - char(8), - char(0), - char(8), - char(0), - char(15), - char(0), - char(1), - char(0), - char(13), - char(0), - char(9), - char(0), - char(16), - char(0), - char(1), - char(0), - char(14), - char(0), - char(9), - char(0), - char(17), - char(0), - char(2), - char(0), - char(15), - char(0), - char(10), - char(0), - char(13), - char(0), - char(11), - char(0), - char(18), - char(0), - char(2), - char(0), - char(16), - char(0), - char(10), - char(0), - char(14), - char(0), - char(11), - char(0), - char(19), - char(0), - char(4), - char(0), - char(4), - char(0), - char(12), - char(0), - char(4), - char(0), - char(13), - char(0), - char(2), - char(0), - char(14), - char(0), - char(2), - char(0), - char(15), - char(0), - char(20), - char(0), - char(6), - char(0), - char(13), - char(0), - char(16), - char(0), - char(13), - char(0), - char(17), - char(0), - char(4), - char(0), - char(18), - char(0), - char(4), - char(0), - char(19), - char(0), - char(4), - char(0), - char(20), - char(0), - char(0), - char(0), - char(21), - char(0), - char(21), - char(0), - char(6), - char(0), - char(14), - char(0), - char(16), - char(0), - char(14), - char(0), - char(17), - char(0), - char(4), - char(0), - char(18), - char(0), - char(4), - char(0), - char(19), - char(0), - char(4), - char(0), - char(20), - char(0), - char(0), - char(0), - char(21), - char(0), - char(22), - char(0), - char(3), - char(0), - char(2), - char(0), - char(14), - char(0), - char(2), - char(0), - char(15), - char(0), - char(4), - char(0), - char(22), - char(0), - char(23), - char(0), - char(12), - char(0), - char(13), - char(0), - char(23), - char(0), - char(13), - char(0), - char(24), - char(0), - char(13), - char(0), - char(25), - char(0), - char(4), - char(0), - char(26), - char(0), - char(4), - char(0), - char(27), - char(0), - char(4), - char(0), - char(28), - char(0), - char(4), - char(0), - char(29), - char(0), - char(20), - char(0), - char(30), - char(0), - char(22), - char(0), - char(31), - char(0), - char(19), - char(0), - char(32), - char(0), - char(4), - char(0), - char(33), - char(0), - char(4), - char(0), - char(34), - char(0), - char(24), - char(0), - char(12), - char(0), - char(14), - char(0), - char(23), - char(0), - char(14), - char(0), - char(24), - char(0), - char(14), - char(0), - char(25), - char(0), - char(4), - char(0), - char(26), - char(0), - char(4), - char(0), - char(27), - char(0), - char(4), - char(0), - char(28), - char(0), - char(4), - char(0), - char(29), - char(0), - char(21), - char(0), - char(30), - char(0), - char(22), - char(0), - char(31), - char(0), - char(4), - char(0), - char(33), - char(0), - char(4), - char(0), - char(34), - char(0), - char(19), - char(0), - char(32), - char(0), - char(25), - char(0), - char(3), - char(0), - char(0), - char(0), - char(35), - char(0), - char(4), - char(0), - char(36), - char(0), - char(0), - char(0), - char(37), - char(0), - char(26), - char(0), - char(5), - char(0), - char(25), - char(0), - char(38), - char(0), - char(13), - char(0), - char(39), - char(0), - char(13), - char(0), - char(40), - char(0), - char(7), - char(0), - char(41), - char(0), - char(0), - char(0), - char(21), - char(0), - char(27), - char(0), - char(5), - char(0), - char(25), - char(0), - char(38), - char(0), - char(13), - char(0), - char(39), - char(0), - char(13), - char(0), - char(42), - char(0), - char(7), - char(0), - char(43), - char(0), - char(4), - char(0), - char(44), - char(0), - char(28), - char(0), - char(2), - char(0), - char(13), - char(0), - char(45), - char(0), - char(7), - char(0), - char(46), - char(0), - char(29), - char(0), - char(4), - char(0), - char(27), - char(0), - char(47), - char(0), - char(28), - char(0), - char(48), - char(0), - char(4), - char(0), - char(49), - char(0), - char(0), - char(0), - char(37), - char(0), - char(30), - char(0), - char(1), - char(0), - char(4), - char(0), - char(50), - char(0), - char(31), - char(0), - char(2), - char(0), - char(2), - char(0), - char(50), - char(0), - char(0), - char(0), - char(51), - char(0), - char(32), - char(0), - char(2), - char(0), - char(2), - char(0), - char(52), - char(0), - char(0), - char(0), - char(51), - char(0), - char(33), - char(0), - char(2), - char(0), - char(0), - char(0), - char(52), - char(0), - char(0), - char(0), - char(53), - char(0), - char(34), - char(0), - char(8), - char(0), - char(13), - char(0), - char(54), - char(0), - char(14), - char(0), - char(55), - char(0), - char(30), - char(0), - char(56), - char(0), - char(32), - char(0), - char(57), - char(0), - char(33), - char(0), - char(58), - char(0), - char(31), - char(0), - char(59), - char(0), - char(4), - char(0), - char(60), - char(0), - char(4), - char(0), - char(61), - char(0), - char(35), - char(0), - char(4), - char(0), - char(34), - char(0), - char(62), - char(0), - char(13), - char(0), - char(63), - char(0), - char(4), - char(0), - char(64), - char(0), - char(0), - char(0), - char(37), - char(0), - char(36), - char(0), - char(7), - char(0), - char(25), - char(0), - char(38), - char(0), - char(35), - char(0), - char(65), - char(0), - char(23), - char(0), - char(66), - char(0), - char(24), - char(0), - char(67), - char(0), - char(37), - char(0), - char(68), - char(0), - char(7), - char(0), - char(43), - char(0), - char(0), - char(0), - char(69), - char(0), - char(38), - char(0), - char(2), - char(0), - char(36), - char(0), - char(70), - char(0), - char(13), - char(0), - char(39), - char(0), - char(39), - char(0), - char(4), - char(0), - char(17), - char(0), - char(71), - char(0), - char(25), - char(0), - char(72), - char(0), - char(4), - char(0), - char(73), - char(0), - char(7), - char(0), - char(74), - char(0), - char(40), - char(0), - char(4), - char(0), - char(25), - char(0), - char(38), - char(0), - char(39), - char(0), - char(75), - char(0), - char(4), - char(0), - char(76), - char(0), - char(7), - char(0), - char(43), - char(0), - char(41), - char(0), - char(3), - char(0), - char(27), - char(0), - char(47), - char(0), - char(4), - char(0), - char(77), - char(0), - char(0), - char(0), - char(37), - char(0), - char(42), - char(0), - char(3), - char(0), - char(27), - char(0), - char(47), - char(0), - char(4), - char(0), - char(77), - char(0), - char(0), - char(0), - char(37), - char(0), - char(43), - char(0), - char(4), - char(0), - char(4), - char(0), - char(78), - char(0), - char(7), - char(0), - char(79), - char(0), - char(7), - char(0), - char(80), - char(0), - char(7), - char(0), - char(81), - char(0), - char(37), - char(0), - char(14), - char(0), - char(4), - char(0), - char(82), - char(0), - char(4), - char(0), - char(83), - char(0), - char(43), - char(0), - char(84), - char(0), - char(4), - char(0), - char(85), - char(0), - char(7), - char(0), - char(86), - char(0), - char(7), - char(0), - char(87), - char(0), - char(7), - char(0), - char(88), - char(0), - char(7), - char(0), - char(89), - char(0), - char(7), - char(0), - char(90), - char(0), - char(4), - char(0), - char(91), - char(0), - char(4), - char(0), - char(92), - char(0), - char(4), - char(0), - char(93), - char(0), - char(4), - char(0), - char(94), - char(0), - char(0), - char(0), - char(37), - char(0), - char(44), - char(0), - char(5), - char(0), - char(25), - char(0), - char(38), - char(0), - char(35), - char(0), - char(65), - char(0), - char(13), - char(0), - char(39), - char(0), - char(7), - char(0), - char(43), - char(0), - char(4), - char(0), - char(95), - char(0), - char(45), - char(0), - char(5), - char(0), - char(27), - char(0), - char(47), - char(0), - char(13), - char(0), - char(96), - char(0), - char(14), - char(0), - char(97), - char(0), - char(4), - char(0), - char(98), - char(0), - char(0), - char(0), - char(99), - char(0), - char(46), - char(0), - char(25), - char(0), - char(9), - char(0), - char(100), - char(0), - char(9), - char(0), - char(101), - char(0), - char(25), - char(0), - char(102), - char(0), - char(0), - char(0), - char(35), - char(0), - char(18), - char(0), - char(103), - char(0), - char(18), - char(0), - char(104), - char(0), - char(14), - char(0), - char(105), - char(0), - char(14), - char(0), - char(106), - char(0), - char(14), - char(0), - char(107), - char(0), - char(8), - char(0), - char(108), - char(0), - char(8), - char(0), - char(109), - char(0), - char(8), - char(0), - char(110), - char(0), - char(8), - char(0), - char(111), - char(0), - char(8), - char(0), - char(112), - char(0), - char(8), - char(0), - char(113), - char(0), - char(8), - char(0), - char(114), - char(0), - char(8), - char(0), - char(115), - char(0), - char(4), - char(0), - char(116), - char(0), - char(4), - char(0), - char(117), - char(0), - char(4), - char(0), - char(118), - char(0), - char(4), - char(0), - char(119), - char(0), - char(4), - char(0), - char(120), - char(0), - char(4), - char(0), - char(121), - char(0), - char(4), - char(0), - char(122), - char(0), - char(0), - char(0), - char(37), - char(0), - char(47), - char(0), - char(25), - char(0), - char(9), - char(0), - char(100), - char(0), - char(9), - char(0), - char(101), - char(0), - char(25), - char(0), - char(102), - char(0), - char(0), - char(0), - char(35), - char(0), - char(17), - char(0), - char(103), - char(0), - char(17), - char(0), - char(104), - char(0), - char(13), - char(0), - char(105), - char(0), - char(13), - char(0), - char(106), - char(0), - char(13), - char(0), - char(107), - char(0), - char(7), - char(0), - char(108), - char(0), - char(7), - char(0), - char(109), - char(0), - char(7), - char(0), - char(110), - char(0), - char(7), - char(0), - char(111), - char(0), - char(7), - char(0), - char(112), - char(0), - char(7), - char(0), - char(113), - char(0), - char(7), - char(0), - char(114), - char(0), - char(7), - char(0), - char(115), - char(0), - char(4), - char(0), - char(116), - char(0), - char(4), - char(0), - char(117), - char(0), - char(4), - char(0), - char(118), - char(0), - char(4), - char(0), - char(119), - char(0), - char(4), - char(0), - char(120), - char(0), - char(4), - char(0), - char(121), - char(0), - char(4), - char(0), - char(122), - char(0), - char(0), - char(0), - char(37), - char(0), - char(48), - char(0), - char(2), - char(0), - char(49), - char(0), - char(123), - char(0), - char(14), - char(0), - char(124), - char(0), - char(50), - char(0), - char(2), - char(0), - char(51), - char(0), - char(123), - char(0), - char(13), - char(0), - char(124), - char(0), - char(52), - char(0), - char(21), - char(0), - char(47), - char(0), - char(125), - char(0), - char(15), - char(0), - char(126), - char(0), - char(13), - char(0), - char(127), - char(0), - char(13), - char(0), - char(-128), - char(0), - char(13), - char(0), - char(-127), - char(0), - char(13), - char(0), - char(-126), - char(0), - char(13), - char(0), - char(124), - char(0), - char(13), - char(0), - char(-125), - char(0), - char(13), - char(0), - char(-124), - char(0), - char(13), - char(0), - char(-123), - char(0), - char(13), - char(0), - char(-122), - char(0), - char(7), - char(0), - char(-121), - char(0), - char(7), - char(0), - char(-120), - char(0), - char(7), - char(0), - char(-119), - char(0), - char(7), - char(0), - char(-118), - char(0), - char(7), - char(0), - char(-117), - char(0), - char(7), - char(0), - char(-116), - char(0), - char(7), - char(0), - char(-115), - char(0), - char(7), - char(0), - char(-114), - char(0), - char(7), - char(0), - char(-113), - char(0), - char(4), - char(0), - char(-112), - char(0), - char(53), - char(0), - char(22), - char(0), - char(46), - char(0), - char(125), - char(0), - char(16), - char(0), - char(126), - char(0), - char(14), - char(0), - char(127), - char(0), - char(14), - char(0), - char(-128), - char(0), - char(14), - char(0), - char(-127), - char(0), - char(14), - char(0), - char(-126), - char(0), - char(14), - char(0), - char(124), - char(0), - char(14), - char(0), - char(-125), - char(0), - char(14), - char(0), - char(-124), - char(0), - char(14), - char(0), - char(-123), - char(0), - char(14), - char(0), - char(-122), - char(0), - char(8), - char(0), - char(-121), - char(0), - char(8), - char(0), - char(-120), - char(0), - char(8), - char(0), - char(-119), - char(0), - char(8), - char(0), - char(-118), - char(0), - char(8), - char(0), - char(-117), - char(0), - char(8), - char(0), - char(-116), - char(0), - char(8), - char(0), - char(-115), - char(0), - char(8), - char(0), - char(-114), - char(0), - char(8), - char(0), - char(-113), - char(0), - char(4), - char(0), - char(-112), - char(0), - char(0), - char(0), - char(37), - char(0), - char(54), - char(0), - char(2), - char(0), - char(4), - char(0), - char(-111), - char(0), - char(4), - char(0), - char(-110), - char(0), - char(55), - char(0), - char(13), - char(0), - char(56), - char(0), - char(-109), - char(0), - char(56), - char(0), - char(-108), - char(0), - char(0), - char(0), - char(35), - char(0), - char(4), - char(0), - char(-107), - char(0), - char(4), - char(0), - char(-106), - char(0), - char(4), - char(0), - char(-105), - char(0), - char(4), - char(0), - char(-104), - char(0), - char(7), - char(0), - char(-103), - char(0), - char(7), - char(0), - char(-102), - char(0), - char(4), - char(0), - char(-101), - char(0), - char(4), - char(0), - char(-100), - char(0), - char(7), - char(0), - char(-99), - char(0), - char(4), - char(0), - char(-98), - char(0), - char(57), - char(0), - char(3), - char(0), - char(55), - char(0), - char(-97), - char(0), - char(13), - char(0), - char(-96), - char(0), - char(13), - char(0), - char(-95), - char(0), - char(58), - char(0), - char(3), - char(0), - char(55), - char(0), - char(-97), - char(0), - char(14), - char(0), - char(-96), - char(0), - char(14), - char(0), - char(-95), - char(0), - char(59), - char(0), - char(13), - char(0), - char(55), - char(0), - char(-97), - char(0), - char(18), - char(0), - char(-94), - char(0), - char(18), - char(0), - char(-93), - char(0), - char(4), - char(0), - char(-92), - char(0), - char(4), - char(0), - char(-91), - char(0), - char(4), - char(0), - char(-90), - char(0), - char(7), - char(0), - char(-89), - char(0), - char(7), - char(0), - char(-88), - char(0), - char(7), - char(0), - char(-87), - char(0), - char(7), - char(0), - char(-86), - char(0), - char(7), - char(0), - char(-85), - char(0), - char(7), - char(0), - char(-84), - char(0), - char(7), - char(0), - char(-83), - char(0), - char(60), - char(0), - char(13), - char(0), - char(55), - char(0), - char(-97), - char(0), - char(17), - char(0), - char(-94), - char(0), - char(17), - char(0), - char(-93), - char(0), - char(4), - char(0), - char(-92), - char(0), - char(4), - char(0), - char(-91), - char(0), - char(4), - char(0), - char(-90), - char(0), - char(7), - char(0), - char(-89), - char(0), - char(7), - char(0), - char(-88), - char(0), - char(7), - char(0), - char(-87), - char(0), - char(7), - char(0), - char(-86), - char(0), - char(7), - char(0), - char(-85), - char(0), - char(7), - char(0), - char(-84), - char(0), - char(7), - char(0), - char(-83), - char(0), - char(61), - char(0), - char(11), - char(0), - char(55), - char(0), - char(-97), - char(0), - char(17), - char(0), - char(-94), - char(0), - char(17), - char(0), - char(-93), - char(0), - char(7), - char(0), - char(-82), - char(0), - char(7), - char(0), - char(-81), - char(0), - char(7), - char(0), - char(-80), - char(0), - char(7), - char(0), - char(-85), - char(0), - char(7), - char(0), - char(-84), - char(0), - char(7), - char(0), - char(-83), - char(0), - char(7), - char(0), - char(-79), - char(0), - char(0), - char(0), - char(21), - char(0), - char(62), - char(0), - char(9), - char(0), - char(55), - char(0), - char(-97), - char(0), - char(17), - char(0), - char(-94), - char(0), - char(17), - char(0), - char(-93), - char(0), - char(13), - char(0), - char(-78), - char(0), - char(13), - char(0), - char(-77), - char(0), - char(13), - char(0), - char(-76), - char(0), - char(13), - char(0), - char(-75), - char(0), - char(4), - char(0), - char(-74), - char(0), - char(4), - char(0), - char(-73), - char(0), - char(63), - char(0), - char(5), - char(0), - char(62), - char(0), - char(-72), - char(0), - char(4), - char(0), - char(-71), - char(0), - char(7), - char(0), - char(-70), - char(0), - char(7), - char(0), - char(-69), - char(0), - char(7), - char(0), - char(-68), - char(0), - char(64), - char(0), - char(9), - char(0), - char(55), - char(0), - char(-97), - char(0), - char(17), - char(0), - char(-94), - char(0), - char(17), - char(0), - char(-93), - char(0), - char(7), - char(0), - char(-78), - char(0), - char(7), - char(0), - char(-77), - char(0), - char(7), - char(0), - char(-76), - char(0), - char(7), - char(0), - char(-75), - char(0), - char(4), - char(0), - char(-74), - char(0), - char(4), - char(0), - char(-73), - char(0), - char(49), - char(0), - char(22), - char(0), - char(8), - char(0), - char(-67), - char(0), - char(8), - char(0), - char(-79), - char(0), - char(8), - char(0), - char(110), - char(0), - char(8), - char(0), - char(-66), - char(0), - char(8), - char(0), - char(112), - char(0), - char(8), - char(0), - char(-65), - char(0), - char(8), - char(0), - char(-64), - char(0), - char(8), - char(0), - char(-63), - char(0), - char(8), - char(0), - char(-62), - char(0), - char(8), - char(0), - char(-61), - char(0), - char(8), - char(0), - char(-60), - char(0), - char(8), - char(0), - char(-59), - char(0), - char(8), - char(0), - char(-58), - char(0), - char(8), - char(0), - char(-57), - char(0), - char(8), - char(0), - char(-56), - char(0), - char(8), - char(0), - char(-55), - char(0), - char(4), - char(0), - char(-54), - char(0), - char(4), - char(0), - char(-53), - char(0), - char(4), - char(0), - char(-52), - char(0), - char(4), - char(0), - char(-51), - char(0), - char(4), - char(0), - char(-50), - char(0), - char(0), - char(0), - char(37), - char(0), - char(51), - char(0), - char(22), - char(0), - char(7), - char(0), - char(-67), - char(0), - char(7), - char(0), - char(-79), - char(0), - char(7), - char(0), - char(110), - char(0), - char(7), - char(0), - char(-66), - char(0), - char(7), - char(0), - char(112), - char(0), - char(7), - char(0), - char(-65), - char(0), - char(7), - char(0), - char(-64), - char(0), - char(7), - char(0), - char(-63), - char(0), - char(7), - char(0), - char(-62), - char(0), - char(7), - char(0), - char(-61), - char(0), - char(7), - char(0), - char(-60), - char(0), - char(7), - char(0), - char(-59), - char(0), - char(7), - char(0), - char(-58), - char(0), - char(7), - char(0), - char(-57), - char(0), - char(7), - char(0), - char(-56), - char(0), - char(7), - char(0), - char(-55), - char(0), - char(4), - char(0), - char(-54), - char(0), - char(4), - char(0), - char(-53), - char(0), - char(4), - char(0), - char(-52), - char(0), - char(4), - char(0), - char(-51), - char(0), - char(4), - char(0), - char(-50), - char(0), - char(0), - char(0), - char(37), - char(0), - char(65), - char(0), - char(4), - char(0), - char(7), - char(0), - char(-49), - char(0), - char(7), - char(0), - char(-48), - char(0), - char(7), - char(0), - char(-47), - char(0), - char(4), - char(0), - char(78), - char(0), - char(66), - char(0), - char(10), - char(0), - char(65), - char(0), - char(-46), - char(0), - char(13), - char(0), - char(-45), - char(0), - char(13), - char(0), - char(-44), - char(0), - char(13), - char(0), - char(-43), - char(0), - char(13), - char(0), - char(-42), - char(0), - char(13), - char(0), - char(-41), - char(0), - char(7), - char(0), - char(-121), - char(0), - char(7), - char(0), - char(-40), - char(0), - char(4), - char(0), - char(-39), - char(0), - char(4), - char(0), - char(53), - char(0), - char(67), - char(0), - char(4), - char(0), - char(65), - char(0), - char(-46), - char(0), - char(4), - char(0), - char(-38), - char(0), - char(7), - char(0), - char(-37), - char(0), - char(4), - char(0), - char(-36), - char(0), - char(68), - char(0), - char(4), - char(0), - char(13), - char(0), - char(-41), - char(0), - char(65), - char(0), - char(-46), - char(0), - char(4), - char(0), - char(-35), - char(0), - char(7), - char(0), - char(-34), - char(0), - char(69), - char(0), - char(7), - char(0), - char(13), - char(0), - char(-33), - char(0), - char(65), - char(0), - char(-46), - char(0), - char(4), - char(0), - char(-32), - char(0), - char(7), - char(0), - char(-31), - char(0), - char(7), - char(0), - char(-30), - char(0), - char(7), - char(0), - char(-29), - char(0), - char(4), - char(0), - char(53), - char(0), - char(70), - char(0), - char(6), - char(0), - char(15), - char(0), - char(-28), - char(0), - char(13), - char(0), - char(-30), - char(0), - char(13), - char(0), - char(-27), - char(0), - char(56), - char(0), - char(-26), - char(0), - char(4), - char(0), - char(-25), - char(0), - char(7), - char(0), - char(-29), - char(0), - char(71), - char(0), - char(26), - char(0), - char(4), - char(0), - char(-24), - char(0), - char(7), - char(0), - char(-23), - char(0), - char(7), - char(0), - char(-79), - char(0), - char(7), - char(0), - char(-22), - char(0), - char(7), - char(0), - char(-21), - char(0), - char(7), - char(0), - char(-20), - char(0), - char(7), - char(0), - char(-19), - char(0), - char(7), - char(0), - char(-18), - char(0), - char(7), - char(0), - char(-17), - char(0), - char(7), - char(0), - char(-16), - char(0), - char(7), - char(0), - char(-15), - char(0), - char(7), - char(0), - char(-14), - char(0), - char(7), - char(0), - char(-13), - char(0), - char(7), - char(0), - char(-12), - char(0), - char(7), - char(0), - char(-11), - char(0), - char(7), - char(0), - char(-10), - char(0), - char(7), - char(0), - char(-9), - char(0), - char(7), - char(0), - char(-8), - char(0), - char(7), - char(0), - char(-7), - char(0), - char(7), - char(0), - char(-6), - char(0), - char(7), - char(0), - char(-5), - char(0), - char(4), - char(0), - char(-4), - char(0), - char(4), - char(0), - char(-3), - char(0), - char(4), - char(0), - char(-2), - char(0), - char(4), - char(0), - char(-1), - char(0), - char(4), - char(0), - char(117), - char(0), - char(72), - char(0), - char(12), - char(0), - char(15), - char(0), - char(0), - char(1), - char(15), - char(0), - char(1), - char(1), - char(15), - char(0), - char(2), - char(1), - char(13), - char(0), - char(3), - char(1), - char(13), - char(0), - char(4), - char(1), - char(7), - char(0), - char(5), - char(1), - char(4), - char(0), - char(6), - char(1), - char(4), - char(0), - char(7), - char(1), - char(4), - char(0), - char(8), - char(1), - char(4), - char(0), - char(9), - char(1), - char(7), - char(0), - char(-31), - char(0), - char(4), - char(0), - char(53), - char(0), - char(73), - char(0), - char(27), - char(0), - char(17), - char(0), - char(10), - char(1), - char(15), - char(0), - char(11), - char(1), - char(15), - char(0), - char(12), - char(1), - char(13), - char(0), - char(3), - char(1), - char(13), - char(0), - char(13), - char(1), - char(13), - char(0), - char(14), - char(1), - char(13), - char(0), - char(15), - char(1), - char(13), - char(0), - char(16), - char(1), - char(13), - char(0), - char(17), - char(1), - char(4), - char(0), - char(18), - char(1), - char(7), - char(0), - char(19), - char(1), - char(4), - char(0), - char(20), - char(1), - char(4), - char(0), - char(21), - char(1), - char(4), - char(0), - char(22), - char(1), - char(7), - char(0), - char(23), - char(1), - char(7), - char(0), - char(24), - char(1), - char(4), - char(0), - char(25), - char(1), - char(4), - char(0), - char(26), - char(1), - char(7), - char(0), - char(27), - char(1), - char(7), - char(0), - char(28), - char(1), - char(7), - char(0), - char(29), - char(1), - char(7), - char(0), - char(30), - char(1), - char(7), - char(0), - char(31), - char(1), - char(7), - char(0), - char(32), - char(1), - char(4), - char(0), - char(33), - char(1), - char(4), - char(0), - char(34), - char(1), - char(4), - char(0), - char(35), - char(1), - char(74), - char(0), - char(12), - char(0), - char(9), - char(0), - char(36), - char(1), - char(9), - char(0), - char(37), - char(1), - char(13), - char(0), - char(38), - char(1), - char(7), - char(0), - char(39), - char(1), - char(7), - char(0), - char(-63), - char(0), - char(7), - char(0), - char(40), - char(1), - char(4), - char(0), - char(41), - char(1), - char(13), - char(0), - char(42), - char(1), - char(4), - char(0), - char(43), - char(1), - char(4), - char(0), - char(44), - char(1), - char(4), - char(0), - char(45), - char(1), - char(4), - char(0), - char(53), - char(0), - char(75), - char(0), - char(19), - char(0), - char(47), - char(0), - char(125), - char(0), - char(72), - char(0), - char(46), - char(1), - char(65), - char(0), - char(47), - char(1), - char(66), - char(0), - char(48), - char(1), - char(67), - char(0), - char(49), - char(1), - char(68), - char(0), - char(50), - char(1), - char(69), - char(0), - char(51), - char(1), - char(70), - char(0), - char(52), - char(1), - char(73), - char(0), - char(53), - char(1), - char(74), - char(0), - char(54), - char(1), - char(4), - char(0), - char(55), - char(1), - char(4), - char(0), - char(21), - char(1), - char(4), - char(0), - char(56), - char(1), - char(4), - char(0), - char(57), - char(1), - char(4), - char(0), - char(58), - char(1), - char(4), - char(0), - char(59), - char(1), - char(4), - char(0), - char(60), - char(1), - char(4), - char(0), - char(61), - char(1), - char(71), - char(0), - char(62), - char(1), -}; -int b3s_bulletDNAlen = sizeof(b3s_bulletDNAstr); -char b3s_bulletDNAstr64[] = { - char(83), - char(68), - char(78), - char(65), - char(78), - char(65), - char(77), - char(69), - char(63), - char(1), - char(0), - char(0), - char(109), - char(95), - char(115), - char(105), - char(122), - char(101), - char(0), - char(109), - char(95), - char(99), - char(97), - char(112), - char(97), - char(99), - char(105), - char(116), - char(121), - char(0), - char(42), - char(109), - char(95), - char(100), - char(97), - char(116), - char(97), - char(0), - char(109), - char(95), - char(99), - char(111), - char(108), - char(108), - char(105), - char(115), - char(105), - char(111), - char(110), - char(83), - char(104), - char(97), - char(112), - char(101), - char(115), - char(0), - char(109), - char(95), - char(99), - char(111), - char(108), - char(108), - char(105), - char(115), - char(105), - char(111), - char(110), - char(79), - char(98), - char(106), - char(101), - char(99), - char(116), - char(115), - char(0), - char(109), - char(95), - char(99), - char(111), - char(110), - char(115), - char(116), - char(114), - char(97), - char(105), - char(110), - char(116), - char(115), - char(0), - char(42), - char(102), - char(105), - char(114), - char(115), - char(116), - char(0), - char(42), - char(108), - char(97), - char(115), - char(116), - char(0), - char(109), - char(95), - char(102), - char(108), - char(111), - char(97), - char(116), - char(115), - char(91), - char(52), - char(93), - char(0), - char(109), - char(95), - char(101), - char(108), - char(91), - char(51), - char(93), - char(0), - char(109), - char(95), - char(98), - char(97), - char(115), - char(105), - char(115), - char(0), - char(109), - char(95), - char(111), - char(114), - char(105), - char(103), - char(105), - char(110), - char(0), - char(109), - char(95), - char(114), - char(111), - char(111), - char(116), - char(78), - char(111), - char(100), - char(101), - char(73), - char(110), - char(100), - char(101), - char(120), - char(0), - char(109), - char(95), - char(115), - char(117), - char(98), - char(116), - char(114), - char(101), - char(101), - char(83), - char(105), - char(122), - char(101), - char(0), - char(109), - char(95), - char(113), - char(117), - char(97), - char(110), - char(116), - char(105), - char(122), - char(101), - char(100), - char(65), - char(97), - char(98), - char(98), - char(77), - char(105), - char(110), - char(91), - char(51), - char(93), - char(0), - char(109), - char(95), - char(113), - char(117), - char(97), - char(110), - char(116), - char(105), - char(122), - char(101), - char(100), - char(65), - char(97), - char(98), - char(98), - char(77), - char(97), - char(120), - char(91), - char(51), - char(93), - char(0), - char(109), - char(95), - char(97), - char(97), - char(98), - char(98), - char(77), - char(105), - char(110), - char(79), - char(114), - char(103), - char(0), - char(109), - char(95), - char(97), - char(97), - char(98), - char(98), - char(77), - char(97), - char(120), - char(79), - char(114), - char(103), - char(0), - char(109), - char(95), - char(101), - char(115), - char(99), - char(97), - char(112), - char(101), - char(73), - char(110), - char(100), - char(101), - char(120), - char(0), - char(109), - char(95), - char(115), - char(117), - char(98), - char(80), - char(97), - char(114), - char(116), - char(0), - char(109), - char(95), - char(116), - char(114), - char(105), - char(97), - char(110), - char(103), - char(108), - char(101), - char(73), - char(110), - char(100), - char(101), - char(120), - char(0), - char(109), - char(95), - char(112), - char(97), - char(100), - char(91), - char(52), - char(93), - char(0), - char(109), - char(95), - char(101), - char(115), - char(99), - char(97), - char(112), - char(101), - char(73), - char(110), - char(100), - char(101), - char(120), - char(79), - char(114), - char(84), - char(114), - char(105), - char(97), - char(110), - char(103), - char(108), - char(101), - char(73), - char(110), - char(100), - char(101), - char(120), - char(0), - char(109), - char(95), - char(98), - char(118), - char(104), - char(65), - char(97), - char(98), - char(98), - char(77), - char(105), - char(110), - char(0), - char(109), - char(95), - char(98), - char(118), - char(104), - char(65), - char(97), - char(98), - char(98), - char(77), - char(97), - char(120), - char(0), - char(109), - char(95), - char(98), - char(118), - char(104), - char(81), - char(117), - char(97), - char(110), - char(116), - char(105), - char(122), - char(97), - char(116), - char(105), - char(111), - char(110), - char(0), - char(109), - char(95), - char(99), - char(117), - char(114), - char(78), - char(111), - char(100), - char(101), - char(73), - char(110), - char(100), - char(101), - char(120), - char(0), - char(109), - char(95), - char(117), - char(115), - char(101), - char(81), - char(117), - char(97), - char(110), - char(116), - char(105), - char(122), - char(97), - char(116), - char(105), - char(111), - char(110), - char(0), - char(109), - char(95), - char(110), - char(117), - char(109), - char(67), - char(111), - char(110), - char(116), - char(105), - char(103), - char(117), - char(111), - char(117), - char(115), - char(76), - char(101), - char(97), - char(102), - char(78), - char(111), - char(100), - char(101), - char(115), - char(0), - char(109), - char(95), - char(110), - char(117), - char(109), - char(81), - char(117), - char(97), - char(110), - char(116), - char(105), - char(122), - char(101), - char(100), - char(67), - char(111), - char(110), - char(116), - char(105), - char(103), - char(117), - char(111), - char(117), - char(115), - char(78), - char(111), - char(100), - char(101), - char(115), - char(0), - char(42), - char(109), - char(95), - char(99), - char(111), - char(110), - char(116), - char(105), - char(103), - char(117), - char(111), - char(117), - char(115), - char(78), - char(111), - char(100), - char(101), - char(115), - char(80), - char(116), - char(114), - char(0), - char(42), - char(109), - char(95), - char(113), - char(117), - char(97), - char(110), - char(116), - char(105), - char(122), - char(101), - char(100), - char(67), - char(111), - char(110), - char(116), - char(105), - char(103), - char(117), - char(111), - char(117), - char(115), - char(78), - char(111), - char(100), - char(101), - char(115), - char(80), - char(116), - char(114), - char(0), - char(42), - char(109), - char(95), - char(115), - char(117), - char(98), - char(84), - char(114), - char(101), - char(101), - char(73), - char(110), - char(102), - char(111), - char(80), - char(116), - char(114), - char(0), - char(109), - char(95), - char(116), - char(114), - char(97), - char(118), - char(101), - char(114), - char(115), - char(97), - char(108), - char(77), - char(111), - char(100), - char(101), - char(0), - char(109), - char(95), - char(110), - char(117), - char(109), - char(83), - char(117), - char(98), - char(116), - char(114), - char(101), - char(101), - char(72), - char(101), - char(97), - char(100), - char(101), - char(114), - char(115), - char(0), - char(42), - char(109), - char(95), - char(110), - char(97), - char(109), - char(101), - char(0), - char(109), - char(95), - char(115), - char(104), - char(97), - char(112), - char(101), - char(84), - char(121), - char(112), - char(101), - char(0), - char(109), - char(95), - char(112), - char(97), - char(100), - char(100), - char(105), - char(110), - char(103), - char(91), - char(52), - char(93), - char(0), - char(109), - char(95), - char(99), - char(111), - char(108), - char(108), - char(105), - char(115), - char(105), - char(111), - char(110), - char(83), - char(104), - char(97), - char(112), - char(101), - char(68), - char(97), - char(116), - char(97), - char(0), - char(109), - char(95), - char(108), - char(111), - char(99), - char(97), - char(108), - char(83), - char(99), - char(97), - char(108), - char(105), - char(110), - char(103), - char(0), - char(109), - char(95), - char(112), - char(108), - char(97), - char(110), - char(101), - char(78), - char(111), - char(114), - char(109), - char(97), - char(108), - char(0), - char(109), - char(95), - char(112), - char(108), - char(97), - char(110), - char(101), - char(67), - char(111), - char(110), - char(115), - char(116), - char(97), - char(110), - char(116), - char(0), - char(109), - char(95), - char(105), - char(109), - char(112), - char(108), - char(105), - char(99), - char(105), - char(116), - char(83), - char(104), - char(97), - char(112), - char(101), - char(68), - char(105), - char(109), - char(101), - char(110), - char(115), - char(105), - char(111), - char(110), - char(115), - char(0), - char(109), - char(95), - char(99), - char(111), - char(108), - char(108), - char(105), - char(115), - char(105), - char(111), - char(110), - char(77), - char(97), - char(114), - char(103), - char(105), - char(110), - char(0), - char(109), - char(95), - char(112), - char(97), - char(100), - char(100), - char(105), - char(110), - char(103), - char(0), - char(109), - char(95), - char(112), - char(111), - char(115), - char(0), - char(109), - char(95), - char(114), - char(97), - char(100), - char(105), - char(117), - char(115), - char(0), - char(109), - char(95), - char(99), - char(111), - char(110), - char(118), - char(101), - char(120), - char(73), - char(110), - char(116), - char(101), - char(114), - char(110), - char(97), - char(108), - char(83), - char(104), - char(97), - char(112), - char(101), - char(68), - char(97), - char(116), - char(97), - char(0), - char(42), - char(109), - char(95), - char(108), - char(111), - char(99), - char(97), - char(108), - char(80), - char(111), - char(115), - char(105), - char(116), - char(105), - char(111), - char(110), - char(65), - char(114), - char(114), - char(97), - char(121), - char(80), - char(116), - char(114), - char(0), - char(109), - char(95), - char(108), - char(111), - char(99), - char(97), - char(108), - char(80), - char(111), - char(115), - char(105), - char(116), - char(105), - char(111), - char(110), - char(65), - char(114), - char(114), - char(97), - char(121), - char(83), - char(105), - char(122), - char(101), - char(0), - char(109), - char(95), - char(118), - char(97), - char(108), - char(117), - char(101), - char(0), - char(109), - char(95), - char(112), - char(97), - char(100), - char(91), - char(50), - char(93), - char(0), - char(109), - char(95), - char(118), - char(97), - char(108), - char(117), - char(101), - char(115), - char(91), - char(51), - char(93), - char(0), - char(109), - char(95), - char(112), - char(97), - char(100), - char(0), - char(42), - char(109), - char(95), - char(118), - char(101), - char(114), - char(116), - char(105), - char(99), - char(101), - char(115), - char(51), - char(102), - char(0), - char(42), - char(109), - char(95), - char(118), - char(101), - char(114), - char(116), - char(105), - char(99), - char(101), - char(115), - char(51), - char(100), - char(0), - char(42), - char(109), - char(95), - char(105), - char(110), - char(100), - char(105), - char(99), - char(101), - char(115), - char(51), - char(50), - char(0), - char(42), - char(109), - char(95), - char(51), - char(105), - char(110), - char(100), - char(105), - char(99), - char(101), - char(115), - char(49), - char(54), - char(0), - char(42), - char(109), - char(95), - char(51), - char(105), - char(110), - char(100), - char(105), - char(99), - char(101), - char(115), - char(56), - char(0), - char(42), - char(109), - char(95), - char(105), - char(110), - char(100), - char(105), - char(99), - char(101), - char(115), - char(49), - char(54), - char(0), - char(109), - char(95), - char(110), - char(117), - char(109), - char(84), - char(114), - char(105), - char(97), - char(110), - char(103), - char(108), - char(101), - char(115), - char(0), - char(109), - char(95), - char(110), - char(117), - char(109), - char(86), - char(101), - char(114), - char(116), - char(105), - char(99), - char(101), - char(115), - char(0), - char(42), - char(109), - char(95), - char(109), - char(101), - char(115), - char(104), - char(80), - char(97), - char(114), - char(116), - char(115), - char(80), - char(116), - char(114), - char(0), - char(109), - char(95), - char(115), - char(99), - char(97), - char(108), - char(105), - char(110), - char(103), - char(0), - char(109), - char(95), - char(110), - char(117), - char(109), - char(77), - char(101), - char(115), - char(104), - char(80), - char(97), - char(114), - char(116), - char(115), - char(0), - char(109), - char(95), - char(109), - char(101), - char(115), - char(104), - char(73), - char(110), - char(116), - char(101), - char(114), - char(102), - char(97), - char(99), - char(101), - char(0), - char(42), - char(109), - char(95), - char(113), - char(117), - char(97), - char(110), - char(116), - char(105), - char(122), - char(101), - char(100), - char(70), - char(108), - char(111), - char(97), - char(116), - char(66), - char(118), - char(104), - char(0), - char(42), - char(109), - char(95), - char(113), - char(117), - char(97), - char(110), - char(116), - char(105), - char(122), - char(101), - char(100), - char(68), - char(111), - char(117), - char(98), - char(108), - char(101), - char(66), - char(118), - char(104), - char(0), - char(42), - char(109), - char(95), - char(116), - char(114), - char(105), - char(97), - char(110), - char(103), - char(108), - char(101), - char(73), - char(110), - char(102), - char(111), - char(77), - char(97), - char(112), - char(0), - char(109), - char(95), - char(112), - char(97), - char(100), - char(51), - char(91), - char(52), - char(93), - char(0), - char(109), - char(95), - char(116), - char(114), - char(105), - char(109), - char(101), - char(115), - char(104), - char(83), - char(104), - char(97), - char(112), - char(101), - char(68), - char(97), - char(116), - char(97), - char(0), - char(109), - char(95), - char(116), - char(114), - char(97), - char(110), - char(115), - char(102), - char(111), - char(114), - char(109), - char(0), - char(42), - char(109), - char(95), - char(99), - char(104), - char(105), - char(108), - char(100), - char(83), - char(104), - char(97), - char(112), - char(101), - char(0), - char(109), - char(95), - char(99), - char(104), - char(105), - char(108), - char(100), - char(83), - char(104), - char(97), - char(112), - char(101), - char(84), - char(121), - char(112), - char(101), - char(0), - char(109), - char(95), - char(99), - char(104), - char(105), - char(108), - char(100), - char(77), - char(97), - char(114), - char(103), - char(105), - char(110), - char(0), - char(42), - char(109), - char(95), - char(99), - char(104), - char(105), - char(108), - char(100), - char(83), - char(104), - char(97), - char(112), - char(101), - char(80), - char(116), - char(114), - char(0), - char(109), - char(95), - char(110), - char(117), - char(109), - char(67), - char(104), - char(105), - char(108), - char(100), - char(83), - char(104), - char(97), - char(112), - char(101), - char(115), - char(0), - char(109), - char(95), - char(117), - char(112), - char(65), - char(120), - char(105), - char(115), - char(0), - char(109), - char(95), - char(102), - char(108), - char(97), - char(103), - char(115), - char(0), - char(109), - char(95), - char(101), - char(100), - char(103), - char(101), - char(86), - char(48), - char(86), - char(49), - char(65), - char(110), - char(103), - char(108), - char(101), - char(0), - char(109), - char(95), - char(101), - char(100), - char(103), - char(101), - char(86), - char(49), - char(86), - char(50), - char(65), - char(110), - char(103), - char(108), - char(101), - char(0), - char(109), - char(95), - char(101), - char(100), - char(103), - char(101), - char(86), - char(50), - char(86), - char(48), - char(65), - char(110), - char(103), - char(108), - char(101), - char(0), - char(42), - char(109), - char(95), - char(104), - char(97), - char(115), - char(104), - char(84), - char(97), - char(98), - char(108), - char(101), - char(80), - char(116), - char(114), - char(0), - char(42), - char(109), - char(95), - char(110), - char(101), - char(120), - char(116), - char(80), - char(116), - char(114), - char(0), - char(42), - char(109), - char(95), - char(118), - char(97), - char(108), - char(117), - char(101), - char(65), - char(114), - char(114), - char(97), - char(121), - char(80), - char(116), - char(114), - char(0), - char(42), - char(109), - char(95), - char(107), - char(101), - char(121), - char(65), - char(114), - char(114), - char(97), - char(121), - char(80), - char(116), - char(114), - char(0), - char(109), - char(95), - char(99), - char(111), - char(110), - char(118), - char(101), - char(120), - char(69), - char(112), - char(115), - char(105), - char(108), - char(111), - char(110), - char(0), - char(109), - char(95), - char(112), - char(108), - char(97), - char(110), - char(97), - char(114), - char(69), - char(112), - char(115), - char(105), - char(108), - char(111), - char(110), - char(0), - char(109), - char(95), - char(101), - char(113), - char(117), - char(97), - char(108), - char(86), - char(101), - char(114), - char(116), - char(101), - char(120), - char(84), - char(104), - char(114), - char(101), - char(115), - char(104), - char(111), - char(108), - char(100), - char(0), - char(109), - char(95), - char(101), - char(100), - char(103), - char(101), - char(68), - char(105), - char(115), - char(116), - char(97), - char(110), - char(99), - char(101), - char(84), - char(104), - char(114), - char(101), - char(115), - char(104), - char(111), - char(108), - char(100), - char(0), - char(109), - char(95), - char(122), - char(101), - char(114), - char(111), - char(65), - char(114), - char(101), - char(97), - char(84), - char(104), - char(114), - char(101), - char(115), - char(104), - char(111), - char(108), - char(100), - char(0), - char(109), - char(95), - char(110), - char(101), - char(120), - char(116), - char(83), - char(105), - char(122), - char(101), - char(0), - char(109), - char(95), - char(104), - char(97), - char(115), - char(104), - char(84), - char(97), - char(98), - char(108), - char(101), - char(83), - char(105), - char(122), - char(101), - char(0), - char(109), - char(95), - char(110), - char(117), - char(109), - char(86), - char(97), - char(108), - char(117), - char(101), - char(115), - char(0), - char(109), - char(95), - char(110), - char(117), - char(109), - char(75), - char(101), - char(121), - char(115), - char(0), - char(109), - char(95), - char(103), - char(105), - char(109), - char(112), - char(97), - char(99), - char(116), - char(83), - char(117), - char(98), - char(84), - char(121), - char(112), - char(101), - char(0), - char(42), - char(109), - char(95), - char(117), - char(110), - char(115), - char(99), - char(97), - char(108), - char(101), - char(100), - char(80), - char(111), - char(105), - char(110), - char(116), - char(115), - char(70), - char(108), - char(111), - char(97), - char(116), - char(80), - char(116), - char(114), - char(0), - char(42), - char(109), - char(95), - char(117), - char(110), - char(115), - char(99), - char(97), - char(108), - char(101), - char(100), - char(80), - char(111), - char(105), - char(110), - char(116), - char(115), - char(68), - char(111), - char(117), - char(98), - char(108), - char(101), - char(80), - char(116), - char(114), - char(0), - char(109), - char(95), - char(110), - char(117), - char(109), - char(85), - char(110), - char(115), - char(99), - char(97), - char(108), - char(101), - char(100), - char(80), - char(111), - char(105), - char(110), - char(116), - char(115), - char(0), - char(109), - char(95), - char(112), - char(97), - char(100), - char(100), - char(105), - char(110), - char(103), - char(51), - char(91), - char(52), - char(93), - char(0), - char(42), - char(109), - char(95), - char(98), - char(114), - char(111), - char(97), - char(100), - char(112), - char(104), - char(97), - char(115), - char(101), - char(72), - char(97), - char(110), - char(100), - char(108), - char(101), - char(0), - char(42), - char(109), - char(95), - char(99), - char(111), - char(108), - char(108), - char(105), - char(115), - char(105), - char(111), - char(110), - char(83), - char(104), - char(97), - char(112), - char(101), - char(0), - char(42), - char(109), - char(95), - char(114), - char(111), - char(111), - char(116), - char(67), - char(111), - char(108), - char(108), - char(105), - char(115), - char(105), - char(111), - char(110), - char(83), - char(104), - char(97), - char(112), - char(101), - char(0), - char(109), - char(95), - char(119), - char(111), - char(114), - char(108), - char(100), - char(84), - char(114), - char(97), - char(110), - char(115), - char(102), - char(111), - char(114), - char(109), - char(0), - char(109), - char(95), - char(105), - char(110), - char(116), - char(101), - char(114), - char(112), - char(111), - char(108), - char(97), - char(116), - char(105), - char(111), - char(110), - char(87), - char(111), - char(114), - char(108), - char(100), - char(84), - char(114), - char(97), - char(110), - char(115), - char(102), - char(111), - char(114), - char(109), - char(0), - char(109), - char(95), - char(105), - char(110), - char(116), - char(101), - char(114), - char(112), - char(111), - char(108), - char(97), - char(116), - char(105), - char(111), - char(110), - char(76), - char(105), - char(110), - char(101), - char(97), - char(114), - char(86), - char(101), - char(108), - char(111), - char(99), - char(105), - char(116), - char(121), - char(0), - char(109), - char(95), - char(105), - char(110), - char(116), - char(101), - char(114), - char(112), - char(111), - char(108), - char(97), - char(116), - char(105), - char(111), - char(110), - char(65), - char(110), - char(103), - char(117), - char(108), - char(97), - char(114), - char(86), - char(101), - char(108), - char(111), - char(99), - char(105), - char(116), - char(121), - char(0), - char(109), - char(95), - char(97), - char(110), - char(105), - char(115), - char(111), - char(116), - char(114), - char(111), - char(112), - char(105), - char(99), - char(70), - char(114), - char(105), - char(99), - char(116), - char(105), - char(111), - char(110), - char(0), - char(109), - char(95), - char(99), - char(111), - char(110), - char(116), - char(97), - char(99), - char(116), - char(80), - char(114), - char(111), - char(99), - char(101), - char(115), - char(115), - char(105), - char(110), - char(103), - char(84), - char(104), - char(114), - char(101), - char(115), - char(104), - char(111), - char(108), - char(100), - char(0), - char(109), - char(95), - char(100), - char(101), - char(97), - char(99), - char(116), - char(105), - char(118), - char(97), - char(116), - char(105), - char(111), - char(110), - char(84), - char(105), - char(109), - char(101), - char(0), - char(109), - char(95), - char(102), - char(114), - char(105), - char(99), - char(116), - char(105), - char(111), - char(110), - char(0), - char(109), - char(95), - char(114), - char(111), - char(108), - char(108), - char(105), - char(110), - char(103), - char(70), - char(114), - char(105), - char(99), - char(116), - char(105), - char(111), - char(110), - char(0), - char(109), - char(95), - char(114), - char(101), - char(115), - char(116), - char(105), - char(116), - char(117), - char(116), - char(105), - char(111), - char(110), - char(0), - char(109), - char(95), - char(104), - char(105), - char(116), - char(70), - char(114), - char(97), - char(99), - char(116), - char(105), - char(111), - char(110), - char(0), - char(109), - char(95), - char(99), - char(99), - char(100), - char(83), - char(119), - char(101), - char(112), - char(116), - char(83), - char(112), - char(104), - char(101), - char(114), - char(101), - char(82), - char(97), - char(100), - char(105), - char(117), - char(115), - char(0), - char(109), - char(95), - char(99), - char(99), - char(100), - char(77), - char(111), - char(116), - char(105), - char(111), - char(110), - char(84), - char(104), - char(114), - char(101), - char(115), - char(104), - char(111), - char(108), - char(100), - char(0), - char(109), - char(95), - char(104), - char(97), - char(115), - char(65), - char(110), - char(105), - char(115), - char(111), - char(116), - char(114), - char(111), - char(112), - char(105), - char(99), - char(70), - char(114), - char(105), - char(99), - char(116), - char(105), - char(111), - char(110), - char(0), - char(109), - char(95), - char(99), - char(111), - char(108), - char(108), - char(105), - char(115), - char(105), - char(111), - char(110), - char(70), - char(108), - char(97), - char(103), - char(115), - char(0), - char(109), - char(95), - char(105), - char(115), - char(108), - char(97), - char(110), - char(100), - char(84), - char(97), - char(103), - char(49), - char(0), - char(109), - char(95), - char(99), - char(111), - char(109), - char(112), - char(97), - char(110), - char(105), - char(111), - char(110), - char(73), - char(100), - char(0), - char(109), - char(95), - char(97), - char(99), - char(116), - char(105), - char(118), - char(97), - char(116), - char(105), - char(111), - char(110), - char(83), - char(116), - char(97), - char(116), - char(101), - char(49), - char(0), - char(109), - char(95), - char(105), - char(110), - char(116), - char(101), - char(114), - char(110), - char(97), - char(108), - char(84), - char(121), - char(112), - char(101), - char(0), - char(109), - char(95), - char(99), - char(104), - char(101), - char(99), - char(107), - char(67), - char(111), - char(108), - char(108), - char(105), - char(100), - char(101), - char(87), - char(105), - char(116), - char(104), - char(0), - char(109), - char(95), - char(115), - char(111), - char(108), - char(118), - char(101), - char(114), - char(73), - char(110), - char(102), - char(111), - char(0), - char(109), - char(95), - char(103), - char(114), - char(97), - char(118), - char(105), - char(116), - char(121), - char(0), - char(109), - char(95), - char(99), - char(111), - char(108), - char(108), - char(105), - char(115), - char(105), - char(111), - char(110), - char(79), - char(98), - char(106), - char(101), - char(99), - char(116), - char(68), - char(97), - char(116), - char(97), - char(0), - char(109), - char(95), - char(105), - char(110), - char(118), - char(73), - char(110), - char(101), - char(114), - char(116), - char(105), - char(97), - char(84), - char(101), - char(110), - char(115), - char(111), - char(114), - char(87), - char(111), - char(114), - char(108), - char(100), - char(0), - char(109), - char(95), - char(108), - char(105), - char(110), - char(101), - char(97), - char(114), - char(86), - char(101), - char(108), - char(111), - char(99), - char(105), - char(116), - char(121), - char(0), - char(109), - char(95), - char(97), - char(110), - char(103), - char(117), - char(108), - char(97), - char(114), - char(86), - char(101), - char(108), - char(111), - char(99), - char(105), - char(116), - char(121), - char(0), - char(109), - char(95), - char(97), - char(110), - char(103), - char(117), - char(108), - char(97), - char(114), - char(70), - char(97), - char(99), - char(116), - char(111), - char(114), - char(0), - char(109), - char(95), - char(108), - char(105), - char(110), - char(101), - char(97), - char(114), - char(70), - char(97), - char(99), - char(116), - char(111), - char(114), - char(0), - char(109), - char(95), - char(103), - char(114), - char(97), - char(118), - char(105), - char(116), - char(121), - char(95), - char(97), - char(99), - char(99), - char(101), - char(108), - char(101), - char(114), - char(97), - char(116), - char(105), - char(111), - char(110), - char(0), - char(109), - char(95), - char(105), - char(110), - char(118), - char(73), - char(110), - char(101), - char(114), - char(116), - char(105), - char(97), - char(76), - char(111), - char(99), - char(97), - char(108), - char(0), - char(109), - char(95), - char(116), - char(111), - char(116), - char(97), - char(108), - char(70), - char(111), - char(114), - char(99), - char(101), - char(0), - char(109), - char(95), - char(116), - char(111), - char(116), - char(97), - char(108), - char(84), - char(111), - char(114), - char(113), - char(117), - char(101), - char(0), - char(109), - char(95), - char(105), - char(110), - char(118), - char(101), - char(114), - char(115), - char(101), - char(77), - char(97), - char(115), - char(115), - char(0), - char(109), - char(95), - char(108), - char(105), - char(110), - char(101), - char(97), - char(114), - char(68), - char(97), - char(109), - char(112), - char(105), - char(110), - char(103), - char(0), - char(109), - char(95), - char(97), - char(110), - char(103), - char(117), - char(108), - char(97), - char(114), - char(68), - char(97), - char(109), - char(112), - char(105), - char(110), - char(103), - char(0), - char(109), - char(95), - char(97), - char(100), - char(100), - char(105), - char(116), - char(105), - char(111), - char(110), - char(97), - char(108), - char(68), - char(97), - char(109), - char(112), - char(105), - char(110), - char(103), - char(70), - char(97), - char(99), - char(116), - char(111), - char(114), - char(0), - char(109), - char(95), - char(97), - char(100), - char(100), - char(105), - char(116), - char(105), - char(111), - char(110), - char(97), - char(108), - char(76), - char(105), - char(110), - char(101), - char(97), - char(114), - char(68), - char(97), - char(109), - char(112), - char(105), - char(110), - char(103), - char(84), - char(104), - char(114), - char(101), - char(115), - char(104), - char(111), - char(108), - char(100), - char(83), - char(113), - char(114), - char(0), - char(109), - char(95), - char(97), - char(100), - char(100), - char(105), - char(116), - char(105), - char(111), - char(110), - char(97), - char(108), - char(65), - char(110), - char(103), - char(117), - char(108), - char(97), - char(114), - char(68), - char(97), - char(109), - char(112), - char(105), - char(110), - char(103), - char(84), - char(104), - char(114), - char(101), - char(115), - char(104), - char(111), - char(108), - char(100), - char(83), - char(113), - char(114), - char(0), - char(109), - char(95), - char(97), - char(100), - char(100), - char(105), - char(116), - char(105), - char(111), - char(110), - char(97), - char(108), - char(65), - char(110), - char(103), - char(117), - char(108), - char(97), - char(114), - char(68), - char(97), - char(109), - char(112), - char(105), - char(110), - char(103), - char(70), - char(97), - char(99), - char(116), - char(111), - char(114), - char(0), - char(109), - char(95), - char(108), - char(105), - char(110), - char(101), - char(97), - char(114), - char(83), - char(108), - char(101), - char(101), - char(112), - char(105), - char(110), - char(103), - char(84), - char(104), - char(114), - char(101), - char(115), - char(104), - char(111), - char(108), - char(100), - char(0), - char(109), - char(95), - char(97), - char(110), - char(103), - char(117), - char(108), - char(97), - char(114), - char(83), - char(108), - char(101), - char(101), - char(112), - char(105), - char(110), - char(103), - char(84), - char(104), - char(114), - char(101), - char(115), - char(104), - char(111), - char(108), - char(100), - char(0), - char(109), - char(95), - char(97), - char(100), - char(100), - char(105), - char(116), - char(105), - char(111), - char(110), - char(97), - char(108), - char(68), - char(97), - char(109), - char(112), - char(105), - char(110), - char(103), - char(0), - char(109), - char(95), - char(110), - char(117), - char(109), - char(67), - char(111), - char(110), - char(115), - char(116), - char(114), - char(97), - char(105), - char(110), - char(116), - char(82), - char(111), - char(119), - char(115), - char(0), - char(110), - char(117), - char(98), - char(0), - char(42), - char(109), - char(95), - char(114), - char(98), - char(65), - char(0), - char(42), - char(109), - char(95), - char(114), - char(98), - char(66), - char(0), - char(109), - char(95), - char(111), - char(98), - char(106), - char(101), - char(99), - char(116), - char(84), - char(121), - char(112), - char(101), - char(0), - char(109), - char(95), - char(117), - char(115), - char(101), - char(114), - char(67), - char(111), - char(110), - char(115), - char(116), - char(114), - char(97), - char(105), - char(110), - char(116), - char(84), - char(121), - char(112), - char(101), - char(0), - char(109), - char(95), - char(117), - char(115), - char(101), - char(114), - char(67), - char(111), - char(110), - char(115), - char(116), - char(114), - char(97), - char(105), - char(110), - char(116), - char(73), - char(100), - char(0), - char(109), - char(95), - char(110), - char(101), - char(101), - char(100), - char(115), - char(70), - char(101), - char(101), - char(100), - char(98), - char(97), - char(99), - char(107), - char(0), - char(109), - char(95), - char(97), - char(112), - char(112), - char(108), - char(105), - char(101), - char(100), - char(73), - char(109), - char(112), - char(117), - char(108), - char(115), - char(101), - char(0), - char(109), - char(95), - char(100), - char(98), - char(103), - char(68), - char(114), - char(97), - char(119), - char(83), - char(105), - char(122), - char(101), - char(0), - char(109), - char(95), - char(100), - char(105), - char(115), - char(97), - char(98), - char(108), - char(101), - char(67), - char(111), - char(108), - char(108), - char(105), - char(115), - char(105), - char(111), - char(110), - char(115), - char(66), - char(101), - char(116), - char(119), - char(101), - char(101), - char(110), - char(76), - char(105), - char(110), - char(107), - char(101), - char(100), - char(66), - char(111), - char(100), - char(105), - char(101), - char(115), - char(0), - char(109), - char(95), - char(111), - char(118), - char(101), - char(114), - char(114), - char(105), - char(100), - char(101), - char(78), - char(117), - char(109), - char(83), - char(111), - char(108), - char(118), - char(101), - char(114), - char(73), - char(116), - char(101), - char(114), - char(97), - char(116), - char(105), - char(111), - char(110), - char(115), - char(0), - char(109), - char(95), - char(98), - char(114), - char(101), - char(97), - char(107), - char(105), - char(110), - char(103), - char(73), - char(109), - char(112), - char(117), - char(108), - char(115), - char(101), - char(84), - char(104), - char(114), - char(101), - char(115), - char(104), - char(111), - char(108), - char(100), - char(0), - char(109), - char(95), - char(105), - char(115), - char(69), - char(110), - char(97), - char(98), - char(108), - char(101), - char(100), - char(0), - char(109), - char(95), - char(116), - char(121), - char(112), - char(101), - char(67), - char(111), - char(110), - char(115), - char(116), - char(114), - char(97), - char(105), - char(110), - char(116), - char(68), - char(97), - char(116), - char(97), - char(0), - char(109), - char(95), - char(112), - char(105), - char(118), - char(111), - char(116), - char(73), - char(110), - char(65), - char(0), - char(109), - char(95), - char(112), - char(105), - char(118), - char(111), - char(116), - char(73), - char(110), - char(66), - char(0), - char(109), - char(95), - char(114), - char(98), - char(65), - char(70), - char(114), - char(97), - char(109), - char(101), - char(0), - char(109), - char(95), - char(114), - char(98), - char(66), - char(70), - char(114), - char(97), - char(109), - char(101), - char(0), - char(109), - char(95), - char(117), - char(115), - char(101), - char(82), - char(101), - char(102), - char(101), - char(114), - char(101), - char(110), - char(99), - char(101), - char(70), - char(114), - char(97), - char(109), - char(101), - char(65), - char(0), - char(109), - char(95), - char(97), - char(110), - char(103), - char(117), - char(108), - char(97), - char(114), - char(79), - char(110), - char(108), - char(121), - char(0), - char(109), - char(95), - char(101), - char(110), - char(97), - char(98), - char(108), - char(101), - char(65), - char(110), - char(103), - char(117), - char(108), - char(97), - char(114), - char(77), - char(111), - char(116), - char(111), - char(114), - char(0), - char(109), - char(95), - char(109), - char(111), - char(116), - char(111), - char(114), - char(84), - char(97), - char(114), - char(103), - char(101), - char(116), - char(86), - char(101), - char(108), - char(111), - char(99), - char(105), - char(116), - char(121), - char(0), - char(109), - char(95), - char(109), - char(97), - char(120), - char(77), - char(111), - char(116), - char(111), - char(114), - char(73), - char(109), - char(112), - char(117), - char(108), - char(115), - char(101), - char(0), - char(109), - char(95), - char(108), - char(111), - char(119), - char(101), - char(114), - char(76), - char(105), - char(109), - char(105), - char(116), - char(0), - char(109), - char(95), - char(117), - char(112), - char(112), - char(101), - char(114), - char(76), - char(105), - char(109), - char(105), - char(116), - char(0), - char(109), - char(95), - char(108), - char(105), - char(109), - char(105), - char(116), - char(83), - char(111), - char(102), - char(116), - char(110), - char(101), - char(115), - char(115), - char(0), - char(109), - char(95), - char(98), - char(105), - char(97), - char(115), - char(70), - char(97), - char(99), - char(116), - char(111), - char(114), - char(0), - char(109), - char(95), - char(114), - char(101), - char(108), - char(97), - char(120), - char(97), - char(116), - char(105), - char(111), - char(110), - char(70), - char(97), - char(99), - char(116), - char(111), - char(114), - char(0), - char(109), - char(95), - char(115), - char(119), - char(105), - char(110), - char(103), - char(83), - char(112), - char(97), - char(110), - char(49), - char(0), - char(109), - char(95), - char(115), - char(119), - char(105), - char(110), - char(103), - char(83), - char(112), - char(97), - char(110), - char(50), - char(0), - char(109), - char(95), - char(116), - char(119), - char(105), - char(115), - char(116), - char(83), - char(112), - char(97), - char(110), - char(0), - char(109), - char(95), - char(100), - char(97), - char(109), - char(112), - char(105), - char(110), - char(103), - char(0), - char(109), - char(95), - char(108), - char(105), - char(110), - char(101), - char(97), - char(114), - char(85), - char(112), - char(112), - char(101), - char(114), - char(76), - char(105), - char(109), - char(105), - char(116), - char(0), - char(109), - char(95), - char(108), - char(105), - char(110), - char(101), - char(97), - char(114), - char(76), - char(111), - char(119), - char(101), - char(114), - char(76), - char(105), - char(109), - char(105), - char(116), - char(0), - char(109), - char(95), - char(97), - char(110), - char(103), - char(117), - char(108), - char(97), - char(114), - char(85), - char(112), - char(112), - char(101), - char(114), - char(76), - char(105), - char(109), - char(105), - char(116), - char(0), - char(109), - char(95), - char(97), - char(110), - char(103), - char(117), - char(108), - char(97), - char(114), - char(76), - char(111), - char(119), - char(101), - char(114), - char(76), - char(105), - char(109), - char(105), - char(116), - char(0), - char(109), - char(95), - char(117), - char(115), - char(101), - char(76), - char(105), - char(110), - char(101), - char(97), - char(114), - char(82), - char(101), - char(102), - char(101), - char(114), - char(101), - char(110), - char(99), - char(101), - char(70), - char(114), - char(97), - char(109), - char(101), - char(65), - char(0), - char(109), - char(95), - char(117), - char(115), - char(101), - char(79), - char(102), - char(102), - char(115), - char(101), - char(116), - char(70), - char(111), - char(114), - char(67), - char(111), - char(110), - char(115), - char(116), - char(114), - char(97), - char(105), - char(110), - char(116), - char(70), - char(114), - char(97), - char(109), - char(101), - char(0), - char(109), - char(95), - char(54), - char(100), - char(111), - char(102), - char(68), - char(97), - char(116), - char(97), - char(0), - char(109), - char(95), - char(115), - char(112), - char(114), - char(105), - char(110), - char(103), - char(69), - char(110), - char(97), - char(98), - char(108), - char(101), - char(100), - char(91), - char(54), - char(93), - char(0), - char(109), - char(95), - char(101), - char(113), - char(117), - char(105), - char(108), - char(105), - char(98), - char(114), - char(105), - char(117), - char(109), - char(80), - char(111), - char(105), - char(110), - char(116), - char(91), - char(54), - char(93), - char(0), - char(109), - char(95), - char(115), - char(112), - char(114), - char(105), - char(110), - char(103), - char(83), - char(116), - char(105), - char(102), - char(102), - char(110), - char(101), - char(115), - char(115), - char(91), - char(54), - char(93), - char(0), - char(109), - char(95), - char(115), - char(112), - char(114), - char(105), - char(110), - char(103), - char(68), - char(97), - char(109), - char(112), - char(105), - char(110), - char(103), - char(91), - char(54), - char(93), - char(0), - char(109), - char(95), - char(116), - char(97), - char(117), - char(0), - char(109), - char(95), - char(116), - char(105), - char(109), - char(101), - char(83), - char(116), - char(101), - char(112), - char(0), - char(109), - char(95), - char(109), - char(97), - char(120), - char(69), - char(114), - char(114), - char(111), - char(114), - char(82), - char(101), - char(100), - char(117), - char(99), - char(116), - char(105), - char(111), - char(110), - char(0), - char(109), - char(95), - char(115), - char(111), - char(114), - char(0), - char(109), - char(95), - char(101), - char(114), - char(112), - char(0), - char(109), - char(95), - char(101), - char(114), - char(112), - char(50), - char(0), - char(109), - char(95), - char(103), - char(108), - char(111), - char(98), - char(97), - char(108), - char(67), - char(102), - char(109), - char(0), - char(109), - char(95), - char(115), - char(112), - char(108), - char(105), - char(116), - char(73), - char(109), - char(112), - char(117), - char(108), - char(115), - char(101), - char(80), - char(101), - char(110), - char(101), - char(116), - char(114), - char(97), - char(116), - char(105), - char(111), - char(110), - char(84), - char(104), - char(114), - char(101), - char(115), - char(104), - char(111), - char(108), - char(100), - char(0), - char(109), - char(95), - char(115), - char(112), - char(108), - char(105), - char(116), - char(73), - char(109), - char(112), - char(117), - char(108), - char(115), - char(101), - char(84), - char(117), - char(114), - char(110), - char(69), - char(114), - char(112), - char(0), - char(109), - char(95), - char(108), - char(105), - char(110), - char(101), - char(97), - char(114), - char(83), - char(108), - char(111), - char(112), - char(0), - char(109), - char(95), - char(119), - char(97), - char(114), - char(109), - char(115), - char(116), - char(97), - char(114), - char(116), - char(105), - char(110), - char(103), - char(70), - char(97), - char(99), - char(116), - char(111), - char(114), - char(0), - char(109), - char(95), - char(109), - char(97), - char(120), - char(71), - char(121), - char(114), - char(111), - char(115), - char(99), - char(111), - char(112), - char(105), - char(99), - char(70), - char(111), - char(114), - char(99), - char(101), - char(0), - char(109), - char(95), - char(115), - char(105), - char(110), - char(103), - char(108), - char(101), - char(65), - char(120), - char(105), - char(115), - char(82), - char(111), - char(108), - char(108), - char(105), - char(110), - char(103), - char(70), - char(114), - char(105), - char(99), - char(116), - char(105), - char(111), - char(110), - char(84), - char(104), - char(114), - char(101), - char(115), - char(104), - char(111), - char(108), - char(100), - char(0), - char(109), - char(95), - char(110), - char(117), - char(109), - char(73), - char(116), - char(101), - char(114), - char(97), - char(116), - char(105), - char(111), - char(110), - char(115), - char(0), - char(109), - char(95), - char(115), - char(111), - char(108), - char(118), - char(101), - char(114), - char(77), - char(111), - char(100), - char(101), - char(0), - char(109), - char(95), - char(114), - char(101), - char(115), - char(116), - char(105), - char(110), - char(103), - char(67), - char(111), - char(110), - char(116), - char(97), - char(99), - char(116), - char(82), - char(101), - char(115), - char(116), - char(105), - char(116), - char(117), - char(116), - char(105), - char(111), - char(110), - char(84), - char(104), - char(114), - char(101), - char(115), - char(104), - char(111), - char(108), - char(100), - char(0), - char(109), - char(95), - char(109), - char(105), - char(110), - char(105), - char(109), - char(117), - char(109), - char(83), - char(111), - char(108), - char(118), - char(101), - char(114), - char(66), - char(97), - char(116), - char(99), - char(104), - char(83), - char(105), - char(122), - char(101), - char(0), - char(109), - char(95), - char(115), - char(112), - char(108), - char(105), - char(116), - char(73), - char(109), - char(112), - char(117), - char(108), - char(115), - char(101), - char(0), - char(109), - char(95), - char(108), - char(105), - char(110), - char(101), - char(97), - char(114), - char(83), - char(116), - char(105), - char(102), - char(102), - char(110), - char(101), - char(115), - char(115), - char(0), - char(109), - char(95), - char(97), - char(110), - char(103), - char(117), - char(108), - char(97), - char(114), - char(83), - char(116), - char(105), - char(102), - char(102), - char(110), - char(101), - char(115), - char(115), - char(0), - char(109), - char(95), - char(118), - char(111), - char(108), - char(117), - char(109), - char(101), - char(83), - char(116), - char(105), - char(102), - char(102), - char(110), - char(101), - char(115), - char(115), - char(0), - char(42), - char(109), - char(95), - char(109), - char(97), - char(116), - char(101), - char(114), - char(105), - char(97), - char(108), - char(0), - char(109), - char(95), - char(112), - char(111), - char(115), - char(105), - char(116), - char(105), - char(111), - char(110), - char(0), - char(109), - char(95), - char(112), - char(114), - char(101), - char(118), - char(105), - char(111), - char(117), - char(115), - char(80), - char(111), - char(115), - char(105), - char(116), - char(105), - char(111), - char(110), - char(0), - char(109), - char(95), - char(118), - char(101), - char(108), - char(111), - char(99), - char(105), - char(116), - char(121), - char(0), - char(109), - char(95), - char(97), - char(99), - char(99), - char(117), - char(109), - char(117), - char(108), - char(97), - char(116), - char(101), - char(100), - char(70), - char(111), - char(114), - char(99), - char(101), - char(0), - char(109), - char(95), - char(110), - char(111), - char(114), - char(109), - char(97), - char(108), - char(0), - char(109), - char(95), - char(97), - char(114), - char(101), - char(97), - char(0), - char(109), - char(95), - char(97), - char(116), - char(116), - char(97), - char(99), - char(104), - char(0), - char(109), - char(95), - char(110), - char(111), - char(100), - char(101), - char(73), - char(110), - char(100), - char(105), - char(99), - char(101), - char(115), - char(91), - char(50), - char(93), - char(0), - char(109), - char(95), - char(114), - char(101), - char(115), - char(116), - char(76), - char(101), - char(110), - char(103), - char(116), - char(104), - char(0), - char(109), - char(95), - char(98), - char(98), - char(101), - char(110), - char(100), - char(105), - char(110), - char(103), - char(0), - char(109), - char(95), - char(110), - char(111), - char(100), - char(101), - char(73), - char(110), - char(100), - char(105), - char(99), - char(101), - char(115), - char(91), - char(51), - char(93), - char(0), - char(109), - char(95), - char(114), - char(101), - char(115), - char(116), - char(65), - char(114), - char(101), - char(97), - char(0), - char(109), - char(95), - char(99), - char(48), - char(91), - char(52), - char(93), - char(0), - char(109), - char(95), - char(110), - char(111), - char(100), - char(101), - char(73), - char(110), - char(100), - char(105), - char(99), - char(101), - char(115), - char(91), - char(52), - char(93), - char(0), - char(109), - char(95), - char(114), - char(101), - char(115), - char(116), - char(86), - char(111), - char(108), - char(117), - char(109), - char(101), - char(0), - char(109), - char(95), - char(99), - char(49), - char(0), - char(109), - char(95), - char(99), - char(50), - char(0), - char(109), - char(95), - char(99), - char(48), - char(0), - char(109), - char(95), - char(108), - char(111), - char(99), - char(97), - char(108), - char(70), - char(114), - char(97), - char(109), - char(101), - char(0), - char(42), - char(109), - char(95), - char(114), - char(105), - char(103), - char(105), - char(100), - char(66), - char(111), - char(100), - char(121), - char(0), - char(109), - char(95), - char(110), - char(111), - char(100), - char(101), - char(73), - char(110), - char(100), - char(101), - char(120), - char(0), - char(109), - char(95), - char(97), - char(101), - char(114), - char(111), - char(77), - char(111), - char(100), - char(101), - char(108), - char(0), - char(109), - char(95), - char(98), - char(97), - char(117), - char(109), - char(103), - char(97), - char(114), - char(116), - char(101), - char(0), - char(109), - char(95), - char(100), - char(114), - char(97), - char(103), - char(0), - char(109), - char(95), - char(108), - char(105), - char(102), - char(116), - char(0), - char(109), - char(95), - char(112), - char(114), - char(101), - char(115), - char(115), - char(117), - char(114), - char(101), - char(0), - char(109), - char(95), - char(118), - char(111), - char(108), - char(117), - char(109), - char(101), - char(0), - char(109), - char(95), - char(100), - char(121), - char(110), - char(97), - char(109), - char(105), - char(99), - char(70), - char(114), - char(105), - char(99), - char(116), - char(105), - char(111), - char(110), - char(0), - char(109), - char(95), - char(112), - char(111), - char(115), - char(101), - char(77), - char(97), - char(116), - char(99), - char(104), - char(0), - char(109), - char(95), - char(114), - char(105), - char(103), - char(105), - char(100), - char(67), - char(111), - char(110), - char(116), - char(97), - char(99), - char(116), - char(72), - char(97), - char(114), - char(100), - char(110), - char(101), - char(115), - char(115), - char(0), - char(109), - char(95), - char(107), - char(105), - char(110), - char(101), - char(116), - char(105), - char(99), - char(67), - char(111), - char(110), - char(116), - char(97), - char(99), - char(116), - char(72), - char(97), - char(114), - char(100), - char(110), - char(101), - char(115), - char(115), - char(0), - char(109), - char(95), - char(115), - char(111), - char(102), - char(116), - char(67), - char(111), - char(110), - char(116), - char(97), - char(99), - char(116), - char(72), - char(97), - char(114), - char(100), - char(110), - char(101), - char(115), - char(115), - char(0), - char(109), - char(95), - char(97), - char(110), - char(99), - char(104), - char(111), - char(114), - char(72), - char(97), - char(114), - char(100), - char(110), - char(101), - char(115), - char(115), - char(0), - char(109), - char(95), - char(115), - char(111), - char(102), - char(116), - char(82), - char(105), - char(103), - char(105), - char(100), - char(67), - char(108), - char(117), - char(115), - char(116), - char(101), - char(114), - char(72), - char(97), - char(114), - char(100), - char(110), - char(101), - char(115), - char(115), - char(0), - char(109), - char(95), - char(115), - char(111), - char(102), - char(116), - char(75), - char(105), - char(110), - char(101), - char(116), - char(105), - char(99), - char(67), - char(108), - char(117), - char(115), - char(116), - char(101), - char(114), - char(72), - char(97), - char(114), - char(100), - char(110), - char(101), - char(115), - char(115), - char(0), - char(109), - char(95), - char(115), - char(111), - char(102), - char(116), - char(83), - char(111), - char(102), - char(116), - char(67), - char(108), - char(117), - char(115), - char(116), - char(101), - char(114), - char(72), - char(97), - char(114), - char(100), - char(110), - char(101), - char(115), - char(115), - char(0), - char(109), - char(95), - char(115), - char(111), - char(102), - char(116), - char(82), - char(105), - char(103), - char(105), - char(100), - char(67), - char(108), - char(117), - char(115), - char(116), - char(101), - char(114), - char(73), - char(109), - char(112), - char(117), - char(108), - char(115), - char(101), - char(83), - char(112), - char(108), - char(105), - char(116), - char(0), - char(109), - char(95), - char(115), - char(111), - char(102), - char(116), - char(75), - char(105), - char(110), - char(101), - char(116), - char(105), - char(99), - char(67), - char(108), - char(117), - char(115), - char(116), - char(101), - char(114), - char(73), - char(109), - char(112), - char(117), - char(108), - char(115), - char(101), - char(83), - char(112), - char(108), - char(105), - char(116), - char(0), - char(109), - char(95), - char(115), - char(111), - char(102), - char(116), - char(83), - char(111), - char(102), - char(116), - char(67), - char(108), - char(117), - char(115), - char(116), - char(101), - char(114), - char(73), - char(109), - char(112), - char(117), - char(108), - char(115), - char(101), - char(83), - char(112), - char(108), - char(105), - char(116), - char(0), - char(109), - char(95), - char(109), - char(97), - char(120), - char(86), - char(111), - char(108), - char(117), - char(109), - char(101), - char(0), - char(109), - char(95), - char(116), - char(105), - char(109), - char(101), - char(83), - char(99), - char(97), - char(108), - char(101), - char(0), - char(109), - char(95), - char(118), - char(101), - char(108), - char(111), - char(99), - char(105), - char(116), - char(121), - char(73), - char(116), - char(101), - char(114), - char(97), - char(116), - char(105), - char(111), - char(110), - char(115), - char(0), - char(109), - char(95), - char(112), - char(111), - char(115), - char(105), - char(116), - char(105), - char(111), - char(110), - char(73), - char(116), - char(101), - char(114), - char(97), - char(116), - char(105), - char(111), - char(110), - char(115), - char(0), - char(109), - char(95), - char(100), - char(114), - char(105), - char(102), - char(116), - char(73), - char(116), - char(101), - char(114), - char(97), - char(116), - char(105), - char(111), - char(110), - char(115), - char(0), - char(109), - char(95), - char(99), - char(108), - char(117), - char(115), - char(116), - char(101), - char(114), - char(73), - char(116), - char(101), - char(114), - char(97), - char(116), - char(105), - char(111), - char(110), - char(115), - char(0), - char(109), - char(95), - char(114), - char(111), - char(116), - char(0), - char(109), - char(95), - char(115), - char(99), - char(97), - char(108), - char(101), - char(0), - char(109), - char(95), - char(97), - char(113), - char(113), - char(0), - char(109), - char(95), - char(99), - char(111), - char(109), - char(0), - char(42), - char(109), - char(95), - char(112), - char(111), - char(115), - char(105), - char(116), - char(105), - char(111), - char(110), - char(115), - char(0), - char(42), - char(109), - char(95), - char(119), - char(101), - char(105), - char(103), - char(104), - char(116), - char(115), - char(0), - char(109), - char(95), - char(110), - char(117), - char(109), - char(80), - char(111), - char(115), - char(105), - char(116), - char(105), - char(111), - char(110), - char(115), - char(0), - char(109), - char(95), - char(110), - char(117), - char(109), - char(87), - char(101), - char(105), - char(103), - char(116), - char(115), - char(0), - char(109), - char(95), - char(98), - char(118), - char(111), - char(108), - char(117), - char(109), - char(101), - char(0), - char(109), - char(95), - char(98), - char(102), - char(114), - char(97), - char(109), - char(101), - char(0), - char(109), - char(95), - char(102), - char(114), - char(97), - char(109), - char(101), - char(120), - char(102), - char(111), - char(114), - char(109), - char(0), - char(109), - char(95), - char(108), - char(111), - char(99), - char(105), - char(105), - char(0), - char(109), - char(95), - char(105), - char(110), - char(118), - char(119), - char(105), - char(0), - char(109), - char(95), - char(118), - char(105), - char(109), - char(112), - char(117), - char(108), - char(115), - char(101), - char(115), - char(91), - char(50), - char(93), - char(0), - char(109), - char(95), - char(100), - char(105), - char(109), - char(112), - char(117), - char(108), - char(115), - char(101), - char(115), - char(91), - char(50), - char(93), - char(0), - char(109), - char(95), - char(108), - char(118), - char(0), - char(109), - char(95), - char(97), - char(118), - char(0), - char(42), - char(109), - char(95), - char(102), - char(114), - char(97), - char(109), - char(101), - char(114), - char(101), - char(102), - char(115), - char(0), - char(42), - char(109), - char(95), - char(110), - char(111), - char(100), - char(101), - char(73), - char(110), - char(100), - char(105), - char(99), - char(101), - char(115), - char(0), - char(42), - char(109), - char(95), - char(109), - char(97), - char(115), - char(115), - char(101), - char(115), - char(0), - char(109), - char(95), - char(110), - char(117), - char(109), - char(70), - char(114), - char(97), - char(109), - char(101), - char(82), - char(101), - char(102), - char(115), - char(0), - char(109), - char(95), - char(110), - char(117), - char(109), - char(78), - char(111), - char(100), - char(101), - char(115), - char(0), - char(109), - char(95), - char(110), - char(117), - char(109), - char(77), - char(97), - char(115), - char(115), - char(101), - char(115), - char(0), - char(109), - char(95), - char(105), - char(100), - char(109), - char(97), - char(115), - char(115), - char(0), - char(109), - char(95), - char(105), - char(109), - char(97), - char(115), - char(115), - char(0), - char(109), - char(95), - char(110), - char(118), - char(105), - char(109), - char(112), - char(117), - char(108), - char(115), - char(101), - char(115), - char(0), - char(109), - char(95), - char(110), - char(100), - char(105), - char(109), - char(112), - char(117), - char(108), - char(115), - char(101), - char(115), - char(0), - char(109), - char(95), - char(110), - char(100), - char(97), - char(109), - char(112), - char(105), - char(110), - char(103), - char(0), - char(109), - char(95), - char(108), - char(100), - char(97), - char(109), - char(112), - char(105), - char(110), - char(103), - char(0), - char(109), - char(95), - char(97), - char(100), - char(97), - char(109), - char(112), - char(105), - char(110), - char(103), - char(0), - char(109), - char(95), - char(109), - char(97), - char(116), - char(99), - char(104), - char(105), - char(110), - char(103), - char(0), - char(109), - char(95), - char(109), - char(97), - char(120), - char(83), - char(101), - char(108), - char(102), - char(67), - char(111), - char(108), - char(108), - char(105), - char(115), - char(105), - char(111), - char(110), - char(73), - char(109), - char(112), - char(117), - char(108), - char(115), - char(101), - char(0), - char(109), - char(95), - char(115), - char(101), - char(108), - char(102), - char(67), - char(111), - char(108), - char(108), - char(105), - char(115), - char(105), - char(111), - char(110), - char(73), - char(109), - char(112), - char(117), - char(108), - char(115), - char(101), - char(70), - char(97), - char(99), - char(116), - char(111), - char(114), - char(0), - char(109), - char(95), - char(99), - char(111), - char(110), - char(116), - char(97), - char(105), - char(110), - char(115), - char(65), - char(110), - char(99), - char(104), - char(111), - char(114), - char(0), - char(109), - char(95), - char(99), - char(111), - char(108), - char(108), - char(105), - char(100), - char(101), - char(0), - char(109), - char(95), - char(99), - char(108), - char(117), - char(115), - char(116), - char(101), - char(114), - char(73), - char(110), - char(100), - char(101), - char(120), - char(0), - char(42), - char(109), - char(95), - char(98), - char(111), - char(100), - char(121), - char(65), - char(0), - char(42), - char(109), - char(95), - char(98), - char(111), - char(100), - char(121), - char(66), - char(0), - char(109), - char(95), - char(114), - char(101), - char(102), - char(115), - char(91), - char(50), - char(93), - char(0), - char(109), - char(95), - char(99), - char(102), - char(109), - char(0), - char(109), - char(95), - char(115), - char(112), - char(108), - char(105), - char(116), - char(0), - char(109), - char(95), - char(100), - char(101), - char(108), - char(101), - char(116), - char(101), - char(0), - char(109), - char(95), - char(114), - char(101), - char(108), - char(80), - char(111), - char(115), - char(105), - char(116), - char(105), - char(111), - char(110), - char(91), - char(50), - char(93), - char(0), - char(109), - char(95), - char(98), - char(111), - char(100), - char(121), - char(65), - char(116), - char(121), - char(112), - char(101), - char(0), - char(109), - char(95), - char(98), - char(111), - char(100), - char(121), - char(66), - char(116), - char(121), - char(112), - char(101), - char(0), - char(109), - char(95), - char(106), - char(111), - char(105), - char(110), - char(116), - char(84), - char(121), - char(112), - char(101), - char(0), - char(42), - char(109), - char(95), - char(112), - char(111), - char(115), - char(101), - char(0), - char(42), - char(42), - char(109), - char(95), - char(109), - char(97), - char(116), - char(101), - char(114), - char(105), - char(97), - char(108), - char(115), - char(0), - char(42), - char(109), - char(95), - char(110), - char(111), - char(100), - char(101), - char(115), - char(0), - char(42), - char(109), - char(95), - char(108), - char(105), - char(110), - char(107), - char(115), - char(0), - char(42), - char(109), - char(95), - char(102), - char(97), - char(99), - char(101), - char(115), - char(0), - char(42), - char(109), - char(95), - char(116), - char(101), - char(116), - char(114), - char(97), - char(104), - char(101), - char(100), - char(114), - char(97), - char(0), - char(42), - char(109), - char(95), - char(97), - char(110), - char(99), - char(104), - char(111), - char(114), - char(115), - char(0), - char(42), - char(109), - char(95), - char(99), - char(108), - char(117), - char(115), - char(116), - char(101), - char(114), - char(115), - char(0), - char(42), - char(109), - char(95), - char(106), - char(111), - char(105), - char(110), - char(116), - char(115), - char(0), - char(109), - char(95), - char(110), - char(117), - char(109), - char(77), - char(97), - char(116), - char(101), - char(114), - char(105), - char(97), - char(108), - char(115), - char(0), - char(109), - char(95), - char(110), - char(117), - char(109), - char(76), - char(105), - char(110), - char(107), - char(115), - char(0), - char(109), - char(95), - char(110), - char(117), - char(109), - char(70), - char(97), - char(99), - char(101), - char(115), - char(0), - char(109), - char(95), - char(110), - char(117), - char(109), - char(84), - char(101), - char(116), - char(114), - char(97), - char(104), - char(101), - char(100), - char(114), - char(97), - char(0), - char(109), - char(95), - char(110), - char(117), - char(109), - char(65), - char(110), - char(99), - char(104), - char(111), - char(114), - char(115), - char(0), - char(109), - char(95), - char(110), - char(117), - char(109), - char(67), - char(108), - char(117), - char(115), - char(116), - char(101), - char(114), - char(115), - char(0), - char(109), - char(95), - char(110), - char(117), - char(109), - char(74), - char(111), - char(105), - char(110), - char(116), - char(115), - char(0), - char(109), - char(95), - char(99), - char(111), - char(110), - char(102), - char(105), - char(103), - char(0), - char(84), - char(89), - char(80), - char(69), - char(76), - char(0), - char(0), - char(0), - char(99), - char(104), - char(97), - char(114), - char(0), - char(117), - char(99), - char(104), - char(97), - char(114), - char(0), - char(115), - char(104), - char(111), - char(114), - char(116), - char(0), - char(117), - char(115), - char(104), - char(111), - char(114), - char(116), - char(0), - char(105), - char(110), - char(116), - char(0), - char(108), - char(111), - char(110), - char(103), - char(0), - char(117), - char(108), - char(111), - char(110), - char(103), - char(0), - char(102), - char(108), - char(111), - char(97), - char(116), - char(0), - char(100), - char(111), - char(117), - char(98), - char(108), - char(101), - char(0), - char(118), - char(111), - char(105), - char(100), - char(0), - char(80), - char(111), - char(105), - char(110), - char(116), - char(101), - char(114), - char(65), - char(114), - char(114), - char(97), - char(121), - char(0), - char(98), - char(116), - char(80), - char(104), - char(121), - char(115), - char(105), - char(99), - char(115), - char(83), - char(121), - char(115), - char(116), - char(101), - char(109), - char(0), - char(76), - char(105), - char(115), - char(116), - char(66), - char(97), - char(115), - char(101), - char(0), - char(98), - char(116), - char(86), - char(101), - char(99), - char(116), - char(111), - char(114), - char(51), - char(70), - char(108), - char(111), - char(97), - char(116), - char(68), - char(97), - char(116), - char(97), - char(0), - char(98), - char(116), - char(86), - char(101), - char(99), - char(116), - char(111), - char(114), - char(51), - char(68), - char(111), - char(117), - char(98), - char(108), - char(101), - char(68), - char(97), - char(116), - char(97), - char(0), - char(98), - char(116), - char(77), - char(97), - char(116), - char(114), - char(105), - char(120), - char(51), - char(120), - char(51), - char(70), - char(108), - char(111), - char(97), - char(116), - char(68), - char(97), - char(116), - char(97), - char(0), - char(98), - char(116), - char(77), - char(97), - char(116), - char(114), - char(105), - char(120), - char(51), - char(120), - char(51), - char(68), - char(111), - char(117), - char(98), - char(108), - char(101), - char(68), - char(97), - char(116), - char(97), - char(0), - char(98), - char(116), - char(84), - char(114), - char(97), - char(110), - char(115), - char(102), - char(111), - char(114), - char(109), - char(70), - char(108), - char(111), - char(97), - char(116), - char(68), - char(97), - char(116), - char(97), - char(0), - char(98), - char(116), - char(84), - char(114), - char(97), - char(110), - char(115), - char(102), - char(111), - char(114), - char(109), - char(68), - char(111), - char(117), - char(98), - char(108), - char(101), - char(68), - char(97), - char(116), - char(97), - char(0), - char(98), - char(116), - char(66), - char(118), - char(104), - char(83), - char(117), - char(98), - char(116), - char(114), - char(101), - char(101), - char(73), - char(110), - char(102), - char(111), - char(68), - char(97), - char(116), - char(97), - char(0), - char(98), - char(116), - char(79), - char(112), - char(116), - char(105), - char(109), - char(105), - char(122), - char(101), - char(100), - char(66), - char(118), - char(104), - char(78), - char(111), - char(100), - char(101), - char(70), - char(108), - char(111), - char(97), - char(116), - char(68), - char(97), - char(116), - char(97), - char(0), - char(98), - char(116), - char(79), - char(112), - char(116), - char(105), - char(109), - char(105), - char(122), - char(101), - char(100), - char(66), - char(118), - char(104), - char(78), - char(111), - char(100), - char(101), - char(68), - char(111), - char(117), - char(98), - char(108), - char(101), - char(68), - char(97), - char(116), - char(97), - char(0), - char(98), - char(116), - char(81), - char(117), - char(97), - char(110), - char(116), - char(105), - char(122), - char(101), - char(100), - char(66), - char(118), - char(104), - char(78), - char(111), - char(100), - char(101), - char(68), - char(97), - char(116), - char(97), - char(0), - char(98), - char(116), - char(81), - char(117), - char(97), - char(110), - char(116), - char(105), - char(122), - char(101), - char(100), - char(66), - char(118), - char(104), - char(70), - char(108), - char(111), - char(97), - char(116), - char(68), - char(97), - char(116), - char(97), - char(0), - char(98), - char(116), - char(81), - char(117), - char(97), - char(110), - char(116), - char(105), - char(122), - char(101), - char(100), - char(66), - char(118), - char(104), - char(68), - char(111), - char(117), - char(98), - char(108), - char(101), - char(68), - char(97), - char(116), - char(97), - char(0), - char(98), - char(116), - char(67), - char(111), - char(108), - char(108), - char(105), - char(115), - char(105), - char(111), - char(110), - char(83), - char(104), - char(97), - char(112), - char(101), - char(68), - char(97), - char(116), - char(97), - char(0), - char(98), - char(116), - char(83), - char(116), - char(97), - char(116), - char(105), - char(99), - char(80), - char(108), - char(97), - char(110), - char(101), - char(83), - char(104), - char(97), - char(112), - char(101), - char(68), - char(97), - char(116), - char(97), - char(0), - char(98), - char(116), - char(67), - char(111), - char(110), - char(118), - char(101), - char(120), - char(73), - char(110), - char(116), - char(101), - char(114), - char(110), - char(97), - char(108), - char(83), - char(104), - char(97), - char(112), - char(101), - char(68), - char(97), - char(116), - char(97), - char(0), - char(98), - char(116), - char(80), - char(111), - char(115), - char(105), - char(116), - char(105), - char(111), - char(110), - char(65), - char(110), - char(100), - char(82), - char(97), - char(100), - char(105), - char(117), - char(115), - char(0), - char(98), - char(116), - char(77), - char(117), - char(108), - char(116), - char(105), - char(83), - char(112), - char(104), - char(101), - char(114), - char(101), - char(83), - char(104), - char(97), - char(112), - char(101), - char(68), - char(97), - char(116), - char(97), - char(0), - char(98), - char(116), - char(73), - char(110), - char(116), - char(73), - char(110), - char(100), - char(101), - char(120), - char(68), - char(97), - char(116), - char(97), - char(0), - char(98), - char(116), - char(83), - char(104), - char(111), - char(114), - char(116), - char(73), - char(110), - char(116), - char(73), - char(110), - char(100), - char(101), - char(120), - char(68), - char(97), - char(116), - char(97), - char(0), - char(98), - char(116), - char(83), - char(104), - char(111), - char(114), - char(116), - char(73), - char(110), - char(116), - char(73), - char(110), - char(100), - char(101), - char(120), - char(84), - char(114), - char(105), - char(112), - char(108), - char(101), - char(116), - char(68), - char(97), - char(116), - char(97), - char(0), - char(98), - char(116), - char(67), - char(104), - char(97), - char(114), - char(73), - char(110), - char(100), - char(101), - char(120), - char(84), - char(114), - char(105), - char(112), - char(108), - char(101), - char(116), - char(68), - char(97), - char(116), - char(97), - char(0), - char(98), - char(116), - char(77), - char(101), - char(115), - char(104), - char(80), - char(97), - char(114), - char(116), - char(68), - char(97), - char(116), - char(97), - char(0), - char(98), - char(116), - char(83), - char(116), - char(114), - char(105), - char(100), - char(105), - char(110), - char(103), - char(77), - char(101), - char(115), - char(104), - char(73), - char(110), - char(116), - char(101), - char(114), - char(102), - char(97), - char(99), - char(101), - char(68), - char(97), - char(116), - char(97), - char(0), - char(98), - char(116), - char(84), - char(114), - char(105), - char(97), - char(110), - char(103), - char(108), - char(101), - char(77), - char(101), - char(115), - char(104), - char(83), - char(104), - char(97), - char(112), - char(101), - char(68), - char(97), - char(116), - char(97), - char(0), - char(98), - char(116), - char(84), - char(114), - char(105), - char(97), - char(110), - char(103), - char(108), - char(101), - char(73), - char(110), - char(102), - char(111), - char(77), - char(97), - char(112), - char(68), - char(97), - char(116), - char(97), - char(0), - char(98), - char(116), - char(83), - char(99), - char(97), - char(108), - char(101), - char(100), - char(84), - char(114), - char(105), - char(97), - char(110), - char(103), - char(108), - char(101), - char(77), - char(101), - char(115), - char(104), - char(83), - char(104), - char(97), - char(112), - char(101), - char(68), - char(97), - char(116), - char(97), - char(0), - char(98), - char(116), - char(67), - char(111), - char(109), - char(112), - char(111), - char(117), - char(110), - char(100), - char(83), - char(104), - char(97), - char(112), - char(101), - char(67), - char(104), - char(105), - char(108), - char(100), - char(68), - char(97), - char(116), - char(97), - char(0), - char(98), - char(116), - char(67), - char(111), - char(109), - char(112), - char(111), - char(117), - char(110), - char(100), - char(83), - char(104), - char(97), - char(112), - char(101), - char(68), - char(97), - char(116), - char(97), - char(0), - char(98), - char(116), - char(67), - char(121), - char(108), - char(105), - char(110), - char(100), - char(101), - char(114), - char(83), - char(104), - char(97), - char(112), - char(101), - char(68), - char(97), - char(116), - char(97), - char(0), - char(98), - char(116), - char(67), - char(97), - char(112), - char(115), - char(117), - char(108), - char(101), - char(83), - char(104), - char(97), - char(112), - char(101), - char(68), - char(97), - char(116), - char(97), - char(0), - char(98), - char(116), - char(84), - char(114), - char(105), - char(97), - char(110), - char(103), - char(108), - char(101), - char(73), - char(110), - char(102), - char(111), - char(68), - char(97), - char(116), - char(97), - char(0), - char(98), - char(116), - char(71), - char(73), - char(109), - char(112), - char(97), - char(99), - char(116), - char(77), - char(101), - char(115), - char(104), - char(83), - char(104), - char(97), - char(112), - char(101), - char(68), - char(97), - char(116), - char(97), - char(0), - char(98), - char(116), - char(67), - char(111), - char(110), - char(118), - char(101), - char(120), - char(72), - char(117), - char(108), - char(108), - char(83), - char(104), - char(97), - char(112), - char(101), - char(68), - char(97), - char(116), - char(97), - char(0), - char(98), - char(116), - char(67), - char(111), - char(108), - char(108), - char(105), - char(115), - char(105), - char(111), - char(110), - char(79), - char(98), - char(106), - char(101), - char(99), - char(116), - char(68), - char(111), - char(117), - char(98), - char(108), - char(101), - char(68), - char(97), - char(116), - char(97), - char(0), - char(98), - char(116), - char(67), - char(111), - char(108), - char(108), - char(105), - char(115), - char(105), - char(111), - char(110), - char(79), - char(98), - char(106), - char(101), - char(99), - char(116), - char(70), - char(108), - char(111), - char(97), - char(116), - char(68), - char(97), - char(116), - char(97), - char(0), - char(98), - char(116), - char(68), - char(121), - char(110), - char(97), - char(109), - char(105), - char(99), - char(115), - char(87), - char(111), - char(114), - char(108), - char(100), - char(68), - char(111), - char(117), - char(98), - char(108), - char(101), - char(68), - char(97), - char(116), - char(97), - char(0), - char(98), - char(116), - char(67), - char(111), - char(110), - char(116), - char(97), - char(99), - char(116), - char(83), - char(111), - char(108), - char(118), - char(101), - char(114), - char(73), - char(110), - char(102), - char(111), - char(68), - char(111), - char(117), - char(98), - char(108), - char(101), - char(68), - char(97), - char(116), - char(97), - char(0), - char(98), - char(116), - char(68), - char(121), - char(110), - char(97), - char(109), - char(105), - char(99), - char(115), - char(87), - char(111), - char(114), - char(108), - char(100), - char(70), - char(108), - char(111), - char(97), - char(116), - char(68), - char(97), - char(116), - char(97), - char(0), - char(98), - char(116), - char(67), - char(111), - char(110), - char(116), - char(97), - char(99), - char(116), - char(83), - char(111), - char(108), - char(118), - char(101), - char(114), - char(73), - char(110), - char(102), - char(111), - char(70), - char(108), - char(111), - char(97), - char(116), - char(68), - char(97), - char(116), - char(97), - char(0), - char(98), - char(116), - char(82), - char(105), - char(103), - char(105), - char(100), - char(66), - char(111), - char(100), - char(121), - char(70), - char(108), - char(111), - char(97), - char(116), - char(68), - char(97), - char(116), - char(97), - char(0), - char(98), - char(116), - char(82), - char(105), - char(103), - char(105), - char(100), - char(66), - char(111), - char(100), - char(121), - char(68), - char(111), - char(117), - char(98), - char(108), - char(101), - char(68), - char(97), - char(116), - char(97), - char(0), - char(98), - char(116), - char(67), - char(111), - char(110), - char(115), - char(116), - char(114), - char(97), - char(105), - char(110), - char(116), - char(73), - char(110), - char(102), - char(111), - char(49), - char(0), - char(98), - char(116), - char(84), - char(121), - char(112), - char(101), - char(100), - char(67), - char(111), - char(110), - char(115), - char(116), - char(114), - char(97), - char(105), - char(110), - char(116), - char(68), - char(97), - char(116), - char(97), - char(0), - char(98), - char(116), - char(82), - char(105), - char(103), - char(105), - char(100), - char(66), - char(111), - char(100), - char(121), - char(68), - char(97), - char(116), - char(97), - char(0), - char(98), - char(116), - char(80), - char(111), - char(105), - char(110), - char(116), - char(50), - char(80), - char(111), - char(105), - char(110), - char(116), - char(67), - char(111), - char(110), - char(115), - char(116), - char(114), - char(97), - char(105), - char(110), - char(116), - char(70), - char(108), - char(111), - char(97), - char(116), - char(68), - char(97), - char(116), - char(97), - char(0), - char(98), - char(116), - char(80), - char(111), - char(105), - char(110), - char(116), - char(50), - char(80), - char(111), - char(105), - char(110), - char(116), - char(67), - char(111), - char(110), - char(115), - char(116), - char(114), - char(97), - char(105), - char(110), - char(116), - char(68), - char(111), - char(117), - char(98), - char(108), - char(101), - char(68), - char(97), - char(116), - char(97), - char(0), - char(98), - char(116), - char(72), - char(105), - char(110), - char(103), - char(101), - char(67), - char(111), - char(110), - char(115), - char(116), - char(114), - char(97), - char(105), - char(110), - char(116), - char(68), - char(111), - char(117), - char(98), - char(108), - char(101), - char(68), - char(97), - char(116), - char(97), - char(0), - char(98), - char(116), - char(72), - char(105), - char(110), - char(103), - char(101), - char(67), - char(111), - char(110), - char(115), - char(116), - char(114), - char(97), - char(105), - char(110), - char(116), - char(70), - char(108), - char(111), - char(97), - char(116), - char(68), - char(97), - char(116), - char(97), - char(0), - char(98), - char(116), - char(67), - char(111), - char(110), - char(101), - char(84), - char(119), - char(105), - char(115), - char(116), - char(67), - char(111), - char(110), - char(115), - char(116), - char(114), - char(97), - char(105), - char(110), - char(116), - char(68), - char(97), - char(116), - char(97), - char(0), - char(98), - char(116), - char(71), - char(101), - char(110), - char(101), - char(114), - char(105), - char(99), - char(54), - char(68), - char(111), - char(102), - char(67), - char(111), - char(110), - char(115), - char(116), - char(114), - char(97), - char(105), - char(110), - char(116), - char(68), - char(97), - char(116), - char(97), - char(0), - char(98), - char(116), - char(71), - char(101), - char(110), - char(101), - char(114), - char(105), - char(99), - char(54), - char(68), - char(111), - char(102), - char(83), - char(112), - char(114), - char(105), - char(110), - char(103), - char(67), - char(111), - char(110), - char(115), - char(116), - char(114), - char(97), - char(105), - char(110), - char(116), - char(68), - char(97), - char(116), - char(97), - char(0), - char(98), - char(116), - char(83), - char(108), - char(105), - char(100), - char(101), - char(114), - char(67), - char(111), - char(110), - char(115), - char(116), - char(114), - char(97), - char(105), - char(110), - char(116), - char(68), - char(97), - char(116), - char(97), - char(0), - char(83), - char(111), - char(102), - char(116), - char(66), - char(111), - char(100), - char(121), - char(77), - char(97), - char(116), - char(101), - char(114), - char(105), - char(97), - char(108), - char(68), - char(97), - char(116), - char(97), - char(0), - char(83), - char(111), - char(102), - char(116), - char(66), - char(111), - char(100), - char(121), - char(78), - char(111), - char(100), - char(101), - char(68), - char(97), - char(116), - char(97), - char(0), - char(83), - char(111), - char(102), - char(116), - char(66), - char(111), - char(100), - char(121), - char(76), - char(105), - char(110), - char(107), - char(68), - char(97), - char(116), - char(97), - char(0), - char(83), - char(111), - char(102), - char(116), - char(66), - char(111), - char(100), - char(121), - char(70), - char(97), - char(99), - char(101), - char(68), - char(97), - char(116), - char(97), - char(0), - char(83), - char(111), - char(102), - char(116), - char(66), - char(111), - char(100), - char(121), - char(84), - char(101), - char(116), - char(114), - char(97), - char(68), - char(97), - char(116), - char(97), - char(0), - char(83), - char(111), - char(102), - char(116), - char(82), - char(105), - char(103), - char(105), - char(100), - char(65), - char(110), - char(99), - char(104), - char(111), - char(114), - char(68), - char(97), - char(116), - char(97), - char(0), - char(83), - char(111), - char(102), - char(116), - char(66), - char(111), - char(100), - char(121), - char(67), - char(111), - char(110), - char(102), - char(105), - char(103), - char(68), - char(97), - char(116), - char(97), - char(0), - char(83), - char(111), - char(102), - char(116), - char(66), - char(111), - char(100), - char(121), - char(80), - char(111), - char(115), - char(101), - char(68), - char(97), - char(116), - char(97), - char(0), - char(83), - char(111), - char(102), - char(116), - char(66), - char(111), - char(100), - char(121), - char(67), - char(108), - char(117), - char(115), - char(116), - char(101), - char(114), - char(68), - char(97), - char(116), - char(97), - char(0), - char(98), - char(116), - char(83), - char(111), - char(102), - char(116), - char(66), - char(111), - char(100), - char(121), - char(74), - char(111), - char(105), - char(110), - char(116), - char(68), - char(97), - char(116), - char(97), - char(0), - char(98), - char(116), - char(83), - char(111), - char(102), - char(116), - char(66), - char(111), - char(100), - char(121), - char(70), - char(108), - char(111), - char(97), - char(116), - char(68), - char(97), - char(116), - char(97), - char(0), - char(0), - char(0), - char(84), - char(76), - char(69), - char(78), - char(1), - char(0), - char(1), - char(0), - char(2), - char(0), - char(2), - char(0), - char(4), - char(0), - char(4), - char(0), - char(4), - char(0), - char(4), - char(0), - char(8), - char(0), - char(0), - char(0), - char(16), - char(0), - char(48), - char(0), - char(16), - char(0), - char(16), - char(0), - char(32), - char(0), - char(48), - char(0), - char(96), - char(0), - char(64), - char(0), - char(-128), - char(0), - char(20), - char(0), - char(48), - char(0), - char(80), - char(0), - char(16), - char(0), - char(96), - char(0), - char(-112), - char(0), - char(16), - char(0), - char(56), - char(0), - char(56), - char(0), - char(20), - char(0), - char(72), - char(0), - char(4), - char(0), - char(4), - char(0), - char(8), - char(0), - char(4), - char(0), - char(56), - char(0), - char(32), - char(0), - char(80), - char(0), - char(72), - char(0), - char(96), - char(0), - char(80), - char(0), - char(32), - char(0), - char(64), - char(0), - char(64), - char(0), - char(16), - char(0), - char(72), - char(0), - char(80), - char(0), - char(-32), - char(1), - char(16), - char(1), - char(-72), - char(0), - char(-104), - char(0), - char(104), - char(0), - char(88), - char(0), - char(-8), - char(1), - char(-80), - char(3), - char(8), - char(0), - char(64), - char(0), - char(0), - char(0), - char(96), - char(0), - char(-128), - char(0), - char(104), - char(1), - char(-24), - char(0), - char(-32), - char(0), - char(8), - char(1), - char(104), - char(1), - char(-40), - char(0), - char(16), - char(0), - char(104), - char(0), - char(24), - char(0), - char(40), - char(0), - char(104), - char(0), - char(96), - char(0), - char(104), - char(0), - char(-56), - char(0), - char(104), - char(1), - char(112), - char(0), - char(-32), - char(1), - char(83), - char(84), - char(82), - char(67), - char(65), - char(0), - char(0), - char(0), - char(10), - char(0), - char(3), - char(0), - char(4), - char(0), - char(0), - char(0), - char(4), - char(0), - char(1), - char(0), - char(9), - char(0), - char(2), - char(0), - char(11), - char(0), - char(3), - char(0), - char(10), - char(0), - char(3), - char(0), - char(10), - char(0), - char(4), - char(0), - char(10), - char(0), - char(5), - char(0), - char(12), - char(0), - char(2), - char(0), - char(9), - char(0), - char(6), - char(0), - char(9), - char(0), - char(7), - char(0), - char(13), - char(0), - char(1), - char(0), - char(7), - char(0), - char(8), - char(0), - char(14), - char(0), - char(1), - char(0), - char(8), - char(0), - char(8), - char(0), - char(15), - char(0), - char(1), - char(0), - char(13), - char(0), - char(9), - char(0), - char(16), - char(0), - char(1), - char(0), - char(14), - char(0), - char(9), - char(0), - char(17), - char(0), - char(2), - char(0), - char(15), - char(0), - char(10), - char(0), - char(13), - char(0), - char(11), - char(0), - char(18), - char(0), - char(2), - char(0), - char(16), - char(0), - char(10), - char(0), - char(14), - char(0), - char(11), - char(0), - char(19), - char(0), - char(4), - char(0), - char(4), - char(0), - char(12), - char(0), - char(4), - char(0), - char(13), - char(0), - char(2), - char(0), - char(14), - char(0), - char(2), - char(0), - char(15), - char(0), - char(20), - char(0), - char(6), - char(0), - char(13), - char(0), - char(16), - char(0), - char(13), - char(0), - char(17), - char(0), - char(4), - char(0), - char(18), - char(0), - char(4), - char(0), - char(19), - char(0), - char(4), - char(0), - char(20), - char(0), - char(0), - char(0), - char(21), - char(0), - char(21), - char(0), - char(6), - char(0), - char(14), - char(0), - char(16), - char(0), - char(14), - char(0), - char(17), - char(0), - char(4), - char(0), - char(18), - char(0), - char(4), - char(0), - char(19), - char(0), - char(4), - char(0), - char(20), - char(0), - char(0), - char(0), - char(21), - char(0), - char(22), - char(0), - char(3), - char(0), - char(2), - char(0), - char(14), - char(0), - char(2), - char(0), - char(15), - char(0), - char(4), - char(0), - char(22), - char(0), - char(23), - char(0), - char(12), - char(0), - char(13), - char(0), - char(23), - char(0), - char(13), - char(0), - char(24), - char(0), - char(13), - char(0), - char(25), - char(0), - char(4), - char(0), - char(26), - char(0), - char(4), - char(0), - char(27), - char(0), - char(4), - char(0), - char(28), - char(0), - char(4), - char(0), - char(29), - char(0), - char(20), - char(0), - char(30), - char(0), - char(22), - char(0), - char(31), - char(0), - char(19), - char(0), - char(32), - char(0), - char(4), - char(0), - char(33), - char(0), - char(4), - char(0), - char(34), - char(0), - char(24), - char(0), - char(12), - char(0), - char(14), - char(0), - char(23), - char(0), - char(14), - char(0), - char(24), - char(0), - char(14), - char(0), - char(25), - char(0), - char(4), - char(0), - char(26), - char(0), - char(4), - char(0), - char(27), - char(0), - char(4), - char(0), - char(28), - char(0), - char(4), - char(0), - char(29), - char(0), - char(21), - char(0), - char(30), - char(0), - char(22), - char(0), - char(31), - char(0), - char(4), - char(0), - char(33), - char(0), - char(4), - char(0), - char(34), - char(0), - char(19), - char(0), - char(32), - char(0), - char(25), - char(0), - char(3), - char(0), - char(0), - char(0), - char(35), - char(0), - char(4), - char(0), - char(36), - char(0), - char(0), - char(0), - char(37), - char(0), - char(26), - char(0), - char(5), - char(0), - char(25), - char(0), - char(38), - char(0), - char(13), - char(0), - char(39), - char(0), - char(13), - char(0), - char(40), - char(0), - char(7), - char(0), - char(41), - char(0), - char(0), - char(0), - char(21), - char(0), - char(27), - char(0), - char(5), - char(0), - char(25), - char(0), - char(38), - char(0), - char(13), - char(0), - char(39), - char(0), - char(13), - char(0), - char(42), - char(0), - char(7), - char(0), - char(43), - char(0), - char(4), - char(0), - char(44), - char(0), - char(28), - char(0), - char(2), - char(0), - char(13), - char(0), - char(45), - char(0), - char(7), - char(0), - char(46), - char(0), - char(29), - char(0), - char(4), - char(0), - char(27), - char(0), - char(47), - char(0), - char(28), - char(0), - char(48), - char(0), - char(4), - char(0), - char(49), - char(0), - char(0), - char(0), - char(37), - char(0), - char(30), - char(0), - char(1), - char(0), - char(4), - char(0), - char(50), - char(0), - char(31), - char(0), - char(2), - char(0), - char(2), - char(0), - char(50), - char(0), - char(0), - char(0), - char(51), - char(0), - char(32), - char(0), - char(2), - char(0), - char(2), - char(0), - char(52), - char(0), - char(0), - char(0), - char(51), - char(0), - char(33), - char(0), - char(2), - char(0), - char(0), - char(0), - char(52), - char(0), - char(0), - char(0), - char(53), - char(0), - char(34), - char(0), - char(8), - char(0), - char(13), - char(0), - char(54), - char(0), - char(14), - char(0), - char(55), - char(0), - char(30), - char(0), - char(56), - char(0), - char(32), - char(0), - char(57), - char(0), - char(33), - char(0), - char(58), - char(0), - char(31), - char(0), - char(59), - char(0), - char(4), - char(0), - char(60), - char(0), - char(4), - char(0), - char(61), - char(0), - char(35), - char(0), - char(4), - char(0), - char(34), - char(0), - char(62), - char(0), - char(13), - char(0), - char(63), - char(0), - char(4), - char(0), - char(64), - char(0), - char(0), - char(0), - char(37), - char(0), - char(36), - char(0), - char(7), - char(0), - char(25), - char(0), - char(38), - char(0), - char(35), - char(0), - char(65), - char(0), - char(23), - char(0), - char(66), - char(0), - char(24), - char(0), - char(67), - char(0), - char(37), - char(0), - char(68), - char(0), - char(7), - char(0), - char(43), - char(0), - char(0), - char(0), - char(69), - char(0), - char(38), - char(0), - char(2), - char(0), - char(36), - char(0), - char(70), - char(0), - char(13), - char(0), - char(39), - char(0), - char(39), - char(0), - char(4), - char(0), - char(17), - char(0), - char(71), - char(0), - char(25), - char(0), - char(72), - char(0), - char(4), - char(0), - char(73), - char(0), - char(7), - char(0), - char(74), - char(0), - char(40), - char(0), - char(4), - char(0), - char(25), - char(0), - char(38), - char(0), - char(39), - char(0), - char(75), - char(0), - char(4), - char(0), - char(76), - char(0), - char(7), - char(0), - char(43), - char(0), - char(41), - char(0), - char(3), - char(0), - char(27), - char(0), - char(47), - char(0), - char(4), - char(0), - char(77), - char(0), - char(0), - char(0), - char(37), - char(0), - char(42), - char(0), - char(3), - char(0), - char(27), - char(0), - char(47), - char(0), - char(4), - char(0), - char(77), - char(0), - char(0), - char(0), - char(37), - char(0), - char(43), - char(0), - char(4), - char(0), - char(4), - char(0), - char(78), - char(0), - char(7), - char(0), - char(79), - char(0), - char(7), - char(0), - char(80), - char(0), - char(7), - char(0), - char(81), - char(0), - char(37), - char(0), - char(14), - char(0), - char(4), - char(0), - char(82), - char(0), - char(4), - char(0), - char(83), - char(0), - char(43), - char(0), - char(84), - char(0), - char(4), - char(0), - char(85), - char(0), - char(7), - char(0), - char(86), - char(0), - char(7), - char(0), - char(87), - char(0), - char(7), - char(0), - char(88), - char(0), - char(7), - char(0), - char(89), - char(0), - char(7), - char(0), - char(90), - char(0), - char(4), - char(0), - char(91), - char(0), - char(4), - char(0), - char(92), - char(0), - char(4), - char(0), - char(93), - char(0), - char(4), - char(0), - char(94), - char(0), - char(0), - char(0), - char(37), - char(0), - char(44), - char(0), - char(5), - char(0), - char(25), - char(0), - char(38), - char(0), - char(35), - char(0), - char(65), - char(0), - char(13), - char(0), - char(39), - char(0), - char(7), - char(0), - char(43), - char(0), - char(4), - char(0), - char(95), - char(0), - char(45), - char(0), - char(5), - char(0), - char(27), - char(0), - char(47), - char(0), - char(13), - char(0), - char(96), - char(0), - char(14), - char(0), - char(97), - char(0), - char(4), - char(0), - char(98), - char(0), - char(0), - char(0), - char(99), - char(0), - char(46), - char(0), - char(25), - char(0), - char(9), - char(0), - char(100), - char(0), - char(9), - char(0), - char(101), - char(0), - char(25), - char(0), - char(102), - char(0), - char(0), - char(0), - char(35), - char(0), - char(18), - char(0), - char(103), - char(0), - char(18), - char(0), - char(104), - char(0), - char(14), - char(0), - char(105), - char(0), - char(14), - char(0), - char(106), - char(0), - char(14), - char(0), - char(107), - char(0), - char(8), - char(0), - char(108), - char(0), - char(8), - char(0), - char(109), - char(0), - char(8), - char(0), - char(110), - char(0), - char(8), - char(0), - char(111), - char(0), - char(8), - char(0), - char(112), - char(0), - char(8), - char(0), - char(113), - char(0), - char(8), - char(0), - char(114), - char(0), - char(8), - char(0), - char(115), - char(0), - char(4), - char(0), - char(116), - char(0), - char(4), - char(0), - char(117), - char(0), - char(4), - char(0), - char(118), - char(0), - char(4), - char(0), - char(119), - char(0), - char(4), - char(0), - char(120), - char(0), - char(4), - char(0), - char(121), - char(0), - char(4), - char(0), - char(122), - char(0), - char(0), - char(0), - char(37), - char(0), - char(47), - char(0), - char(25), - char(0), - char(9), - char(0), - char(100), - char(0), - char(9), - char(0), - char(101), - char(0), - char(25), - char(0), - char(102), - char(0), - char(0), - char(0), - char(35), - char(0), - char(17), - char(0), - char(103), - char(0), - char(17), - char(0), - char(104), - char(0), - char(13), - char(0), - char(105), - char(0), - char(13), - char(0), - char(106), - char(0), - char(13), - char(0), - char(107), - char(0), - char(7), - char(0), - char(108), - char(0), - char(7), - char(0), - char(109), - char(0), - char(7), - char(0), - char(110), - char(0), - char(7), - char(0), - char(111), - char(0), - char(7), - char(0), - char(112), - char(0), - char(7), - char(0), - char(113), - char(0), - char(7), - char(0), - char(114), - char(0), - char(7), - char(0), - char(115), - char(0), - char(4), - char(0), - char(116), - char(0), - char(4), - char(0), - char(117), - char(0), - char(4), - char(0), - char(118), - char(0), - char(4), - char(0), - char(119), - char(0), - char(4), - char(0), - char(120), - char(0), - char(4), - char(0), - char(121), - char(0), - char(4), - char(0), - char(122), - char(0), - char(0), - char(0), - char(37), - char(0), - char(48), - char(0), - char(2), - char(0), - char(49), - char(0), - char(123), - char(0), - char(14), - char(0), - char(124), - char(0), - char(50), - char(0), - char(2), - char(0), - char(51), - char(0), - char(123), - char(0), - char(13), - char(0), - char(124), - char(0), - char(52), - char(0), - char(21), - char(0), - char(47), - char(0), - char(125), - char(0), - char(15), - char(0), - char(126), - char(0), - char(13), - char(0), - char(127), - char(0), - char(13), - char(0), - char(-128), - char(0), - char(13), - char(0), - char(-127), - char(0), - char(13), - char(0), - char(-126), - char(0), - char(13), - char(0), - char(124), - char(0), - char(13), - char(0), - char(-125), - char(0), - char(13), - char(0), - char(-124), - char(0), - char(13), - char(0), - char(-123), - char(0), - char(13), - char(0), - char(-122), - char(0), - char(7), - char(0), - char(-121), - char(0), - char(7), - char(0), - char(-120), - char(0), - char(7), - char(0), - char(-119), - char(0), - char(7), - char(0), - char(-118), - char(0), - char(7), - char(0), - char(-117), - char(0), - char(7), - char(0), - char(-116), - char(0), - char(7), - char(0), - char(-115), - char(0), - char(7), - char(0), - char(-114), - char(0), - char(7), - char(0), - char(-113), - char(0), - char(4), - char(0), - char(-112), - char(0), - char(53), - char(0), - char(22), - char(0), - char(46), - char(0), - char(125), - char(0), - char(16), - char(0), - char(126), - char(0), - char(14), - char(0), - char(127), - char(0), - char(14), - char(0), - char(-128), - char(0), - char(14), - char(0), - char(-127), - char(0), - char(14), - char(0), - char(-126), - char(0), - char(14), - char(0), - char(124), - char(0), - char(14), - char(0), - char(-125), - char(0), - char(14), - char(0), - char(-124), - char(0), - char(14), - char(0), - char(-123), - char(0), - char(14), - char(0), - char(-122), - char(0), - char(8), - char(0), - char(-121), - char(0), - char(8), - char(0), - char(-120), - char(0), - char(8), - char(0), - char(-119), - char(0), - char(8), - char(0), - char(-118), - char(0), - char(8), - char(0), - char(-117), - char(0), - char(8), - char(0), - char(-116), - char(0), - char(8), - char(0), - char(-115), - char(0), - char(8), - char(0), - char(-114), - char(0), - char(8), - char(0), - char(-113), - char(0), - char(4), - char(0), - char(-112), - char(0), - char(0), - char(0), - char(37), - char(0), - char(54), - char(0), - char(2), - char(0), - char(4), - char(0), - char(-111), - char(0), - char(4), - char(0), - char(-110), - char(0), - char(55), - char(0), - char(13), - char(0), - char(56), - char(0), - char(-109), - char(0), - char(56), - char(0), - char(-108), - char(0), - char(0), - char(0), - char(35), - char(0), - char(4), - char(0), - char(-107), - char(0), - char(4), - char(0), - char(-106), - char(0), - char(4), - char(0), - char(-105), - char(0), - char(4), - char(0), - char(-104), - char(0), - char(7), - char(0), - char(-103), - char(0), - char(7), - char(0), - char(-102), - char(0), - char(4), - char(0), - char(-101), - char(0), - char(4), - char(0), - char(-100), - char(0), - char(7), - char(0), - char(-99), - char(0), - char(4), - char(0), - char(-98), - char(0), - char(57), - char(0), - char(3), - char(0), - char(55), - char(0), - char(-97), - char(0), - char(13), - char(0), - char(-96), - char(0), - char(13), - char(0), - char(-95), - char(0), - char(58), - char(0), - char(3), - char(0), - char(55), - char(0), - char(-97), - char(0), - char(14), - char(0), - char(-96), - char(0), - char(14), - char(0), - char(-95), - char(0), - char(59), - char(0), - char(13), - char(0), - char(55), - char(0), - char(-97), - char(0), - char(18), - char(0), - char(-94), - char(0), - char(18), - char(0), - char(-93), - char(0), - char(4), - char(0), - char(-92), - char(0), - char(4), - char(0), - char(-91), - char(0), - char(4), - char(0), - char(-90), - char(0), - char(7), - char(0), - char(-89), - char(0), - char(7), - char(0), - char(-88), - char(0), - char(7), - char(0), - char(-87), - char(0), - char(7), - char(0), - char(-86), - char(0), - char(7), - char(0), - char(-85), - char(0), - char(7), - char(0), - char(-84), - char(0), - char(7), - char(0), - char(-83), - char(0), - char(60), - char(0), - char(13), - char(0), - char(55), - char(0), - char(-97), - char(0), - char(17), - char(0), - char(-94), - char(0), - char(17), - char(0), - char(-93), - char(0), - char(4), - char(0), - char(-92), - char(0), - char(4), - char(0), - char(-91), - char(0), - char(4), - char(0), - char(-90), - char(0), - char(7), - char(0), - char(-89), - char(0), - char(7), - char(0), - char(-88), - char(0), - char(7), - char(0), - char(-87), - char(0), - char(7), - char(0), - char(-86), - char(0), - char(7), - char(0), - char(-85), - char(0), - char(7), - char(0), - char(-84), - char(0), - char(7), - char(0), - char(-83), - char(0), - char(61), - char(0), - char(11), - char(0), - char(55), - char(0), - char(-97), - char(0), - char(17), - char(0), - char(-94), - char(0), - char(17), - char(0), - char(-93), - char(0), - char(7), - char(0), - char(-82), - char(0), - char(7), - char(0), - char(-81), - char(0), - char(7), - char(0), - char(-80), - char(0), - char(7), - char(0), - char(-85), - char(0), - char(7), - char(0), - char(-84), - char(0), - char(7), - char(0), - char(-83), - char(0), - char(7), - char(0), - char(-79), - char(0), - char(0), - char(0), - char(21), - char(0), - char(62), - char(0), - char(9), - char(0), - char(55), - char(0), - char(-97), - char(0), - char(17), - char(0), - char(-94), - char(0), - char(17), - char(0), - char(-93), - char(0), - char(13), - char(0), - char(-78), - char(0), - char(13), - char(0), - char(-77), - char(0), - char(13), - char(0), - char(-76), - char(0), - char(13), - char(0), - char(-75), - char(0), - char(4), - char(0), - char(-74), - char(0), - char(4), - char(0), - char(-73), - char(0), - char(63), - char(0), - char(5), - char(0), - char(62), - char(0), - char(-72), - char(0), - char(4), - char(0), - char(-71), - char(0), - char(7), - char(0), - char(-70), - char(0), - char(7), - char(0), - char(-69), - char(0), - char(7), - char(0), - char(-68), - char(0), - char(64), - char(0), - char(9), - char(0), - char(55), - char(0), - char(-97), - char(0), - char(17), - char(0), - char(-94), - char(0), - char(17), - char(0), - char(-93), - char(0), - char(7), - char(0), - char(-78), - char(0), - char(7), - char(0), - char(-77), - char(0), - char(7), - char(0), - char(-76), - char(0), - char(7), - char(0), - char(-75), - char(0), - char(4), - char(0), - char(-74), - char(0), - char(4), - char(0), - char(-73), - char(0), - char(49), - char(0), - char(22), - char(0), - char(8), - char(0), - char(-67), - char(0), - char(8), - char(0), - char(-79), - char(0), - char(8), - char(0), - char(110), - char(0), - char(8), - char(0), - char(-66), - char(0), - char(8), - char(0), - char(112), - char(0), - char(8), - char(0), - char(-65), - char(0), - char(8), - char(0), - char(-64), - char(0), - char(8), - char(0), - char(-63), - char(0), - char(8), - char(0), - char(-62), - char(0), - char(8), - char(0), - char(-61), - char(0), - char(8), - char(0), - char(-60), - char(0), - char(8), - char(0), - char(-59), - char(0), - char(8), - char(0), - char(-58), - char(0), - char(8), - char(0), - char(-57), - char(0), - char(8), - char(0), - char(-56), - char(0), - char(8), - char(0), - char(-55), - char(0), - char(4), - char(0), - char(-54), - char(0), - char(4), - char(0), - char(-53), - char(0), - char(4), - char(0), - char(-52), - char(0), - char(4), - char(0), - char(-51), - char(0), - char(4), - char(0), - char(-50), - char(0), - char(0), - char(0), - char(37), - char(0), - char(51), - char(0), - char(22), - char(0), - char(7), - char(0), - char(-67), - char(0), - char(7), - char(0), - char(-79), - char(0), - char(7), - char(0), - char(110), - char(0), - char(7), - char(0), - char(-66), - char(0), - char(7), - char(0), - char(112), - char(0), - char(7), - char(0), - char(-65), - char(0), - char(7), - char(0), - char(-64), - char(0), - char(7), - char(0), - char(-63), - char(0), - char(7), - char(0), - char(-62), - char(0), - char(7), - char(0), - char(-61), - char(0), - char(7), - char(0), - char(-60), - char(0), - char(7), - char(0), - char(-59), - char(0), - char(7), - char(0), - char(-58), - char(0), - char(7), - char(0), - char(-57), - char(0), - char(7), - char(0), - char(-56), - char(0), - char(7), - char(0), - char(-55), - char(0), - char(4), - char(0), - char(-54), - char(0), - char(4), - char(0), - char(-53), - char(0), - char(4), - char(0), - char(-52), - char(0), - char(4), - char(0), - char(-51), - char(0), - char(4), - char(0), - char(-50), - char(0), - char(0), - char(0), - char(37), - char(0), - char(65), - char(0), - char(4), - char(0), - char(7), - char(0), - char(-49), - char(0), - char(7), - char(0), - char(-48), - char(0), - char(7), - char(0), - char(-47), - char(0), - char(4), - char(0), - char(78), - char(0), - char(66), - char(0), - char(10), - char(0), - char(65), - char(0), - char(-46), - char(0), - char(13), - char(0), - char(-45), - char(0), - char(13), - char(0), - char(-44), - char(0), - char(13), - char(0), - char(-43), - char(0), - char(13), - char(0), - char(-42), - char(0), - char(13), - char(0), - char(-41), - char(0), - char(7), - char(0), - char(-121), - char(0), - char(7), - char(0), - char(-40), - char(0), - char(4), - char(0), - char(-39), - char(0), - char(4), - char(0), - char(53), - char(0), - char(67), - char(0), - char(4), - char(0), - char(65), - char(0), - char(-46), - char(0), - char(4), - char(0), - char(-38), - char(0), - char(7), - char(0), - char(-37), - char(0), - char(4), - char(0), - char(-36), - char(0), - char(68), - char(0), - char(4), - char(0), - char(13), - char(0), - char(-41), - char(0), - char(65), - char(0), - char(-46), - char(0), - char(4), - char(0), - char(-35), - char(0), - char(7), - char(0), - char(-34), - char(0), - char(69), - char(0), - char(7), - char(0), - char(13), - char(0), - char(-33), - char(0), - char(65), - char(0), - char(-46), - char(0), - char(4), - char(0), - char(-32), - char(0), - char(7), - char(0), - char(-31), - char(0), - char(7), - char(0), - char(-30), - char(0), - char(7), - char(0), - char(-29), - char(0), - char(4), - char(0), - char(53), - char(0), - char(70), - char(0), - char(6), - char(0), - char(15), - char(0), - char(-28), - char(0), - char(13), - char(0), - char(-30), - char(0), - char(13), - char(0), - char(-27), - char(0), - char(56), - char(0), - char(-26), - char(0), - char(4), - char(0), - char(-25), - char(0), - char(7), - char(0), - char(-29), - char(0), - char(71), - char(0), - char(26), - char(0), - char(4), - char(0), - char(-24), - char(0), - char(7), - char(0), - char(-23), - char(0), - char(7), - char(0), - char(-79), - char(0), - char(7), - char(0), - char(-22), - char(0), - char(7), - char(0), - char(-21), - char(0), - char(7), - char(0), - char(-20), - char(0), - char(7), - char(0), - char(-19), - char(0), - char(7), - char(0), - char(-18), - char(0), - char(7), - char(0), - char(-17), - char(0), - char(7), - char(0), - char(-16), - char(0), - char(7), - char(0), - char(-15), - char(0), - char(7), - char(0), - char(-14), - char(0), - char(7), - char(0), - char(-13), - char(0), - char(7), - char(0), - char(-12), - char(0), - char(7), - char(0), - char(-11), - char(0), - char(7), - char(0), - char(-10), - char(0), - char(7), - char(0), - char(-9), - char(0), - char(7), - char(0), - char(-8), - char(0), - char(7), - char(0), - char(-7), - char(0), - char(7), - char(0), - char(-6), - char(0), - char(7), - char(0), - char(-5), - char(0), - char(4), - char(0), - char(-4), - char(0), - char(4), - char(0), - char(-3), - char(0), - char(4), - char(0), - char(-2), - char(0), - char(4), - char(0), - char(-1), - char(0), - char(4), - char(0), - char(117), - char(0), - char(72), - char(0), - char(12), - char(0), - char(15), - char(0), - char(0), - char(1), - char(15), - char(0), - char(1), - char(1), - char(15), - char(0), - char(2), - char(1), - char(13), - char(0), - char(3), - char(1), - char(13), - char(0), - char(4), - char(1), - char(7), - char(0), - char(5), - char(1), - char(4), - char(0), - char(6), - char(1), - char(4), - char(0), - char(7), - char(1), - char(4), - char(0), - char(8), - char(1), - char(4), - char(0), - char(9), - char(1), - char(7), - char(0), - char(-31), - char(0), - char(4), - char(0), - char(53), - char(0), - char(73), - char(0), - char(27), - char(0), - char(17), - char(0), - char(10), - char(1), - char(15), - char(0), - char(11), - char(1), - char(15), - char(0), - char(12), - char(1), - char(13), - char(0), - char(3), - char(1), - char(13), - char(0), - char(13), - char(1), - char(13), - char(0), - char(14), - char(1), - char(13), - char(0), - char(15), - char(1), - char(13), - char(0), - char(16), - char(1), - char(13), - char(0), - char(17), - char(1), - char(4), - char(0), - char(18), - char(1), - char(7), - char(0), - char(19), - char(1), - char(4), - char(0), - char(20), - char(1), - char(4), - char(0), - char(21), - char(1), - char(4), - char(0), - char(22), - char(1), - char(7), - char(0), - char(23), - char(1), - char(7), - char(0), - char(24), - char(1), - char(4), - char(0), - char(25), - char(1), - char(4), - char(0), - char(26), - char(1), - char(7), - char(0), - char(27), - char(1), - char(7), - char(0), - char(28), - char(1), - char(7), - char(0), - char(29), - char(1), - char(7), - char(0), - char(30), - char(1), - char(7), - char(0), - char(31), - char(1), - char(7), - char(0), - char(32), - char(1), - char(4), - char(0), - char(33), - char(1), - char(4), - char(0), - char(34), - char(1), - char(4), - char(0), - char(35), - char(1), - char(74), - char(0), - char(12), - char(0), - char(9), - char(0), - char(36), - char(1), - char(9), - char(0), - char(37), - char(1), - char(13), - char(0), - char(38), - char(1), - char(7), - char(0), - char(39), - char(1), - char(7), - char(0), - char(-63), - char(0), - char(7), - char(0), - char(40), - char(1), - char(4), - char(0), - char(41), - char(1), - char(13), - char(0), - char(42), - char(1), - char(4), - char(0), - char(43), - char(1), - char(4), - char(0), - char(44), - char(1), - char(4), - char(0), - char(45), - char(1), - char(4), - char(0), - char(53), - char(0), - char(75), - char(0), - char(19), - char(0), - char(47), - char(0), - char(125), - char(0), - char(72), - char(0), - char(46), - char(1), - char(65), - char(0), - char(47), - char(1), - char(66), - char(0), - char(48), - char(1), - char(67), - char(0), - char(49), - char(1), - char(68), - char(0), - char(50), - char(1), - char(69), - char(0), - char(51), - char(1), - char(70), - char(0), - char(52), - char(1), - char(73), - char(0), - char(53), - char(1), - char(74), - char(0), - char(54), - char(1), - char(4), - char(0), - char(55), - char(1), - char(4), - char(0), - char(21), - char(1), - char(4), - char(0), - char(56), - char(1), - char(4), - char(0), - char(57), - char(1), - char(4), - char(0), - char(58), - char(1), - char(4), - char(0), - char(59), - char(1), - char(4), - char(0), - char(60), - char(1), - char(4), - char(0), - char(61), - char(1), - char(71), - char(0), - char(62), - char(1), -}; -int b3s_bulletDNAlen64 = sizeof(b3s_bulletDNAstr64); diff --git a/thirdparty/bullet/Bullet3Serialize/Bullet2FileLoader/b3Serializer.h b/thirdparty/bullet/Bullet3Serialize/Bullet2FileLoader/b3Serializer.h deleted file mode 100644 index d9e153e238..0000000000 --- a/thirdparty/bullet/Bullet3Serialize/Bullet2FileLoader/b3Serializer.h +++ /dev/null @@ -1,601 +0,0 @@ -/* -Bullet Continuous Collision Detection and Physics Library -Copyright (c) 2003-2009 Erwin Coumans http://bulletphysics.org - -This software is provided 'as-is', without any express or implied warranty. -In no event will the authors be held liable for any damages arising from the use of this software. -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it freely, -subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. -2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. -3. This notice may not be removed or altered from any source distribution. -*/ - -#ifndef B3_SERIALIZER_H -#define B3_SERIALIZER_H - -#include "Bullet3Common/b3Scalar.h" // has definitions like B3_FORCE_INLINE -#include "Bullet3Common/b3StackAlloc.h" -#include "Bullet3Common/b3HashMap.h" - -#if !defined(__CELLOS_LV2__) && !defined(__MWERKS__) -#include <memory.h> -#endif -#include <string.h> - -extern char b3s_bulletDNAstr[]; -extern int b3s_bulletDNAlen; -extern char b3s_bulletDNAstr64[]; -extern int b3s_bulletDNAlen64; - -B3_FORCE_INLINE int b3StrLen(const char* str) -{ - if (!str) - return (0); - int len = 0; - - while (*str != 0) - { - str++; - len++; - } - - return len; -} - -class b3Chunk -{ -public: - int m_chunkCode; - int m_length; - void* m_oldPtr; - int m_dna_nr; - int m_number; -}; - -enum b3SerializationFlags -{ - B3_SERIALIZE_NO_BVH = 1, - B3_SERIALIZE_NO_TRIANGLEINFOMAP = 2, - B3_SERIALIZE_NO_DUPLICATE_ASSERT = 4 -}; - -class b3Serializer -{ -public: - virtual ~b3Serializer() {} - - virtual const unsigned char* getBufferPointer() const = 0; - - virtual int getCurrentBufferSize() const = 0; - - virtual b3Chunk* allocate(size_t size, int numElements) = 0; - - virtual void finalizeChunk(b3Chunk* chunk, const char* structType, int chunkCode, void* oldPtr) = 0; - - virtual void* findPointer(void* oldPtr) = 0; - - virtual void* getUniquePointer(void* oldPtr) = 0; - - virtual void startSerialization() = 0; - - virtual void finishSerialization() = 0; - - virtual const char* findNameForPointer(const void* ptr) const = 0; - - virtual void registerNameForPointer(const void* ptr, const char* name) = 0; - - virtual void serializeName(const char* ptr) = 0; - - virtual int getSerializationFlags() const = 0; - - virtual void setSerializationFlags(int flags) = 0; -}; - -#define B3_HEADER_LENGTH 12 -#if defined(__sgi) || defined(__sparc) || defined(__sparc__) || defined(__PPC__) || defined(__ppc__) || defined(__BIG_ENDIAN__) -#define B3_MAKE_ID(a, b, c, d) ((int)(a) << 24 | (int)(b) << 16 | (c) << 8 | (d)) -#else -#define B3_MAKE_ID(a, b, c, d) ((int)(d) << 24 | (int)(c) << 16 | (b) << 8 | (a)) -#endif - -#define B3_SOFTBODY_CODE B3_MAKE_ID('S', 'B', 'D', 'Y') -#define B3_COLLISIONOBJECT_CODE B3_MAKE_ID('C', 'O', 'B', 'J') -#define B3_RIGIDBODY_CODE B3_MAKE_ID('R', 'B', 'D', 'Y') -#define B3_CONSTRAINT_CODE B3_MAKE_ID('C', 'O', 'N', 'S') -#define B3_BOXSHAPE_CODE B3_MAKE_ID('B', 'O', 'X', 'S') -#define B3_QUANTIZED_BVH_CODE B3_MAKE_ID('Q', 'B', 'V', 'H') -#define B3_TRIANLGE_INFO_MAP B3_MAKE_ID('T', 'M', 'A', 'P') -#define B3_SHAPE_CODE B3_MAKE_ID('S', 'H', 'A', 'P') -#define B3_ARRAY_CODE B3_MAKE_ID('A', 'R', 'A', 'Y') -#define B3_SBMATERIAL_CODE B3_MAKE_ID('S', 'B', 'M', 'T') -#define B3_SBNODE_CODE B3_MAKE_ID('S', 'B', 'N', 'D') -#define B3_DYNAMICSWORLD_CODE B3_MAKE_ID('D', 'W', 'L', 'D') -#define B3_DNA_CODE B3_MAKE_ID('D', 'N', 'A', '1') - -struct b3PointerUid -{ - union { - void* m_ptr; - int m_uniqueIds[2]; - }; -}; - -///The b3DefaultSerializer is the main Bullet serialization class. -///The constructor takes an optional argument for backwards compatibility, it is recommended to leave this empty/zero. -class b3DefaultSerializer : public b3Serializer -{ - b3AlignedObjectArray<char*> mTypes; - b3AlignedObjectArray<short*> mStructs; - b3AlignedObjectArray<short> mTlens; - b3HashMap<b3HashInt, int> mStructReverse; - b3HashMap<b3HashString, int> mTypeLookup; - - b3HashMap<b3HashPtr, void*> m_chunkP; - - b3HashMap<b3HashPtr, const char*> m_nameMap; - - b3HashMap<b3HashPtr, b3PointerUid> m_uniquePointers; - int m_uniqueIdGenerator; - - int m_totalSize; - unsigned char* m_buffer; - int m_currentSize; - void* m_dna; - int m_dnaLength; - - int m_serializationFlags; - - b3AlignedObjectArray<b3Chunk*> m_chunkPtrs; - -protected: - virtual void* findPointer(void* oldPtr) - { - void** ptr = m_chunkP.find(oldPtr); - if (ptr && *ptr) - return *ptr; - return 0; - } - - void writeDNA() - { - b3Chunk* dnaChunk = allocate(m_dnaLength, 1); - memcpy(dnaChunk->m_oldPtr, m_dna, m_dnaLength); - finalizeChunk(dnaChunk, "DNA1", B3_DNA_CODE, m_dna); - } - - int getReverseType(const char* type) const - { - b3HashString key(type); - const int* valuePtr = mTypeLookup.find(key); - if (valuePtr) - return *valuePtr; - - return -1; - } - - void initDNA(const char* bdnaOrg, int dnalen) - { - ///was already initialized - if (m_dna) - return; - - int littleEndian = 1; - littleEndian = ((char*)&littleEndian)[0]; - - m_dna = b3AlignedAlloc(dnalen, 16); - memcpy(m_dna, bdnaOrg, dnalen); - m_dnaLength = dnalen; - - int* intPtr = 0; - short* shtPtr = 0; - char* cp = 0; - int dataLen = 0; - intPtr = (int*)m_dna; - - /* - SDNA (4 bytes) (magic number) - NAME (4 bytes) - <nr> (4 bytes) amount of names (int) - <string> - <string> - */ - - if (strncmp((const char*)m_dna, "SDNA", 4) == 0) - { - // skip ++ NAME - intPtr++; - intPtr++; - } - - // Parse names - if (!littleEndian) - *intPtr = b3SwapEndian(*intPtr); - - dataLen = *intPtr; - - intPtr++; - - cp = (char*)intPtr; - int i; - for (i = 0; i < dataLen; i++) - { - while (*cp) cp++; - cp++; - } - cp = b3AlignPointer(cp, 4); - - /* - TYPE (4 bytes) - <nr> amount of types (int) - <string> - <string> - */ - - intPtr = (int*)cp; - b3Assert(strncmp(cp, "TYPE", 4) == 0); - intPtr++; - - if (!littleEndian) - *intPtr = b3SwapEndian(*intPtr); - - dataLen = *intPtr; - intPtr++; - - cp = (char*)intPtr; - for (i = 0; i < dataLen; i++) - { - mTypes.push_back(cp); - while (*cp) cp++; - cp++; - } - - cp = b3AlignPointer(cp, 4); - - /* - TLEN (4 bytes) - <len> (short) the lengths of types - <len> - */ - - // Parse type lens - intPtr = (int*)cp; - b3Assert(strncmp(cp, "TLEN", 4) == 0); - intPtr++; - - dataLen = (int)mTypes.size(); - - shtPtr = (short*)intPtr; - for (i = 0; i < dataLen; i++, shtPtr++) - { - if (!littleEndian) - shtPtr[0] = b3SwapEndian(shtPtr[0]); - mTlens.push_back(shtPtr[0]); - } - - if (dataLen & 1) shtPtr++; - - /* - STRC (4 bytes) - <nr> amount of structs (int) - <typenr> - <nr_of_elems> - <typenr> - <namenr> - <typenr> - <namenr> - */ - - intPtr = (int*)shtPtr; - cp = (char*)intPtr; - b3Assert(strncmp(cp, "STRC", 4) == 0); - intPtr++; - - if (!littleEndian) - *intPtr = b3SwapEndian(*intPtr); - dataLen = *intPtr; - intPtr++; - - shtPtr = (short*)intPtr; - for (i = 0; i < dataLen; i++) - { - mStructs.push_back(shtPtr); - - if (!littleEndian) - { - shtPtr[0] = b3SwapEndian(shtPtr[0]); - shtPtr[1] = b3SwapEndian(shtPtr[1]); - - int len = shtPtr[1]; - shtPtr += 2; - - for (int a = 0; a < len; a++, shtPtr += 2) - { - shtPtr[0] = b3SwapEndian(shtPtr[0]); - shtPtr[1] = b3SwapEndian(shtPtr[1]); - } - } - else - { - shtPtr += (2 * shtPtr[1]) + 2; - } - } - - // build reverse lookups - for (i = 0; i < (int)mStructs.size(); i++) - { - short* strc = mStructs.at(i); - mStructReverse.insert(strc[0], i); - mTypeLookup.insert(b3HashString(mTypes[strc[0]]), i); - } - } - -public: - b3DefaultSerializer(int totalSize = 0) - : m_totalSize(totalSize), - m_currentSize(0), - m_dna(0), - m_dnaLength(0), - m_serializationFlags(0) - { - m_buffer = m_totalSize ? (unsigned char*)b3AlignedAlloc(totalSize, 16) : 0; - - const bool VOID_IS_8 = ((sizeof(void*) == 8)); - -#ifdef B3_INTERNAL_UPDATE_SERIALIZATION_STRUCTURES - if (VOID_IS_8) - { -#if _WIN64 - initDNA((const char*)b3s_bulletDNAstr64, b3s_bulletDNAlen64); -#else - b3Assert(0); -#endif - } - else - { -#ifndef _WIN64 - initDNA((const char*)b3s_bulletDNAstr, b3s_bulletDNAlen); -#else - b3Assert(0); -#endif - } - -#else //B3_INTERNAL_UPDATE_SERIALIZATION_STRUCTURES - if (VOID_IS_8) - { - initDNA((const char*)b3s_bulletDNAstr64, b3s_bulletDNAlen64); - } - else - { - initDNA((const char*)b3s_bulletDNAstr, b3s_bulletDNAlen); - } -#endif //B3_INTERNAL_UPDATE_SERIALIZATION_STRUCTURES - } - - virtual ~b3DefaultSerializer() - { - if (m_buffer) - b3AlignedFree(m_buffer); - if (m_dna) - b3AlignedFree(m_dna); - } - - void writeHeader(unsigned char* buffer) const - { -#ifdef B3_USE_DOUBLE_PRECISION - memcpy(buffer, "BULLETd", 7); -#else - memcpy(buffer, "BULLETf", 7); -#endif //B3_USE_DOUBLE_PRECISION - - int littleEndian = 1; - littleEndian = ((char*)&littleEndian)[0]; - - if (sizeof(void*) == 8) - { - buffer[7] = '-'; - } - else - { - buffer[7] = '_'; - } - - if (littleEndian) - { - buffer[8] = 'v'; - } - else - { - buffer[8] = 'V'; - } - - buffer[9] = '2'; - buffer[10] = '8'; - buffer[11] = '1'; - } - - virtual void startSerialization() - { - m_uniqueIdGenerator = 1; - if (m_totalSize) - { - unsigned char* buffer = internalAlloc(B3_HEADER_LENGTH); - writeHeader(buffer); - } - } - - virtual void finishSerialization() - { - writeDNA(); - - //if we didn't pre-allocate a buffer, we need to create a contiguous buffer now - int mysize = 0; - if (!m_totalSize) - { - if (m_buffer) - b3AlignedFree(m_buffer); - - m_currentSize += B3_HEADER_LENGTH; - m_buffer = (unsigned char*)b3AlignedAlloc(m_currentSize, 16); - - unsigned char* currentPtr = m_buffer; - writeHeader(m_buffer); - currentPtr += B3_HEADER_LENGTH; - mysize += B3_HEADER_LENGTH; - for (int i = 0; i < m_chunkPtrs.size(); i++) - { - int curLength = sizeof(b3Chunk) + m_chunkPtrs[i]->m_length; - memcpy(currentPtr, m_chunkPtrs[i], curLength); - b3AlignedFree(m_chunkPtrs[i]); - currentPtr += curLength; - mysize += curLength; - } - } - - mTypes.clear(); - mStructs.clear(); - mTlens.clear(); - mStructReverse.clear(); - mTypeLookup.clear(); - m_chunkP.clear(); - m_nameMap.clear(); - m_uniquePointers.clear(); - m_chunkPtrs.clear(); - } - - virtual void* getUniquePointer(void* oldPtr) - { - if (!oldPtr) - return 0; - - b3PointerUid* uptr = (b3PointerUid*)m_uniquePointers.find(oldPtr); - if (uptr) - { - return uptr->m_ptr; - } - m_uniqueIdGenerator++; - - b3PointerUid uid; - uid.m_uniqueIds[0] = m_uniqueIdGenerator; - uid.m_uniqueIds[1] = m_uniqueIdGenerator; - m_uniquePointers.insert(oldPtr, uid); - return uid.m_ptr; - } - - virtual const unsigned char* getBufferPointer() const - { - return m_buffer; - } - - virtual int getCurrentBufferSize() const - { - return m_currentSize; - } - - virtual void finalizeChunk(b3Chunk* chunk, const char* structType, int chunkCode, void* oldPtr) - { - if (!(m_serializationFlags & B3_SERIALIZE_NO_DUPLICATE_ASSERT)) - { - b3Assert(!findPointer(oldPtr)); - } - - chunk->m_dna_nr = getReverseType(structType); - - chunk->m_chunkCode = chunkCode; - - void* uniquePtr = getUniquePointer(oldPtr); - - m_chunkP.insert(oldPtr, uniquePtr); //chunk->m_oldPtr); - chunk->m_oldPtr = uniquePtr; //oldPtr; - } - - virtual unsigned char* internalAlloc(size_t size) - { - unsigned char* ptr = 0; - - if (m_totalSize) - { - ptr = m_buffer + m_currentSize; - m_currentSize += int(size); - b3Assert(m_currentSize < m_totalSize); - } - else - { - ptr = (unsigned char*)b3AlignedAlloc(size, 16); - m_currentSize += int(size); - } - return ptr; - } - - virtual b3Chunk* allocate(size_t size, int numElements) - { - unsigned char* ptr = internalAlloc(int(size) * numElements + sizeof(b3Chunk)); - - unsigned char* data = ptr + sizeof(b3Chunk); - - b3Chunk* chunk = (b3Chunk*)ptr; - chunk->m_chunkCode = 0; - chunk->m_oldPtr = data; - chunk->m_length = int(size) * numElements; - chunk->m_number = numElements; - - m_chunkPtrs.push_back(chunk); - - return chunk; - } - - virtual const char* findNameForPointer(const void* ptr) const - { - const char* const* namePtr = m_nameMap.find(ptr); - if (namePtr && *namePtr) - return *namePtr; - return 0; - } - - virtual void registerNameForPointer(const void* ptr, const char* name) - { - m_nameMap.insert(ptr, name); - } - - virtual void serializeName(const char* name) - { - if (name) - { - //don't serialize name twice - if (findPointer((void*)name)) - return; - - int len = b3StrLen(name); - if (len) - { - int newLen = len + 1; - int padding = ((newLen + 3) & ~3) - newLen; - newLen += padding; - - //serialize name string now - b3Chunk* chunk = allocate(sizeof(char), newLen); - char* destinationName = (char*)chunk->m_oldPtr; - for (int i = 0; i < len; i++) - { - destinationName[i] = name[i]; - } - destinationName[len] = 0; - finalizeChunk(chunk, "char", B3_ARRAY_CODE, (void*)name); - } - } - } - - virtual int getSerializationFlags() const - { - return m_serializationFlags; - } - - virtual void setSerializationFlags(int flags) - { - m_serializationFlags = flags; - } -}; - -#endif //B3_SERIALIZER_H |